Merge tag 'upstream/1.5.0.1+git20150316' into debian-experimental

Upstream version 1.5.0.1+git20150316
diff --git a/ChangeLog b/ChangeLog
index 2ad7419..d1b0644 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,790 +1,9 @@
-=== release 1.4.5 ===
-
-2014-12-18  Sebastian Dröge <slomo@coaxion.net>
-
-	* configure.ac:
-	  releasing 1.4.5
-
-2014-12-16 12:21:59 +0100  Wim Taymans <wtaymans@redhat.com>
-
-	* gst/gstbufferpool.c:
-	  bufferpool: log reason for discarded buffers
-	  PERFORMANCE log the reason why a buffer could not be recycled in the
-	  bufferpool.
-
-2014-10-07 16:44:45 +0200  Edward Hervey <bilboed@bilboed.com>
-
-	* libs/gst/base/gstbasesink.c:
-	  basesink: clamp reported position based on direction
-	  When using a negative rate (rate being segment.rate * segment.applied_rate),
-	  we will end up reporting decreasing positions, therefore adjust the clamping
-	  against last reported value accordingly.
-	  Fixes positions getting properly reported with applied_rate < 0.0
-	  https://bugzilla.gnome.org/show_bug.cgi?id=738092
-
-2014-11-28 14:15:30 -0300  Thiago Santos <thiago.sousa.santos@collabora.com>
-
-	* libs/gst/base/gstbaseparse.c:
-	  baseparse: update the duration variable before emitting the bus
-	  Otherwise the application might still get the old value if it asks
-	  between the message and the real update.
-
-2014-11-28 16:25:02 +0100  Edward Hervey <bilboed@bilboed.com>
-
-	* gst/gstelement.c:
-	  element: Fix doc and default implementation of send_event
-	  The documentation states that gst_element_send_event is to "send an event
-	  to an element".
-	  Therefore we *send* upstream events to a source pad and downstream events
-	  to a sink pad
-
-2014-11-28 11:16:00 +0100  Edward Hervey <bilboed@bilboed.com>
-
-	* gst/gstelement.c:
-	  element: Figure default send_event direction handling
-	  If we get a downstream event we want to send it to a random SINK pad
-	  (and vice-versa).
-
-2014-11-23 05:45:24 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-	* plugins/elements/gstqueue2.c:
-	  queue2: percentage is relative to high-percent
-	  When comparing percentage values, compare with 0-100 scale as it
-	  has already been made relative to 0-high_percent, otherwise we mark
-	  the queue as not buffering and report a 50% to the user. This leads to
-	  a buffering stall as the user assumes the queue is still buffering but
-	  it thinks it isn't.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736969
-
-2014-11-23 05:42:51 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: percentage is an absolute value
-	  multiqueue's queues stored percent value is the percentage from 0
-	  to 100 (max-size-*) and should be compared with the requested limit
-	  (high_percentage) set by the user and not with 100% to check if
-	  buffering should stop. Otherwise we are only stopping buffering when the
-	  queue gets completely full.
-
-2014-11-20 13:34:32 +0100  Wim Taymans <wtaymans@redhat.com>
-
-	* gst/gststructure.c:
-	* tests/check/gst/gststructure.c:
-	  structure: don't overread input when searching for "
-	  When searching for the string terminator don't read past the ending
-	  0-byte when escaping characters.
-	  Add unit test for various escaping cases.
-
-2014-11-03 17:46:57 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-	* gst/gstpad.c:
-	  pad: fail dropped queries
-	  Previously, dropping a query from a pad probe would deem the
-	  query succeeded, and the caller might then assume the query's
-	  results are valid, and thus dereference an invalid object
-	  such as a GstCaps.
-	  We now assume dropped queries did not succeed. Dropped events
-	  and buffers are still deemed a success.
-
-2014-11-12 11:30:51 +0100  Haakon Sporsheim <haakon.sporsheim@gmail.com>
-
-	* gst/gsttask.c:
-	* tests/check/gst/gsttask.c:
-	  task: Fix pause/stop race condition
-	  If a task thread is calling pause on it self and the
-	  controlling/"main" thread stops the task, it could end in a race
-	  where gst_task_func loops and then checks for paused after the
-	  controlling thread just changed the task state to stopped.
-	  Hence the task would actually call func again even though it was
-	  both paused and stopped.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=740001
-
-=== release 1.4.4 ===
-
-2014-11-06 12:51:42 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-coreelements.xml:
-	* gstreamer.doap:
-	* win32/common/config.h:
-	* win32/common/gstversion.h:
-	  Release 1.4.4
-
-2014-11-06 12:25:58 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/af.po:
-	* po/az.po:
-	* po/be.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/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/ru.po:
-	* po/rw.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	* po/zh_TW.po:
-	  Update .po files
-
-2014-10-24 12:51:07 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* libs/gst/base/gstbasesink.c:
-	  basesink: don't unlock mutex that is not locked
-	  Fixes 'Attempt to unlock mutex that was not locked'
-	  warning with newer GLibs when sink is shut down in
-	  certain situations. Triggered by the decodebin
-	  test_reuse_without_decoders unit test in -base
-	  sometimes, esp. on slower machines.
-
-2014-10-16 10:13:14 +0400  Andrei Sarakeev <sarakusha@gmail.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: Wake up any waiting streams if the current one goes EOS
-	  Otherwise we might have unlinked streams waiting.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=738198
-
-2014-10-08 15:37:37 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
-	* docs/pwg/advanced-negotiation.xml:
-	  docs: pwg: fix typo in 'Dynamic negotiation' section
-	  The point of this example is to show how to set caps
-	  on the source pad once it has been set on the sink pad.
-	  So, in passthrough mode, the caps is just copied to the
-	  source pad.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=738153
-
-2014-10-06 13:38:21 +0200  Nicolas Huet <nicolas.huet@parrot.com>
-
-	* gst/gstsystemclock.c:
-	  systemclock: fix multi-thread entry status issue
-	  Running two threads, one executing the timer and one unscheduling it, the
-	  unscheduled status set by the second thread is sometimes overwritten by the
-	  first one.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737999
-
-2014-09-25 16:21:51 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* tests/check/libs/baseparse.c:
-	  tests: fix caps leak in baseparse unit test
-
-2014-10-03 13:14:25 +0200  Matej Knopp <matej.knopp@gmail.com>
-
-	* tests/check/libs/baseparse.c:
-	  tests: baseparse: set_sink_caps vfunc should't take ownership of the caps
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737762
-
-2014-10-08 09:37:41 -0700  Aleix Conchillo Flaqué <aleix@oblong.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: don't lock multiqueue when pushing serialized queries
-	  If we are pushing a serialized query into a queue and the queue is
-	  filled, we will end in a deadlock. We need to release the lock before
-	  pushing and acquire it again afterward.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737794
-
-2014-10-02 14:55:22 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstqueue.c:
-	  queue: Add missing break in switch
-
-2014-09-27 20:10:34 +0200  Matej Knopp <matej.knopp@gmail.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: update segment position on GAP events to calculate levels properly
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737498
-
-2014-10-02 11:00:32 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstqueue.c:
-	  queue: update segment position on GAP events to calculate levels properly
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737498
-
-2014-10-02 10:57:43 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstqueue2.c:
-	  queue2: update segment position on GAP events to calculate levels properly
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737498
-
-2014-10-02 10:13:28 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstcapsfilter.c:
-	  capsfilter: Push pending events before a buffer also if upstream never configured caps but we have srcpad caps already
-	  Otherwise we never send pending events downstream that arrive after we
-	  configured caps on the srcpad.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737735
-
-2014-09-24 10:11:54 +0200  Thibault Saunier <tsaunier@gnome.org>
-
-	* scripts/gst-uninstalled:
-	  scripts: Handle gst-python in gst-uninstalled
-	  https://bugzilla.gnome.org/show_bug.cgi?id=709082
-
-=== release 1.4.3 ===
-
-2014-09-24 12:19:55 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-coreelements.xml:
-	* gstreamer.doap:
-	* win32/common/config.h:
-	* win32/common/gstversion.h:
-	  Release 1.4.3
-
-2014-09-24 11:15:07 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/af.po:
-	* po/az.po:
-	* po/be.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/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/ru.po:
-	* po/rw.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	* po/zh_TW.po:
-	  Update .po files
-
-2014-06-03 14:23:30 +0200  Thibault Saunier <tsaunier@gnome.org>
-
-	* plugins/elements/gstcapsfilter.c:
-	  capsfilter: Remove EOS event from pending_event list on FLUSH_STOP
-	  https://bugzilla.gnome.org/show_bug.cgi?id=709868
-
-2014-09-22 19:05:32 +0200  Marcin Kolny <marcin.kolny@flytronic.pl>
-
-	* gst/gstdatetime.h:
-	  datetime: added missing include directives
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737133
-
-2014-09-23 14:31:29 +0200  Thibault Saunier <tsaunier@gnome.org>
-
-	* plugins/elements/gstqueue.c:
-	  queue: Do not forget to release the QUEUE_LOCK in the out_flow_error path
-	  Avoiding deadlocks!
-
-2014-09-22 09:33:04 +0200  Thibault Saunier <tsaunier@gnome.org>
-
-	* plugins/elements/gstqueue.c:
-	  queue: Do not hold GST_QUEUE_LOCK while posting ERROR messages
-	  This might create deadlocks and we need to avoid holding element
-	  specific lock while posting messages
-	  For example a deadlock will happen if while posting the message,
-	  someone connected on the bus (sync) tries to DOT the pipeline.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=737102
-
-2014-08-13 14:02:47 +0200  Thibault Saunier <tsaunier@gnome.org>
-
-	* scripts/git-update.sh:
-	  script:udpate: Try to rebase local changes when updating
-
-2014-09-19 12:02:46 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-	* plugins/elements/gstqueue2.c:
-	* plugins/elements/gstqueue2.h:
-	  queue2: do not post buffering messages holding the lock
-	  It might cause deadlocks to post messages while holding the queue2
-	  lock. To avoid this a new boolean flag is set whenever a new
-	  buffering percent is found. The message is posted after the lock
-	  is released.
-	  To make sure the buffering messages are posted in the right order, messages
-	  are posted holding another lock. This prevents 2 threads trying to post
-	  messages at the same time.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736969
-
-=== release 1.4.2 ===
-
-2014-09-19 14:19:08 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-coreelements.xml:
-	* gstreamer.doap:
-	* win32/common/config.h:
-	* win32/common/gstversion.h:
-	  Release 1.4.2
-
-2014-09-19 10:45:45 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/af.po:
-	* po/az.po:
-	* po/be.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/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/ru.po:
-	* po/rw.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	* po/zh_TW.po:
-	  Update .po files
-
-2014-09-19 00:33:58 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* docs/pwg/advanced-tagging.xml:
-	* docs/pwg/intro-basics.xml:
-	  docs: pwg: fix some links to the API docs
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736762
-
-2014-09-17 17:17:10 +0200  Ognyan Tonchev <ognyan@axis.com>
-
-	* plugins/elements/gsttypefindelement.c:
-	  typefindelement: do not leak sticky events in flush_stop
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736813
-
-2014-09-16 13:48:18 +0200  Ognyan Tonchev <ognyan@axis.com>
-
-	* gst/gstevent.c:
-	  event: add annotations to gst_event_parse_toc_select()
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736739
-
-2014-09-16 12:17:48 +0200  Ognyan Tonchev <ognyan@axis.com>
-
-	* gst/gstquery.c:
-	  query: Add annotations to gst_query_add_allocation_pool()
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736736
-
-2014-09-11 18:01:58 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	* plugins/elements/gstmultiqueue.h:
-	  multiqueue: do not post messages holding the lock
-	  It might cause deadlocks to post messages while holding the multiqueue
-	  lock. To avoid this a new boolean flag is set whenever a new buffering percent
-	  is found. The message is posted after the lock can be released.
-	  To make sure the buffering messages are posted in the right order, messages
-	  are posted holding another lock. This prevents 2 threads trying to post
-	  messages at the same time.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736295
-
-2014-09-15 16:38:17 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
-
-	* libs/gst/base/gstbasesrc.c:
-	  basesrc: handle reference in set_allocation rather than in prepare_allocation
-	  Otherwise we can forget to unref objects in error cases.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736680
-
-2014-09-15 13:06:40 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* libs/gst/check/gstcheck.c:
-	  check: Use the name parameter of gst_check_setup_src_pad_by_name() and the sink variant
-	  This was hardcoded to "sink" / "src" by accident in previous refactoring.
-
-2014-09-10 14:53:00 +0200  Ognyan Tonchev <ognyan@axis.com>
-
-	* gst/gstquery.c:
-	  query: add annotations to gst_query_set_nth_allocation_pool()
-	  https://bugzilla.gnome.org//show_bug.cgi?id=736424
-
-2014-09-11 09:35:17 +0200  Rémi Lefèvre <remi.lefevre@parrot.com>
-
-	* plugins/elements/gstvalve.c:
-	  valve: fix typo in description
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736455
-
-2014-08-27 17:06:57 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
-
-	* plugins/elements/gstoutputselector.c:
-	  output-selector: Send all events to active src pad and EOS to all src pads
-	  Fixes tests/icles/output-selector-test
-	  https://bugzilla.gnome.org/show_bug.cgi?id=729811
-
-2014-09-03 17:38:16 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* gst/gstdevicemonitor.c:
-	  devicemonitor: fix typo in sample code in docs
-	  https://bugzilla.gnome.org/show_bug.cgi?id=735975
-
-2014-08-07 12:18:04 +0200  Thibault Saunier <thibault.saunier@collabora.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: Not post BUFFERING message if one of the singlequeue doesn't need it
-	  Imagine the following 'pipeline'
-	  --------------
-	  p1/| 'fullqueue'  |--- 'laggy' downstream
-	  ---------  / |              |
-	  -| demuxer |   | multiqueue   |
-	  ---------  \ |              |
-	  p2\| 'emptyqueue' |--- 'fast' downstream
-	  --------------
-	  In the case downstream of one single queue (fullqueue) has (a lot of) latency
-	  (for example for reverse playback with video), we can end up having the other
-	  SingleQueue (emptyqueue) emptied, before that fullqueue gets
-	  unblocked. In the meantime, the demuxer tries to push on fullqueue, and
-	  is blocking there.
-	  In that case the current code will post a BUFFERING message on the bus when
-	  emptyqueue gets emptied, that leads to the application setting the pipeline state to
-	  PAUSED. So now we end up in a situation where 'laggy downstream' is
-	  prerolled and will not unblock anymore because the pipeline is set to
-	  PAUSED, the fullequeue does not have a chance to be emptied and
-	  the emptyqueue can not get filled anymore so no more BUFERRING message
-	  will be posted and the pipeline is stucked in PAUSED for the eternity.
-	  Making sure that we do not try to "buffer" if one of the single queue
-	  does not need buffering, prevents this situtation from happening though it lets the
-	  oportunity for buffering in all other cases.
-	  That implements a new logic where we need all singlequeue to need
-	  buffering for the multiqueue to actually state buffering is needed,
-	  taking the maximum buffering of the single queue as the reference point.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=734412
-
-2014-08-26 20:14:40 +0200  Arnaud Vrac <avrac@freebox.fr>
-
-	* gst/gstbuffer.c:
-	  buffer: do not touch memory tag flag when copying buffer flags
-	  The tag memory flag will be set later if the memory is also copied. This
-	  patch avoids buffers being freed needlessly in bufferpools.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=735574
-
-=== release 1.4.1 ===
-
-2014-08-27 15:03:36 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-coreelements.xml:
-	* gstreamer.doap:
-	* win32/common/config.h:
-	* win32/common/gstversion.h:
-	  Release 1.4.1
-
-2014-08-27 14:22:21 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/af.po:
-	* po/az.po:
-	* po/be.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/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/ru.po:
-	* po/rw.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	* po/zh_TW.po:
-	  Update .po files
-
-2014-08-21 14:02:16 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* plugins/elements/gstqueue.c:
-	  queue: fix race when flush-stop event comes in whilst shutting down
-	  Don't re-start the queue push task on the source pad when a
-	  flush-stop event comes in and we're in the process of shutting
-	  down, otherwise that task will never be stopped again.
-	  When the element is set to READY state, the pads get de-activated.
-	  The source pad gets deactivated before the queue's own activate_mode
-	  function on the source pads gets called (which will stop the thread),
-	  so checking whether the pad is active before re-starting the task on
-	  receiving flush-stop should be fine. The problem would happen when the
-	  flush-stop handler was called just after the queue's activate mode
-	  function had stopped the task.
-	  Spotted and debugged by Linus Svensson <linux.svensson@axis.com>
-	  https://bugzilla.gnome.org/show_bug.cgi?id=734688
-
-2014-08-14 18:53:40 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-	* plugins/elements/gstinputselector.c:
-	  inputselector: always proxy caps query
-	  Otherwise it would only be proxied for the active pad which can lead
-	  upstream to use an incompatible caps for the downstream element.
-	  Even if a reconfigure event is sent upstream when the pad is activated, this
-	  will save the caps reconfiguration if it is already using an acceptable caps.
-
-2014-08-14 14:37:56 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* libs/gst/base/gstdataqueue.h:
-	  base: and fix build with new g-i again
-
-2014-08-14 14:25:06 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* libs/gst/base/gstdataqueue.h:
-	  base: remove g-i annotation that makes older g-ir-scanner crash
-	  Just remove one skip annotation that causes this:
-	  ** (g-ir-compiler:12458): ERROR **: Caught NULL node, parent=empty
-	  with older g-i versions such as 1.32.1.
-
-2014-08-13 13:01:23 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: Only handle flow returns < EOS as errors, not e.g. flushing
-
-2014-08-13 12:40:37 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst/gstbin.c:
-	  bin: Use allow-none instead of nullable until we depend on a new enough GI version
-
-2014-08-13 12:39:47 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst/gstbin.c:
-	  bin: gst_bin_new() can accept NULL as name
-
-2014-08-13 12:37:08 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst/gstelement.c:
-	  element: Clarify docs about gst_element_get_request_pad() and remove deprecation part
-	  This function is not really pad or slow for the common case of requesting a
-	  pad with the name of the template. It is only slower if you to name your pads
-	  directly instead of letting the element handle it.
-	  Also there's no reason to deprecate it in favor of a more complicated function
-	  for the common case.
-
-2014-08-13 12:20:51 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstqueue2.c:
-	  queue2: Post errors if we receive EOS after downstream reported an error
-	  There will be no further data flow that would allow us to propagate the
-	  error upstream, causing nobody at all to post an error message.
-
-2014-08-13 12:15:03 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstqueue.c:
-	  queue: Post errors when receiving EOS after downstream returned an error
-	  There might be no further data flow that would allow us to propagate the
-	  error upstream, causing nobody to post an error at all.
-
-2014-08-13 12:10:39 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: Post errors ourselves if they are received after EOS
-	  After EOS there will be no further buffer which could propagate the
-	  error upstream, so nothing is going to post an error message and
-	  the pipeline just idles around.
-
-2014-07-27 03:06:16 +0000  Руслан Ижбулатов <lrn1986@gmail.com>
-
-	* gst/gstpoll.c:
-	  poll: Prevent false-negative from WAKE_EVENT() on W32
-	  SetEvent() seems to not call SetLastError(0) internally, so checking last
-	  error after calling SetEvent() may return the error from an earlier W32 API
-	  call. Fix this by calling SetlastError(0) explicitly.
-	  Currently WAKE_EVENT() code is cramped into a macro and doesn't look to be
-	  entirely correct. Particularly, it does not check the return value of
-	  SetEvent(), only the thread-local W32 error value. It is likely that SetEvent()
-	  actually just returns non-zero value, but the code mistakenly thinks that the
-	  call has failed, because GetLastError() seems to indicate so.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=733805
-
-2014-07-30 15:46:22 +0300  Mohammed Sameer <msameer@foolab.org>
-
-	* gst/gstbufferpool.c:
-	  bufferpool: Add missing error checking to default_alloc_buffer()
-	  default_alloc_buffer() calls gst_buffer_new_allocate() but does not check for
-	  failed allocation.
-	  This patch makes default_alloc_buffer() return an error (GST_FLOW_ERROR) if
-	  buffer allocation fails.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=733974
-
-2014-07-29 14:21:33 -0300  Thiago Santos <ts.santos@osg.sisa.samsung.com>
-
-	* plugins/elements/gstmultiqueue.c:
-	  multiqueue: avoid using infinite buffers limit if finite is requested
-	  If the current max-buffers limit it infinite and a finite value is
-	  requested, switch to the MAX (requested, current-value) to set some
-	  limit but not below what we know that we've needed so far.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=733837
-
-2014-07-24 22:02:58 +0200  Sebastian Rasmussen <sebras@hotmail.com>
-
-	* gst/parse/grammar.y:
-	  parse: Unref reference to enclosing bins
-	  Previously all reference to enclosing bins of an element were leaked
-	  when doing delaying setting a property.
-	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=733697
-
-2014-07-26 14:42:54 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* gst/gst.h:
-	  gst: include atomicqueue.h again in gst.h
-	  It's a public header of gstreamer core, so #include <gst/gst.h>
-	  should make the API available.
-
-2014-07-09 15:48:10 +0200  Srimanta Panda <srimanta@axis.com>
-
-	* plugins/elements/gstfunnel.c:
-	  funnel: Fix for racy EOS event handling
-	  When eos events are forwarded simultaneouly from two sinkpads on
-	  funnel, it doesnot forward the eos to sourcepad. The reason is
-	  sticky events are stored after the event callbacks are returned.
-	  Therefore while one is about to store the sticky events on the its
-	  sinkpad, other sinkpad starts checking for the eos events on all other
-	  sinkpads and assumes eos is not present yet.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=732851
-
 === release 1.4.0 ===
 
-2014-07-19 16:46:41 +0200  Sebastian Dröge <sebastian@centricular.com>
+2014-07-19  Sebastian Dröge <slomo@coaxion.net>
 
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
 	* configure.ac:
-	* docs/plugins/inspect/plugin-coreelements.xml:
-	* gstreamer.doap:
-	* win32/common/config.h:
-	* win32/common/gstversion.h:
-	  Release 1.4.0
-
-2014-07-19 16:21:20 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/af.po:
-	* po/az.po:
-	* po/be.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/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/pt_BR.po:
-	* po/ro.po:
-	* po/ru.po:
-	* po/rw.po:
-	* po/sk.po:
-	* po/sl.po:
-	* po/sq.po:
-	* po/sr.po:
-	* po/sv.po:
-	* po/tr.po:
-	* po/uk.po:
-	* po/vi.po:
-	* po/zh_CN.po:
-	* po/zh_TW.po:
-	  Update .po files
+	  releasing 1.4.0
 
 2014-07-19 12:16:58 +0200  Sebastian Dröge <sebastian@centricular.com>
 
diff --git a/MAINTAINERS b/MAINTAINERS
index 558ddff..72aac8e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5,7 +5,7 @@
  Wim Taymans <wim.taymans@gmail.com>
  David Schleef <ds@schleef.org>
  Tim-Philipp Müller <tim centricular net>
- Sebastian Dröge <slomo circular-chaos org>
+ Sebastian Dröge <slomo@coaxion.net>
 
 Maintainer-related issues should be addressed to:
 
diff --git a/Makefile.am b/Makefile.am
index 900342b..59251e9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --enable-docbook
+DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --enable-docbook --with-bash-completion-dir=no
 
 # note: keep in sync with configure.ac
 ACLOCAL_AMFLAGS = -I m4 -I common/m4
@@ -11,7 +11,8 @@
 	docs \
 	po \
 	m4 \
-	common
+	common \
+	data
 
 if BUILD_TOOLS
 SUBDIRS += tools
@@ -23,7 +24,8 @@
 	docs \
 	po \
 	m4 \
-	common
+	common \
+	data
 
 # include before EXTRA_DIST for win32 assignment
 include $(top_srcdir)/common/win32.mak
@@ -85,16 +87,22 @@
 
 if HAVE_CHECK
 check-valgrind:
-	cd tests/check && make check-valgrind
+	$(MAKE) -C tests/check check-valgrind
 
 check-torture:
-	cd tests/check && make torture
+	$(MAKE) -C tests/check torture
+
+build-checks:
+	$(MAKE) -C tests/check build-checks
 else
 check-valgrind:
 	echo "'check' library not installed, skipping"
 
 check-torture:
 	echo "'check' library not installed, skipping"
+
+build-checks:
+	echo "'check' library not installed, skipping"
 endif
 
 # FIXME: this target should be run every time we do "make release"
diff --git a/Makefile.in b/Makefile.in
index cfdec17..00ff9ca 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -110,6 +110,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -127,7 +128,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -285,6 +286,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -390,6 +395,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -551,10 +557,10 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-docbook
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-docbook --with-bash-completion-dir=no
 aclocaldir = $(datadir)/aclocal
 aclocal_DATA = gst-element-check-@GST_API_VERSION@.m4
-SUBDIRS = pkgconfig gst libs plugins tests docs po m4 common \
+SUBDIRS = pkgconfig gst libs plugins tests docs po m4 common data \
 	$(am__append_1)
 
 # These are all the possible subdirs
@@ -563,7 +569,8 @@
 	docs \
 	po \
 	m4 \
-	common
+	common \
+	data
 
 
 # the MANIFEST contains all win32 related files that should be disted
@@ -1290,16 +1297,22 @@
 @GST_GCOV_ENABLED_FALSE@	echo "Need to reconfigure with --enable-gcov"
 
 @HAVE_CHECK_TRUE@check-valgrind:
-@HAVE_CHECK_TRUE@	cd tests/check && make check-valgrind
+@HAVE_CHECK_TRUE@	$(MAKE) -C tests/check check-valgrind
 
 @HAVE_CHECK_TRUE@check-torture:
-@HAVE_CHECK_TRUE@	cd tests/check && make torture
+@HAVE_CHECK_TRUE@	$(MAKE) -C tests/check torture
+
+@HAVE_CHECK_TRUE@build-checks:
+@HAVE_CHECK_TRUE@	$(MAKE) -C tests/check build-checks
 @HAVE_CHECK_FALSE@check-valgrind:
 @HAVE_CHECK_FALSE@	echo "'check' library not installed, skipping"
 
 @HAVE_CHECK_FALSE@check-torture:
 @HAVE_CHECK_FALSE@	echo "'check' library not installed, skipping"
 
+@HAVE_CHECK_FALSE@build-checks:
+@HAVE_CHECK_FALSE@	echo "'check' library not installed, skipping"
+
 # FIXME: this target should be run every time we do "make release"
 # find a way of automating that
 win32-update:
diff --git a/NEWS b/NEWS
index 910c80e..a4e47ed 100644
--- a/NEWS
+++ b/NEWS
@@ -1,2 +1,145 @@
-This is GStreamer 1.4.5
+This is GStreamer 1.4.0
 
+Changes since 1.2:
+
+New API:
+ • GstMessageType has GST_MESSAGE_EXTENDED added. All types before
+   that can be used together as a flags type as before, but from
+   that message onwards the types are just counted incrementally.
+   This was necessary to be able to add more message types.
+   In 2.0 GstMessageType will just become an enum and not a flags
+   type anymore.
+ • GstDeviceMonitor for device probing, e.g. to list all available
+   audio or video capture devices. This is the replacement for
+   GstPropertyProbe from 0.10.
+ • Events accumulate the running-time offset now when travelling
+   through pads, as set by the gst_pad_set_offset() function. This
+   allows to compensate for this in the QOS event for example.
+ • GstBuffer has a new flag "tag-memory" that is set automatically
+   when memory is added or removed to a buffer. This allows buffer
+   pools to detect if they can recycle a buffer or need to reset
+   it first.
+ • GstToc has new API to mark GstTocEntries as loops.
+ • A not-authorized resource error has been defined to notify
+   applications that accessing the resource has failed because
+   of missing authorization and to distinguish this case from others.
+   This change is actually already in 1.2.4.
+ • GstPad has a new flag "accept-intersect", that will let the default
+   ACCEPT_CAPS query handler do an intersection instead of subset check.
+   This is interesting for parser elements that can handle incomplete
+   caps.
+ • GstCollectPads has support for flushing and a default handler for
+   SEEK events now.
+ • New GstFlowAggregator helper object that simplifies handling of
+   flow returns in elements with multiple source pads. Additionally
+   GstPad now always stores the last flow return and provides an
+   API to retrieve it.
+ • GstSegment has new API to offset the running time by a specific
+   value and this is used in GstPad to allow positive and negative
+   offsets in gst_pad_set_offset() in all situations.
+ • Support for h265/HEVC and VP8 has been added to the codec utils and codec
+   parsers library, and was integrated into various elements.
+ • API for adjusting the TLS validation of RTSP connection has been added.
+ • The RTSP and SDP library has MIKEY (RFC 3830) support now, and
+   there is API to distinguish between the different RTSP profiles.
+ • API to access RTP time information and statistics.
+ • Support for auxiliary streams was added to rtpbin.
+ • Support for tiled, raw video formats has been added.
+ • GstVideoDecoder and GstAudioDecoder have API to help aggregating tag
+   events and merge custom tags into them consistently.
+ • GstBufferPool has support for flushing now.
+ • playbin/playsink has support for application provided audio and video
+   filters.
+ • GstDiscoverer has new and simplified API to get details about missing
+   plugins and information to pass to the plugin installer.
+ • The GL library was merged from gst-plugins-gl to gst-plugins-bad,
+   providing a generic infrastructure for handling GL inside GStreamer
+   pipelines and a plugin with some elements using these, especially
+   a video sink. Supported platforms currently are Android, Cocoa (OS X),
+   DispManX (Raspberry Pi), EAGL (iOS), WGL (Windows) and generic X11,
+   Wayland and EGL platforms.
+   This replaces eglglessink and also is supposed to replace osxvideosink.
+ • New GstAggregator base class in gst-plugins-bad. This is supposed to
+   replace GstCollectPads in the future and fix long-known shortcomings
+   in its API. Together with the base class some elements are provided
+   already, like a videomixer (compositor).
+
+
+Major changes:
+ • New plugins and elements:
+   ∘ v4l2videodec element for accessing hardware codecs on
+     platforms that make them accessible via V4L2, e.g.
+     Samsung Exynos. This comes together with major refactoring
+     of the existing V4L2 elements and the corresponding
+     infrastructure.
+     The v4l2videodec element replaces the mfcdec element.
+   ∘ New downloadbuffer element that replaces the download
+     buffering feature of queue2. Compared to queue2's code
+     it is much simpler and only for this single use case.
+     A noteworthy new feature is that it's downloading gaps
+     in the already downloaded stream parts when nothing else
+     is to be downloaded.
+     This is now used by playbin when download buffering is
+     enabled.
+   ∘ rtpstreampay and rtpstreamdepay elements for transmitting
+     RTP packets over a stream API (e.g. TCP) according to
+     RFC 4571.
+   ∘ rtprtx elements for standard compliant implementation of
+     retransmissions, integrated into the rtpmanager plugin.
+   ∘ audiomixer element that mixes multiple audio streams together
+     into a single one while keeping synchronization. This is
+     planned to become the replacement of the adder element.
+   ∘ OpenNI2 plugin for 3D cameras like the Kinect camera.
+   ∘ OpenEXR plugin for decoding high-dynamic-range EXR images.
+   ∘ curlsshsink and curlsftpsink to write files via SSH/SFTP.
+   ∘ videosignal, ivfparse and sndfile plugins ported from 0.10.
+   ∘ avfvideosrc, vtdec and other elements were ported from 0.10 and
+     are available on OS X and iOS now.
+
+ • Other changes:
+   ∘ gst-libav now uses libav 10.2, and gained support for H265/HEVC.
+   ∘ Support for hardware codecs and special memory types has been
+     improved with bugfixes and feature additions in various plugins
+     and base classes.
+   ∘ Various bugfixes and improvements to buffering in queue2 and
+     multiqueue elements.
+   ∘ dvbsrc supports more delivery mechanisms and other features
+     now, including DVB S2 and T2 support.
+   ∘ The MPEGTS library has support for many more descriptors.
+   ∘ Major improvements to tsdemux and tsparse, especially time and
+     seeking related.
+   ∘ souphttpsrc now has support for keep-alive connections,
+     compression, configurable number of retries and configuration
+     for SSL certificate validation.
+   ∘ hlsdemux has undergone major refactoring and works more
+     reliable now and supports more HLS features like trick modes.
+     Also fragments are pushed downstream while they're downloaded
+     now instead of waiting for each fragment to finish.
+   ∘ dashdemux and mssdemux are now also pushing fragments downstream
+     while they're downloaded instead of waiting for each fragment to
+     finish.
+   ∘ videoflip can automatically flip based on the orientation tag.
+   ∘ openjpeg supports the OpenJPEG2 API.
+   ∘ waylandsink was refactored and should be more useful now. It also
+     includes a small library which most likely is going to be removed
+     in the future and will result in extensions to the GstVideoOverlay
+     interface.
+   ∘ gst-rtsp-server supports SRTP and MIKEY now.
+   ∘ gst-libav encoders are now negotiating any profile/level settings
+     with downstream via caps.
+   ∘ Lots of fixes for coverity warnings all over the place.
+   ∘ Negotiation related performance improvements.
+   ∘ 800+ fixed bug reports, and many other bug fixes and other
+     improvements everywhere that had no bug report.
+
+Things to look out for:
+ • The eglglessink element was removed and replaced by the glimagesink
+   element.
+ • The mfcdec element was removed and replaced by v4l2videodec.
+ • osxvideosink is only available in OS X 10.6 or newer.
+ • On Android the namespace of the automatically generated Java class
+   for initialization of GStreamer has changed from com.gstreamer to
+   org.freedesktop.gstreamer to prevent namespace pollution.
+ • On iOS you have to update your gst_ios_init.h and gst_ios_init.m in
+   your projects from the one included in the binaries if you used the
+   GnuTLS GIO module before. The loading mechanism has slightly changed.
diff --git a/README b/README
index da0cab4..f175b1b 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-GStreamer 1.3.x development series
+GStreamer 1.5.x development series
 
 WHAT IT IS
 ----------
diff --git a/RELEASE b/RELEASE
index bd64ff8..4d4929d 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,27 +1,34 @@
 
-Release notes for GStreamer 1.4.5
-
-The GStreamer team is pleased to announce a bugfix release of the stable
-1.4 release series. The 1.4 release series is adding new features on top
-of the 1.2 series and is part of the API and ABI-stable 1.x release
-series of the GStreamer multimedia framework that contains new features.
-The 1.4.x bugfix releases only contain important bugfixes compared to 1.4.0.
+Release notes for GStreamer 1.4.0
 
 
-Binaries for Android, iOS, Mac OS X and Windows are provided by the
-GStreamer project for this release.
+The GStreamer team is pleased to announce the first release of
+the stable 1.4 release series. The 1.4 release series is adding new
+features on top of the 1.0 and 1.2 series and is part of the API and
+ABI-stable 1.x release series of the GStreamer multimedia framework.
 
 
-The 1.x series is a stable series targeted at end users. It is not API
-or ABI compatible with the 0.10.x series. It can, however, be installed
-in parallel with the 0.10.x series and will not affect an existing
-0.10.x installation.
+
+Binaries for Android, iOS, Mac OS X and Windows are provided together
+with this release.
 
 
-The stable 1.4.x release series is API and ABI compatible with 1.0.x and
-any other 1.x release series in the future. Compared to 1.0.x it contains
-some new features and more intrusive changes that were considered too
-risky as a bugfix.
+
+The stable 1.4 release series is API and ABI compatible with 1.0.x,
+1.2.x and any other 1.x release series in the future. Compared to 1.2.x
+it contains some new features and more intrusive changes that were
+considered too risky as a bugfix.
+
+
+
+The versioning scheme that is used in general is that 1.x.y is API and
+ABI backwards compatible with previous 1.x.y releases. If x is an even
+number it is a stable release series and all releases in this series
+will only contain important bugfixes, e.g. the 1.0 series with 1.0.7. If
+x is odd it is a development release series that will lead to the next
+stable release series 1.x+1 and contains new features and bigger
+changes. During the development release series, new API can still
+change.
 
 
 
@@ -48,9 +55,8 @@
 
 Bugs fixed in this release
      
-      * 736969 : queue2: dead lock when buffering
-      * 738092 : basesink: clamp reported position based on direction
-      * 740001 : task: race condition when pausing and stopping
+      * 733121 : debugutils: Unref pad template after use
+      * 733291 : typefindelement: Propagate input buffer PTS and DTS
 
 ==== Download ====
 
@@ -88,8 +94,8 @@
 Contributors to this release
     
       * Edward Hervey
-      * Haakon Sporsheim
+      * Sebastian Dröge
+      * Sebastian Rasmussen
       * Thiago Santos
-      * Vincent Penquerc'h
-      * Wim Taymans
+      * Thibault Saunier
  
\ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index 89d665c..8936cf2 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1477,6 +1477,7 @@
 m4_include([common/m4/as-libtool.m4])
 m4_include([common/m4/as-version.m4])
 m4_include([common/m4/ax_create_stdint_h.m4])
+m4_include([common/m4/ax_pthread.m4])
 m4_include([common/m4/gst-arch.m4])
 m4_include([common/m4/gst-args.m4])
 m4_include([common/m4/gst-check.m4])
@@ -1495,7 +1496,6 @@
 m4_include([common/m4/gtk-doc.m4])
 m4_include([common/m4/introspection.m4])
 m4_include([common/m4/pkg.m4])
-m4_include([m4/ax_pthread.m4])
 m4_include([m4/check-checks.m4])
 m4_include([m4/gettext.m4])
 m4_include([m4/iconv.m4])
diff --git a/common/Makefile.in b/common/Makefile.in
index 6c35ad6..54dbfa4 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -89,6 +89,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -106,7 +107,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -214,6 +215,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -319,6 +324,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/common/check.mak b/common/check.mak
index 611546a..efd5458 100644
--- a/common/check.mak
+++ b/common/check.mak
@@ -46,7 +46,8 @@
 
 # valgrind any given test by running make test.valgrind
 %.valgrind: %
-	@$(TESTS_ENVIRONMENT)					\
+	@valgrind_log=$(subst /,-,$*-valgrind.log);		\
+	$(TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=360					\
 	G_SLICE=always-malloc					\
 	$(LIBTOOL) --mode=execute				\
@@ -55,12 +56,12 @@
 	--tool=memcheck --leak-check=full --trace-children=yes	\
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
-	./$* 2>&1 | tee valgrind.log
-	@if grep "==" valgrind.log > /dev/null 2>&1; then	\
-	    rm valgrind.log;					\
+	./$* 2>&1 | tee $$valgrind_log ;			\
+	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	    rm $$valgrind_log;					\
 	    exit 1;						\
-	fi
-	@rm valgrind.log
+	fi ;							\
+	rm $$valgrind_log
 
 # valgrind any given test and generate suppressions for it
 %.valgrind.gen-suppressions: %
@@ -150,19 +151,13 @@
 # valgrind all tests
 valgrind: $(TESTS)
 	@echo "Valgrinding tests ..."
-	@failed=0;							\
+	@failed=0; valgrind_targets="";					\
 	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
-		$(MAKE) $$t.valgrind;					\
-		if test "$$?" -ne 0; then                               \
-			echo "Valgrind error for test $$t";		\
-			failed=`expr $$failed + 1`;			\
-			whicht="$$whicht $$t";				\
-		fi;							\
+	  valgrind_targets="$$valgrind_targets $$t.valgrind";		\
 	done;								\
-	if test "$$failed" -ne 0; then					\
-		echo "$$failed tests had leaks or errors under valgrind:";	\
-		echo "$$whicht";					\
-		false;							\
+	if ! $(MAKE) $$valgrind_targets ; then				\
+	  echo "Some tests had leaks or errors under valgrind";		\
+	  false;							\
 	fi
 
 # valgrind all tests until failure
@@ -215,6 +210,9 @@
 	  do echo Inspecting $$e;					\
 	     $(GST_INSPECT) $$e > /dev/null 2>&1; done
 
+# build all tests
+build-checks: $(TESTS)
+
 help:
 	@echo
 	@echo "make check                         -- run all checks"
@@ -237,6 +235,7 @@
 	@echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions"
 	@echo "                                               and save to suppressions.log"
 	@echo "make inspect                       -- inspect all plugin features"
+	@echo "make build-checks                  -- build all checks (but don't run them)"
 	@echo
 	@echo
 	@echo "Additionally, you can use the GST_CHECKS environment variable to"
diff --git a/common/gst-indent b/common/gst-indent
index 732b2ba..b5e808f 100755
--- a/common/gst-indent
+++ b/common/gst-indent
@@ -9,13 +9,19 @@
 
 version=`gnuindent --version 2>/dev/null`
 if test "x$version" = "x"; then
-  version=`indent --version 2>/dev/null`
+  version=`gindent --version 2>/dev/null`
   if test "x$version" = "x"; then
-    echo "GStreamer git pre-commit hook:"
-    echo "Did not find GNU indent, please install it before continuing."
-    exit 1
+    version=`indent --version 2>/dev/null`
+    if test "x$version" = "x"; then
+      echo "GStreamer git pre-commit hook:"
+      echo "Did not find GNU indent, please install it before continuing."
+      exit 1
+    else
+      INDENT=indent
+    fi
+  else
+    INDENT=gindent
   fi
-  INDENT=indent
 else
   INDENT=gnuindent
 fi
diff --git a/common/gst.supp b/common/gst.supp
index 2c60392..c08f660 100644
--- a/common/gst.supp
+++ b/common/gst.supp
@@ -3965,3 +3965,10 @@
    ...
    fun:g_quark_from*_string
 }
+
+{
+  <timer_create suppressions for earlier valgrind versions that complain>
+  Memcheck:Param
+  timer_create(evp)
+  fun:timer_create@@GLIBC_2.3.3
+}
diff --git a/common/m4/Makefile.am b/common/m4/Makefile.am
index 3d387ee..cdcec8c 100644
--- a/common/m4/Makefile.am
+++ b/common/m4/Makefile.am
@@ -11,6 +11,7 @@
 	as-python.m4 \
 	as-version.m4 \
 	ax_create_stdint_h.m4 \
+	ax_pthread.m4 \
 	glib-gettext.m4 \
 	gst-arch.m4 \
 	gst-args.m4 \
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 4f6ed35..7c98e62 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -153,6 +154,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -258,6 +263,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -432,6 +438,7 @@
 	as-python.m4 \
 	as-version.m4 \
 	ax_create_stdint_h.m4 \
+	ax_pthread.m4 \
 	glib-gettext.m4 \
 	gst-arch.m4 \
 	gst-args.m4 \
diff --git a/m4/ax_pthread.m4 b/common/m4/ax_pthread.m4
similarity index 83%
rename from m4/ax_pthread.m4
rename to common/m4/ax_pthread.m4
index d90de34..d383ad5 100644
--- a/m4/ax_pthread.m4
+++ b/common/m4/ax_pthread.m4
@@ -82,7 +82,7 @@
 #   modified version of the Autoconf Macro, you may extend this special
 #   exception to the GPL to apply to your modified version as well.
 
-#serial 18
+#serial 21
 
 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
 AC_DEFUN([AX_PTHREAD], [
@@ -103,8 +103,8 @@
         save_LIBS="$LIBS"
         LIBS="$PTHREAD_LIBS $LIBS"
         AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
-        AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
-        AC_MSG_RESULT($ax_pthread_ok)
+        AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes])
+        AC_MSG_RESULT([$ax_pthread_ok])
         if test x"$ax_pthread_ok" = xno; then
                 PTHREAD_LIBS=""
                 PTHREAD_CFLAGS=""
@@ -164,6 +164,20 @@
         ;;
 esac
 
+# Clang doesn't consider unrecognized options an error unless we specify
+# -Werror. We throw in some extra Clang-specific options to ensure that
+# this doesn't happen for GCC, which also accepts -Werror.
+
+AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags])
+save_CFLAGS="$CFLAGS"
+ax_pthread_extra_flags="-Werror"
+CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])],
+                  [AC_MSG_RESULT([yes])],
+                  [ax_pthread_extra_flags=
+                   AC_MSG_RESULT([no])])
+CFLAGS="$save_CFLAGS"
+
 if test x"$ax_pthread_ok" = xno; then
 for flag in $ax_pthread_flags; do
 
@@ -178,7 +192,7 @@
                 ;;
 
                 pthread-config)
-                AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
+                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
                 if test x"$ax_pthread_config" = xno; then continue; fi
                 PTHREAD_CFLAGS="`pthread-config --cflags`"
                 PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
@@ -193,7 +207,7 @@
         save_LIBS="$LIBS"
         save_CFLAGS="$CFLAGS"
         LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
 
         # Check for various functions.  We must include pthread.h,
         # since some functions may be macros.  (On the Sequent, we
@@ -219,7 +233,7 @@
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
 
-        AC_MSG_RESULT($ax_pthread_ok)
+        AC_MSG_RESULT([$ax_pthread_ok])
         if test "x$ax_pthread_ok" = xyes; then
                 break;
         fi
@@ -245,9 +259,9 @@
                 [attr_name=$attr; break],
                 [])
         done
-        AC_MSG_RESULT($attr_name)
+        AC_MSG_RESULT([$attr_name])
         if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
+            AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name],
                                [Define to necessary symbol if this constant
                                 uses a non-standard name on your system.])
         fi
@@ -261,45 +275,54 @@
             if test "$GCC" = "yes"; then
                 flag="-D_REENTRANT"
             else
+                # TODO: What about Clang on Solaris?
                 flag="-mt -D_REENTRANT"
             fi
             ;;
         esac
-        AC_MSG_RESULT(${flag})
+        AC_MSG_RESULT([$flag])
         if test "x$flag" != xno; then
             PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
         fi
 
         AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
-            ax_cv_PTHREAD_PRIO_INHERIT, [
-                AC_LINK_IFELSE([
-                    AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
+            [ax_cv_PTHREAD_PRIO_INHERIT], [
+                AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
+                                                [[int i = PTHREAD_PRIO_INHERIT;]])],
                     [ax_cv_PTHREAD_PRIO_INHERIT=yes],
                     [ax_cv_PTHREAD_PRIO_INHERIT=no])
             ])
         AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
-            AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
+            [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])])
 
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
 
-        # More AIX lossage: must compile with xlc_r or cc_r
-        if test x"$GCC" != xyes; then
-          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
-        else
-          PTHREAD_CC=$CC
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != xyes; then
+            case $host_os in
+                aix*)
+                AS_CASE(["x/$CC"],
+                  [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
+                  [#handle absolute path differently from PATH based program lookup
+                   AS_CASE(["x$CC"],
+                     [x/*],
+                     [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
+                     [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
+                ;;
+            esac
         fi
-else
-        PTHREAD_CC="$CC"
 fi
 
-AC_SUBST(PTHREAD_LIBS)
-AC_SUBST(PTHREAD_CFLAGS)
-AC_SUBST(PTHREAD_CC)
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+AC_SUBST([PTHREAD_LIBS])
+AC_SUBST([PTHREAD_CFLAGS])
+AC_SUBST([PTHREAD_CC])
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 if test x"$ax_pthread_ok" = xyes; then
-        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
         :
 else
         ax_pthread_ok=no
diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4
index 077a20b..4ad7680 100644
--- a/common/m4/gst-arch.m4
+++ b/common/m4/gst-arch.m4
@@ -45,9 +45,15 @@
     xalpha*)
       HAVE_CPU_ALPHA=yes
       AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the target CPU is an Alpha]) ;;
+    xarc*)
+      HAVE_CPU_ARC=yes
+      AC_DEFINE(HAVE_CPU_ARC, 1, [Define if the target CPU is an ARC]) ;;
     xarm*)
       HAVE_CPU_ARM=yes
       AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the target CPU is an ARM]) ;;
+    xaarch64*)
+      HAVE_CPU_AARCH64=yes
+      AC_DEFINE(HAVE_CPU_AARCH64, 1, [Define if the target CPU is AARCH64]) ;;
     xsparc*)
       HAVE_CPU_SPARC=yes
       AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the target CPU is a SPARC]) ;;
@@ -84,6 +90,7 @@
   AM_CONDITIONAL(HAVE_CPU_PPC,        test "x$HAVE_CPU_PPC" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_PPC64,      test "x$HAVE_CPU_PPC64" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_ALPHA,      test "x$HAVE_CPU_ALPHA" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_ARC,        test "x$HAVE_CPU_ARC" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_ARM,        test "x$HAVE_CPU_ARM" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_SPARC,      test "x$HAVE_CPU_SPARC" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_HPPA,       test "x$HAVE_CPU_HPPA" = "xyes")
@@ -104,7 +111,7 @@
   AC_MSG_CHECKING([if unaligned memory access works correctly])
   if test x"$as_cv_unaligned_access" = x ; then
     case $host in
-      alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*)
+      alpha*|arc*|arm*|aarch64*|hp*|mips*|sh*|sparc*|ia64*)
         _AS_ECHO_N([(blacklisted) ])
         as_cv_unaligned_access=no
 	;;
diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4
index bce80d2..d6487cc 100644
--- a/common/m4/gst-error.m4
+++ b/common/m4/gst-error.m4
@@ -76,14 +76,6 @@
             ])
           done
       ])
-    else
-      dnl Add -fno-strict-aliasing for GLib versions before 2.19.8
-      dnl as before G_LOCK and friends caused strict aliasing compiler
-      dnl warnings.
-      PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [
-        AS_COMPILER_FLAG(-fno-strict-aliasing,
-            ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing")
-	])
     fi
   fi
 
diff --git a/common/m4/gst-parser.m4 b/common/m4/gst-parser.m4
index b002047..382ef72 100644
--- a/common/m4/gst-parser.m4
+++ b/common/m4/gst-parser.m4
@@ -15,7 +15,7 @@
   bison_version=`$BISON_PATH --version | head -n 1 |  sed 's/^[[^0-9]]*//' | sed 's/[[^0-9]]*$//' | cut -d' ' -f1`
   AC_MSG_CHECKING([bison version $bison_version >= $bison_min_version])
 
-  if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then
+  if perl -we "exit (('v$bison_version' ge 'v$bison_min_version') ? 0 : 1)"; then
     AC_MSG_RESULT([yes])
   else
     AC_MSG_ERROR([no])
diff --git a/common/m4/gst-x11.m4 b/common/m4/gst-x11.m4
index d3baf2d..c41ddff 100644
--- a/common/m4/gst-x11.m4
+++ b/common/m4/gst-x11.m4
@@ -9,7 +9,11 @@
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
 
   dnl now try to find the HEADER
-  AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no")
+  HAVE_X="no"
+  AC_CHECK_HEADER([X11/Xlib.h], [
+    dnl and then the library with the most uniquitous function
+    AC_CHECK_LIB(X11, [XSync], [HAVE_X="yes"], [], [$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS])
+  ], [], [AC_INCLUDES_DEFAULT])
 
   if test "x$HAVE_X" = "xno"
   then
diff --git a/common/scangobj-merge.py b/common/scangobj-merge.py
index 4a9f1fc..46736b4 100755
--- a/common/scangobj-merge.py
+++ b/common/scangobj-merge.py
@@ -8,8 +8,9 @@
 
 from __future__ import print_function, unicode_literals
 
-import sys
+import codecs
 import os
+import sys
 
 def debug(*args):
     pass
@@ -105,10 +106,12 @@
 class GDoc:
     def load_file(self, filename):
         try:
-            lines = open(filename).readlines()
+            lines = codecs.open(filename, encoding='utf-8').readlines()
             self.load_data("".join(lines))
         except IOError:
             print ("WARNING - could not read from %s" % filename)
+        except UnicodeDecodeError as e:
+            print ("WARNING - could not parse %s: %s" % (filename, e))
 
     def save_file(self, filename, backup=False):
         """
@@ -116,7 +119,7 @@
         """
         olddata = None
         try:
-            lines = open(filename).readlines()
+            lines = codecs.open(filename, encoding='utf-8').readlines()
             olddata = "".join(lines)
         except IOError:
             print ("WARNING - could not read from %s" % filename)
@@ -128,7 +131,7 @@
             if backup:
                 os.rename(filename, filename + '.bak')
 
-        handle = open(filename, "w")
+        handle = codecs.open(filename, "w", encoding='utf-8')
         handle.write(newdata)
         handle.close()
 
diff --git a/config.h.in b/config.h.in
index b00caea..93a7bce 100644
--- a/config.h.in
+++ b/config.h.in
@@ -67,6 +67,9 @@
 /* location of the installed gst-plugin-scanner */
 #undef GST_PLUGIN_SCANNER_INSTALLED
 
+/* Define to 1 if you have the `alarm' function. */
+#undef HAVE_ALARM
+
 /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
    CoreFoundation framework. */
 #undef HAVE_CFLOCALECOPYCURRENT
@@ -78,9 +81,15 @@
 /* Define to 1 if you have the `clock_gettime' function. */
 #undef HAVE_CLOCK_GETTIME
 
+/* Define if the target CPU is AARCH64 */
+#undef HAVE_CPU_AARCH64
+
 /* Define if the target CPU is an Alpha */
 #undef HAVE_CPU_ALPHA
 
+/* Define if the target CPU is an ARC */
+#undef HAVE_CPU_ARC
+
 /* Define if the target CPU is an ARM */
 #undef HAVE_CPU_ARM
 
@@ -124,6 +133,22 @@
    */
 #undef HAVE_DCGETTEXT
 
+/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ALARM
+
+/* Define to 1 if you have the declaration of `localtime_r', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LOCALTIME_R
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+   */
+#undef HAVE_DECL_STRDUP
+
+/* Define to 1 if you have the declaration of `strsignal', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRSIGNAL
+
 /* Defined if we have dladdr () */
 #undef HAVE_DLADDR
 
@@ -133,6 +158,9 @@
 /* Define to 1 if you have the `fgetpos' function. */
 #undef HAVE_FGETPOS
 
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
 /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
 #undef HAVE_FSEEKO
 
@@ -151,6 +179,9 @@
 /* Define to 1 if you have the `getpagesize' function. */
 #undef HAVE_GETPAGESIZE
 
+/* Define to 1 if you have the `getpid' function. */
+#undef HAVE_GETPID
+
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
@@ -176,6 +207,9 @@
    declares uintmax_t. */
 #undef HAVE_INTTYPES_H_WITH_UINTMAX
 
+/* Define to 1 if you have the `rt' library (-lrt). */
+#undef HAVE_LIBRT
+
 /* Define to 1 if you have the `localtime_r' function. */
 #undef HAVE_LOCALTIME_R
 
@@ -188,6 +222,9 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
+/* Define to 1 if you have the `mkstemp' function. */
+#undef HAVE_MKSTEMP
+
 /* Define to 1 if you have a working `mmap' system call. */
 #undef HAVE_MMAP
 
@@ -227,12 +264,18 @@
 /* Have PTHREAD_PRIO_INHERIT. */
 #undef HAVE_PTHREAD_PRIO_INHERIT
 
+/* Have function pthread_setname_np(const char*) */
+#undef HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID
+
 /* Define to 1 if the system has the type `ptrdiff_t'. */
 #undef HAVE_PTRDIFF_T
 
 /* Define if RDTSC is available */
 #undef HAVE_RDTSC
 
+/* Define to 1 if you have the `setitimer' function. */
+#undef HAVE_SETITIMER
+
 /* Define to 1 if you have the `sigaction' function. */
 #undef HAVE_SIGACTION
 
@@ -249,12 +292,30 @@
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
+/* Define to 1 if you have the `strcasestr' function. */
+#undef HAVE_STRCASESTR
+
 /* Define to 1 if you have the <strings.h> header file. */
 #undef HAVE_STRINGS_H
 
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
+/* Define to 1 if you have the `strsignal' function. */
+#undef HAVE_STRSIGNAL
+
+/* Define to 1 if `it_interval' is a member of `struct itimerspec'. */
+#undef HAVE_STRUCT_ITIMERSPEC_IT_INTERVAL
+
+/* Define to 1 if `it_value' is a member of `struct itimerspec'. */
+#undef HAVE_STRUCT_ITIMERSPEC_IT_VALUE
+
+/* Define to 1 if `tv_nsec' is a member of `struct timespec'. */
+#undef HAVE_STRUCT_TIMESPEC_TV_NSEC
+
+/* Define to 1 if `tv_sec' is a member of `struct timespec'. */
+#undef HAVE_STRUCT_TIMESPEC_TV_SEC
+
 /* Define to 1 if you have the <sys/param.h> header file. */
 #undef HAVE_SYS_PARAM_H
 
@@ -279,12 +340,18 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
 /* Define to 1 if you have the <sys/utsname.h> header file. */
 #undef HAVE_SYS_UTSNAME_H
 
 /* Define to 1 if you have the <sys/wait.h> header file. */
 #undef HAVE_SYS_WAIT_H
 
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
 /* Have tm_gmtoff field in struct tm */
 #undef HAVE_TM_GMTOFF
 
@@ -315,6 +382,12 @@
 /* Define to 1 if you have the <winsock2.h> header file. */
 #undef HAVE_WINSOCK2_H
 
+/* Define to 1 if you have the `_getpid' function. */
+#undef HAVE__GETPID
+
+/* Define to 1 if you have the `_strdup' function. */
+#undef HAVE__STRDUP
+
 /* the host CPU */
 #undef HOST_CPU
 
@@ -383,6 +456,12 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Need to define the itimerspec structure */
+#undef STRUCT_ITIMERSPEC_DEFINITION_MISSING
+
+/* Need to define the timespec structure */
+#undef STRUCT_TIMESPEC_DEFINITION_MISSING
+
 /* the target CPU */
 #undef TARGET_CPU
 
@@ -421,9 +500,15 @@
 /* We need at least WinXP SP2 for __stat64 */
 #undef __MSVCRT_VERSION__
 
+/* clockid_t */
+#undef clockid_t
+
 /* Define to the widest signed integer type if <stdint.h> and <inttypes.h> do
    not define. */
 #undef intmax_t
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
 #undef size_t
+
+/* timer_t */
+#undef timer_t
diff --git a/configure b/configure
index ead78ab..74d7da7 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 1.4.5.
+# Generated by GNU Autoconf 2.69 for GStreamer 1.5.0.1.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='GStreamer'
 PACKAGE_TARNAME='gstreamer'
-PACKAGE_VERSION='1.4.5'
-PACKAGE_STRING='GStreamer 1.4.5'
+PACKAGE_VERSION='1.5.0.1'
+PACKAGE_STRING='GStreamer 1.5.0.1'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -642,6 +642,17 @@
 SUBUNIT_FALSE
 SUBUNIT_TRUE
 ENABLE_SUBUNIT
+HAVE_CLOCK_GETTIME_FALSE
+HAVE_CLOCK_GETTIME_TRUE
+HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE
+HAVE_TIMER_CREATE_SETTIME_DELETE_TRUE
+HAVE_STRSIGNAL_FALSE
+HAVE_STRSIGNAL_TRUE
+HAVE_LOCALTIME_R_FALSE
+HAVE_LOCALTIME_R_TRUE
+HAVE_ALARM_FALSE
+HAVE_ALARM_TRUE
+HAVE_FORK
 CHECK_VERSION
 CHECK_MICRO_VERSION
 CHECK_MINOR_VERSION
@@ -805,6 +816,8 @@
 HAVE_CPU_SPARC_TRUE
 HAVE_CPU_ARM_FALSE
 HAVE_CPU_ARM_TRUE
+HAVE_CPU_ARC_FALSE
+HAVE_CPU_ARC_TRUE
 HAVE_CPU_ALPHA_FALSE
 HAVE_CPU_ALPHA_TRUE
 HAVE_CPU_PPC64_FALSE
@@ -824,6 +837,12 @@
 GST_PLUGIN_BUILD_STATIC_FALSE
 GST_PLUGIN_BUILD_STATIC_TRUE
 GST_PLUGIN_LIBTOOLFLAGS
+ENABLE_BASH_COMPLETION_FALSE
+ENABLE_BASH_COMPLETION_TRUE
+BASH_HELPERS_DIR
+BASH_COMPLETION_DIR
+BASH_COMPLETION_LIBS
+BASH_COMPLETION_CFLAGS
 GST_PKG_CONFIG_PATH
 GST_PACKAGE_ORIGIN
 GST_PACKAGE_NAME
@@ -1054,6 +1073,7 @@
 with_pkg_config_path
 with_package_name
 with_package_origin
+with_bash_completion_dir
 enable_static_plugins
 enable_tests
 enable_failing_tests
@@ -1085,6 +1105,8 @@
 PKG_CONFIG
 VALGRIND_CFLAGS
 VALGRIND_LIBS
+BASH_COMPLETION_CFLAGS
+BASH_COMPLETION_LIBS
 CCAS
 CCASFLAGS
 CXX
@@ -1638,7 +1660,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 1.4.5 to adapt to many kinds of systems.
+\`configure' configures GStreamer 1.5.0.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1709,7 +1731,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer 1.4.5:";;
+     short | recursive ) echo "Configuration of GStreamer 1.5.0.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1793,6 +1815,9 @@
   --with-pkg-config-path  colon-separated list of pkg-config(1) dirs
   --with-package-name     specify package name to use in plugins
   --with-package-origin   specify package origin URL to use in plugins
+  --with-bash-completion-dir=PATH
+                          Install the bash auto-completion script in this
+                          directory. [default=yes]
   --with-html-dir=PATH    path to installed docs
   --with-memory-alignment 8,N,malloc,pagesize (default is 32)
 
@@ -1810,6 +1835,10 @@
               C compiler flags for VALGRIND, overriding pkg-config
   VALGRIND_LIBS
               linker flags for VALGRIND, overriding pkg-config
+  BASH_COMPLETION_CFLAGS
+              C compiler flags for BASH_COMPLETION, overriding pkg-config
+  BASH_COMPLETION_LIBS
+              linker flags for BASH_COMPLETION, overriding pkg-config
   CCAS        assembler compiler command (defaults to CC)
   CCASFLAGS   assembler compiler flags (defaults to CFLAGS)
   CXX         C++ compiler command
@@ -1891,7 +1920,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer configure 1.4.5
+GStreamer configure 1.5.0.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2478,6 +2507,63 @@
 
 } # ac_fn_c_check_type
 
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+
 # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
 # --------------------------------------------
 # Tries to find the compile-time value of EXPR in a program that includes
@@ -2664,7 +2750,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 $as_me 1.4.5, which was
+It was created by GStreamer $as_me 1.5.0.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3645,7 +3731,7 @@
 
 # Define the identity of the package.
  PACKAGE='gstreamer'
- VERSION='1.4.5'
+ VERSION='1.5.0.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3856,9 +3942,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.4.5 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.4.5 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.4.5 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.5.0.1 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.5.0.1 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.5.0.1 | cut -d'.' -f3)
 
 
 
@@ -3869,7 +3955,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.4.5 | cut -d'.' -f4)
+  NANO=$(echo 1.5.0.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
@@ -8527,10 +8613,10 @@
 done
 
 
-  GST_CURRENT=405
+  GST_CURRENT=501
   GST_REVISION=0
-  GST_AGE=405
-  GST_LIBVERSION=405:0:405
+  GST_AGE=501
+  GST_LIBVERSION=501:0:501
 
 
 
@@ -15718,6 +15804,174 @@
   fi
 
 
+
+# Check whether --with-bash-completion-dir was given.
+if test "${with_bash_completion_dir+set}" = set; then :
+  withval=$with_bash_completion_dir;
+else
+  with_bash_completion_dir=yes
+fi
+
+
+if test "x$with_bash_completion_dir" = "xyes"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BASH_COMPLETION" >&5
+$as_echo_n "checking for BASH_COMPLETION... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$BASH_COMPLETION_CFLAGS"; then
+        pkg_cv_BASH_COMPLETION_CFLAGS="$BASH_COMPLETION_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bash-completion >= 2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "bash-completion >= 2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_BASH_COMPLETION_CFLAGS=`$PKG_CONFIG --cflags "bash-completion >= 2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$BASH_COMPLETION_LIBS"; then
+        pkg_cv_BASH_COMPLETION_LIBS="$BASH_COMPLETION_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bash-completion >= 2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "bash-completion >= 2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_BASH_COMPLETION_LIBS=`$PKG_CONFIG --libs "bash-completion >= 2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        BASH_COMPLETION_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "bash-completion >= 2.0"`
+        else
+	        BASH_COMPLETION_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "bash-completion >= 2.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$BASH_COMPLETION_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                BASH_COMPLETION_DIR="$datadir/bash-completion/completions"
+elif test $pkg_failed = untried; then
+	BASH_COMPLETION_DIR="$datadir/bash-completion/completions"
+else
+	BASH_COMPLETION_CFLAGS=$pkg_cv_BASH_COMPLETION_CFLAGS
+	BASH_COMPLETION_LIBS=$pkg_cv_BASH_COMPLETION_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	BASH_COMPLETION_DIR="`pkg-config --variable=completionsdir bash-completion`"
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BASH_COMPLETION" >&5
+$as_echo_n "checking for BASH_COMPLETION... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$BASH_COMPLETION_CFLAGS"; then
+        pkg_cv_BASH_COMPLETION_CFLAGS="$BASH_COMPLETION_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bash-completion >= 2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "bash-completion >= 2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_BASH_COMPLETION_CFLAGS=`$PKG_CONFIG --cflags "bash-completion >= 2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$BASH_COMPLETION_LIBS"; then
+        pkg_cv_BASH_COMPLETION_LIBS="$BASH_COMPLETION_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bash-completion >= 2.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "bash-completion >= 2.0") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_BASH_COMPLETION_LIBS=`$PKG_CONFIG --libs "bash-completion >= 2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        BASH_COMPLETION_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "bash-completion >= 2.0"`
+        else
+	        BASH_COMPLETION_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "bash-completion >= 2.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$BASH_COMPLETION_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                BASH_HELPERS_DIR="$datadir/bash-completion/helpers"
+elif test $pkg_failed = untried; then
+	BASH_HELPERS_DIR="$datadir/bash-completion/helpers"
+else
+	BASH_COMPLETION_CFLAGS=$pkg_cv_BASH_COMPLETION_CFLAGS
+	BASH_COMPLETION_LIBS=$pkg_cv_BASH_COMPLETION_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	BASH_HELPERS_DIR="`pkg-config --variable=helpersdir bash-completion`"
+fi
+else
+    BASH_COMPLETION_DIR="$with_bash_completion_dir/completions"
+    BASH_HELPERS_DIR="$with_bash_completion_dir/helpers"
+fi
+
+
+
+ if test "x$with_bash_completion_dir" != "xno"; then
+  ENABLE_BASH_COMPLETION_TRUE=
+  ENABLE_BASH_COMPLETION_FALSE='#'
+else
+  ENABLE_BASH_COMPLETION_TRUE='#'
+  ENABLE_BASH_COMPLETION_FALSE=
+fi
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static plugins or not" >&5
 $as_echo_n "checking whether to build static plugins or not... " >&6; }
 # Check whether --enable-static-plugins was given.
@@ -15929,11 +16183,21 @@
 
 $as_echo "#define HAVE_CPU_ALPHA 1" >>confdefs.h
  ;;
+    xarc*)
+      HAVE_CPU_ARC=yes
+
+$as_echo "#define HAVE_CPU_ARC 1" >>confdefs.h
+ ;;
     xarm*)
       HAVE_CPU_ARM=yes
 
 $as_echo "#define HAVE_CPU_ARM 1" >>confdefs.h
  ;;
+    xaarch64*)
+      HAVE_CPU_AARCH64=yes
+
+$as_echo "#define HAVE_CPU_AARCH64 1" >>confdefs.h
+ ;;
     xsparc*)
       HAVE_CPU_SPARC=yes
 
@@ -16238,6 +16502,14 @@
   HAVE_CPU_ALPHA_FALSE=
 fi
 
+   if test "x$HAVE_CPU_ARC" = "xyes"; then
+  HAVE_CPU_ARC_TRUE=
+  HAVE_CPU_ARC_FALSE='#'
+else
+  HAVE_CPU_ARC_TRUE='#'
+  HAVE_CPU_ARC_FALSE=
+fi
+
    if test "x$HAVE_CPU_ARM" = "xyes"; then
   HAVE_CPU_ARM_TRUE=
   HAVE_CPU_ARM_FALSE='#'
@@ -16338,7 +16610,7 @@
 $as_echo_n "checking if unaligned memory access works correctly... " >&6; }
   if test x"$as_cv_unaligned_access" = x ; then
     case $host in
-      alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*)
+      alpha*|arc*|arm*|aarch64*|hp*|mips*|sh*|sparc*|ia64*)
         $as_echo_n "(blacklisted) " >&6
         as_cv_unaligned_access=no
 	;;
@@ -21576,7 +21848,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking bison version $bison_version >= $bison_min_version" >&5
 $as_echo_n "checking bison version $bison_version >= $bison_min_version... " >&6; }
 
-  if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then
+  if perl -we "exit (('v$bison_version' ge 'v$bison_min_version') ? 0 : 1)"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
   else
@@ -23446,6 +23718,37 @@
         ;;
 esac
 
+# Clang doesn't consider unrecognized options an error unless we specify
+# -Werror. We throw in some extra Clang-specific options to ensure that
+# this doesn't happen for GCC, which also accepts -Werror.
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5
+$as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; }
+save_CFLAGS="$CFLAGS"
+ax_pthread_extra_flags="-Werror"
+CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo(void);
+int
+main ()
+{
+foo()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  ax_pthread_extra_flags=
+                   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS="$save_CFLAGS"
+
 if test x"$ax_pthread_ok" = xno; then
 for flag in $ax_pthread_flags; do
 
@@ -23515,7 +23818,7 @@
         save_LIBS="$LIBS"
         save_CFLAGS="$CFLAGS"
         LIBS="$PTHREAD_LIBS $LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
 
         # Check for various functions.  We must include pthread.h,
         # since some functions may be macros.  (On the Sequent, we
@@ -23613,12 +23916,13 @@
             if test "$GCC" = "yes"; then
                 flag="-D_REENTRANT"
             else
+                # TODO: What about Clang on Solaris?
                 flag="-mt -D_REENTRANT"
             fi
             ;;
         esac
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
-$as_echo "${flag}" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5
+$as_echo "$flag" >&6; }
         if test "x$flag" != xno; then
             PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
         fi
@@ -23631,8 +23935,7 @@
 
                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-                    #include <pthread.h>
+#include <pthread.h>
 int
 main ()
 {
@@ -23661,9 +23964,20 @@
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
 
-        # More AIX lossage: must compile with xlc_r or cc_r
-        if test x"$GCC" != xyes; then
-          for ac_prog in xlc_r cc_r
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != xyes; then
+            case $host_os in
+                aix*)
+                case "x/$CC" in #(
+  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+    #handle absolute path differently from PATH based program lookup
+                   case "x$CC" in #(
+  x/*) :
+    if as_fn_executable_p ${CC}_r; then :
+  PTHREAD_CC="${CC}_r"
+fi ;; #(
+  *) :
+    for ac_prog in ${CC}_r
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
@@ -23704,26 +24018,32 @@
 
   test -n "$PTHREAD_CC" && break
 done
-test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
-
-        else
-          PTHREAD_CC=$CC
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+                ;;
+            esac
         fi
-else
-        PTHREAD_CC="$CC"
 fi
 
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
 
 
 
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 if test x"$ax_pthread_ok" = xyes; then
-        HAVE_PTHREAD=yes
+
+$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
+
         :
 else
         ax_pthread_ok=no
-        HAVE_PTHREAD=no
+
 fi
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -23732,7 +24052,7 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
- if test "x$HAVE_PTHREAD" = "xyes"; then
+ if test "x$ax_pthread_ok" = "xyes"; then
   HAVE_PTHREAD_TRUE=
   HAVE_PTHREAD_FALSE='#'
 else
@@ -23755,6 +24075,46 @@
 done
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_setname_np(const char*)" >&5
+$as_echo_n "checking for pthread_setname_np(const char*)... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+pthread_setname_np("example")
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+for ac_header in sys/uio.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_sys_uio_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_UIO_H 1
+_ACEOF
+
+fi
+
+done
+
+
 for ac_header in valgrind/valgrind.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default
@@ -24011,6 +24371,18 @@
 
 
 
+for ac_func in strcasestr
+do :
+  ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr"
+if test "x$ac_cv_func_strcasestr" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRCASESTR 1
+_ACEOF
+
+fi
+done
+
+
 for ac_func in gmtime_r
 do :
   ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
@@ -26007,52 +26379,6 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
 $as_echo "$flag_ok" >&6; }
 
-    else
-                        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 < 2.19.8\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-2.0 < 2.19.8") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -fno-strict-aliasing" >&5
-$as_echo_n "checking to see if compiler understands -fno-strict-aliasing... " >&6; }
-
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -fno-strict-aliasing"
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$save_CFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing"
-    true
-  else
-
-    true
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-
-fi
     fi
   fi
 
@@ -26259,7 +26585,7 @@
 
 CHECK_MAJOR_VERSION=0
 CHECK_MINOR_VERSION=9
-CHECK_MICRO_VERSION=8
+CHECK_MICRO_VERSION=14
 CHECK_VERSION=$CHECK_MAJOR_VERSION.$CHECK_MINOR_VERSION.$CHECK_MICRO_VERSION
 
 
@@ -26294,6 +26620,351 @@
 done
 
 
+for ac_func in getpid _getpid
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ac_fn_c_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strdup" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRDUP $ac_have_decl
+_ACEOF
+
+for ac_func in _strdup
+do :
+  ac_fn_c_check_func "$LINENO" "_strdup" "ac_cv_func__strdup"
+if test "x$ac_cv_func__strdup" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE__STRDUP 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in mkstemp
+do :
+  ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MKSTEMP 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in fork
+do :
+  ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork"
+if test "x$ac_cv_func_fork" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_FORK 1
+_ACEOF
+ HAVE_FORK=1
+else
+  HAVE_FORK=0
+fi
+done
+
+
+
+for ac_header in time.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_time_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_TIME_H 1
+_ACEOF
+
+fi
+
+done
+
+ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "
+    $ac_includes_default
+#if HAVE_TIME_H
+#include <time.h>
+#endif /* HAVE_TIME_H */
+
+"
+if test "x$ac_cv_have_decl_alarm" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ALARM $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "
+    $ac_includes_default
+#if HAVE_TIME_H
+#include <time.h>
+#endif /* HAVE_TIME_H */
+
+"
+if test "x$ac_cv_have_decl_localtime_r" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_LOCALTIME_R $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "strsignal" "ac_cv_have_decl_strsignal" "
+    $ac_includes_default
+#if HAVE_TIME_H
+#include <time.h>
+#endif /* HAVE_TIME_H */
+
+"
+if test "x$ac_cv_have_decl_strsignal" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRSIGNAL $ac_have_decl
+_ACEOF
+
+for ac_func in alarm setitimer strsignal
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ if test "x$ac_cv_func_alarm" = "xyes"; then
+  HAVE_ALARM_TRUE=
+  HAVE_ALARM_FALSE='#'
+else
+  HAVE_ALARM_TRUE='#'
+  HAVE_ALARM_FALSE=
+fi
+
+ if test "x$ac_cv_func_localtime_r" = "xyes"; then
+  HAVE_LOCALTIME_R_TRUE=
+  HAVE_LOCALTIME_R_FALSE='#'
+else
+  HAVE_LOCALTIME_R_TRUE='#'
+  HAVE_LOCALTIME_R_FALSE=
+fi
+
+ if test "x$ac_cv_func_strsignal" = "xyes"; then
+  HAVE_STRSIGNAL_TRUE=
+  HAVE_STRSIGNAL_FALSE='#'
+else
+  HAVE_STRSIGNAL_TRUE='#'
+  HAVE_STRSIGNAL_FALSE=
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct timespec" "tv_sec" "ac_cv_member_struct_timespec_tv_sec" "
+#include <time.h>
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+
+"
+if test "x$ac_cv_member_struct_timespec_tv_sec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TIMESPEC_TV_SEC 1
+_ACEOF
+
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define STRUCT_TIMESPEC_DEFINITION_MISSING 1
+_ACEOF
+
+fi
+ac_fn_c_check_member "$LINENO" "struct timespec" "tv_nsec" "ac_cv_member_struct_timespec_tv_nsec" "
+#include <time.h>
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+
+"
+if test "x$ac_cv_member_struct_timespec_tv_nsec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TIMESPEC_TV_NSEC 1
+_ACEOF
+
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define STRUCT_TIMESPEC_DEFINITION_MISSING 1
+_ACEOF
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct itimerspec" "it_interval" "ac_cv_member_struct_itimerspec_it_interval" "
+#include <time.h>
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+
+"
+if test "x$ac_cv_member_struct_itimerspec_it_interval" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_ITIMERSPEC_IT_INTERVAL 1
+_ACEOF
+
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define STRUCT_ITIMERSPEC_DEFINITION_MISSING 1
+_ACEOF
+
+fi
+ac_fn_c_check_member "$LINENO" "struct itimerspec" "it_value" "ac_cv_member_struct_itimerspec_it_value" "
+#include <time.h>
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+
+"
+if test "x$ac_cv_member_struct_itimerspec_it_value" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_ITIMERSPEC_IT_VALUE 1
+_ACEOF
+
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define STRUCT_ITIMERSPEC_DEFINITION_MISSING 1
+_ACEOF
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "timer_t" "ac_cv_type_timer_t" "
+    $ac_includes_default
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+
+"
+if test "x$ac_cv_type_timer_t" = xyes; then :
+
+else
+
+
+$as_echo "#define timer_t int" >>confdefs.h
+
+
+fi
+
+ac_fn_c_check_type "$LINENO" "clockid_t" "ac_cv_type_clockid_t" "
+    $ac_includes_default
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+
+"
+if test "x$ac_cv_type_clockid_t" = xyes; then :
+
+else
+
+
+$as_echo "#define clockid_t int" >>confdefs.h
+
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for timer_create, timer_settime, timer_delete in -lrt" >&5
+$as_echo_n "checking for timer_create, timer_settime, timer_delete in -lrt... " >&6; }
+if ${ac_cv_lib_rt_timer_create__timer_settime__timer_delete+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char timer_create, timer_settime, timer_delete ();
+int
+main ()
+{
+return timer_create, timer_settime, timer_delete ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_rt_timer_create__timer_settime__timer_delete=yes
+else
+  ac_cv_lib_rt_timer_create__timer_settime__timer_delete=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_timer_create__timer_settime__timer_delete" >&5
+$as_echo "$ac_cv_lib_rt_timer_create__timer_settime__timer_delete" >&6; }
+if test "x$ac_cv_lib_rt_timer_create__timer_settime__timer_delete" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRT 1
+_ACEOF
+
+  LIBS="-lrt $LIBS"
+
+fi
+
+ if test "x$ac_cv_lib_rt_timer_create__timer_settime__timer_delete" = "xyes"; then
+  HAVE_TIMER_CREATE_SETTIME_DELETE_TRUE=
+  HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE='#'
+else
+  HAVE_TIMER_CREATE_SETTIME_DELETE_TRUE='#'
+  HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE=
+fi
+
+
+ if test "x$ac_cv_func_clock_gettime" = "xyes"; then
+  HAVE_CLOCK_GETTIME_TRUE=
+  HAVE_CLOCK_GETTIME_FALSE='#'
+else
+  HAVE_CLOCK_GETTIME_TRUE='#'
+  HAVE_CLOCK_GETTIME_FALSE=
+fi
+
 
 # ------ AX CREATE STDINT H -------------------------------------
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint types" >&5
@@ -26783,7 +27454,7 @@
 
 
 
-ac_config_files="$ac_config_files Makefile gst/Makefile gst/gstconfig.h gst/gstversion.h gst/parse/Makefile gst/printf/Makefile libs/Makefile libs/gst/Makefile libs/gst/base/Makefile libs/gst/check/Makefile libs/gst/check/libcheck/Makefile libs/gst/check/libcheck/check.h libs/gst/controller/Makefile libs/gst/helpers/Makefile libs/gst/net/Makefile plugins/Makefile plugins/elements/Makefile po/Makefile.in tests/Makefile tests/benchmarks/Makefile tests/check/Makefile tests/misc/Makefile tests/examples/Makefile tests/examples/adapter/Makefile tests/examples/controller/Makefile tests/examples/stepping/Makefile tests/examples/helloworld/Makefile tests/examples/launch/Makefile tests/examples/manual/Makefile tests/examples/memory/Makefile tests/examples/metadata/Makefile tests/examples/queue/Makefile tests/examples/streams/Makefile tests/examples/typefind/Makefile tools/Makefile common/Makefile common/m4/Makefile docs/Makefile docs/design/Makefile docs/faq/Makefile docs/gst/Makefile docs/gst/gstreamer.types docs/libs/Makefile docs/plugins/Makefile docs/manual/Makefile docs/pwg/Makefile docs/slides/Makefile docs/xsl/Makefile docs/version.entities m4/Makefile pkgconfig/Makefile stamp.h pkgconfig/gstreamer.pc pkgconfig/gstreamer-uninstalled.pc pkgconfig/gstreamer-base.pc pkgconfig/gstreamer-base-uninstalled.pc pkgconfig/gstreamer-check.pc pkgconfig/gstreamer-check-uninstalled.pc pkgconfig/gstreamer-controller.pc pkgconfig/gstreamer-controller-uninstalled.pc pkgconfig/gstreamer-net.pc pkgconfig/gstreamer-net-uninstalled.pc gstreamer.spec"
+ac_config_files="$ac_config_files Makefile data/Makefile gst/Makefile gst/gstconfig.h gst/gstversion.h gst/parse/Makefile gst/printf/Makefile libs/Makefile libs/gst/Makefile libs/gst/base/Makefile libs/gst/check/Makefile libs/gst/check/libcheck/Makefile libs/gst/check/internal-check.h:libs/gst/check/libcheck/check.h.in libs/gst/controller/Makefile libs/gst/helpers/Makefile libs/gst/net/Makefile plugins/Makefile plugins/elements/Makefile po/Makefile.in tests/Makefile tests/benchmarks/Makefile tests/check/Makefile tests/misc/Makefile tests/examples/Makefile tests/examples/adapter/Makefile tests/examples/controller/Makefile tests/examples/stepping/Makefile tests/examples/helloworld/Makefile tests/examples/launch/Makefile tests/examples/manual/Makefile tests/examples/memory/Makefile tests/examples/metadata/Makefile tests/examples/netclock/Makefile tests/examples/queue/Makefile tests/examples/streamiddemux/Makefile tests/examples/streams/Makefile tests/examples/typefind/Makefile tools/Makefile common/Makefile common/m4/Makefile docs/Makefile docs/design/Makefile docs/faq/Makefile docs/gst/Makefile docs/gst/gstreamer.types docs/libs/Makefile docs/plugins/Makefile docs/manual/Makefile docs/pwg/Makefile docs/slides/Makefile docs/xsl/Makefile docs/version.entities m4/Makefile pkgconfig/Makefile stamp.h pkgconfig/gstreamer.pc pkgconfig/gstreamer-uninstalled.pc pkgconfig/gstreamer-base.pc pkgconfig/gstreamer-base-uninstalled.pc pkgconfig/gstreamer-check.pc pkgconfig/gstreamer-check-uninstalled.pc pkgconfig/gstreamer-controller.pc pkgconfig/gstreamer-controller-uninstalled.pc pkgconfig/gstreamer-net.pc pkgconfig/gstreamer-net-uninstalled.pc gstreamer.spec"
 
 
 sed \
@@ -26994,6 +27665,10 @@
   as_fn_error $? "conditional \"BUILD_EXAMPLES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${ENABLE_BASH_COMPLETION_TRUE}" && test -z "${ENABLE_BASH_COMPLETION_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_BASH_COMPLETION\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${GST_PLUGIN_BUILD_STATIC_TRUE}" && test -z "${GST_PLUGIN_BUILD_STATIC_FALSE}"; then
   as_fn_error $? "conditional \"GST_PLUGIN_BUILD_STATIC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -27031,6 +27706,10 @@
   as_fn_error $? "conditional \"HAVE_CPU_ALPHA\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_CPU_ARC_TRUE}" && test -z "${HAVE_CPU_ARC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_ARC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_CPU_ARM_TRUE}" && test -z "${HAVE_CPU_ARM_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_CPU_ARM\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -27163,6 +27842,26 @@
   as_fn_error $? "conditional \"HAVE_CHECK\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_ALARM_TRUE}" && test -z "${HAVE_ALARM_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_ALARM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LOCALTIME_R_TRUE}" && test -z "${HAVE_LOCALTIME_R_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_LOCALTIME_R\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_STRSIGNAL_TRUE}" && test -z "${HAVE_STRSIGNAL_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_STRSIGNAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_TIMER_CREATE_SETTIME_DELETE_TRUE}" && test -z "${HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_TIMER_CREATE_SETTIME_DELETE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CLOCK_GETTIME_TRUE}" && test -z "${HAVE_CLOCK_GETTIME_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CLOCK_GETTIME\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${SUBUNIT_TRUE}" && test -z "${SUBUNIT_FALSE}"; then
   as_fn_error $? "conditional \"SUBUNIT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -27564,7 +28263,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer $as_me 1.4.5, which was
+This file was extended by GStreamer $as_me 1.5.0.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -27630,7 +28329,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 config.status 1.4.5
+GStreamer config.status 1.5.0.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -28167,6 +28866,7 @@
     "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
     "$ac_stdint_h") CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
     "gst/Makefile") CONFIG_FILES="$CONFIG_FILES gst/Makefile" ;;
     "gst/gstconfig.h") CONFIG_FILES="$CONFIG_FILES gst/gstconfig.h" ;;
     "gst/gstversion.h") CONFIG_FILES="$CONFIG_FILES gst/gstversion.h" ;;
@@ -28177,7 +28877,7 @@
     "libs/gst/base/Makefile") CONFIG_FILES="$CONFIG_FILES libs/gst/base/Makefile" ;;
     "libs/gst/check/Makefile") CONFIG_FILES="$CONFIG_FILES libs/gst/check/Makefile" ;;
     "libs/gst/check/libcheck/Makefile") CONFIG_FILES="$CONFIG_FILES libs/gst/check/libcheck/Makefile" ;;
-    "libs/gst/check/libcheck/check.h") CONFIG_FILES="$CONFIG_FILES libs/gst/check/libcheck/check.h" ;;
+    "libs/gst/check/internal-check.h") CONFIG_FILES="$CONFIG_FILES libs/gst/check/internal-check.h:libs/gst/check/libcheck/check.h.in" ;;
     "libs/gst/controller/Makefile") CONFIG_FILES="$CONFIG_FILES libs/gst/controller/Makefile" ;;
     "libs/gst/helpers/Makefile") CONFIG_FILES="$CONFIG_FILES libs/gst/helpers/Makefile" ;;
     "libs/gst/net/Makefile") CONFIG_FILES="$CONFIG_FILES libs/gst/net/Makefile" ;;
@@ -28197,7 +28897,9 @@
     "tests/examples/manual/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/manual/Makefile" ;;
     "tests/examples/memory/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/memory/Makefile" ;;
     "tests/examples/metadata/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/metadata/Makefile" ;;
+    "tests/examples/netclock/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/netclock/Makefile" ;;
     "tests/examples/queue/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/queue/Makefile" ;;
+    "tests/examples/streamiddemux/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/streamiddemux/Makefile" ;;
     "tests/examples/streams/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/streams/Makefile" ;;
     "tests/examples/typefind/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/typefind/Makefile" ;;
     "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index 53c1afe..9e45826 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@
 dnl when going to/from release please set the nano (fourth number) right !
 dnl releases only do Wall, git and prerelease does Werror too
 dnl
-AC_INIT([GStreamer],[1.4.5],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
+AC_INIT([GStreamer],[1.5.0.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
 AG_GST_INIT
 
 dnl initialize automake (we require GNU make)
@@ -64,7 +64,7 @@
 dnl      1.10.9 (who knows) => 1009
 dnl
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 405, 0, 405)
+AS_LIBTOOL(GST, 501, 0, 501)
 
 dnl *** autotools stuff ****
 
@@ -134,6 +134,29 @@
   ["${srcdir}/gstreamer.doap"],
   [$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO])
 
+dnl check for bash completion
+AC_ARG_WITH([bash-completion-dir],
+    AS_HELP_STRING([--with-bash-completion-dir[=PATH]],
+        [Install the bash auto-completion script in this directory. @<:@default=yes@:>@]),
+    [],
+    [with_bash_completion_dir=yes])
+
+if test "x$with_bash_completion_dir" = "xyes"; then
+    PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0],
+        [BASH_COMPLETION_DIR="`pkg-config --variable=completionsdir bash-completion`"],
+        [BASH_COMPLETION_DIR="$datadir/bash-completion/completions"])
+    PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0],
+        [BASH_HELPERS_DIR="`pkg-config --variable=helpersdir bash-completion`"],
+        [BASH_HELPERS_DIR="$datadir/bash-completion/helpers"])
+else
+    BASH_COMPLETION_DIR="$with_bash_completion_dir/completions"
+    BASH_HELPERS_DIR="$with_bash_completion_dir/helpers"
+fi
+
+AC_SUBST([BASH_COMPLETION_DIR])
+AC_SUBST([BASH_HELPERS_DIR])
+AM_CONDITIONAL([ENABLE_BASH_COMPLETION],[test "x$with_bash_completion_dir" != "xno"])
+
 dnl build static plugins or not
 AC_MSG_CHECKING([whether to build static plugins or not])
 AC_ARG_ENABLE(
@@ -338,12 +361,29 @@
 AC_CHECK_HEADERS([stdio_ext.h], [], [], [AC_INCLUDES_DEFAULT])
 
 dnl check for pthreads
-AX_PTHREAD([HAVE_PTHREAD=yes], [HAVE_PTHREAD=no])
-AM_CONDITIONAL(HAVE_PTHREAD, test "x$HAVE_PTHREAD" = "xyes")
+dnl without arguments AX_PTHREAD() will do AC_DEFINE(HAVE_PTHREAD)
+dnl which later checks use in their test code
+AX_PTHREAD()
+AM_CONDITIONAL(HAVE_PTHREAD, test "x$ax_pthread_ok" = "xyes")
 
 dnl check for sys/prctl for setting thread name on Linux
 AC_CHECK_HEADERS([sys/prctl.h], [], [], [AC_INCLUDES_DEFAULT])
 
+dnl check for pthread_setname_np(const char*)
+dnl which is present on OS X 10.6, iOS 3.2 and above
+AC_MSG_CHECKING(for pthread_setname_np(const char*))
+AC_LINK_IFELSE(
+    [AC_LANG_PROGRAM(
+        [#include <pthread.h>],
+        [pthread_setname_np("example")])],
+    [AC_MSG_RESULT(yes)
+     AC_DEFINE(HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID,1,
+        [Have function pthread_setname_np(const char*)])],
+    [AC_MSG_RESULT(no)])
+
+dnl check for sys/uio.h for writev()
+AC_CHECK_HEADERS([sys/uio.h], [], [], [AC_INCLUDES_DEFAULT])
+
 dnl Check for valgrind.h
 dnl separate from HAVE_VALGRIND because you can have the program, but not
 dnl the dev package
@@ -416,6 +456,8 @@
 
 dnl *** checks for library functions ***
 
+AC_CHECK_FUNCS([strcasestr])
+
 AC_CHECK_FUNCS([gmtime_r])
 AC_CHECK_FUNCS([localtime_r])
 AC_CHECK_FUNCS([sigaction])
@@ -764,6 +806,7 @@
 
 AC_CONFIG_FILES(
 Makefile
+data/Makefile
 gst/Makefile
 gst/gstconfig.h
 gst/gstversion.h
@@ -774,7 +817,7 @@
 libs/gst/base/Makefile
 libs/gst/check/Makefile
 libs/gst/check/libcheck/Makefile
-libs/gst/check/libcheck/check.h
+libs/gst/check/internal-check.h:libs/gst/check/libcheck/check.h.in
 libs/gst/controller/Makefile
 libs/gst/helpers/Makefile
 libs/gst/net/Makefile
@@ -794,7 +837,9 @@
 tests/examples/manual/Makefile
 tests/examples/memory/Makefile
 tests/examples/metadata/Makefile
+tests/examples/netclock/Makefile
 tests/examples/queue/Makefile
+tests/examples/streamiddemux/Makefile
 tests/examples/streams/Makefile
 tests/examples/typefind/Makefile
 tools/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 0000000..7098492
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1,4 @@
+if ENABLE_BASH_COMPLETION
+bashcompletiondir = $(BASH_COMPLETION_DIR)
+dist_bashcompletion_DATA = completions/gst-inspect-1.0 completions/gst-launch-1.0
+endif
diff --git a/data/Makefile.in b/data/Makefile.in
new file mode 100644
index 0000000..d5204ef
--- /dev/null
+++ b/data/Makefile.in
@@ -0,0 +1,681 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = data
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(am__dist_bashcompletion_DATA_DIST)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-docbook.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-doc.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-parser.m4 \
+	$(top_srcdir)/common/m4/gst-platform.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__dist_bashcompletion_DATA_DIST = completions/gst-inspect-1.0 \
+	completions/gst-launch-1.0
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(bashcompletiondir)"
+DATA = $(dist_bashcompletion_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
+BISON_PATH = @BISON_PATH@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_MAJOR_VERSION = @CHECK_MAJOR_VERSION@
+CHECK_MICRO_VERSION = @CHECK_MICRO_VERSION@
+CHECK_MINOR_VERSION = @CHECK_MINOR_VERSION@
+CHECK_VERSION = @CHECK_VERSION@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIR = @DATADIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SUBUNIT = @ENABLE_SUBUNIT@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLEX_PATH = @FLEX_PATH@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GSL_LIBS = @GSL_LIBS@
+GST_AGE = @GST_AGE@
+GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
+GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_ALL_LIBS = @GST_ALL_LIBS@
+GST_API_VERSION = @GST_API_VERSION@
+GST_CURRENT = @GST_CURRENT@
+GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
+GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
+GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
+GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
+GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
+GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
+GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
+GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
+GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
+GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_OBJ_CFLAGS = @GST_OBJ_CFLAGS@
+GST_OBJ_CXXFLAGS = @GST_OBJ_CXXFLAGS@
+GST_OBJ_LIBS = @GST_OBJ_LIBS@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PLUGIN_LIBTOOLFLAGS = @GST_PLUGIN_LIBTOOLFLAGS@
+GST_PLUGIN_SCANNER_INSTALLED = @GST_PLUGIN_SCANNER_INSTALLED@
+GST_REGISTRY_DOC_TYPES = @GST_REGISTRY_DOC_TYPES@
+GST_REVISION = @GST_REVISION@
+GST_VERSION_MAJOR = @GST_VERSION_MAJOR@
+GST_VERSION_MICRO = @GST_VERSION_MICRO@
+GST_VERSION_MINOR = @GST_VERSION_MINOR@
+GST_VERSION_NANO = @GST_VERSION_NANO@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
+HAVE_DVIPS = @HAVE_DVIPS@
+HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
+HAVE_GMP = @HAVE_GMP@
+HAVE_GSL = @HAVE_GSL@
+HAVE_JADETEX = @HAVE_JADETEX@
+HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
+HAVE_PNMTOPS = @HAVE_PNMTOPS@
+HAVE_PS2PDF = @HAVE_PS2PDF@
+HAVE_XMLLINT = @HAVE_XMLLINT@
+HAVE_XSLTPROC = @HAVE_XSLTPROC@
+HOST_CPU = @HOST_CPU@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDIR = @LIBDIR@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL_PATH = @PERL_PATH@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PRINTF_CFLAGS = @PRINTF_CFLAGS@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@ENABLE_BASH_COMPLETION_TRUE@bashcompletiondir = $(BASH_COMPLETION_DIR)
+@ENABLE_BASH_COMPLETION_TRUE@dist_bashcompletion_DATA = completions/gst-inspect-1.0 completions/gst-launch-1.0
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu data/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-dist_bashcompletionDATA: $(dist_bashcompletion_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bashcompletiondir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bashcompletiondir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bashcompletiondir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(bashcompletiondir)" || exit $$?; \
+	done
+
+uninstall-dist_bashcompletionDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(bashcompletiondir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(bashcompletiondir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_bashcompletionDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_bashcompletionDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-dist_bashcompletionDATA 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-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am uninstall-dist_bashcompletionDATA
+
+
+# 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/data/completions/gst-inspect-1.0 b/data/completions/gst-inspect-1.0
new file mode 100644
index 0000000..130b963
--- /dev/null
+++ b/data/completions/gst-inspect-1.0
@@ -0,0 +1,105 @@
+# GStreamer
+# Copyright (C) 2015 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+#
+# bash/zsh completion support for gst-inspect
+#
+# 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.
+
+HELPERDIR="${BASH_SOURCE[0]%/*}/../helpers"
+
+if [[ ! -d "$HELPERDIR"  ]]; then
+	HELPERDIR="$(pkg-config --variable=helpersdir gstreamer-1.0)"
+else
+	HELPERDIR=`cd "$HELPERDIR"; pwd`
+fi
+
+# Common definitions
+. "$HELPERDIR"/gst
+
+HELPER="$HELPERDIR/gst-completion-helper-1.0"
+
+_inspect_all_arguments ()
+{
+	COMPREPLY=( $(compgen -W "$(gst-inspect-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) )
+}
+
+_inspect_all_elements ()
+{
+	COMPREPLY=( $(compgen -W "$($HELPER -l)" -- $cur) )
+}
+
+_gstinspect___atleast_version () { _mandatory__argument; }
+
+_gstinspect___exists ()
+{
+	_inspect_all_elements
+}
+
+__inspect_main ()
+{
+	local i=1 command function_exists completion_func
+
+	while [[ $i -ne $COMP_CWORD ]];
+		do
+			local var
+			var="${COMP_WORDS[i]}"
+			if [[ "$var" == "--"* ]]
+			then
+				command="$var"
+			fi
+		i=$[$i+1]
+		done
+
+	if [[ "$command" == "--gst"* ]]; then
+		completion_func="_${command//-/_}"
+	else
+		completion_func="_gstinspect_${command//-/_}"
+	fi
+
+	declare -f $completion_func >/dev/null 2>&1
+
+	function_exists=$?
+
+	if [[ "$cur" == "--"* ]]; then
+		_inspect_all_arguments
+	elif [ $function_exists -eq 0 ]
+	then
+		$completion_func
+	else
+		_inspect_all_elements
+	fi
+}
+
+__inspect_func_wrap ()
+{
+	local cur prev
+	cur="${COMP_WORDS[COMP_CWORD]}"
+	prev="${COMP_WORDS[COMP_CWORD-1]}"
+	$1
+}
+
+# Setup completion for certain functions defined above by setting common
+# variables and workarounds.
+# This is NOT a public function; use at your own risk.
+__inspect_complete ()
+{
+	local wrapper="__inspect_wrap${2}"
+	eval "$wrapper () { __inspect_func_wrap $2 ; }"
+	complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
+		|| complete -o default -o nospace -F $wrapper $1
+}
+
+__inspect_complete gst-inspect-1.0 __inspect_main
diff --git a/data/completions/gst-launch-1.0 b/data/completions/gst-launch-1.0
new file mode 100644
index 0000000..a12e06e
--- /dev/null
+++ b/data/completions/gst-launch-1.0
@@ -0,0 +1,143 @@
+# GStreamer
+# Copyright (C) 2015 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+#
+# bash/zsh completion support for gst-launch
+#
+# 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.
+
+HELPERDIR="${BASH_SOURCE[0]%/*}/../helpers"
+
+if [[ ! -d "$HELPERDIR" ]]; then
+	HELPERDIR="$(pkg-config --variable=helpersdir gstreamer-1.0)"
+else
+	HELPERDIR=`cd "$HELPERDIR"; pwd`
+fi
+
+# Common definitions
+. "$HELPERDIR"/gst
+
+HELPER="$HELPERDIR/gst-completion-helper-1.0"
+
+_launch_all_arguments ()
+{
+	COMPREPLY=( $(compgen -W "$(gst-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) )
+}
+
+_complete_compatible_elements ()
+{
+	COMPREPLY=( $(compgen -W "$($HELPER --compatible-with $previous_element)" -- $cur) )
+}
+
+_complete_all_elements ()
+{
+	COMPREPLY=( $(compgen -W "$($HELPER -l)" -- $cur) )
+}
+
+_complete_element_properties ()
+{
+	COMPREPLY=( $(compgen -W "$($HELPER --element-properties $previous_element)" -- $cur) )
+}
+
+_gstlaunch___exclude_ () { _mandatory__argument; }
+
+__launch_main ()
+{
+	local i=1 command function_exists previous_element have_previous_element=0 completion_func
+
+	while [[ $i -ne $COMP_CWORD ]];
+		do
+			local var
+			var="${COMP_WORDS[i]}"
+			if [[ "$var" == "--"* ]]
+			then
+				command="$var"
+			fi
+		i=$[$i+1]
+		done
+
+	i=1
+	while [[ $i -ne $COMP_CWORD ]];
+		do
+			local var
+			var="${COMP_WORDS[i]}"
+
+			if [[ "$var" == "--"* ]]
+			then
+				i=$[$i+1]
+				continue
+			fi
+
+			$(gst-inspect-1.0 --exists $var)
+			if [ $? -eq 0 ]
+			then
+				previous_element="$var"
+				have_previous_element=1
+			fi
+		i=$[$i+1]
+		done
+
+	if [[ "$command" == "--gst"* ]]; then
+		completion_func="_${command//-/_}"
+	else
+		completion_func="_gstlaunch_${command//-/_}"
+	fi
+
+	# Seems like bash doesn't like "exclude" in function names
+	if [[ "$completion_func" == "_gstlaunch___exclude" ]]
+	then
+		completion_func="_gstlaunch___exclude_"
+	fi
+
+	declare -f $completion_func >/dev/null 2>&1
+
+	function_exists=$?
+
+	if [[ "$cur" == "--"* ]]; then
+		_launch_all_arguments
+	elif [ $function_exists -eq 0 ]
+	then
+		$completion_func
+	elif [ $have_previous_element -ne 0 ] && [[ "$prev" == "!" ]]
+	then
+		_complete_compatible_elements
+	elif [ $have_previous_element -ne 0 ]
+	then
+		_complete_element_properties
+	else
+		_complete_all_elements
+	fi
+}
+
+__launch_func_wrap ()
+{
+	local cur prev
+	cur="${COMP_WORDS[COMP_CWORD]}"
+	prev="${COMP_WORDS[COMP_CWORD-1]}"
+	$1
+}
+
+# Setup completion for certain functions defined above by setting common
+# variables and workarounds.
+# This is NOT a public function; use at your own risk.
+__launch_complete ()
+{
+	local wrapper="__launch_wrap${2}"
+	eval "$wrapper () { __launch_func_wrap $2 ; }"
+	complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
+		|| complete -o default -o nospace -F $wrapper $1
+}
+
+__launch_complete gst-launch-1.0 __launch_main
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 89d44a4..67eadc4 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -95,6 +95,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -112,7 +113,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -219,6 +220,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -324,6 +329,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in
index fa61b4a..743cfea 100644
--- a/docs/design/Makefile.in
+++ b/docs/design/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -153,6 +154,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -258,6 +263,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/design/part-latency.txt b/docs/design/part-latency.txt
index 315c756..1d109e8 100644
--- a/docs/design/part-latency.txt
+++ b/docs/design/part-latency.txt
@@ -228,12 +228,72 @@
  (out) "live", G_TYPE_BOOLEAN (default FALSE)
         - if a live element is found upstream
 
- (out) "min-latency", G_TYPE_UINT64 (default 0)
-        - the minimum latency in the pipeline
+ (out) "min-latency", G_TYPE_UINT64 (default 0, must not be NONE)
+        - the minimum latency in the pipeline, meaning the minimum time
+          downstream elements synchronizing to the clock have to wait until
+          they can be sure that all data for the current running time has
+          been received.
 
- (out) "max-latency", G_TYPE_UINT64 (default 0)
-        - the maximum latency in the pipeline
+          Elements answering the latency query and introducing latency must
+          set this to the maximum time for which they will delay data, while
+          considering upstream's minimum latency. As such, from an element's
+          perspective this is *not* its own minimum latency but its own
+          maximum latency.
+          Considering upstream's minimum latency in general means that the
+          element's own value is added to upstream's value, as this will give
+          the overall minimum latency of all elements from the source to the
+          current element:
 
+          min_latency = upstream_min_latency + own_min_latency
+
+ (out) "max-latency", G_TYPE_UINT64 (default 0, NONE meaning infinity)
+        - the maximum latency in the pipeline, meaning the maximum time an
+          element synchronizing to the clock is allowed to wait for receiving
+          all data for the current running time. Waiting for a longer time
+          will result in data loss, overruns and underruns of buffers and in
+          general breaks synchronized data flow in the pipeline.
+
+          Elements answering the latency query should set this to the maximum
+          time for which they can buffer upstream data without blocking or
+          dropping further data. For an element this value will generally be
+          its own minimum latency, but might be bigger than that if it can
+          buffer more data. As such, queue elements can be used to increase
+          the maximum latency.
+
+          The value set in the query should again consider upstream's maximum
+          latency:
+          - If the current element has blocking buffering, i.e. it does
+            not drop data by itself when its internal buffer is full, it should
+            just add its own maximum latency (i.e. the size of its internal
+            buffer) to upstream's value. If upstream's maximum latency, or the
+            elements internal maximum latency was NONE (i.e. infinity), it will
+            be set to infinity.
+
+            if (upstream_max_latency == NONE || own_max_latency == NONE)
+              max_latency = NONE;
+            else
+              max_latency = upstream_max_latency + own_max_latency
+
+            If the element has multiple sinkpads, the minimum upstream latency is
+            the maximum of all live upstream minimum latencies.
+
+          - If the current element has leaky buffering, i.e. it drops data by
+            itself when its internal buffer is full, it should take the minimum
+            of its own maximum latency and upstream's. Examples for such
+            elements are audio sinks and sources with an internal ringbuffer,
+            leaky queues and in general live sources with a limited amount of
+            internal buffers that can be used.
+
+            max_latency = MIN (upstream_max_latency, own_max_latency)
+
+            Note: many GStreamer base classes allow subclasses to set a
+            minimum and maximum latency and handle the query themselves. These
+            base classes assume non-leaky (i.e. blocking) buffering for the
+            maximum latency. The base class' default query handler needs to be
+            overridden to correctly handle leaky buffering.
+
+            If the element has multiple sinkpads, the maximum upstream latency is
+            the minimum of all live upstream maximum latencies.
 
 Event
 ~~~~~
@@ -254,8 +314,10 @@
 When the pipeline collected all ASYNC_DONE messages it can calculate the global
 latency as follows:
 
-  - perform a latency query on all sinks.
-  - latency = MAX (all min latencies) 
+  - perform a latency query on all sinks
+    - sources set their minimum and maximum latency
+    - other elements add their own values as described above
+  - latency = MAX (all min latencies)
   - if MIN (all max latencies) < latency we have an impossible situation and we
     must generate an error indicating that this pipeline cannot be played. This
     usually means that there is not enough buffering in some chain of the
diff --git a/docs/faq/Makefile.in b/docs/faq/Makefile.in
index fba0a6f..e9c6ae4 100644
--- a/docs/faq/Makefile.in
+++ b/docs/faq/Makefile.in
@@ -114,6 +114,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -131,7 +132,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/faq/developing.xml b/docs/faq/developing.xml
index 271236e..0f9a388 100644
--- a/docs/faq/developing.xml
+++ b/docs/faq/developing.xml
@@ -204,9 +204,7 @@
 in 'unified context' format (use diff -u -p). They should be attached to
 a bug report (or feature request) in
 <ulink url="http://bugzilla.gnome.org">bugzilla</ulink> rather than
-sent to the mailing list. Also see
-<ulink url="http://gstreamer.freedesktop.org/wiki/SubmittingPatches">SubmittingPatches</ulink>
-in the GStreamer wiki.
+sent to the mailing list.
         </para>
       </answer>
     </qandaentry>
diff --git a/docs/gst/Makefile.in b/docs/gst/Makefile.in
index 29d8e69..71433c1 100644
--- a/docs/gst/Makefile.in
+++ b/docs/gst/Makefile.in
@@ -109,6 +109,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -126,7 +127,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -174,6 +175,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -281,6 +286,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/gst/gst-universe.svg b/docs/gst/gst-universe.svg
index 61067f9..e69de29 100644
--- a/docs/gst/gst-universe.svg
+++ b/docs/gst/gst-universe.svg
@@ -1,310 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.38.0 (20140413.2041)
- -->
-<!-- Title: pipeline Pages: 1 -->
-<svg width="712pt" height="632pt"
- viewBox="0.00 0.00 712.00 632.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 628)">
-<title>pipeline</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-628 708,-628 708,4 -4,4"/>
-<!-- application -->
-<g id="node1" class="node"><title>application</title>
-<polygon fill="#ffdddd" stroke="black" points="581,-624 513,-624 513,-588 581,-588 581,-624"/>
-<text text-anchor="middle" x="547" y="-603.8" font-family="Bitstream Vera Sans" font-size="9.00">application</text>
-</g>
-<!-- bus -->
-<g id="node3" class="node"><title>bus</title>
-<g id="a_node3"><a xlink:href="GstBus.html" xlink:title="bus" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="123,-464 69,-464 69,-428 123,-428 123,-464"/>
-<text text-anchor="middle" x="96" y="-443.8" font-family="Bitstream Vera Sans" font-size="9.00">bus</text>
-</a>
-</g>
-</g>
-<!-- application&#45;&gt;bus -->
-<g id="edge24" class="edge"><title>application&#45;&gt;bus</title>
-<path fill="none" stroke="black" d="M512.839,-602.11C431.071,-594.787 226.336,-573.934 165,-544 133.348,-528.553 124.98,-520.285 107,-490 104.171,-485.236 102.064,-479.755 100.496,-474.337"/>
-<polygon fill="black" stroke="black" points="103.805,-473.124 98.0966,-464.198 96.9935,-474.736 103.805,-473.124"/>
-<text text-anchor="middle" x="181" y="-524.4" font-family="Bitstream Vera Sans" font-size="7.00">listen on</text>
-</g>
-<!-- event -->
-<g id="node9" class="node"><title>event</title>
-<g id="a_node9"><a xlink:href="gstreamer-GstEvent.html" xlink:title="event" target="_top">
-<polygon fill="#ddffdd" stroke="black" points="595,-304 541,-304 541,-268 595,-268 595,-304"/>
-<text text-anchor="middle" x="568" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00">event</text>
-</a>
-</g>
-</g>
-<!-- application&#45;&gt;event -->
-<g id="edge26" class="edge"><title>application&#45;&gt;event</title>
-<path fill="none" stroke="black" d="M581.083,-590.104C604.731,-577.208 632,-556.041 632,-527 632,-527 632,-527 632,-365 632,-344.901 629.961,-338.152 618,-322 613.933,-316.508 608.741,-311.561 603.25,-307.234"/>
-<polygon fill="black" stroke="black" points="605.244,-304.357 595.086,-301.346 601.149,-310.034 605.244,-304.357"/>
-<text text-anchor="middle" x="641" y="-444.4" font-family="Bitstream Vera Sans" font-size="7.00">send</text>
-</g>
-<!-- pipeline -->
-<g id="node13" class="node"><title>pipeline</title>
-<g id="a_node13"><a xlink:href="GstPipeline.html" xlink:title="pipeline" target="_top">
-<polygon fill="#ccccff" stroke="black" points="260,-544 206,-544 206,-508 260,-508 260,-544"/>
-<text text-anchor="middle" x="233" y="-523.8" font-family="Bitstream Vera Sans" font-size="9.00">pipeline</text>
-</a>
-</g>
-</g>
-<!-- application&#45;&gt;pipeline -->
-<g id="edge23" class="edge"><title>application&#45;&gt;pipeline</title>
-<path fill="none" stroke="black" d="M512.799,-596.504C453.447,-581.761 331.849,-551.555 270.363,-536.281"/>
-<polygon fill="black" stroke="black" points="270.868,-532.8 260.319,-533.786 269.181,-539.594 270.868,-532.8"/>
-<text text-anchor="middle" x="406.5" y="-564.4" font-family="Bitstream Vera Sans" font-size="7.00">has</text>
-</g>
-<!-- query -->
-<g id="node16" class="node"><title>query</title>
-<g id="a_node16"><a xlink:href="gstreamer-GstQuery.html" xlink:title="query" target="_top">
-<polygon fill="#ddffdd" stroke="black" points="690,-304 636,-304 636,-268 690,-268 690,-304"/>
-<text text-anchor="middle" x="663" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00">query</text>
-</a>
-</g>
-</g>
-<!-- application&#45;&gt;query -->
-<g id="edge25" class="edge"><title>application&#45;&gt;query</title>
-<path fill="none" stroke="black" d="M581.003,-600.877C622.154,-593.772 686,-575.011 686,-527 686,-527 686,-527 686,-365 686,-347.449 680.577,-328.551 674.997,-313.753"/>
-<polygon fill="black" stroke="black" points="678.147,-312.205 671.174,-304.229 671.651,-314.813 678.147,-312.205"/>
-<text text-anchor="middle" x="695" y="-444.4" font-family="Bitstream Vera Sans" font-size="7.00">send</text>
-</g>
-<!-- bin -->
-<g id="node2" class="node"><title>bin</title>
-<g id="a_node2"><a xlink:href="GstBin.html" xlink:title="bin" target="_top">
-<polygon fill="#ccccff" stroke="black" points="346,-464 292,-464 292,-428 346,-428 346,-464"/>
-<text text-anchor="middle" x="319" y="-443.8" font-family="Bitstream Vera Sans" font-size="9.00">bin</text>
-</a>
-</g>
-</g>
-<!-- element -->
-<g id="node7" class="node"><title>element</title>
-<g id="a_node7"><a xlink:href="GstElement.html" xlink:title="element" target="_top">
-<polygon fill="#ccccff" stroke="black" points="382.5,-384 327.5,-384 327.5,-348 382.5,-348 382.5,-384"/>
-<text text-anchor="middle" x="355" y="-363.8" font-family="Bitstream Vera Sans" font-size="9.00">element</text>
-</a>
-</g>
-</g>
-<!-- bin&#45;&gt;element -->
-<g id="edge1" class="edge"><title>bin&#45;&gt;element</title>
-<path fill="none" stroke="black" d="M316.513,-427.631C316.068,-419.539 316.592,-409.964 320,-402 321.509,-398.474 323.555,-395.114 325.905,-391.97"/>
-<polygon fill="black" stroke="black" points="328.757,-394.024 332.678,-384.181 323.475,-389.431 328.757,-394.024"/>
-<text text-anchor="middle" x="326.5" y="-404.4" font-family="Bitstream Vera Sans" font-size="7.00">is&#45;a</text>
-</g>
-<!-- bin&#45;&gt;element -->
-<g id="edge12" class="edge"><title>bin&#45;&gt;element</title>
-<path fill="none" stroke="black" d="M326.99,-427.689C331.604,-417.692 337.505,-404.906 342.7,-393.651"/>
-<polygon fill="black" stroke="black" points="346.02,-394.809 347.033,-384.262 339.664,-391.875 346.02,-394.809"/>
-<text text-anchor="middle" x="349" y="-404.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- message -->
-<g id="node10" class="node"><title>message</title>
-<g id="a_node10"><a xlink:href="gstreamer-GstMessage.html" xlink:title="message" target="_top">
-<polygon fill="#ddffdd" stroke="black" points="131.5,-304 72.5,-304 72.5,-268 131.5,-268 131.5,-304"/>
-<text text-anchor="middle" x="102" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00">message</text>
-</a>
-</g>
-</g>
-<!-- bus&#45;&gt;message -->
-<g id="edge19" class="edge"><title>bus&#45;&gt;message</title>
-<path fill="none" stroke="black" d="M96.6535,-427.79C97.6905,-400.485 99.7217,-346.994 100.96,-314.38"/>
-<polygon fill="black" stroke="black" points="104.465,-314.314 101.347,-304.188 97.4702,-314.048 104.465,-314.314"/>
-<text text-anchor="middle" x="114" y="-364.4" font-family="Bitstream Vera Sans" font-size="7.00">receive</text>
-</g>
-<!-- buffer -->
-<g id="node4" class="node"><title>buffer</title>
-<g id="a_node4"><a xlink:href="gstreamer-GstBuffer.html" xlink:title="buffer" target="_top">
-<polygon fill="#ddffdd" stroke="black" points="528,-250 474,-250 474,-214 528,-214 528,-250"/>
-<text text-anchor="middle" x="501" y="-229.8" font-family="Bitstream Vera Sans" font-size="9.00">buffer</text>
-</a>
-</g>
-</g>
-<!-- caps -->
-<g id="node5" class="node"><title>caps</title>
-<g id="a_node5"><a xlink:href="gstreamer-GstCaps.html" xlink:title="caps" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="479,-116 425,-116 425,-80 479,-80 479,-116"/>
-<text text-anchor="middle" x="452" y="-95.8" font-family="Bitstream Vera Sans" font-size="9.00">caps</text>
-</a>
-</g>
-</g>
-<!-- buffer&#45;&gt;caps -->
-<g id="edge10" class="edge"><title>buffer&#45;&gt;caps</title>
-<path fill="none" stroke="black" d="M495.075,-213.734C490.094,-199.326 482.729,-178.272 476,-160 471.721,-148.382 470.521,-145.526 466,-134 464.925,-131.258 463.795,-128.399 462.662,-125.548"/>
-<polygon fill="black" stroke="black" points="465.838,-124.063 458.882,-116.072 459.336,-126.657 465.838,-124.063"/>
-<text text-anchor="middle" x="499" y="-176.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- structure -->
-<g id="node18" class="node"><title>structure</title>
-<g id="a_node18"><a xlink:href="gstreamer-GstStructure.html" xlink:title="structure" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="482,-36 422,-36 422,-0 482,-0 482,-36"/>
-<text text-anchor="middle" x="452" y="-15.8" font-family="Bitstream Vera Sans" font-size="9.00">structure</text>
-</a>
-</g>
-</g>
-<!-- caps&#45;&gt;structure -->
-<g id="edge11" class="edge"><title>caps&#45;&gt;structure</title>
-<path fill="none" stroke="black" d="M452,-79.6893C452,-69.8938 452,-57.4218 452,-46.335"/>
-<polygon fill="black" stroke="black" points="455.5,-46.2623 452,-36.2623 448.5,-46.2624 455.5,-46.2623"/>
-<text text-anchor="middle" x="462" y="-56.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- clock -->
-<g id="node6" class="node"><title>clock</title>
-<g id="a_node6"><a xlink:href="GstClock.html" xlink:title="clock" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="204,-304 150,-304 150,-268 204,-268 204,-304"/>
-<text text-anchor="middle" x="177" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00">clock</text>
-</a>
-</g>
-</g>
-<!-- element&#45;&gt;buffer -->
-<g id="edge17" class="edge"><title>element&#45;&gt;buffer</title>
-<path fill="none" stroke="black" d="M381.372,-347.917C390.161,-342.221 400.004,-335.839 409,-330 426.785,-318.456 433.595,-318.569 449,-304 463.157,-290.611 476.114,-272.942 485.553,-258.58"/>
-<polygon fill="black" stroke="black" points="488.516,-260.443 490.955,-250.132 482.618,-256.672 488.516,-260.443"/>
-<text text-anchor="middle" x="450.5" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">send &amp; receive</text>
-</g>
-<!-- element&#45;&gt;clock -->
-<g id="edge7" class="edge"><title>element&#45;&gt;clock</title>
-<path fill="none" stroke="black" d="M327.234,-360.439C301.305,-355.435 262.052,-345.921 231,-330 220.979,-324.862 211.039,-317.702 202.471,-310.697"/>
-<polygon fill="black" stroke="black" points="204.602,-307.915 194.718,-304.1 200.065,-313.246 204.602,-307.915"/>
-<text text-anchor="middle" x="253.5" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">may provide</text>
-</g>
-<!-- element_factory -->
-<g id="node8" class="node"><title>element_factory</title>
-<g id="a_node8"><a xlink:href="GstElementFactory.html" xlink:title="element factory" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="312,-304 222,-304 222,-268 312,-268 312,-304"/>
-<text text-anchor="middle" x="267" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00">element factory</text>
-</a>
-</g>
-</g>
-<!-- element&#45;&gt;element_factory -->
-<g id="edge14" class="edge"><title>element&#45;&gt;element_factory</title>
-<path fill="none" stroke="black" d="M327.192,-356.36C313.019,-350.764 296.414,-342.208 285,-330 280.68,-325.38 277.32,-319.573 274.737,-313.734"/>
-<polygon fill="black" stroke="black" points="277.899,-312.2 271.09,-304.082 271.351,-314.674 277.899,-312.2"/>
-<text text-anchor="middle" x="313" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">is created from</text>
-</g>
-<!-- element&#45;&gt;event -->
-<g id="edge16" class="edge"><title>element&#45;&gt;event</title>
-<path fill="none" stroke="black" d="M382.632,-359.605C409.75,-353.864 452.014,-343.715 487,-330 502.175,-324.051 518.167,-315.984 531.895,-308.443"/>
-<polygon fill="black" stroke="black" points="533.988,-311.282 541,-303.34 530.565,-305.176 533.988,-311.282"/>
-<text text-anchor="middle" x="533.5" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">send &amp; receive</text>
-</g>
-<!-- element&#45;&gt;message -->
-<g id="edge18" class="edge"><title>element&#45;&gt;message</title>
-<path fill="none" stroke="black" d="M327.415,-360.675C295.511,-355.266 241.648,-344.871 197,-330 178.015,-323.677 157.714,-314.798 140.773,-306.749"/>
-<polygon fill="black" stroke="black" points="142.263,-303.582 131.737,-302.384 139.219,-309.885 142.263,-303.582"/>
-<text text-anchor="middle" x="206" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">send</text>
-</g>
-<!-- pad -->
-<g id="node11" class="node"><title>pad</title>
-<g id="a_node11"><a xlink:href="GstPad.html" xlink:title="pad" target="_top">
-<polygon fill="#ccccff" stroke="black" points="440,-304 386,-304 386,-268 440,-268 440,-304"/>
-<text text-anchor="middle" x="413" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00">pad</text>
-</a>
-</g>
-</g>
-<!-- element&#45;&gt;pad -->
-<g id="edge6" class="edge"><title>element&#45;&gt;pad</title>
-<path fill="none" stroke="black" d="M367.872,-347.689C375.606,-337.288 385.585,-323.869 394.191,-312.294"/>
-<polygon fill="black" stroke="black" points="397.005,-314.375 400.164,-304.262 391.388,-310.199 397.005,-314.375"/>
-<text text-anchor="middle" x="396" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- pad_template -->
-<g id="node12" class="node"><title>pad_template</title>
-<g id="a_node12"><a xlink:href="GstPadTemplate.html" xlink:title="pad template" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="416,-196 336,-196 336,-160 416,-160 416,-196"/>
-<text text-anchor="middle" x="376" y="-175.8" font-family="Bitstream Vera Sans" font-size="9.00">pad template</text>
-</a>
-</g>
-</g>
-<!-- element&#45;&gt;pad_template -->
-<g id="edge5" class="edge"><title>element&#45;&gt;pad_template</title>
-<path fill="none" stroke="black" d="M354.373,-347.762C353.894,-328.315 353.779,-295.775 357,-268 359.427,-247.075 364.48,-223.805 368.765,-206.309"/>
-<polygon fill="black" stroke="black" points="372.254,-206.785 371.303,-196.233 365.466,-205.075 372.254,-206.785"/>
-<text text-anchor="middle" x="367" y="-284.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- element&#45;&gt;query -->
-<g id="edge15" class="edge"><title>element&#45;&gt;query</title>
-<path fill="none" stroke="black" d="M382.676,-362.596C423.319,-358.573 501.235,-348.981 565,-330 586.078,-323.726 608.616,-314.061 626.757,-305.482"/>
-<polygon fill="black" stroke="black" points="628.322,-308.613 635.811,-301.118 625.283,-302.307 628.322,-308.613"/>
-<text text-anchor="middle" x="603" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">answers</text>
-</g>
-<!-- plugin_feature -->
-<g id="node15" class="node"><title>plugin_feature</title>
-<g id="a_node15"><a xlink:href="GstPluginFeature.html" xlink:title="plugin feature" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="164.5,-196 81.5,-196 81.5,-160 164.5,-160 164.5,-196"/>
-<text text-anchor="middle" x="123" y="-175.8" font-family="Bitstream Vera Sans" font-size="9.00">plugin feature</text>
-</a>
-</g>
-</g>
-<!-- element_factory&#45;&gt;plugin_feature -->
-<g id="edge22" class="edge"><title>element_factory&#45;&gt;plugin_feature</title>
-<path fill="none" stroke="black" d="M243.864,-267.969C219.76,-250.226 181.821,-222.299 154.885,-202.471"/>
-<polygon fill="black" stroke="black" points="156.685,-199.45 146.557,-196.341 152.536,-205.088 156.685,-199.45"/>
-<text text-anchor="middle" x="223.5" y="-230.4" font-family="Bitstream Vera Sans" font-size="7.00">is&#45;a</text>
-</g>
-<!-- pad&#45;&gt;caps -->
-<g id="edge8" class="edge"><title>pad&#45;&gt;caps</title>
-<path fill="none" stroke="black" d="M427.945,-267.881C431.87,-262.494 435.655,-256.298 438,-250 446.192,-227.992 449.765,-163.333 451.179,-126.151"/>
-<polygon fill="black" stroke="black" points="454.682,-126.128 451.537,-116.011 447.686,-125.881 454.682,-126.128"/>
-<text text-anchor="middle" x="460" y="-176.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- pad&#45;&gt;pad_template -->
-<g id="edge13" class="edge"><title>pad&#45;&gt;pad_template</title>
-<path fill="none" stroke="black" d="M393.78,-267.685C389.148,-262.473 384.748,-256.417 382,-250 376.16,-236.361 374.475,-219.918 374.334,-206.291"/>
-<polygon fill="black" stroke="black" points="377.837,-206.131 374.502,-196.075 370.838,-206.016 377.837,-206.131"/>
-<text text-anchor="middle" x="410" y="-230.4" font-family="Bitstream Vera Sans" font-size="7.00">is created from</text>
-</g>
-<!-- pad_template&#45;&gt;caps -->
-<g id="edge9" class="edge"><title>pad_template&#45;&gt;caps</title>
-<path fill="none" stroke="black" d="M392.867,-159.689C403.198,-149.086 416.586,-135.346 428.009,-123.622"/>
-<polygon fill="black" stroke="black" points="430.708,-125.867 435.18,-116.262 425.695,-120.982 430.708,-125.867"/>
-<text text-anchor="middle" x="427" y="-136.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- pipeline&#45;&gt;bin -->
-<g id="edge2" class="edge"><title>pipeline&#45;&gt;bin</title>
-<path fill="none" stroke="black" d="M252.086,-507.689C263.888,-496.985 279.215,-483.084 292.221,-471.288"/>
-<polygon fill="black" stroke="black" points="294.911,-473.573 299.967,-464.262 290.209,-468.388 294.911,-473.573"/>
-<text text-anchor="middle" x="285.5" y="-484.4" font-family="Bitstream Vera Sans" font-size="7.00">is&#45;a</text>
-</g>
-<!-- pipeline&#45;&gt;bus -->
-<g id="edge3" class="edge"><title>pipeline&#45;&gt;bus</title>
-<path fill="none" stroke="black" d="M205.982,-522.778C180.69,-519.425 143.13,-511.024 118,-490 112.766,-485.621 108.637,-479.682 105.439,-473.616"/>
-<polygon fill="black" stroke="black" points="108.477,-471.842 101.154,-464.186 102.104,-474.738 108.477,-471.842"/>
-<text text-anchor="middle" x="128" y="-484.4" font-family="Bitstream Vera Sans" font-size="7.00">has 1</text>
-</g>
-<!-- pipeline&#45;&gt;clock -->
-<g id="edge4" class="edge"><title>pipeline&#45;&gt;clock</title>
-<path fill="none" stroke="black" d="M225.721,-507.939C211.912,-474.538 182.365,-397.851 172,-330 171.232,-324.971 171.219,-319.596 171.617,-314.408"/>
-<polygon fill="black" stroke="black" points="175.126,-314.553 172.897,-304.196 168.18,-313.682 175.126,-314.553"/>
-<text text-anchor="middle" x="201" y="-404.4" font-family="Bitstream Vera Sans" font-size="7.00">has 1</text>
-</g>
-<!-- plugin -->
-<g id="node14" class="node"><title>plugin</title>
-<g id="a_node14"><a xlink:href="GstPlugin.html" xlink:title="plugin" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="54,-304 0,-304 0,-268 54,-268 54,-304"/>
-<text text-anchor="middle" x="27" y="-283.8" font-family="Bitstream Vera Sans" font-size="9.00">plugin</text>
-</a>
-</g>
-</g>
-<!-- plugin&#45;&gt;plugin_feature -->
-<g id="edge21" class="edge"><title>plugin&#45;&gt;plugin_feature</title>
-<path fill="none" stroke="black" d="M42.4241,-267.969C58.1458,-250.61 82.6955,-223.503 100.567,-203.769"/>
-<polygon fill="black" stroke="black" points="103.177,-206.102 107.295,-196.341 97.9882,-201.403 103.177,-206.102"/>
-<text text-anchor="middle" x="100" y="-230.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-<!-- registry -->
-<g id="node17" class="node"><title>registry</title>
-<g id="a_node17"><a xlink:href="GstRegistry.html" xlink:title="registry" target="_top">
-<polygon fill="#eeeeee" stroke="black" points="54,-384 0,-384 0,-348 54,-348 54,-384"/>
-<text text-anchor="middle" x="27" y="-363.8" font-family="Bitstream Vera Sans" font-size="9.00">registry</text>
-</a>
-</g>
-</g>
-<!-- registry&#45;&gt;plugin -->
-<g id="edge20" class="edge"><title>registry&#45;&gt;plugin</title>
-<path fill="none" stroke="black" d="M27,-347.689C27,-337.894 27,-325.422 27,-314.335"/>
-<polygon fill="black" stroke="black" points="30.5001,-314.262 27,-304.262 23.5001,-314.262 30.5001,-314.262"/>
-<text text-anchor="middle" x="37" y="-324.4" font-family="Bitstream Vera Sans" font-size="7.00">has n</text>
-</g>
-</g>
-</svg>
diff --git a/docs/gst/gstreamer-docs.sgml b/docs/gst/gstreamer-docs.sgml
index 3a2c7af..7e66574 100644
--- a/docs/gst/gstreamer-docs.sgml
+++ b/docs/gst/gstreamer-docs.sgml
@@ -108,6 +108,7 @@
     <xi:include href="xml/gsttocsetter.xml" />
     <xi:include href="xml/gsttypefind.xml" />
     <xi:include href="xml/gsttypefindfactory.xml" />
+    <xi:include href="xml/gsturi.xml" />
     <xi:include href="xml/gsturihandler.xml" />
     <xi:include href="xml/gstutils.xml" />
     <xi:include href="xml/gstvalue.xml" />
diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt
index 593493c..9ebcb8c 100644
--- a/docs/gst/gstreamer-sections.txt
+++ b/docs/gst/gstreamer-sections.txt
@@ -87,6 +87,7 @@
 gst_bin_add_many
 gst_bin_remove_many
 gst_bin_find_unlinked_pad
+gst_bin_sync_children_states
 
 <SUBSECTION>
 GstBinFlags
@@ -135,6 +136,7 @@
 gst_bus_create_watch
 gst_bus_add_watch_full
 gst_bus_add_watch
+gst_bus_remove_watch
 gst_bus_disable_sync_message_emission
 gst_bus_enable_sync_message_emission
 gst_bus_async_signal_func
@@ -398,6 +400,10 @@
 GST_CAPS_FLAG_SET
 GST_CAPS_FLAG_UNSET
 
+GstCapsForeachFunc
+GstCapsMapFunc
+GstCapsFilterMapFunc
+
 gst_caps_new_empty
 gst_caps_new_empty_simple
 gst_caps_new_any
@@ -424,6 +430,9 @@
 gst_caps_set_value
 gst_caps_set_simple
 gst_caps_set_simple_valist
+gst_caps_foreach
+gst_caps_map_in_place
+gst_caps_filter_and_map_in_place
 gst_caps_is_any
 gst_caps_is_empty
 gst_caps_is_fixed
@@ -1227,6 +1236,7 @@
 <TITLE>GstInfo</TITLE>
 GstDebugLevel
 GST_LEVEL_DEFAULT
+GST_LEVEL_MAX
 GstDebugColorFlags
 GstDebugColorMode
 GstDebugCategory
@@ -1697,6 +1707,7 @@
 gst_object_get_name
 gst_object_set_parent
 gst_object_get_parent
+gst_object_has_parent
 gst_object_unparent
 gst_object_default_deep_notify
 gst_object_default_error
@@ -2284,6 +2295,7 @@
 gst_preset_get_meta
 gst_preset_set_app_dir
 gst_preset_get_app_dir
+gst_preset_is_editable
 <SUBSECTION Standard>
 GST_PRESET
 GST_IS_PRESET
@@ -2518,6 +2530,7 @@
 GstStructure
 GstStructureForeachFunc
 GstStructureMapFunc
+GstStructureFilterMapFunc
 gst_structure_new_empty
 gst_structure_new_id_empty
 gst_structure_new
@@ -2549,7 +2562,6 @@
 gst_structure_remove_fields_valist
 gst_structure_remove_all_fields
 gst_structure_get_field_type
-gst_structure_foreach
 gst_structure_n_fields
 gst_structure_has_field
 gst_structure_has_field_typed
@@ -2571,7 +2583,9 @@
 gst_structure_get_clock_time
 gst_structure_get_enum
 gst_structure_get_fraction
+gst_structure_foreach
 gst_structure_map_in_place
+gst_structure_filter_and_map_in_place
 gst_structure_nth_field_name
 gst_structure_set_parent_refcount
 gst_structure_to_string
@@ -3017,6 +3031,7 @@
 GstURIError
 gst_uri_error_quark
 GST_URI_TYPE_IS_VALID
+GST_URI_NO_PORT
 gst_uri_protocol_is_valid
 gst_uri_protocol_is_supported
 gst_uri_is_valid
@@ -3044,6 +3059,60 @@
 gst_uri_type_get_type
 </SECTION>
 
+<SECTION>
+<FILE>gsturi</FILE>
+<TITLE>GstUri</TITLE>
+GST_URI_CAST
+GST_URI_CONST_CAST
+GstUri
+gst_uri_new
+gst_uri_new_with_base
+gst_uri_from_string
+gst_uri_from_string_with_base
+gst_uri_copy
+gst_uri_equal
+gst_uri_join
+gst_uri_join_strings
+gst_uri_is_writable
+gst_uri_make_writable
+gst_uri_to_string
+gst_uri_ref
+gst_uri_unref
+gst_uri_is_normalized
+gst_uri_normalize
+gst_uri_get_scheme
+gst_uri_set_scheme
+gst_uri_get_userinfo
+gst_uri_set_userinfo
+gst_uri_get_host
+gst_uri_set_host
+gst_uri_get_port
+gst_uri_set_port
+gst_uri_get_path
+gst_uri_set_path
+gst_uri_get_path_string
+gst_uri_set_path_string
+gst_uri_get_path_segments
+gst_uri_set_path_segments
+gst_uri_append_path
+gst_uri_append_path_segment
+gst_uri_get_query_string
+gst_uri_set_query_string
+gst_uri_get_query_table
+gst_uri_set_query_table
+gst_uri_get_query_value
+gst_uri_set_query_value
+gst_uri_remove_query_key
+gst_uri_query_has_key
+gst_uri_get_query_keys
+gst_uri_get_fragment
+gst_uri_set_fragment
+<SUBSECTION Standard>
+GST_IS_URI
+GST_TYPE_URI
+GST_URI
+gst_uri_get_type
+</SECTION>
 
 <SECTION>
 <FILE>gstutils</FILE>
diff --git a/docs/gst/html/GstBin.html b/docs/gst/html/GstBin.html
index fba035b..e3f05ea 100644
--- a/docs/gst/html/GstBin.html
+++ b/docs/gst/html/GstBin.html
@@ -172,6 +172,14 @@
 </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="GstBin.html#gst-bin-sync-children-states" title="gst_bin_sync_children_states ()">gst_bin_sync_children_states</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
 <td class="define_keyword">#define</td>
 <td class="function_name">
 <a class="link" href="GstBin.html#GST-BIN-IS-NO-RESYNC:CAPS" title="GST_BIN_IS_NO_RESYNC()">GST_BIN_IS_NO_RESYNC</a><span class="c_punctuation">()</span>
@@ -1011,6 +1019,38 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-bin-sync-children-states"></a><h3>gst_bin_sync_children_states ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_bin_sync_children_states (<em class="parameter"><code><a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> *bin</code></em>);</pre>
+<p>Synchronizes the state of every child of <em class="parameter"><code>bin</code></em>
+ with the state
+of <em class="parameter"><code>bin</code></em>
+. See also <a class="link" href="GstElement.html#gst-element-sync-state-with-parent" title="gst_element_sync_state_with_parent ()"><code class="function">gst_element_sync_state_with_parent()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.6.11.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>bin</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.6.11.18.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if syncing the state was successful for all children,
+otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GST-BIN-IS-NO-RESYNC:CAPS"></a><h3>GST_BIN_IS_NO_RESYNC()</h3>
 <pre class="programlisting">#define GST_BIN_IS_NO_RESYNC(bin)        (GST_OBJECT_FLAG_IS_SET(bin,GST_BIN_FLAG_NO_RESYNC))
 </pre>
@@ -1018,7 +1058,7 @@
  will resync its state change when elements are added and
 removed.</p>
 <div class="refsect3">
-<a name="id-1.3.6.11.18.5"></a><h4>Parameters</h4>
+<a name="id-1.3.6.11.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1041,7 +1081,7 @@
 </pre>
 <p>Gets the list with children in a bin.</p>
 <div class="refsect3">
-<a name="id-1.3.6.11.19.5"></a><h4>Parameters</h4>
+<a name="id-1.3.6.11.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1063,7 +1103,7 @@
 </pre>
 <p>Gets the children cookie that watches the children list.</p>
 <div class="refsect3">
-<a name="id-1.3.6.11.20.5"></a><h4>Parameters</h4>
+<a name="id-1.3.6.11.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1085,7 +1125,7 @@
 </pre>
 <p>Gets the number of children in a bin.</p>
 <div class="refsect3">
-<a name="id-1.3.6.11.21.5"></a><h4>Parameters</h4>
+<a name="id-1.3.6.11.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/gst/html/GstBuffer.html b/docs/gst/html/GstBuffer.html
index 70be60a..7b4a8e5 100644
--- a/docs/gst/html/GstBuffer.html
+++ b/docs/gst/html/GstBuffer.html
@@ -1856,13 +1856,13 @@
 .</p>
 <p>When this function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, <em class="parameter"><code>idx</code></em>
  will contain the index of the first
-memory bock where the byte for <em class="parameter"><code>offset</code></em>
+memory block where the byte for <em class="parameter"><code>offset</code></em>
  can be found and <em class="parameter"><code>length</code></em>
  contains the
 number of memory blocks containing the <em class="parameter"><code>size</code></em>
  remaining bytes. <em class="parameter"><code>skip</code></em>
  contains
-the number of bytes to skip in the memory bock at <em class="parameter"><code>idx</code></em>
+the number of bytes to skip in the memory block at <em class="parameter"><code>idx</code></em>
  to get to the byte
 for <em class="parameter"><code>offset</code></em>
 .</p>
@@ -2725,8 +2725,11 @@
 <a name="gst-buffer-copy"></a><h3>gst_buffer_copy ()</h3>
 <pre class="programlisting"><a class="link" href="GstBuffer.html" title="GstBuffer"><span class="returnvalue">GstBuffer</span></a> *
 gst_buffer_copy (<em class="parameter"><code>const <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);</pre>
-<p>Create a copy of the given buffer. This will also make a newly allocated
-copy of the data the source buffer contains.</p>
+<p>Create a copy of the given buffer. This will only copy the buffer's
+data to a newly allocated memory if needed (if the type of memory
+requires it), otherwise the underlying data is just referenced.
+Check <code class="function">gst_buffer_copy_deep()</code> if you want to force the data
+to be copied to newly allocated memory.</p>
 <div class="refsect3">
 <a name="id-1.3.7.8.58.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2862,7 +2865,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>size</p></td>
-<td class="parameter_description"><p>the size of the new <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> sub-buffer, in bytes.</p></td>
+<td class="parameter_description"><p>the size of the new <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> sub-buffer, in bytes. If -1, all
+data is copied.</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
@@ -3082,8 +3086,12 @@
 gst_buffer_get_meta (<em class="parameter"><code><a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                      <em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> api</code></em>);</pre>
 <p>Get the metadata for <em class="parameter"><code>api</code></em>
- on buffer. When there is no such
-metadata, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned.</p>
+ on buffer. When there is no such metadata, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is
+returned. If multiple metadata with the given <em class="parameter"><code>api</code></em>
+ are attached to this
+buffer only the first one is returned.  To handle multiple metadata with a
+given API use <a class="link" href="GstBuffer.html#gst-buffer-iterate-meta" title="gst_buffer_iterate_meta ()"><code class="function">gst_buffer_iterate_meta()</code></a> or <a class="link" href="GstBuffer.html#gst-buffer-foreach-meta" title="gst_buffer_foreach_meta ()"><code class="function">gst_buffer_foreach_meta()</code></a> instead
+and check the meta-&gt;info.api member for the API type.</p>
 <div class="refsect3">
 <a name="id-1.3.7.8.66.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
diff --git a/docs/gst/html/GstBufferPool.html b/docs/gst/html/GstBufferPool.html
index 21ba7ec..373d188 100644
--- a/docs/gst/html/GstBufferPool.html
+++ b/docs/gst/html/GstBufferPool.html
@@ -424,11 +424,12 @@
 expected parameters. This function is a helper that can be used to validate
 changes made by a pool to a config when <a class="link" href="GstBufferPool.html#gst-buffer-pool-set-config" title="gst_buffer_pool_set_config ()"><code class="function">gst_buffer_pool_set_config()</code></a>
 returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>. This expects that <em class="parameter"><code>caps</code></em>
- and <em class="parameter"><code>size</code></em>
- haven't changed, and that
+ haven't changed and that
 <em class="parameter"><code>min_buffers</code></em>
- aren't lower then what we initially expected. This does not check
-if options or allocator parameters.</p>
+ aren't lower then what we initially expected.
+This does not check if options or allocator parameters are still valid,
+won't check if size have changed, since changing the size is valid to adapt
+padding.</p>
 <div class="refsect3">
 <a name="id-1.3.9.8.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -820,9 +821,9 @@
                             <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *config</code></em>);</pre>
 <p>Set the configuration of the pool. If the pool is already configured, and
 the configuration haven't change, this function will return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>. If the
-pool is active, this function will try deactivating it. Buffers allocated
-form this pool must be returned or else this function will do nothing and
-return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+pool is active, this method will return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> and active configuration
+will remain. Buffers allocated form this pool must be returned or else this
+function will do nothing and return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
 <p><em class="parameter"><code>config</code></em>
  is a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> that contains the configuration parameters for
 the pool. A default and mandatory set of parameters can be configured with
diff --git a/docs/gst/html/GstBus.html b/docs/gst/html/GstBus.html
index 3a52368..376bb03 100644
--- a/docs/gst/html/GstBus.html
+++ b/docs/gst/html/GstBus.html
@@ -172,6 +172,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstBus.html#gst-bus-remove-watch" title="gst_bus_remove_watch ()">gst_bus_remove_watch</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -897,9 +905,10 @@
  is called, the message belongs to the caller; if you want to
 keep a copy of it, call <a class="link" href="GstMessage.html#gst-message-ref" title="gst_message_ref ()"><code class="function">gst_message_ref()</code></a> before leaving <em class="parameter"><code>func</code></em>
 .</p>
-<p>The watch can be removed using <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#g-source-remove"><code class="function">g_source_remove()</code></a> or by returning <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+<p>The watch can be removed using <a class="link" href="GstBus.html#gst-bus-remove-watch" title="gst_bus_remove_watch ()"><code class="function">gst_bus_remove_watch()</code></a> or by returning <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
 from <em class="parameter"><code>func</code></em>
-.</p>
+. If the watch was added to the default main context it is also
+possible to remove the watch using <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#g-source-remove"><code class="function">g_source_remove()</code></a>.</p>
 <p>MT safe.</p>
 <div class="refsect3">
 <a name="id-1.3.10.10.16.9"></a><h4>Parameters</h4>
@@ -941,8 +950,8 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.16.10"></a><h4>Returns</h4>
-<p> The event source id.
-Rename to: gst_bus_add_watch</p>
+<p> The event source id or 0 if <em class="parameter"><code>bus</code></em>
+already got an event source.</p>
 <p></p>
 </div>
 </div>
@@ -961,9 +970,10 @@
 <p>This function is used to receive asynchronous messages in the main loop.
 There can only be a single bus watch per bus, you must remove it before you
 can set a new one.</p>
-<p>The watch can be removed using <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#g-source-remove"><code class="function">g_source_remove()</code></a> or by returning <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
+<p>The watch can be removed using <a class="link" href="GstBus.html#gst-bus-remove-watch" title="gst_bus_remove_watch ()"><code class="function">gst_bus_remove_watch()</code></a> or by returning <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
 from <em class="parameter"><code>func</code></em>
-.</p>
+. If the watch was added to the default main context it is also
+possible to remove the watch using <a href="https://developer.gnome.org/glib/unstable/glib-The-Main-Event-Loop.html#g-source-remove"><code class="function">g_source_remove()</code></a>.</p>
 <div class="refsect3">
 <a name="id-1.3.10.10.17.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -994,13 +1004,44 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.17.8"></a><h4>Returns</h4>
-<p> The event source id.</p>
+<p> The event source id or 0 if <em class="parameter"><code>bus</code></em>
+already got an event source.</p>
 <p>MT safe.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-bus-remove-watch"></a><h3>gst_bus_remove_watch ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_bus_remove_watch (<em class="parameter"><code><a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> *bus</code></em>);</pre>
+<p>Removes an installed bus watch from <em class="parameter"><code>bus</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.3.10.10.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>bus</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> to remove the watch from.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.10.10.18.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if <em class="parameter"><code>bus</code></em>
+has no event source.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-bus-disable-sync-message-emission"></a><h3>gst_bus_disable_sync_message_emission ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_bus_disable_sync_message_emission (<em class="parameter"><code><a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> *bus</code></em>);</pre>
@@ -1014,7 +1055,7 @@
 disable.</p>
 <p>MT safe.</p>
 <div class="refsect3">
-<a name="id-1.3.10.10.18.7"></a><h4>Parameters</h4>
+<a name="id-1.3.10.10.19.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1050,7 +1091,7 @@
 signal is marshalled to the main thread via the main loop.</p>
 <p>MT safe.</p>
 <div class="refsect3">
-<a name="id-1.3.10.10.19.8"></a><h4>Parameters</h4>
+<a name="id-1.3.10.10.20.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1075,7 +1116,7 @@
 <p>A helper <a class="link" href="GstBus.html#GstBusFunc" title="GstBusFunc ()"><span class="type">GstBusFunc</span></a> that can be used to convert all asynchronous messages
 into signals.</p>
 <div class="refsect3">
-<a name="id-1.3.10.10.20.5"></a><h4>Parameters</h4>
+<a name="id-1.3.10.10.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1102,7 +1143,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.10.10.20.6"></a><h4>Returns</h4>
+<a name="id-1.3.10.10.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></p>
 <p></p>
 </div>
@@ -1124,7 +1165,7 @@
 function is called.</p>
 <p>MT safe.</p>
 <div class="refsect3">
-<a name="id-1.3.10.10.21.8"></a><h4>Parameters</h4>
+<a name="id-1.3.10.10.22.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1160,7 +1201,7 @@
 watch before you can set another type of watch.</p>
 <p>MT safe.</p>
 <div class="refsect3">
-<a name="id-1.3.10.10.22.9"></a><h4>Parameters</h4>
+<a name="id-1.3.10.10.23.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1190,7 +1231,7 @@
 <p>Removes a signal watch previously added with <a class="link" href="GstBus.html#gst-bus-add-signal-watch" title="gst_bus_add_signal_watch ()"><code class="function">gst_bus_add_signal_watch()</code></a>.</p>
 <p>MT safe.</p>
 <div class="refsect3">
-<a name="id-1.3.10.10.23.6"></a><h4>Parameters</h4>
+<a name="id-1.3.10.10.24.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1245,7 +1286,7 @@
 better handled by setting up an asynchronous bus watch and doing things
 from there.</p>
 <div class="refsect3">
-<a name="id-1.3.10.10.24.10"></a><h4>Parameters</h4>
+<a name="id-1.3.10.10.25.10"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1274,7 +1315,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.10.10.24.11"></a><h4>Returns</h4>
+<a name="id-1.3.10.10.25.11"></a><h4>Returns</h4>
 <p> the message that was received,
 or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the poll timed out. The message is taken from the
 bus and needs to be unreffed with <a class="link" href="GstMessage.html#gst-message-unref" title="gst_message_unref ()"><code class="function">gst_message_unref()</code></a> after
diff --git a/docs/gst/html/GstCaps.html b/docs/gst/html/GstCaps.html
index e4858c7..6abc193 100644
--- a/docs/gst/html/GstCaps.html
+++ b/docs/gst/html/GstCaps.html
@@ -90,6 +90,30 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="GstCaps.html#GstCapsForeachFunc" title="GstCapsForeachFunc ()">*GstCapsForeachFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="GstCaps.html#GstCapsMapFunc" title="GstCapsMapFunc ()">*GstCapsMapFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="GstCaps.html#GstCapsFilterMapFunc" title="GstCapsFilterMapFunc ()">*GstCapsFilterMapFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="GstCaps.html" title="GstCaps"><span class="returnvalue">GstCaps</span></a> *
 </td>
 <td class="function_name">
@@ -299,6 +323,30 @@
 <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="GstCaps.html#gst-caps-foreach" title="gst_caps_foreach ()">gst_caps_foreach</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="GstCaps.html#gst-caps-map-in-place" title="gst_caps_map_in_place ()">gst_caps_map_in_place</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="GstCaps.html#gst-caps-filter-and-map-in-place" title="gst_caps_filter_and_map_in_place ()">gst_caps_filter_and_map_in_place</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="GstCaps.html#gst-caps-is-any" title="gst_caps_is_any ()">gst_caps_is_any</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -796,6 +844,143 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GstCapsForeachFunc"></a><h3>GstCapsForeachFunc ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<span class="c_punctuation">(</span>*GstCapsForeachFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a> *features</code></em>,
+                       <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>A function that will be called in <a class="link" href="GstCaps.html#gst-caps-foreach" title="gst_caps_foreach ()"><code class="function">gst_caps_foreach()</code></a>. The function may
+not modify <em class="parameter"><code>features</code></em>
+ or <em class="parameter"><code>structure</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.3.11.8.10.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>features</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.11.8.10.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the foreach operation should continue, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
+the foreach operation should stop with <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCapsMapFunc"></a><h3>GstCapsMapFunc ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<span class="c_punctuation">(</span>*GstCapsMapFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a> *features</code></em>,
+                   <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>A function that will be called in <a class="link" href="GstCaps.html#gst-caps-map-in-place" title="gst_caps_map_in_place ()"><code class="function">gst_caps_map_in_place()</code></a>. The function
+may modify <em class="parameter"><code>features</code></em>
+ and <em class="parameter"><code>structure</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.3.11.8.11.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>features</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.11.8.11.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the map operation should continue, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
+the map operation should stop with <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstCapsFilterMapFunc"></a><h3>GstCapsFilterMapFunc ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<span class="c_punctuation">(</span>*GstCapsFilterMapFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a> *features</code></em>,
+                         <em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>A function that will be called in <a class="link" href="GstCaps.html#gst-caps-filter-and-map-in-place" title="gst_caps_filter_and_map_in_place ()"><code class="function">gst_caps_filter_and_map_in_place()</code></a>.
+The function may modify <em class="parameter"><code>features</code></em>
+ and <em class="parameter"><code>structure</code></em>
+, and both will be
+removed from the caps if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned.</p>
+<div class="refsect3">
+<a name="id-1.3.11.8.12.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>features</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p>the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.11.8.12.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the features and structure should be preserved,
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it should be removed.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-caps-new-empty"></a><h3>gst_caps_new_empty ()</h3>
 <pre class="programlisting"><a class="link" href="GstCaps.html" title="GstCaps"><span class="returnvalue">GstCaps</span></a> *
 gst_caps_new_empty (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
@@ -804,7 +989,7 @@
 The <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> is guaranteed to be writable.
 Caller is responsible for unreffing the returned caps.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.10.5"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.13.5"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -819,7 +1004,7 @@
 .
 Caller is responsible for unreffing the returned caps.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.11.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -834,7 +1019,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.11.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.14.6"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -847,7 +1032,7 @@
 <p>Creates a new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> that indicates that it is compatible with
 any media format.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.12.5"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.15.5"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -864,7 +1049,7 @@
 as <a class="link" href="GstStructure.html#gst-structure-new" title="gst_structure_new ()"><code class="function">gst_structure_new()</code></a>.
 Caller is responsible for unreffing the returned caps.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.13.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -891,7 +1076,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.13.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.16.6"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -906,7 +1091,7 @@
 arguments.  The list must be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated.  The structures
 are not copied; the returned <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> owns the structures.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.14.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -928,7 +1113,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.14.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.17.6"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -943,7 +1128,7 @@
 arguments.  The list must be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated.  The structures
 are not copied; the returned <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> owns the structures.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.15.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -965,7 +1150,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.15.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.18.6"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -979,7 +1164,7 @@
 . It is only safe to modify caps when
 there is only one owner of the caps - ie, the object is writable.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.16.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1007,7 +1192,7 @@
 reference to the data, you should use <a class="link" href="GstCaps.html#gst-caps-ref" title="gst_caps_ref ()"><code class="function">gst_caps_ref()</code></a>.</p>
 <p>When you are finished with the caps, call <a class="link" href="GstCaps.html#gst-caps-unref" title="gst_caps_unref ()"><code class="function">gst_caps_unref()</code></a> on it.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.17.7"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.20.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1022,7 +1207,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.17.8"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.20.8"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a></p>
 <p></p>
 </div>
@@ -1037,7 +1222,7 @@
 contained in <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.18.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1059,7 +1244,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.18.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.21.6"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -1071,7 +1256,7 @@
 gst_static_caps_get (<em class="parameter"><code><a class="link" href="GstCaps.html#GstStaticCaps" title="struct GstStaticCaps"><span class="type">GstStaticCaps</span></a> *static_caps</code></em>);</pre>
 <p>Converts a <a class="link" href="GstCaps.html#GstStaticCaps" title="struct GstStaticCaps"><span class="type">GstStaticCaps</span></a> to a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.19.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1086,7 +1271,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.19.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.22.6"></a><h4>Returns</h4>
 <p> a pointer to the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>. Unref after usage.
 Since the core holds an additional ref to the returned caps,
 use <a class="link" href="GstCaps.html#gst-caps-make-writable" title="gst_caps_make_writable()"><code class="function">gst_caps_make_writable()</code></a> on the returned caps to modify it. </p>
@@ -1101,7 +1286,7 @@
 <p>Clean up the cached caps contained in <em class="parameter"><code>static_caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.20.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1131,7 +1316,7 @@
  is
 freed. If either caps is ANY, the resulting caps will be ANY.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.21.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1170,7 +1355,7 @@
  is freed.
 If either caps is ANY, the resulting caps will be ANY.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.22.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1192,7 +1377,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.22.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.25.6"></a><h4>Returns</h4>
 <p> the merged caps. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -1210,7 +1395,7 @@
 becomes the owner of <em class="parameter"><code>structure</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.23.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1247,7 +1432,7 @@
 becomes the owner of <em class="parameter"><code>structure</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.24.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1285,7 +1470,7 @@
 contained in <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.25.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1317,7 +1502,7 @@
 contained in <em class="parameter"><code>caps</code></em>
 . The caller becomes the owner of the returned structure.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.26.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1339,7 +1524,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.26.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.29.6"></a><h4>Returns</h4>
 <p> a pointer to the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> corresponding
 to <em class="parameter"><code>index</code></em>
 . </p>
@@ -1357,7 +1542,7 @@
  if its not already expressed by <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.27.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1379,7 +1564,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.27.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.30.6"></a><h4>Returns</h4>
 <p> the merged caps. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -1397,7 +1582,7 @@
  if its not already expressed by <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.28.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1424,7 +1609,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.28.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.31.6"></a><h4>Returns</h4>
 <p> the merged caps. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -1438,7 +1623,7 @@
 <p>Gets the number of structures contained in <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.29.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1453,7 +1638,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.29.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.32.6"></a><h4>Returns</h4>
 <p> the number of structures that <em class="parameter"><code>caps</code></em>
 contains</p>
 <p></p>
@@ -1480,7 +1665,7 @@
 <p>You do not need to free or unref the structure returned, it
 belongs to the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.30.7"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.33.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1502,7 +1687,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.30.8"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.33.8"></a><h4>Returns</h4>
 <p> a pointer to the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> corresponding
 to <em class="parameter"><code>index</code></em>
 . </p>
@@ -1530,7 +1715,7 @@
 <p>You do not need to free or unref the structure returned, it
 belongs to the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.31.7"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.34.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1552,7 +1737,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.31.8"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.34.8"></a><h4>Returns</h4>
 <p> a pointer to the <a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a> corresponding
 to <em class="parameter"><code>index</code></em>
 . </p>
@@ -1571,7 +1756,7 @@
  for the structure at <em class="parameter"><code>index</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.32.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1614,7 +1799,7 @@
 all structures of <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.33.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1651,7 +1836,7 @@
 <p>Sets fields in a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>.  The arguments must be passed in the same
 manner as <a class="link" href="GstStructure.html#gst-structure-set" title="gst_structure_set ()"><code class="function">gst_structure_set()</code></a>, and be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.34.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1688,7 +1873,7 @@
 <p>Sets fields in a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>.  The arguments must be passed in the same
 manner as <a class="link" href="GstStructure.html#gst-structure-set" title="gst_structure_set ()"><code class="function">gst_structure_set()</code></a>, and be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.35.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1717,13 +1902,145 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-caps-foreach"></a><h3>gst_caps_foreach ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_caps_foreach (<em class="parameter"><code>const <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                  <em class="parameter"><code><a class="link" href="GstCaps.html#GstCapsForeachFunc" title="GstCapsForeachFunc ()"><span class="type">GstCapsForeachFunc</span></a> func</code></em>,
+                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Calls the provided function once for each structure and caps feature in the
+<a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>. The function must not modify the fields.
+Also see <a class="link" href="GstCaps.html#gst-caps-map-in-place" title="gst_caps_map_in_place ()"><code class="function">gst_caps_map_in_place()</code></a> and <a class="link" href="GstCaps.html#gst-caps-filter-and-map-in-place" title="gst_caps_filter_and_map_in_place ()"><code class="function">gst_caps_filter_and_map_in_place()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.11.8.39.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>a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p> a function to call for each field. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> private data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.11.8.39.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the supplied function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for each call,
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-caps-map-in-place"></a><h3>gst_caps_map_in_place ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_caps_map_in_place (<em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                       <em class="parameter"><code><a class="link" href="GstCaps.html#GstCapsMapFunc" title="GstCapsMapFunc ()"><span class="type">GstCapsMapFunc</span></a> func</code></em>,
+                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Calls the provided function once for each structure and caps feature in the
+<a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>. In contrast to <a class="link" href="GstCaps.html#gst-caps-foreach" title="gst_caps_foreach ()"><code class="function">gst_caps_foreach()</code></a>, the function may modify but not
+delete the structures and features. The caps must be mutable.</p>
+<div class="refsect3">
+<a name="id-1.3.11.8.40.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>a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p> a function to call for each field. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> private data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.11.8.40.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the supplied function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for each call,
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-caps-filter-and-map-in-place"></a><h3>gst_caps_filter_and_map_in_place ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_caps_filter_and_map_in_place (<em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>,
+                                  <em class="parameter"><code><a class="link" href="GstCaps.html#GstCapsFilterMapFunc" title="GstCapsFilterMapFunc ()"><span class="type">GstCapsFilterMapFunc</span></a> func</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Calls the provided function once for each structure and caps feature in the
+<a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>. In contrast to <a class="link" href="GstCaps.html#gst-caps-foreach" title="gst_caps_foreach ()"><code class="function">gst_caps_foreach()</code></a>, the function may modify the
+structure and features. In contrast to <a class="link" href="GstCaps.html#gst-caps-filter-and-map-in-place" title="gst_caps_filter_and_map_in_place ()"><code class="function">gst_caps_filter_and_map_in_place()</code></a>,
+the structure and features are removed from the caps if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned
+from the function.
+The caps must be mutable.</p>
+<div class="refsect3">
+<a name="id-1.3.11.8.41.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>caps</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p> a function to call for each field. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> private data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-caps-is-any"></a><h3>gst_caps_is_any ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_caps_is_any (<em class="parameter"><code>const <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
 <p>Determines if <em class="parameter"><code>caps</code></em>
  represents any media format.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.36.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1738,7 +2055,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.36.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.42.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>caps</code></em>
 represents any format.</p>
 <p></p>
@@ -1752,7 +2069,7 @@
 <p>Determines if <em class="parameter"><code>caps</code></em>
  represents no media formats.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.37.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1767,7 +2084,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.37.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.43.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>caps</code></em>
 represents no formats.</p>
 <p></p>
@@ -1782,7 +2099,7 @@
 one structure, and each field in the structure describes a fixed type.
 Examples of non-fixed types are GST_TYPE_INT_RANGE and GST_TYPE_LIST.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.38.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.44.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1797,7 +2114,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.38.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.44.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>caps</code></em>
 is fixed</p>
 <p></p>
@@ -1811,7 +2128,7 @@
                    <em class="parameter"><code>const <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);</pre>
 <p>Checks if the given caps represent the same set of caps.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.39.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1833,7 +2150,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.39.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.45.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if both caps are equal.</p>
 <p></p>
 </div>
@@ -1847,7 +2164,7 @@
 <p>Tests if two <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> are equal.  This function only works on fixed
 <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.40.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1869,7 +2186,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.40.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.46.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the arguments represent the same format</p>
 <p></p>
 </div>
@@ -1882,7 +2199,7 @@
                             <em class="parameter"><code>const <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);</pre>
 <p>Checks if the given caps are exactly the same set of caps.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.41.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1904,7 +2221,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.41.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.47.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if both caps are strictly equal.</p>
 <p></p>
 </div>
@@ -1921,7 +2238,7 @@
  is a subset of <em class="parameter"><code>caps2</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.42.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1943,7 +2260,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.42.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.48.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>caps1</code></em>
 is a subset of <em class="parameter"><code>caps2</code></em>
 .</p>
@@ -1960,7 +2277,7 @@
  are also represented by <em class="parameter"><code>superset</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.43.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1982,7 +2299,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.43.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.49.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>subset</code></em>
 is a subset of <em class="parameter"><code>superset</code></em>
 </p>
@@ -2000,7 +2317,7 @@
 . See <a class="link" href="GstCaps.html#gst-caps-is-subset" title="gst_caps_is_subset ()"><code class="function">gst_caps_is_subset()</code></a>
 for more information.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.44.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.50.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2023,7 +2340,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.44.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.50.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>structure</code></em>
 is a subset of <em class="parameter"><code>caps</code></em>
 </p>
@@ -2042,7 +2359,7 @@
 . See <a class="link" href="GstCaps.html#gst-caps-is-subset" title="gst_caps_is_subset ()"><code class="function">gst_caps_is_subset()</code></a>
 for more information.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.45.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.51.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2071,7 +2388,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.45.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.51.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>structure</code></em>
 is a subset of <em class="parameter"><code>caps</code></em>
 </p>
@@ -2090,7 +2407,7 @@
  and reports whether the result would not
 be empty</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.46.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.52.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2112,7 +2429,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.46.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.52.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 intersection would be not empty</p>
 <p></p>
 </div>
@@ -2128,7 +2445,7 @@
  and <em class="parameter"><code>caps2</code></em>
 . Defaults to <a class="link" href="GstCaps.html#GST-CAPS-INTERSECT-ZIG-ZAG:CAPS"><code class="literal">GST_CAPS_INTERSECT_ZIG_ZAG</code></a> mode.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.47.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.53.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2150,7 +2467,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.47.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.53.6"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a></p>
 <p></p>
 </div>
@@ -2168,7 +2485,7 @@
 , the order is defined by the <a class="link" href="GstCaps.html#GstCapsIntersectMode" title="enum GstCapsIntersectMode"><span class="type">GstCapsIntersectMode</span></a>
 used.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.48.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.54.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2195,7 +2512,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.48.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.54.6"></a><h4>Returns</h4>
 <p> the new <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a></p>
 <p></p>
 </div>
@@ -2213,7 +2530,7 @@
 <p>This function takes ownership of <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.49.6"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.55.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2228,7 +2545,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.49.7"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.55.7"></a><h4>Returns</h4>
 <p> the normalized <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -2246,7 +2563,7 @@
 <p>This method does not preserve the original order of <em class="parameter"><code>caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.50.6"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.56.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2261,7 +2578,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.50.7"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.56.7"></a><h4>Returns</h4>
 <p> The simplified caps.</p>
 <p></p>
 </div>
@@ -2280,7 +2597,7 @@
  or the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> pointed to by <em class="parameter"><code>old_caps</code></em>
  may be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.51.6"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.57.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2305,7 +2622,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.51.7"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.57.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>new_caps</code></em>
 was different from <em class="parameter"><code>old_caps</code></em>
 </p>
@@ -2323,7 +2640,7 @@
 of <em class="parameter"><code>new_caps</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.52.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.58.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2348,7 +2665,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.52.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.58.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>new_caps</code></em>
 was different from <em class="parameter"><code>old_caps</code></em>
 </p>
@@ -2380,7 +2697,7 @@
 <p>The current implementation of serialization will lead to unexpected results
 when there are nested <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> / <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> deeper than one level.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.53.9"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.59.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2395,7 +2712,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.53.10"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.59.10"></a><h4>Returns</h4>
 <p> a newly allocated string representing <em class="parameter"><code>caps</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>
@@ -2411,7 +2728,7 @@
 <p>The current implementation of serialization will lead to unexpected results
 when there are nested <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> / <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> deeper than one level.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.54.6"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.60.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2426,7 +2743,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.54.7"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.60.7"></a><h4>Returns</h4>
 <p> a newly allocated <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</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>
@@ -2443,7 +2760,7 @@
 <div class="note">This function does not work reliably if optional properties for caps
 are included on one caps and omitted on the other.</div>
 <div class="refsect3">
-<a name="id-1.3.11.8.55.6"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.61.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2465,7 +2782,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.55.7"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.61.7"></a><h4>Returns</h4>
 <p> the resulting caps</p>
 <p></p>
 </div>
@@ -2488,7 +2805,7 @@
 that it returns. Don't access the argument after calling this function. See
 also: <a class="link" href="GstCaps.html#gst-caps-ref" title="gst_caps_ref ()"><code class="function">gst_caps_ref()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.56.7"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.62.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2503,7 +2820,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.56.8"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.62.8"></a><h4>Returns</h4>
 <p> a writable caps which may or may not be the
 same as <em class="parameter"><code>caps</code></em>
 . </p>
@@ -2519,7 +2836,7 @@
 . Useful when
 fixating.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.57.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.63.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2534,7 +2851,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.57.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.63.6"></a><h4>Returns</h4>
 <p> truncated caps. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -2549,7 +2866,7 @@
 values. First the caps will be truncated and then the first structure will be
 fixated with <a class="link" href="GstStructure.html#gst-structure-fixate" title="gst_structure_fixate ()"><code class="function">gst_structure_fixate()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.58.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.64.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2564,7 +2881,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.58.6"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.64.6"></a><h4>Returns</h4>
 <p> the fixated caps. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -2582,7 +2899,7 @@
 implicitly by e.g. <a class="link" href="GstCaps.html#gst-caps-new-simple" title="gst_caps_new_simple ()"><code class="function">gst_caps_new_simple()</code></a>, or via taking one explicitly with
 this function.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.59.6"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.65.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2597,7 +2914,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.11.8.59.7"></a><h4>Returns</h4>
+<a name="id-1.3.11.8.65.7"></a><h4>Returns</h4>
 <p> the same <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> object.</p>
 <p></p>
 </div>
@@ -2610,7 +2927,7 @@
 <p>Unref a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> and and free all its structures and the
 structures' values when the refcount reaches 0.</p>
 <div class="refsect3">
-<a name="id-1.3.11.8.60.5"></a><h4>Parameters</h4>
+<a name="id-1.3.11.8.66.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/gst/html/GstElement.html b/docs/gst/html/GstElement.html
index 679f7b9..861bfb8 100644
--- a/docs/gst/html/GstElement.html
+++ b/docs/gst/html/GstElement.html
@@ -1876,7 +1876,7 @@
 <p>This method is slower than manually getting the pad template and calling
 <a class="link" href="GstElement.html#gst-element-request-pad" title="gst_element_request_pad ()"><code class="function">gst_element_request_pad()</code></a> if the pads should have a specific name (e.g.
 <em class="parameter"><code>name</code></em>
- is "src_1" instead of "src_<code class="literal">u</code>").</p>
+ is "src_1" instead of "src_%u").</p>
 <div class="refsect3">
 <a name="id-1.3.21.10.34.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
diff --git a/docs/gst/html/GstEvent.html b/docs/gst/html/GstEvent.html
index 93944ac..4abb08f 100644
--- a/docs/gst/html/GstEvent.html
+++ b/docs/gst/html/GstEvent.html
@@ -1695,7 +1695,7 @@
 to be the first event that is sent for a new stream.</p>
 <p>Source elements, demuxers and other elements that create new streams
 are supposed to send this event as the first event of a new stream. It
-should not be send after a flushing seek or in similar situations
+should not be sent after a flushing seek or in similar situations
 and is used to mark the beginning of a new logical stream. Elements
 combining multiple streams must ensure that this event is only forwarded
 downstream once and not for every single input stream.</p>
@@ -1906,7 +1906,7 @@
 . The segment event can only travel
 downstream synchronized with the buffer flow and contains timing information
 and playback properties for the buffers that will follow.</p>
-<p>The newsegment event marks the range of buffers to be processed. All
+<p>The segment event marks the range of buffers to be processed. All
 data not within the segment range is not to be processed. This can be
 used intelligently by plugins to apply more efficient methods of skipping
 unneeded data. The valid range is expressed with the <em class="parameter"><code>start</code></em>
@@ -1938,11 +1938,11 @@
 requested for playback. For example, if an element has an input segment
 with intended playback <em class="parameter"><code>rate</code></em>
  of 2.0 and applied_rate of 1.0, it can adjust
-incoming timestamps and buffer content by half and output a newsegment event
+incoming timestamps and buffer content by half and output a segment event
 with <em class="parameter"><code>rate</code></em>
  of 1.0 and <em class="parameter"><code>applied_rate</code></em>
  of 2.0</p>
-<p>After a newsegment event, the buffer stream time is calculated with:</p>
+<p>After a segment event, the buffer stream time is calculated with:</p>
 <p>  time + (TIMESTAMP(buf) - start) * ABS (rate * applied_rate)</p>
 <div class="refsect3">
 <a name="id-1.3.24.8.42.11"></a><h4>Parameters</h4>
@@ -3494,9 +3494,9 @@
 <tr>
 <td class="enum_member_name"><p><a name="GST-QOS-TYPE-OVERFLOW:CAPS"></a>GST_QOS_TYPE_OVERFLOW</p></td>
 <td class="enum_member_description">
-<p>The QoS event type that is produced when downstream
+<p>The QoS event type that is produced when upstream
    elements are producing data too quickly and the element can't keep up
-   processing the data. Upstream should reduce their processing rate. This
+   processing the data. Upstream should reduce their production rate. This
    type is also used when buffers arrive early or in time.</p>
 </td>
 <td class="enum_member_annotations"> </td>
@@ -3504,9 +3504,9 @@
 <tr>
 <td class="enum_member_name"><p><a name="GST-QOS-TYPE-UNDERFLOW:CAPS"></a>GST_QOS_TYPE_UNDERFLOW</p></td>
 <td class="enum_member_description">
-<p>The QoS event type that is produced when downstream
-   elements are producing data too slowly and need to speed up their processing
-   rate.</p>
+<p>The QoS event type that is produced when upstream
+   elements are producing data too slowly and need to speed up their
+   production rate.</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -3514,7 +3514,7 @@
 <td class="enum_member_name"><p><a name="GST-QOS-TYPE-THROTTLE:CAPS"></a>GST_QOS_TYPE_THROTTLE</p></td>
 <td class="enum_member_description">
 <p>The QoS event type that is produced when the
-   application enabled throttling to limit the datarate.</p>
+   application enabled throttling to limit the data rate.</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -3578,10 +3578,16 @@
 continue playback. With this seek method it is possible to perform seamless
 looping or simple linear editing.</p>
 <p>When doing fast forward (rate &gt; 1.0) or fast reverse (rate &lt; -1.0) trickmode
-playback, the <em class="parameter"><code>GST_SEEK_FLAG_SKIP</code></em>
+playback, the <em class="parameter"><code>GST_SEEK_FLAG_TRICKMODE</code></em>
  flag can be used to instruct decoders
 and demuxers to adjust the playback rate by skipping frames. This can improve
 performance and decrease CPU usage because not all frames need to be decoded.</p>
+<p>Beyond that, the <em class="parameter"><code>GST_SEEK_FLAG_TRICKMODE_KEY_UNITS</code></em>
+ flag can be used to
+request that decoders skip all frames except key units, and
+<em class="parameter"><code>GST_SEEK_FLAG_TRICKMODE_NO_AUDIO</code></em>
+ flags can be used to request that audio
+decoders do no decoding at all, and simple output silence.</p>
 <p>The <em class="parameter"><code>GST_SEEK_FLAG_SNAP_BEFORE</code></em>
  flag can be used to snap to the previous
 relevant location, and the <em class="parameter"><code>GST_SEEK_FLAG_SNAP_AFTER</code></em>
@@ -3597,7 +3603,7 @@
 details on the meaning of these flags and the behaviour expected of
 elements that handle them.</p>
 <div class="refsect3">
-<a name="id-1.3.24.9.9.10"></a><h4>Members</h4>
+<a name="id-1.3.24.9.9.11"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -3643,11 +3649,20 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
-<td class="enum_member_name"><p><a name="GST-SEEK-FLAG-SKIP:CAPS"></a>GST_SEEK_FLAG_SKIP</p></td>
+<td class="enum_member_name"><p><a name="GST-SEEK-FLAG-TRICKMODE:CAPS"></a>GST_SEEK_FLAG_TRICKMODE</p></td>
 <td class="enum_member_description">
 <p>when doing fast forward or fast reverse playback, allow
                     elements to skip frames instead of generating all
-                    frames.</p>
+                    frames. (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-SEEK-FLAG-SKIP:CAPS"></a>GST_SEEK_FLAG_SKIP</p></td>
+<td class="enum_member_description">
+<p>Deprecated backward compatibility flag, replaced
+                    by <em class="parameter"><code>GST_SEEK_FLAG_TRICKMODE</code></em>
+</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -3679,6 +3694,25 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-SEEK-FLAG-TRICKMODE-KEY-UNITS:CAPS"></a>GST_SEEK_FLAG_TRICKMODE_KEY_UNITS</p></td>
+<td class="enum_member_description">
+<p>when doing fast forward or fast reverse
+                    playback, request that elements only decode keyframes
+                    and skip all other content, for formats that have
+                    keyframes. (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-SEEK-FLAG-TRICKMODE-NO-AUDIO:CAPS"></a>GST_SEEK_FLAG_TRICKMODE_NO_AUDIO</p></td>
+<td class="enum_member_description">
+<p>when doing fast forward or fast reverse
+                    playback, request that audio decoder elements skip
+                    decoding and output only gap events or silence. (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
diff --git a/docs/gst/html/GstObject.html b/docs/gst/html/GstObject.html
index 110a1fa..a544db3 100644
--- a/docs/gst/html/GstObject.html
+++ b/docs/gst/html/GstObject.html
@@ -148,6 +148,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstObject.html#gst-object-has-parent" title="gst_object_has_parent ()">gst_object_has_parent</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -936,6 +944,52 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-object-has-parent"></a><h3>gst_object_has_parent ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_object_has_parent (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *object</code></em>,
+                       <em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *parent</code></em>);</pre>
+<p>Check if <em class="parameter"><code>parent</code></em>
+ is the parent of <em class="parameter"><code>object</code></em>
+.
+E.g. a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> can check if it owns a given <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.32.10.18.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>object</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> to check</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>parent</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> to check as parent</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.32.10.18.6"></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 either <em class="parameter"><code>object</code></em>
+or <em class="parameter"><code>parent</code></em>
+is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>parent</code></em>
+is
+the parent of <em class="parameter"><code>object</code></em>
+. Otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+<p>MT safe. Grabs and releases <em class="parameter"><code>object</code></em>
+'s locks.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-object-unparent"></a><h3>gst_object_unparent ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_object_unparent (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *object</code></em>);</pre>
@@ -946,7 +1000,7 @@
 <p>MT safe. Grabs and releases <em class="parameter"><code>object</code></em>
 's lock.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.18.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.19.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -977,7 +1031,7 @@
 's LOCK for getting its
          path string.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.19.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.20.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1021,7 +1075,7 @@
 and the optional debug sting..</p>
 <p>The default handler will simply print the error string using g_print.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.20.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.21.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1062,7 +1116,7 @@
 will lock each <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> in the list to compare the name, so be
 careful when passing a list with a locked object.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.21.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1085,7 +1139,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.21.6"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.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 a <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> named <em class="parameter"><code>name</code></em>
 does not appear in <em class="parameter"><code>list</code></em>
 ,
@@ -1105,7 +1159,7 @@
  somewhere up in
 the hierarchy. One can e.g. check if a <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> is inside a <a class="link" href="GstPipeline.html" title="GstPipeline"><span class="type">GstPipeline</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.22.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1127,7 +1181,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.22.6"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.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 <em class="parameter"><code>ancestor</code></em>
 is an ancestor of <em class="parameter"><code>object</code></em>
 .</p>
@@ -1150,7 +1204,7 @@
 constructs like :
  result = gst_object_ref (object-&gt;parent);</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.23.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.24.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1165,7 +1219,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.23.7"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.24.7"></a><h4>Returns</h4>
 <p> A pointer to <em class="parameter"><code>object</code></em>
 . </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> Gst.Object]</span></p>
@@ -1185,7 +1239,7 @@
 <p>The unref method should never be called with the LOCK held since
 this might deadlock the dispose function.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.24.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.25.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1215,7 +1269,7 @@
 is not floating, then this call adds a new normal reference increasing the
 reference count by one.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.25.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.26.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1245,7 +1299,7 @@
  and the value pointed to by <em class="parameter"><code>oldobj</code></em>
  may be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.26.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.27.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1268,7 +1322,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.26.7"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.27.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>newobj</code></em>
 was different from <em class="parameter"><code>oldobj</code></em>
 </p>
@@ -1285,7 +1339,7 @@
 the object hierarchy. Only useful (or used) for debugging.</p>
 <p>Free-function: g_free</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.27.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.28.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1300,7 +1354,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.27.7"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.28.7"></a><h4>Returns</h4>
 <p> a string describing the path of <em class="parameter"><code>object</code></em>
 . You must
 <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> the string after usage.</p>
@@ -1317,7 +1371,7 @@
 <p>Returns a suggestion for timestamps where buffers should be split
 to get best controller results.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.28.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1332,7 +1386,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.28.6"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.29.6"></a><h4>Returns</h4>
 <p> Returns the suggested timestamp or <a class="link" href="GstClock.html#GST-CLOCK-TIME-NONE:CAPS" title="GST_CLOCK_TIME_NONE"><code class="literal">GST_CLOCK_TIME_NONE</code></a>
 if no control-rate was set.</p>
 <p></p>
@@ -1349,7 +1403,7 @@
 <p>If this function fails, it is most likely the application developers fault.
 Most probably the control sources are not setup correctly.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.29.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.30.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1371,7 +1425,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.29.7"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.30.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the controller values could be applied to the object
 properties, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 <p></p>
@@ -1386,7 +1440,7 @@
 <p>Check if the <em class="parameter"><code>object</code></em>
  has an active controlled properties.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.30.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1401,7 +1455,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.30.6"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.31.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the object has active controlled properties</p>
 <p></p>
 </div>
@@ -1417,7 +1471,7 @@
  for
 some time, i.e. <a class="link" href="GstObject.html#gst-object-sync-values" title="gst_object_sync_values ()"><code class="function">gst_object_sync_values()</code></a> will do nothing.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.31.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1452,7 +1506,7 @@
 some time, i.e. <a class="link" href="GstObject.html#gst-object-sync-values" title="gst_object_sync_values ()"><code class="function">gst_object_sync_values()</code></a> will do nothing for the
 property.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.32.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1492,7 +1546,7 @@
  will take ownership of the <em class="parameter"><code>binding</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.33.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.34.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1514,7 +1568,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.33.7"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.34.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 the given <em class="parameter"><code>binding</code></em>
 has not been setup for this object or
 has been setup for a non suitable property, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> otherwise.</p>
@@ -1530,7 +1584,7 @@
 <p>Gets the corresponding <a class="link" href="GstControlBinding.html" title="GstControlBinding"><span class="type">GstControlBinding</span></a> for the property. This should be
 unreferenced again after use.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.34.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1552,7 +1606,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.34.6"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.35.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="GstControlBinding.html" title="GstControlBinding"><span class="type">GstControlBinding</span></a> for
 <em class="parameter"><code>property_name</code></em>
 or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the property is not controlled. </p>
@@ -1568,7 +1622,7 @@
 <p>Removes the corresponding <a class="link" href="GstControlBinding.html" title="GstControlBinding"><span class="type">GstControlBinding</span></a>. If it was the
 last ref of the binding, it will be disposed.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.35.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1590,7 +1644,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.35.6"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.36.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the binding could be removed.</p>
 <p></p>
 </div>
@@ -1604,7 +1658,7 @@
                       <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
 <p>Gets the value for the given controlled property at the requested time.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.36.5"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1631,7 +1685,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.36.6"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.37.6"></a><h4>Returns</h4>
 <p> the GValue of the property at the given time,
 or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the property isn't controlled. </p>
 <p><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
@@ -1658,7 +1712,7 @@
 <a class="link" href="GstObject.html#gst-object-get-g-value-array" title="gst_object_get_g_value_array ()"><code class="function">gst_object_get_g_value_array()</code></a> returns the array as <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValues</span></a> and is
 better suites for bindings.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.37.7"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.38.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1700,7 +1754,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.37.8"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.38.8"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the given array could be filled, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 <p></p>
 </div>
@@ -1723,7 +1777,7 @@
 <p>This function is useful if one wants to e.g. draw a graph of the control
 curve or apply a control curve sample by sample.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.38.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.39.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1765,7 +1819,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.38.7"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.39.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the given array could be filled, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 <p></p>
 </div>
@@ -1787,7 +1841,7 @@
 <p>The control-rate is not expected to change if the element is in
 <a class="link" href="GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a> or <a class="link" href="GstElement.html#GST-STATE-PLAYING:CAPS"><code class="literal">GST_STATE_PLAYING</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.39.7"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.40.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1802,7 +1856,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.32.10.39.8"></a><h4>Returns</h4>
+<a name="id-1.3.32.10.40.8"></a><h4>Returns</h4>
 <p> the control rate in nanoseconds</p>
 <p></p>
 </div>
@@ -1822,7 +1876,7 @@
 <p>The control-rate should not change if the element is in <a class="link" href="GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a> or
 <a class="link" href="GstElement.html#GST-STATE-PLAYING:CAPS"><code class="literal">GST_STATE_PLAYING</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.32.10.40.6"></a><h4>Parameters</h4>
+<a name="id-1.3.32.10.41.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/gst/html/GstPad.html b/docs/gst/html/GstPad.html
index fa6f321..a95edcd 100644
--- a/docs/gst/html/GstPad.html
+++ b/docs/gst/html/GstPad.html
@@ -1296,6 +1296,11 @@
 <td class="property_flags">Read / Write / Construct Only</td>
 </tr>
 <tr>
+<td class="property_type"><span class="type">gint64</span></td>
+<td class="property_name"><a class="link" href="GstPad.html#GstPad--offset" title="The “offset” property">offset</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
 <td class="property_type">
 <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a> *</td>
 <td class="property_name"><a class="link" href="GstPad.html#GstPad--template" title="The “template” property">template</a></td>
@@ -2578,7 +2583,7 @@
 <a name="id-1.3.33.10.44.6"></a><h4>Returns</h4>
 <p> an id or 0 if no probe is pending. The id can be used to remove the
 probe with <a class="link" href="GstPad.html#gst-pad-remove-probe" title="gst_pad_remove_probe ()"><code class="function">gst_pad_remove_probe()</code></a>. When using GST_PAD_PROBE_TYPE_IDLE it can
-happend that the probe can be run immediately and if the probe returns
+happen that the probe can be run immediately and if the probe returns
 GST_PAD_PROBE_REMOVE this functions returns 0.</p>
 <p>MT safe.</p>
 <p></p>
@@ -2803,7 +2808,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p> the name of the element. </p></td>
+<td class="parameter_description"><p> the name of the pad. </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>
@@ -2842,7 +2847,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>the name of the element</p></td>
+<td class="parameter_description"><p>the name of the pad</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
@@ -2970,8 +2975,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>the <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> that is chained, not <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> that is chained, not <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -3098,8 +3103,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>list</p></td>
-<td class="parameter_description"><p>the <a class="link" href="GstBufferList.html" title="GstBufferList"><span class="type">GstBufferList</span></a> that is chained, not <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the <a class="link" href="GstBufferList.html" title="GstBufferList"><span class="type">GstBufferList</span></a> that is chained, not <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -3482,8 +3487,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>event</p></td>
-<td class="parameter_description"><p>the <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> to handle.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> to handle. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -8052,6 +8057,16 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GstPad--offset"></a><h3>The <code class="literal">“offset”</code> property</h3>
+<pre class="programlisting">  “offset”                   <span class="type">gint64</span></pre>
+<p>The offset that will be applied to the running time of the pad.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstPad--template"></a><h3>The <code class="literal">“template”</code> property</h3>
 <pre class="programlisting">  “template”                 <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a> *</pre>
 <p>The GstPadTemplate of this pad.</p>
diff --git a/docs/gst/html/GstPreset.html b/docs/gst/html/GstPreset.html
index dcad6b2..e438b53 100644
--- a/docs/gst/html/GstPreset.html
+++ b/docs/gst/html/GstPreset.html
@@ -119,6 +119,14 @@
 <a class="link" href="GstPreset.html#gst-preset-get-app-dir" title="gst_preset_get_app_dir ()">gst_preset_get_app_dir</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="GstPreset.html#gst-preset-is-editable" title="gst_preset_is_editable ()">gst_preset_is_editable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -164,7 +172,10 @@
 Wrapper plugins will override most methods to implement support for the
 native preset format of those wrapped plugins.
 One method that is useful to be overridden is <a class="link" href="GstPreset.html#gst-preset-get-property-names" title="gst_preset_get_property_names ()"><code class="function">gst_preset_get_property_names()</code></a>.
-With that one can control which properties are saved and in which order.</p>
+With that one can control which properties are saved and in which order.
+When implementing support for read-only presets, one should set the vmethods
+for <a class="link" href="GstPreset.html#gst-preset-save-preset" title="gst_preset_save_preset ()"><code class="function">gst_preset_save_preset()</code></a> and <a class="link" href="GstPreset.html#gst-preset-delete-preset" title="gst_preset_delete_preset ()"><code class="function">gst_preset_delete_preset()</code></a> to <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+Applications can use <a class="link" href="GstPreset.html#gst-preset-is-editable" title="gst_preset_is_editable ()"><code class="function">gst_preset_is_editable()</code></a> to check for that.</p>
 <p>The default implementation supports presets located in a system directory, 
 application specific directory and in the users home directory. When getting
 a list of presets individual presets are read and overlaid in 1) system, 
@@ -529,6 +540,34 @@
 <p><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-preset-is-editable"></a><h3>gst_preset_is_editable ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_preset_is_editable (<em class="parameter"><code><a class="link" href="GstPreset.html" title="GstPreset"><span class="type">GstPreset</span></a> *preset</code></em>);</pre>
+<p>Check if one can add new presets, change existing ones and remove presets.</p>
+<div class="refsect3">
+<a name="id-1.3.41.8.12.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>preset</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> that implements <a class="link" href="GstPreset.html" title="GstPreset"><span class="type">GstPreset</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.41.8.12.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if presets are editable or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if they are static</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="GstPreset.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/gst/html/GstSegment.html b/docs/gst/html/GstSegment.html
index 263cd07..bc20671 100644
--- a/docs/gst/html/GstSegment.html
+++ b/docs/gst/html/GstSegment.html
@@ -923,9 +923,18 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-SEGMENT-FLAG-TRICKMODE:CAPS"></a>GST_SEGMENT_FLAG_TRICKMODE</p></td>
+<td class="enum_member_description">
+<p>perform skip playback (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-SEGMENT-FLAG-SKIP:CAPS"></a>GST_SEGMENT_FLAG_SKIP</p></td>
 <td class="enum_member_description">
-<p>perform skip playback</p>
+<p>Deprecated backward compatibility flag, replaced
+                        by <em class="parameter"><code>GST_SEGMENT_FLAG_TRICKMODE</code></em>
+</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -936,6 +945,22 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-SEGMENT-FLAG-TRICKMODE-KEY-UNITS:CAPS"></a>GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS</p></td>
+<td class="enum_member_description">
+<p>Decode only keyframes, where
+                                       possible (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-SEGMENT-FLAG-TRICKMODE-NO-AUDIO:CAPS"></a>GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO</p></td>
+<td class="enum_member_description">
+<p>Do not decode any audio, where
+                                       possible (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
diff --git a/docs/gst/html/GstStructure.html b/docs/gst/html/GstStructure.html
index 9594880..9e1969a 100644
--- a/docs/gst/html/GstStructure.html
+++ b/docs/gst/html/GstStructure.html
@@ -58,6 +58,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="GstStructure.html#GstStructureFilterMapFunc" title="GstStructureFilterMapFunc ()">*GstStructureFilterMapFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="GstStructure.html" title="GstStructure"><span class="returnvalue">GstStructure</span></a> *
 </td>
 <td class="function_name">
@@ -303,14 +311,6 @@
 </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="GstStructure.html#gst-structure-foreach" title="gst_structure_foreach ()">gst_structure_foreach</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
 </td>
 <td class="function_name">
@@ -481,10 +481,26 @@
 <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="GstStructure.html#gst-structure-foreach" title="gst_structure_foreach ()">gst_structure_foreach</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="GstStructure.html#gst-structure-map-in-place" title="gst_structure_map_in_place ()">gst_structure_map_in_place</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="GstStructure.html#gst-structure-filter-and-map-in-place" title="gst_structure_filter_and_map_in_place ()">gst_structure_filter_and_map_in_place</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
 <td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
 </td>
 <td class="function_name">
@@ -718,6 +734,51 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GstStructureFilterMapFunc"></a><h3>GstStructureFilterMapFunc ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<span class="c_punctuation">(</span>*GstStructureFilterMapFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> field_id</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>,
+                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>A function that will be called in <a class="link" href="GstStructure.html#gst-structure-filter-and-map-in-place" title="gst_structure_filter_and_map_in_place ()"><code class="function">gst_structure_filter_and_map_in_place()</code></a>.
+The function may modify <em class="parameter"><code>value</code></em>
+, and the value will be removed from
+the structure if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned.</p>
+<div class="refsect3">
+<a name="id-1.3.45.8.4.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>field_id</p></td>
+<td class="parameter_description"><p>the <a href="https://developer.gnome.org/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> of the field name</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of the field</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.45.8.4.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the field should be preserved, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it
+should be removed.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-structure-new-empty"></a><h3>gst_structure_new_empty ()</h3>
 <pre class="programlisting"><a class="link" href="GstStructure.html" title="GstStructure"><span class="returnvalue">GstStructure</span></a> *
 gst_structure_new_empty (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
@@ -727,7 +788,7 @@
  parameter.</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.4.7"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.5.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -742,7 +803,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.4.8"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.5.8"></a><h4>Returns</h4>
 <p> a new, empty <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</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>
@@ -755,7 +816,7 @@
 <p>Creates a new, empty <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> with the given name as a GQuark.</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.5.6"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.6.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -770,7 +831,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.5.7"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.6.7"></a><h4>Returns</h4>
 <p> a new, empty <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</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>
@@ -788,7 +849,7 @@
 and value.  Last variable argument should be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.6.6"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.7.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -815,7 +876,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.6.7"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.7.7"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</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>
@@ -835,7 +896,7 @@
  parameter.</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.7.7"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.8.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -862,7 +923,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.7.8"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.8.8"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</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>
@@ -881,7 +942,7 @@
 <p>The last variable argument must be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (or 0).</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.8.7"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.9.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -908,7 +969,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.8.8"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.9.8"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</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>
@@ -925,7 +986,7 @@
 when there are nested <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> / <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> deeper than one level.</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.9.7"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.10.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -940,7 +1001,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.9.8"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.10.8"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
 when the string could not be parsed. Free with
 <a class="link" href="GstStructure.html#gst-structure-free" title="gst_structure_free ()"><code class="function">gst_structure_free()</code></a> after use. </p>
@@ -956,7 +1017,7 @@
 <p>Duplicates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> and all its fields and values.</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.10.6"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.11.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -971,7 +1032,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.10.7"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.11.7"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</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>
@@ -984,7 +1045,7 @@
 <p>Frees a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> and all its fields and values. The structure must not
 have a parent when this function is called.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.11.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1007,7 +1068,7 @@
 <p>Get the name of <em class="parameter"><code>structure</code></em>
  as a string.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.12.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1022,7 +1083,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.12.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.13.6"></a><h4>Returns</h4>
 <p> the name of the structure.</p>
 <p></p>
 </div>
@@ -1035,7 +1096,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> *name</code></em>);</pre>
 <p>Checks if the structure has the given name</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.13.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1057,7 +1118,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.13.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.14.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>name</code></em>
 matches the name of the structure.</p>
 <p></p>
@@ -1074,7 +1135,7 @@
 provided is copied before being used. It must not be empty, start with a
 letter and can be followed by letters, numbers and any of "/-_.:".</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.14.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1104,7 +1165,7 @@
 <p>Get the name of <em class="parameter"><code>structure</code></em>
  as a GQuark.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.15.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1119,7 +1180,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.15.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.16.6"></a><h4>Returns</h4>
 <p> the quark representing the name of the structure.</p>
 <p></p>
 </div>
@@ -1146,7 +1207,7 @@
 strings and boxed types you will receive a copy which you will need to
 release with either <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> or the suitable function for the boxed type.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.16.7"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.17.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1173,7 +1234,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.16.8"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.17.8"></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 there was a problem reading any of the fields (e.g.
 because the field requested did not exist, or was of a type other
 than the type specified), otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
@@ -1192,7 +1253,7 @@
 valist-variant of <a class="link" href="GstStructure.html#gst-structure-id-get" title="gst_structure_id_get ()"><code class="function">gst_structure_id_get()</code></a>. Look at the documentation of
 <a class="link" href="GstStructure.html#gst-structure-id-get" title="gst_structure_id_get ()"><code class="function">gst_structure_id_get()</code></a> for more details.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.17.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1219,7 +1280,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.17.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.18.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if there was a problem reading any of the fields</p>
 <p></p>
 </div>
@@ -1233,7 +1294,7 @@
 <p>Get the value of the field with GQuark <em class="parameter"><code>field</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.18.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1255,7 +1316,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.18.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.19.6"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> corresponding to the field with the given name
 identifier.</p>
 <p></p>
@@ -1274,7 +1335,7 @@
 does not exist, it is created.  If the field exists, the previous
 value is replaced and freed.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.19.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1314,7 +1375,7 @@
 does not exist, it is created.  If the field exists, the previous
 value is replaced and freed.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.20.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1358,7 +1419,7 @@
 strings and boxed types you will receive a copy which you will need to
 release with either <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> or the suitable function for the boxed type.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.21.6"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.22.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1385,7 +1446,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.21.7"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.22.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 there was a problem reading any of the fields (e.g.
 because the field requested did not exist, or was of a type other
 than the type specified), otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
@@ -1404,7 +1465,7 @@
 valist-variant of <a class="link" href="GstStructure.html#gst-structure-get" title="gst_structure_get ()"><code class="function">gst_structure_get()</code></a>. Look at the documentation of
 <a class="link" href="GstStructure.html#gst-structure-get" title="gst_structure_get ()"><code class="function">gst_structure_get()</code></a> for more details.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.22.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1431,7 +1492,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.22.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.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>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if there was a problem reading any of the fields</p>
 <p></p>
 </div>
@@ -1445,7 +1506,7 @@
 <p>Get the value of the field with name <em class="parameter"><code>fieldname</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.23.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1467,7 +1528,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.23.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.24.6"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> corresponding to the field with the given name.</p>
 <p></p>
 </div>
@@ -1485,7 +1546,7 @@
 does not exist, it is created.  If the field exists, the previous
 value is replaced and freed.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.24.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1526,7 +1587,7 @@
 value is replaced and freed. The function will take ownership of <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.25.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1564,7 +1625,7 @@
 Variable arguments should be in the form field name, field type
 (as a GType), value(s).  The last variable argument should be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.26.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1600,7 +1661,7 @@
                           <em class="parameter"><code><span class="type">va_list</span> varargs</code></em>);</pre>
 <p>va_list form of <a class="link" href="GstStructure.html#gst-structure-set" title="gst_structure_set ()"><code class="function">gst_structure_set()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.27.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1640,7 +1701,7 @@
 quark values.
 The last variable argument must be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.28.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1676,7 +1737,7 @@
                              <em class="parameter"><code><span class="type">va_list</span> varargs</code></em>);</pre>
 <p>va_list form of <a class="link" href="GstStructure.html#gst-structure-id-set" title="gst_structure_id_set ()"><code class="function">gst_structure_id_set()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.29.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1712,7 +1773,7 @@
 <p>Removes the field with the given name.  If the field with the given
 name does not exist, the structure is unchanged.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.30.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1744,7 +1805,7 @@
 <p>Removes the fields with the given names. If a field does not exist, the
 argument is ignored.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.31.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1780,7 +1841,7 @@
                                     <em class="parameter"><code><span class="type">va_list</span> varargs</code></em>);</pre>
 <p>va_list form of <a class="link" href="GstStructure.html#gst-structure-remove-fields" title="gst_structure_remove_fields ()"><code class="function">gst_structure_remove_fields()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.32.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1814,7 +1875,7 @@
 gst_structure_remove_all_fields (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>);</pre>
 <p>Removes all fields in a GstStructure.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.33.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1839,7 +1900,7 @@
 value it contains.  If the field is not found, G_TYPE_INVALID is
 returned.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.34.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1861,51 +1922,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.34.6"></a><h4>Returns</h4>
-<p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of the field</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-structure-foreach"></a><h3>gst_structure_foreach ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_structure_foreach (<em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
-                       <em class="parameter"><code><a class="link" href="GstStructure.html#GstStructureForeachFunc" title="GstStructureForeachFunc ()"><span class="type">GstStructureForeachFunc</span></a> func</code></em>,
-                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Calls the provided function once for each field in the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a>. The
-function must not modify the fields. Also see <a class="link" href="GstStructure.html#gst-structure-map-in-place" title="gst_structure_map_in_place ()"><code class="function">gst_structure_map_in_place()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.3.45.8.35.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>structure</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>func</p></td>
-<td class="parameter_description"><p> a function to call for each field. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
-</tr>
-<tr>
-<td class="parameter_name"><p>user_data</p></td>
-<td class="parameter_description"><p> private data. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
 <a name="id-1.3.45.8.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 the supplied function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> For each of the fields,
-<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> of the field</p>
 <p></p>
 </div>
 </div>
@@ -2839,14 +2857,14 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-structure-map-in-place"></a><h3>gst_structure_map_in_place ()</h3>
+<a name="gst-structure-foreach"></a><h3>gst_structure_foreach ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_structure_map_in_place (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
-                            <em class="parameter"><code><a class="link" href="GstStructure.html#GstStructureMapFunc" title="GstStructureMapFunc ()"><span class="type">GstStructureMapFunc</span></a> func</code></em>,
-                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
-<p>Calls the provided function once for each field in the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a>. In
-contrast to <a class="link" href="GstStructure.html#gst-structure-foreach" title="gst_structure_foreach ()"><code class="function">gst_structure_foreach()</code></a>, the function may modify but not delete the
-fields. The structure must be mutable.</p>
+gst_structure_foreach (<em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                       <em class="parameter"><code><a class="link" href="GstStructure.html#GstStructureForeachFunc" title="GstStructureForeachFunc ()"><span class="type">GstStructureForeachFunc</span></a> func</code></em>,
+                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Calls the provided function once for each field in the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a>. The
+function must not modify the fields. Also see <a class="link" href="GstStructure.html#gst-structure-map-in-place" title="gst_structure_map_in_place ()"><code class="function">gst_structure_map_in_place()</code></a>
+and <a class="link" href="GstStructure.html#gst-structure-filter-and-map-in-place" title="gst_structure_filter_and_map_in_place ()"><code class="function">gst_structure_filter_and_map_in_place()</code></a>.</p>
 <div class="refsect3">
 <a name="id-1.3.45.8.57.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2883,13 +2901,98 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-structure-map-in-place"></a><h3>gst_structure_map_in_place ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_structure_map_in_place (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                            <em class="parameter"><code><a class="link" href="GstStructure.html#GstStructureMapFunc" title="GstStructureMapFunc ()"><span class="type">GstStructureMapFunc</span></a> func</code></em>,
+                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Calls the provided function once for each field in the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a>. In
+contrast to <a class="link" href="GstStructure.html#gst-structure-foreach" title="gst_structure_foreach ()"><code class="function">gst_structure_foreach()</code></a>, the function may modify but not delete the
+fields. The structure must be mutable.</p>
+<div class="refsect3">
+<a name="id-1.3.45.8.58.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p> a function to call for each field. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> private data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.45.8.58.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 supplied function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> For each of the fields,
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-structure-filter-and-map-in-place"></a><h3>gst_structure_filter_and_map_in_place ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_structure_filter_and_map_in_place (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                                       <em class="parameter"><code><a class="link" href="GstStructure.html#GstStructureFilterMapFunc" title="GstStructureFilterMapFunc ()"><span class="type">GstStructureFilterMapFunc</span></a> func</code></em>,
+                                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
+<p>Calls the provided function once for each field in the <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a>. In
+contrast to <a class="link" href="GstStructure.html#gst-structure-foreach" title="gst_structure_foreach ()"><code class="function">gst_structure_foreach()</code></a>, the function may modify the fields.
+In contrast to <a class="link" href="GstStructure.html#gst-structure-map-in-place" title="gst_structure_map_in_place ()"><code class="function">gst_structure_map_in_place()</code></a>, the field is removed from
+the structure if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> is returned from the function.
+The structure must be mutable.</p>
+<div class="refsect3">
+<a name="id-1.3.45.8.59.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>structure</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>func</p></td>
+<td class="parameter_description"><p> a function to call for each field. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p> private data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-structure-nth-field-name"></a><h3>gst_structure_nth_field_name ()</h3>
 <pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
 gst_structure_nth_field_name (<em class="parameter"><code>const <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
                               <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> index</code></em>);</pre>
 <p>Get the name of the given field number, counting from 0 onwards.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.58.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.60.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2911,7 +3014,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.58.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.60.6"></a><h4>Returns</h4>
 <p> the name of the given field number</p>
 <p></p>
 </div>
@@ -2927,7 +3030,7 @@
 called by code implementing parent objects of <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a>, as described in
 the MT Refcounting section of the design documents.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.59.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.61.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2949,7 +3052,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.59.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.61.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 parent refcount could be set.</p>
 <p></p>
 </div>
@@ -2979,7 +3082,7 @@
 when there are nested <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> / <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> deeper than one level.</p>
 <p>Free-function: g_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.60.10"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.62.10"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2994,7 +3097,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.60.11"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.62.11"></a><h4>Returns</h4>
 <p> a pointer to string allocated by <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-malloc"><code class="function">g_malloc()</code></a>.
 <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -3011,7 +3114,7 @@
 where parsing ended will be returned.</p>
 <p>Free-function: gst_structure_free</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.61.6"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.63.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3033,7 +3136,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.61.7"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.63.7"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
 when the string could not be parsed. Free with
 <a class="link" href="GstStructure.html#gst-structure-free" title="gst_structure_free ()"><code class="function">gst_structure_free()</code></a> after use. </p>
@@ -3050,7 +3153,7 @@
 <em class="parameter"><code>structure</code></em>
  will be modified in-place and should be writable.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.62.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.64.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3073,91 +3176,6 @@
                             <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>);</pre>
 <p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given field with its fixated value.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.63.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>structure</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>field_name</p></td>
-<td class="parameter_description"><p>a field in <em class="parameter"><code>structure</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.45.8.63.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 structure field could be fixated</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-structure-fixate-field-nearest-int"></a><h3>gst_structure_fixate_field_nearest_int ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_structure_fixate_field_nearest_int
-                               (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
-                                <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
-                                <em class="parameter"><code><span class="type">int</span> target</code></em>);</pre>
-<p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given field to the nearest
-integer to <em class="parameter"><code>target</code></em>
- that is a subset of the existing field.</p>
-<div class="refsect3">
-<a name="id-1.3.45.8.64.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>structure</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>field_name</p></td>
-<td class="parameter_description"><p>a field in <em class="parameter"><code>structure</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>target</p></td>
-<td class="parameter_description"><p>the target value of the fixation</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.3.45.8.64.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 structure could be fixated</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-structure-fixate-field-nearest-double"></a><h3>gst_structure_fixate_field_nearest_double ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_structure_fixate_field_nearest_double
-                               (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
-                                <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
-                                <em class="parameter"><code><span class="type">double</span> target</code></em>);</pre>
-<p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given field to the nearest
-double to <em class="parameter"><code>target</code></em>
- that is a subset of the existing field.</p>
-<div class="refsect3">
 <a name="id-1.3.45.8.65.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -3177,34 +3195,26 @@
 </p></td>
 <td class="parameter_annotations"> </td>
 </tr>
-<tr>
-<td class="parameter_name"><p>target</p></td>
-<td class="parameter_description"><p>the target value of the fixation</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
 <a name="id-1.3.45.8.65.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 structure could be fixated</p>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the structure field could be fixated</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-structure-fixate-field-nearest-fraction"></a><h3>gst_structure_fixate_field_nearest_fraction ()</h3>
+<a name="gst-structure-fixate-field-nearest-int"></a><h3>gst_structure_fixate_field_nearest_int ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_structure_fixate_field_nearest_fraction
+gst_structure_fixate_field_nearest_int
                                (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
                                 <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> target_numerator</code></em>,
-                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> target_denominator</code></em>);</pre>
+                                <em class="parameter"><code><span class="type">int</span> target</code></em>);</pre>
 <p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given field to the nearest
-fraction to <em class="parameter"><code>target_numerator</code></em>
-/<em class="parameter"><code>target_denominator</code></em>
- that is a subset
-of the existing field.</p>
+integer to <em class="parameter"><code>target</code></em>
+ that is a subset of the existing field.</p>
 <div class="refsect3">
 <a name="id-1.3.45.8.66.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -3226,13 +3236,8 @@
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
-<td class="parameter_name"><p>target_numerator</p></td>
-<td class="parameter_description"><p>The numerator of the target value of the fixation</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>target_denominator</p></td>
-<td class="parameter_description"><p>The denominator of the target value of the fixation</p></td>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the target value of the fixation</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
@@ -3246,15 +3251,15 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-structure-fixate-field-boolean"></a><h3>gst_structure_fixate_field_boolean ()</h3>
+<a name="gst-structure-fixate-field-nearest-double"></a><h3>gst_structure_fixate_field_nearest_double ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_structure_fixate_field_boolean (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
-                                    <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
-                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> target</code></em>);</pre>
-<p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given <em class="parameter"><code>field_name</code></em>
- field to the given
-<em class="parameter"><code>target</code></em>
- boolean if that field is not fixed yet.</p>
+gst_structure_fixate_field_nearest_double
+                               (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                                <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
+                                <em class="parameter"><code><span class="type">double</span> target</code></em>);</pre>
+<p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given field to the nearest
+double to <em class="parameter"><code>target</code></em>
+ that is a subset of the existing field.</p>
 <div class="refsect3">
 <a name="id-1.3.45.8.67.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -3291,17 +3296,70 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-structure-fixate-field-string"></a><h3>gst_structure_fixate_field_string ()</h3>
+<a name="gst-structure-fixate-field-nearest-fraction"></a><h3>gst_structure_fixate_field_nearest_fraction ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_structure_fixate_field_string (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
-                                   <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
-                                   <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *target</code></em>);</pre>
+gst_structure_fixate_field_nearest_fraction
+                               (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                                <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> target_numerator</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> target_denominator</code></em>);</pre>
+<p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given field to the nearest
+fraction to <em class="parameter"><code>target_numerator</code></em>
+/<em class="parameter"><code>target_denominator</code></em>
+ that is a subset
+of the existing field.</p>
+<div class="refsect3">
+<a name="id-1.3.45.8.68.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>structure</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>field_name</p></td>
+<td class="parameter_description"><p>a field in <em class="parameter"><code>structure</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target_numerator</p></td>
+<td class="parameter_description"><p>The numerator of the target value of the fixation</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target_denominator</p></td>
+<td class="parameter_description"><p>The denominator of the target value of the fixation</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.45.8.68.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 structure could be fixated</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-structure-fixate-field-boolean"></a><h3>gst_structure_fixate_field_boolean ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_structure_fixate_field_boolean (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                                    <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> target</code></em>);</pre>
 <p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given <em class="parameter"><code>field_name</code></em>
  field to the given
 <em class="parameter"><code>target</code></em>
- string if that field is not fixed yet.</p>
+ boolean if that field is not fixed yet.</p>
 <div class="refsect3">
-<a name="id-1.3.45.8.68.5"></a><h4>Parameters</h4>
+<a name="id-1.3.45.8.69.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3329,7 +3387,52 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.45.8.68.6"></a><h4>Returns</h4>
+<a name="id-1.3.45.8.69.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 structure could be fixated</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-structure-fixate-field-string"></a><h3>gst_structure_fixate_field_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_structure_fixate_field_string (<em class="parameter"><code><a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> *structure</code></em>,
+                                   <em class="parameter"><code>const <span class="type">char</span> *field_name</code></em>,
+                                   <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *target</code></em>);</pre>
+<p>Fixates a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> by changing the given <em class="parameter"><code>field_name</code></em>
+ field to the given
+<em class="parameter"><code>target</code></em>
+ string if that field is not fixed yet.</p>
+<div class="refsect3">
+<a name="id-1.3.45.8.70.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>structure</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>field_name</p></td>
+<td class="parameter_description"><p>a field in <em class="parameter"><code>structure</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>the target value of the fixation</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.45.8.70.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 structure could be fixated</p>
 <p></p>
 </div>
diff --git a/docs/gst/html/GstTypeFindFactory.html b/docs/gst/html/GstTypeFindFactory.html
index dbfdd10..c315f22 100644
--- a/docs/gst/html/GstTypeFindFactory.html
+++ b/docs/gst/html/GstTypeFindFactory.html
@@ -7,7 +7,7 @@
 <link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
 <link rel="up" href="libgstreamer.html" title="GStreamer Core Library">
 <link rel="prev" href="gstreamer-GstTypeFind.html" title="GstTypeFind">
-<link rel="next" href="gstreamer-GstUriHandler.html" title="GstUriHandler">
+<link rel="next" href="gstreamer-GstUri.html" title="GstUri">
 <meta name="generator" content="GTK-Doc V1.21 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -21,7 +21,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="libgstreamer.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gstreamer-GstTypeFind.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gstreamer-GstUriHandler.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gstreamer-GstUri.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="GstTypeFindFactory"></a><div class="titlepage"></div>
diff --git a/docs/gst/html/api-index-full.html b/docs/gst/html/api-index-full.html
index 0c0a7c5..20fce26 100644
--- a/docs/gst/html/api-index-full.html
+++ b/docs/gst/html/api-index-full.html
@@ -259,6 +259,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBin.html#gst-bin-sync-children-states" title="gst_bin_sync_children_states ()">gst_bin_sync_children_states</a>, function in <a class="link" href="GstBin.html" title="GstBin">GstBin</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBuffer.html#GstBuffer-struct" title="struct GstBuffer">GstBuffer</a>, struct in <a class="link" href="GstBuffer.html" title="GstBuffer">GstBuffer</a>
 </dt>
 <dd></dd>
@@ -807,6 +811,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBus.html#gst-bus-remove-watch" title="gst_bus_remove_watch ()">gst_bus_remove_watch</a>, function in <a class="link" href="GstBus.html" title="GstBus">GstBus</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBus.html#gst-bus-set-flushing" title="gst_bus_set_flushing ()">gst_bus_set_flushing</a>, function in <a class="link" href="GstBus.html" title="GstBus">GstBus</a>
 </dt>
 <dd></dd>
@@ -844,14 +852,26 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstCaps.html#GstCapsFilterMapFunc" title="GstCapsFilterMapFunc ()">GstCapsFilterMapFunc</a>, user_function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstCaps.html#GstCapsFlags" title="enum GstCapsFlags">GstCapsFlags</a>, enum in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstCaps.html#GstCapsForeachFunc" title="GstCapsForeachFunc ()">GstCapsForeachFunc</a>, user_function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstCaps.html#GstCapsIntersectMode" title="enum GstCapsIntersectMode">GstCapsIntersectMode</a>, enum in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstCaps.html#GstCapsMapFunc" title="GstCapsMapFunc ()">GstCapsMapFunc</a>, user_function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstCaps.html#GST-CAPS-ANY:CAPS" title="GST_CAPS_ANY">GST_CAPS_ANY</a>, macro in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
 </dt>
 <dd></dd>
@@ -980,6 +1000,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstCaps.html#gst-caps-filter-and-map-in-place" title="gst_caps_filter_and_map_in_place ()">gst_caps_filter_and_map_in_place</a>, function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstCaps.html#gst-caps-fixate" title="gst_caps_fixate ()">gst_caps_fixate</a>, function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
 </dt>
 <dd></dd>
@@ -1000,6 +1024,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstCaps.html#gst-caps-foreach" title="gst_caps_foreach ()">gst_caps_foreach</a>, function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstCaps.html#gst-caps-from-string" title="gst_caps_from_string ()">gst_caps_from_string</a>, function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
 </dt>
 <dd></dd>
@@ -1076,6 +1104,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstCaps.html#gst-caps-map-in-place" title="gst_caps_map_in_place ()">gst_caps_map_in_place</a>, function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstCaps.html#gst-caps-merge" title="gst_caps_merge ()">gst_caps_merge</a>, function in <a class="link" href="GstCaps.html" title="GstCaps">GstCaps</a>
 </dt>
 <dd></dd>
@@ -1785,11 +1817,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file" title="gst_debug_bin_to_dot_file ()">gst_debug_bin_to_dot_file</a>, function in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
+<a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE()">GST_DEBUG_BIN_TO_DOT_FILE</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE()">GST_DEBUG_BIN_TO_DOT_FILE</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
+<a class="link" href="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file" title="gst_debug_bin_to_dot_file ()">gst_debug_bin_to_dot_file</a>, function in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
 </dt>
 <dd></dd>
 <dt>
@@ -2482,11 +2514,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstElement.html#GST-ELEMENT-IS-LOCKED-STATE:CAPS" title="GST_ELEMENT_IS_LOCKED_STATE()">GST_ELEMENT_IS_LOCKED_STATE</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+<a class="link" href="GstElement.html#gst-element-is-locked-state" title="gst_element_is_locked_state ()">gst_element_is_locked_state</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstElement.html#gst-element-is-locked-state" title="gst_element_is_locked_state ()">gst_element_is_locked_state</a>, function in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+<a class="link" href="GstElement.html#GST-ELEMENT-IS-LOCKED-STATE:CAPS" title="GST_ELEMENT_IS_LOCKED_STATE()">GST_ELEMENT_IS_LOCKED_STATE</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
 <dt>
@@ -3193,11 +3225,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator">GstIterator</a>, struct in <a class="link" href="gstreamer-GstIterator.html" title="GstIterator">GstIterator</a>
+<a class="link" href="gstreamer-GstIterator.html#GST-ITERATOR:CAPS" title="GST_ITERATOR()">GST_ITERATOR</a>, macro in <a class="link" href="gstreamer-GstIterator.html" title="GstIterator">GstIterator</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstIterator.html#GST-ITERATOR:CAPS" title="GST_ITERATOR()">GST_ITERATOR</a>, macro in <a class="link" href="gstreamer-GstIterator.html" title="GstIterator">GstIterator</a>
+<a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator">GstIterator</a>, struct in <a class="link" href="gstreamer-GstIterator.html" title="GstIterator">GstIterator</a>
 </dt>
 <dd></dd>
 <dt>
@@ -3302,6 +3334,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstInfo.html#GST-LEVEL-MAX:CAPS" title="GST_LEVEL_MAX">GST_LEVEL_MAX</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstGError.html#GstLibraryError" title="enum GstLibraryError">GstLibraryError</a>, enum in <a class="link" href="gstreamer-GstGError.html" title="GstGError">GstGError</a>
 </dt>
 <dd></dd>
@@ -4165,6 +4201,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstObject.html#gst-object-has-parent" title="gst_object_has_parent ()">gst_object_has_parent</a>, function in <a class="link" href="GstObject.html" title="GstObject">GstObject</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstObject.html#GST-OBJECT-LOCK:CAPS" title="GST_OBJECT_LOCK()">GST_OBJECT_LOCK</a>, macro in <a class="link" href="GstObject.html" title="GstObject">GstObject</a>
 </dt>
 <dd></dd>
@@ -4266,6 +4306,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstPad.html#GstPad--offset" title="The “offset” property">GstPad:offset</a>, object property in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstPad.html#GstPad--template" title="The “template” property">GstPad:template</a>, object property in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
@@ -4538,11 +4582,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#GST-PAD-IS-ACTIVE:CAPS" title="GST_PAD_IS_ACTIVE()">GST_PAD_IS_ACTIVE</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#gst-pad-is-active" title="gst_pad_is_active ()">gst_pad_is_active</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#gst-pad-is-active" title="gst_pad_is_active ()">gst_pad_is_active</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#GST-PAD-IS-ACTIVE:CAPS" title="GST_PAD_IS_ACTIVE()">GST_PAD_IS_ACTIVE</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
@@ -4554,11 +4598,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#GST-PAD-IS-BLOCKING:CAPS" title="GST_PAD_IS_BLOCKING()">GST_PAD_IS_BLOCKING</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#gst-pad-is-blocking" title="gst_pad_is_blocking ()">gst_pad_is_blocking</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#gst-pad-is-blocking" title="gst_pad_is_blocking ()">gst_pad_is_blocking</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#GST-PAD-IS-BLOCKING:CAPS" title="GST_PAD_IS_BLOCKING()">GST_PAD_IS_BLOCKING</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
@@ -4662,11 +4706,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#GST-PAD-NEEDS-RECONFIGURE:CAPS" title="GST_PAD_NEEDS_RECONFIGURE()">GST_PAD_NEEDS_RECONFIGURE</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#gst-pad-needs-reconfigure" title="gst_pad_needs_reconfigure ()">gst_pad_needs_reconfigure</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#gst-pad-needs-reconfigure" title="gst_pad_needs_reconfigure ()">gst_pad_needs_reconfigure</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#GST-PAD-NEEDS-RECONFIGURE:CAPS" title="GST_PAD_NEEDS_RECONFIGURE()">GST_PAD_NEEDS_RECONFIGURE</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
@@ -5490,6 +5534,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstPreset.html#gst-preset-is-editable" title="gst_preset_is_editable ()">gst_preset_is_editable</a>, function in <a class="link" href="GstPreset.html" title="GstPreset">GstPreset</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstPreset.html#gst-preset-load-preset" title="gst_preset_load_preset ()">gst_preset_load_preset</a>, function in <a class="link" href="GstPreset.html" title="GstPreset">GstPreset</a>
 </dt>
 <dd></dd>
@@ -6409,6 +6457,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstStructure.html#GstStructureFilterMapFunc" title="GstStructureFilterMapFunc ()">GstStructureFilterMapFunc</a>, user_function in <a class="link" href="GstStructure.html" title="GstStructure">GstStructure</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstStructure.html#GstStructureForeachFunc" title="GstStructureForeachFunc ()">GstStructureForeachFunc</a>, user_function in <a class="link" href="GstStructure.html" title="GstStructure">GstStructure</a>
 </dt>
 <dd></dd>
@@ -6425,6 +6477,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstStructure.html#gst-structure-filter-and-map-in-place" title="gst_structure_filter_and_map_in_place ()">gst_structure_filter_and_map_in_place</a>, function in <a class="link" href="GstStructure.html" title="GstStructure">GstStructure</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstStructure.html#gst-structure-fixate" title="gst_structure_fixate ()">gst_structure_fixate</a>, function in <a class="link" href="GstStructure.html" title="GstStructure">GstStructure</a>
 </dt>
 <dd></dd>
@@ -7823,6 +7879,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri">GstUri</a>, struct in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#GstURIError" title="enum GstURIError">GstURIError</a>, enum in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
@@ -7839,22 +7899,102 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-append-path" title="gst_uri_append_path ()">gst_uri_append_path</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-append-path-segment" title="gst_uri_append_path_segment ()">gst_uri_append_path_segment</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#GST-URI-CAST:CAPS" title="GST_URI_CAST()">GST_URI_CAST</a>, macro in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#gst-uri-construct" title="gst_uri_construct ()">gst_uri_construct</a>, function in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#GST-URI-CONST-CAST:CAPS" title="GST_URI_CONST_CAST()">GST_URI_CONST_CAST</a>, macro in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-copy" title="gst_uri_copy ()">gst_uri_copy</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-equal" title="gst_uri_equal ()">gst_uri_equal</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#gst-uri-error-quark" title="gst_uri_error_quark ()">gst_uri_error_quark</a>, function in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-from-string" title="gst_uri_from_string ()">gst_uri_from_string</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-from-string-with-base" title="gst_uri_from_string_with_base ()">gst_uri_from_string_with_base</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-fragment" title="gst_uri_get_fragment ()">gst_uri_get_fragment</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-host" title="gst_uri_get_host ()">gst_uri_get_host</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#gst-uri-get-location" title="gst_uri_get_location ()">gst_uri_get_location</a>, function in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-path" title="gst_uri_get_path ()">gst_uri_get_path</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-path-segments" title="gst_uri_get_path_segments ()">gst_uri_get_path_segments</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-path-string" title="gst_uri_get_path_string ()">gst_uri_get_path_string</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-port" title="gst_uri_get_port ()">gst_uri_get_port</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#gst-uri-get-protocol" title="gst_uri_get_protocol ()">gst_uri_get_protocol</a>, function in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-keys" title="gst_uri_get_query_keys ()">gst_uri_get_query_keys</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-string" title="gst_uri_get_query_string ()">gst_uri_get_query_string</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-table" title="gst_uri_get_query_table ()">gst_uri_get_query_table</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-value" title="gst_uri_get_query_value ()">gst_uri_get_query_value</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-scheme" title="gst_uri_get_scheme ()">gst_uri_get_scheme</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-userinfo" title="gst_uri_get_userinfo ()">gst_uri_get_userinfo</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#gst-uri-handler-get-protocols" title="gst_uri_handler_get_protocols ()">gst_uri_handler_get_protocols</a>, function in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
@@ -7875,10 +8015,46 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-is-normalized" title="gst_uri_is_normalized ()">gst_uri_is_normalized</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#gst-uri-is-valid" title="gst_uri_is_valid ()">gst_uri_is_valid</a>, function in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-is-writable" title="gst_uri_is_writable ()">gst_uri_is_writable</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-join" title="gst_uri_join ()">gst_uri_join</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-join-strings" title="gst_uri_join_strings ()">gst_uri_join_strings</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-make-writable" title="gst_uri_make_writable ()">gst_uri_make_writable</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-new" title="gst_uri_new ()">gst_uri_new</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-new-with-base" title="gst_uri_new_with_base ()">gst_uri_new_with_base</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-normalize" title="gst_uri_normalize ()">gst_uri_normalize</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT">GST_URI_NO_PORT</a>, macro in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#gst-uri-protocol-is-supported" title="gst_uri_protocol_is_supported ()">gst_uri_protocol_is_supported</a>, function in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
@@ -7887,10 +8063,74 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-query-has-key" title="gst_uri_query_has_key ()">gst_uri_query_has_key</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-ref" title="gst_uri_ref ()">gst_uri_ref</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-remove-query-key" title="gst_uri_remove_query_key ()">gst_uri_remove_query_key</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-fragment" title="gst_uri_set_fragment ()">gst_uri_set_fragment</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-host" title="gst_uri_set_host ()">gst_uri_set_host</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-path" title="gst_uri_set_path ()">gst_uri_set_path</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-path-segments" title="gst_uri_set_path_segments ()">gst_uri_set_path_segments</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-path-string" title="gst_uri_set_path_string ()">gst_uri_set_path_string</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-port" title="gst_uri_set_port ()">gst_uri_set_port</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-query-string" title="gst_uri_set_query_string ()">gst_uri_set_query_string</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-query-table" title="gst_uri_set_query_table ()">gst_uri_set_query_table</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-query-value" title="gst_uri_set_query_value ()">gst_uri_set_query_value</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-scheme" title="gst_uri_set_scheme ()">gst_uri_set_scheme</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-userinfo" title="gst_uri_set_userinfo ()">gst_uri_set_userinfo</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-to-string" title="gst_uri_to_string ()">gst_uri_to_string</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-TYPE-IS-VALID:CAPS" title="GST_URI_TYPE_IS_VALID()">GST_URI_TYPE_IS_VALID</a>, macro in <a class="link" href="gstreamer-GstUriHandler.html" title="GstUriHandler">GstUriHandler</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstUri.html#gst-uri-unref" title="gst_uri_unref ()">gst_uri_unref</a>, function in <a class="link" href="gstreamer-GstUri.html" title="GstUri">GstUri</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstClock.html#GST-USECOND:CAPS" title="GST_USECOND">GST_USECOND</a>, macro in <a class="link" href="GstClock.html" title="GstClock">GstClock</a>
 </dt>
 <dd></dd>
diff --git a/docs/gst/html/gst-running.html b/docs/gst/html/gst-running.html
index 012b00c..41382df 100644
--- a/docs/gst/html/gst-running.html
+++ b/docs/gst/html/gst-running.html
@@ -383,6 +383,18 @@
 Try this character encoding first for ID3v1 tag-related strings where the
 encoding does not look like UTF-8.
   </p>
+<p><a name="GST_GL_WINDOW"></a><b><code class="envar">GST_GL_WINDOW</code>. </b>
+Influences the window system to use by the GStreamer OpenGL library.
+Common values are 'x11', 'wayland', 'win32' or 'cocoa'.
+  </p>
+<p><a name="GST_GL_PLATFORM"></a><b><code class="envar">GST_GL_PLATFORM</code>. </b>
+Influences the OpenGL platform to use by the GStreamer OpenGL library.
+Common values are 'egl', 'glx', 'wgl' or 'cgl'.
+  </p>
+<p><a name="GST_GL_API"></a><b><code class="envar">GST_GL_API</code>. </b>
+Influences the OpenGL API requested by the OpenGL platform.
+Common values are 'opengl' or 'gles2'.
+  </p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/gstreamer-1.0.devhelp2 b/docs/gst/html/gstreamer-1.0.devhelp2
index 50a8101..3b8534c 100644
--- a/docs/gst/html/gstreamer-1.0.devhelp2
+++ b/docs/gst/html/gstreamer-1.0.devhelp2
@@ -59,6 +59,7 @@
       <sub name="GstTocSetter" link="gstreamer-GstTocSetter.html"/>
       <sub name="GstTypeFind" link="gstreamer-GstTypeFind.html"/>
       <sub name="GstTypeFindFactory" link="GstTypeFindFactory.html"/>
+      <sub name="GstUri" link="gstreamer-GstUri.html"/>
       <sub name="GstUriHandler" link="gstreamer-GstUriHandler.html"/>
       <sub name="GstUtils" link="gstreamer-GstUtils.html"/>
       <sub name="GstValue" link="gstreamer-GstValue.html"/>
@@ -132,6 +133,7 @@
     <keyword type="function" name="gst_bin_add_many ()" link="GstBin.html#gst-bin-add-many"/>
     <keyword type="function" name="gst_bin_remove_many ()" link="GstBin.html#gst-bin-remove-many"/>
     <keyword type="function" name="gst_bin_find_unlinked_pad ()" link="GstBin.html#gst-bin-find-unlinked-pad"/>
+    <keyword type="function" name="gst_bin_sync_children_states ()" link="GstBin.html#gst-bin-sync-children-states" since="1.6"/>
     <keyword type="macro" name="GST_BIN_IS_NO_RESYNC()" link="GstBin.html#GST-BIN-IS-NO-RESYNC:CAPS" since="1.0.5"/>
     <keyword type="macro" name="GST_BIN_CHILDREN()" link="GstBin.html#GST-BIN-CHILDREN:CAPS"/>
     <keyword type="macro" name="GST_BIN_CHILDREN_COOKIE()" link="GstBin.html#GST-BIN-CHILDREN-COOKIE:CAPS"/>
@@ -272,6 +274,7 @@
     <keyword type="function" name="gst_bus_create_watch ()" link="GstBus.html#gst-bus-create-watch"/>
     <keyword type="function" name="gst_bus_add_watch_full ()" link="GstBus.html#gst-bus-add-watch-full"/>
     <keyword type="function" name="gst_bus_add_watch ()" link="GstBus.html#gst-bus-add-watch"/>
+    <keyword type="function" name="gst_bus_remove_watch ()" link="GstBus.html#gst-bus-remove-watch" since="1.6"/>
     <keyword type="function" name="gst_bus_disable_sync_message_emission ()" link="GstBus.html#gst-bus-disable-sync-message-emission"/>
     <keyword type="function" name="gst_bus_enable_sync_message_emission ()" link="GstBus.html#gst-bus-enable-sync-message-emission"/>
     <keyword type="function" name="gst_bus_async_signal_func ()" link="GstBus.html#gst-bus-async-signal-func"/>
@@ -293,6 +296,9 @@
     <keyword type="macro" name="GST_CAPS_FLAG_IS_SET()" link="GstCaps.html#GST-CAPS-FLAG-IS-SET:CAPS"/>
     <keyword type="macro" name="GST_CAPS_FLAG_SET()" link="GstCaps.html#GST-CAPS-FLAG-SET:CAPS"/>
     <keyword type="macro" name="GST_CAPS_FLAG_UNSET()" link="GstCaps.html#GST-CAPS-FLAG-UNSET:CAPS"/>
+    <keyword type="function" name="GstCapsForeachFunc ()" link="GstCaps.html#GstCapsForeachFunc" since="1.6"/>
+    <keyword type="function" name="GstCapsMapFunc ()" link="GstCaps.html#GstCapsMapFunc"/>
+    <keyword type="function" name="GstCapsFilterMapFunc ()" link="GstCaps.html#GstCapsFilterMapFunc"/>
     <keyword type="function" name="gst_caps_new_empty ()" link="GstCaps.html#gst-caps-new-empty"/>
     <keyword type="function" name="gst_caps_new_empty_simple ()" link="GstCaps.html#gst-caps-new-empty-simple"/>
     <keyword type="function" name="gst_caps_new_any ()" link="GstCaps.html#gst-caps-new-any"/>
@@ -319,6 +325,9 @@
     <keyword type="function" name="gst_caps_set_value ()" link="GstCaps.html#gst-caps-set-value"/>
     <keyword type="function" name="gst_caps_set_simple ()" link="GstCaps.html#gst-caps-set-simple"/>
     <keyword type="function" name="gst_caps_set_simple_valist ()" link="GstCaps.html#gst-caps-set-simple-valist"/>
+    <keyword type="function" name="gst_caps_foreach ()" link="GstCaps.html#gst-caps-foreach" since="1.6"/>
+    <keyword type="function" name="gst_caps_map_in_place ()" link="GstCaps.html#gst-caps-map-in-place" since="1.6"/>
+    <keyword type="function" name="gst_caps_filter_and_map_in_place ()" link="GstCaps.html#gst-caps-filter-and-map-in-place" since="1.6"/>
     <keyword type="function" name="gst_caps_is_any ()" link="GstCaps.html#gst-caps-is-any"/>
     <keyword type="function" name="gst_caps_is_empty ()" link="GstCaps.html#gst-caps-is-empty"/>
     <keyword type="function" name="gst_caps_is_fixed ()" link="GstCaps.html#gst-caps-is-fixed"/>
@@ -1009,6 +1018,7 @@
     <keyword type="function" name="gst_object_get_name ()" link="GstObject.html#gst-object-get-name"/>
     <keyword type="function" name="gst_object_set_parent ()" link="GstObject.html#gst-object-set-parent"/>
     <keyword type="function" name="gst_object_get_parent ()" link="GstObject.html#gst-object-get-parent"/>
+    <keyword type="function" name="gst_object_has_parent ()" link="GstObject.html#gst-object-has-parent" since="1.6"/>
     <keyword type="function" name="gst_object_unparent ()" link="GstObject.html#gst-object-unparent"/>
     <keyword type="function" name="gst_object_default_deep_notify ()" link="GstObject.html#gst-object-default-deep-notify"/>
     <keyword type="function" name="gst_object_default_error ()" link="GstObject.html#gst-object-default-error"/>
@@ -1222,6 +1232,7 @@
     <keyword type="struct" name="struct GstPadProbeInfo" link="GstPad.html#GstPadProbeInfo"/>
     <keyword type="property" name="The “caps” property" link="GstPad.html#GstPad--caps"/>
     <keyword type="property" name="The “direction” property" link="GstPad.html#GstPad--direction"/>
+    <keyword type="property" name="The “offset” property" link="GstPad.html#GstPad--offset"/>
     <keyword type="property" name="The “template” property" link="GstPad.html#GstPad--template"/>
     <keyword type="signal" name="The “linked” signal" link="GstPad.html#GstPad-linked"/>
     <keyword type="signal" name="The “unlinked” signal" link="GstPad.html#GstPad-unlinked"/>
@@ -1361,6 +1372,7 @@
     <keyword type="function" name="gst_preset_get_meta ()" link="GstPreset.html#gst-preset-get-meta"/>
     <keyword type="function" name="gst_preset_set_app_dir ()" link="GstPreset.html#gst-preset-set-app-dir"/>
     <keyword type="function" name="gst_preset_get_app_dir ()" link="GstPreset.html#gst-preset-get-app-dir"/>
+    <keyword type="function" name="gst_preset_is_editable ()" link="GstPreset.html#gst-preset-is-editable" since="1.6"/>
     <keyword type="struct" name="GstPreset" link="GstPreset.html#GstPreset-struct"/>
     <keyword type="struct" name="struct GstPresetInterface" link="GstPreset.html#GstPresetInterface"/>
     <keyword type="macro" name="GST_QUERY_MAKE_TYPE()" link="GstQuery.html#GST-QUERY-MAKE-TYPE:CAPS"/>
@@ -1503,6 +1515,7 @@
     <keyword type="enum" name="enum GstSegmentFlags" link="GstSegment.html#GstSegmentFlags"/>
     <keyword type="function" name="GstStructureForeachFunc ()" link="GstStructure.html#GstStructureForeachFunc"/>
     <keyword type="function" name="GstStructureMapFunc ()" link="GstStructure.html#GstStructureMapFunc"/>
+    <keyword type="function" name="GstStructureFilterMapFunc ()" link="GstStructure.html#GstStructureFilterMapFunc"/>
     <keyword type="function" name="gst_structure_new_empty ()" link="GstStructure.html#gst-structure-new-empty"/>
     <keyword type="function" name="gst_structure_new_id_empty ()" link="GstStructure.html#gst-structure-new-id-empty"/>
     <keyword type="function" name="gst_structure_new ()" link="GstStructure.html#gst-structure-new"/>
@@ -1534,7 +1547,6 @@
     <keyword type="function" name="gst_structure_remove_fields_valist ()" link="GstStructure.html#gst-structure-remove-fields-valist"/>
     <keyword type="function" name="gst_structure_remove_all_fields ()" link="GstStructure.html#gst-structure-remove-all-fields"/>
     <keyword type="function" name="gst_structure_get_field_type ()" link="GstStructure.html#gst-structure-get-field-type"/>
-    <keyword type="function" name="gst_structure_foreach ()" link="GstStructure.html#gst-structure-foreach"/>
     <keyword type="function" name="gst_structure_n_fields ()" link="GstStructure.html#gst-structure-n-fields"/>
     <keyword type="function" name="gst_structure_has_field ()" link="GstStructure.html#gst-structure-has-field"/>
     <keyword type="function" name="gst_structure_has_field_typed ()" link="GstStructure.html#gst-structure-has-field-typed"/>
@@ -1556,7 +1568,9 @@
     <keyword type="function" name="gst_structure_get_clock_time ()" link="GstStructure.html#gst-structure-get-clock-time"/>
     <keyword type="function" name="gst_structure_get_enum ()" link="GstStructure.html#gst-structure-get-enum"/>
     <keyword type="function" name="gst_structure_get_fraction ()" link="GstStructure.html#gst-structure-get-fraction"/>
+    <keyword type="function" name="gst_structure_foreach ()" link="GstStructure.html#gst-structure-foreach"/>
     <keyword type="function" name="gst_structure_map_in_place ()" link="GstStructure.html#gst-structure-map-in-place"/>
+    <keyword type="function" name="gst_structure_filter_and_map_in_place ()" link="GstStructure.html#gst-structure-filter-and-map-in-place" since="1.6"/>
     <keyword type="function" name="gst_structure_nth_field_name ()" link="GstStructure.html#gst-structure-nth-field-name"/>
     <keyword type="function" name="gst_structure_set_parent_refcount ()" link="GstStructure.html#gst-structure-set-parent-refcount"/>
     <keyword type="function" name="gst_structure_to_string ()" link="GstStructure.html#gst-structure-to-string"/>
@@ -1831,6 +1845,51 @@
     <keyword type="function" name="gst_type_find_factory_has_function ()" link="GstTypeFindFactory.html#gst-type-find-factory-has-function"/>
     <keyword type="function" name="gst_type_find_factory_call_function ()" link="GstTypeFindFactory.html#gst-type-find-factory-call-function"/>
     <keyword type="struct" name="GstTypeFindFactory" link="GstTypeFindFactory.html#GstTypeFindFactory-struct"/>
+    <keyword type="macro" name="GST_URI_CAST()" link="gstreamer-GstUri.html#GST-URI-CAST:CAPS"/>
+    <keyword type="macro" name="GST_URI_CONST_CAST()" link="gstreamer-GstUri.html#GST-URI-CONST-CAST:CAPS"/>
+    <keyword type="function" name="gst_uri_new ()" link="gstreamer-GstUri.html#gst-uri-new" since="1.6"/>
+    <keyword type="function" name="gst_uri_new_with_base ()" link="gstreamer-GstUri.html#gst-uri-new-with-base" since="1.6"/>
+    <keyword type="function" name="gst_uri_from_string ()" link="gstreamer-GstUri.html#gst-uri-from-string" since="1.6"/>
+    <keyword type="function" name="gst_uri_from_string_with_base ()" link="gstreamer-GstUri.html#gst-uri-from-string-with-base" since="1.6"/>
+    <keyword type="function" name="gst_uri_copy ()" link="gstreamer-GstUri.html#gst-uri-copy"/>
+    <keyword type="function" name="gst_uri_equal ()" link="gstreamer-GstUri.html#gst-uri-equal" since="1.6"/>
+    <keyword type="function" name="gst_uri_join ()" link="gstreamer-GstUri.html#gst-uri-join" since="1.6"/>
+    <keyword type="function" name="gst_uri_join_strings ()" link="gstreamer-GstUri.html#gst-uri-join-strings" since="1.6"/>
+    <keyword type="function" name="gst_uri_is_writable ()" link="gstreamer-GstUri.html#gst-uri-is-writable" since="1.6"/>
+    <keyword type="function" name="gst_uri_make_writable ()" link="gstreamer-GstUri.html#gst-uri-make-writable" since="1.6"/>
+    <keyword type="function" name="gst_uri_to_string ()" link="gstreamer-GstUri.html#gst-uri-to-string" since="1.6"/>
+    <keyword type="function" name="gst_uri_ref ()" link="gstreamer-GstUri.html#gst-uri-ref"/>
+    <keyword type="function" name="gst_uri_unref ()" link="gstreamer-GstUri.html#gst-uri-unref"/>
+    <keyword type="function" name="gst_uri_is_normalized ()" link="gstreamer-GstUri.html#gst-uri-is-normalized" since="1.6"/>
+    <keyword type="function" name="gst_uri_normalize ()" link="gstreamer-GstUri.html#gst-uri-normalize" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_scheme ()" link="gstreamer-GstUri.html#gst-uri-get-scheme"/>
+    <keyword type="function" name="gst_uri_set_scheme ()" link="gstreamer-GstUri.html#gst-uri-set-scheme" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_userinfo ()" link="gstreamer-GstUri.html#gst-uri-get-userinfo" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_userinfo ()" link="gstreamer-GstUri.html#gst-uri-set-userinfo" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_host ()" link="gstreamer-GstUri.html#gst-uri-get-host" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_host ()" link="gstreamer-GstUri.html#gst-uri-set-host" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_port ()" link="gstreamer-GstUri.html#gst-uri-get-port" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_port ()" link="gstreamer-GstUri.html#gst-uri-set-port" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_path ()" link="gstreamer-GstUri.html#gst-uri-get-path" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_path ()" link="gstreamer-GstUri.html#gst-uri-set-path" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_path_string ()" link="gstreamer-GstUri.html#gst-uri-get-path-string" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_path_string ()" link="gstreamer-GstUri.html#gst-uri-set-path-string" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_path_segments ()" link="gstreamer-GstUri.html#gst-uri-get-path-segments" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_path_segments ()" link="gstreamer-GstUri.html#gst-uri-set-path-segments" since="1.6"/>
+    <keyword type="function" name="gst_uri_append_path ()" link="gstreamer-GstUri.html#gst-uri-append-path" since="1.6"/>
+    <keyword type="function" name="gst_uri_append_path_segment ()" link="gstreamer-GstUri.html#gst-uri-append-path-segment" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_query_string ()" link="gstreamer-GstUri.html#gst-uri-get-query-string" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_query_string ()" link="gstreamer-GstUri.html#gst-uri-set-query-string" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_query_table ()" link="gstreamer-GstUri.html#gst-uri-get-query-table" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_query_table ()" link="gstreamer-GstUri.html#gst-uri-set-query-table" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_query_value ()" link="gstreamer-GstUri.html#gst-uri-get-query-value" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_query_value ()" link="gstreamer-GstUri.html#gst-uri-set-query-value" since="1.6"/>
+    <keyword type="function" name="gst_uri_remove_query_key ()" link="gstreamer-GstUri.html#gst-uri-remove-query-key" since="1.6"/>
+    <keyword type="function" name="gst_uri_query_has_key ()" link="gstreamer-GstUri.html#gst-uri-query-has-key" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_query_keys ()" link="gstreamer-GstUri.html#gst-uri-get-query-keys" since="1.6"/>
+    <keyword type="function" name="gst_uri_get_fragment ()" link="gstreamer-GstUri.html#gst-uri-get-fragment" since="1.6"/>
+    <keyword type="function" name="gst_uri_set_fragment ()" link="gstreamer-GstUri.html#gst-uri-set-fragment" since="1.6"/>
+    <keyword type="struct" name="GstUri" link="gstreamer-GstUri.html#GstUri"/>
     <keyword type="function" name="gst_uri_error_quark ()" link="gstreamer-GstUriHandler.html#gst-uri-error-quark"/>
     <keyword type="macro" name="GST_URI_TYPE_IS_VALID()" link="gstreamer-GstUriHandler.html#GST-URI-TYPE-IS-VALID:CAPS"/>
     <keyword type="function" name="gst_uri_protocol_is_valid ()" link="gstreamer-GstUriHandler.html#gst-uri-protocol-is-valid"/>
@@ -1850,6 +1909,7 @@
     <keyword type="struct" name="struct GstURIHandlerInterface" link="gstreamer-GstUriHandler.html#GstURIHandlerInterface"/>
     <keyword type="enum" name="enum GstURIType" link="gstreamer-GstUriHandler.html#GstURIType"/>
     <keyword type="enum" name="enum GstURIError" link="gstreamer-GstUriHandler.html#GstURIError"/>
+    <keyword type="macro" name="GST_URI_NO_PORT" link="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS"/>
     <keyword type="macro" name="GST_CALL_PARENT()" link="gstreamer-GstUtils.html#GST-CALL-PARENT:CAPS"/>
     <keyword type="macro" name="GST_CALL_PARENT_WITH_DEFAULT()" link="gstreamer-GstUtils.html#GST-CALL-PARENT-WITH-DEFAULT:CAPS"/>
     <keyword type="macro" name="GST_READ_UINT8()" link="gstreamer-GstUtils.html#GST-READ-UINT8:CAPS"/>
@@ -2158,6 +2218,7 @@
     <keyword type="function" name="gst_debug_bin_to_dot_file_with_ts ()" link="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file-with-ts"/>
     <keyword type="enum" name="enum GstDebugLevel" link="gstreamer-GstInfo.html#GstDebugLevel"/>
     <keyword type="macro" name="GST_LEVEL_DEFAULT" link="gstreamer-GstInfo.html#GST-LEVEL-DEFAULT:CAPS"/>
+    <keyword type="macro" name="GST_LEVEL_MAX" link="gstreamer-GstInfo.html#GST-LEVEL-MAX:CAPS" since="1.6"/>
     <keyword type="enum" name="enum GstDebugColorFlags" link="gstreamer-GstInfo.html#GstDebugColorFlags"/>
     <keyword type="enum" name="enum GstDebugColorMode" link="gstreamer-GstInfo.html#GstDebugColorMode"/>
     <keyword type="struct" name="struct GstDebugCategory" link="gstreamer-GstInfo.html#GstDebugCategory"/>
diff --git a/docs/gst/html/gstreamer-Gst.html b/docs/gst/html/gstreamer-Gst.html
index 5a78e54..c3aca13 100644
--- a/docs/gst/html/gstreamer-Gst.html
+++ b/docs/gst/html/gstreamer-Gst.html
@@ -147,7 +147,7 @@
 <div class="refsect1">
 <a name="gstreamer-Gst.description"></a><h2>Description</h2>
 <p>GStreamer is a framework for constructing graphs of various filters
-(termed elements here) that will handle streaming media.  Any discreet
+(termed elements here) that will handle streaming media.  Any discrete
 (packetizable) media type is supported, with provisions for automatically
 determining source type.  Formatting/framing information is provided with
 a powerful negotiation framework.  Plugins are heavily used to provide for
diff --git a/docs/gst/html/gstreamer-GstInfo.html b/docs/gst/html/gstreamer-GstInfo.html
index 09f4ffb..c36dac7 100644
--- a/docs/gst/html/gstreamer-GstInfo.html
+++ b/docs/gst/html/gstreamer-GstInfo.html
@@ -607,6 +607,10 @@
 <td class="function_name"><a class="link" href="gstreamer-GstInfo.html#GST-LEVEL-DEFAULT:CAPS" title="GST_LEVEL_DEFAULT">GST_LEVEL_DEFAULT</a></td>
 </tr>
 <tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gstreamer-GstInfo.html#GST-LEVEL-MAX:CAPS" title="GST_LEVEL_MAX">GST_LEVEL_MAX</a></td>
+</tr>
+<tr>
 <td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" href="gstreamer-GstInfo.html#GstDebugColorFlags" title="enum GstDebugColorFlags">GstDebugColorFlags</a></td>
 </tr>
@@ -1010,11 +1014,13 @@
                        <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> line</code></em>,
                        <em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *object</code></em>,
                        <em class="parameter"><code><span class="type">GstDebugMessage</span> *message</code></em>,
-                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> unused</code></em>);</pre>
+                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>The default logging handler used by GStreamer. Logging functions get called
-whenever a macro like GST_DEBUG or similar is used. This function outputs the
-message and additional info to stderr (or the log file specified via the
-GST_DEBUG_FILE environment variable).</p>
+whenever a macro like GST_DEBUG or similar is used. By default this function
+is setup to output the message and additional info to stderr (or the log file
+specified via the GST_DEBUG_FILE environment variable) as received via
+<em class="parameter"><code>user_data</code></em>
+.</p>
 <p>You can add other handlers by using <a class="link" href="gstreamer-GstInfo.html#gst-debug-add-log-function" title="gst_debug_add_log_function ()"><code class="function">gst_debug_add_log_function()</code></a>.
 And you can remove this handler by calling
 gst_debug_remove_log_function(gst_debug_log_default);</p>
@@ -1064,8 +1070,8 @@
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
-<td class="parameter_name"><p>unused</p></td>
-<td class="parameter_description"><p>an unused variable, reserved for some user_data.</p></td>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>the FILE* to log to</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
@@ -3254,11 +3260,23 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GST-LEVEL-MAX:CAPS"></a><h3>GST_LEVEL_MAX</h3>
+<pre class="programlisting">#define GST_LEVEL_MAX GST_LEVEL_COUNT
+</pre>
+<p>Defines the maximum debugging level to be enabled at compilation time. By default
+it is set such that all debugging statements will be enabled.</p>
+<p>If you wish to compile GStreamer and plugins with only some debugging statements
+(Such as just warnings and errors), you can define it at compile time to the
+maximum debug level. Any debug statements above that level will be compiled out.</p>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstDebugColorFlags"></a><h3>enum GstDebugColorFlags</h3>
 <p>These are some terminal style flags you can use when creating your
 debugging categories to make them stand out in debugging output.</p>
 <div class="refsect3">
-<a name="id-1.5.3.8.4.4"></a><h4>Members</h4>
+<a name="id-1.5.3.8.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -3400,7 +3418,7 @@
 <div class="refsect2">
 <a name="GstDebugColorMode"></a><h3>enum GstDebugColorMode</h3>
 <div class="refsect3">
-<a name="id-1.5.3.8.5.3"></a><h4>Members</h4>
+<a name="id-1.5.3.8.6.3"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -3449,7 +3467,7 @@
 <p>Available details for pipeline graphs produced by <a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE()"><code class="function">GST_DEBUG_BIN_TO_DOT_FILE()</code></a>
 and <a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE-WITH-TS:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()"><code class="function">GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.5.3.8.7.4"></a><h4>Members</h4>
+<a name="id-1.5.3.8.8.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -3474,7 +3492,8 @@
 <tr>
 <td class="enum_member_name"><p><a name="GST-DEBUG-GRAPH-SHOW-NON-DEFAULT-PARAMS:CAPS"></a>GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS</p></td>
 <td class="enum_member_description">
-<p>show modified parameters on elements</p>
+<p>show modified parameters on
+                                          elements</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -3486,9 +3505,25 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-DEBUG-GRAPH-SHOW-FULL-PARAMS:CAPS"></a>GST_DEBUG_GRAPH_SHOW_FULL_PARAMS</p></td>
+<td class="enum_member_description">
+<p>show full element parameter values even
+                                   if they are very long</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-DEBUG-GRAPH-SHOW-ALL:CAPS"></a>GST_DEBUG_GRAPH_SHOW_ALL</p></td>
 <td class="enum_member_description">
-<p>show all details</p>
+<p>show all the typical details that one might want</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DEBUG-GRAPH-SHOW-VERBOSE:CAPS"></a>GST_DEBUG_GRAPH_SHOW_VERBOSE</p></td>
+<td class="enum_member_description">
+<p>show all details regardless of how large or
+                               verbose they make the resulting output</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
diff --git a/docs/gst/html/gstreamer-GstIterator.html b/docs/gst/html/gstreamer-GstIterator.html
index 22db4bb..57fb62a 100644
--- a/docs/gst/html/gstreamer-GstIterator.html
+++ b/docs/gst/html/gstreamer-GstIterator.html
@@ -253,9 +253,10 @@
 a threadsafe way.</p>
 <p>Various GStreamer objects provide access to their internal structures using
 an iterator.</p>
-<p>In general, whenever calling a GstIterator function results in your code
-receiving a refcounted object, the refcount for that object will have been
-increased.  Your code is responsible for unreffing that object after use.</p>
+<p>Note that if calling a GstIterator function results in your code receiving
+a refcounted object (with, say, <a href="https://developer.gnome.org/gobject/unstable/gobject-Standard-Parameter-and-Value-Types.html#g-value-get-object"><code class="function">g_value_get_object()</code></a>), the refcount for that
+object will not be increased. Your code is responsible for taking a reference
+if it wants to continue using it later.</p>
 <p>The basic use pattern of an iterator is as follows:</p>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
@@ -283,13 +284,15 @@
 20
 21
 22
-23</pre></td>
+23
+24</pre></td>
         <td class="listing_code"><pre class="programlisting">GstIterator <span class="gtkdoc opt">*</span>it <span class="gtkdoc opt">=</span> <span class="function">_get_iterator</span><span class="gtkdoc opt">(</span>object<span class="gtkdoc opt">);</span>
+GValue item <span class="gtkdoc opt">=</span> G_VALUE_INIT<span class="gtkdoc opt">;</span>
 done <span class="gtkdoc opt">=</span> FALSE<span class="gtkdoc opt">;</span>
 <span class="keyword">while</span> <span class="gtkdoc opt">(!</span>done<span class="gtkdoc opt">) {</span>
   <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstIterator.html#gst-iterator-next">gst_iterator_next</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">, &amp;</span>item<span class="gtkdoc opt">)) {</span>
     <span class="keyword">case</span> GST_ITERATOR_OK<span class="gtkdoc opt">:</span>
-      <span class="gtkdoc opt">...</span> use<span class="gtkdoc opt">/</span>change item here<span class="gtkdoc opt">...</span>
+      <span class="gtkdoc opt">...</span>get<span class="gtkdoc opt">/</span>use<span class="gtkdoc opt">/</span>change item here<span class="gtkdoc opt">...</span>
       <span class="function"><a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#g-value-reset">g_value_reset</a></span> <span class="gtkdoc opt">(&amp;</span>item<span class="gtkdoc opt">);</span>
       <span class="keyword">break</span><span class="gtkdoc opt">;</span>
     <span class="keyword">case</span> GST_ITERATOR_RESYNC<span class="gtkdoc opt">:</span>
diff --git a/docs/gst/html/gstreamer-GstUri.html b/docs/gst/html/gstreamer-GstUri.html
new file mode 100644
index 0000000..1e357df
--- /dev/null
+++ b/docs/gst/html/gstreamer-GstUri.html
@@ -0,0 +1,1945 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GStreamer 1.0 Core Reference Manual: GstUri</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
+<link rel="up" href="libgstreamer.html" title="GStreamer Core Library">
+<link rel="prev" href="GstTypeFindFactory.html" title="GstTypeFindFactory">
+<link rel="next" href="gstreamer-GstUriHandler.html" title="GstUriHandler">
+<meta name="generator" content="GTK-Doc V1.21 (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="#gstreamer-GstUri.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="libgstreamer.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="GstTypeFindFactory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gstreamer-GstUriHandler.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gstreamer-GstUri"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gstreamer-GstUri.top_of_page"></a>GstUri</span></h2>
+<p>GstUri — URI parsing and manipulation.</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gstreamer-GstUri.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="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#GST-URI-CAST:CAPS" title="GST_URI_CAST()">GST_URI_CAST</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#GST-URI-CONST-CAST:CAPS" title="GST_URI_CONST_CAST()">GST_URI_CONST_CAST</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-new" title="gst_uri_new ()">gst_uri_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-new-with-base" title="gst_uri_new_with_base ()">gst_uri_new_with_base</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-from-string" title="gst_uri_from_string ()">gst_uri_from_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-from-string-with-base" title="gst_uri_from_string_with_base ()">gst_uri_from_string_with_base</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-copy" title="gst_uri_copy ()">gst_uri_copy</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="gstreamer-GstUri.html#gst-uri-equal" title="gst_uri_equal ()">gst_uri_equal</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-join" title="gst_uri_join ()">gst_uri_join</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-join-strings" title="gst_uri_join_strings ()">gst_uri_join_strings</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="gstreamer-GstUri.html#gst-uri-is-writable" title="gst_uri_is_writable ()">gst_uri_is_writable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-make-writable" title="gst_uri_make_writable ()">gst_uri_make_writable</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-to-string" title="gst_uri_to_string ()">gst_uri_to_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-ref" title="gst_uri_ref ()">gst_uri_ref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-unref" title="gst_uri_unref ()">gst_uri_unref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-is-normalized" title="gst_uri_is_normalized ()">gst_uri_is_normalized</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="gstreamer-GstUri.html#gst-uri-normalize" title="gst_uri_normalize ()">gst_uri_normalize</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-scheme" title="gst_uri_get_scheme ()">gst_uri_get_scheme</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="gstreamer-GstUri.html#gst-uri-set-scheme" title="gst_uri_set_scheme ()">gst_uri_set_scheme</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-userinfo" title="gst_uri_get_userinfo ()">gst_uri_get_userinfo</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="gstreamer-GstUri.html#gst-uri-set-userinfo" title="gst_uri_set_userinfo ()">gst_uri_set_userinfo</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-host" title="gst_uri_get_host ()">gst_uri_get_host</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="gstreamer-GstUri.html#gst-uri-set-host" title="gst_uri_set_host ()">gst_uri_set_host</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-port" title="gst_uri_get_port ()">gst_uri_get_port</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="gstreamer-GstUri.html#gst-uri-set-port" title="gst_uri_set_port ()">gst_uri_set_port</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-path" title="gst_uri_get_path ()">gst_uri_get_path</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="gstreamer-GstUri.html#gst-uri-set-path" title="gst_uri_set_path ()">gst_uri_set_path</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-path-string" title="gst_uri_get_path_string ()">gst_uri_get_path_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-path-string" title="gst_uri_set_path_string ()">gst_uri_set_path_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-path-segments" title="gst_uri_get_path_segments ()">gst_uri_get_path_segments</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="gstreamer-GstUri.html#gst-uri-set-path-segments" title="gst_uri_set_path_segments ()">gst_uri_set_path_segments</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="gstreamer-GstUri.html#gst-uri-append-path" title="gst_uri_append_path ()">gst_uri_append_path</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="gstreamer-GstUri.html#gst-uri-append-path-segment" title="gst_uri_append_path_segment ()">gst_uri_append_path_segment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-string" title="gst_uri_get_query_string ()">gst_uri_get_query_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-set-query-string" title="gst_uri_set_query_string ()">gst_uri_set_query_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-table" title="gst_uri_get_query_table ()">gst_uri_get_query_table</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="gstreamer-GstUri.html#gst-uri-set-query-table" title="gst_uri_set_query_table ()">gst_uri_set_query_table</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-value" title="gst_uri_get_query_value ()">gst_uri_get_query_value</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="gstreamer-GstUri.html#gst-uri-set-query-value" title="gst_uri_set_query_value ()">gst_uri_set_query_value</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="gstreamer-GstUri.html#gst-uri-remove-query-key" title="gst_uri_remove_query_key ()">gst_uri_remove_query_key</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-query-has-key" title="gst_uri_query_has_key ()">gst_uri_query_has_key</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-query-keys" title="gst_uri_get_query_keys ()">gst_uri_get_query_keys</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstUri.html#gst-uri-get-fragment" title="gst_uri_get_fragment ()">gst_uri_get_fragment</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="gstreamer-GstUri.html#gst-uri-set-fragment" title="gst_uri_set_fragment ()">gst_uri_set_fragment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstUri.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody><tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri">GstUri</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstUri.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/gst.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstUri.description"></a><h2>Description</h2>
+<p>A <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object can be used to parse and split a URI string into its
+constituant parts. Two <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> objects can be joined to make a new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a>
+using the algorithm described in RFC3986.</p>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstUri.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="GST-URI-CAST:CAPS"></a><h3>GST_URI_CAST()</h3>
+<pre class="programlisting">#define GST_URI_CAST(obj)   ((GstUri *)(obj))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-URI-CONST-CAST:CAPS"></a><h3>GST_URI_CONST_CAST()</h3>
+<pre class="programlisting">#define GST_URI_CONST_CAST(obj) ((const GstUri *)(obj))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-new"></a><h3>gst_uri_new ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_new (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *scheme</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> *userinfo</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> *host</code></em>,
+             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</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> *path</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> *query</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> *fragment</code></em>);</pre>
+<p>Creates a new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object with the given URI parts. The path and query
+strings will be broken down into their elements. All strings should not be
+escaped except where indicated.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>scheme</p></td>
+<td class="parameter_description"><p> The scheme for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>userinfo</p></td>
+<td class="parameter_description"><p> The user-info for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>host</p></td>
+<td class="parameter_description"><p> The host name for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>port</p></td>
+<td class="parameter_description"><p>The port number for the new URI or <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT"><code class="literal">GST_URI_NO_PORT</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p> The path for the new URI with '/' separating path
+elements. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query</p></td>
+<td class="parameter_description"><p> The query string for the new URI with '&amp;' separating
+query elements. Elements containing '&amp;' characters
+should encode them as "<code class="literal">26</code>". </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fragment</p></td>
+<td class="parameter_description"><p> The fragment name for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.4.6"></a><h4>Returns</h4>
+<p> A new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-new-with-base"></a><h3>gst_uri_new_with_base ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_new_with_base (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *base</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> *scheme</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> *userinfo</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> *host</code></em>,
+                       <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</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> *path</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> *query</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> *fragment</code></em>);</pre>
+<p>Like <a class="link" href="gstreamer-GstUri.html#gst-uri-new" title="gst_uri_new ()"><code class="function">gst_uri_new()</code></a>, but joins the new URI onto a base URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>base</p></td>
+<td class="parameter_description"><p> The base URI to join the new URI to. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>scheme</p></td>
+<td class="parameter_description"><p> The scheme for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>userinfo</p></td>
+<td class="parameter_description"><p> The user-info for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>host</p></td>
+<td class="parameter_description"><p> The host name for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>port</p></td>
+<td class="parameter_description"><p>The port number for the new URI or <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT"><code class="literal">GST_URI_NO_PORT</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p> The path for the new URI with '/' separating path
+elements. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query</p></td>
+<td class="parameter_description"><p> The query string for the new URI with '&amp;' separating
+query elements. Elements containing '&amp;' characters
+should encode them as "<code class="literal">26</code>". </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fragment</p></td>
+<td class="parameter_description"><p> The fragment name for the new URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.5.6"></a><h4>Returns</h4>
+<p> The new URI joined onto <em class="parameter"><code>base</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-from-string"></a><h3>gst_uri_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_from_string (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>Parses a URI string into a new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. Will return NULL if the URI
+cannot be parsed.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>The URI string to parse.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.6.6"></a><h4>Returns</h4>
+<p> A new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object, or NULL. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-from-string-with-base"></a><h3>gst_uri_from_string_with_base ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_from_string_with_base (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *base</code></em>,
+                               <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *uri</code></em>);</pre>
+<p>Like <a class="link" href="gstreamer-GstUri.html#gst-uri-from-string" title="gst_uri_from_string ()"><code class="function">gst_uri_from_string()</code></a> but also joins with a base URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>base</p></td>
+<td class="parameter_description"><p> The base URI to join the new URI with. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>The URI string to parse.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.7.6"></a><h4>Returns</h4>
+<p> A new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-copy"></a><h3>gst_uri_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_copy (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Create a new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object with the same data as this <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object.
+If <em class="parameter"><code>uri</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>uri</p></td>
+<td class="parameter_description"><p>This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.8.6"></a><h4>Returns</h4>
+<p> A new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object which is a copy of this
+<a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-equal"></a><h3>gst_uri_equal ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_equal (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *first</code></em>,
+               <em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *second</code></em>);</pre>
+<p>Compares two <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> objects to see if they represent the same normalized
+URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.9.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>first</p></td>
+<td class="parameter_description"><p>First <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to compare.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>second</p></td>
+<td class="parameter_description"><p>Second <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to compare.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.9.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the normalized versions of the two URI's would be equal.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-join"></a><h3>gst_uri_join ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_join (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *base_uri</code></em>,
+              <em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *ref_uri</code></em>);</pre>
+<p>Join a reference URI onto a base URI using the method from RFC 3986.
+If either URI is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then the other URI will be returned with the ref count
+increased.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.10.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>base_uri</p></td>
+<td class="parameter_description"><p> The base URI to join another to. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref_uri</p></td>
+<td class="parameter_description"><p> The reference URI to join onto the
+base URI. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.10.6"></a><h4>Returns</h4>
+<p> A <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> which represents the base with the
+reference URI joined on. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-join-strings"></a><h3>gst_uri_join_strings ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_uri_join_strings (<em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *base_uri</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> *ref_uri</code></em>);</pre>
+<p>This is a convenience function to join two URI strings and return the result.
+The returned string should be <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>'d after use.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.11.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>base_uri</p></td>
+<td class="parameter_description"><p>The percent-encoded base URI.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ref_uri</p></td>
+<td class="parameter_description"><p>The percent-encoded reference URI to join to the <em class="parameter"><code>base_uri</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.11.6"></a><h4>Returns</h4>
+<p> A string representing the percent-encoded join of
+the two URIs. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-is-writable"></a><h3>gst_uri_is_writable ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_is_writable (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Check if it is safe to write to this <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a>.</p>
+<p>Check if the refcount of <em class="parameter"><code>uri</code></em>
+ is exactly 1, meaning that no other
+reference exists to the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> and that the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> is therefore writable.</p>
+<p>Modification of a <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> should only be done after verifying that it is
+writable.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.12.7"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object to test.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.12.8"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if it is safe to write to the object.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-make-writable"></a><h3>gst_uri_make_writable ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_make_writable (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Make the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> writable.</p>
+<p>Checks if <em class="parameter"><code>uri</code></em>
+ is writable, and if so the original object is returned. If
+not, then a writable copy is made and returned. This gives away the
+reference to <em class="parameter"><code>uri</code></em>
+ and returns a reference to the new <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a>.
+If <em class="parameter"><code>uri</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.13.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object to make writable. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.13.7"></a><h4>Returns</h4>
+<p> A writable version of <em class="parameter"><code>uri</code></em>
+. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-to-string"></a><h3>gst_uri_to_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_uri_to_string (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Convert the URI to a string.</p>
+<p>Returns the URI as held in this object as a gchar* <code class="literal">NUL</code> terminated string.
+The caller should <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> the string once they are finished with it.
+The string is put together as described in RFC 3986.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.14.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to convert to a string.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.14.7"></a><h4>Returns</h4>
+<p> The string version of the URI. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-ref"></a><h3>gst_uri_ref ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="returnvalue">GstUri</span></a> *
+gst_uri_ref (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Add a reference to this <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. See <a class="link" href="gstreamer-GstMiniObject.html#gst-mini-object-ref" title="gst_mini_object_ref ()"><code class="function">gst_mini_object_ref()</code></a> for further
+info.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.15.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.15.6"></a><h4>Returns</h4>
+<p> This object with the reference count incremented.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-unref"></a><h3>gst_uri_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_uri_unref (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Decrement the reference count to this <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object.</p>
+<p>If the reference count drops to 0 then finalize this object.</p>
+<p>See <a class="link" href="gstreamer-GstMiniObject.html#gst-mini-object-unref" title="gst_mini_object_unref ()"><code class="function">gst_mini_object_unref()</code></a> for further info.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.16.7"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-is-normalized"></a><h3>gst_uri_is_normalized ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_is_normalized (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Tests the <em class="parameter"><code>uri</code></em>
+ to see if it is normalized. A <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> <em class="parameter"><code>uri</code></em>
+ is considered to be
+normalized.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.17.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to test to see if it is normalized.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.17.6"></a><h4>Returns</h4>
+<p> TRUE if the URI is normalized or is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-normalize"></a><h3>gst_uri_normalize ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_normalize (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Normalization will remove extra path segments ("." and "..") from the URI. It
+will also convert the scheme and host name to lower case and any
+percent-encoded values to uppercase.</p>
+<p>The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object must be writable. Check with <a class="link" href="gstreamer-GstUri.html#gst-uri-is-writable" title="gst_uri_is_writable ()"><code class="function">gst_uri_is_writable()</code></a> or use
+<a class="link" href="gstreamer-GstUri.html#gst-uri-make-writable" title="gst_uri_make_writable ()"><code class="function">gst_uri_make_writable()</code></a> first.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.18.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to normalize. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.18.7"></a><h4>Returns</h4>
+<p> TRUE if the URI was modified.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-scheme"></a><h3>gst_uri_get_scheme ()</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_uri_get_scheme (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get the scheme name from the URI or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if it doesn't exist.
+If <em class="parameter"><code>uri</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.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>uri</p></td>
+<td class="parameter_description"><p> This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.19.6"></a><h4>Returns</h4>
+<p> The scheme from the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-scheme"></a><h3>gst_uri_set_scheme ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_scheme (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *scheme</code></em>);</pre>
+<p>Set or unset the scheme for the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.20.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>scheme</p></td>
+<td class="parameter_description"><p>The new scheme to set or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to unset the scheme.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.20.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the scheme was set/unset successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-userinfo"></a><h3>gst_uri_get_userinfo ()</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_uri_get_userinfo (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get the userinfo (usually in the form "username:password") from the URI
+or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if it doesn't exist. If <em class="parameter"><code>uri</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>uri</p></td>
+<td class="parameter_description"><p> This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.21.6"></a><h4>Returns</h4>
+<p> The userinfo from the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-userinfo"></a><h3>gst_uri_set_userinfo ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_userinfo (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *userinfo</code></em>);</pre>
+<p>Set or unset the user information for the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.22.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>userinfo</p></td>
+<td class="parameter_description"><p>The new user-information string to set or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to unset.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.22.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the user information was set/unset successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-host"></a><h3>gst_uri_get_host ()</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_uri_get_host (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get the host name from the URI or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if it doesn't exist.
+If <em class="parameter"><code>uri</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>uri</p></td>
+<td class="parameter_description"><p> This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.23.6"></a><h4>Returns</h4>
+<p> The host name from the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-host"></a><h3>gst_uri_set_host ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_host (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *host</code></em>);</pre>
+<p>Set or unset the host for the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>host</p></td>
+<td class="parameter_description"><p>The new host string to set or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to unset.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.24.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the host was set/unset successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-port"></a><h3>gst_uri_get_port ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_uri_get_port (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get the port number from the URI or <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT"><code class="literal">GST_URI_NO_PORT</code></a> if it doesn't exist.
+If <em class="parameter"><code>uri</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then returns <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT"><code class="literal">GST_URI_NO_PORT</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.25.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.25.6"></a><h4>Returns</h4>
+<p> The port number from the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object or <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT"><code class="literal">GST_URI_NO_PORT</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-port"></a><h3>gst_uri_set_port ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_port (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>,
+                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</code></em>);</pre>
+<p>Set or unset the port number for the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>port</p></td>
+<td class="parameter_description"><p>The new port number to set or <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT"><code class="literal">GST_URI_NO_PORT</code></a> to unset.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.26.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the port number was set/unset successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-path"></a><h3>gst_uri_get_path ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_uri_get_path (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Extract the path string from the URI object.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.27.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to get the path from.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.27.6"></a><h4>Returns</h4>
+<p> The path from the URI. Once finished with the
+string should be <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>'d. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-path"></a><h3>gst_uri_set_path ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_path (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *path</code></em>);</pre>
+<p>Sets or unsets the path in the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.28.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>The new path to set with path segments separated by '/', or use <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+to unset the path.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.28.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the path was set successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-path-string"></a><h3>gst_uri_get_path_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_uri_get_path_string (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Extract the path string from the URI object as a percent encoded URI path.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>uri</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to get the path from.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.29.6"></a><h4>Returns</h4>
+<p> The path from the URI. Once finished with the
+string should be <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>'d. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-path-string"></a><h3>gst_uri_set_path_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_path_string (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *path</code></em>);</pre>
+<p>Sets or unsets the path in the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.30.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path</p></td>
+<td class="parameter_description"><p>The new percent encoded path to set with path segments separated by
+'/', or use <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to unset the path.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.30.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 path was set successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-path-segments"></a><h3>gst_uri_get_path_segments ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_uri_get_path_segments (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get a list of path segments from the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to get the path from. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.31.6"></a><h4>Returns</h4>
+<p> A <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of path segment
+strings or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no path segments are available. Free the list
+when no longer needed with g_list_free_full(list, g_free). </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar*]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-path-segments"></a><h3>gst_uri_set_path_segments ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_path_segments (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>,
+                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *path_segments</code></em>);</pre>
+<p>Replace the path segments list in the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.32.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path_segments</p></td>
+<td class="parameter_description"><p> The new
+path list to set. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar*]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.32.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the path segments were set successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-append-path"></a><h3>gst_uri_append_path ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_append_path (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *relative_path</code></em>);</pre>
+<p>Append a path onto the end of the path in the URI. The path is not
+normalized, call <a class="link" href="gstreamer-GstUri.html#gst-uri-normalize" title="gst_uri_normalize ()"><code class="function">gst_uri_normalize()</code></a> to normalize the path.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.33.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>relative_path</p></td>
+<td class="parameter_description"><p>Relative path to append to the end of the current path.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.33.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 path was appended successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-append-path-segment"></a><h3>gst_uri_append_path_segment ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_append_path_segment (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *path_segment</code></em>);</pre>
+<p>Append a single path segment onto the end of the URI path.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.34.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>path_segment</p></td>
+<td class="parameter_description"><p>The path segment string to append to the URI path.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.34.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the path was appended successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-query-string"></a><h3>gst_uri_get_query_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_uri_get_query_string (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get a percent encoded URI query string from the <em class="parameter"><code>uri</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.35.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to get the query string from. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.35.6"></a><h4>Returns</h4>
+<p> A percent encoded query string. Use <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</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>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-query-string"></a><h3>gst_uri_set_query_string ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_query_string (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *query</code></em>);</pre>
+<p>Sets or unsets the query table in the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.36.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query</p></td>
+<td class="parameter_description"><p>The new percent encoded query string to use to populate the query
+table, or use <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to unset the query table.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.36.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the query table was set successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-query-table"></a><h3>gst_uri_get_query_table ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> *
+gst_uri_get_query_table (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get the query table from the URI. Keys and values in the table are freed
+with g_free when they are deleted. A value may be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to indicate that
+the key should appear in the query string in the URI, but does not have a
+value. Free the returned <a href="https://developer.gnome.org/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> with <a href="https://developer.gnome.org/glib/unstable/glib-Hash-Tables.html#g-hash-table-unref"><code class="function"><GTKDOCLINK HREF="g-hash-table-unref"><code class="function">g_hash_table_unref()</code></a></code></GTKDOCLINK> when it is
+no longer required. Modifying this hash table will modify the query in the
+URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.37.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to get the query table from. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.37.6"></a><h4>Returns</h4>
+<p> The query hash table
+from the URI. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar* gchar*]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-query-table"></a><h3>gst_uri_set_query_table ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_query_table (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>,
+                         <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> *query_table</code></em>);</pre>
+<p>Set the query table to use in the URI. The old table is unreferenced and a
+reference to the new one is used instead. A value if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for <em class="parameter"><code>query_table</code></em>
+
+will remove the query string from the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.38.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query_table</p></td>
+<td class="parameter_description"><p> The new
+query table to use. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar* gchar*]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.38.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the new table was sucessfully used for the query table.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-query-value"></a><h3>gst_uri_get_query_value ()</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_uri_get_query_value (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *query_key</code></em>);</pre>
+<p>Get the value associated with the <em class="parameter"><code>query_key</code></em>
+ key. Will return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
+key has no value or if the key does not exist in the URI query table. Because
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned for both missing keys and keys with no value, you should
+use <a class="link" href="gstreamer-GstUri.html#gst-uri-query-has-key" title="gst_uri_query_has_key ()"><code class="function">gst_uri_query_has_key()</code></a> to determine if a key is present in the URI
+query.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.39.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to examine. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query_key</p></td>
+<td class="parameter_description"><p>The key to lookup.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.39.6"></a><h4>Returns</h4>
+<p> The value for the given key, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not found.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-query-value"></a><h3>gst_uri_set_query_value ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_query_value (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *query_key</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> *query_value</code></em>);</pre>
+<p>This inserts or replaces a key in the query table. A <em class="parameter"><code>query_value</code></em>
+ of <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+indicates that the key has no associated value, but will still be present in
+the query string.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.40.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query_key</p></td>
+<td class="parameter_description"><p> The key for the query entry. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query_value</p></td>
+<td class="parameter_description"><p> The value for the key. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.40.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the query table was sucessfully updated.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-remove-query-key"></a><h3>gst_uri_remove_query_key ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_remove_query_key (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *query_key</code></em>);</pre>
+<p>Remove an entry from the query table by key.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.41.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query_key</p></td>
+<td class="parameter_description"><p>The key to remove.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.41.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the key existed in the table and was removed.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-query-has-key"></a><h3>gst_uri_query_has_key ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_query_has_key (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *query_key</code></em>);</pre>
+<p>Check if there is a query table entry for the <em class="parameter"><code>query_key</code></em>
+ key.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.42.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to examine. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>query_key</p></td>
+<td class="parameter_description"><p>The key to lookup.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.42.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>query_key</code></em>
+exists in the URI query table.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-query-keys"></a><h3>gst_uri_get_query_keys ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_uri_get_query_keys (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get a list of the query keys from the URI.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.43.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to examine. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.43.6"></a><h4>Returns</h4>
+<p> A list of keys from
+the URI query. Free the list with <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-free"><code class="function">g_list_free()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar*]</span></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-get-fragment"></a><h3>gst_uri_get_fragment ()</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_uri_get_fragment (<em class="parameter"><code>const <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</code></em>);</pre>
+<p>Get the fragment name from the URI or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if it doesn't exist.
+If <em class="parameter"><code>uri</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.44.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>uri</p></td>
+<td class="parameter_description"><p> This <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.44.6"></a><h4>Returns</h4>
+<p> The host name from the <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> object or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-uri-set-fragment"></a><h3>gst_uri_set_fragment ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_uri_set_fragment (<em class="parameter"><code><a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> *uri</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> *fragment</code></em>);</pre>
+<p>Sets the fragment string in the URI. Use a value of <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in <em class="parameter"><code>fragment</code></em>
+ to
+unset the fragment string.</p>
+<div class="refsect3">
+<a name="id-1.3.55.7.45.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>uri</p></td>
+<td class="parameter_description"><p> The <a class="link" href="gstreamer-GstUri.html#GstUri" title="GstUri"><span class="type">GstUri</span></a> to modify. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fragment</p></td>
+<td class="parameter_description"><p> The fragment string to set. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.3.55.7.45.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the fragment was set/unset successfully.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstUri.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstUri"></a><h3>GstUri</h3>
+<pre class="programlisting">typedef struct _GstUri GstUri;</pre>
+<p>This is a private structure that holds the various parts of a parsed URI.</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.21</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/gst/html/gstreamer-GstUriHandler.html b/docs/gst/html/gstreamer-GstUriHandler.html
index 3db0572..fd5dad9 100644
--- a/docs/gst/html/gstreamer-GstUriHandler.html
+++ b/docs/gst/html/gstreamer-GstUriHandler.html
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
 <link rel="up" href="libgstreamer.html" title="GStreamer Core Library">
-<link rel="prev" href="GstTypeFindFactory.html" title="GstTypeFindFactory">
+<link rel="prev" href="gstreamer-GstUri.html" title="GstUri">
 <link rel="next" href="gstreamer-GstUtils.html" title="GstUtils">
 <meta name="generator" content="GTK-Doc V1.21 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -20,7 +20,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="libgstreamer.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstTypeFindFactory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gstreamer-GstUri.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gstreamer-GstUtils.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -184,6 +184,10 @@
 <td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" href="gstreamer-GstUriHandler.html#GstURIError" title="enum GstURIError">GstURIError</a></td>
 </tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS" title="GST_URI_NO_PORT">GST_URI_NO_PORT</a></td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -221,7 +225,7 @@
 </pre>
 <p>Tests if the type direction is valid.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.3.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -245,7 +249,7 @@
 must consist of alphanumeric characters, '+', '-' and '.' and must
 start with a alphabetic character. See RFC 3986 Section 3.1.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.4.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -260,7 +264,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.4.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.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> if the string is a valid protocol identifier, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -275,7 +279,7 @@
 that a positive return value does not imply that a subsequent call to
 <a class="link" href="gstreamer-GstUriHandler.html#gst-element-make-from-uri" title="gst_element_make_from_uri ()"><code class="function">gst_element_make_from_uri()</code></a> is guaranteed to work.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.5.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -297,7 +301,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.5.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.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></p>
 <p></p>
 </div>
@@ -310,7 +314,7 @@
 <p>Tests if the given string is a valid URI identifier. URIs start with a valid
 scheme followed by ":" and maybe a string identifying the location.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.6.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -325,7 +329,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.6.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.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> if the string is a valid URI</p>
 <p></p>
 </div>
@@ -339,7 +343,7 @@
 <p>Checks if the protocol of a given valid URI matches <em class="parameter"><code>protocol</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.7.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -361,7 +365,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.7.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.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> if the protocol matches.</p>
 <p></p>
 </div>
@@ -374,7 +378,7 @@
 <p>Extracts the protocol out of a given valid URI. The returned string must be
 freed using <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.8.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -389,7 +393,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.8.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.9.8.6"></a><h4>Returns</h4>
 <p> The protocol for this URI.</p>
 <p></p>
 </div>
@@ -405,7 +409,7 @@
 <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>.</p>
 <p>Free-function: g_free</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.9.6"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.9.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -420,7 +424,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.9.7"></a><h4>Returns</h4>
+<a name="id-1.3.56.9.9.7"></a><h4>Returns</h4>
 <p> the location for this URI. Returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
 URI isn't valid. If the URI does not contain a location, an empty
 string is returned. </p>
@@ -436,7 +440,7 @@
 <p>Constructs a URI for a given valid protocol and location.</p>
 <p>Free-function: g_free</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.10.6"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.10.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -458,7 +462,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.10.7"></a><h4>Returns</h4>
+<a name="id-1.3.56.9.10.7"></a><h4>Returns</h4>
 <p> a new string for this URI. Returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
 given URI protocol is not valid, or the given location is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -477,7 +481,7 @@
 will be canonicalised so that it doesn't contain any './' or '../' segments.</p>
 <p>On Windows <span class="type">filename</span> should be in UTF-8 encoding.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.11.6"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.11.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -509,7 +513,7 @@
                            <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
 <p>Creates an element for handling the given URI.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.12.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -541,7 +545,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.12.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.9.12.6"></a><h4>Returns</h4>
 <p> a new element or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none could be created. </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>
@@ -553,7 +557,7 @@
 gst_uri_handler_get_uri_type (<em class="parameter"><code><a class="link" href="gstreamer-GstUriHandler.html#GstURIHandler"><span class="type">GstURIHandler</span></a> *handler</code></em>);</pre>
 <p>Gets the type of the given URI handler</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.13.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -568,7 +572,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.13.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.9.13.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gstreamer-GstUriHandler.html#GstURIType" title="enum GstURIType"><span class="type">GstURIType</span></a> of the URI handler.
 Returns <a class="link" href="gstreamer-GstUriHandler.html#GST-URI-UNKNOWN:CAPS"><span class="type">GST_URI_UNKNOWN</span></a> if the <em class="parameter"><code>handler</code></em>
 isn't implemented correctly.</p>
@@ -584,7 +588,7 @@
 . This list may not be
 modified.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.14.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -599,7 +603,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.14.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.9.14.6"></a><h4>Returns</h4>
 <p> the
 supported protocols.  Returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the <em class="parameter"><code>handler</code></em>
 isn't
@@ -616,7 +620,7 @@
 gst_uri_handler_get_uri (<em class="parameter"><code><a class="link" href="gstreamer-GstUriHandler.html#GstURIHandler"><span class="type">GstURIHandler</span></a> *handler</code></em>);</pre>
 <p>Gets the currently handled URI.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.15.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -631,7 +635,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.15.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.9.15.6"></a><h4>Returns</h4>
 <p> the URI currently handled by
 the <em class="parameter"><code>handler</code></em>
 .  Returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there are no URI currently
@@ -649,7 +653,7 @@
                          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
 <p>Tries to set the URI of the given handler.</p>
 <div class="refsect3">
-<a name="id-1.3.55.9.16.5"></a><h4>Parameters</h4>
+<a name="id-1.3.56.9.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -677,7 +681,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.55.9.16.6"></a><h4>Returns</h4>
+<a name="id-1.3.56.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 URI was set successfully, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
 <p></p>
 </div>
@@ -710,7 +714,7 @@
 </pre>
 <p>Any <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> using this interface should implement these methods.</p>
 <div class="refsect3">
-<a name="id-1.3.55.10.3.5"></a><h4>Members</h4>
+<a name="id-1.3.56.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -752,7 +756,7 @@
 <a name="GstURIType"></a><h3>enum GstURIType</h3>
 <p>The different types of URI direction.</p>
 <div class="refsect3">
-<a name="id-1.3.55.10.4.4"></a><h4>Members</h4>
+<a name="id-1.3.56.10.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -790,7 +794,7 @@
 <a name="GstURIError"></a><h3>enum GstURIError</h3>
 <p>Different URI-related errors that can occur.</p>
 <div class="refsect3">
-<a name="id-1.3.55.10.5.4"></a><h4>Members</h4>
+<a name="id-1.3.56.10.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -832,6 +836,13 @@
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GST-URI-NO-PORT:CAPS"></a><h3>GST_URI_NO_PORT</h3>
+<pre class="programlisting">#define GST_URI_NO_PORT 0
+</pre>
+<p>Value for <span class="type">GstUri.port</span> to indicate no port number.</p>
+</div>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/gst/html/gstreamer-GstUtils.html b/docs/gst/html/gstreamer-GstUtils.html
index a0bb9d2..3346f79 100644
--- a/docs/gst/html/gstreamer-GstUtils.html
+++ b/docs/gst/html/gstreamer-GstUtils.html
@@ -597,7 +597,7 @@
 this macro is not to be used with things that return something, use
 the _WITH_DEFAULT version for that</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.2.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -632,7 +632,7 @@
 evaluates to <em class="parameter"><code>def_return</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.3.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -671,7 +671,7 @@
 </pre>
 <p>Read an 8 bit unsigned integer value from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.4.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -693,7 +693,7 @@
 </pre>
 <p>Read a 16 bit unsigned integer value in little endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.5.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -715,7 +715,7 @@
 </pre>
 <p>Read a 16 bit unsigned integer value in big endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -737,7 +737,7 @@
 </pre>
 <p>Read a 24 bit unsigned integer value in little endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.7.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -759,7 +759,7 @@
 </pre>
 <p>Read a 24 bit unsigned integer value in big endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.8.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -781,7 +781,7 @@
 </pre>
 <p>Read a 32 bit unsigned integer value in little endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.9.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -803,7 +803,7 @@
 </pre>
 <p>Read a 32 bit unsigned integer value in big endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.10.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -825,7 +825,7 @@
 </pre>
 <p>Read a 64 bit unsigned integer value in little endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.11.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -847,7 +847,7 @@
 </pre>
 <p>Read a 64 bit unsigned integer value in big endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.12.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -869,7 +869,7 @@
 GST_READ_FLOAT_LE (<em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>);</pre>
 <p>Read a 32 bit float value in little endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.13.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -884,7 +884,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.13.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.13.6"></a><h4>Returns</h4>
 <p> The floating point value read from <em class="parameter"><code>data</code></em>
 </p>
 <p></p>
@@ -897,7 +897,7 @@
 GST_READ_FLOAT_BE (<em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>);</pre>
 <p>Read a 32 bit float value in big endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.14.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -912,7 +912,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.14.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.14.6"></a><h4>Returns</h4>
 <p> The floating point value read from <em class="parameter"><code>data</code></em>
 </p>
 <p></p>
@@ -925,7 +925,7 @@
 GST_READ_DOUBLE_LE (<em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>);</pre>
 <p>Read a 64 bit double value in little endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.15.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -940,7 +940,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.15.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.15.6"></a><h4>Returns</h4>
 <p> The double-precision floating point value read from <em class="parameter"><code>data</code></em>
 </p>
 <p></p>
@@ -953,7 +953,7 @@
 GST_READ_DOUBLE_BE (<em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>);</pre>
 <p>Read a 64 bit double value in big endian format from the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.16.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -968,7 +968,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.16.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.16.6"></a><h4>Returns</h4>
 <p> The double-precision floating point value read from <em class="parameter"><code>data</code></em>
 </p>
 <p></p>
@@ -980,7 +980,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT8(data, num)</pre>
 <p>Store an 8 bit unsigned integer value into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.17.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1008,7 +1008,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT16_LE(data, num)</pre>
 <p>Store a 16 bit unsigned integer value in little endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.18.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1036,7 +1036,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT16_BE(data, num)</pre>
 <p>Store a 16 bit unsigned integer value in big endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.19.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1064,7 +1064,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT24_LE(data, num)</pre>
 <p>Store a 24 bit unsigned integer value in little endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1092,7 +1092,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT24_BE(data, num)</pre>
 <p>Store a 24 bit unsigned integer value in big endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.21.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1120,7 +1120,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT32_LE(data, num)</pre>
 <p>Store a 32 bit unsigned integer value in little endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.22.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1148,7 +1148,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT32_BE(data, num)</pre>
 <p>Store a 32 bit unsigned integer value in big endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1176,7 +1176,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT64_LE(data, num)</pre>
 <p>Store a 64 bit unsigned integer value in little endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.24.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1204,7 +1204,7 @@
 <pre class="programlisting">#define             GST_WRITE_UINT64_BE(data, num)</pre>
 <p>Store a 64 bit unsigned integer value in big endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1234,7 +1234,7 @@
                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> num</code></em>);</pre>
 <p>Store a 32 bit float value in little endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.26.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.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 @@
                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> num</code></em>);</pre>
 <p>Store a 32 bit float value in big endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.27.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1294,7 +1294,7 @@
                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> num</code></em>);</pre>
 <p>Store a 64 bit double value in little endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.28.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1324,7 +1324,7 @@
                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> num</code></em>);</pre>
 <p>Store a 64 bit double value in big endian format into the memory buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.29.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.29.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>
 <p>Rounds an integer value up to the next multiple of 2.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.30.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1375,7 +1375,7 @@
 </pre>
 <p>Rounds an integer value up to the next multiple of 4.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.31.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1397,7 +1397,7 @@
 </pre>
 <p>Rounds an integer value up to the next multiple of 8.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.32.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1419,7 +1419,7 @@
 </pre>
 <p>Rounds an integer value up to the next multiple of 16.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.33.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1441,7 +1441,7 @@
 </pre>
 <p>Rounds an integer value up to the next multiple of 32.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.34.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1463,7 +1463,7 @@
 </pre>
 <p>Rounds an integer value up to the next multiple of 64.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.35.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1485,7 +1485,7 @@
 </pre>
 <p>Rounds an integer value up to the next multiple of 128.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.36.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1511,7 +1511,7 @@
  MUST be a
 power of two.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.37.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1540,7 +1540,7 @@
 </pre>
 <p>Rounds an integer value down to the next multiple of 2.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.38.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1562,7 +1562,7 @@
 </pre>
 <p>Rounds an integer value down to the next multiple of 4.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.39.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.39.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1584,7 +1584,7 @@
 </pre>
 <p>Rounds an integer value down to the next multiple of 8.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.40.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.40.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1606,7 +1606,7 @@
 </pre>
 <p>Rounds an integer value down to the next multiple of 16.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.41.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.41.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1628,7 +1628,7 @@
 </pre>
 <p>Rounds an integer value down to the next multiple of 32.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.42.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1650,7 +1650,7 @@
 </pre>
 <p>Rounds an integer value down to the next multiple of 64.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.43.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1672,7 +1672,7 @@
 </pre>
 <p>Rounds an integer value down to the next multiple of 128.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.44.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.44.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1698,7 +1698,7 @@
  MUST be a
 power of two.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.45.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1728,7 +1728,7 @@
 <p>Convert 64-bit floating point value (double) from big endian byte order
 into native byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.46.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1751,7 +1751,7 @@
 <p>Convert 64-bit floating point value (double) from little endian byte order
 into native byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.47.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1773,7 +1773,7 @@
 GDOUBLE_SWAP_LE_BE (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> in</code></em>);</pre>
 <p>Swap byte order of a 64-bit floating point value (double).</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.48.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1788,7 +1788,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.48.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.48.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>in</code></em>
 byte-swapped.</p>
 <p></p>
@@ -1802,7 +1802,7 @@
 <p>Convert 64-bit floating point value (double) from native byte order into
 big endian byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.49.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1825,7 +1825,7 @@
 <p>Convert 64-bit floating point value (double) from native byte order into
 little endian byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.50.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.50.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1848,7 +1848,7 @@
 <p>Convert 32-bit floating point value (float) from big endian byte order
 into native byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.51.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.51.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1871,7 +1871,7 @@
 <p>Convert 32-bit floating point value (float) from little endian byte order
 into native byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.52.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.52.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1893,7 +1893,7 @@
 GFLOAT_SWAP_LE_BE (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> in</code></em>);</pre>
 <p>Swap byte order of a 32-bit floating point value (float).</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.53.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.53.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1908,7 +1908,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.53.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.53.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>in</code></em>
 byte-swapped.</p>
 <p></p>
@@ -1922,7 +1922,7 @@
 <p>Convert 32-bit floating point value (float) from native byte order into
 big endian byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.54.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.54.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1945,7 +1945,7 @@
 <p>Convert 32-bit floating point value (float) from native byte order into
 little endian byte order.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.55.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.55.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1968,7 +1968,7 @@
 <p>Convert <em class="parameter"><code>value</code></em>
  to a gdouble.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.56.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.56.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1983,7 +1983,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.56.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.56.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>value</code></em>
 converted to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>.</p>
 <p></p>
@@ -1997,7 +1997,7 @@
 <p>Convert <em class="parameter"><code>value</code></em>
  to a guint64.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.57.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.57.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2012,7 +2012,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.57.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.57.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>value</code></em>
 converted to a <span class="type">guint64</span>.</p>
 <p></p>
@@ -2026,7 +2026,7 @@
                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
 <p>Dumps the memory block into a hex representation. Useful for debugging.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.58.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.58.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2063,7 +2063,7 @@
 <p>This function can potentially be very slow if val and num are both
 greater than G_MAXUINT32.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.59.6"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.59.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2090,7 +2090,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.59.7"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.59.7"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>val</code></em>
 * <em class="parameter"><code>num</code></em>
 / <em class="parameter"><code>denom</code></em>
@@ -2118,7 +2118,7 @@
 <p>This function can potentially be very slow if val and num are both
 greater than G_MAXUINT32.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.60.6"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.60.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2145,7 +2145,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.60.7"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.60.7"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>val</code></em>
 * <em class="parameter"><code>num</code></em>
 / <em class="parameter"><code>denom</code></em>
@@ -2173,7 +2173,7 @@
 <p>This function can potentially be very slow if val and num are both
 greater than G_MAXUINT32.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.61.6"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.61.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2200,7 +2200,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.61.7"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.61.7"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>val</code></em>
 * <em class="parameter"><code>num</code></em>
 / <em class="parameter"><code>denom</code></em>
@@ -2229,7 +2229,7 @@
 <em class="parameter"><code>denom</code></em>
  must be positive.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.62.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.62.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2256,7 +2256,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.62.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.62.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>val</code></em>
 * <em class="parameter"><code>num</code></em>
 / <em class="parameter"><code>denom</code></em>
@@ -2285,7 +2285,7 @@
 <em class="parameter"><code>denom</code></em>
  must be positive.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.63.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.63.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2312,7 +2312,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.63.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.63.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>val</code></em>
 * <em class="parameter"><code>num</code></em>
 / <em class="parameter"><code>denom</code></em>
@@ -2341,7 +2341,7 @@
 <em class="parameter"><code>denom</code></em>
  must be positive.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.64.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.64.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2368,7 +2368,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.64.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.64.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>val</code></em>
 * <em class="parameter"><code>num</code></em>
 / <em class="parameter"><code>denom</code></em>
@@ -2392,7 +2392,7 @@
 and <em class="parameter"><code>b</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.65.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.65.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2414,7 +2414,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.65.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.65.6"></a><h4>Returns</h4>
 <p> Greatest common divisor of <em class="parameter"><code>a</code></em>
 and <em class="parameter"><code>b</code></em>
 </p>
@@ -2433,7 +2433,7 @@
 and <em class="parameter"><code>b</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.66.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.66.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2455,7 +2455,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.66.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.66.6"></a><h4>Returns</h4>
 <p> Greatest common divisor of <em class="parameter"><code>a</code></em>
 and <em class="parameter"><code>b</code></em>
 </p>
@@ -2471,7 +2471,7 @@
                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *dest</code></em>);</pre>
 <p>Transforms a fraction to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.67.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.67.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2508,7 +2508,7 @@
 <p>Transforms a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to a fraction and simplifies
 the result.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.68.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.68.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2554,7 +2554,7 @@
  and <em class="parameter"><code>res_d</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.69.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.69.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2596,7 +2596,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.69.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.69.6"></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> on overflow, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -2620,7 +2620,7 @@
  and <em class="parameter"><code>res_d</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.70.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.70.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2662,7 +2662,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.70.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.70.6"></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> on overflow, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -2682,7 +2682,7 @@
  and returns
 -1 if a &lt; b, 0 if a = b and 1 if a &gt; b.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.71.5"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.71.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2714,7 +2714,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.71.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.71.6"></a><h4>Returns</h4>
 <p> -1 if a &lt; b; 0 if a = b; 1 if a &gt; b.</p>
 <p></p>
 </div>
@@ -2730,7 +2730,7 @@
 on a segment-done message to be the same as that of the last seek event, to
 indicate that event and the message correspond to the same segment.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.72.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.72.6"></a><h4>Returns</h4>
 <p> A constantly incrementing 32-bit unsigned integer, which might
 overflow back to 0 at some point. Use <a class="link" href="gstreamer-GstUtils.html#gst-util-seqnum-compare" title="gst_util_seqnum_compare ()"><code class="function">gst_util_seqnum_compare()</code></a> to make sure
 you handle wraparound correctly.</p>
@@ -2748,7 +2748,7 @@
  - <em class="parameter"><code>s2</code></em>
 ).</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.73.6"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.73.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2770,7 +2770,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.73.7"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.73.7"></a><h4>Returns</h4>
 <p> A negative number if <em class="parameter"><code>s1</code></em>
 is before <em class="parameter"><code>s2</code></em>
 , 0 if they are equal, or a
@@ -2789,7 +2789,7 @@
 <p>This function is used to generate a new group-id for the
 stream-start event.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.74.6"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.74.6"></a><h4>Returns</h4>
 <p> A constantly incrementing unsigned integer, which might
 overflow back to 0 at some point.</p>
 <p></p>
@@ -2810,7 +2810,7 @@
  or when <em class="parameter"><code>value</code></em>
  cannot be converted to the type of the property.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.75.6"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.75.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2848,7 +2848,7 @@
 <p>Note that this function is dangerous as it does not return any indication
 if the conversion worked or not.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.76.6"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.76.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2878,7 +2878,7 @@
 <p>Get a timestamp as GstClockTime to be used for interval measurements.
 The timestamp should not be interpreted in any other way.</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.77.5"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.77.5"></a><h4>Returns</h4>
 <p> the timestamp</p>
 <p></p>
 </div>
@@ -2907,7 +2907,7 @@
  has the same type as the array elements.</p>
 <p>The complexity of this search function is O(log (num_elements)).</p>
 <div class="refsect3">
-<a name="id-1.3.56.7.78.7"></a><h4>Parameters</h4>
+<a name="id-1.3.57.7.78.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2956,7 +2956,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.56.7.78.8"></a><h4>Returns</h4>
+<a name="id-1.3.57.7.78.8"></a><h4>Returns</h4>
 <p> The address of the found
 element or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if nothing was found. </p>
 <p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
@@ -2969,7 +2969,7 @@
 <a name="GstSearchMode"></a><h3>enum GstSearchMode</h3>
 <p>The different search modes.</p>
 <div class="refsect3">
-<a name="id-1.3.56.8.2.4"></a><h4>Members</h4>
+<a name="id-1.3.57.8.2.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/gst/html/gstreamer-GstValue.html b/docs/gst/html/gstreamer-GstValue.html
index a9df496..46850e8 100644
--- a/docs/gst/html/gstreamer-GstValue.html
+++ b/docs/gst/html/gstreamer-GstValue.html
@@ -752,7 +752,7 @@
 </div>
 
 <div class="refsect3">
-<a name="id-1.3.57.7.2.6"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -805,7 +805,7 @@
 </div>
 
 <div class="refsect3">
-<a name="id-1.3.57.7.3.6"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -827,7 +827,7 @@
 <p>Can be used together with <a class="link" href="gstreamer-GstValue.html#GST-FOURCC-FORMAT:CAPS" title="GST_FOURCC_FORMAT"><span class="type">GST_FOURCC_FORMAT</span></a> to properly output a
 <span class="type">guint32</span> fourcc value in a <code class="function">printf()</code>-style text message.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.4.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -849,7 +849,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-INT-RANGE:CAPS" title="GST_TYPE_INT_RANGE"><span class="type">GST_TYPE_INT_RANGE</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.5.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -871,7 +871,7 @@
 </pre>
 <p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> type that represents an integer range</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.6.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.6.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstIntRange</p>
 <p></p>
 </div>
@@ -888,7 +888,7 @@
  and <em class="parameter"><code>end</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.7.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -923,7 +923,7 @@
 <p>Gets the minimum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.8.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.8.5"></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.3.57.7.8.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.8.6"></a><h4>Returns</h4>
 <p> the minimum of the range</p>
 <p></p>
 </div>
@@ -951,7 +951,7 @@
 <p>Gets the maximum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.9.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -966,7 +966,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.9.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.9.6"></a><h4>Returns</h4>
 <p> the maximum of the range</p>
 <p></p>
 </div>
@@ -985,7 +985,7 @@
  and <em class="parameter"><code>step</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.10.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1025,7 +1025,7 @@
 <p>Gets the step of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.11.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1040,7 +1040,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.11.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.11.6"></a><h4>Returns</h4>
 <p> the step of the range</p>
 <p></p>
 </div>
@@ -1052,7 +1052,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-BITMASK:CAPS" title="GST_TYPE_BITMASK"><span class="type">GST_TYPE_BITMASK</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.12.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1074,7 +1074,7 @@
 </pre>
 <p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> type that represents a 64-bit bitmask.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.13.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.13.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstBitmask (which is not explicitly typed)</p>
 <p></p>
 </div>
@@ -1089,7 +1089,7 @@
  to the bitmask specified by <em class="parameter"><code>bitmask</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.14.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1119,7 +1119,7 @@
 <p>Gets the bitmask specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.15.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1134,7 +1134,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.15.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.15.6"></a><h4>Returns</h4>
 <p> the bitmask.</p>
 <p></p>
 </div>
@@ -1146,7 +1146,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-INT64-RANGE:CAPS" title="GST_TYPE_INT64_RANGE"><span class="type">GST_TYPE_INT64_RANGE</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.16.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1168,7 +1168,7 @@
 </pre>
 <p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> type that represents an <span class="type">gint64</span> range</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.17.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.17.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstInt64Range</p>
 <p></p>
 </div>
@@ -1185,7 +1185,7 @@
  and <em class="parameter"><code>end</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.18.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1220,7 +1220,7 @@
 <p>Gets the minimum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.19.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.19.5"></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.3.57.7.19.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.19.6"></a><h4>Returns</h4>
 <p> the minimum of the range</p>
 <p></p>
 </div>
@@ -1248,7 +1248,7 @@
 <p>Gets the maximum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1263,7 +1263,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.20.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.20.6"></a><h4>Returns</h4>
 <p> the maximum of the range</p>
 <p></p>
 </div>
@@ -1282,7 +1282,7 @@
  and <em class="parameter"><code>step</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.21.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1322,7 +1322,7 @@
 <p>Gets the step of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.22.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1337,7 +1337,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.22.6"></a><h4>Returns</h4>
 <p> the step of the range</p>
 <p></p>
 </div>
@@ -1349,7 +1349,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-DOUBLE-RANGE:CAPS" title="GST_TYPE_DOUBLE_RANGE"><span class="type">GST_TYPE_DOUBLE_RANGE</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1371,7 +1371,7 @@
 </pre>
 <p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> type that represents a floating point range with double precision</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.24.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.24.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstIntRange</p>
 <p></p>
 </div>
@@ -1388,7 +1388,7 @@
  and <em class="parameter"><code>end</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1423,7 +1423,7 @@
 <p>Gets the minimum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.26.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1438,7 +1438,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.26.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.26.6"></a><h4>Returns</h4>
 <p> the minimum of the range</p>
 <p></p>
 </div>
@@ -1451,7 +1451,7 @@
 <p>Gets the maximum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.27.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1466,7 +1466,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.27.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.27.6"></a><h4>Returns</h4>
 <p> the maximum of the range</p>
 <p></p>
 </div>
@@ -1478,7 +1478,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-LIST:CAPS" title="GST_TYPE_LIST"><span class="type">GST_TYPE_LIST</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.28.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1504,7 +1504,7 @@
 will be chosen in the end. This means that all values in the list are
 meaningful on their own.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.29.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.29.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstValueList (which is not explicitly typed)</p>
 <p></p>
 </div>
@@ -1516,7 +1516,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-ARRAY:CAPS" title="GST_TYPE_ARRAY"><span class="type">GST_TYPE_ARRAY</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.30.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1543,7 +1543,7 @@
 used for example to express channel layouts for multichannel audio where
 each channel needs to be mapped to a position in the room.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.31.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.31.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstArrayList (which is not explicitly typed)</p>
 <p></p>
 </div>
@@ -1558,7 +1558,7 @@
  to the GstValueList in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.32.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1590,7 +1590,7 @@
  to the GstValueList in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.33.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1623,7 +1623,7 @@
  to the GstValueList in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.34.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1659,7 +1659,7 @@
 <em class="parameter"><code>dest</code></em>
  will be initialized to the type <a class="link" href="gstreamer-GstValue.html#GST-TYPE-LIST:CAPS" title="GST_TYPE_LIST"><span class="type">GST_TYPE_LIST</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.35.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1704,7 +1704,7 @@
 
 were equal).</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.36.6"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.36.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1739,7 +1739,7 @@
 <p>Gets the number of values contained in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.37.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1754,7 +1754,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.37.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.37.6"></a><h4>Returns</h4>
 <p> the number of values</p>
 <p></p>
 </div>
@@ -1770,7 +1770,7 @@
 has the index <em class="parameter"><code>index</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.38.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1792,7 +1792,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.38.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.38.6"></a><h4>Returns</h4>
 <p> the value at the given index. </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>
@@ -1804,7 +1804,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-FRACTION:CAPS" title="GST_TYPE_FRACTION"><span class="type">GST_TYPE_FRACTION</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.39.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.39.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1827,7 +1827,7 @@
 <p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> type that represents a fraction of an integer numerator over
 an integer denominator</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.40.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.40.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstFraction (which is not explicitly typed)</p>
 <p></p>
 </div>
@@ -1846,7 +1846,7 @@
 The fraction gets reduced to the smallest numerator and denominator,
 and if necessary the sign is moved to the numerator.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.41.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.41.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1881,7 +1881,7 @@
 <p>Gets the numerator of the fraction specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.42.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1896,7 +1896,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.42.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.42.6"></a><h4>Returns</h4>
 <p> the numerator of the fraction.</p>
 <p></p>
 </div>
@@ -1909,7 +1909,7 @@
 <p>Gets the denominator of the fraction specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.43.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1924,7 +1924,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.43.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.43.6"></a><h4>Returns</h4>
 <p> the denominator of the fraction.</p>
 <p></p>
 </div>
@@ -1940,7 +1940,7 @@
 <em class="parameter"><code>product</code></em>
  to the product of the two fractions.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.44.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.44.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1967,7 +1967,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.44.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.44.6"></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> in case of an error (like integer overflow), <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -1984,7 +1984,7 @@
  and sets <em class="parameter"><code>dest</code></em>
  to the result.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.45.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2011,7 +2011,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.45.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.45.6"></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> in case of an error (like integer overflow), <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -2023,7 +2023,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="gstreamer-GstValue.html#GST-TYPE-FRACTION-RANGE:CAPS" title="GST_TYPE_FRACTION_RANGE"><span class="type">GST_TYPE_FRACTION_RANGE</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.46.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2045,7 +2045,7 @@
 </pre>
 <p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> type that represents a GstFraction range</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.47.5"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.47.5"></a><h4>Returns</h4>
 <p> the <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of GstFractionRange</p>
 <p></p>
 </div>
@@ -2062,7 +2062,7 @@
  and <em class="parameter"><code>end</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.48.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2097,7 +2097,7 @@
 <p>Gets the minimum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.49.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2112,7 +2112,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.49.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.49.6"></a><h4>Returns</h4>
 <p> the minimum of the range</p>
 <p></p>
 </div>
@@ -2125,7 +2125,7 @@
 <p>Gets the maximum of the range specified by <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.50.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.50.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2140,7 +2140,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.50.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.50.6"></a><h4>Returns</h4>
 <p> the maximum of the range</p>
 <p></p>
 </div>
@@ -2162,7 +2162,7 @@
 /<em class="parameter"><code>denominator_end</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.51.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.51.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2206,7 +2206,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <a class="link" href="GstDateTime.html#GST-TYPE-DATE-TIME:CAPS" title="GST_TYPE_DATE_TIME"><span class="type">GST_TYPE_DATE_TIME</span></a> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.52.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.52.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2228,7 +2228,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <span class="type">GST_TYPE_CAPS</span> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.53.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.53.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2256,7 +2256,7 @@
  will be taken by the <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.54.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.54.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2289,7 +2289,7 @@
 before getting rid of the <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.55.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.55.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2304,7 +2304,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.55.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.55.6"></a><h4>Returns</h4>
 <p> the contents of <em class="parameter"><code>value</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>
@@ -2317,7 +2317,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <span class="type">GST_TYPE_CAPS_FEATURES</span> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.56.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.56.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2342,7 +2342,7 @@
  to <em class="parameter"><code>features</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.57.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.57.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2372,7 +2372,7 @@
 <p>Gets the contents of <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.58.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.58.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2387,7 +2387,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.58.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.58.6"></a><h4>Returns</h4>
 <p> the contents of <em class="parameter"><code>value</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>
@@ -2400,7 +2400,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <span class="type">GST_TYPE_STRUCTURE</span> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.59.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.59.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2425,7 +2425,7 @@
  to <em class="parameter"><code>structure</code></em>
 .  The actual</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.60.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.60.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2455,7 +2455,7 @@
 <p>Gets the contents of <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.61.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.61.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2470,7 +2470,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.61.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.61.6"></a><h4>Returns</h4>
 <p> the contents of <em class="parameter"><code>value</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>
@@ -2483,7 +2483,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <span class="type">GST_TYPE_BUFFER</span> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.62.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.62.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2509,7 +2509,7 @@
 a reference to <em class="parameter"><code>v</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.63.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.63.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2524,7 +2524,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.63.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.63.6"></a><h4>Returns</h4>
 <p> buffer. </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>
@@ -2538,7 +2538,7 @@
  as the value of <em class="parameter"><code>v</code></em>
 .  Caller retains reference to buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.64.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.64.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2569,7 +2569,7 @@
  as the value of <em class="parameter"><code>v</code></em>
 .  Caller gives away reference to buffer.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.65.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.65.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2598,7 +2598,7 @@
 </pre>
 <p>Checks if the given <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> contains a <span class="type">GST_TYPE_SAMPLE</span> value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.66.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.66.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2624,7 +2624,7 @@
 a reference to <em class="parameter"><code>v</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.67.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.67.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2639,7 +2639,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.67.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.67.6"></a><h4>Returns</h4>
 <p> sample. </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>
@@ -2653,7 +2653,7 @@
  as the value of <em class="parameter"><code>v</code></em>
 .  Caller retains reference to sample.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.68.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.68.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2684,7 +2684,7 @@
  as the value of <em class="parameter"><code>v</code></em>
 .  Caller gives away reference to sample.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.69.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.69.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2722,7 +2722,7 @@
                         <em class="parameter"><code>const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value2</code></em>);</pre>
 <p>Used together with <a class="link" href="gstreamer-GstValue.html#gst-value-compare" title="gst_value_compare ()"><code class="function">gst_value_compare()</code></a> to compare <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> items.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.71.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.71.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2744,7 +2744,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.71.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.71.6"></a><h4>Returns</h4>
 <p> one of GST_VALUE_LESS_THAN, GST_VALUE_EQUAL, GST_VALUE_GREATER_THAN
 or GST_VALUE_UNORDERED</p>
 <p></p>
@@ -2758,7 +2758,7 @@
 <p>Used by <a class="link" href="gstreamer-GstValue.html#gst-value-serialize" title="gst_value_serialize ()"><code class="function">gst_value_serialize()</code></a> to obtain a non-binary form of the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>.</p>
 <p>Free-function: g_free</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.72.6"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.72.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2773,7 +2773,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.72.7"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.72.7"></a><h4>Returns</h4>
 <p> the string representation of the value. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -2786,7 +2786,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> *s</code></em>);</pre>
 <p>Used by <a class="link" href="gstreamer-GstValue.html#gst-value-deserialize" title="gst_value_deserialize ()"><code class="function">gst_value_deserialize()</code></a> to parse a non-binary form into the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.73.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.73.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2808,7 +2808,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.73.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.73.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> for success</p>
 <p></p>
 </div>
@@ -2823,7 +2823,7 @@
 (which means: multiple possible values, such as data lists or data
 ranges) value.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.74.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.74.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2838,7 +2838,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.74.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.74.6"></a><h4>Returns</h4>
 <p> true if the value is "fixed".</p>
 <p></p>
 </div>
@@ -2851,7 +2851,7 @@
 <p>Registers functions to perform calculations on <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> items of a given
 type. Each type can only be added once.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.75.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.75.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2875,7 +2875,7 @@
 <p>Initialises the target value to be of the same type as source and then copies
 the contents from source to target.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.76.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.76.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2907,7 +2907,7 @@
 getting back this string later on using <a class="link" href="gstreamer-GstValue.html#gst-value-deserialize" title="gst_value_deserialize ()"><code class="function">gst_value_deserialize()</code></a>.</p>
 <p>Free-function: g_free</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.77.6"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.77.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2922,7 +2922,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.77.7"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.77.7"></a><h4>Returns</h4>
 <p> the serialization for <em class="parameter"><code>value</code></em>
 or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none exists. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
@@ -2937,7 +2937,7 @@
 <p>Tries to deserialize a string into the type specified by the given GValue.
 If the operation succeeds, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> is returned, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.78.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.78.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2960,7 +2960,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.78.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.78.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> on success</p>
 <p></p>
 </div>
@@ -2985,7 +2985,7 @@
 , GST_VALUE_LESS_THAN is returned.
 If the values are equal, GST_VALUE_EQUAL is returned.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.79.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.79.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3007,7 +3007,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.79.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.79.6"></a><h4>Returns</h4>
 <p> comparison result</p>
 <p></p>
 </div>
@@ -3022,7 +3022,7 @@
  and <em class="parameter"><code>value2</code></em>
  can be compared.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.80.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.80.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3044,7 +3044,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.80.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.80.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 values can be compared</p>
 <p></p>
 </div>
@@ -3060,7 +3060,7 @@
  and <em class="parameter"><code>value2</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.81.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.81.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3087,7 +3087,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.81.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.81.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 union succeeded.</p>
 <p></p>
 </div>
@@ -3108,7 +3108,7 @@
 integer range.  If there is the possibility that two values can
 be unioned, this function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.82.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.82.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3130,7 +3130,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.82.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.82.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if there is a function allowing the two values to
 be unioned.</p>
 <p></p>
@@ -3149,7 +3149,7 @@
 .
 Note that this means subtraction as in sets, not as in mathematics.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.83.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.83.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3179,7 +3179,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.83.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.83.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 subtraction is not empty</p>
 <p></p>
 </div>
@@ -3194,7 +3194,7 @@
  from <em class="parameter"><code>minuend</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.84.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.84.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3216,7 +3216,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.84.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.84.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 a subtraction is possible</p>
 <p></p>
 </div>
@@ -3235,7 +3235,7 @@
 <em class="parameter"><code>dest</code></em>
  is not modified.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.85.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.85.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3264,7 +3264,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.85.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.85.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 intersection is non-empty</p>
 <p></p>
 </div>
@@ -3279,7 +3279,7 @@
 Two values will produce a valid intersection if they have the same
 type.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.86.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.86.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3301,7 +3301,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.86.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.86.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 values can intersect</p>
 <p></p>
 </div>
@@ -3319,7 +3319,7 @@
  is a subset of <em class="parameter"><code>value2</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.3.57.7.87.6"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.87.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3351,7 +3351,7 @@
  to the GstValueArray in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.88.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.88.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3383,7 +3383,7 @@
  to the GstValueArray in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.89.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.89.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3414,7 +3414,7 @@
 <p>Gets the number of values contained in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.90.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.90.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3429,7 +3429,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.90.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.90.6"></a><h4>Returns</h4>
 <p> the number of values</p>
 <p></p>
 </div>
@@ -3445,7 +3445,7 @@
 has the index <em class="parameter"><code>index</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.91.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.91.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3467,7 +3467,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.91.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.91.6"></a><h4>Returns</h4>
 <p> the value at the given index. </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>
@@ -3482,7 +3482,7 @@
  to the GstValueArray in <em class="parameter"><code>value</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.92.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.92.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3518,7 +3518,7 @@
 If <em class="parameter"><code>src</code></em>
  is already fixed, this function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.3.57.7.93.5"></a><h4>Parameters</h4>
+<a name="id-1.3.58.7.93.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3540,7 +3540,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.3.57.7.93.6"></a><h4>Returns</h4>
+<a name="id-1.3.58.7.93.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>dest</code></em>
 contains a fixated version of <em class="parameter"><code>src</code></em>
 .</p>
@@ -3605,7 +3605,7 @@
 <p>VTable for the <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> <em class="parameter"><code>type</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.3.57.8.6.5"></a><h4>Members</h4>
+<a name="id-1.3.58.8.6.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/gst/html/gstreamer-GstVersion.html b/docs/gst/html/gstreamer-GstVersion.html
index 499a31d..b76ca59 100644
--- a/docs/gst/html/gstreamer-GstVersion.html
+++ b/docs/gst/html/gstreamer-GstVersion.html
@@ -91,21 +91,21 @@
 <hr>
 <div class="refsect2">
 <a name="GST-VERSION-MINOR:CAPS"></a><h3>GST_VERSION_MINOR</h3>
-<pre class="programlisting">#define GST_VERSION_MINOR (4)
+<pre class="programlisting">#define GST_VERSION_MINOR (5)
 </pre>
 <p>The minor version of GStreamer at compile time:</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-VERSION-MICRO:CAPS"></a><h3>GST_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_VERSION_MICRO (5)
+<pre class="programlisting">#define GST_VERSION_MICRO (0)
 </pre>
 <p>The micro version of GStreamer at compile time:</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-VERSION-NANO:CAPS"></a><h3>GST_VERSION_NANO</h3>
-<pre class="programlisting">#define GST_VERSION_NANO (0)
+<pre class="programlisting">#define GST_VERSION_NANO (1)
 </pre>
 <p>The nano version of GStreamer at compile time:
 Actual releases have 0, GIT versions have 1, prerelease versions have 2-...</p>
@@ -117,7 +117,7 @@
 <p>Check whether a GStreamer version equal to or greater than
 major.minor.micro is present.</p>
 <div class="refsect3">
-<a name="id-1.3.58.6.6.5"></a><h4>Parameters</h4>
+<a name="id-1.3.59.6.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/gst/html/index.html b/docs/gst/html/index.html
index bdf8b18..7a0e7d5 100644
--- a/docs/gst/html/index.html
+++ b/docs/gst/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 1.0 Core Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Core 1.0 (1.4.5)
+      for GStreamer Core 1.0 (1.5.0.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/gstreamer/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/</a>.
     </p></div>
@@ -207,6 +207,9 @@
 <span class="refentrytitle"><a href="GstTypeFindFactory.html">GstTypeFindFactory</a></span><span class="refpurpose"> — Information about registered typefind functions</span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gstreamer-GstUri.html">GstUri</a></span><span class="refpurpose"> — URI parsing and manipulation.</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gstreamer-GstUriHandler.html">GstUriHandler</a></span><span class="refpurpose"> — Interface to ease URI handling in plugins.</span>
 </dt>
 <dt>
diff --git a/docs/gst/html/index.sgml b/docs/gst/html/index.sgml
index 2b1b474..aa16774 100644
--- a/docs/gst/html/index.sgml
+++ b/docs/gst/html/index.sgml
@@ -85,6 +85,7 @@
 <ANCHOR id="gst-bin-add-many" href="gstreamer-1.0/GstBin.html#gst-bin-add-many">
 <ANCHOR id="gst-bin-remove-many" href="gstreamer-1.0/GstBin.html#gst-bin-remove-many">
 <ANCHOR id="gst-bin-find-unlinked-pad" href="gstreamer-1.0/GstBin.html#gst-bin-find-unlinked-pad">
+<ANCHOR id="gst-bin-sync-children-states" href="gstreamer-1.0/GstBin.html#gst-bin-sync-children-states">
 <ANCHOR id="GST-BIN-IS-NO-RESYNC:CAPS" href="gstreamer-1.0/GstBin.html#GST-BIN-IS-NO-RESYNC:CAPS">
 <ANCHOR id="GST-BIN-CHILDREN:CAPS" href="gstreamer-1.0/GstBin.html#GST-BIN-CHILDREN:CAPS">
 <ANCHOR id="GST-BIN-CHILDREN-COOKIE:CAPS" href="gstreamer-1.0/GstBin.html#GST-BIN-CHILDREN-COOKIE:CAPS">
@@ -264,6 +265,7 @@
 <ANCHOR id="gst-bus-create-watch" href="gstreamer-1.0/GstBus.html#gst-bus-create-watch">
 <ANCHOR id="gst-bus-add-watch-full" href="gstreamer-1.0/GstBus.html#gst-bus-add-watch-full">
 <ANCHOR id="gst-bus-add-watch" href="gstreamer-1.0/GstBus.html#gst-bus-add-watch">
+<ANCHOR id="gst-bus-remove-watch" href="gstreamer-1.0/GstBus.html#gst-bus-remove-watch">
 <ANCHOR id="gst-bus-disable-sync-message-emission" href="gstreamer-1.0/GstBus.html#gst-bus-disable-sync-message-emission">
 <ANCHOR id="gst-bus-enable-sync-message-emission" href="gstreamer-1.0/GstBus.html#gst-bus-enable-sync-message-emission">
 <ANCHOR id="gst-bus-async-signal-func" href="gstreamer-1.0/GstBus.html#gst-bus-async-signal-func">
@@ -296,6 +298,9 @@
 <ANCHOR id="GST-CAPS-FLAG-IS-SET:CAPS" href="gstreamer-1.0/GstCaps.html#GST-CAPS-FLAG-IS-SET:CAPS">
 <ANCHOR id="GST-CAPS-FLAG-SET:CAPS" href="gstreamer-1.0/GstCaps.html#GST-CAPS-FLAG-SET:CAPS">
 <ANCHOR id="GST-CAPS-FLAG-UNSET:CAPS" href="gstreamer-1.0/GstCaps.html#GST-CAPS-FLAG-UNSET:CAPS">
+<ANCHOR id="GstCapsForeachFunc" href="gstreamer-1.0/GstCaps.html#GstCapsForeachFunc">
+<ANCHOR id="GstCapsMapFunc" href="gstreamer-1.0/GstCaps.html#GstCapsMapFunc">
+<ANCHOR id="GstCapsFilterMapFunc" href="gstreamer-1.0/GstCaps.html#GstCapsFilterMapFunc">
 <ANCHOR id="gst-caps-new-empty" href="gstreamer-1.0/GstCaps.html#gst-caps-new-empty">
 <ANCHOR id="gst-caps-new-empty-simple" href="gstreamer-1.0/GstCaps.html#gst-caps-new-empty-simple">
 <ANCHOR id="gst-caps-new-any" href="gstreamer-1.0/GstCaps.html#gst-caps-new-any">
@@ -322,6 +327,9 @@
 <ANCHOR id="gst-caps-set-value" href="gstreamer-1.0/GstCaps.html#gst-caps-set-value">
 <ANCHOR id="gst-caps-set-simple" href="gstreamer-1.0/GstCaps.html#gst-caps-set-simple">
 <ANCHOR id="gst-caps-set-simple-valist" href="gstreamer-1.0/GstCaps.html#gst-caps-set-simple-valist">
+<ANCHOR id="gst-caps-foreach" href="gstreamer-1.0/GstCaps.html#gst-caps-foreach">
+<ANCHOR id="gst-caps-map-in-place" href="gstreamer-1.0/GstCaps.html#gst-caps-map-in-place">
+<ANCHOR id="gst-caps-filter-and-map-in-place" href="gstreamer-1.0/GstCaps.html#gst-caps-filter-and-map-in-place">
 <ANCHOR id="gst-caps-is-any" href="gstreamer-1.0/GstCaps.html#gst-caps-is-any">
 <ANCHOR id="gst-caps-is-empty" href="gstreamer-1.0/GstCaps.html#gst-caps-is-empty">
 <ANCHOR id="gst-caps-is-fixed" href="gstreamer-1.0/GstCaps.html#gst-caps-is-fixed">
@@ -1201,6 +1209,7 @@
 <ANCHOR id="gst-object-get-name" href="gstreamer-1.0/GstObject.html#gst-object-get-name">
 <ANCHOR id="gst-object-set-parent" href="gstreamer-1.0/GstObject.html#gst-object-set-parent">
 <ANCHOR id="gst-object-get-parent" href="gstreamer-1.0/GstObject.html#gst-object-get-parent">
+<ANCHOR id="gst-object-has-parent" href="gstreamer-1.0/GstObject.html#gst-object-has-parent">
 <ANCHOR id="gst-object-unparent" href="gstreamer-1.0/GstObject.html#gst-object-unparent">
 <ANCHOR id="gst-object-default-deep-notify" href="gstreamer-1.0/GstObject.html#gst-object-default-deep-notify">
 <ANCHOR id="gst-object-default-error" href="gstreamer-1.0/GstObject.html#gst-object-default-error">
@@ -1428,6 +1437,7 @@
 <ANCHOR id="GstPad.property-details" href="gstreamer-1.0/GstPad.html#GstPad.property-details">
 <ANCHOR id="GstPad--caps" href="gstreamer-1.0/GstPad.html#GstPad--caps">
 <ANCHOR id="GstPad--direction" href="gstreamer-1.0/GstPad.html#GstPad--direction">
+<ANCHOR id="GstPad--offset" href="gstreamer-1.0/GstPad.html#GstPad--offset">
 <ANCHOR id="GstPad--template" href="gstreamer-1.0/GstPad.html#GstPad--template">
 <ANCHOR id="GstPad.signal-details" href="gstreamer-1.0/GstPad.html#GstPad.signal-details">
 <ANCHOR id="GstPad-linked" href="gstreamer-1.0/GstPad.html#GstPad-linked">
@@ -1642,6 +1652,7 @@
 <ANCHOR id="gst-preset-get-meta" href="gstreamer-1.0/GstPreset.html#gst-preset-get-meta">
 <ANCHOR id="gst-preset-set-app-dir" href="gstreamer-1.0/GstPreset.html#gst-preset-set-app-dir">
 <ANCHOR id="gst-preset-get-app-dir" href="gstreamer-1.0/GstPreset.html#gst-preset-get-app-dir">
+<ANCHOR id="gst-preset-is-editable" href="gstreamer-1.0/GstPreset.html#gst-preset-is-editable">
 <ANCHOR id="GstPreset.other_details" href="gstreamer-1.0/GstPreset.html#GstPreset.other_details">
 <ANCHOR id="GstPreset-struct" href="gstreamer-1.0/GstPreset.html#GstPreset-struct">
 <ANCHOR id="GstPresetInterface" href="gstreamer-1.0/GstPreset.html#GstPresetInterface">
@@ -1821,6 +1832,7 @@
 <ANCHOR id="GstStructure.functions_details" href="gstreamer-1.0/GstStructure.html#GstStructure.functions_details">
 <ANCHOR id="GstStructureForeachFunc" href="gstreamer-1.0/GstStructure.html#GstStructureForeachFunc">
 <ANCHOR id="GstStructureMapFunc" href="gstreamer-1.0/GstStructure.html#GstStructureMapFunc">
+<ANCHOR id="GstStructureFilterMapFunc" href="gstreamer-1.0/GstStructure.html#GstStructureFilterMapFunc">
 <ANCHOR id="gst-structure-new-empty" href="gstreamer-1.0/GstStructure.html#gst-structure-new-empty">
 <ANCHOR id="gst-structure-new-id-empty" href="gstreamer-1.0/GstStructure.html#gst-structure-new-id-empty">
 <ANCHOR id="gst-structure-new" href="gstreamer-1.0/GstStructure.html#gst-structure-new">
@@ -1852,7 +1864,6 @@
 <ANCHOR id="gst-structure-remove-fields-valist" href="gstreamer-1.0/GstStructure.html#gst-structure-remove-fields-valist">
 <ANCHOR id="gst-structure-remove-all-fields" href="gstreamer-1.0/GstStructure.html#gst-structure-remove-all-fields">
 <ANCHOR id="gst-structure-get-field-type" href="gstreamer-1.0/GstStructure.html#gst-structure-get-field-type">
-<ANCHOR id="gst-structure-foreach" href="gstreamer-1.0/GstStructure.html#gst-structure-foreach">
 <ANCHOR id="gst-structure-n-fields" href="gstreamer-1.0/GstStructure.html#gst-structure-n-fields">
 <ANCHOR id="gst-structure-has-field" href="gstreamer-1.0/GstStructure.html#gst-structure-has-field">
 <ANCHOR id="gst-structure-has-field-typed" href="gstreamer-1.0/GstStructure.html#gst-structure-has-field-typed">
@@ -1874,7 +1885,9 @@
 <ANCHOR id="gst-structure-get-clock-time" href="gstreamer-1.0/GstStructure.html#gst-structure-get-clock-time">
 <ANCHOR id="gst-structure-get-enum" href="gstreamer-1.0/GstStructure.html#gst-structure-get-enum">
 <ANCHOR id="gst-structure-get-fraction" href="gstreamer-1.0/GstStructure.html#gst-structure-get-fraction">
+<ANCHOR id="gst-structure-foreach" href="gstreamer-1.0/GstStructure.html#gst-structure-foreach">
 <ANCHOR id="gst-structure-map-in-place" href="gstreamer-1.0/GstStructure.html#gst-structure-map-in-place">
+<ANCHOR id="gst-structure-filter-and-map-in-place" href="gstreamer-1.0/GstStructure.html#gst-structure-filter-and-map-in-place">
 <ANCHOR id="gst-structure-nth-field-name" href="gstreamer-1.0/GstStructure.html#gst-structure-nth-field-name">
 <ANCHOR id="gst-structure-set-parent-refcount" href="gstreamer-1.0/GstStructure.html#gst-structure-set-parent-refcount">
 <ANCHOR id="gst-structure-to-string" href="gstreamer-1.0/GstStructure.html#gst-structure-to-string">
@@ -2229,6 +2242,58 @@
 <ANCHOR id="gst-type-find-factory-call-function" href="gstreamer-1.0/GstTypeFindFactory.html#gst-type-find-factory-call-function">
 <ANCHOR id="GstTypeFindFactory.other_details" href="gstreamer-1.0/GstTypeFindFactory.html#GstTypeFindFactory.other_details">
 <ANCHOR id="GstTypeFindFactory-struct" href="gstreamer-1.0/GstTypeFindFactory.html#GstTypeFindFactory-struct">
+<ANCHOR id="gstreamer-GstUri" href="gstreamer-1.0/gstreamer-GstUri.html">
+<ANCHOR id="gstreamer-GstUri.functions" href="gstreamer-1.0/gstreamer-GstUri.html#gstreamer-GstUri.functions">
+<ANCHOR id="gstreamer-GstUri.other" href="gstreamer-1.0/gstreamer-GstUri.html#gstreamer-GstUri.other">
+<ANCHOR id="gstreamer-GstUri.includes" href="gstreamer-1.0/gstreamer-GstUri.html#gstreamer-GstUri.includes">
+<ANCHOR id="gstreamer-GstUri.description" href="gstreamer-1.0/gstreamer-GstUri.html#gstreamer-GstUri.description">
+<ANCHOR id="gstreamer-GstUri.functions_details" href="gstreamer-1.0/gstreamer-GstUri.html#gstreamer-GstUri.functions_details">
+<ANCHOR id="GST-URI-CAST:CAPS" href="gstreamer-1.0/gstreamer-GstUri.html#GST-URI-CAST:CAPS">
+<ANCHOR id="GST-URI-CONST-CAST:CAPS" href="gstreamer-1.0/gstreamer-GstUri.html#GST-URI-CONST-CAST:CAPS">
+<ANCHOR id="gst-uri-new" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-new">
+<ANCHOR id="gst-uri-new-with-base" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-new-with-base">
+<ANCHOR id="gst-uri-from-string" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-from-string">
+<ANCHOR id="gst-uri-from-string-with-base" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-from-string-with-base">
+<ANCHOR id="gst-uri-copy" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-copy">
+<ANCHOR id="gst-uri-equal" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-equal">
+<ANCHOR id="gst-uri-join" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-join">
+<ANCHOR id="gst-uri-join-strings" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-join-strings">
+<ANCHOR id="gst-uri-is-writable" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-is-writable">
+<ANCHOR id="gst-uri-make-writable" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-make-writable">
+<ANCHOR id="gst-uri-to-string" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-to-string">
+<ANCHOR id="gst-uri-ref" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-ref">
+<ANCHOR id="gst-uri-unref" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-unref">
+<ANCHOR id="gst-uri-is-normalized" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-is-normalized">
+<ANCHOR id="gst-uri-normalize" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-normalize">
+<ANCHOR id="gst-uri-get-scheme" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-scheme">
+<ANCHOR id="gst-uri-set-scheme" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-scheme">
+<ANCHOR id="gst-uri-get-userinfo" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-userinfo">
+<ANCHOR id="gst-uri-set-userinfo" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-userinfo">
+<ANCHOR id="gst-uri-get-host" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-host">
+<ANCHOR id="gst-uri-set-host" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-host">
+<ANCHOR id="gst-uri-get-port" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-port">
+<ANCHOR id="gst-uri-set-port" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-port">
+<ANCHOR id="gst-uri-get-path" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-path">
+<ANCHOR id="gst-uri-set-path" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-path">
+<ANCHOR id="gst-uri-get-path-string" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-path-string">
+<ANCHOR id="gst-uri-set-path-string" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-path-string">
+<ANCHOR id="gst-uri-get-path-segments" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-path-segments">
+<ANCHOR id="gst-uri-set-path-segments" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-path-segments">
+<ANCHOR id="gst-uri-append-path" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-append-path">
+<ANCHOR id="gst-uri-append-path-segment" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-append-path-segment">
+<ANCHOR id="gst-uri-get-query-string" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-query-string">
+<ANCHOR id="gst-uri-set-query-string" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-query-string">
+<ANCHOR id="gst-uri-get-query-table" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-query-table">
+<ANCHOR id="gst-uri-set-query-table" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-query-table">
+<ANCHOR id="gst-uri-get-query-value" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-query-value">
+<ANCHOR id="gst-uri-set-query-value" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-query-value">
+<ANCHOR id="gst-uri-remove-query-key" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-remove-query-key">
+<ANCHOR id="gst-uri-query-has-key" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-query-has-key">
+<ANCHOR id="gst-uri-get-query-keys" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-query-keys">
+<ANCHOR id="gst-uri-get-fragment" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-get-fragment">
+<ANCHOR id="gst-uri-set-fragment" href="gstreamer-1.0/gstreamer-GstUri.html#gst-uri-set-fragment">
+<ANCHOR id="gstreamer-GstUri.other_details" href="gstreamer-1.0/gstreamer-GstUri.html#gstreamer-GstUri.other_details">
+<ANCHOR id="GstUri" href="gstreamer-1.0/gstreamer-GstUri.html#GstUri">
 <ANCHOR id="gstreamer-GstUriHandler" href="gstreamer-1.0/gstreamer-GstUriHandler.html">
 <ANCHOR id="gstreamer-GstUriHandler.functions" href="gstreamer-1.0/gstreamer-GstUriHandler.html#gstreamer-GstUriHandler.functions">
 <ANCHOR id="GstURIHandler" href="gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">
@@ -2257,6 +2322,7 @@
 <ANCHOR id="GstURIHandlerInterface" href="gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandlerInterface">
 <ANCHOR id="GstURIType" href="gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIType">
 <ANCHOR id="GstURIError" href="gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIError">
+<ANCHOR id="GST-URI-NO-PORT:CAPS" href="gstreamer-1.0/gstreamer-GstUriHandler.html#GST-URI-NO-PORT:CAPS">
 <ANCHOR id="gstreamer-GstUtils" href="gstreamer-1.0/gstreamer-GstUtils.html">
 <ANCHOR id="gstreamer-GstUtils.functions" href="gstreamer-1.0/gstreamer-GstUtils.html#gstreamer-GstUtils.functions">
 <ANCHOR id="gstreamer-GstUtils.other" href="gstreamer-1.0/gstreamer-GstUtils.html#gstreamer-GstUtils.other">
@@ -2625,6 +2691,7 @@
 <ANCHOR id="gstreamer-GstInfo.other_details" href="gstreamer-1.0/gstreamer-GstInfo.html#gstreamer-GstInfo.other_details">
 <ANCHOR id="GstDebugLevel" href="gstreamer-1.0/gstreamer-GstInfo.html#GstDebugLevel">
 <ANCHOR id="GST-LEVEL-DEFAULT:CAPS" href="gstreamer-1.0/gstreamer-GstInfo.html#GST-LEVEL-DEFAULT:CAPS">
+<ANCHOR id="GST-LEVEL-MAX:CAPS" href="gstreamer-1.0/gstreamer-GstInfo.html#GST-LEVEL-MAX:CAPS">
 <ANCHOR id="GstDebugColorFlags" href="gstreamer-1.0/gstreamer-GstInfo.html#GstDebugColorFlags">
 <ANCHOR id="GstDebugColorMode" href="gstreamer-1.0/gstreamer-GstInfo.html#GstDebugColorMode">
 <ANCHOR id="GstDebugCategory" href="gstreamer-1.0/gstreamer-GstInfo.html#GstDebugCategory">
diff --git a/docs/gst/html/libgstreamer.html b/docs/gst/html/libgstreamer.html
index b1ca3e0..5779c07 100644
--- a/docs/gst/html/libgstreamer.html
+++ b/docs/gst/html/libgstreamer.html
@@ -192,6 +192,9 @@
 <span class="refentrytitle"><a href="GstTypeFindFactory.html">GstTypeFindFactory</a></span><span class="refpurpose"> — Information about registered typefind functions</span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gstreamer-GstUri.html">GstUri</a></span><span class="refpurpose"> — URI parsing and manipulation.</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gstreamer-GstUriHandler.html">GstUriHandler</a></span><span class="refpurpose"> — Interface to ease URI handling in plugins.</span>
 </dt>
 <dt>
diff --git a/docs/gst/running.xml b/docs/gst/running.xml
index 67ac4fa..db30fe5 100644
--- a/docs/gst/running.xml
+++ b/docs/gst/running.xml
@@ -514,6 +514,31 @@
 encoding does not look like UTF-8.
   </para>
 </formalpara>
+
+<formalpara id="GST_GL_WINDOW">
+  <title><envar>GST_GL_WINDOW</envar></title>
+  <para>
+Influences the window system to use by the GStreamer OpenGL library.
+Common values are 'x11', 'wayland', 'win32' or 'cocoa'.
+  </para>
+</formalpara>
+
+<formalpara id="GST_GL_PLATFORM">
+  <title><envar>GST_GL_PLATFORM</envar></title>
+  <para>
+Influences the OpenGL platform to use by the GStreamer OpenGL library.
+Common values are 'egl', 'glx', 'wgl' or 'cgl'.
+  </para>
+</formalpara>
+
+<formalpara id="GST_GL_API">
+  <title><envar>GST_GL_API</envar></title>
+  <para>
+Influences the OpenGL API requested by the OpenGL platform.
+Common values are 'opengl' or 'gles2'.
+  </para>
+</formalpara>
+
 </refsect2>
 
 </refsect1>
diff --git a/docs/libs/Makefile.am b/docs/libs/Makefile.am
index 889b3a4..fc92b87 100644
--- a/docs/libs/Makefile.am
+++ b/docs/libs/Makefile.am
@@ -25,7 +25,7 @@
 SCAN_OPTIONS=--deprecated-guards="GST_DISABLE_DEPRECATED"
 
 # Extra options to supply to gtkdoc-mkdb.
-MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS=--sgml-mode --output-format=xml --ignore-files="$(IGNORE_HFILES)"
 
 # Extra options to supply to gtkdoc-fixref.
 FIXXREF_OPTIONS=--extra-dir=$(top_builddir)/docs/gst/html \
@@ -41,6 +41,7 @@
 
 # Header files to ignore when scanning.
 IGNORE_HFILES = \
+	check/libcheck check/internal-check.h \
 	gstinterpolationcontrolsourceprivate.h \
 	gstlfocontrolsourceprivate.h \
 	gstgetbits_inl.h \
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index 46cd2c0..66d4113 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -109,6 +109,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -126,7 +127,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -174,6 +175,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -281,6 +286,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -468,7 +474,7 @@
 SCAN_OPTIONS = --deprecated-guards="GST_DISABLE_DEPRECATED"
 
 # Extra options to supply to gtkdoc-mkdb.
-MKDB_OPTIONS = --sgml-mode --output-format=xml
+MKDB_OPTIONS = --sgml-mode --output-format=xml --ignore-files="$(IGNORE_HFILES)"
 
 # Extra options to supply to gtkdoc-fixref.
 FIXXREF_OPTIONS = --extra-dir=$(top_builddir)/docs/gst/html \
@@ -485,6 +491,7 @@
 
 # Header files to ignore when scanning.
 IGNORE_HFILES = \
+	check/libcheck check/internal-check.h \
 	gstinterpolationcontrolsourceprivate.h \
 	gstlfocontrolsourceprivate.h \
 	gstgetbits_inl.h \
diff --git a/docs/libs/gstreamer-libs-sections.txt b/docs/libs/gstreamer-libs-sections.txt
index 83b19db..86355fb 100644
--- a/docs/libs/gstreamer-libs-sections.txt
+++ b/docs/libs/gstreamer-libs-sections.txt
@@ -166,6 +166,7 @@
 gst_adapter_take_buffer
 gst_adapter_take_buffer_fast
 gst_adapter_take_list
+gst_adapter_take_buffer_list
 gst_adapter_prev_pts
 gst_adapter_prev_dts
 gst_adapter_prev_pts_at_offset
@@ -442,6 +443,9 @@
 
 gst_byte_reader_init
 
+gst_byte_reader_peek_sub_reader
+gst_byte_reader_get_sub_reader
+
 gst_byte_reader_get_pos
 gst_byte_reader_get_remaining
 gst_byte_reader_set_pos
@@ -504,6 +508,7 @@
 gst_byte_reader_peek_data
 
 gst_byte_reader_masked_scan_uint32
+gst_byte_reader_masked_scan_uint32_peek
 
 gst_byte_reader_get_string
 gst_byte_reader_get_string_utf8
@@ -760,6 +765,7 @@
 gst_flow_combiner_update_flow
 gst_flow_combiner_add_pad
 gst_flow_combiner_remove_pad
+gst_flow_combiner_clear
 <SUBSECTION Standard>
 GST_TYPE_FLOW_COMBINER
 <SUBSECTION Private>
@@ -863,6 +869,20 @@
 gst_net_address_meta_api_get_type
 </SECTION>
 
+<SECTION>
+<FILE>gstnetcontrolmessagemeta</FILE>
+<TITLE>GstNetControlMessageMeta</TITLE>
+<INCLUDE>gst/net/gstnetcontrolmessagemeta.h</INCLUDE>
+GstNetControlMessageMeta
+gst_buffer_add_net_control_message_meta
+gst_buffer_get_net_control_message_meta
+gst_net_control_message_meta_get_info
+<SUBSECTION Standard>
+GST_NET_CONTROL_MESSAGE_META_API_TYPE
+GST_NET_CONTROL_MESSAGE_META_INFO
+<SUBSECTION Private>
+gst_net_control_message_meta_api_get_type
+</SECTION>
 
 <SECTION>
 <FILE>gstnetclientclock</FILE>
@@ -982,6 +1002,8 @@
 gst_check_setup_sink_pad_from_template
 gst_check_setup_src_pad_by_name_from_template
 gst_check_setup_src_pad_from_template
+gst_check_objects_destroyed_on_unref
+gst_check_object_destroyed_on_unref
 
 <SUBSECTION Private>
 MAIN_INIT
diff --git a/docs/libs/html/GstAdapter.html b/docs/libs/html/GstAdapter.html
index 8557365..8cbd748 100644
--- a/docs/libs/html/GstAdapter.html
+++ b/docs/libs/html/GstAdapter.html
@@ -154,6 +154,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferList.html"><span class="returnvalue">GstBufferList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstAdapter.html#gst-adapter-take-buffer-list" title="gst_adapter_take_buffer_list ()">gst_adapter_take_buffer_list</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
 </td>
 <td class="function_name">
@@ -575,8 +583,7 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.8.6"></a><h4>Returns</h4>
-<p> A new <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> structure containing the copied data.</p>
-<p>Rename to: gst_adapter_copy. </p>
+<p> A new <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> structure containing the copied 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>
 <p class="since">Since 1.4</p>
@@ -874,18 +881,18 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-adapter-prev-pts"></a><h3>gst_adapter_prev_pts ()</h3>
-<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
-gst_adapter_prev_pts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
-                      <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
-<p>Get the pts that was before the current byte in the adapter. When
-<em class="parameter"><code>distance</code></em>
- is given, the amount of bytes between the pts and the current
-position is returned.</p>
-<p>The pts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
-the adapter is first created or when it is cleared. This also means that before
-the first byte with a pts is removed from the adapter, the pts
-and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</p>
+<a name="gst-adapter-take-buffer-list"></a><h3>gst_adapter_take_buffer_list ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferList.html"><span class="returnvalue">GstBufferList</span></a> *
+gst_adapter_take_buffer_list (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+                              <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);</pre>
+<p>Returns a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferList.html"><span class="type">GstBufferList</span></a> of buffers containing the first <em class="parameter"><code>nbytes</code></em>
+ bytes of
+the <em class="parameter"><code>adapter</code></em>
+. The returned bytes will be flushed from the adapter.
+When the caller can deal with individual buffers, this function is more
+performant because no memory should be copied.</p>
+<p>Caller owns the returned list. Call <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferList.html#gst-buffer-list-unref"><code class="function">gst_buffer_list_unref()</code></a> to free
+the list after usage.</p>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.16.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -901,32 +908,37 @@
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
-<td class="parameter_name"><p>distance</p></td>
-<td class="parameter_description"><p> pointer to location for distance, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+<td class="parameter_name"><p>nbytes</p></td>
+<td class="parameter_description"><p>the number of bytes to take</p></td>
+<td class="parameter_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.16.7"></a><h4>Returns</h4>
-<p> The previously seen pts.</p>
-<p></p>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferList.html"><span class="type">GstBufferList</span></a> of buffers containing
+the first <em class="parameter"><code>nbytes</code></em>
+of the adapter, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>nbytes</code></em>
+bytes are not
+available. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
 </div>
+<p class="since">Since 1.6</p>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-adapter-prev-dts"></a><h3>gst_adapter_prev_dts ()</h3>
+<a name="gst-adapter-prev-pts"></a><h3>gst_adapter_prev_pts ()</h3>
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
-gst_adapter_prev_dts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+gst_adapter_prev_pts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                       <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
-<p>Get the dts that was before the current byte in the adapter. When
+<p>Get the pts that was before the current byte in the adapter. When
 <em class="parameter"><code>distance</code></em>
- is given, the amount of bytes between the dts and the current
+ is given, the amount of bytes between the pts and the current
 position is returned.</p>
-<p>The dts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
+<p>The pts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
 the adapter is first created or when it is cleared. This also means that before
-the first byte with a dts is removed from the adapter, the dts
+the first byte with a pts is removed from the adapter, the pts
 and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</p>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.17.6"></a><h4>Parameters</h4>
@@ -952,6 +964,48 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.17.7"></a><h4>Returns</h4>
+<p> The previously seen pts.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-adapter-prev-dts"></a><h3>gst_adapter_prev_dts ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+gst_adapter_prev_dts (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+                      <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
+<p>Get the dts that was before the current byte in the adapter. When
+<em class="parameter"><code>distance</code></em>
+ is given, the amount of bytes between the dts and the current
+position is returned.</p>
+<p>The dts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
+the adapter is first created or when it is cleared. This also means that before
+the first byte with a dts is removed from the adapter, the dts
+and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</p>
+<div class="refsect3">
+<a name="id-1.2.4.8.8.18.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adapter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>distance</p></td>
+<td class="parameter_description"><p> pointer to location for distance, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.8.8.18.7"></a><h4>Returns</h4>
 <p> The previously seen dts.</p>
 <p></p>
 </div>
@@ -973,56 +1027,6 @@
 the first byte with a pts is removed from the adapter, the pts
 and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</p>
 <div class="refsect3">
-<a name="id-1.2.4.8.8.18.6"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>adapter</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>offset</p></td>
-<td class="parameter_description"><p>the offset in the adapter at which to get timestamp</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>distance</p></td>
-<td class="parameter_description"><p> pointer to location for distance, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.8.8.18.7"></a><h4>Returns</h4>
-<p> The previously seen pts at given offset.</p>
-<p></p>
-</div>
-<p class="since">Since 1.2</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-adapter-prev-dts-at-offset"></a><h3>gst_adapter_prev_dts_at_offset ()</h3>
-<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
-gst_adapter_prev_dts_at_offset (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
-                                <em class="parameter"><code><span class="type">gsize</span> offset</code></em>,
-                                <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
-<p>Get the dts that was before the byte at offset <em class="parameter"><code>offset</code></em>
- in the adapter. When
-<em class="parameter"><code>distance</code></em>
- is given, the amount of bytes between the dts and the current
-position is returned.</p>
-<p>The dts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
-the adapter is first created or when it is cleared. This also means that before
-the first byte with a dts is removed from the adapter, the dts
-and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</p>
-<div class="refsect3">
 <a name="id-1.2.4.8.8.19.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1051,6 +1055,56 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.19.7"></a><h4>Returns</h4>
+<p> The previously seen pts at given offset.</p>
+<p></p>
+</div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-adapter-prev-dts-at-offset"></a><h3>gst_adapter_prev_dts_at_offset ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>
+gst_adapter_prev_dts_at_offset (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+                                <em class="parameter"><code><span class="type">gsize</span> offset</code></em>,
+                                <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
+<p>Get the dts that was before the byte at offset <em class="parameter"><code>offset</code></em>
+ in the adapter. When
+<em class="parameter"><code>distance</code></em>
+ is given, the amount of bytes between the dts and the current
+position is returned.</p>
+<p>The dts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
+the adapter is first created or when it is cleared. This also means that before
+the first byte with a dts is removed from the adapter, the dts
+and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</p>
+<div class="refsect3">
+<a name="id-1.2.4.8.8.20.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adapter</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the offset in the adapter at which to get timestamp</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>distance</p></td>
+<td class="parameter_description"><p> pointer to location for distance, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.8.8.20.7"></a><h4>Returns</h4>
 <p> The previously seen dts at given offset.</p>
 <p></p>
 </div>
@@ -1080,7 +1134,7 @@
 <p>This function calls <a class="link" href="GstAdapter.html#gst-adapter-masked-scan-uint32-peek" title="gst_adapter_masked_scan_uint32_peek ()"><code class="function">gst_adapter_masked_scan_uint32_peek()</code></a> passing <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
 for value.</p>
 <div class="refsect3">
-<a name="id-1.2.4.8.8.20.8"></a><h4>Parameters</h4>
+<a name="id-1.2.4.8.8.21.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1119,7 +1173,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.8.8.20.9"></a><h4>Returns</h4>
+<a name="id-1.2.4.8.8.21.9"></a><h4>Returns</h4>
 <p> offset of the first match, or -1 if no match was found.</p>
 <p>Example:</p>
 <pre class="programlisting">
@@ -1168,7 +1222,7 @@
 <p>It is an error to call this function without making sure that there is
 enough data (offset+size bytes) in the adapter.</p>
 <div class="refsect3">
-<a name="id-1.2.4.8.8.21.7"></a><h4>Parameters</h4>
+<a name="id-1.2.4.8.8.22.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1212,7 +1266,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.8.8.21.8"></a><h4>Returns</h4>
+<a name="id-1.2.4.8.8.22.8"></a><h4>Returns</h4>
 <p> offset of the first match, or -1 if no match was found.</p>
 <p></p>
 </div>
diff --git a/docs/libs/html/GstBaseParse.html b/docs/libs/html/GstBaseParse.html
index 2b01de6..56b69c7 100644
--- a/docs/libs/html/GstBaseParse.html
+++ b/docs/libs/html/GstBaseParse.html
@@ -1311,10 +1311,8 @@
 };
 </pre>
 <p>Subclasses can override any of the available virtual methods or not, as
-needed. At minimum <em class="parameter"><code>check_valid_frame</code></em>
- and <em class="parameter"><code>parse_frame</code></em>
- needs to be
-overridden.</p>
+needed. At minimum <em class="parameter"><code>handle_frame</code></em>
+ needs to be overridden.</p>
 <div class="refsect3">
 <a name="id-1.2.4.3.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1345,7 +1343,8 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstBaseParseClass.set-sink-caps"></a>set_sink_caps</code></em> ()</p></td>
-<td class="struct_member_description"><p>allows the subclass to be notified of the actual caps set.</p></td>
+<td class="struct_member_description"><p>Optional.
+Allows the subclass to be notified of the actual caps set.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
@@ -1395,7 +1394,8 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstBaseParseClass.get-sink-caps"></a>get_sink_caps</code></em> ()</p></td>
-<td class="struct_member_description"><p>allows the subclass to do its own sink get caps if needed.</p></td>
+<td class="struct_member_description"><p>Optional.
+Allows the subclass to do its own sink get caps if needed.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
diff --git a/docs/libs/html/GstBaseSrc.html b/docs/libs/html/GstBaseSrc.html
index bbe0c35..abc8847 100644
--- a/docs/libs/html/GstBaseSrc.html
+++ b/docs/libs/html/GstBaseSrc.html
@@ -629,10 +629,10 @@
  will be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> when <em class="parameter"><code>src</code></em>
  is
 configured as a live source. <em class="parameter"><code>min_latency</code></em>
- will be set to the difference
-between the running time and the timestamp of the first buffer.
-<em class="parameter"><code>max_latency</code></em>
- is always the undefined value of -1.</p>
+ and <em class="parameter"><code>max_latency</code></em>
+ will be set
+to the difference between the running time and the timestamp of the first
+buffer.</p>
 <p>This function is mostly used by subclasses.</p>
 <div class="refsect3">
 <a name="id-1.2.4.4.9.8.6"></a><h4>Parameters</h4>
@@ -937,8 +937,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>caps</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -1154,7 +1154,8 @@
   void          (*get_times)    (GstBaseSrc *src, GstBuffer *buffer,
                                  GstClockTime *start, GstClockTime *end);
 
-  /* get the total size of the resource in bytes */
+  /* get the total size of the resource in the format set by
+   * gst_base_src_set_format() */
   gboolean      (*get_size)     (GstBaseSrc *src, guint64 *size);
 
   /* check if the resource is seekable */
@@ -1258,7 +1259,8 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstBaseSrcClass.get-size"></a>get_size</code></em> ()</p></td>
-<td class="struct_member_description"><p>Return the total size of the resource, in the configured format.</p></td>
+<td class="struct_member_description"><p>Return the total size of the resource, in the format set by
+<a class="link" href="GstBaseSrc.html#gst-base-src-set-format" title="gst_base_src_set_format ()"><code class="function">gst_base_src_set_format()</code></a>.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
diff --git a/docs/libs/html/GstNetClientClock.html b/docs/libs/html/GstNetClientClock.html
index b6d736b..583e869 100644
--- a/docs/libs/html/GstNetClientClock.html
+++ b/docs/libs/html/GstNetClientClock.html
@@ -67,6 +67,17 @@
 <td class="property_flags">Read / Write</td>
 </tr>
 <tr>
+<td class="property_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a> *</td>
+<td class="property_name"><a class="link" href="GstNetClientClock.html#GstNetClientClock--bus" title="The “bus” property">bus</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">guint64</span></td>
+<td class="property_name"><a class="link" href="GstNetClientClock.html#GstNetClientClock--minimum-update-interval" title="The “minimum-update-interval” property">minimum-update-interval</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
 <td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
 <td class="property_name"><a class="link" href="GstNetClientClock.html#GstNetClientClock--port" title="The “port” property">port</a></td>
 <td class="property_flags">Read / Write</td>
@@ -121,6 +132,10 @@
 "timeout", "window-size" and "window-threshold" object properties.</p>
 <p>A <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> is typically set on a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a> with 
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html#gst-pipeline-use-clock"><code class="function">gst_pipeline_use_clock()</code></a>.</p>
+<p>If you set a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a> on the clock via the "bus" object property, it will
+send <em class="parameter"><code>GST_MESSAGE_ELEMENT</code></em>
+ messages with an attached <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> containing
+statistics about clock accuracy and network traffic.</p>
 </div>
 <div class="refsect1">
 <a name="GstNetClientClock.functions_details"></a><h2>Functions</h2>
@@ -195,6 +210,21 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GstNetClientClock--bus"></a><h3>The <code class="literal">“bus”</code> property</h3>
+<pre class="programlisting">  “bus”                      <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html"><span class="type">GstBus</span></a> *</pre>
+<p>A GstBus on which to send clock status information.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstNetClientClock--minimum-update-interval"></a><h3>The <code class="literal">“minimum-update-interval”</code> property</h3>
+<pre class="programlisting">  “minimum-update-interval”  <span class="type">guint64</span></pre>
+<p>Minimum polling interval for packets, in nanoseconds(0 = no limit).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 50000000</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstNetClientClock--port"></a><h3>The <code class="literal">“port”</code> property</h3>
 <pre class="programlisting">  “port”                     <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
 <p>The port on which the remote server is listening.</p>
diff --git a/docs/libs/html/GstTestClock.html b/docs/libs/html/GstTestClock.html
index c5b5da2..a5aaa38 100644
--- a/docs/libs/html/GstTestClock.html
+++ b/docs/libs/html/GstTestClock.html
@@ -408,7 +408,7 @@
 <span class="function"><a href="https://developer.gnome.org/glib/unstable/glib-Testing.html#g-assert-cmpint">g_assert_cmpint</a></span> <span class="gtkdoc opt">(</span><span class="function">GST_BUFFER_TIMESTAMP</span> <span class="gtkdoc opt">(</span>buf<span class="gtkdoc opt">), ==,</span> latency<span class="gtkdoc opt">);</span>
 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-unref">gst_buffer_unref</a></span> <span class="gtkdoc opt">(</span>buf<span class="gtkdoc opt">);</span>
 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-INFO:CAPS">GST_INFO</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Check that element does not wait for any clock notification</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">);</span>
-<span class="function"><a href="https://developer.gnome.org/glib/unstable/glib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstTestClock.html#gst-test-clock-peek-next-pending-id">gst_test_clock_peek_next_pending_id</a></span> <span class="gtkdoc opt">(</span>test_clock<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">) ==</span> FALSE<span class="gtkdoc opt">);</span>
+<span class="function"><a href="https://developer.gnome.org/glib/unstable/glib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(!</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstTestClock.html#gst-test-clock-peek-next-pending-id">gst_test_clock_peek_next_pending_id</a></span> <span class="gtkdoc opt">(</span>test_clock<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">));</span>
 
 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-INFO:CAPS">GST_INFO</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Set time, create and push the second buffer</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">);</span>
 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstTestClock.html#gst-test-clock-advance-time">gst_test_clock_advance_time</a></span> <span class="gtkdoc opt">(</span>test_clock<span class="gtkdoc opt">,</span> <span class="number">10</span> <span class="gtkdoc opt">*</span> GST_SECOND<span class="gtkdoc opt">);</span>
@@ -433,7 +433,7 @@
     <span class="number">10</span> <span class="gtkdoc opt">*</span> GST_SECOND <span class="gtkdoc opt">+</span> latency <span class="gtkdoc opt">+</span> <span class="number">7</span> <span class="gtkdoc opt">*</span> GST_MSECOND<span class="gtkdoc opt">);</span>
 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-unref">gst_buffer_unref</a></span> <span class="gtkdoc opt">(</span>buf<span class="gtkdoc opt">);</span>
 <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-INFO:CAPS">GST_INFO</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Check that element does not wait for any clock notification</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">);</span>
-<span class="function"><a href="https://developer.gnome.org/glib/unstable/glib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstTestClock.html#gst-test-clock-peek-next-pending-id">gst_test_clock_peek_next_pending_id</a></span> <span class="gtkdoc opt">(</span>test_clock<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">) ==</span> FALSE<span class="gtkdoc opt">);</span>
+<span class="function"><a href="https://developer.gnome.org/glib/unstable/glib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(!</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstTestClock.html#gst-test-clock-peek-next-pending-id">gst_test_clock_peek_next_pending_id</a></span> <span class="gtkdoc opt">(</span>test_clock<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">));</span>
 <span class="gtkdoc opt">...</span></pre></td>
       </tr>
     </tbody>
diff --git a/docs/libs/html/GstTimedValueControlSource.html b/docs/libs/html/GstTimedValueControlSource.html
index b2d2183..7b6040f 100644
--- a/docs/libs/html/GstTimedValueControlSource.html
+++ b/docs/libs/html/GstTimedValueControlSource.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="#GstTimedValueControlSource.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#GstTimedValueControlSource.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+                  <a href="#GstTimedValueControlSource.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_signals">  <span class="dim">|</span> 
+                  <a href="#GstTimedValueControlSource.signals" class="shortcut">Signals</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gstreamer-control.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
@@ -108,6 +109,33 @@
 </table></div>
 </div>
 <div class="refsect1">
+<a name="GstTimedValueControlSource.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-value-added" title="The “value-added” signal">value-added</a></td>
+<td class="signal_flags">Run First</td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-value-changed" title="The “value-changed” signal">value-changed</a></td>
+<td class="signal_flags">Run First</td>
+</tr>
+<tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-value-removed" title="The “value-removed” signal">value-removed</a></td>
+<td class="signal_flags">Run First</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
 <a name="GstTimedValueControlSource.other"></a><h2>Types and Values</h2>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -156,7 +184,7 @@
 timestamp or no values exist, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned.</p>
 <p>For use in control source implementations.</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -178,7 +206,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.5.5.9.2.7"></a><h4>Returns</h4>
 <p> the found <a href="https://developer.gnome.org/glib/unstable/glib-Sequences.html#GSequenceIter"><span class="type">GSequenceIter</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a></p>
 <p></p>
 </div>
@@ -192,7 +220,7 @@
                                     <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);</pre>
 <p>Set the value of given controller-handled property at a certain time.</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -219,7 +247,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.5.5.9.3.6"></a><h4>Returns</h4>
 <p> FALSE if the values couldn't be set, TRUE otherwise.</p>
 <p></p>
 </div>
@@ -233,7 +261,7 @@
                                 <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *timedvalues</code></em>);</pre>
 <p>Sets multiple timed values at once.</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -256,7 +284,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.5.5.9.4.6"></a><h4>Returns</h4>
 <p> FALSE if the values couldn't be set, TRUE otherwise.</p>
 <p></p>
 </div>
@@ -270,7 +298,7 @@
 <p>Returns a read-only copy of the list of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> for the given property.
 Free the list after done with it.</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -285,7 +313,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.5.5.9.5.6"></a><h4>Returns</h4>
 <p> a copy
 of the list, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the property isn't handled by the controller. </p>
 <p><span class="annotation">[<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstTimedValue]</span></p>
@@ -300,7 +328,7 @@
 <p>Used to remove the value of given controller-handled property at a certain
 time.</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -322,7 +350,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.5.5.9.6.6"></a><h4>Returns</h4>
 <p> FALSE if the value couldn't be unset (i.e. not found, TRUE otherwise.</p>
 <p></p>
 </div>
@@ -335,7 +363,7 @@
                                (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);</pre>
 <p>Used to remove all time-stamped values of given controller-handled property</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -358,7 +386,7 @@
                                (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);</pre>
 <p>Get the number of control points that are set.</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -373,7 +401,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.5.5.9.8.6"></a><h4>Returns</h4>
 <p> the number of control points that are set.</p>
 <p></p>
 </div>
@@ -386,7 +414,7 @@
                                (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);</pre>
 <p>Reset the controlled value cache.</p>
 <div class="refsect3">
-<a name="id-1.2.5.5.8.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.9.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -410,6 +438,128 @@
 <p>The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="GstTimedValueControlSource.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstTimedValueControlSource-value-added"></a><h3>The <code class="literal">“value-added”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self,
+               <span class="type">GstControlPoint</span>            *timed_value,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>                    user_data)</pre>
+<p>Emited right after the new value has been added to <em class="parameter"><code>self</code></em>
+</p>
+<p>Since 1.6</p>
+<div class="refsect3">
+<a name="id-1.2.5.5.11.2.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> into which a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> has been
+added</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>timed_value</p></td>
+<td class="parameter_description"><p>The newly added <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p>Flags: Run First</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTimedValueControlSource-value-changed"></a><h3>The <code class="literal">“value-changed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self,
+               <span class="type">GstControlPoint</span>            *timed_value,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>                    user_data)</pre>
+<p>Emited right after the new value has been set on <em class="parameter"><code>timed_signals</code></em>
+</p>
+<p>Since 1.6</p>
+<div class="refsect3">
+<a name="id-1.2.5.5.11.3.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> on which a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> has changed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>timed_value</p></td>
+<td class="parameter_description"><p>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> where the value changed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p>Flags: Run First</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTimedValueControlSource-value-removed"></a><h3>The <code class="literal">“value-removed”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self,
+               <span class="type">GstControlPoint</span>            *timed_value,
+               <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>                    user_data)</pre>
+<p>Emited when <em class="parameter"><code>timed_value</code></em>
+ is removed from <em class="parameter"><code>self</code></em>
+</p>
+<p>Since 1.6</p>
+<div class="refsect3">
+<a name="id-1.2.5.5.11.4.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>self</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> from which a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> has been
+removed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>timed_value</p></td>
+<td class="parameter_description"><p>The removed <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p>Flags: Run First</p>
+</div>
+</div>
 </div>
 <div class="footer">
 <hr>
diff --git a/docs/libs/html/GstTriggerControlSource.html b/docs/libs/html/GstTriggerControlSource.html
index f820473..72c00df 100644
--- a/docs/libs/html/GstTriggerControlSource.html
+++ b/docs/libs/html/GstTriggerControlSource.html
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="GstTriggerControlSource.top_of_page"></a>GstTriggerControlSource</span></h2>
-<p>GstTriggerControlSource — interpolation control source</p>
+<p>GstTriggerControlSource — trigger control source</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index e48d521..6b06a1b 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -124,6 +124,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstAdapter.html#gst-adapter-take-buffer-list" title="gst_adapter_take_buffer_list ()">gst_adapter_take_buffer_list</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstAdapter.html#gst-adapter-take-list" title="gst_adapter_take_list ()">gst_adapter_take_list</a>, function in <a class="link" href="GstAdapter.html" title="GstAdapter">GstAdapter</a>
 </dt>
 <dd></dd>
@@ -865,10 +869,18 @@
 </dt>
 <dd></dd>
 <dt>
+gst_buffer_add_net_control_message_meta, function in GstNetControlMessageMeta
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstNetAddressMeta.html#gst-buffer-get-net-address-meta" title="gst_buffer_get_net_address_meta()">gst_buffer_get_net_address_meta</a>, macro in <a class="link" href="gstreamer-libs-GstNetAddressMeta.html" title="GstNetAddressMeta">GstNetAddressMeta</a>
 </dt>
 <dd></dd>
 <dt>
+gst_buffer_get_net_control_message_meta, macro in GstNetControlMessageMeta
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()">gst_buffer_straw_get_buffer</a>, function in <a class="link" href="gstreamer-libs-GstBufferStraw.html" title="GstBufferStraw">GstBufferStraw</a>
 </dt>
 <dd></dd>
@@ -1049,6 +1061,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-sub-reader" title="gst_byte_reader_get_sub_reader ()">gst_byte_reader_get_sub_reader</a>, function in <a class="link" href="gstreamer-libs-GstByteReader.html" title="GstByteReader">GstByteReader</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-uint16-be" title="gst_byte_reader_get_uint16_be ()">gst_byte_reader_get_uint16_be</a>, function in <a class="link" href="gstreamer-libs-GstByteReader.html" title="GstByteReader">GstByteReader</a>
 </dt>
 <dd></dd>
@@ -1133,6 +1149,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-masked-scan-uint32-peek" title="gst_byte_reader_masked_scan_uint32_peek ()">gst_byte_reader_masked_scan_uint32_peek</a>, function in <a class="link" href="gstreamer-libs-GstByteReader.html" title="GstByteReader">GstByteReader</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-new" title="gst_byte_reader_new ()">gst_byte_reader_new</a>, function in <a class="link" href="gstreamer-libs-GstByteReader.html" title="GstByteReader">GstByteReader</a>
 </dt>
 <dd></dd>
@@ -1257,6 +1277,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-sub-reader" title="gst_byte_reader_peek_sub_reader ()">gst_byte_reader_peek_sub_reader</a>, function in <a class="link" href="gstreamer-libs-GstByteReader.html" title="GstByteReader">GstByteReader</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-uint16-be" title="gst_byte_reader_peek_uint16_be ()">gst_byte_reader_peek_uint16_be</a>, function in <a class="link" href="gstreamer-libs-GstByteReader.html" title="GstByteReader">GstByteReader</a>
 </dt>
 <dd></dd>
@@ -1670,6 +1694,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-libs-GstCheck.html#gst-check-objects-destroyed-on-unref" title="gst_check_objects_destroyed_on_unref ()">gst_check_objects_destroyed_on_unref</a>, function in <a class="link" href="gstreamer-libs-GstCheck.html" title="GstCheck">GstCheck</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-libs-GstCheck.html#gst-check-object-destroyed-on-unref" title="gst_check_object_destroyed_on_unref ()">gst_check_object_destroyed_on_unref</a>, function in <a class="link" href="gstreamer-libs-GstCheck.html" title="GstCheck">GstCheck</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-run-suite" title="gst_check_run_suite ()">gst_check_run_suite</a>, function in <a class="link" href="gstreamer-libs-GstCheck.html" title="GstCheck">GstCheck</a>
 </dt>
 <dd></dd>
@@ -2049,6 +2081,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-clear" title="gst_flow_combiner_clear ()">gst_flow_combiner_clear</a>, function in <a class="link" href="gstreamer-libs-GstFlowCombiner.html" title="GstFlowCombiner">GstFlowCombiner</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-free" title="gst_flow_combiner_free ()">gst_flow_combiner_free</a>, function in <a class="link" href="gstreamer-libs-GstFlowCombiner.html" title="GstFlowCombiner">GstFlowCombiner</a>
 </dt>
 <dd></dd>
@@ -2128,6 +2164,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstNetClientClock.html#GstNetClientClock--bus" title="The “bus” property">GstNetClientClock:bus</a>, object property in <a class="link" href="GstNetClientClock.html" title="GstNetClientClock">GstNetClientClock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstNetClientClock.html#GstNetClientClock--minimum-update-interval" title="The “minimum-update-interval” property">GstNetClientClock:minimum-update-interval</a>, object property in <a class="link" href="GstNetClientClock.html" title="GstNetClientClock">GstNetClientClock</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstNetClientClock.html#GstNetClientClock--port" title="The “port” property">GstNetClientClock:port</a>, object property in <a class="link" href="GstNetClientClock.html" title="GstNetClientClock">GstNetClientClock</a>
 </dt>
 <dd></dd>
@@ -2136,6 +2180,10 @@
 </dt>
 <dd></dd>
 <dt>
+GstNetControlMessageMeta, struct in GstNetControlMessageMeta
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstNetTimePacket.html#GstNetTimePacket" title="struct GstNetTimePacket">GstNetTimePacket</a>, struct in <a class="link" href="gstreamer-libs-GstNetTimePacket.html" title="GstNetTimePacket">GstNetTimePacket</a>
 </dt>
 <dd></dd>
@@ -2168,6 +2216,10 @@
 </dt>
 <dd></dd>
 <dt>
+gst_net_control_message_meta_get_info, function in GstNetControlMessageMeta
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-libs-GstNetTimePacket.html#gst-net-time-packet-copy" title="gst_net_time_packet_copy ()">gst_net_time_packet_copy</a>, function in <a class="link" href="gstreamer-libs-GstNetTimePacket.html" title="GstNetTimePacket">GstNetTimePacket</a>
 </dt>
 <dd></dd>
@@ -2332,6 +2384,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-value-added" title="The “value-added” signal">GstTimedValueControlSource::value-added</a>, object signal in <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-value-changed" title="The “value-changed” signal">GstTimedValueControlSource::value-changed</a>, object signal in <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-value-removed" title="The “value-removed” signal">GstTimedValueControlSource::value-removed</a>, object signal in <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-invalidate-cache" title="gst_timed_value_control_invalidate_cache ()">gst_timed_value_control_invalidate_cache</a>, function in <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
 </dt>
 <dd></dd>
diff --git a/docs/libs/html/gstreamer-control.html b/docs/libs/html/gstreamer-control.html
index e87d873..42a3ea0 100644
--- a/docs/libs/html/gstreamer-control.html
+++ b/docs/libs/html/gstreamer-control.html
@@ -39,7 +39,7 @@
 <span class="refentrytitle"><a href="GstLFOControlSource.html">GstLFOControlSource</a></span><span class="refpurpose"> — LFO control source</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstTriggerControlSource.html">GstTriggerControlSource</a></span><span class="refpurpose"> — interpolation control source</span>
+<span class="refentrytitle"><a href="GstTriggerControlSource.html">GstTriggerControlSource</a></span><span class="refpurpose"> — trigger control source</span>
 </dt>
 </dl></div>
 <p>
diff --git a/docs/libs/html/gstreamer-libs-1.0.devhelp2 b/docs/libs/html/gstreamer-libs-1.0.devhelp2
index 66e6997..fe829d4 100644
--- a/docs/libs/html/gstreamer-libs-1.0.devhelp2
+++ b/docs/libs/html/gstreamer-libs-1.0.devhelp2
@@ -195,6 +195,7 @@
     <keyword type="function" name="gst_adapter_take_buffer ()" link="GstAdapter.html#gst-adapter-take-buffer"/>
     <keyword type="function" name="gst_adapter_take_buffer_fast ()" link="GstAdapter.html#gst-adapter-take-buffer-fast" since="1.2"/>
     <keyword type="function" name="gst_adapter_take_list ()" link="GstAdapter.html#gst-adapter-take-list"/>
+    <keyword type="function" name="gst_adapter_take_buffer_list ()" link="GstAdapter.html#gst-adapter-take-buffer-list" since="1.6"/>
     <keyword type="function" name="gst_adapter_prev_pts ()" link="GstAdapter.html#gst-adapter-prev-pts"/>
     <keyword type="function" name="gst_adapter_prev_dts ()" link="GstAdapter.html#gst-adapter-prev-dts"/>
     <keyword type="function" name="gst_adapter_prev_pts_at_offset ()" link="GstAdapter.html#gst-adapter-prev-pts-at-offset" since="1.2"/>
@@ -235,6 +236,8 @@
     <keyword type="function" name="gst_byte_reader_new ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-new"/>
     <keyword type="function" name="gst_byte_reader_free ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-free"/>
     <keyword type="function" name="gst_byte_reader_init ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-init"/>
+    <keyword type="function" name="gst_byte_reader_peek_sub_reader ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-sub-reader" since="1.6"/>
+    <keyword type="function" name="gst_byte_reader_get_sub_reader ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-sub-reader" since="1.6"/>
     <keyword type="function" name="gst_byte_reader_get_pos ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-pos"/>
     <keyword type="function" name="gst_byte_reader_get_remaining ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-remaining"/>
     <keyword type="function" name="gst_byte_reader_set_pos ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-set-pos"/>
@@ -288,6 +291,7 @@
     <keyword type="function" name="gst_byte_reader_dup_data ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-dup-data"/>
     <keyword type="function" name="gst_byte_reader_peek_data ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-data"/>
     <keyword type="function" name="gst_byte_reader_masked_scan_uint32 ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-masked-scan-uint32"/>
+    <keyword type="function" name="gst_byte_reader_masked_scan_uint32_peek ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-masked-scan-uint32-peek" since="1.6"/>
     <keyword type="macro" name="gst_byte_reader_get_string()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-string"/>
     <keyword type="function" name="gst_byte_reader_get_string_utf8 ()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-string-utf8"/>
     <keyword type="macro" name="gst_byte_reader_peek_string()" link="gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-string"/>
@@ -468,6 +472,7 @@
     <keyword type="function" name="gst_flow_combiner_update_flow ()" link="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-update-flow" since="1.4"/>
     <keyword type="function" name="gst_flow_combiner_add_pad ()" link="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-add-pad" since="1.4"/>
     <keyword type="function" name="gst_flow_combiner_remove_pad ()" link="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-remove-pad" since="1.4"/>
+    <keyword type="function" name="gst_flow_combiner_clear ()" link="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-clear" since="1.6"/>
     <keyword type="function" name="gst_type_find_helper ()" link="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper"/>
     <keyword type="function" name="gst_type_find_helper_for_buffer ()" link="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-buffer"/>
     <keyword type="function" name="gst_type_find_helper_for_extension ()" link="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-extension"/>
@@ -518,6 +523,9 @@
     <keyword type="function" name="gst_timed_value_control_source_get_count ()" link="GstTimedValueControlSource.html#gst-timed-value-control-source-get-count"/>
     <keyword type="function" name="gst_timed_value_control_invalidate_cache ()" link="GstTimedValueControlSource.html#gst-timed-value-control-invalidate-cache"/>
     <keyword type="struct" name="struct GstTimedValueControlSource" link="GstTimedValueControlSource.html#GstTimedValueControlSource-struct"/>
+    <keyword type="signal" name="The “value-added” signal" link="GstTimedValueControlSource.html#GstTimedValueControlSource-value-added"/>
+    <keyword type="signal" name="The “value-changed” signal" link="GstTimedValueControlSource.html#GstTimedValueControlSource-value-changed"/>
+    <keyword type="signal" name="The “value-removed” signal" link="GstTimedValueControlSource.html#GstTimedValueControlSource-value-removed"/>
     <keyword type="function" name="gst_interpolation_control_source_new ()" link="GstInterpolationControlSource.html#gst-interpolation-control-source-new"/>
     <keyword type="struct" name="struct GstInterpolationControlSource" link="GstInterpolationControlSource.html#GstInterpolationControlSource-struct"/>
     <keyword type="enum" name="enum GstInterpolationMode" link="GstInterpolationControlSource.html#GstInterpolationMode"/>
@@ -541,6 +549,8 @@
     <keyword type="function" name="gst_net_client_clock_new ()" link="GstNetClientClock.html#gst-net-client-clock-new"/>
     <keyword type="struct" name="struct GstNetClientClock" link="GstNetClientClock.html#GstNetClientClock-struct"/>
     <keyword type="property" name="The “address” property" link="GstNetClientClock.html#GstNetClientClock--address"/>
+    <keyword type="property" name="The “bus” property" link="GstNetClientClock.html#GstNetClientClock--bus"/>
+    <keyword type="property" name="The “minimum-update-interval” property" link="GstNetClientClock.html#GstNetClientClock--minimum-update-interval"/>
     <keyword type="property" name="The “port” property" link="GstNetClientClock.html#GstNetClientClock--port"/>
     <keyword type="property" name="The “round-trip-limit” property" link="GstNetClientClock.html#GstNetClientClock--round-trip-limit"/>
     <keyword type="function" name="gst_net_time_packet_new ()" link="gstreamer-libs-GstNetTimePacket.html#gst-net-time-packet-new"/>
@@ -609,6 +619,8 @@
     <keyword type="function" name="gst_check_setup_sink_pad_from_template ()" link="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad-from-template" since="1.4"/>
     <keyword type="function" name="gst_check_setup_src_pad_by_name_from_template ()" link="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-by-name-from-template" since="1.4"/>
     <keyword type="function" name="gst_check_setup_src_pad_from_template ()" link="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-from-template" since="1.4"/>
+    <keyword type="function" name="gst_check_objects_destroyed_on_unref ()" link="gstreamer-libs-GstCheck.html#gst-check-objects-destroyed-on-unref" since="1.6"/>
+    <keyword type="function" name="gst_check_object_destroyed_on_unref ()" link="gstreamer-libs-GstCheck.html#gst-check-object-destroyed-on-unref" since="1.6"/>
     <keyword type="macro" name="GST_END_TEST" link="gstreamer-libs-GstCheck.html#GST-END-TEST:CAPS"/>
     <keyword type="function" name="gst_buffer_straw_start_pipeline ()" link="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-start-pipeline"/>
     <keyword type="function" name="gst_buffer_straw_get_buffer ()" link="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer"/>
diff --git a/docs/libs/html/gstreamer-libs-GstByteReader.html b/docs/libs/html/gstreamer-libs-GstByteReader.html
index 4e03826..0a5fc83 100644
--- a/docs/libs/html/gstreamer-libs-GstByteReader.html
+++ b/docs/libs/html/gstreamer-libs-GstByteReader.html
@@ -72,6 +72,22 @@
 </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="gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-sub-reader" title="gst_byte_reader_peek_sub_reader ()">gst_byte_reader_peek_sub_reader</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="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-sub-reader" title="gst_byte_reader_get_sub_reader ()">gst_byte_reader_get_sub_reader</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
 </td>
 <td class="function_name">
@@ -495,6 +511,14 @@
 </td>
 </tr>
 <tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-masked-scan-uint32-peek" title="gst_byte_reader_masked_scan_uint32_peek ()">gst_byte_reader_masked_scan_uint32_peek</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
 <td class="define_keyword">#define</td>
 <td class="function_name">
 <a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-string" title="gst_byte_reader_get_string()">gst_byte_reader_get_string</a><span class="c_punctuation">()</span>
@@ -1132,12 +1156,119 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-byte-reader-peek-sub-reader"></a><h3>gst_byte_reader_peek_sub_reader ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_peek_sub_reader (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                 <em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *sub_reader</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
+<p>Initializes a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> sub-reader instance to contain <em class="parameter"><code>size</code></em>
+ bytes of
+data from the current position of <em class="parameter"><code>reader</code></em>
+. This is useful to read chunked
+formats and make sure that one doesn't read beyond the size of the sub-chunk.</p>
+<p>Unlike <a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-get-sub-reader" title="gst_byte_reader_get_sub_reader ()"><code class="function">gst_byte_reader_get_sub_reader()</code></a>, this function does not modify the
+current position of <em class="parameter"><code>reader</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.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>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>an existing and initialized <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sub_reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance to initialize as sub-reader</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>size of <em class="parameter"><code>sub_reader</code></em>
+in bytes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.6.7"></a><h4>Returns</h4>
+<p> FALSE on error or if <em class="parameter"><code>reader</code></em>
+does not contain <em class="parameter"><code>size</code></em>
+more bytes from
+the current position, and otherwise TRUE</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-get-sub-reader"></a><h3>gst_byte_reader_get_sub_reader ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_get_sub_reader (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *sub_reader</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
+<p>Initializes a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> sub-reader instance to contain <em class="parameter"><code>size</code></em>
+ bytes of
+data from the current position of <em class="parameter"><code>reader</code></em>
+. This is useful to read chunked
+formats and make sure that one doesn't read beyond the size of the sub-chunk.</p>
+<p>Unlike <a class="link" href="gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-sub-reader" title="gst_byte_reader_peek_sub_reader ()"><code class="function">gst_byte_reader_peek_sub_reader()</code></a>, this function also modifies the
+position of <em class="parameter"><code>reader</code></em>
+ and moves it forward by <em class="parameter"><code>size</code></em>
+ bytes.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.7.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>an existing and initialized <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sub_reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance to initialize as sub-reader</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>size of <em class="parameter"><code>sub_reader</code></em>
+in bytes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.7.7"></a><h4>Returns</h4>
+<p> FALSE on error or if <em class="parameter"><code>reader</code></em>
+does not contain <em class="parameter"><code>size</code></em>
+more bytes from
+the current position, and otherwise TRUE</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-byte-reader-get-pos"></a><h3>gst_byte_reader_get_pos ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
 gst_byte_reader_get_pos (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
 <p>Returns the current position of a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance in bytes.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1152,7 +1283,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.8.6"></a><h4>Returns</h4>
 <p> The current position of <em class="parameter"><code>reader</code></em>
 in bytes.</p>
 <p></p>
@@ -1165,7 +1296,7 @@
 gst_byte_reader_get_remaining (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
 <p>Returns the remaining number of bytes of a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1180,7 +1311,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.9.6"></a><h4>Returns</h4>
 <p> The remaining number of bytes of <em class="parameter"><code>reader</code></em>
 instance.</p>
 <p></p>
@@ -1195,7 +1326,7 @@
 <p>Sets the new position of a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance to <em class="parameter"><code>pos</code></em>
  in bytes.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1217,7 +1348,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.10.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the position could be set successfully, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
 otherwise.</p>
 <p></p>
@@ -1230,7 +1361,7 @@
 gst_byte_reader_get_size (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
 <p>Returns the total number of bytes of a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1245,7 +1376,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.11.6"></a><h4>Returns</h4>
 <p> The total number of bytes of <em class="parameter"><code>reader</code></em>
 instance.</p>
 <p></p>
@@ -1260,7 +1391,7 @@
 <p>Skips <em class="parameter"><code>nbytes</code></em>
  bytes of the <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1282,7 +1413,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.12.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>nbytes</code></em>
 bytes could be skipped, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
@@ -1297,7 +1428,7 @@
 <p>Read a signed 8 bit integer into <em class="parameter"><code>val</code></em>
  and update the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1319,7 +1450,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.13.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -1334,80 +1465,6 @@
 
 and update the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.12.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.12.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-get-int16-le"></a><h3>gst_byte_reader_get_int16_le ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_int16_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                              <em class="parameter"><code><span class="type">gint16</span> *val</code></em>);</pre>
-<p>Read a signed 16 bit little endian integer into <em class="parameter"><code>val</code></em>
-
-and update the current position.</p>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.13.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.13.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-get-int24-be"></a><h3>gst_byte_reader_get_int24_be ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_int24_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                              <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 24 bit big endian integer into <em class="parameter"><code>val</code></em>
-
-and update the current position.</p>
-<div class="refsect3">
 <a name="id-1.2.4.10.7.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1423,7 +1480,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -1437,11 +1494,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int24-le"></a><h3>gst_byte_reader_get_int24_le ()</h3>
+<a name="gst-byte-reader-get-int16-le"></a><h3>gst_byte_reader_get_int16_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_int24_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                              <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 24 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_int16_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                              <em class="parameter"><code><span class="type">gint16</span> *val</code></em>);</pre>
+<p>Read a signed 16 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1460,7 +1517,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -1474,11 +1531,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int32-be"></a><h3>gst_byte_reader_get_int32_be ()</h3>
+<a name="gst-byte-reader-get-int24-be"></a><h3>gst_byte_reader_get_int24_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_int32_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_get_int24_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                               <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 32 bit big endian integer into <em class="parameter"><code>val</code></em>
+<p>Read a signed 24 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1511,11 +1568,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int32-le"></a><h3>gst_byte_reader_get_int32_le ()</h3>
+<a name="gst-byte-reader-get-int24-le"></a><h3>gst_byte_reader_get_int24_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_int32_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_get_int24_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                               <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 32 bit little endian integer into <em class="parameter"><code>val</code></em>
+<p>Read a signed 24 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1548,11 +1605,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int64-be"></a><h3>gst_byte_reader_get_int64_be ()</h3>
+<a name="gst-byte-reader-get-int32-be"></a><h3>gst_byte_reader_get_int32_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_int64_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                              <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
-<p>Read a signed 64 bit big endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_int32_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                              <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
+<p>Read a signed 32 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1571,7 +1628,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint64</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -1585,11 +1642,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int64-le"></a><h3>gst_byte_reader_get_int64_le ()</h3>
+<a name="gst-byte-reader-get-int32-le"></a><h3>gst_byte_reader_get_int32_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_int64_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                              <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
-<p>Read a signed 64 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_int32_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                              <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
+<p>Read a signed 32 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1608,6 +1665,43 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.19.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-get-int64-be"></a><h3>gst_byte_reader_get_int64_be ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_get_int64_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                              <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
+<p>Read a signed 64 bit big endian integer into <em class="parameter"><code>val</code></em>
+
+and update the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.20.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
 <td class="parameter_description"><p> Pointer to a <span class="type">gint64</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
@@ -1615,7 +1709,44 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.19.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.20.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-get-int64-le"></a><h3>gst_byte_reader_get_int64_le ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_get_int64_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                              <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
+<p>Read a signed 64 bit little endian integer into <em class="parameter"><code>val</code></em>
+
+and update the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.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>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint64</span> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.21.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -1629,7 +1760,7 @@
 <p>Read an unsigned 8 bit integer into <em class="parameter"><code>val</code></em>
  and update the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1651,7 +1782,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.22.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -1666,80 +1797,6 @@
 
 and update the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.21.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-get-uint16-le"></a><h3>gst_byte_reader_get_uint16_le ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_uint16_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">guint16</span> *val</code></em>);</pre>
-<p>Read an unsigned 16 bit little endian integer into <em class="parameter"><code>val</code></em>
-
-and update the current position.</p>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.22.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.22.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-get-uint24-be"></a><h3>gst_byte_reader_get_uint24_be ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_uint24_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 24 bit big endian integer into <em class="parameter"><code>val</code></em>
-
-and update the current position.</p>
-<div class="refsect3">
 <a name="id-1.2.4.10.7.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1755,7 +1812,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -1769,11 +1826,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint24-le"></a><h3>gst_byte_reader_get_uint24_le ()</h3>
+<a name="gst-byte-reader-get-uint16-le"></a><h3>gst_byte_reader_get_uint16_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_uint24_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 24 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_uint16_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">guint16</span> *val</code></em>);</pre>
+<p>Read an unsigned 16 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1792,7 +1849,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -1806,11 +1863,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint32-be"></a><h3>gst_byte_reader_get_uint32_be ()</h3>
+<a name="gst-byte-reader-get-uint24-be"></a><h3>gst_byte_reader_get_uint24_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_uint32_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_get_uint24_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                                <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 32 bit big endian integer into <em class="parameter"><code>val</code></em>
+<p>Read an unsigned 24 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1843,11 +1900,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint32-le"></a><h3>gst_byte_reader_get_uint32_le ()</h3>
+<a name="gst-byte-reader-get-uint24-le"></a><h3>gst_byte_reader_get_uint24_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_uint32_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_get_uint24_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                                <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 32 bit little endian integer into <em class="parameter"><code>val</code></em>
+<p>Read an unsigned 24 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1880,11 +1937,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint64-be"></a><h3>gst_byte_reader_get_uint64_be ()</h3>
+<a name="gst-byte-reader-get-uint32-be"></a><h3>gst_byte_reader_get_uint32_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_uint64_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
-<p>Read an unsigned 64 bit big endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_uint32_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
+<p>Read an unsigned 32 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1903,7 +1960,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint64</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -1917,11 +1974,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint64-le"></a><h3>gst_byte_reader_get_uint64_le ()</h3>
+<a name="gst-byte-reader-get-uint32-le"></a><h3>gst_byte_reader_get_uint32_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_uint64_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
-<p>Read an unsigned 64 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_uint32_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
+<p>Read an unsigned 32 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -1940,6 +1997,43 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.28.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-get-uint64-be"></a><h3>gst_byte_reader_get_uint64_be ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_get_uint64_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
+<p>Read an unsigned 64 bit big endian integer into <em class="parameter"><code>val</code></em>
+
+and update the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.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>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
 <td class="parameter_description"><p> Pointer to a <span class="type">guint64</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
@@ -1947,7 +2041,44 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.28.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.29.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 successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-get-uint64-le"></a><h3>gst_byte_reader_get_uint64_le ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_get_uint64_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
+<p>Read an unsigned 64 bit little endian integer into <em class="parameter"><code>val</code></em>
+
+and update the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.30.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint64</span> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.30.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 successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -1961,7 +2092,7 @@
 <p>Read a signed 8 bit integer into <em class="parameter"><code>val</code></em>
  but keep the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.29.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1983,7 +2114,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.29.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.31.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -1998,80 +2129,6 @@
 
 but keep the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.30.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.30.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 successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-peek-int16-le"></a><h3>gst_byte_reader_peek_int16_le ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_int16_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">gint16</span> *val</code></em>);</pre>
-<p>Read a signed 16 bit little endian integer into <em class="parameter"><code>val</code></em>
-
-but keep the current position.</p>
-<div class="refsect3">
-<a name="id-1.2.4.10.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.31.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-peek-int24-be"></a><h3>gst_byte_reader_peek_int24_be ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_int24_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 24 bit big endian integer into <em class="parameter"><code>val</code></em>
-
-but keep the current position.</p>
-<div class="refsect3">
 <a name="id-1.2.4.10.7.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -2087,7 +2144,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2101,11 +2158,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int24-le"></a><h3>gst_byte_reader_peek_int24_le ()</h3>
+<a name="gst-byte-reader-peek-int16-le"></a><h3>gst_byte_reader_peek_int16_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_int24_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 24 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_int16_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">gint16</span> *val</code></em>);</pre>
+<p>Read a signed 16 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2124,7 +2181,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2138,11 +2195,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int32-be"></a><h3>gst_byte_reader_peek_int32_be ()</h3>
+<a name="gst-byte-reader-peek-int24-be"></a><h3>gst_byte_reader_peek_int24_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_int32_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_peek_int24_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                                <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 32 bit big endian integer into <em class="parameter"><code>val</code></em>
+<p>Read a signed 24 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2175,11 +2232,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int32-le"></a><h3>gst_byte_reader_peek_int32_le ()</h3>
+<a name="gst-byte-reader-peek-int24-le"></a><h3>gst_byte_reader_peek_int24_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_int32_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_peek_int24_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                                <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
-<p>Read a signed 32 bit little endian integer into <em class="parameter"><code>val</code></em>
+<p>Read a signed 24 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2212,11 +2269,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int64-be"></a><h3>gst_byte_reader_peek_int64_be ()</h3>
+<a name="gst-byte-reader-peek-int32-be"></a><h3>gst_byte_reader_peek_int32_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_int64_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
-<p>Read a signed 64 bit big endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_int32_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
+<p>Read a signed 32 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2235,7 +2292,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">gint64</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2249,11 +2306,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int64-le"></a><h3>gst_byte_reader_peek_int64_le ()</h3>
+<a name="gst-byte-reader-peek-int32-le"></a><h3>gst_byte_reader_peek_int32_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_int64_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                               <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
-<p>Read a signed 64 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_int32_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">gint32</span> *val</code></em>);</pre>
+<p>Read a signed 32 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2272,6 +2329,43 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint32</span> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.37.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-peek-int64-be"></a><h3>gst_byte_reader_peek_int64_be ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_peek_int64_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
+<p>Read a signed 64 bit big endian integer into <em class="parameter"><code>val</code></em>
+
+but keep the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.38.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
 <td class="parameter_description"><p> Pointer to a <span class="type">gint64</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
@@ -2279,7 +2373,44 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.37.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.38.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-peek-int64-le"></a><h3>gst_byte_reader_peek_int64_le ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_peek_int64_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                               <em class="parameter"><code><span class="type">gint64</span> *val</code></em>);</pre>
+<p>Read a signed 64 bit little endian integer into <em class="parameter"><code>val</code></em>
+
+but keep the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.39.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>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">gint64</span> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.39.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -2293,7 +2424,7 @@
 <p>Read an unsigned 8 bit integer into <em class="parameter"><code>val</code></em>
  but keep the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.38.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.40.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2315,7 +2446,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.38.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.40.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -2330,80 +2461,6 @@
 
 but keep the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.39.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.39.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-peek-uint16-le"></a><h3>gst_byte_reader_peek_uint16_le ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_uint16_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><span class="type">guint16</span> *val</code></em>);</pre>
-<p>Read an unsigned 16 bit little endian integer into <em class="parameter"><code>val</code></em>
-
-but keep the current position.</p>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.40.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.40.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-peek-uint24-be"></a><h3>gst_byte_reader_peek_uint24_be ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_uint24_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 24 bit big endian integer into <em class="parameter"><code>val</code></em>
-
-but keep the current position.</p>
-<div class="refsect3">
 <a name="id-1.2.4.10.7.41.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -2419,7 +2476,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2433,11 +2490,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint24-le"></a><h3>gst_byte_reader_peek_uint24_le ()</h3>
+<a name="gst-byte-reader-peek-uint16-le"></a><h3>gst_byte_reader_peek_uint16_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_uint24_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 24 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_uint16_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><span class="type">guint16</span> *val</code></em>);</pre>
+<p>Read an unsigned 16 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2456,7 +2513,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint16</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2470,11 +2527,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint32-be"></a><h3>gst_byte_reader_peek_uint32_be ()</h3>
+<a name="gst-byte-reader-peek-uint24-be"></a><h3>gst_byte_reader_peek_uint24_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_uint32_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_peek_uint24_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                                 <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 32 bit big endian integer into <em class="parameter"><code>val</code></em>
+<p>Read an unsigned 24 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2507,11 +2564,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint32-le"></a><h3>gst_byte_reader_peek_uint32_le ()</h3>
+<a name="gst-byte-reader-peek-uint24-le"></a><h3>gst_byte_reader_peek_uint24_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_uint32_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+gst_byte_reader_peek_uint24_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
                                 <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
-<p>Read an unsigned 32 bit little endian integer into <em class="parameter"><code>val</code></em>
+<p>Read an unsigned 24 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2544,11 +2601,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint64-be"></a><h3>gst_byte_reader_peek_uint64_be ()</h3>
+<a name="gst-byte-reader-peek-uint32-be"></a><h3>gst_byte_reader_peek_uint32_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_uint64_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
-<p>Read an unsigned 64 bit big endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_uint32_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
+<p>Read an unsigned 32 bit big endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2567,7 +2624,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint64</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2581,11 +2638,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint64-le"></a><h3>gst_byte_reader_peek_uint64_le ()</h3>
+<a name="gst-byte-reader-peek-uint32-le"></a><h3>gst_byte_reader_peek_uint32_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_uint64_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
-<p>Read an unsigned 64 bit little endian integer into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_uint32_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><span class="type">guint32</span> *val</code></em>);</pre>
+<p>Read an unsigned 32 bit little endian integer into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2604,7 +2661,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <span class="type">guint64</span> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint32</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2618,13 +2675,13 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float32-le"></a><h3>gst_byte_reader_get_float32_le ()</h3>
+<a name="gst-byte-reader-peek-uint64-be"></a><h3>gst_byte_reader_peek_uint64_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_float32_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
-<p>Read a 32 bit little endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_uint64_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
+<p>Read an unsigned 64 bit big endian integer into <em class="parameter"><code>val</code></em>
 
-and update the current position.</p>
+but keep the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2641,7 +2698,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint64</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2655,13 +2712,13 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float32-be"></a><h3>gst_byte_reader_get_float32_be ()</h3>
+<a name="gst-byte-reader-peek-uint64-le"></a><h3>gst_byte_reader_peek_uint64_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_float32_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
-<p>Read a 32 bit big endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_uint64_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><span class="type">guint64</span> *val</code></em>);</pre>
+<p>Read an unsigned 64 bit little endian integer into <em class="parameter"><code>val</code></em>
 
-and update the current position.</p>
+but keep the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2678,7 +2735,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <span class="type">guint64</span> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2692,11 +2749,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float64-le"></a><h3>gst_byte_reader_get_float64_le ()</h3>
+<a name="gst-byte-reader-get-float32-le"></a><h3>gst_byte_reader_get_float32_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_float64_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
-<p>Read a 64 bit little endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_float32_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
+<p>Read a 32 bit little endian floating point value into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -2715,7 +2772,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2729,11 +2786,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float64-be"></a><h3>gst_byte_reader_get_float64_be ()</h3>
+<a name="gst-byte-reader-get-float32-be"></a><h3>gst_byte_reader_get_float32_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_float64_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
-<p>Read a 64 bit big endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_float32_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
+<p>Read a 32 bit big endian floating point value into <em class="parameter"><code>val</code></em>
 
 and update the current position.</p>
 <div class="refsect3">
@@ -2752,7 +2809,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2766,13 +2823,13 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float32-le"></a><h3>gst_byte_reader_peek_float32_le ()</h3>
+<a name="gst-byte-reader-get-float64-le"></a><h3>gst_byte_reader_get_float64_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_float32_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
-<p>Read a 32 bit little endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_float64_le (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
+<p>Read a 64 bit little endian floating point value into <em class="parameter"><code>val</code></em>
 
-but keep the current position.</p>
+and update the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.51.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2789,7 +2846,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2803,13 +2860,13 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float32-be"></a><h3>gst_byte_reader_peek_float32_be ()</h3>
+<a name="gst-byte-reader-get-float64-be"></a><h3>gst_byte_reader_get_float64_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_float32_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
-<p>Read a 32 bit big endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_get_float64_be (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
+<p>Read a 64 bit big endian floating point value into <em class="parameter"><code>val</code></em>
 
-but keep the current position.</p>
+and update the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.52.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2826,7 +2883,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2840,11 +2897,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float64-le"></a><h3>gst_byte_reader_peek_float64_le ()</h3>
+<a name="gst-byte-reader-peek-float32-le"></a><h3>gst_byte_reader_peek_float32_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_float64_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
-<p>Read a 64 bit little endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_float32_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
+<p>Read a 32 bit little endian floating point value into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2863,7 +2920,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2877,11 +2934,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float64-be"></a><h3>gst_byte_reader_peek_float64_be ()</h3>
+<a name="gst-byte-reader-peek-float32-be"></a><h3>gst_byte_reader_peek_float32_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_float64_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
-<p>Read a 64 bit big endian floating point value into <em class="parameter"><code>val</code></em>
+gst_byte_reader_peek_float32_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> *val</code></em>);</pre>
+<p>Read a 32 bit big endian floating point value into <em class="parameter"><code>val</code></em>
 
 but keep the current position.</p>
 <div class="refsect3">
@@ -2900,7 +2957,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> to store the result. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
@@ -2914,15 +2971,13 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-data"></a><h3>gst_byte_reader_get_data ()</h3>
+<a name="gst-byte-reader-peek-float64-le"></a><h3>gst_byte_reader_peek_float64_le ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_get_data (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
-                          <em class="parameter"><code>const <span class="type">guint8</span> **val</code></em>);</pre>
-<p>Returns a constant pointer to the current data
-position if at least <em class="parameter"><code>size</code></em>
- bytes are left and
-updates the current position.</p>
+gst_byte_reader_peek_float64_le (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
+<p>Read a 64 bit little endian floating point value into <em class="parameter"><code>val</code></em>
+
+but keep the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.55.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2938,15 +2993,9 @@
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
-<td class="parameter_name"><p>size</p></td>
-<td class="parameter_description"><p>Size in bytes</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> address of a
-<span class="type">guint8</span> pointer variable in which to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -2959,18 +3008,15 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-dup-data"></a><h3>gst_byte_reader_dup_data ()</h3>
+<a name="gst-byte-reader-peek-float64-be"></a><h3>gst_byte_reader_peek_float64_be ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_dup_data (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
-                          <em class="parameter"><code><span class="type">guint8</span> **val</code></em>);</pre>
-<p>Free-function: g_free</p>
-<p>Returns a newly-allocated copy of the current data
-position if at least <em class="parameter"><code>size</code></em>
- bytes are left and
-updates the current position. Free with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when no longer needed.</p>
+gst_byte_reader_peek_float64_be (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *val</code></em>);</pre>
+<p>Read a 64 bit big endian floating point value into <em class="parameter"><code>val</code></em>
+
+but keep the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.56.6"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.56.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2984,36 +3030,30 @@
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
-<td class="parameter_name"><p>size</p></td>
-<td class="parameter_description"><p>Size in bytes</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
 <td class="parameter_name"><p>val</p></td>
-<td class="parameter_description"><p> address of a
-<span class="type">guint8</span> pointer variable in which to store the result. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></td>
+<td class="parameter_description"><p> Pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.56.7"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.56.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 successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-data"></a><h3>gst_byte_reader_peek_data ()</h3>
+<a name="gst-byte-reader-get-data"></a><h3>gst_byte_reader_get_data ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_byte_reader_peek_data (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
-                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
-                           <em class="parameter"><code>const <span class="type">guint8</span> **val</code></em>);</pre>
+gst_byte_reader_get_data (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                          <em class="parameter"><code>const <span class="type">guint8</span> **val</code></em>);</pre>
 <p>Returns a constant pointer to the current data
 position if at least <em class="parameter"><code>size</code></em>
  bytes are left and
-keeps the current position.</p>
+updates the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.57.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -3050,6 +3090,97 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-byte-reader-dup-data"></a><h3>gst_byte_reader_dup_data ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_dup_data (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                          <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                          <em class="parameter"><code><span class="type">guint8</span> **val</code></em>);</pre>
+<p>Free-function: g_free</p>
+<p>Returns a newly-allocated copy of the current data
+position if at least <em class="parameter"><code>size</code></em>
+ bytes are left and
+updates the current position. Free with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when no longer needed.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.58.6"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>Size in bytes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> address of a
+<span class="type">guint8</span> pointer variable in which to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.58.7"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-peek-data"></a><h3>gst_byte_reader_peek_data ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_byte_reader_peek_data (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                           <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                           <em class="parameter"><code>const <span class="type">guint8</span> **val</code></em>);</pre>
+<p>Returns a constant pointer to the current data
+position if at least <em class="parameter"><code>size</code></em>
+ bytes are left and
+keeps the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.59.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>Size in bytes</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p> address of a
+<span class="type">guint8</span> pointer variable in which to store the result. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.59.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 successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-byte-reader-masked-scan-uint32"></a><h3>gst_byte_reader_masked_scan_uint32 ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
 gst_byte_reader_masked_scan_uint32 (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
@@ -3071,7 +3202,7 @@
 <p>It is an error to call this function without making sure that there is
 enough data (offset+size bytes) in the byte reader.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.58.7"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.60.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3110,7 +3241,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.58.8"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.60.8"></a><h4>Returns</h4>
 <p> offset of the first match, or -1 if no match was found.</p>
 <p>Example:</p>
 <pre class="programlisting">
@@ -3135,6 +3266,81 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-byte-reader-masked-scan-uint32-peek"></a><h3>gst_byte_reader_masked_scan_uint32_peek ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_byte_reader_masked_scan_uint32_peek
+                               (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>,
+                                <em class="parameter"><code><span class="type">guint32</span> mask</code></em>,
+                                <em class="parameter"><code><span class="type">guint32</span> pattern</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> offset</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
+                                <em class="parameter"><code><span class="type">guint32</span> *value</code></em>);</pre>
+<p>Scan for pattern <em class="parameter"><code>pattern</code></em>
+ with applied mask <em class="parameter"><code>mask</code></em>
+ in the byte reader data,
+starting from offset <em class="parameter"><code>offset</code></em>
+ relative to the current position.</p>
+<p>The bytes in <em class="parameter"><code>pattern</code></em>
+ and <em class="parameter"><code>mask</code></em>
+ are interpreted left-to-right, regardless
+of endianness.  All four bytes of the pattern must be present in the
+byte reader data for it to match, even if the first or last bytes are masked
+out.</p>
+<p>It is an error to call this function without making sure that there is
+enough data (offset+size bytes) in the byte reader.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.61.7"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mask</p></td>
+<td class="parameter_description"><p>mask to apply to data before matching against <em class="parameter"><code>pattern</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pattern</p></td>
+<td class="parameter_description"><p>pattern to match (after mask is applied)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>offset from which to start scanning, relative to the current
+position</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>number of bytes to scan from offset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>pointer to uint32 to return matching data</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.61.8"></a><h4>Returns</h4>
+<p> offset of the first match, or -1 if no match was found.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-byte-reader-get-string"></a><h3>gst_byte_reader_get_string()</h3>
 <pre class="programlisting">#define             gst_byte_reader_get_string(reader,str)</pre>
 </div>
@@ -3152,7 +3358,7 @@
 <p>No input checking for valid UTF-8 is done.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.60.7"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.63.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3175,7 +3381,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.60.8"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.63.8"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be found, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -3191,7 +3397,7 @@
 UTF-8, ISO-8859-N etc.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.61.6"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.64.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3214,7 +3420,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.61.7"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.64.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be skipped, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -3233,7 +3439,7 @@
 <p>No input checking for valid UTF-8 is done.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.62.7"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.65.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3256,7 +3462,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.62.8"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.65.8"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be skipped, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -3279,7 +3485,7 @@
 UTF-8, ISO-8859-N etc. No input checking for valid UTF-8 is done.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.64.7"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.67.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3302,7 +3508,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.64.8"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.67.8"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be read into <em class="parameter"><code>str</code></em>
 , <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise. The
 string put into <em class="parameter"><code>str</code></em>
@@ -3327,7 +3533,7 @@
 <p>Note: there is no peek or get variant of this function to ensure correct
 byte alignment of the UTF-16 string.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.65.9"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.68.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3350,7 +3556,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.65.10"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.68.10"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be read, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise. The
 string put into <em class="parameter"><code>str</code></em>
 must be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when no longer needed.</p>
@@ -3374,7 +3580,7 @@
 <p>Note: there is no peek or get variant of this function to ensure correct
 byte alignment of the UTF-32 string.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.66.9"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.69.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3397,7 +3603,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.66.10"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.69.10"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be read, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise. The
 string put into <em class="parameter"><code>str</code></em>
 must be freed with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when no longer needed.</p>
@@ -3414,7 +3620,7 @@
 UTF-8, ISO-8859-N etc.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.67.6"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.70.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3429,7 +3635,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.67.7"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.70.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be skipped, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -3445,7 +3651,7 @@
 UTF-8, ISO-8859-N etc. No input checking for valid UTF-8 is done.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.68.6"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.71.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3460,7 +3666,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.68.7"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.71.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be skipped, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -3475,7 +3681,7 @@
 <p>No input checking for valid UTF-16 is done.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.69.7"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.72.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3490,7 +3696,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.69.8"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.72.8"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be skipped, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -3505,7 +3711,7 @@
 <p>No input checking for valid UTF-32 is done.</p>
 <p>This function will fail if no NUL-terminator was found in in the data.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.70.7"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.73.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3520,7 +3726,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.70.8"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.73.8"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if a string could be skipped, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
 </div>
@@ -3535,7 +3741,7 @@
  bytes of the <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance without checking if
 there are enough bytes available in the byte reader.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.71.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.74.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3565,96 +3771,6 @@
 <p>Read an signed 8 bit integer without checking if there are enough bytes
 available in the byte reader and update the current position.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.72.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.72.6"></a><h4>Returns</h4>
-<p> signed 8 bit integer.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-get-int16-be-unchecked"></a><h3>gst_byte_reader_get_int16_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint16</span>
-gst_byte_reader_get_int16_be_unchecked
-                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 16 bit integer in big endian format without checking
-if there are enough bytes available in the byte reader and update the
-current position.</p>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.73.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.73.6"></a><h4>Returns</h4>
-<p> signed 16 bit integer.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-get-int16-le-unchecked"></a><h3>gst_byte_reader_get_int16_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint16</span>
-gst_byte_reader_get_int16_le_unchecked
-                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 16 bit integer in little endian format without checking
-if there are enough bytes available in the byte reader and update the
-current position.</p>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.74.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>reader</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.10.7.74.6"></a><h4>Returns</h4>
-<p> signed 16 bit integer.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-byte-reader-get-int24-be-unchecked"></a><h3>gst_byte_reader_get_int24_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_get_int24_be_unchecked
-                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 24 bit integer in big endian format without checking
-if there are enough bytes available in the byte reader and update the
-current position.</p>
-<div class="refsect3">
 <a name="id-1.2.4.10.7.75.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -3671,17 +3787,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.75.6"></a><h4>Returns</h4>
-<p> signed 24 bit integer (as gint32)</p>
+<p> signed 8 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int24-le-unchecked"></a><h3>gst_byte_reader_get_int24_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_get_int24_le_unchecked
+<a name="gst-byte-reader-get-int16-be-unchecked"></a><h3>gst_byte_reader_get_int16_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint16</span>
+gst_byte_reader_get_int16_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 24 bit integer in little endian format without checking
+<p>Read a signed 16 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3701,17 +3817,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.76.6"></a><h4>Returns</h4>
-<p> signed 24 bit integer (as gint32)</p>
+<p> signed 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int32-be-unchecked"></a><h3>gst_byte_reader_get_int32_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_get_int32_be_unchecked
+<a name="gst-byte-reader-get-int16-le-unchecked"></a><h3>gst_byte_reader_get_int16_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint16</span>
+gst_byte_reader_get_int16_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 32 bit integer in big endian format without checking
+<p>Read a signed 16 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3731,17 +3847,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.77.6"></a><h4>Returns</h4>
-<p> signed 32 bit integer.</p>
+<p> signed 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int32-le-unchecked"></a><h3>gst_byte_reader_get_int32_le_unchecked ()</h3>
+<a name="gst-byte-reader-get-int24-be-unchecked"></a><h3>gst_byte_reader_get_int24_be_unchecked ()</h3>
 <pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_get_int32_le_unchecked
+gst_byte_reader_get_int24_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 32 bit integer in little endian format without checking
+<p>Read a signed 24 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3761,17 +3877,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.78.6"></a><h4>Returns</h4>
-<p> signed 32 bit integer.</p>
+<p> signed 24 bit integer (as gint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int64-be-unchecked"></a><h3>gst_byte_reader_get_int64_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint64</span>
-gst_byte_reader_get_int64_be_unchecked
+<a name="gst-byte-reader-get-int24-le-unchecked"></a><h3>gst_byte_reader_get_int24_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint32</span>
+gst_byte_reader_get_int24_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 64 bit integer in big endian format without checking
+<p>Read a signed 24 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3791,17 +3907,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.79.6"></a><h4>Returns</h4>
-<p> signed 64 bit integer.</p>
+<p> signed 24 bit integer (as gint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-int64-le-unchecked"></a><h3>gst_byte_reader_get_int64_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint64</span>
-gst_byte_reader_get_int64_le_unchecked
+<a name="gst-byte-reader-get-int32-be-unchecked"></a><h3>gst_byte_reader_get_int32_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint32</span>
+gst_byte_reader_get_int32_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 64 bit integer in little endian format without checking
+<p>Read a signed 32 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3821,17 +3937,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.80.6"></a><h4>Returns</h4>
-<p> signed 64 bit integer.</p>
+<p> signed 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint8-unchecked"></a><h3>gst_byte_reader_get_uint8_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint8</span>
-gst_byte_reader_get_uint8_unchecked (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 8 bit integer without checking if there are enough bytes
-available in the byte reader and update the current position.</p>
+<a name="gst-byte-reader-get-int32-le-unchecked"></a><h3>gst_byte_reader_get_int32_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint32</span>
+gst_byte_reader_get_int32_le_unchecked
+                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read a signed 32 bit integer in little endian format without checking
+if there are enough bytes available in the byte reader and update the
+current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.81.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -3849,17 +3967,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.81.6"></a><h4>Returns</h4>
-<p> unsigned 8 bit integer.</p>
+<p> signed 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint16-be-unchecked"></a><h3>gst_byte_reader_get_uint16_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint16</span>
-gst_byte_reader_get_uint16_be_unchecked
+<a name="gst-byte-reader-get-int64-be-unchecked"></a><h3>gst_byte_reader_get_int64_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint64</span>
+gst_byte_reader_get_int64_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 16 bit integer in big endian format without checking
+<p>Read a signed 64 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3879,17 +3997,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.82.6"></a><h4>Returns</h4>
-<p> unsigned 16 bit integer.</p>
+<p> signed 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint16-le-unchecked"></a><h3>gst_byte_reader_get_uint16_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint16</span>
-gst_byte_reader_get_uint16_le_unchecked
+<a name="gst-byte-reader-get-int64-le-unchecked"></a><h3>gst_byte_reader_get_int64_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint64</span>
+gst_byte_reader_get_int64_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 16 bit integer in little endian format without checking
+<p>Read a signed 64 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3909,19 +4027,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.83.6"></a><h4>Returns</h4>
-<p> unsigned 16 bit integer.</p>
+<p> signed 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint24-be-unchecked"></a><h3>gst_byte_reader_get_uint24_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_get_uint24_be_unchecked
-                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 24 bit integer in big endian format without checking
-if there are enough bytes available in the byte reader and update the
-current position.</p>
+<a name="gst-byte-reader-get-uint8-unchecked"></a><h3>gst_byte_reader_get_uint8_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint8</span>
+gst_byte_reader_get_uint8_unchecked (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read an unsigned 8 bit integer without checking if there are enough bytes
+available in the byte reader and update the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.84.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -3939,17 +4055,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.84.6"></a><h4>Returns</h4>
-<p> unsigned 24 bit integer (as guint32)</p>
+<p> unsigned 8 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint24-le-unchecked"></a><h3>gst_byte_reader_get_uint24_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_get_uint24_le_unchecked
+<a name="gst-byte-reader-get-uint16-be-unchecked"></a><h3>gst_byte_reader_get_uint16_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint16</span>
+gst_byte_reader_get_uint16_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 24 bit integer in little endian format without checking
+<p>Read an unsigned 16 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3969,17 +4085,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.85.6"></a><h4>Returns</h4>
-<p> unsigned 24 bit integer (as guint32)</p>
+<p> unsigned 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint32-be-unchecked"></a><h3>gst_byte_reader_get_uint32_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_get_uint32_be_unchecked
+<a name="gst-byte-reader-get-uint16-le-unchecked"></a><h3>gst_byte_reader_get_uint16_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint16</span>
+gst_byte_reader_get_uint16_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 32 bit integer in big endian format without checking
+<p>Read an unsigned 16 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -3999,17 +4115,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.86.6"></a><h4>Returns</h4>
-<p> unsigned 32 bit integer.</p>
+<p> unsigned 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint32-le-unchecked"></a><h3>gst_byte_reader_get_uint32_le_unchecked ()</h3>
+<a name="gst-byte-reader-get-uint24-be-unchecked"></a><h3>gst_byte_reader_get_uint24_be_unchecked ()</h3>
 <pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_get_uint32_le_unchecked
+gst_byte_reader_get_uint24_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 32 bit integer in little endian format without checking
+<p>Read an unsigned 24 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -4029,17 +4145,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.87.6"></a><h4>Returns</h4>
-<p> unsigned 32 bit integer.</p>
+<p> unsigned 24 bit integer (as guint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint64-be-unchecked"></a><h3>gst_byte_reader_get_uint64_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint64</span>
-gst_byte_reader_get_uint64_be_unchecked
+<a name="gst-byte-reader-get-uint24-le-unchecked"></a><h3>gst_byte_reader_get_uint24_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint32</span>
+gst_byte_reader_get_uint24_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 64 bit integer in big endian format without checking
+<p>Read an unsigned 24 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -4059,17 +4175,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.88.6"></a><h4>Returns</h4>
-<p> unsigned 64 bit integer.</p>
+<p> unsigned 24 bit integer (as guint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-uint64-le-unchecked"></a><h3>gst_byte_reader_get_uint64_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint64</span>
-gst_byte_reader_get_uint64_le_unchecked
+<a name="gst-byte-reader-get-uint32-be-unchecked"></a><h3>gst_byte_reader_get_uint32_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint32</span>
+gst_byte_reader_get_uint32_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 64 bit integer in little endian format without checking
+<p>Read an unsigned 32 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader and update the
 current position.</p>
 <div class="refsect3">
@@ -4089,17 +4205,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.89.6"></a><h4>Returns</h4>
-<p> unsigned 64 bit integer.</p>
+<p> unsigned 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int8-unchecked"></a><h3>gst_byte_reader_peek_int8_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint8</span>
-gst_byte_reader_peek_int8_unchecked (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an signed 8 bit integer without checking if there are enough bytes
-available in the byte reader, but do not advance the current read position.</p>
+<a name="gst-byte-reader-get-uint32-le-unchecked"></a><h3>gst_byte_reader_get_uint32_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint32</span>
+gst_byte_reader_get_uint32_le_unchecked
+                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read an unsigned 32 bit integer in little endian format without checking
+if there are enough bytes available in the byte reader and update the
+current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.90.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4117,19 +4235,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.90.6"></a><h4>Returns</h4>
-<p> signed 8 bit integer.</p>
+<p> unsigned 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int16-be-unchecked"></a><h3>gst_byte_reader_peek_int16_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint16</span>
-gst_byte_reader_peek_int16_be_unchecked
+<a name="gst-byte-reader-get-uint64-be-unchecked"></a><h3>gst_byte_reader_get_uint64_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint64</span>
+gst_byte_reader_get_uint64_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 16 bit integer in big endian format without checking
-if there are enough bytes available in the byte reader, but do not advance
-the current position.</p>
+<p>Read an unsigned 64 bit integer in big endian format without checking
+if there are enough bytes available in the byte reader and update the
+current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.91.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4147,19 +4265,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.91.6"></a><h4>Returns</h4>
-<p> signed 16 bit integer.</p>
+<p> unsigned 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int16-le-unchecked"></a><h3>gst_byte_reader_peek_int16_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint16</span>
-gst_byte_reader_peek_int16_le_unchecked
+<a name="gst-byte-reader-get-uint64-le-unchecked"></a><h3>gst_byte_reader_get_uint64_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint64</span>
+gst_byte_reader_get_uint64_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 16 bit integer in little endian format without checking
-if there are enough bytes available in the byte reader, but do not advance
-the current position.</p>
+<p>Read an unsigned 64 bit integer in little endian format without checking
+if there are enough bytes available in the byte reader and update the
+current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.92.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4177,19 +4295,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.92.6"></a><h4>Returns</h4>
-<p> signed 16 bit integer.</p>
+<p> unsigned 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int24-be-unchecked"></a><h3>gst_byte_reader_peek_int24_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_peek_int24_be_unchecked
-                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 24 bit integer in big endian format without checking
-if there are enough bytes available in the byte reader, but do not advance
-the current position.</p>
+<a name="gst-byte-reader-peek-int8-unchecked"></a><h3>gst_byte_reader_peek_int8_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint8</span>
+gst_byte_reader_peek_int8_unchecked (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read an signed 8 bit integer without checking if there are enough bytes
+available in the byte reader, but do not advance the current read position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.93.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4207,17 +4323,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.93.6"></a><h4>Returns</h4>
-<p> signed 24 bit integer (as gint32)</p>
+<p> signed 8 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int24-le-unchecked"></a><h3>gst_byte_reader_peek_int24_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_peek_int24_le_unchecked
+<a name="gst-byte-reader-peek-int16-be-unchecked"></a><h3>gst_byte_reader_peek_int16_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint16</span>
+gst_byte_reader_peek_int16_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 24 bit integer in little endian format without checking
+<p>Read a signed 16 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4237,17 +4353,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.94.6"></a><h4>Returns</h4>
-<p> signed 24 bit integer (as gint32)</p>
+<p> signed 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int32-be-unchecked"></a><h3>gst_byte_reader_peek_int32_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_peek_int32_be_unchecked
+<a name="gst-byte-reader-peek-int16-le-unchecked"></a><h3>gst_byte_reader_peek_int16_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint16</span>
+gst_byte_reader_peek_int16_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 32 bit integer in big endian format without checking
+<p>Read a signed 16 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4267,17 +4383,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.95.6"></a><h4>Returns</h4>
-<p> signed 32 bit integer.</p>
+<p> signed 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int32-le-unchecked"></a><h3>gst_byte_reader_peek_int32_le_unchecked ()</h3>
+<a name="gst-byte-reader-peek-int24-be-unchecked"></a><h3>gst_byte_reader_peek_int24_be_unchecked ()</h3>
 <pre class="programlisting"><span class="returnvalue">gint32</span>
-gst_byte_reader_peek_int32_le_unchecked
+gst_byte_reader_peek_int24_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 32 bit integer in little endian format without checking
+<p>Read a signed 24 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4297,17 +4413,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.96.6"></a><h4>Returns</h4>
-<p> signed 32 bit integer.</p>
+<p> signed 24 bit integer (as gint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int64-be-unchecked"></a><h3>gst_byte_reader_peek_int64_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint64</span>
-gst_byte_reader_peek_int64_be_unchecked
+<a name="gst-byte-reader-peek-int24-le-unchecked"></a><h3>gst_byte_reader_peek_int24_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint32</span>
+gst_byte_reader_peek_int24_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 64 bit integer in big endian format without checking
+<p>Read a signed 24 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4327,17 +4443,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.97.6"></a><h4>Returns</h4>
-<p> signed 64 bit integer.</p>
+<p> signed 24 bit integer (as gint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-int64-le-unchecked"></a><h3>gst_byte_reader_peek_int64_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">gint64</span>
-gst_byte_reader_peek_int64_le_unchecked
+<a name="gst-byte-reader-peek-int32-be-unchecked"></a><h3>gst_byte_reader_peek_int32_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint32</span>
+gst_byte_reader_peek_int32_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a signed 64 bit integer in little endian format without checking
+<p>Read a signed 32 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4357,17 +4473,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.98.6"></a><h4>Returns</h4>
-<p> signed 64 bit integer.</p>
+<p> signed 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint8-unchecked"></a><h3>gst_byte_reader_peek_uint8_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint8</span>
-gst_byte_reader_peek_uint8_unchecked (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 8 bit integer without checking if there are enough bytes
-available in the byte reader, but do not advance the current read position.</p>
+<a name="gst-byte-reader-peek-int32-le-unchecked"></a><h3>gst_byte_reader_peek_int32_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint32</span>
+gst_byte_reader_peek_int32_le_unchecked
+                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read a signed 32 bit integer in little endian format without checking
+if there are enough bytes available in the byte reader, but do not advance
+the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.99.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4385,17 +4503,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.99.6"></a><h4>Returns</h4>
-<p> unsigned 8 bit integer.</p>
+<p> signed 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint16-be-unchecked"></a><h3>gst_byte_reader_peek_uint16_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint16</span>
-gst_byte_reader_peek_uint16_be_unchecked
+<a name="gst-byte-reader-peek-int64-be-unchecked"></a><h3>gst_byte_reader_peek_int64_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint64</span>
+gst_byte_reader_peek_int64_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 16 bit integer in big endian format without checking
+<p>Read a signed 64 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4415,17 +4533,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.100.6"></a><h4>Returns</h4>
-<p> unsigned 16 bit integer.</p>
+<p> signed 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint16-le-unchecked"></a><h3>gst_byte_reader_peek_uint16_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint16</span>
-gst_byte_reader_peek_uint16_le_unchecked
+<a name="gst-byte-reader-peek-int64-le-unchecked"></a><h3>gst_byte_reader_peek_int64_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">gint64</span>
+gst_byte_reader_peek_int64_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 16 bit integer in little endian format without checking
+<p>Read a signed 64 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4445,19 +4563,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.101.6"></a><h4>Returns</h4>
-<p> unsigned 16 bit integer.</p>
+<p> signed 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint24-be-unchecked"></a><h3>gst_byte_reader_peek_uint24_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_peek_uint24_be_unchecked
-                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 24 bit integer in big endian format without checking
-if there are enough bytes available in the byte reader, but do not advance
-the current position.</p>
+<a name="gst-byte-reader-peek-uint8-unchecked"></a><h3>gst_byte_reader_peek_uint8_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint8</span>
+gst_byte_reader_peek_uint8_unchecked (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read an unsigned 8 bit integer without checking if there are enough bytes
+available in the byte reader, but do not advance the current read position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.102.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4475,17 +4591,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.102.6"></a><h4>Returns</h4>
-<p> unsigned 24 bit integer (as guint32)</p>
+<p> unsigned 8 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint24-le-unchecked"></a><h3>gst_byte_reader_peek_uint24_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_peek_uint24_le_unchecked
+<a name="gst-byte-reader-peek-uint16-be-unchecked"></a><h3>gst_byte_reader_peek_uint16_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint16</span>
+gst_byte_reader_peek_uint16_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 24 bit integer in little endian format without checking
+<p>Read an unsigned 16 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4505,17 +4621,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.103.6"></a><h4>Returns</h4>
-<p> unsigned 24 bit integer (as guint32)</p>
+<p> unsigned 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint32-be-unchecked"></a><h3>gst_byte_reader_peek_uint32_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_peek_uint32_be_unchecked
+<a name="gst-byte-reader-peek-uint16-le-unchecked"></a><h3>gst_byte_reader_peek_uint16_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint16</span>
+gst_byte_reader_peek_uint16_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 32 bit integer in big endian format without checking
+<p>Read an unsigned 16 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4535,17 +4651,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.104.6"></a><h4>Returns</h4>
-<p> unsigned 32 bit integer.</p>
+<p> unsigned 16 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint32-le-unchecked"></a><h3>gst_byte_reader_peek_uint32_le_unchecked ()</h3>
+<a name="gst-byte-reader-peek-uint24-be-unchecked"></a><h3>gst_byte_reader_peek_uint24_be_unchecked ()</h3>
 <pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_byte_reader_peek_uint32_le_unchecked
+gst_byte_reader_peek_uint24_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 32 bit integer in little endian format without checking
+<p>Read an unsigned 24 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4565,17 +4681,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.105.6"></a><h4>Returns</h4>
-<p> unsigned 32 bit integer.</p>
+<p> unsigned 24 bit integer (as guint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint64-be-unchecked"></a><h3>gst_byte_reader_peek_uint64_be_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint64</span>
-gst_byte_reader_peek_uint64_be_unchecked
+<a name="gst-byte-reader-peek-uint24-le-unchecked"></a><h3>gst_byte_reader_peek_uint24_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint32</span>
+gst_byte_reader_peek_uint24_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 64 bit integer in big endian format without checking
+<p>Read an unsigned 24 bit integer in little endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4595,17 +4711,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.106.6"></a><h4>Returns</h4>
-<p> unsigned 64 bit integer.</p>
+<p> unsigned 24 bit integer (as guint32)</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-uint64-le-unchecked"></a><h3>gst_byte_reader_peek_uint64_le_unchecked ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint64</span>
-gst_byte_reader_peek_uint64_le_unchecked
+<a name="gst-byte-reader-peek-uint32-be-unchecked"></a><h3>gst_byte_reader_peek_uint32_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint32</span>
+gst_byte_reader_peek_uint32_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read an unsigned 64 bit integer in little endian format without checking
+<p>Read an unsigned 32 bit integer in big endian format without checking
 if there are enough bytes available in the byte reader, but do not advance
 the current position.</p>
 <div class="refsect3">
@@ -4625,18 +4741,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.107.6"></a><h4>Returns</h4>
-<p> unsigned 64 bit integer.</p>
+<p> unsigned 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float32-le-unchecked"></a><h3>gst_byte_reader_get_float32_le_unchecked ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="returnvalue">gfloat</span></a>
-gst_byte_reader_get_float32_le_unchecked
+<a name="gst-byte-reader-peek-uint32-le-unchecked"></a><h3>gst_byte_reader_peek_uint32_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint32</span>
+gst_byte_reader_peek_uint32_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 32 bit little endian float without checking if there is enough
-data available and update the current position.</p>
+<p>Read an unsigned 32 bit integer in little endian format without checking
+if there are enough bytes available in the byte reader, but do not advance
+the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.108.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4654,18 +4771,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.108.6"></a><h4>Returns</h4>
-<p> floating point value read</p>
+<p> unsigned 32 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float32-be-unchecked"></a><h3>gst_byte_reader_get_float32_be_unchecked ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="returnvalue">gfloat</span></a>
-gst_byte_reader_get_float32_be_unchecked
+<a name="gst-byte-reader-peek-uint64-be-unchecked"></a><h3>gst_byte_reader_peek_uint64_be_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint64</span>
+gst_byte_reader_peek_uint64_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 32 bit big endian float without checking if there is enough
-data available and update the current position.</p>
+<p>Read an unsigned 64 bit integer in big endian format without checking
+if there are enough bytes available in the byte reader, but do not advance
+the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.109.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4683,18 +4801,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.109.6"></a><h4>Returns</h4>
-<p> floating point value read</p>
+<p> unsigned 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float64-le-unchecked"></a><h3>gst_byte_reader_get_float64_le_unchecked ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
-gst_byte_reader_get_float64_le_unchecked
+<a name="gst-byte-reader-peek-uint64-le-unchecked"></a><h3>gst_byte_reader_peek_uint64_le_unchecked ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint64</span>
+gst_byte_reader_peek_uint64_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 64 bit little endian float without checking if there is enough
-data available and update the current position.</p>
+<p>Read an unsigned 64 bit integer in little endian format without checking
+if there are enough bytes available in the byte reader, but do not advance
+the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.110.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4712,17 +4831,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.110.6"></a><h4>Returns</h4>
-<p> double precision floating point value read</p>
+<p> unsigned 64 bit integer.</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-get-float64-be-unchecked"></a><h3>gst_byte_reader_get_float64_be_unchecked ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
-gst_byte_reader_get_float64_be_unchecked
+<a name="gst-byte-reader-get-float32-le-unchecked"></a><h3>gst_byte_reader_get_float32_le_unchecked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="returnvalue">gfloat</span></a>
+gst_byte_reader_get_float32_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 64 bit big endian float without checking if there is enough
+<p>Read a 32 bit little endian float without checking if there is enough
 data available and update the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.111.5"></a><h4>Parameters</h4>
@@ -4741,18 +4860,18 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.111.6"></a><h4>Returns</h4>
-<p> double precision floating point value read</p>
+<p> floating point value read</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float32-le-unchecked"></a><h3>gst_byte_reader_peek_float32_le_unchecked ()</h3>
+<a name="gst-byte-reader-get-float32-be-unchecked"></a><h3>gst_byte_reader_get_float32_be_unchecked ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="returnvalue">gfloat</span></a>
-gst_byte_reader_peek_float32_le_unchecked
+gst_byte_reader_get_float32_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 32 bit little endian float without checking if there is enough
-data available, but keep the current position.</p>
+<p>Read a 32 bit big endian float without checking if there is enough
+data available and update the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.112.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4776,12 +4895,12 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float32-be-unchecked"></a><h3>gst_byte_reader_peek_float32_be_unchecked ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="returnvalue">gfloat</span></a>
-gst_byte_reader_peek_float32_be_unchecked
+<a name="gst-byte-reader-get-float64-le-unchecked"></a><h3>gst_byte_reader_get_float64_le_unchecked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_byte_reader_get_float64_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 32 bit big endian float without checking if there is enough
-data available, but keep the current position.</p>
+<p>Read a 64 bit little endian float without checking if there is enough
+data available and update the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.113.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4799,18 +4918,18 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.113.6"></a><h4>Returns</h4>
-<p> floating point value read</p>
+<p> double precision floating point value read</p>
 <p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float64-le-unchecked"></a><h3>gst_byte_reader_peek_float64_le_unchecked ()</h3>
+<a name="gst-byte-reader-get-float64-be-unchecked"></a><h3>gst_byte_reader_get_float64_be_unchecked ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
-gst_byte_reader_peek_float64_le_unchecked
+gst_byte_reader_get_float64_be_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 64 bit little endian float without checking if there is enough
-data available, but keep the current position.</p>
+<p>Read a 64 bit big endian float without checking if there is enough
+data available and update the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.114.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4834,11 +4953,11 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-byte-reader-peek-float64-be-unchecked"></a><h3>gst_byte_reader_peek_float64_be_unchecked ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
-gst_byte_reader_peek_float64_be_unchecked
+<a name="gst-byte-reader-peek-float32-le-unchecked"></a><h3>gst_byte_reader_peek_float32_le_unchecked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="returnvalue">gfloat</span></a>
+gst_byte_reader_peek_float32_le_unchecked
                                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
-<p>Read a 64 bit big endian float without checking if there is enough
+<p>Read a 32 bit little endian float without checking if there is enough
 data available, but keep the current position.</p>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.115.5"></a><h4>Parameters</h4>
@@ -4857,6 +4976,93 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.10.7.115.6"></a><h4>Returns</h4>
+<p> floating point value read</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-peek-float32-be-unchecked"></a><h3>gst_byte_reader_peek_float32_be_unchecked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="returnvalue">gfloat</span></a>
+gst_byte_reader_peek_float32_be_unchecked
+                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read a 32 bit big endian float without checking if there is enough
+data available, but keep the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.116.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.116.6"></a><h4>Returns</h4>
+<p> floating point value read</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-peek-float64-le-unchecked"></a><h3>gst_byte_reader_peek_float64_le_unchecked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_byte_reader_peek_float64_le_unchecked
+                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read a 64 bit little endian float without checking if there is enough
+data available, but keep the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.117.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>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.117.6"></a><h4>Returns</h4>
+<p> double precision floating point value read</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-byte-reader-peek-float64-be-unchecked"></a><h3>gst_byte_reader_peek_float64_be_unchecked ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_byte_reader_peek_float64_be_unchecked
+                               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
+<p>Read a 64 bit big endian float without checking if there is enough
+data available, but keep the current position.</p>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.118.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>reader</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> instance</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.10.7.118.6"></a><h4>Returns</h4>
 <p> double precision floating point value read</p>
 <p></p>
 </div>
@@ -4874,7 +5080,7 @@
  bytes.</p>
 <p>Free-function: g_free</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.116.6"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.119.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4896,7 +5102,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.116.7"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.119.7"></a><h4>Returns</h4>
 <p> a newly-allocated copy of the
 data <em class="parameter"><code>size</code></em>
 bytes in size. Free with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when no longer needed. </p>
@@ -4915,7 +5121,7 @@
 <em class="parameter"><code>size</code></em>
  bytes.</p>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.117.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.120.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4937,7 +5143,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.117.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.120.6"></a><h4>Returns</h4>
 <p> a constant pointer to the
 current data position. </p>
 <p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size]</span></p>
@@ -4949,7 +5155,7 @@
 <pre class="programlisting">const <span class="returnvalue">guint8</span> *
 gst_byte_reader_peek_data_unchecked (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteReader.html#GstByteReader" title="GstByteReader"><span class="type">GstByteReader</span></a> *reader</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.118.4"></a><h4>Parameters</h4>
+<a name="id-1.2.4.10.7.121.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4964,7 +5170,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.10.7.118.5"></a><h4>Returns</h4>
+<a name="id-1.2.4.10.7.121.5"></a><h4>Returns</h4>
 <p> a constant pointer to the current data position. </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>
diff --git a/docs/libs/html/gstreamer-libs-GstByteWriter.html b/docs/libs/html/gstreamer-libs-GstByteWriter.html
index dfd4ccb..c04e184 100644
--- a/docs/libs/html/gstreamer-libs-GstByteWriter.html
+++ b/docs/libs/html/gstreamer-libs-GstByteWriter.html
@@ -1172,8 +1172,7 @@
 gst_byte_writer_put_int8 (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>,
                           <em class="parameter"><code><span class="type">gint8</span> val</code></em>);</pre>
 <p>Writes a signed 8 bit integer to <em class="parameter"><code>writer</code></em>
- without
-checking if there is enough free space available in the byte writer.</p>
+.</p>
 <div class="refsect3">
 <a name="id-1.2.4.11.7.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1196,6 +1195,11 @@
 </tbody>
 </table></div>
 </div>
+<div class="refsect3">
+<a name="id-1.2.4.11.7.19.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the value could be written</p>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
diff --git a/docs/libs/html/gstreamer-libs-GstCheck.html b/docs/libs/html/gstreamer-libs-GstCheck.html
index 680955d..a824fe5 100644
--- a/docs/libs/html/gstreamer-libs-GstCheck.html
+++ b/docs/libs/html/gstreamer-libs-GstCheck.html
@@ -397,6 +397,22 @@
 <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-from-template" title="gst_check_setup_src_pad_from_template ()">gst_check_setup_src_pad_from_template</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="gstreamer-libs-GstCheck.html#gst-check-objects-destroyed-on-unref" title="gst_check_objects_destroyed_on_unref ()">gst_check_objects_destroyed_on_unref</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="gstreamer-libs-GstCheck.html#gst-check-object-destroyed-on-unref" title="gst_check_object_destroyed_on_unref ()">gst_check_object_destroyed_on_unref</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -422,9 +438,9 @@
 <a name="gstreamer-libs-GstCheck.description"></a><h2>Description</h2>
 <p>These macros and functions are for internal use of the unit tests found
 inside the 'check' directories of various GStreamer packages.</p>
-<p>One notable feature is that one can use the environment variables GST_CHECK
-and GST_CHECK_IGNORE to select which tests to run or skip. Both variables
-can contain a comman separated list of test name globs (e.g. test_*).</p>
+<p>One notable feature is that one can use the environment variables GST_CHECKS
+and GST_CHECKS_IGNORE to select which tests to run or skip. Both variables
+can contain a comma separated list of test name globs (e.g. test_*).</p>
 </div>
 <div class="refsect1">
 <a name="gstreamer-libs-GstCheck.functions_details"></a><h2>Functions</h2>
@@ -1141,8 +1157,9 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *
 gst_check_setup_sink_pad (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
                           <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
+<p>Does the same as <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad-by-name" title="gst_check_setup_sink_pad_by_name ()"><span class="type">gst_check_setup_sink_pad_by_name</span></a> with the <span class="emphasis"><em> name </em></span> parameter equal to "src".</p>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.34.4"></a><h4>Parameters</h4>
+<a name="id-1.2.7.3.7.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1164,8 +1181,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.34.5"></a><h4>Returns</h4>
-<p> a new pad. </p>
+<a name="id-1.2.7.3.7.34.6"></a><h4>Returns</h4>
+<p> a new pad that can be used to check the output of <em class="parameter"><code>element</code></em>
+. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
 </div>
@@ -1175,8 +1193,9 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *
 gst_check_setup_src_pad (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
                          <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
+<p>Does the same as <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-by-name" title="gst_check_setup_src_pad_by_name ()"><span class="type">gst_check_setup_src_pad_by_name</span></a> with the <span class="emphasis"><em> name </em></span> parameter equal to "sink".</p>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.35.4"></a><h4>Parameters</h4>
+<a name="id-1.2.7.3.7.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1198,8 +1217,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.35.5"></a><h4>Returns</h4>
-<p> a new pad. </p>
+<a name="id-1.2.7.3.7.35.6"></a><h4>Returns</h4>
+<p> A new pad that can be used to inject data on <em class="parameter"><code>element</code></em>
+. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
 </div>
@@ -1210,8 +1230,15 @@
 gst_check_setup_sink_pad_by_name (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
                                   <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
                                   <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Creates a new sink pad (based on the given <em class="parameter"><code>tmpl</code></em>
+) and links it to the given <em class="parameter"><code>element</code></em>
+ src pad 
+(the pad that matches the given <em class="parameter"><code>name</code></em>
+).
+You can set event/chain/query functions on this pad to check the output of the <em class="parameter"><code>element</code></em>
+.</p>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.36.4"></a><h4>Parameters</h4>
+<a name="id-1.2.7.3.7.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1231,15 +1258,17 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>name</p></td>
+<td class="parameter_description"><p>Name of the <em class="parameter"><code>element</code></em>
+src pad that will be linked to the sink pad that will be setup</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.36.5"></a><h4>Returns</h4>
-<p> a new pad. </p>
+<a name="id-1.2.7.3.7.36.6"></a><h4>Returns</h4>
+<p> a new pad that can be used to check the output of <em class="parameter"><code>element</code></em>
+. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
 </div>
@@ -1250,8 +1279,75 @@
 gst_check_setup_src_pad_by_name (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
                                  <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Creates a new src pad (based on the given <em class="parameter"><code>tmpl</code></em>
+) and links it to the given <em class="parameter"><code>element</code></em>
+ sink pad (the pad that matches the given <em class="parameter"><code>name</code></em>
+).
+Before using the src pad to push data on <em class="parameter"><code>element</code></em>
+ you need to call <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-events" title="gst_check_setup_events ()"><span class="type">gst_check_setup_events</span></a> on the created src pad.</p>
+<p>Example of how to push a buffer on <em class="parameter"><code>element</code></em>
+:</p>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24</pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static</span> GstStaticPadTemplate sinktemplate <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GST-STATIC-PAD-TEMPLATE:CAPS">GST_STATIC_PAD_TEMPLATE</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;sink&quot;</span><span class="gtkdoc opt">,</span>
+GST_PAD_SINK<span class="gtkdoc opt">,</span>
+GST_PAD_ALWAYS<span class="gtkdoc opt">,</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#GST-STATIC-CAPS">GST_STATIC_CAPS</a></span> <span class="gtkdoc opt">(</span>YOUR_CAPS_TEMPLATE_STRING<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">);</span>
+<span class="gtkdoc kwb">static</span> GstStaticPadTemplate srctemplate <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GST-STATIC-PAD-TEMPLATE:CAPS">GST_STATIC_PAD_TEMPLATE</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;src&quot;</span><span class="gtkdoc opt">,</span>
+GST_PAD_SRC<span class="gtkdoc opt">,</span>
+GST_PAD_ALWAYS<span class="gtkdoc opt">,</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#GST-STATIC-CAPS">GST_STATIC_CAPS</a></span> <span class="gtkdoc opt">(</span>YOUR_CAPS_TEMPLATE_STRING<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">);</span>
+
+GstElement <span class="gtkdoc opt">*</span> element <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstCheck.html#gst-check-setup-element">gst_check_setup_element</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;element&quot;</span><span class="gtkdoc opt">);</span>
+GstPad <span class="gtkdoc opt">*</span> mysrcpad <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstCheck.html#gst-check-setup-src-pad">gst_check_setup_src_pad</a></span> <span class="gtkdoc opt">(</span>element<span class="gtkdoc opt">, &amp;</span>srctemplate<span class="gtkdoc opt">);</span>
+GstPad <span class="gtkdoc opt">*</span> mysinkpad <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad">gst_check_setup_sink_pad</a></span> <span class="gtkdoc opt">(</span>element<span class="gtkdoc opt">, &amp;</span>sinktemplate<span class="gtkdoc opt">);</span>
+
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-set-active">gst_pad_set_active</a></span> <span class="gtkdoc opt">(</span>mysrcpad<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-set-active">gst_pad_set_active</a></span> <span class="gtkdoc opt">(</span>mysinkpad<span class="gtkdoc opt">,</span> TRUE<span class="gtkdoc opt">);</span>
+<span class="function">fail_unless</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-set-state">gst_element_set_state</a></span> <span class="gtkdoc opt">(</span>element<span class="gtkdoc opt">,</span> GST_STATE_PLAYING<span class="gtkdoc opt">) ==</span> GST_STATE_CHANGE_SUCCESS<span class="gtkdoc opt">,</span> <span class="string">&quot;could not set to playing&quot;</span><span class="gtkdoc opt">);</span>
+
+GstCaps <span class="gtkdoc opt">*</span> caps <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-from-string">gst_caps_from_string</a></span> <span class="gtkdoc opt">(</span>YOUR_DESIRED_SINK_CAPS<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstCheck.html#gst-check-setup-events">gst_check_setup_events</a></span> <span class="gtkdoc opt">(</span>mysrcpad<span class="gtkdoc opt">,</span> element<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">,</span> GST_FORMAT_TIME<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref">gst_caps_unref</a></span> <span class="gtkdoc opt">(</span>caps<span class="gtkdoc opt">);</span>
+
+<span class="function">fail_unless</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-push">gst_pad_push</a></span> <span class="gtkdoc opt">(</span>mysrcpad<span class="gtkdoc opt">,</span> <span class="function">gst_buffer_new_and_alloc</span><span class="gtkdoc opt">(</span><span class="number">2</span><span class="gtkdoc opt">)) ==</span> GST_FLOW_OK<span class="gtkdoc opt">);</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p></p>
+<p>For very simple input/output test scenarios checkout <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-element-push-buffer-list" title="gst_check_element_push_buffer_list ()"><span class="type">gst_check_element_push_buffer_list</span></a> and <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-element-push-buffer" title="gst_check_element_push_buffer ()"><span class="type">gst_check_element_push_buffer</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.37.4"></a><h4>Parameters</h4>
+<a name="id-1.2.7.3.7.37.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1261,7 +1357,7 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>element</p></td>
-<td class="parameter_description"><p>element to setup pad on</p></td>
+<td class="parameter_description"><p>element to setup src pad on</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
@@ -1271,15 +1367,17 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>name</p></td>
+<td class="parameter_description"><p>Name of the <em class="parameter"><code>element</code></em>
+sink pad that will be linked to the src pad that will be setup</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.3.7.37.5"></a><h4>Returns</h4>
-<p> a new pad. </p>
+<a name="id-1.2.7.3.7.37.10"></a><h4>Returns</h4>
+<p> A new pad that can be used to inject data on <em class="parameter"><code>element</code></em>
+. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
 </div>
@@ -1765,6 +1863,75 @@
 </div>
 <p class="since">Since 1.4</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-check-objects-destroyed-on-unref"></a><h3>gst_check_objects_destroyed_on_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_check_objects_destroyed_on_unref (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> object_to_unref</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> first_object</code></em>,
+                                      <em class="parameter"><code>...</code></em>);</pre>
+<p>Unrefs <em class="parameter"><code>object_to_unref</code></em>
+ and checks that is has properly been
+destroyed, also checks that the other objects passed in
+parametter have been destroyed as a concequence of
+unrefing <em class="parameter"><code>object_to_unref</code></em>
+. Last variable argument should be NULL.</p>
+<div class="refsect3">
+<a name="id-1.2.7.3.7.54.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>object_to_unref</p></td>
+<td class="parameter_description"><p>The <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to unref</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>first_object</p></td>
+<td class="parameter_description"><p> The first object that should be destroyed as a
+concequence of unrefing <em class="parameter"><code>object_to_unref</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>Additional object that should have been destroyed.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-check-object-destroyed-on-unref"></a><h3>gst_check_object_destroyed_on_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_check_object_destroyed_on_unref (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> object_to_unref</code></em>);</pre>
+<p>Unrefs <em class="parameter"><code>object_to_unref</code></em>
+ and checks that is has properly been
+destroyed.</p>
+<div class="refsect3">
+<a name="id-1.2.7.3.7.55.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>object_to_unref</p></td>
+<td class="parameter_description"><p>The <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to unref</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gstreamer-libs-GstCheck.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/libs/html/gstreamer-libs-GstDataQueue.html b/docs/libs/html/gstreamer-libs-GstDataQueue.html
index c33b5e3..bc8c7c0 100644
--- a/docs/libs/html/gstreamer-libs-GstDataQueue.html
+++ b/docs/libs/html/gstreamer-libs-GstDataQueue.html
@@ -273,12 +273,12 @@
                     <em class="parameter"><code><a class="link" href="gstreamer-libs-GstDataQueue.html#GstDataQueueFullCallback" title="GstDataQueueFullCallback ()"><span class="type">GstDataQueueFullCallback</span></a> fullcallback</code></em>,
                     <em class="parameter"><code><a class="link" href="gstreamer-libs-GstDataQueue.html#GstDataQueueEmptyCallback" title="GstDataQueueEmptyCallback ()"><span class="type">GstDataQueueEmptyCallback</span></a> emptycallback</code></em>,
                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> checkdata</code></em>);</pre>
-<p>Creates a new <a class="link" href="gstreamer-libs-GstDataQueue.html#GstDataQueue" title="struct GstDataQueue"><span class="type">GstDataQueue</span></a>. The difference with <em class="parameter"><code>gst_data_queue_new</code></em>
- is that it will
-not emit the 'full' and 'empty' signals, but instead calling directly <em class="parameter"><code>fullcallback</code></em>
-
-or <em class="parameter"><code>emptycallback</code></em>
-.</p>
+<p>Creates a new <a class="link" href="gstreamer-libs-GstDataQueue.html#GstDataQueue" title="struct GstDataQueue"><span class="type">GstDataQueue</span></a>. If <em class="parameter"><code>fullcallback</code></em>
+ or <em class="parameter"><code>emptycallback</code></em>
+ are supplied, then
+the <a class="link" href="gstreamer-libs-GstDataQueue.html#GstDataQueue" title="struct GstDataQueue"><span class="type">GstDataQueue</span></a> will call the respective callback to signal full or empty condition.
+If the callbacks are NULL the <a class="link" href="gstreamer-libs-GstDataQueue.html#GstDataQueue" title="struct GstDataQueue"><span class="type">GstDataQueue</span></a> will instead emit 'full' and 'empty'
+signals.</p>
 <div class="refsect3">
 <a name="id-1.2.4.15.7.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
diff --git a/docs/libs/html/gstreamer-libs-GstFlowCombiner.html b/docs/libs/html/gstreamer-libs-GstFlowCombiner.html
index 47c320b..1623e1f 100644
--- a/docs/libs/html/gstreamer-libs-GstFlowCombiner.html
+++ b/docs/libs/html/gstreamer-libs-GstFlowCombiner.html
@@ -79,6 +79,14 @@
 <a class="link" href="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-remove-pad" title="gst_flow_combiner_remove_pad ()">gst_flow_combiner_remove_pad</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="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-clear" title="gst_flow_combiner_clear ()">gst_flow_combiner_clear</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -100,9 +108,7 @@
 <p>In case you want a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> to be removed, use <a class="link" href="gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-remove-pad" title="gst_flow_combiner_remove_pad ()"><code class="function">gst_flow_combiner_remove_pad()</code></a>.</p>
 <p>Please be aware that this struct isn't thread safe as its designed to be
  used by demuxers, those usually will have a single thread operating it.</p>
-<p>None of these functions will take refs on the passed <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>s, it
-is the caller's responsibility to make sure that the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> exists as long
-as this struct exists.</p>
+<p>These functions will take refs on the passed <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>s.</p>
 <p>Aside from reducing the user's code size, the main advantage of using this
 helper struct is to follow the standard rules for <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> combination.
 These rules are:</p>
@@ -161,7 +167,7 @@
 gst_flow_combiner_update_flow (<em class="parameter"><code><span class="type">GstFlowCombiner</span> *combiner</code></em>,
                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> fret</code></em>);</pre>
 <p>Computes the combined flow return for the pads in it.</p>
-<p>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> paramter should be the last flow return update for a pad
+<p>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> parameter should be the last flow return update for a pad
 in this <span class="type">GstFlowCombiner</span>. It will use this value to be able to shortcut some
 combinations and avoid looking over all pads again. e.g. The last combined
 return is the same as the latest obtained <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</p>
@@ -256,6 +262,29 @@
 </div>
 <p class="since">Since 1.4</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-flow-combiner-clear"></a><h3>gst_flow_combiner_clear ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_flow_combiner_clear (<em class="parameter"><code><span class="type">GstFlowCombiner</span> *combiner</code></em>);</pre>
+<p>Removes all pads from a <span class="type">GstFlowCombiner</span> and resets it to its initial state.</p>
+<div class="refsect3">
+<a name="id-1.2.4.13.6.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>combiner</p></td>
+<td class="parameter_description"><p>the <span class="type">GstFlowCombiner</span> to clear</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gstreamer-libs-GstFlowCombiner.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/libs/html/gstreamer-libs.html b/docs/libs/html/gstreamer-libs.html
index fa27430..1c7844b 100644
--- a/docs/libs/html/gstreamer-libs.html
+++ b/docs/libs/html/gstreamer-libs.html
@@ -90,7 +90,7 @@
 <span class="refentrytitle"><a href="GstLFOControlSource.html">GstLFOControlSource</a></span><span class="refpurpose"> — LFO control source</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstTriggerControlSource.html">GstTriggerControlSource</a></span><span class="refpurpose"> — interpolation control source</span>
+<span class="refentrytitle"><a href="GstTriggerControlSource.html">GstTriggerControlSource</a></span><span class="refpurpose"> — trigger control source</span>
 </dt>
 </dl></dd>
 <dt><span class="chapter"><a href="gstreamer-net.html">GStreamer Network Classes</a></span></dt>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index 27d8b0e..e890dc1 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 1.0 Library Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Library 1.0 (1.4.5)
+      for GStreamer Library 1.0 (1.5.0.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/gstreamer-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/</a>.
     </p></div>
@@ -90,7 +90,7 @@
 <span class="refentrytitle"><a href="GstLFOControlSource.html">GstLFOControlSource</a></span><span class="refpurpose"> — LFO control source</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstTriggerControlSource.html">GstTriggerControlSource</a></span><span class="refpurpose"> — interpolation control source</span>
+<span class="refentrytitle"><a href="GstTriggerControlSource.html">GstTriggerControlSource</a></span><span class="refpurpose"> — trigger control source</span>
 </dt>
 </dl></dd>
 <dt><span class="chapter"><a href="gstreamer-net.html">GStreamer Network Classes</a></span></dt>
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index df8cfa0..905e164 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -204,6 +204,7 @@
 <ANCHOR id="gst-adapter-take-buffer" href="gstreamer-libs-1.0/GstAdapter.html#gst-adapter-take-buffer">
 <ANCHOR id="gst-adapter-take-buffer-fast" href="gstreamer-libs-1.0/GstAdapter.html#gst-adapter-take-buffer-fast">
 <ANCHOR id="gst-adapter-take-list" href="gstreamer-libs-1.0/GstAdapter.html#gst-adapter-take-list">
+<ANCHOR id="gst-adapter-take-buffer-list" href="gstreamer-libs-1.0/GstAdapter.html#gst-adapter-take-buffer-list">
 <ANCHOR id="gst-adapter-prev-pts" href="gstreamer-libs-1.0/GstAdapter.html#gst-adapter-prev-pts">
 <ANCHOR id="gst-adapter-prev-dts" href="gstreamer-libs-1.0/GstAdapter.html#gst-adapter-prev-dts">
 <ANCHOR id="gst-adapter-prev-pts-at-offset" href="gstreamer-libs-1.0/GstAdapter.html#gst-adapter-prev-pts-at-offset">
@@ -258,6 +259,8 @@
 <ANCHOR id="gst-byte-reader-new" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-new">
 <ANCHOR id="gst-byte-reader-free" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-free">
 <ANCHOR id="gst-byte-reader-init" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-init">
+<ANCHOR id="gst-byte-reader-peek-sub-reader" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-sub-reader">
+<ANCHOR id="gst-byte-reader-get-sub-reader" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-get-sub-reader">
 <ANCHOR id="gst-byte-reader-get-pos" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-get-pos">
 <ANCHOR id="gst-byte-reader-get-remaining" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-get-remaining">
 <ANCHOR id="gst-byte-reader-set-pos" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-set-pos">
@@ -311,6 +314,7 @@
 <ANCHOR id="gst-byte-reader-dup-data" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-dup-data">
 <ANCHOR id="gst-byte-reader-peek-data" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-data">
 <ANCHOR id="gst-byte-reader-masked-scan-uint32" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-masked-scan-uint32">
+<ANCHOR id="gst-byte-reader-masked-scan-uint32-peek" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-masked-scan-uint32-peek">
 <ANCHOR id="gst-byte-reader-get-string" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-get-string">
 <ANCHOR id="gst-byte-reader-get-string-utf8" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-get-string-utf8">
 <ANCHOR id="gst-byte-reader-peek-string" href="gstreamer-libs-1.0/gstreamer-libs-GstByteReader.html#gst-byte-reader-peek-string">
@@ -512,6 +516,7 @@
 <ANCHOR id="gst-flow-combiner-update-flow" href="gstreamer-libs-1.0/gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-update-flow">
 <ANCHOR id="gst-flow-combiner-add-pad" href="gstreamer-libs-1.0/gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-add-pad">
 <ANCHOR id="gst-flow-combiner-remove-pad" href="gstreamer-libs-1.0/gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-remove-pad">
+<ANCHOR id="gst-flow-combiner-clear" href="gstreamer-libs-1.0/gstreamer-libs-GstFlowCombiner.html#gst-flow-combiner-clear">
 <ANCHOR id="gstreamer-libs-GstFlowCombiner.other_details" href="gstreamer-libs-1.0/gstreamer-libs-GstFlowCombiner.html#gstreamer-libs-GstFlowCombiner.other_details">
 <ANCHOR id="gstreamer-libs-GstTypeFindHelper" href="gstreamer-libs-1.0/gstreamer-libs-GstTypeFindHelper.html">
 <ANCHOR id="gstreamer-libs-GstTypeFindHelper.functions" href="gstreamer-libs-1.0/gstreamer-libs-GstTypeFindHelper.html#gstreamer-libs-GstTypeFindHelper.functions">
@@ -594,6 +599,7 @@
 <ANCHOR id="GstDirectControlBinding--control-source" href="gstreamer-libs-1.0/GstDirectControlBinding.html#GstDirectControlBinding--control-source">
 <ANCHOR id="GstTimedValueControlSource" href="gstreamer-libs-1.0/GstTimedValueControlSource.html">
 <ANCHOR id="GstTimedValueControlSource.functions" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource.functions">
+<ANCHOR id="GstTimedValueControlSource.signals" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource.signals">
 <ANCHOR id="GstTimedValueControlSource.other" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource.other">
 <ANCHOR id="GstTimedValueControlSource.object-hierarchy" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource.object-hierarchy">
 <ANCHOR id="GstTimedValueControlSource.includes" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource.includes">
@@ -609,6 +615,10 @@
 <ANCHOR id="gst-timed-value-control-invalidate-cache" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#gst-timed-value-control-invalidate-cache">
 <ANCHOR id="GstTimedValueControlSource.other_details" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource.other_details">
 <ANCHOR id="GstTimedValueControlSource-struct" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource-struct">
+<ANCHOR id="GstTimedValueControlSource.signal-details" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource.signal-details">
+<ANCHOR id="GstTimedValueControlSource-value-added" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource-value-added">
+<ANCHOR id="GstTimedValueControlSource-value-changed" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource-value-changed">
+<ANCHOR id="GstTimedValueControlSource-value-removed" href="gstreamer-libs-1.0/GstTimedValueControlSource.html#GstTimedValueControlSource-value-removed">
 <ANCHOR id="GstInterpolationControlSource" href="gstreamer-libs-1.0/GstInterpolationControlSource.html">
 <ANCHOR id="GstInterpolationControlSource.functions" href="gstreamer-libs-1.0/GstInterpolationControlSource.html#GstInterpolationControlSource.functions">
 <ANCHOR id="GstInterpolationControlSource.properties" href="gstreamer-libs-1.0/GstInterpolationControlSource.html#GstInterpolationControlSource.properties">
@@ -679,6 +689,8 @@
 <ANCHOR id="GstNetClientClock-struct" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock-struct">
 <ANCHOR id="GstNetClientClock.property-details" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock.property-details">
 <ANCHOR id="GstNetClientClock--address" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock--address">
+<ANCHOR id="GstNetClientClock--bus" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock--bus">
+<ANCHOR id="GstNetClientClock--minimum-update-interval" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock--minimum-update-interval">
 <ANCHOR id="GstNetClientClock--port" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock--port">
 <ANCHOR id="GstNetClientClock--round-trip-limit" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock--round-trip-limit">
 <ANCHOR id="GstNetClientClock.see-also" href="gstreamer-libs-1.0/GstNetClientClock.html#GstNetClientClock.see-also">
@@ -773,6 +785,8 @@
 <ANCHOR id="gst-check-setup-sink-pad-from-template" href="gstreamer-libs-1.0/gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad-from-template">
 <ANCHOR id="gst-check-setup-src-pad-by-name-from-template" href="gstreamer-libs-1.0/gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-by-name-from-template">
 <ANCHOR id="gst-check-setup-src-pad-from-template" href="gstreamer-libs-1.0/gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-from-template">
+<ANCHOR id="gst-check-objects-destroyed-on-unref" href="gstreamer-libs-1.0/gstreamer-libs-GstCheck.html#gst-check-objects-destroyed-on-unref">
+<ANCHOR id="gst-check-object-destroyed-on-unref" href="gstreamer-libs-1.0/gstreamer-libs-GstCheck.html#gst-check-object-destroyed-on-unref">
 <ANCHOR id="gstreamer-libs-GstCheck.other_details" href="gstreamer-libs-1.0/gstreamer-libs-GstCheck.html#gstreamer-libs-GstCheck.other_details">
 <ANCHOR id="GST-END-TEST:CAPS" href="gstreamer-libs-1.0/gstreamer-libs-GstCheck.html#GST-END-TEST:CAPS">
 <ANCHOR id="gstreamer-libs-GstBufferStraw" href="gstreamer-libs-1.0/gstreamer-libs-GstBufferStraw.html">
diff --git a/docs/manual/Makefile.in b/docs/manual/Makefile.in
index b510386..29a9ee2 100644
--- a/docs/manual/Makefile.in
+++ b/docs/manual/Makefile.in
@@ -114,6 +114,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -131,7 +132,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/manual/advanced-buffering.xml b/docs/manual/advanced-buffering.xml
index 72fc96f..7facd85 100644
--- a/docs/manual/advanced-buffering.xml
+++ b/docs/manual/advanced-buffering.xml
@@ -73,7 +73,7 @@
         }
       } else {
         /* buffering busy */
-        if (buffering == FALSE && target_state == GST_STATE_PLAYING) {
+        if (!buffering && target_state == GST_STATE_PLAYING) {
           /* we were not buffering but PLAYING, PAUSE  the pipeline. */
           gst_element_set_state (pipeline, GST_STATE_PAUSED);
         }
@@ -349,7 +349,7 @@
 
   if (percent < 100) {
     /* buffering busy */
-    if (is_buffering == FALSE) {
+    if (!is_buffering) {
       is_buffering = TRUE;
       if (target_state == GST_STATE_PLAYING) {
         /* we were not buffering but PLAYING, PAUSE  the pipeline. */
@@ -364,7 +364,7 @@
 {
   GstElement *pipeline = user_data;
 
-  if (is_buffering == FALSE)
+  if (!is_buffering)
     gst_element_set_state (pipeline, target_state);
   else
     g_timeout_add (500, buffer_timeout, pipeline);
diff --git a/docs/manual/advanced-dataaccess.xml b/docs/manual/advanced-dataaccess.xml
index 7f91986..555d0ba 100644
--- a/docs/manual/advanced-dataaccess.xml
+++ b/docs/manual/advanced-dataaccess.xml
@@ -311,7 +311,6 @@
         the sink element, unblock the source pads and set the pipeline to
         the playing state. You will see that exactly the requested
         region is played by the sink before it goes to EOS.
-        What follows
       </para>
       <para>
         What follows is an example application that loosly follows this
diff --git a/docs/manual/appendix-programs.xml b/docs/manual/appendix-programs.xml
index b888a17..72eab54 100644
--- a/docs/manual/appendix-programs.xml
+++ b/docs/manual/appendix-programs.xml
@@ -59,6 +59,7 @@
   
   filesrc = gst_bin_get_by_name (GST_BIN (pipeline), "my_filesrc");
   g_object_set (filesrc, "location", argv[1], NULL);
+  g_object_unref (filesrc);
 
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
 
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index b11e737..8ba1779 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -107,6 +107,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -124,7 +125,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -172,6 +173,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -277,6 +282,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/plugins/gstreamer-plugins-sections.txt b/docs/plugins/gstreamer-plugins-sections.txt
index ac4451c..313da0f 100644
--- a/docs/plugins/gstreamer-plugins-sections.txt
+++ b/docs/plugins/gstreamer-plugins-sections.txt
@@ -41,6 +41,7 @@
 <SUBSECTION Standard>
 GstFdSinkClass
 GST_FD_SINK
+GST_FD_SINK_CAST
 GST_IS_FD_SINK
 GST_TYPE_FD_SINK
 GST_FD_SINK_CLASS
@@ -87,6 +88,7 @@
 <SUBSECTION Standard>
 GstFileSinkClass
 GST_FILE_SINK
+GST_FILE_SINK_CAST
 GST_IS_FILE_SINK
 GST_TYPE_FILE_SINK
 GST_FILE_SINK_CLASS
@@ -126,6 +128,22 @@
 </SECTION>
 
 <SECTION>
+<FILE>element-concat</FILE>
+<TITLE>concat</TITLE>
+GstConcat
+<SUBSECTION Standard>
+GstConcatClass
+GST_CONCAT
+GST_CONCAT_CAST
+GST_IS_CONCAT
+GST_TYPE_CONCAT
+GST_CONCAT_CLASS
+GST_IS_CONCAT_CLASS
+<SUBSECTION Private>
+gst_concat_get_type
+</SECTION>
+
+<SECTION>
 <FILE>element-downloadbuffer</FILE>
 <TITLE>downloadbuffer</TITLE>
 GstDownloadBuffer
diff --git a/docs/plugins/gstreamer-plugins.hierarchy b/docs/plugins/gstreamer-plugins.hierarchy
index c65606e..c26d933 100644
--- a/docs/plugins/gstreamer-plugins.hierarchy
+++ b/docs/plugins/gstreamer-plugins.hierarchy
@@ -22,6 +22,7 @@
           GstIdentity
         GstBin
           GstPipeline
+        GstConcat
         GstDownloadBuffer
         GstFunnel
         GstInputSelector
diff --git a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
index 4602abf..7a405d0 100644
--- a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
+++ b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
@@ -41,7 +41,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.0.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -49,7 +49,7 @@
 </tr>
 <tr>
 <td><p><span class="term">package</span></p></td>
-<td>GStreamer source release</td>
+<td>GStreamer git</td>
 </tr>
 <tr>
 <td><p><span class="term">origin</span></p></td>
@@ -71,6 +71,10 @@
 <td>Pass data without modification, limiting formats</td>
 </tr>
 <tr>
+<td><p><span class="term">concat</span></p></td>
+<td>Concatenate multiple streams</td>
+</tr>
+<tr>
 <td><p><span class="term"><a class="link" href="gstreamer-plugins-downloadbuffer.html" title="downloadbuffer">downloadbuffer</a></span></p></td>
 <td>Download Buffer element</td>
 </tr>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 33921af..5386857 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 Core Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Core Plugins 1.0 (1.4.5)
+      for GStreamer Core Plugins 1.0 (1.5.0.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/gstreamer-plugins/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/</a>.
     </p></div>
diff --git a/docs/plugins/inspect/plugin-coreelements.xml b/docs/plugins/inspect/plugin-coreelements.xml
index 96ddeb4..c98c7f3 100644
--- a/docs/plugins/inspect/plugin-coreelements.xml
+++ b/docs/plugins/inspect/plugin-coreelements.xml
@@ -3,10 +3,10 @@
   <description>GStreamer core elements</description>
   <filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
   <basename>libgstcoreelements.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.0.1</version>
   <license>LGPL</license>
   <source>gstreamer</source>
-  <package>GStreamer source release</package>
+  <package>GStreamer git</package>
   <origin>Unknown package origin</origin>
   <elements>
     <element>
@@ -31,6 +31,27 @@
       </pads>
     </element>
     <element>
+      <name>concat</name>
+      <longname>Concat</longname>
+      <class>Generic</class>
+      <description>Concatenate multiple streams</description>
+      <author>Sebastian Dröge &lt;sebastian@centricular.com&gt;</author>
+      <pads>
+        <caps>
+          <name>sink_%u</name>
+          <direction>sink</direction>
+          <presence>request</presence>
+          <details>ANY</details>
+        </caps>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
       <name>downloadbuffer</name>
       <longname>DownloadBuffer</longname>
       <class>Generic</class>
diff --git a/docs/pwg/Makefile.in b/docs/pwg/Makefile.in
index 4732ae1..76d7c46 100644
--- a/docs/pwg/Makefile.in
+++ b/docs/pwg/Makefile.in
@@ -114,6 +114,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -131,7 +132,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/pwg/advanced-allocation.xml b/docs/pwg/advanced-allocation.xml
index 5888037..253c60d 100644
--- a/docs/pwg/advanced-allocation.xml
+++ b/docs/pwg/advanced-allocation.xml
@@ -2,7 +2,7 @@
   <title>Memory allocation</title>
   <para>
     Memory allocation and management is a very important topic in
-    multimedia. High definition video uses many magabytes to store
+    multimedia. High definition video uses many megabytes to store
     one single frame of video. It is important to reuse the memory
     when possible instead of constantly allocating and freeing
     the memory.
@@ -117,7 +117,7 @@
     </para>
     <para>
       The buffer contains one or more <classname>GstMemory</classname>
-      objects thet represent the data in the buffer.
+      objects that represent the data in the buffer.
     </para>
     <para>
       Metadata in the buffer consists of:
@@ -398,7 +398,7 @@
           macro. You will also make a method to add your metadata
           implementation to a <classname>GstBuffer</classname>.
           Your <filename>my-example-meta.h</filename> header file will
-          need thse additions:
+          need these additions:
         </para>
         <programlisting>
 <![CDATA[
diff --git a/docs/pwg/advanced-clock.xml b/docs/pwg/advanced-clock.xml
index 4618167..a0ffc4f 100644
--- a/docs/pwg/advanced-clock.xml
+++ b/docs/pwg/advanced-clock.xml
@@ -64,7 +64,7 @@
     <title> Buffer running-time </title>
     <para>
       To calculate a buffer running-time, we need a buffer timestamp and
-      the SEGMENT event that preceeded the buffer. First we can convert
+      the SEGMENT event that preceded the buffer. First we can convert
       the SEGMENT event into a <classname>GstSegment</classname> object
       and then we can use the
       <function>gst_segment_to_running_time ()</function> function to
diff --git a/docs/pwg/advanced-events.xml b/docs/pwg/advanced-events.xml
index 997d5b3..5471ace 100644
--- a/docs/pwg/advanced-events.xml
+++ b/docs/pwg/advanced-events.xml
@@ -372,7 +372,7 @@
         The flush-stop event is created with
         <function>gst_event_new_flush_stop ()</function>. It has one
         parameter that controls if the running-time of the pipeline should
-        be reset to 0 or not. Normally aftera flushing seek, the
+        be reset to 0 or not. Normally after a flushing seek, the
         running_time is set back to 0.
       </para>
     </sect2>
diff --git a/docs/pwg/advanced-qos.xml b/docs/pwg/advanced-qos.xml
index 36ddf31..b87bf1e 100644
--- a/docs/pwg/advanced-qos.xml
+++ b/docs/pwg/advanced-qos.xml
@@ -2,7 +2,7 @@
   <title>Quality Of Service (QoS)</title>
 
   <para>
-    Quality of Service in &GStreamer; is about measuring and ajusting
+    Quality of Service in &GStreamer; is about measuring and adjusting
     the real-time performance of a pipeline. The real-time performance is
     always measured relative to the pipeline clock and typically happens in
     the sinks when they synchronize buffers against the clock.
@@ -77,12 +77,12 @@
       second long, it is operating at twice the required speed. If, on the
       other hand, it takes 2 seconds to produce a buffer with 1 seconds worth
       of data, upstream is producing buffers too slow and we won't be able to
-      keep sycnhronization. Usually, a running average is kept of the
+      keep synchronization. Usually, a running average is kept of the
       proportion.
     </para>
     <para>
       A synchronizing element also needs to measure its own performance in
-      order to figure out if the performace problem is upstream of itself.
+      order to figure out if the performance problem is upstream of itself.
     </para>
     <para>
       These measurements are used to construct a QOS event that is sent
@@ -184,7 +184,7 @@
       <para>
         Long term corrections are a bit more difficult to perform. They
         rely on the value of the proportion in the QOS event. Elements should
-        reduce the amount of resources they comsume by the proportion 
+        reduce the amount of resources they consume by the proportion
         field in the QoS message.
       </para>
       <para>
diff --git a/docs/pwg/advanced-tagging.xml b/docs/pwg/advanced-tagging.xml
index ae991d8..d1e5393 100644
--- a/docs/pwg/advanced-tagging.xml
+++ b/docs/pwg/advanced-tagging.xml
@@ -109,7 +109,7 @@
       TagSetter interface (which is just a layer). Pipeline tags are tags
       provided to the element from within the pipeline. The element receives
       such tags via the <symbol>GST_EVENT_TAG</symbol> event, which means
-      that tags writers should implment an event handler. The tag writer is
+      that tags writers should implement an event handler. The tag writer is
       responsible for combining all these three into one list and writing them
       to the output stream.
     </para>
diff --git a/docs/pwg/other-base.xml b/docs/pwg/other-base.xml
index 484f436..0c00f98 100644
--- a/docs/pwg/other-base.xml
+++ b/docs/pwg/other-base.xml
@@ -119,7 +119,7 @@
         base-class.
       </para>
       <para>
-        The <classname>GstBaseAusioSink</classname> has little to no
+        The <classname>GstAudioBaseSink</classname> has little to no
         limitations and should fit virtually every implementation, but is
         hard to implement. The <classname>GstAudioSink</classname>, on the
         other hand, only fits those systems with a simple <function>open
diff --git a/docs/slides/Makefile.in b/docs/slides/Makefile.in
index 9676b0a..6107fc8 100644
--- a/docs/slides/Makefile.in
+++ b/docs/slides/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -153,6 +154,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -258,6 +263,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/docs/xsl/Makefile.in b/docs/xsl/Makefile.in
index 4650e11..24178c9 100644
--- a/docs/xsl/Makefile.in
+++ b/docs/xsl/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -153,6 +154,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -258,6 +263,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/gst/Makefile.am b/gst/Makefile.am
index 2e2a79c..1c67f8e 100644
--- a/gst/Makefile.am
+++ b/gst/Makefile.am
@@ -41,7 +41,8 @@
 # make variables for all generated source and header files to make the
 # distinction clear
 
-built_header_configure = gstconfig.h gstversion.h
+built_header_configure = gstversion.h
+built_sys_header_configure = gstconfig.h
 built_header_make = gstenumtypes.h
 built_source_make = gstenumtypes.c
 
@@ -66,12 +67,14 @@
 	gstcapsfeatures.c	\
 	gstchildproxy.c		\
 	gstclock.c		\
+	gstclock-linreg.c	\
 	gstcontext.c \
 	gstcontrolbinding.c \
 	gstcontrolsource.c \
 	gstdatetime.c		\
 	gstdebugutils.c		\
 	gstdevice.c		\
+	gstdevicemonitor.c 	\
 	gstdeviceprovider.c	\
 	gstdeviceproviderfactory.c \
 	gstelement.c		\
@@ -80,7 +83,6 @@
 	gstevent.c		\
 	gstformat.c		\
 	gstghostpad.c		\
-	gstdevicemonitor.c 	\
 	gstinfo.c		\
 	gstiterator.c		\
 	gstatomicqueue.c	\
@@ -126,12 +128,13 @@
 # BUILT_SOURCES are built on make all/check/install before all other targets
 BUILT_SOURCES = \
         $(built_header_configure)	\
+        $(built_sys_header_configure)	\
         $(built_header_make)		\
         $(built_source_make)
 # CLEANFILES is for files generated by make
 CLEANFILES = $(built_header_make) $(built_source_make) $(as_dll_cleanfiles) *.gcno *.gcda *.gcov *.gcov.out
 # DISTCLEANFILES is for files generated by configure
-DISTCLEANFILES = $(built_header_configure)
+DISTCLEANFILES = $(built_header_configure) $(built_sys_header_configure)
 
 libgstreamer_@GST_API_VERSION@_la_CFLAGS =		\
 	-D_GNU_SOURCE					\
@@ -225,6 +228,9 @@
 nodist_libgstreamer_@GST_API_VERSION@include_HEADERS = \
 	$(built_header_configure) $(built_header_make)
 
+configexecincludedir = $(libdir)/gstreamer-@GST_API_VERSION@/include/gst
+nodist_configexecinclude_HEADERS = $(built_sys_header_configure)
+
 noinst_HEADERS = 		\
 	gettext.h		\
 	glib-compat-private.h	\
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 85f129d..6af5d37 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -96,6 +96,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -113,7 +114,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -160,6 +161,7 @@
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
 	"$(DESTDIR)$(typelibsdir)" \
 	"$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)" \
+	"$(DESTDIR)$(configexecincludedir)" \
 	"$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 @GST_DISABLE_PARSE_FALSE@am__DEPENDENCIES_1 = parse/libgstparse.la
@@ -173,20 +175,20 @@
 am__libgstreamer_@GST_API_VERSION@_la_SOURCES_DIST = gst.c gstobject.c \
 	gstallocator.c gstbin.c gstbuffer.c gstbufferlist.c \
 	gstbufferpool.c gstbus.c gstcaps.c gstcapsfeatures.c \
-	gstchildproxy.c gstclock.c gstcontext.c gstcontrolbinding.c \
-	gstcontrolsource.c gstdatetime.c gstdebugutils.c gstdevice.c \
+	gstchildproxy.c gstclock.c gstclock-linreg.c gstcontext.c \
+	gstcontrolbinding.c gstcontrolsource.c gstdatetime.c \
+	gstdebugutils.c gstdevice.c gstdevicemonitor.c \
 	gstdeviceprovider.c gstdeviceproviderfactory.c gstelement.c \
 	gstelementfactory.c gsterror.c gstevent.c gstformat.c \
-	gstghostpad.c gstdevicemonitor.c gstinfo.c gstiterator.c \
-	gstatomicqueue.c gstmessage.c gstmeta.c gstmemory.c \
-	gstminiobject.c gstpad.c gstpadtemplate.c gstparamspecs.c \
-	gstpipeline.c gstplugin.c gstpluginfeature.c gstpluginloader.c \
-	gstpoll.c gstpreset.c gstquark.c gstquery.c gstregistry.c \
-	gstregistrychunks.c gstsample.c gstsegment.c gststructure.c \
-	gstsystemclock.c gsttaglist.c gsttagsetter.c gsttask.c \
-	gsttaskpool.c gsttoc.c gsttocsetter.c gsttrace.c gsttypefind.c \
-	gsttypefindfactory.c gsturi.c gstutils.c gstvalue.c gstparse.c \
-	gstregistrybinary.c
+	gstghostpad.c gstinfo.c gstiterator.c gstatomicqueue.c \
+	gstmessage.c gstmeta.c gstmemory.c gstminiobject.c gstpad.c \
+	gstpadtemplate.c gstparamspecs.c gstpipeline.c gstplugin.c \
+	gstpluginfeature.c gstpluginloader.c gstpoll.c gstpreset.c \
+	gstquark.c gstquery.c gstregistry.c gstregistrychunks.c \
+	gstsample.c gstsegment.c gststructure.c gstsystemclock.c \
+	gsttaglist.c gsttagsetter.c gsttask.c gsttaskpool.c gsttoc.c \
+	gsttocsetter.c gsttrace.c gsttypefind.c gsttypefindfactory.c \
+	gsturi.c gstutils.c gstvalue.c gstparse.c gstregistrybinary.c
 @GST_DISABLE_TRACE_FALSE@am__objects_1 = libgstreamer_@GST_API_VERSION@_la-gsttrace.lo
 @GST_DISABLE_REGISTRY_FALSE@am__objects_2 = libgstreamer_@GST_API_VERSION@_la-gstregistrybinary.lo
 am_libgstreamer_@GST_API_VERSION@_la_OBJECTS =  \
@@ -202,12 +204,14 @@
 	libgstreamer_@GST_API_VERSION@_la-gstcapsfeatures.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstchildproxy.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstclock.lo \
+	libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstcontext.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstcontrolbinding.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstcontrolsource.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstdatetime.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstdebugutils.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstdevice.lo \
+	libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstelement.lo \
@@ -216,7 +220,6 @@
 	libgstreamer_@GST_API_VERSION@_la-gstevent.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstformat.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstghostpad.lo \
-	libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstinfo.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstiterator.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstatomicqueue.lo \
@@ -321,6 +324,7 @@
   esac
 DATA = $(gir_DATA) $(typelibs_DATA)
 HEADERS = $(libgstreamer_@GST_API_VERSION@include_HEADERS) \
+	$(nodist_configexecinclude_HEADERS) \
 	$(nodist_libgstreamer_@GST_API_VERSION@include_HEADERS) \
 	$(noinst_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
@@ -386,6 +390,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -491,6 +499,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -672,7 +681,8 @@
 
 # make variables for all generated source and header files to make the
 # distinction clear
-built_header_configure = gstconfig.h gstversion.h
+built_header_configure = gstversion.h
+built_sys_header_configure = gstconfig.h
 built_header_make = gstenumtypes.h
 built_source_make = gstenumtypes.c
 EXTRA_libgstreamer_@GST_API_VERSION@_la_SOURCES = \
@@ -695,12 +705,14 @@
 	gstcapsfeatures.c	\
 	gstchildproxy.c		\
 	gstclock.c		\
+	gstclock-linreg.c	\
 	gstcontext.c \
 	gstcontrolbinding.c \
 	gstcontrolsource.c \
 	gstdatetime.c		\
 	gstdebugutils.c		\
 	gstdevice.c		\
+	gstdevicemonitor.c 	\
 	gstdeviceprovider.c	\
 	gstdeviceproviderfactory.c \
 	gstelement.c		\
@@ -709,7 +721,6 @@
 	gstevent.c		\
 	gstformat.c		\
 	gstghostpad.c		\
-	gstdevicemonitor.c 	\
 	gstinfo.c		\
 	gstiterator.c		\
 	gstatomicqueue.c	\
@@ -756,6 +767,7 @@
 # BUILT_SOURCES are built on make all/check/install before all other targets
 BUILT_SOURCES = \
         $(built_header_configure)	\
+        $(built_sys_header_configure)	\
         $(built_header_make)		\
         $(built_source_make)
 
@@ -764,7 +776,7 @@
 	$(as_dll_cleanfiles) *.gcno *.gcda *.gcov *.gcov.out \
 	$(am__append_1)
 # DISTCLEANFILES is for files generated by configure
-DISTCLEANFILES = $(built_header_configure)
+DISTCLEANFILES = $(built_header_configure) $(built_sys_header_configure)
 libgstreamer_@GST_API_VERSION@_la_CFLAGS = \
 	-D_GNU_SOURCE					\
 	-DGST_EXPORTS					\
@@ -855,6 +867,8 @@
 nodist_libgstreamer_@GST_API_VERSION@include_HEADERS = \
 	$(built_header_configure) $(built_header_make)
 
+configexecincludedir = $(libdir)/gstreamer-@GST_API_VERSION@/include/gst
+nodist_configexecinclude_HEADERS = $(built_sys_header_configure)
 noinst_HEADERS = \
 	gettext.h		\
 	glib-compat-private.h	\
@@ -980,6 +994,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstcaps.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstcapsfeatures.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstchildproxy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstclock.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstcontext.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstcontrolbinding.Plo@am__quote@
@@ -1144,6 +1159,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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstclock.lo `test -f 'gstclock.c' || echo '$(srcdir)/'`gstclock.c
 
+libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.lo: gstclock-linreg.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.lo `test -f 'gstclock-linreg.c' || echo '$(srcdir)/'`gstclock-linreg.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstclock-linreg.c' object='libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstclock-linreg.lo `test -f 'gstclock-linreg.c' || echo '$(srcdir)/'`gstclock-linreg.c
+
 libgstreamer_@GST_API_VERSION@_la-gstcontext.lo: gstcontext.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gstcontext.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstcontext.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstcontext.lo `test -f 'gstcontext.c' || echo '$(srcdir)/'`gstcontext.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstcontext.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstcontext.Plo
@@ -1186,6 +1208,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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstdevice.lo `test -f 'gstdevice.c' || echo '$(srcdir)/'`gstdevice.c
 
+libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo: gstdevicemonitor.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo `test -f 'gstdevicemonitor.c' || echo '$(srcdir)/'`gstdevicemonitor.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstdevicemonitor.c' object='libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo `test -f 'gstdevicemonitor.c' || echo '$(srcdir)/'`gstdevicemonitor.c
+
 libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.lo: gstdeviceprovider.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.lo `test -f 'gstdeviceprovider.c' || echo '$(srcdir)/'`gstdeviceprovider.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.Plo
@@ -1242,13 +1271,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstghostpad.lo `test -f 'gstghostpad.c' || echo '$(srcdir)/'`gstghostpad.c
 
-libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo: gstdevicemonitor.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo `test -f 'gstdevicemonitor.c' || echo '$(srcdir)/'`gstdevicemonitor.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstdevicemonitor.c' object='libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.lo `test -f 'gstdevicemonitor.c' || echo '$(srcdir)/'`gstdevicemonitor.c
-
 libgstreamer_@GST_API_VERSION@_la-gstinfo.lo: gstinfo.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) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstreamer_@GST_API_VERSION@_la-gstinfo.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstinfo.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstinfo.lo `test -f 'gstinfo.c' || echo '$(srcdir)/'`gstinfo.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstinfo.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstinfo.Plo
@@ -1590,6 +1612,27 @@
 	@list='$(libgstreamer_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstreamer_@GST_API_VERSION@includedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)'; $(am__uninstall_files_from_dir)
+install-nodist_configexecincludeHEADERS: $(nodist_configexecinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(nodist_configexecinclude_HEADERS)'; test -n "$(configexecincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(configexecincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(configexecincludedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(configexecincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(configexecincludedir)" || exit $$?; \
+	done
+
+uninstall-nodist_configexecincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_configexecinclude_HEADERS)'; test -n "$(configexecincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(configexecincludedir)'; $(am__uninstall_files_from_dir)
 install-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS: $(nodist_libgstreamer_@GST_API_VERSION@include_HEADERS)
 	@$(NORMAL_INSTALL)
 	@list='$(nodist_libgstreamer_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstreamer_@GST_API_VERSION@includedir)" || list=; \
@@ -1772,7 +1815,7 @@
 all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) all-local
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)" "$(DESTDIR)$(configexecincludedir)" "$(DESTDIR)$(libgstreamer_@GST_API_VERSION@includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: $(BUILT_SOURCES)
@@ -1841,7 +1884,8 @@
 
 install-dvi-am:
 
-install-exec-am: install-libLTLIBRARIES
+install-exec-am: install-libLTLIBRARIES \
+	install-nodist_configexecincludeHEADERS
 
 install-html: install-html-recursive
 
@@ -1883,6 +1927,7 @@
 
 uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
 	uninstall-libgstreamer_@GST_API_VERSION@includeHEADERS \
+	uninstall-nodist_configexecincludeHEADERS \
 	uninstall-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
@@ -1899,7 +1944,7 @@
 	install-html install-html-am install-info install-info-am \
 	install-libLTLIBRARIES \
 	install-libgstreamer_@GST_API_VERSION@includeHEADERS \
-	install-man \
+	install-man install-nodist_configexecincludeHEADERS \
 	install-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS \
 	install-pdf install-pdf-am install-ps install-ps-am \
 	install-strip install-typelibsDATA installcheck \
@@ -1909,6 +1954,7 @@
 	tags tags-am uninstall uninstall-am uninstall-girDATA \
 	uninstall-libLTLIBRARIES \
 	uninstall-libgstreamer_@GST_API_VERSION@includeHEADERS \
+	uninstall-nodist_configexecincludeHEADERS \
 	uninstall-nodist_libgstreamer_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
diff --git a/gst/gst.c b/gst/gst.c
index 4194e8e..cd91242 100644
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -26,7 +26,7 @@
  *                     graphs.
  *
  * GStreamer is a framework for constructing graphs of various filters
- * (termed elements here) that will handle streaming media.  Any discreet
+ * (termed elements here) that will handle streaming media.  Any discrete
  * (packetizable) media type is supported, with provisions for automatically
  * determining source type.  Formatting/framing information is provided with
  * a powerful negotiation framework.  Plugins are heavily used to provide for
@@ -318,14 +318,18 @@
 gboolean
 gst_init_check (int *argc, char **argv[], GError ** err)
 {
+  static GMutex init_lock;
 #ifndef GST_DISABLE_OPTION_PARSING
   GOptionGroup *group;
   GOptionContext *ctx;
 #endif
   gboolean res;
 
+  g_mutex_lock (&init_lock);
+
   if (gst_initialized) {
     GST_DEBUG ("already initialized gst");
+    g_mutex_unlock (&init_lock);
     return TRUE;
   }
 #ifndef GST_DISABLE_OPTION_PARSING
@@ -344,11 +348,7 @@
 
   gst_initialized = res;
 
-  if (res) {
-    GST_INFO ("initialized GStreamer successfully");
-  } else {
-    GST_INFO ("failed to initialize GStreamer");
-  }
+  g_mutex_unlock (&init_lock);
 
   return res;
 }
@@ -709,6 +709,7 @@
       glib_minor_version, glib_micro_version);
   GST_INFO ("GLib headers version: %d.%d.%d", GLIB_MAJOR_VERSION,
       GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+  GST_INFO ("initialized GStreamer successfully");
 
   return TRUE;
 }
diff --git a/gst/gst.h b/gst/gst.h
index 6617f28..e4e2a1c 100644
--- a/gst/gst.h
+++ b/gst/gst.h
@@ -44,13 +44,13 @@
 #include <gst/gstdatetime.h>
 #include <gst/gstdebugutils.h>
 #include <gst/gstdevice.h>
+#include <gst/gstdevicemonitor.h>
 #include <gst/gstdeviceprovider.h>
 #include <gst/gstelement.h>
 #include <gst/gstelementmetadata.h>
 #include <gst/gsterror.h>
 #include <gst/gstevent.h>
 #include <gst/gstghostpad.h>
-#include <gst/gstdevicemonitor.h>
 #include <gst/gstinfo.h>
 #include <gst/gstiterator.h>
 #include <gst/gstmessage.h>
diff --git a/gst/gst_private.h b/gst/gst_private.h
index b25707c..d0aefb4 100644
--- a/gst/gst_private.h
+++ b/gst/gst_private.h
@@ -180,6 +180,12 @@
 G_GNUC_INTERNAL
 gchar * __gst_date_time_serialize (GstDateTime * datetime, gboolean with_usecs);
 
+/* Non-static, for access from the testsuite, but not for external use */
+gboolean
+_priv_gst_do_linear_regression (GstClockTime *times, guint n,
+    GstClockTime * m_num, GstClockTime * m_denom, GstClockTime * b,
+    GstClockTime * xbase, gdouble * r_squared);
+
 #ifndef GST_DISABLE_REGISTRY
 /* Secret variable to initialise gst without registry cache */
 GST_EXPORT gboolean _gst_disable_registry_cache;
@@ -244,6 +250,8 @@
 #define GST_CAT_POLL _priv_GST_CAT_POLL
 extern GstDebugCategory *_priv_GST_CAT_POLL;
 
+extern GstClockTime _priv_gst_info_start_time;
+
 #else
 
 #define GST_CAT_GST_INIT         NULL
@@ -418,5 +426,8 @@
   gpointer _gst_reserved[GST_PADDING];
 };
 
+/* privat flag used by GstBus / GstMessage */
+#define GST_MESSAGE_FLAG_ASYNC_DELIVERY (GST_MINI_OBJECT_FLAG_LAST << 0)
+
 G_END_DECLS
 #endif /* __GST_PRIVATE_H__ */
diff --git a/gst/gstbin.c b/gst/gstbin.c
index 0adc0e0..28b0436 100644
--- a/gst/gstbin.c
+++ b/gst/gstbin.c
@@ -3888,7 +3888,7 @@
         fold->max = max;
       else if (max < fold->max)
         fold->max = max;
-      if (fold->live == FALSE)
+      if (!fold->live)
         fold->live = live;
     }
   } else {
@@ -3936,7 +3936,7 @@
 static gboolean
 bin_iterate_fold (GstBin * bin, GstIterator * iter, QueryInitFunction fold_init,
     QueryDoneFunction fold_done, GstIteratorFoldFunction fold_func,
-    QueryFold fold_data, gboolean default_return)
+    QueryFold * fold_data, gboolean default_return)
 {
   gboolean res = default_return;
   GValue ret = { 0 };
@@ -3947,20 +3947,20 @@
   while (TRUE) {
     GstIteratorResult ires;
 
-    ires = gst_iterator_fold (iter, fold_func, &ret, &fold_data);
+    ires = gst_iterator_fold (iter, fold_func, &ret, fold_data);
 
     switch (ires) {
       case GST_ITERATOR_RESYNC:
         gst_iterator_resync (iter);
         if (fold_init)
-          fold_init (bin, &fold_data);
+          fold_init (bin, fold_data);
         g_value_set_boolean (&ret, res);
         break;
       case GST_ITERATOR_OK:
       case GST_ITERATOR_DONE:
         res = g_value_get_boolean (&ret);
         if (fold_done != NULL && res)
-          fold_done (bin, &fold_data);
+          fold_done (bin, fold_data);
         goto done;
       default:
         res = FALSE;
@@ -4058,7 +4058,7 @@
     fold_init (bin, &fold_data);
 
   res =
-      bin_iterate_fold (bin, iter, fold_init, fold_done, fold_func, fold_data,
+      bin_iterate_fold (bin, iter, fold_init, fold_done, fold_func, &fold_data,
       default_return);
   gst_iterator_free (iter);
 
@@ -4067,7 +4067,7 @@
     iter = gst_element_iterate_src_pads (element);
     src_pads_query_result =
         bin_iterate_fold (bin, iter, fold_init, fold_done, fold_func,
-        fold_data, default_return);
+        &fold_data, default_return);
     gst_iterator_free (iter);
 
     if (src_pads_query_result)
diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c
index eb7077a..74f86d0 100644
--- a/gst/gstbuffer.c
+++ b/gst/gstbuffer.c
@@ -508,7 +508,7 @@
 }
 
 static GstBuffer *
-_gst_buffer_copy (GstBuffer * buffer)
+gst_buffer_copy_with_flags (const GstBuffer * buffer, GstBufferCopyFlags flags)
 {
   GstBuffer *copy;
 
@@ -517,8 +517,9 @@
   /* create a fresh new buffer */
   copy = gst_buffer_new ();
 
-  /* we simply copy everything from our parent */
-  if (!gst_buffer_copy_into (copy, buffer, GST_BUFFER_COPY_ALL, 0, -1))
+  /* copy what the 'flags' want from our parent */
+  /* FIXME why we can't pass const to gst_buffer_copy_into() ? */
+  if (!gst_buffer_copy_into (copy, (GstBuffer *) buffer, flags, 0, -1))
     gst_buffer_replace (&copy, NULL);
 
   if (copy)
@@ -527,6 +528,28 @@
   return copy;
 }
 
+static GstBuffer *
+_gst_buffer_copy (const GstBuffer * buffer)
+{
+  return gst_buffer_copy_with_flags (buffer, GST_BUFFER_COPY_ALL);
+}
+
+/**
+ * gst_buffer_copy_deep:
+ * @buf: a #GstBuffer.
+ *
+ * Create a copy of the given buffer. This will make a newly allocated
+ * copy of the data the source buffer contains.
+ *
+ * Returns: (transfer full): a new copy of @buf.
+ */
+GstBuffer *
+gst_buffer_copy_deep (const GstBuffer * buffer)
+{
+  return gst_buffer_copy_with_flags (buffer,
+      GST_BUFFER_COPY_ALL | GST_BUFFER_COPY_DEEP);
+}
+
 /* the default dispose function revives the buffer and returns it to the
  * pool when there is a pool */
 static gboolean
@@ -1114,9 +1137,9 @@
  * in @buffer.
  *
  * When this function returns %TRUE, @idx will contain the index of the first
- * memory bock where the byte for @offset can be found and @length contains the
+ * memory block where the byte for @offset can be found and @length contains the
  * number of memory blocks containing the @size remaining bytes. @skip contains
- * the number of bytes to skip in the memory bock at @idx to get to the byte
+ * the number of bytes to skip in the memory block at @idx to get to the byte
  * for @offset.
  *
  * @size can be -1 to get all the memory blocks after @idx.
@@ -1833,7 +1856,8 @@
  * @flags: the #GstBufferCopyFlags
  * @offset: the offset into parent #GstBuffer at which the new sub-buffer 
  *          begins.
- * @size: the size of the new #GstBuffer sub-buffer, in bytes.
+ * @size: the size of the new #GstBuffer sub-buffer, in bytes. If -1, all
+ *        data is copied.
  *
  * Creates a sub-buffer from @parent at @offset and @size.
  * This sub-buffer uses the actual memory space of the parent buffer.
@@ -1935,8 +1959,11 @@
  * @buffer: a #GstBuffer
  * @api: the #GType of an API
  *
- * Get the metadata for @api on buffer. When there is no such
- * metadata, %NULL is returned.
+ * Get the metadata for @api on buffer. When there is no such metadata, %NULL is
+ * returned. If multiple metadata with the given @api are attached to this
+ * buffer only the first one is returned.  To handle multiple metadata with a
+ * given API use gst_buffer_iterate_meta() or gst_buffer_foreach_meta() instead
+ * and check the meta->info.api member for the API type.
  *
  * Returns: (transfer none) (nullable): the metadata for @api on
  * @buffer.
diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h
index 643db7d..dd7f237 100644
--- a/gst/gstbuffer.h
+++ b/gst/gstbuffer.h
@@ -365,8 +365,11 @@
  * gst_buffer_copy:
  * @buf: a #GstBuffer.
  *
- * Create a copy of the given buffer. This will also make a newly allocated
- * copy of the data the source buffer contains.
+ * Create a copy of the given buffer. This will only copy the buffer's
+ * data to a newly allocated memory if needed (if the type of memory
+ * requires it), otherwise the underlying data is just referenced.
+ * Check gst_buffer_copy_deep() if you want to force the data
+ * to be copied to newly allocated memory.
  *
  * Returns: (transfer full): a new copy of @buf.
  */
@@ -380,6 +383,7 @@
   return GST_BUFFER (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (buf)));
 }
 
+GstBuffer * gst_buffer_copy_deep (const GstBuffer * buf);
 
 /**
  * GstBufferCopyFlags:
diff --git a/gst/gstbufferlist.c b/gst/gstbufferlist.c
index 7b8558c..5319f70 100644
--- a/gst/gstbufferlist.c
+++ b/gst/gstbufferlist.c
@@ -1,6 +1,7 @@
 /* GStreamer
  * Copyright (C) 2009 Axis Communications <dev-gstreamer at axis dot com>
  * @author Jonas Holmberg <jonas dot holmberg at axis dot com>
+ * Copyright (C) 2014 Tim-Philipp Müller <tim at centricular dot com>
  *
  * gstbufferlist.c: Buffer list
  *
@@ -38,9 +39,13 @@
 
 #include "gstbuffer.h"
 #include "gstbufferlist.h"
+#include "gstutils.h"
 
 #define GST_CAT_DEFAULT GST_CAT_BUFFER_LIST
 
+#define GST_BUFFER_LIST_IS_USING_DYNAMIC_ARRAY(list) \
+    ((list)->buffers != &(list)->arr[0])
+
 /**
  * GstBufferList:
  *
@@ -50,7 +55,16 @@
 {
   GstMiniObject mini_object;
 
-  GArray *array;
+  GstBuffer **buffers;
+  guint n_buffers;
+  guint n_allocated;
+
+  gsize slice_size;
+
+  /* one-item array, in reality more items are pre-allocated
+   * as part of the GstBufferList structure, and that
+   * pre-allocated array extends beyond the declared struct */
+  GstBuffer *arr[1];
 };
 
 GType _gst_buffer_list_type = 0;
@@ -69,15 +83,15 @@
   GstBufferList *copy;
   guint i, len;
 
-  len = list->array->len;
-  copy = gst_buffer_list_new_sized (len);
+  len = list->n_buffers;
+  copy = gst_buffer_list_new_sized (list->n_allocated);
 
   /* add and ref all buffers in the array */
-  for (i = 0; i < len; i++) {
-    GstBuffer *buf = g_array_index (list->array, GstBuffer *, i);
-    buf = gst_buffer_ref (buf);
-    g_array_append_val (copy->array, buf);
-  }
+  for (i = 0; i < len; i++)
+    copy->buffers[i] = gst_buffer_ref (list->buffers[i]);
+
+  copy->n_buffers = len;
+
   return copy;
 }
 
@@ -85,25 +99,31 @@
 _gst_buffer_list_free (GstBufferList * list)
 {
   guint i, len;
+
   GST_LOG ("free %p", list);
 
   /* unrefs all buffers too */
-  len = list->array->len;
+  len = list->n_buffers;
   for (i = 0; i < len; i++)
-    gst_buffer_unref (g_array_index (list->array, GstBuffer *, i));
-  g_array_free (list->array, TRUE);
+    gst_buffer_unref (list->buffers[i]);
 
-  g_slice_free1 (sizeof (GstBufferList), list);
+  if (GST_BUFFER_LIST_IS_USING_DYNAMIC_ARRAY (list))
+    g_free (list->buffers);
+
+  g_slice_free1 (list->slice_size, list);
 }
 
 static void
-gst_buffer_list_init (GstBufferList * list, guint asize)
+gst_buffer_list_init (GstBufferList * list, guint n_allocated, gsize slice_size)
 {
   gst_mini_object_init (GST_MINI_OBJECT_CAST (list), 0, _gst_buffer_list_type,
       (GstMiniObjectCopyFunction) _gst_buffer_list_copy, NULL,
       (GstMiniObjectFreeFunction) _gst_buffer_list_free);
 
-  list->array = g_array_sized_new (FALSE, FALSE, sizeof (GstBuffer *), asize);
+  list->buffers = &list->arr[0];
+  list->n_buffers = 0;
+  list->n_allocated = n_allocated;
+  list->slice_size = slice_size;
 
   GST_LOG ("init %p", list);
 }
@@ -125,12 +145,18 @@
 gst_buffer_list_new_sized (guint size)
 {
   GstBufferList *list;
+  gsize slice_size;
+  guint n_allocated;
 
-  list = g_slice_new0 (GstBufferList);
+  n_allocated = GST_ROUND_UP_16 (size);
+
+  slice_size = sizeof (GstBufferList) + (n_allocated - 1) * sizeof (gpointer);
+
+  list = g_slice_alloc0 (slice_size);
 
   GST_LOG ("new %p", list);
 
-  gst_buffer_list_init (list, size);
+  gst_buffer_list_init (list, n_allocated, slice_size);
 
   return list;
 }
@@ -165,7 +191,26 @@
 {
   g_return_val_if_fail (GST_IS_BUFFER_LIST (list), 0);
 
-  return list->array->len;
+  return list->n_buffers;
+}
+
+static inline void
+gst_buffer_list_remove_range_internal (GstBufferList * list, guint idx,
+    guint length, gboolean unref_old)
+{
+  guint i;
+
+  if (unref_old) {
+    for (i = idx; i < idx + length; ++i)
+      gst_buffer_unref (list->buffers[i]);
+  }
+
+  if (idx + length != list->n_buffers) {
+    memmove (&list->buffers[idx], &list->buffers[idx + length],
+        (list->n_buffers - (idx + length)) * sizeof (void *));
+  }
+
+  list->n_buffers -= length;
 }
 
 /**
@@ -193,20 +238,20 @@
   g_return_val_if_fail (GST_IS_BUFFER_LIST (list), FALSE);
   g_return_val_if_fail (func != NULL, FALSE);
 
-  len = list->array->len;
+  len = list->n_buffers;
   for (i = 0; i < len;) {
     GstBuffer *buf, *buf_ret;
 
-    buf = buf_ret = g_array_index (list->array, GstBuffer *, i);
+    buf = buf_ret = list->buffers[i];
     ret = func (&buf_ret, i, user_data);
 
     /* Check if the function changed the buffer */
     if (buf != buf_ret) {
       if (buf_ret == NULL) {
-        g_array_remove_index (list->array, i);
-        len--;
+        gst_buffer_list_remove_range_internal (list, i, 1, FALSE);
+        --len;
       } else {
-        g_array_index (list->array, GstBuffer *, i) = buf_ret;
+        list->buffers[i] = buf_ret;
       }
     }
 
@@ -234,14 +279,10 @@
 GstBuffer *
 gst_buffer_list_get (GstBufferList * list, guint idx)
 {
-  GstBuffer *buf;
-
   g_return_val_if_fail (GST_IS_BUFFER_LIST (list), NULL);
-  g_return_val_if_fail (idx < list->array->len, NULL);
+  g_return_val_if_fail (idx < list->n_buffers, NULL);
 
-  buf = g_array_index (list->array, GstBuffer *, idx);
-
-  return buf;
+  return list->buffers[idx];
 }
 
 /**
@@ -265,15 +306,42 @@
 void
 gst_buffer_list_insert (GstBufferList * list, gint idx, GstBuffer * buffer)
 {
+  guint want_alloc;
+
   g_return_if_fail (GST_IS_BUFFER_LIST (list));
   g_return_if_fail (buffer != NULL);
 
-  if (idx == -1)
-    g_array_append_val (list->array, buffer);
-  else {
-    g_return_if_fail (idx < list->array->len);
-    g_array_insert_val (list->array, idx, buffer);
+  if (idx == -1 && list->n_buffers < list->n_allocated) {
+    list->buffers[list->n_buffers++] = buffer;
+    return;
   }
+
+  if (idx == -1 || idx > list->n_buffers)
+    idx = list->n_buffers;
+
+  want_alloc = list->n_buffers + 1;
+
+  if (want_alloc > list->n_allocated) {
+    want_alloc = MAX (GST_ROUND_UP_16 (want_alloc), list->n_allocated * 2);
+
+    if (GST_BUFFER_LIST_IS_USING_DYNAMIC_ARRAY (list)) {
+      list->buffers = g_renew (GstBuffer *, list->buffers, want_alloc);
+    } else {
+      list->buffers = g_new0 (GstBuffer *, want_alloc);
+      memcpy (list->buffers, &list->arr[0], list->n_buffers * sizeof (void *));
+      GST_CAT_LOG (GST_CAT_PERFORMANCE, "exceeding pre-alloced array");
+    }
+
+    list->n_allocated = want_alloc;
+  }
+
+  if (idx < list->n_buffers) {
+    memmove (&list->buffers[idx + 1], &list->buffers[idx],
+        (list->n_buffers - idx) * sizeof (void *));
+  }
+
+  ++list->n_buffers;
+  list->buffers[idx] = buffer;
 }
 
 /**
@@ -288,15 +356,9 @@
 void
 gst_buffer_list_remove (GstBufferList * list, guint idx, guint length)
 {
-  GstBuffer *buf;
-  gint i;
-
   g_return_if_fail (GST_IS_BUFFER_LIST (list));
-  g_return_if_fail (idx < list->array->len);
+  g_return_if_fail (idx < list->n_buffers);
+  g_return_if_fail (idx + length <= list->n_buffers);
 
-  for (i = idx; i < idx + length; ++i) {
-    buf = g_array_index (list->array, GstBuffer *, i);
-    gst_buffer_unref (buf);
-  }
-  g_array_remove_range (list->array, idx, length);
+  gst_buffer_list_remove_range_internal (list, idx, length, TRUE);
 }
diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c
index eaf434b..f865790 100644
--- a/gst/gstbufferpool.c
+++ b/gst/gstbufferpool.c
@@ -609,9 +609,9 @@
  *
  * Set the configuration of the pool. If the pool is already configured, and
  * the configuration haven't change, this function will return %TRUE. If the
- * pool is active, this function will try deactivating it. Buffers allocated
- * form this pool must be returned or else this function will do nothing and
- * return %FALSE.
+ * pool is active, this method will return %FALSE and active configuration
+ * will remain. Buffers allocated form this pool must be returned or else this
+ * function will do nothing and return %FALSE.
  *
  * @config is a #GstStructure that contains the configuration parameters for
  * the pool. A default and mandatory set of parameters can be configured with
@@ -645,18 +645,8 @@
     goto config_unchanged;
 
   /* can't change the settings when active */
-  if (priv->active) {
-    GST_BUFFER_POOL_UNLOCK (pool);
-    if (!gst_buffer_pool_set_active (pool, FALSE)) {
-      GST_BUFFER_POOL_LOCK (pool);
-      goto was_active;
-    }
-    GST_BUFFER_POOL_LOCK (pool);
-
-    /* not likely but as we released the lock */
-    if (priv->active)
-      goto was_active;
-  }
+  if (priv->active)
+    goto was_active;
 
   /* we can't change when outstanding buffers */
   if (g_atomic_int_get (&priv->outstanding) != 0)
@@ -694,7 +684,7 @@
 was_active:
   {
     gst_structure_free (config);
-    GST_WARNING_OBJECT (pool, "can't change config, we are active");
+    GST_INFO_OBJECT (pool, "can't change config, we are active");
     GST_BUFFER_POOL_UNLOCK (pool);
     return FALSE;
   }
@@ -1049,9 +1039,11 @@
  * Validate that changes made to @config are still valid in the context of the
  * expected parameters. This function is a helper that can be used to validate
  * changes made by a pool to a config when gst_buffer_pool_set_config()
- * returns %FALSE. This expects that @caps and @size haven't changed, and that
- * @min_buffers aren't lower then what we initially expected. This does not check
- * if options or allocator parameters.
+ * returns %FALSE. This expects that @caps haven't changed and that
+ * @min_buffers aren't lower then what we initially expected.
+ * This does not check if options or allocator parameters are still valid,
+ * won't check if size have changed, since changing the size is valid to adapt
+ * padding.
  *
  * Since: 1.4
  *
@@ -1069,7 +1061,7 @@
 
   gst_buffer_pool_config_get_params (config, &newcaps, &newsize, &newmin, NULL);
 
-  if (gst_caps_is_equal (caps, newcaps) && (size == newsize)
+  if (gst_caps_is_equal (caps, newcaps) && (newsize >= size)
       && (newmin >= min_buffers))
     ret = TRUE;
 
diff --git a/gst/gstbus.c b/gst/gstbus.c
index 0d784e1..7865079 100644
--- a/gst/gstbus.c
+++ b/gst/gstbus.c
@@ -111,11 +111,10 @@
   gpointer sync_handler_data;
   GDestroyNotify sync_handler_notify;
 
-  guint signal_watch_id;
   guint num_signal_watchers;
 
   guint num_sync_message_emitters;
-  GSource *watch_id;
+  GSource *signal_watch;
 
   gboolean enable_async;
   GstPoll *poll;
@@ -309,6 +308,10 @@
   GST_DEBUG_OBJECT (bus, "[msg %p] posting on bus %" GST_PTR_FORMAT, message,
       message);
 
+  /* check we didn't accidentally add a public flag that maps to same value */
+  g_assert (!GST_MINI_OBJECT_FLAG_IS_SET (message,
+          GST_MESSAGE_FLAG_ASYNC_DELIVERY));
+
   GST_OBJECT_LOCK (bus);
   /* check if the bus is flushing */
   if (GST_OBJECT_FLAG_IS_SET (bus, GST_BUS_FLUSHING))
@@ -358,6 +361,8 @@
       g_cond_init (cond);
       g_mutex_init (lock);
 
+      GST_MINI_OBJECT_FLAG_SET (message, GST_MESSAGE_FLAG_ASYNC_DELIVERY);
+
       GST_DEBUG_OBJECT (bus, "[msg %p] waiting for async delivery", message);
 
       /* now we lock the message mutex, send the message to the async
@@ -370,12 +375,18 @@
 
       /* now block till the message is freed */
       g_cond_wait (cond, lock);
+
+      /* we acquired a new ref from gst_message_dispose() so we can clean up */
       g_mutex_unlock (lock);
 
       GST_DEBUG_OBJECT (bus, "[msg %p] delivered asynchronously", message);
 
+      GST_MINI_OBJECT_FLAG_UNSET (message, GST_MESSAGE_FLAG_ASYNC_DELIVERY);
+
       g_mutex_clear (lock);
       g_cond_clear (cond);
+
+      gst_message_unref (message);
       break;
     }
     default:
@@ -388,8 +399,8 @@
 is_flushing:
   {
     GST_DEBUG_OBJECT (bus, "bus is flushing");
-    gst_message_unref (message);
     GST_OBJECT_UNLOCK (bus);
+    gst_message_unref (message);
 
     return FALSE;
   }
@@ -435,6 +446,7 @@
 gst_bus_set_flushing (GstBus * bus, gboolean flushing)
 {
   GstMessage *message;
+  GList *message_list = NULL;
 
   GST_OBJECT_LOCK (bus);
 
@@ -444,13 +456,15 @@
     GST_DEBUG_OBJECT (bus, "set bus flushing");
 
     while ((message = gst_bus_pop (bus)))
-      gst_message_unref (message);
+      message_list = g_list_prepend (message_list, message);
   } else {
     GST_DEBUG_OBJECT (bus, "unset bus flushing");
     GST_OBJECT_FLAG_UNSET (bus, GST_BUS_FLUSHING);
   }
 
   GST_OBJECT_UNLOCK (bus);
+
+  g_list_free_full (message_list, (GDestroyNotify) gst_message_unref);
 }
 
 /**
@@ -506,7 +520,7 @@
       if ((GST_MESSAGE_TYPE (message) & types) != 0) {
         /* Extra check to ensure extended types don't get matched unless
          * asked for */
-        if ((GST_MESSAGE_TYPE_IS_EXTENDED (message) == FALSE)
+        if ((!GST_MESSAGE_TYPE_IS_EXTENDED (message))
             || (types & GST_MESSAGE_EXTENDED)) {
           /* exit the loop, we have a message */
           goto beach;
@@ -799,8 +813,8 @@
   GST_DEBUG_OBJECT (bus, "finalize source %p", source);
 
   GST_OBJECT_LOCK (bus);
-  if (bus->priv->watch_id == source)
-    bus->priv->watch_id = NULL;
+  if (bus->priv->signal_watch == source)
+    bus->priv->signal_watch = NULL;
   GST_OBJECT_UNLOCK (bus);
 
   gst_object_unref (bsource->bus);
@@ -852,7 +866,7 @@
   guint id;
   GSource *source;
 
-  if (bus->priv->watch_id) {
+  if (bus->priv->signal_watch) {
     GST_ERROR_OBJECT (bus,
         "Tried to add new watch while one was already there");
     return 0;
@@ -870,7 +884,7 @@
   g_source_unref (source);
 
   if (id) {
-    bus->priv->watch_id = source;
+    bus->priv->signal_watch = source;
   }
 
   GST_DEBUG_OBJECT (bus, "New source %p with id %u", source, id);
@@ -878,7 +892,7 @@
 }
 
 /**
- * gst_bus_add_watch_full:
+ * gst_bus_add_watch_full: (rename-to gst_bus_add_watch)
  * @bus: a #GstBus to create the watch for.
  * @priority: The priority of the watch.
  * @func: A function to call when a message is received.
@@ -898,13 +912,13 @@
  * When @func is called, the message belongs to the caller; if you want to
  * keep a copy of it, call gst_message_ref() before leaving @func.
  *
- * The watch can be removed using g_source_remove() or by returning %FALSE
- * from @func.
+ * The watch can be removed using gst_bus_remove_watch() or by returning %FALSE
+ * from @func. If the watch was added to the default main context it is also
+ * possible to remove the watch using g_source_remove().
  *
  * MT safe.
  *
- * Returns: The event source id.
- * Rename to: gst_bus_add_watch
+ * Returns: The event source id or 0 if @bus already got an event source.
  */
 guint
 gst_bus_add_watch_full (GstBus * bus, gint priority,
@@ -937,10 +951,11 @@
  * There can only be a single bus watch per bus, you must remove it before you
  * can set a new one.
  *
- * The watch can be removed using g_source_remove() or by returning %FALSE
- * from @func.
+ * The watch can be removed using gst_bus_remove_watch() or by returning %FALSE
+ * from @func. If the watch was added to the default main context it is also
+ * possible to remove the watch using g_source_remove().
  *
- * Returns: The event source id.
+ * Returns: The event source id or 0 if @bus already got an event source.
  *
  * MT safe.
  */
@@ -951,6 +966,45 @@
       user_data, NULL);
 }
 
+/**
+ * gst_bus_remove_watch:
+ * @bus: a #GstBus to remove the watch from.
+ *
+ * Removes an installed bus watch from @bus.
+ *
+ * Returns: %TRUE on success or %FALSE if @bus has no event source.
+ *
+ * Since: 1.6
+ *
+ */
+gboolean
+gst_bus_remove_watch (GstBus * bus)
+{
+  GSource *watch_id;
+
+  g_return_val_if_fail (GST_IS_BUS (bus), FALSE);
+
+  GST_OBJECT_LOCK (bus);
+
+  if (bus->priv->signal_watch == NULL) {
+    GST_ERROR_OBJECT (bus, "no bus watch was present");
+    goto no_watch;
+  }
+
+  watch_id = bus->priv->signal_watch;
+
+  GST_OBJECT_UNLOCK (bus);
+
+  g_source_destroy (watch_id);
+
+  return TRUE;
+
+no_watch:
+  GST_OBJECT_UNLOCK (bus);
+
+  return FALSE;
+}
+
 typedef struct
 {
   GMainLoop *loop;
@@ -1255,13 +1309,12 @@
     goto done;
 
   /* this should not fail because the counter above takes care of it */
-  g_assert (bus->priv->signal_watch_id == 0);
+  g_assert (!bus->priv->signal_watch);
 
-  bus->priv->signal_watch_id =
-      gst_bus_add_watch_full_unlocked (bus, priority, gst_bus_async_signal_func,
+  gst_bus_add_watch_full_unlocked (bus, priority, gst_bus_async_signal_func,
       NULL, NULL);
 
-  if (G_UNLIKELY (bus->priv->signal_watch_id == 0))
+  if (G_UNLIKELY (!bus->priv->signal_watch))
     goto add_failed;
 
 done:
@@ -1316,7 +1369,7 @@
 void
 gst_bus_remove_signal_watch (GstBus * bus)
 {
-  guint id = 0;
+  GSource *source = NULL;
 
   g_return_if_fail (GST_IS_BUS (bus));
 
@@ -1331,16 +1384,16 @@
   if (bus->priv->num_signal_watchers > 0)
     goto done;
 
-  id = bus->priv->signal_watch_id;
-  bus->priv->signal_watch_id = 0;
+  GST_DEBUG_OBJECT (bus, "removing signal watch %u",
+      g_source_get_id (bus->priv->signal_watch));
 
-  GST_DEBUG_OBJECT (bus, "removing signal watch %u", id);
+  source = bus->priv->signal_watch;
 
 done:
   GST_OBJECT_UNLOCK (bus);
 
-  if (id)
-    g_source_remove (id);
+  if (source)
+    g_source_destroy (source);
 
   return;
 
diff --git a/gst/gstbus.h b/gst/gstbus.h
index 92d2160..d369682 100644
--- a/gst/gstbus.h
+++ b/gst/gstbus.h
@@ -159,6 +159,7 @@
 guint                   gst_bus_add_watch               (GstBus * bus,
                                                          GstBusFunc func,
                                                          gpointer user_data);
+gboolean                gst_bus_remove_watch            (GstBus * bus);
 
 /* polling the bus */
 GstMessage*             gst_bus_poll                    (GstBus *bus, GstMessageType events,
diff --git a/gst/gstcaps.c b/gst/gstcaps.c
index 51f7ae4..147b32c 100644
--- a/gst/gstcaps.c
+++ b/gst/gstcaps.c
@@ -484,8 +484,6 @@
   return s;
 }
 
-
-
 /**
  * gst_caps_steal_structure:
  * @caps: the #GstCaps to retrieve from
@@ -2358,3 +2356,151 @@
   g_value_take_string (dest_value,
       gst_caps_to_string (gst_value_get_caps (src_value)));
 }
+
+/**
+ * gst_caps_foreach:
+ * @caps: a #GstCaps
+ * @func: (scope call): a function to call for each field
+ * @user_data: (closure): private data
+ *
+ * Calls the provided function once for each structure and caps feature in the
+ * #GstCaps. The function must not modify the fields.
+ * Also see gst_caps_map_in_place() and gst_caps_filter_and_map_in_place().
+ *
+ * Returns: %TRUE if the supplied function returns %TRUE for each call,
+ * %FALSE otherwise.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_caps_foreach (const GstCaps * caps, GstCapsForeachFunc func,
+    gpointer user_data)
+{
+  guint i, n;
+  GstCapsFeatures *features;
+  GstStructure *structure;
+  gboolean ret;
+
+  g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+  g_return_val_if_fail (func != NULL, FALSE);
+
+  n = GST_CAPS_LEN (caps);
+
+  for (i = 0; i < n; i++) {
+    features = gst_caps_get_features_unchecked (caps, i);
+    structure = gst_caps_get_structure_unchecked (caps, i);
+
+    ret = func (features, structure, user_data);
+    if (G_UNLIKELY (!ret))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_caps_map_in_place:
+ * @caps: a #GstCaps
+ * @func: (scope call): a function to call for each field
+ * @user_data: (closure): private data
+ *
+ * Calls the provided function once for each structure and caps feature in the
+ * #GstCaps. In contrast to gst_caps_foreach(), the function may modify but not
+ * delete the structures and features. The caps must be mutable.
+ *
+ * Returns: %TRUE if the supplied function returns %TRUE for each call,
+ * %FALSE otherwise.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_caps_map_in_place (GstCaps * caps, GstCapsMapFunc func, gpointer user_data)
+{
+  guint i, n;
+  GstCapsFeatures *features;
+  GstStructure *structure;
+  gboolean ret;
+
+  g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+  g_return_val_if_fail (gst_caps_is_writable (caps), FALSE);
+  g_return_val_if_fail (func != NULL, FALSE);
+
+  n = GST_CAPS_LEN (caps);
+
+  for (i = 0; i < n; i++) {
+    features = gst_caps_get_features_unchecked (caps, i);
+    structure = gst_caps_get_structure_unchecked (caps, i);
+
+    /* Provide sysmem features if there are none yet */
+    if (!features) {
+      features =
+          gst_caps_features_copy (GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY);
+      gst_caps_set_features (caps, i, features);
+    }
+
+    ret = func (features, structure, user_data);
+    if (G_UNLIKELY (!ret))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_caps_filter_and_map_in_place:
+ * @caps: a #GstCaps
+ * @func: (scope call): a function to call for each field
+ * @user_data: (closure): private data
+ *
+ * Calls the provided function once for each structure and caps feature in the
+ * #GstCaps. In contrast to gst_caps_foreach(), the function may modify the
+ * structure and features. In contrast to gst_caps_filter_and_map_in_place(),
+ * the structure and features are removed from the caps if %FALSE is returned
+ * from the function.
+ * The caps must be mutable.
+ *
+ * Since: 1.6
+ */
+void
+gst_caps_filter_and_map_in_place (GstCaps * caps, GstCapsFilterMapFunc func,
+    gpointer user_data)
+{
+  guint i, n;
+  GstCapsFeatures *features;
+  GstStructure *structure;
+  gboolean ret;
+
+  g_return_if_fail (GST_IS_CAPS (caps));
+  g_return_if_fail (gst_caps_is_writable (caps));
+  g_return_if_fail (func != NULL);
+
+  n = GST_CAPS_LEN (caps);
+
+  for (i = 0; i < n;) {
+    features = gst_caps_get_features_unchecked (caps, i);
+    structure = gst_caps_get_structure_unchecked (caps, i);
+
+    /* Provide sysmem features if there are none yet */
+    if (!features) {
+      features =
+          gst_caps_features_copy (GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY);
+      gst_caps_set_features (caps, i, features);
+    }
+
+    ret = func (features, structure, user_data);
+    if (!ret) {
+      GST_CAPS_ARRAY (caps) = g_array_remove_index (GST_CAPS_ARRAY (caps), i);
+
+      gst_structure_set_parent_refcount (structure, NULL);
+      gst_structure_free (structure);
+      if (features) {
+        gst_caps_features_set_parent_refcount (features, NULL);
+        gst_caps_features_free (features);
+      }
+
+      n = GST_CAPS_LEN (caps);
+    } else {
+      i++;
+    }
+  }
+}
diff --git a/gst/gstcaps.h b/gst/gstcaps.h
index 4b09b8e..5cd1b78 100644
--- a/gst/gstcaps.h
+++ b/gst/gstcaps.h
@@ -363,6 +363,58 @@
   gpointer _gst_reserved[GST_PADDING];
 };
 
+/**
+ * GstCapsForeachFunc:
+ * @features: the #GstCapsFeatures
+ * @structure: the #GstStructure
+ * @user_data: user data
+ *
+ * A function that will be called in gst_caps_foreach(). The function may
+ * not modify @features or @structure.
+ *
+ * Returns: %TRUE if the foreach operation should continue, %FALSE if
+ * the foreach operation should stop with %FALSE.
+ *
+ * Since: 1.6
+ */
+typedef gboolean (*GstCapsForeachFunc) (GstCapsFeatures *features,
+                                        GstStructure    *structure,
+                                        gpointer         user_data);
+
+/**
+ * GstCapsMapFunc:
+ * @features: the #GstCapsFeatures
+ * @structure: the #GstStructure
+ * @user_data: user data
+ *
+ * A function that will be called in gst_caps_map_in_place(). The function
+ * may modify @features and @structure.
+ *
+ * Returns: %TRUE if the map operation should continue, %FALSE if
+ * the map operation should stop with %FALSE.
+ */
+typedef gboolean (*GstCapsMapFunc)     (GstCapsFeatures *features,
+                                        GstStructure    *structure,
+                                        gpointer         user_data);
+
+/**
+ * GstCapsFilterMapFunc:
+ * @features: the #GstCapsFeatures
+ * @structure: the #GstStructure
+ * @user_data: user data
+ *
+ * A function that will be called in gst_caps_filter_and_map_in_place().
+ * The function may modify @features and @structure, and both will be
+ * removed from the caps if %FALSE is returned.
+ *
+ * Returns: %TRUE if the features and structure should be preserved,
+ * %FALSE if it should be removed.
+ */
+typedef gboolean (*GstCapsFilterMapFunc) (GstCapsFeatures *features,
+                                          GstStructure    *structure,
+                                          gpointer user_data);
+
+
 GType             gst_caps_get_type                (void);
 
 GstCaps *         gst_caps_new_empty               (void);
@@ -417,6 +469,18 @@
                                                     const char    *field,
                                                     va_list        varargs);
 
+gboolean          gst_caps_foreach                 (const GstCaps       *caps,
+                                                    GstCapsForeachFunc   func,
+                                                    gpointer             user_data);
+
+gboolean          gst_caps_map_in_place            (GstCaps        *caps,
+                                                    GstCapsMapFunc  func,
+                                                    gpointer        user_data);
+
+void              gst_caps_filter_and_map_in_place (GstCaps              *caps,
+                                                    GstCapsFilterMapFunc  func,
+                                                    gpointer              user_data);
+
 /* tests */
 gboolean          gst_caps_is_any                  (const GstCaps *caps);
 gboolean          gst_caps_is_empty                (const GstCaps *caps);
diff --git a/gst/gstclock-linreg.c b/gst/gstclock-linreg.c
new file mode 100644
index 0000000..874917f
--- /dev/null
+++ b/gst/gstclock-linreg.c
@@ -0,0 +1,241 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *                    2004 Wim Taymans <wim@fluendo.com>
+ *                    2015 Jan Schmidt <jan@centricular.com>
+ *
+ * gstclock-linreg.c: Linear regression implementation, used in clock slaving
+ *
+ * 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_private.h"
+#include <time.h>
+
+#include "gstclock.h"
+#include "gstinfo.h"
+#include "gstutils.h"
+#include "glib-compat-private.h"
+
+/* Compute log2 of the passed 64-bit number by finding the highest set bit */
+static guint
+gst_log2 (GstClockTime in)
+{
+  const guint64 b[] =
+      { 0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000, 0xFFFFFFFF00000000LL };
+  const guint64 S[] = { 1, 2, 4, 8, 16, 32 };
+  int i;
+
+  guint count = 0;
+  for (i = 5; i >= 0; i--) {
+    if (in & b[i]) {
+      in >>= S[i];
+      count |= S[i];
+    }
+  }
+
+  return count;
+}
+
+/* http://mathworld.wolfram.com/LeastSquaresFitting.html
+ * with SLAVE_LOCK
+ */
+gboolean
+_priv_gst_do_linear_regression (GstClockTime * times, guint n,
+    GstClockTime * m_num, GstClockTime * m_denom, GstClockTime * b,
+    GstClockTime * xbase, gdouble * r_squared)
+{
+  GstClockTime *newx, *newy;
+  GstClockTime xmin, ymin, xbar, ybar, xbar4, ybar4;
+  GstClockTime xmax, ymax;
+  GstClockTimeDiff sxx, sxy, syy;
+  GstClockTime *x, *y;
+  gint i, j;
+  gint pshift = 0;
+  gint max_bits;
+
+  xbar = ybar = sxx = syy = sxy = 0;
+
+  x = times;
+  y = times + 2;
+
+  xmin = ymin = G_MAXUINT64;
+  xmax = ymax = 0;
+  for (i = j = 0; i < n; i++, j += 4) {
+    xmin = MIN (xmin, x[j]);
+    ymin = MIN (ymin, y[j]);
+
+    xmax = MAX (xmax, x[j]);
+    ymax = MAX (ymax, y[j]);
+  }
+
+  newx = times + 1;
+  newy = times + 3;
+
+  /* strip off unnecessary bits of precision */
+  for (i = j = 0; i < n; i++, j += 4) {
+    newx[j] = x[j] - xmin;
+    newy[j] = y[j] - ymin;
+  }
+
+#ifdef DEBUGGING_ENABLED
+  GST_CAT_DEBUG (GST_CAT_CLOCK, "reduced numbers:");
+  for (i = j = 0; i < n; i++, j += 4)
+    GST_CAT_DEBUG (GST_CAT_CLOCK,
+        "  %" G_GUINT64_FORMAT "  %" G_GUINT64_FORMAT, newx[j], newy[j]);
+#endif
+
+  /* have to do this precisely otherwise the results are pretty much useless.
+   * should guarantee that none of these accumulators can overflow */
+
+  /* quantities on the order of 1e10 to 1e13 -> 30-35 bits;
+   * window size a max of 2^10, so
+   this addition could end up around 2^45 or so -- ample headroom */
+  for (i = j = 0; i < n; i++, j += 4) {
+    /* Just in case assumptions about headroom prove false, let's check */
+    if ((newx[j] > 0 && G_MAXUINT64 - xbar <= newx[j]) ||
+        (newy[j] > 0 && G_MAXUINT64 - ybar <= newy[j])) {
+      GST_CAT_WARNING (GST_CAT_CLOCK,
+          "Regression overflowed in clock slaving! xbar %"
+          G_GUINT64_FORMAT " newx[j] %" G_GUINT64_FORMAT " ybar %"
+          G_GUINT64_FORMAT " newy[j] %" G_GUINT64_FORMAT, xbar, newx[j], ybar,
+          newy[j]);
+      return FALSE;
+    }
+
+    xbar += newx[j];
+    ybar += newy[j];
+  }
+  xbar /= n;
+  ybar /= n;
+
+  /* multiplying directly would give quantities on the order of 1e20-1e26 ->
+   * 60 bits to 70 bits times the window size that's 80 which is too much.
+   * Instead we (1) subtract off the xbar*ybar in the loop instead of after,
+   * to avoid accumulation; (2) shift off some estimated number of bits from
+   * each multiplicand to limit the expected ceiling. For strange
+   * distributions of input values, things can still overflow, in which
+   * case we drop precision and retry - at most a few times, in practice rarely
+   */
+
+  /* Guess how many bits we might need for the usual distribution of input,
+   * with a fallback loop that drops precision if things go pear-shaped */
+  max_bits = gst_log2 (MAX (xmax - xmin, ymax - ymin)) * 7 / 8 + gst_log2 (n);
+  if (max_bits > 64)
+    pshift = max_bits - 64;
+
+  i = 0;
+  do {
+#ifdef DEBUGGING_ENABLED
+    GST_CAT_DEBUG (GST_CAT_CLOCK,
+        "Restarting regression with precision shift %u", pshift);
+#endif
+
+    xbar4 = xbar >> pshift;
+    ybar4 = ybar >> pshift;
+    sxx = syy = sxy = 0;
+    for (i = j = 0; i < n; i++, j += 4) {
+      GstClockTime newx4, newy4;
+      GstClockTimeDiff tmp;
+
+      newx4 = newx[j] >> pshift;
+      newy4 = newy[j] >> pshift;
+
+      tmp = (newx4 + xbar4) * (newx4 - xbar4);
+      if (G_UNLIKELY (tmp > 0 && sxx > 0 && (G_MAXINT64 - sxx <= tmp))) {
+        do {
+          /* Drop some precision and restart */
+          pshift++;
+          sxx /= 4;
+          tmp /= 4;
+        } while (G_MAXINT64 - sxx <= tmp);
+        break;
+      } else if (G_UNLIKELY (tmp < 0 && sxx < 0 && (G_MAXINT64 - sxx >= tmp))) {
+        do {
+          /* Drop some precision and restart */
+          pshift++;
+          sxx /= 4;
+          tmp /= 4;
+        } while (G_MININT64 - sxx >= tmp);
+        break;
+      }
+      sxx += tmp;
+
+      tmp = newy4 * newy4 - ybar4 * ybar4;
+      if (G_UNLIKELY (tmp > 0 && syy > 0 && (G_MAXINT64 - syy <= tmp))) {
+        do {
+          pshift++;
+          syy /= 4;
+          tmp /= 4;
+        } while (G_MAXINT64 - syy <= tmp);
+        break;
+      } else if (G_UNLIKELY (tmp < 0 && syy < 0 && (G_MAXINT64 - syy >= tmp))) {
+        do {
+          pshift++;
+          syy /= 4;
+          tmp /= 4;
+        } while (G_MININT64 - syy >= tmp);
+        break;
+      }
+      syy += tmp;
+
+      tmp = newx4 * newy4 - xbar4 * ybar4;
+      if (G_UNLIKELY (tmp > 0 && sxy > 0 && (G_MAXINT64 - sxy <= tmp))) {
+        do {
+          pshift++;
+          sxy /= 4;
+          tmp /= 4;
+        } while (G_MAXINT64 - sxy <= tmp);
+        break;
+      } else if (G_UNLIKELY (tmp < 0 && sxy < 0 && (G_MININT64 - sxy >= tmp))) {
+        do {
+          pshift++;
+          sxy /= 4;
+          tmp /= 4;
+        } while (G_MININT64 - sxy >= tmp);
+        break;
+      }
+      sxy += tmp;
+    }
+  } while (i < n);
+
+  if (G_UNLIKELY (sxx == 0))
+    goto invalid;
+
+  *m_num = sxy;
+  *m_denom = sxx;
+  *b = (ymin + ybar) - gst_util_uint64_scale (xbar, *m_num, *m_denom);
+  /* Report base starting from the most recent observation */
+  *xbase = xmax;
+  *b += gst_util_uint64_scale (xmax - xmin, *m_num, *m_denom);
+
+  *r_squared = ((double) sxy * (double) sxy) / ((double) sxx * (double) syy);
+
+#ifdef DEBUGGING_ENABLED
+  GST_CAT_DEBUG (GST_CAT_CLOCK, "  m      = %g", ((double) *m_num) / *m_denom);
+  GST_CAT_DEBUG (GST_CAT_CLOCK, "  b      = %" G_GUINT64_FORMAT, *b);
+  GST_CAT_DEBUG (GST_CAT_CLOCK, "  xbase  = %" G_GUINT64_FORMAT, *xbase);
+  GST_CAT_DEBUG (GST_CAT_CLOCK, "  r2     = %g", *r_squared);
+#endif
+
+  return TRUE;
+
+invalid:
+  {
+    GST_CAT_DEBUG (GST_CAT_CLOCK, "sxx == 0, regression failed");
+    return FALSE;
+  }
+}
diff --git a/gst/gstclock.c b/gst/gstclock.c
index d413dff..2d8de0f 100644
--- a/gst/gstclock.c
+++ b/gst/gstclock.c
@@ -100,7 +100,6 @@
  * defines the minimum number of samples before the calibration is performed.
  */
 
-
 #include "gst_private.h"
 #include <time.h>
 
@@ -818,6 +817,60 @@
 }
 
 /**
+ * gst_clock_adjust_with_calibration:
+ * @clock: a #GstClock to use
+ * @internal_target: a clock time
+ * @cinternal: a reference internal time
+ * @cexternal: a reference external time
+ * @cnum: the numerator of the rate of the clock relative to its
+ *        internal time
+ * @cdenom: the denominator of the rate of the clock
+ *
+ * Converts the given @internal_target clock time to the external time,
+ * using the passed calibration parameters. This function performs the
+ * same calculation as gst_clock_adjust_unlocked() when called using the
+ * current calibration parameters, but doesn't ensure a monotonically
+ * increasing result as gst_clock_adjust_unlocked() does.
+ *
+ * Returns: the converted time of the clock.
+ *
+ * Since: 1.6
+ */
+GstClockTime
+gst_clock_adjust_with_calibration (GstClock * clock,
+    GstClockTime internal_target, GstClockTime cinternal,
+    GstClockTime cexternal, GstClockTime cnum, GstClockTime cdenom)
+{
+  GstClockTime ret;
+
+  /* avoid divide by 0 */
+  if (G_UNLIKELY (cdenom == 0))
+    cnum = cdenom = 1;
+
+  /* The formula is (internal - cinternal) * cnum / cdenom + cexternal
+   *
+   * Since we do math on unsigned 64-bit ints we have to special case for
+   * internal < cinternal to get the sign right. this case is not very common,
+   * though.
+   */
+  if (G_LIKELY (internal_target >= cinternal)) {
+    ret = internal_target - cinternal;
+    ret = gst_util_uint64_scale (ret, cnum, cdenom);
+    ret += cexternal;
+  } else {
+    ret = cinternal - internal_target;
+    ret = gst_util_uint64_scale (ret, cnum, cdenom);
+    /* clamp to 0 */
+    if (G_LIKELY (cexternal > ret))
+      ret = cexternal - ret;
+    else
+      ret = 0;
+  }
+
+  return ret;
+}
+
+/**
  * gst_clock_adjust_unlocked:
  * @clock: a #GstClock to use
  * @internal: a clock time
@@ -843,29 +896,9 @@
   cnum = priv->rate_numerator;
   cdenom = priv->rate_denominator;
 
-  /* avoid divide by 0 */
-  if (G_UNLIKELY (cdenom == 0))
-    cnum = cdenom = 1;
-
-  /* The formula is (internal - cinternal) * cnum / cdenom + cexternal
-   *
-   * Since we do math on unsigned 64-bit ints we have to special case for
-   * internal < cinternal to get the sign right. this case is not very common,
-   * though.
-   */
-  if (G_LIKELY (internal >= cinternal)) {
-    ret = internal - cinternal;
-    ret = gst_util_uint64_scale (ret, cnum, cdenom);
-    ret += cexternal;
-  } else {
-    ret = cinternal - internal;
-    ret = gst_util_uint64_scale (ret, cnum, cdenom);
-    /* clamp to 0 */
-    if (G_LIKELY (cexternal > ret))
-      ret = cexternal - ret;
-    else
-      ret = 0;
-  }
+  ret =
+      gst_clock_adjust_with_calibration (clock, internal, cinternal, cexternal,
+      cnum, cdenom);
 
   /* make sure the time is increasing */
   priv->last_time = MAX (ret, priv->last_time);
@@ -1228,132 +1261,6 @@
   return result;
 }
 
-/* http://mathworld.wolfram.com/LeastSquaresFitting.html
- * with SLAVE_LOCK
- */
-static gboolean
-do_linear_regression (GstClock * clock, GstClockTime * m_num,
-    GstClockTime * m_denom, GstClockTime * b, GstClockTime * xbase,
-    gdouble * r_squared)
-{
-  GstClockTime *newx, *newy;
-  GstClockTime xmin, ymin, xbar, ybar, xbar4, ybar4;
-  GstClockTimeDiff sxx, sxy, syy;
-  GstClockTime *x, *y;
-  gint i, j;
-  guint n;
-  GstClockPrivate *priv;
-
-  xbar = ybar = sxx = syy = sxy = 0;
-
-  priv = clock->priv;
-
-  x = priv->times;
-  y = priv->times + 2;
-  n = priv->filling ? priv->time_index : priv->window_size;
-
-#ifdef DEBUGGING_ENABLED
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "doing regression on:");
-  for (i = j = 0; i < n; i++, j += 4)
-    GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock,
-        "  %" G_GUINT64_FORMAT "  %" G_GUINT64_FORMAT, x[j], y[j]);
-#endif
-
-  xmin = ymin = G_MAXUINT64;
-  for (i = j = 0; i < n; i++, j += 4) {
-    xmin = MIN (xmin, x[j]);
-    ymin = MIN (ymin, y[j]);
-  }
-
-#ifdef DEBUGGING_ENABLED
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "min x: %" G_GUINT64_FORMAT,
-      xmin);
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "min y: %" G_GUINT64_FORMAT,
-      ymin);
-#endif
-
-  newx = priv->times + 1;
-  newy = priv->times + 3;
-
-  /* strip off unnecessary bits of precision */
-  for (i = j = 0; i < n; i++, j += 4) {
-    newx[j] = x[j] - xmin;
-    newy[j] = y[j] - ymin;
-  }
-
-#ifdef DEBUGGING_ENABLED
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "reduced numbers:");
-  for (i = j = 0; i < n; i++, j += 4)
-    GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock,
-        "  %" G_GUINT64_FORMAT "  %" G_GUINT64_FORMAT, newx[j], newy[j]);
-#endif
-
-  /* have to do this precisely otherwise the results are pretty much useless.
-   * should guarantee that none of these accumulators can overflow */
-
-  /* quantities on the order of 1e10 -> 30 bits; window size a max of 2^10, so
-     this addition could end up around 2^40 or so -- ample headroom */
-  for (i = j = 0; i < n; i++, j += 4) {
-    xbar += newx[j];
-    ybar += newy[j];
-  }
-  xbar /= n;
-  ybar /= n;
-
-#ifdef DEBUGGING_ENABLED
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "  xbar  = %" G_GUINT64_FORMAT,
-      xbar);
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "  ybar  = %" G_GUINT64_FORMAT,
-      ybar);
-#endif
-
-  /* multiplying directly would give quantities on the order of 1e20 -> 60 bits;
-     times the window size that's 70 which is too much. Instead we (1) subtract
-     off the xbar*ybar in the loop instead of after, to avoid accumulation; (2)
-     shift off 4 bits from each multiplicand, giving an expected ceiling of 52
-     bits, which should be enough. Need to check the incoming range and domain
-     to ensure this is an appropriate loss of precision though. */
-  xbar4 = xbar >> 4;
-  ybar4 = ybar >> 4;
-  for (i = j = 0; i < n; i++, j += 4) {
-    GstClockTime newx4, newy4;
-
-    newx4 = newx[j] >> 4;
-    newy4 = newy[j] >> 4;
-
-    sxx += newx4 * newx4 - xbar4 * xbar4;
-    syy += newy4 * newy4 - ybar4 * ybar4;
-    sxy += newx4 * newy4 - xbar4 * ybar4;
-  }
-
-  if (G_UNLIKELY (sxx == 0))
-    goto invalid;
-
-  *m_num = sxy;
-  *m_denom = sxx;
-  *xbase = xmin;
-  *b = (ybar + ymin) - gst_util_uint64_scale (xbar, *m_num, *m_denom);
-  *r_squared = ((double) sxy * (double) sxy) / ((double) sxx * (double) syy);
-
-#ifdef DEBUGGING_ENABLED
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "  m      = %g",
-      ((double) *m_num) / *m_denom);
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "  b      = %" G_GUINT64_FORMAT,
-      *b);
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "  xbase  = %" G_GUINT64_FORMAT,
-      *xbase);
-  GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "  r2     = %g", *r_squared);
-#endif
-
-  return TRUE;
-
-invalid:
-  {
-    GST_CAT_DEBUG_OBJECT (GST_CAT_CLOCK, clock, "sxx == 0, regression failed");
-    return FALSE;
-  }
-}
-
 /**
  * gst_clock_add_observation:
  * @clock: a #GstClock 
@@ -1382,7 +1289,46 @@
     GstClockTime master, gdouble * r_squared)
 {
   GstClockTime m_num, m_denom, b, xbase;
+
+  if (!gst_clock_add_observation_unapplied (clock, slave, master, r_squared,
+          &xbase, &b, &m_num, &m_denom))
+    return FALSE;
+
+  /* if we have a valid regression, adjust the clock */
+  gst_clock_set_calibration (clock, xbase, b, m_num, m_denom);
+
+  return TRUE;
+}
+
+/**
+ * gst_clock_add_observation_unapplied:
+ * @clock: a #GstClock
+ * @slave: a time on the slave
+ * @master: a time on the master
+ * @r_squared: (out): a pointer to hold the result
+ * @internal: (out) (allow-none): a location to store the internal time
+ * @external: (out) (allow-none): a location to store the external time
+ * @rate_num: (out) (allow-none): a location to store the rate numerator
+ * @rate_denom: (out) (allow-none): a location to store the rate denominator
+ *
+ * Add a clock observation to the internal slaving algorithm the same as
+ * gst_clock_add_observation(), and return the result of the master clock
+ * estimation, without updating the internal calibration.
+ *
+ * The caller can then take the results and call gst_clock_set_calibration()
+ * with the values, or some modified version of them.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_clock_add_observation_unapplied (GstClock * clock, GstClockTime slave,
+    GstClockTime master, gdouble * r_squared,
+    GstClockTime * internal, GstClockTime * external,
+    GstClockTime * rate_num, GstClockTime * rate_denom)
+{
+  GstClockTime m_num, m_denom, b, xbase;
   GstClockPrivate *priv;
+  guint n;
 
   g_return_val_if_fail (GST_IS_CLOCK (clock), FALSE);
   g_return_val_if_fail (r_squared != NULL, FALSE);
@@ -1407,7 +1353,9 @@
   if (G_UNLIKELY (priv->filling && priv->time_index < priv->window_threshold))
     goto filling;
 
-  if (!do_linear_regression (clock, &m_num, &m_denom, &b, &xbase, r_squared))
+  n = priv->filling ? priv->time_index : priv->window_size;
+  if (!_priv_gst_do_linear_regression (priv->times, n, &m_num, &m_denom, &b,
+          &xbase, r_squared))
     goto invalid;
 
   GST_CLOCK_SLAVE_UNLOCK (clock);
@@ -1416,8 +1364,14 @@
       "adjusting clock to m=%" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT ", b=%"
       G_GUINT64_FORMAT " (rsquared=%g)", m_num, m_denom, b, *r_squared);
 
-  /* if we have a valid regression, adjust the clock */
-  gst_clock_set_calibration (clock, xbase, b, m_num, m_denom);
+  if (internal)
+    *internal = xbase;
+  if (external)
+    *external = b;
+  if (rate_num)
+    *rate_num = m_num;
+  if (rate_denom)
+    *rate_denom = m_denom;
 
   return TRUE;
 
diff --git a/gst/gstclock.h b/gst/gstclock.h
index 2fbe90c..c2239e5 100644
--- a/gst/gstclock.h
+++ b/gst/gstclock.h
@@ -478,10 +478,22 @@
 gboolean                gst_clock_add_observation       (GstClock *clock, GstClockTime slave,
                                                          GstClockTime master, gdouble *r_squared);
 
+gboolean                gst_clock_add_observation_unapplied (GstClock *clock, GstClockTime slave,
+                                                         GstClockTime master, gdouble *r_squared,
+                                                         GstClockTime *internal,
+                                                         GstClockTime *external,
+                                                         GstClockTime *rate_num,
+                                                         GstClockTime *rate_denom);
 
 /* getting and adjusting internal/external time */
 GstClockTime            gst_clock_get_internal_time     (GstClock *clock);
 GstClockTime            gst_clock_adjust_unlocked       (GstClock *clock, GstClockTime internal);
+GstClockTime            gst_clock_adjust_with_calibration (GstClock *clock,
+                                                         GstClockTime internal_target,
+                                                         GstClockTime cinternal,
+                                                         GstClockTime cexternal,
+                                                         GstClockTime cnum,
+                                                         GstClockTime cdenom);
 GstClockTime            gst_clock_unadjust_unlocked     (GstClock * clock, GstClockTime external);
 
 
diff --git a/gst/gstcontrolbinding.c b/gst/gstcontrolbinding.c
index 9e02a47..11bd65d 100644
--- a/gst/gstcontrolbinding.c
+++ b/gst/gstcontrolbinding.c
@@ -468,5 +468,5 @@
 gst_control_binding_is_disabled (GstControlBinding * binding)
 {
   g_return_val_if_fail (GST_IS_CONTROL_BINDING (binding), TRUE);
-  return (binding->disabled == TRUE);
+  return ! !binding->disabled;
 }
diff --git a/gst/gstdebugutils.c b/gst/gstdebugutils.c
index 96901c3..4e5dcd2 100644
--- a/gst/gstdebugutils.c
+++ b/gst/gstdebugutils.c
@@ -56,6 +56,8 @@
 
 extern const gchar *priv_gst_dump_dot_dir;      /* NULL *//* set from gst.c */
 
+#define PARAM_MAX_LENGTH 80
+
 const gchar spaces[] = {
   "                                "    /* 32 */
       "                                "        /* 64 */
@@ -63,8 +65,6 @@
       "                                "        /* 128 */
 };
 
-extern GstClockTime _priv_gst_info_start_time;
-
 static gchar *
 debug_dump_make_object_name (GstObject * obj)
 {
@@ -92,13 +92,15 @@
 }
 
 static gchar *
-debug_dump_get_element_params (GstElement * element)
+debug_dump_get_element_params (GstElement * element,
+    GstDebugGraphDetails details)
 {
   gchar *param_name = NULL;
   GParamSpec **properties, *property;
   GValue value = { 0, };
   guint i, number_of_properties;
   gchar *tmp, *value_str;
+  const gchar *ellipses;
 
   /* get paramspecs and show non-default properties */
   properties =
@@ -108,7 +110,7 @@
     for (i = 0; i < number_of_properties; i++) {
       property = properties[i];
 
-      /* ski some properties */
+      /* skip some properties */
       if (!(property->flags & G_PARAM_READABLE))
         continue;
       if (!strcmp (property->name, "name"))
@@ -120,14 +122,31 @@
         tmp = g_strdup_value_contents (&value);
         value_str = g_strescape (tmp, NULL);
         g_free (tmp);
-        if (param_name) {
+
+        /* too long, ellipsize */
+        if (!(details & GST_DEBUG_GRAPH_SHOW_FULL_PARAMS) &&
+            strlen (value_str) > PARAM_MAX_LENGTH)
+          ellipses = "…";
+        else
+          ellipses = "";
+
+        if (param_name)
           tmp = param_name;
-          param_name = g_strdup_printf ("%s\\n%s=%s",
-              tmp, property->name, value_str);
-          g_free (tmp);
+        else
+          tmp = (char *) "";
+
+        if (details & GST_DEBUG_GRAPH_SHOW_FULL_PARAMS) {
+          param_name = g_strdup_printf ("%s\\n%s=%s", tmp, property->name,
+              value_str);
         } else {
-          param_name = g_strdup_printf ("\\n%s=%s", property->name, value_str);
+          param_name = g_strdup_printf ("%s\\n%s=%."
+              G_STRINGIFY (PARAM_MAX_LENGTH) "s%s", tmp, property->name,
+              value_str, ellipses);
         }
+
+        if (tmp[0] != '\0')
+          g_free (tmp);
+
         g_free (value_str);
       }
       g_value_unset (&value);
@@ -139,7 +158,7 @@
 
 static void
 debug_dump_pad (GstPad * pad, const gchar * color_name,
-    const gchar * element_name, GstDebugGraphDetails details, FILE * out,
+    const gchar * element_name, GstDebugGraphDetails details, GString * str,
     const gint indent)
 {
   GstPadTemplate *pad_templ;
@@ -193,12 +212,12 @@
         GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_BLOCKING) ? 'B' : 'b';
     pad_flags[3] = '\0';
 
-    fprintf (out,
+    g_string_append_printf (str,
         "%s  %s_%s [color=black, fillcolor=\"%s\", label=\"%s\\n[%c][%s]%s\", height=\"0.2\", style=\"%s\"];\n",
         spc, element_name, pad_name, color_name, GST_OBJECT_NAME (pad),
         activation_mode[pad->mode], pad_flags, task_mode, style_name);
   } else {
-    fprintf (out,
+    g_string_append_printf (str,
         "%s  %s_%s [color=black, fillcolor=\"%s\", label=\"%s\", height=\"0.2\", style=\"%s\"];\n",
         spc, element_name, pad_name, color_name, GST_OBJECT_NAME (pad),
         style_name);
@@ -209,7 +228,7 @@
 
 static void
 debug_dump_element_pad (GstPad * pad, GstElement * element,
-    GstDebugGraphDetails details, FILE * out, const gint indent)
+    GstDebugGraphDetails details, GString * str, const gint indent)
 {
   GstElement *target_element;
   GstPad *target_pad, *tmp_pad;
@@ -237,15 +256,17 @@
           target_element_name = g_strdup ("");
         }
         debug_dump_pad (target_pad, color_name, target_element_name, details,
-            out, indent);
+            str, indent);
         /* src ghostpad relationship */
         pad_name = debug_dump_make_object_name (GST_OBJECT (pad));
         target_pad_name = debug_dump_make_object_name (GST_OBJECT (target_pad));
         if (dir == GST_PAD_SRC) {
-          fprintf (out, "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n", spc,
+          g_string_append_printf (str,
+              "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n", spc,
               target_element_name, target_pad_name, element_name, pad_name);
         } else {
-          fprintf (out, "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n", spc,
+          g_string_append_printf (str,
+              "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n", spc,
               element_name, pad_name, target_element_name, target_pad_name);
         }
         g_free (target_pad_name);
@@ -263,7 +284,7 @@
             GST_PAD_SINK) ? "#aaaaff" : "#cccccc");
   }
   /* pads */
-  debug_dump_pad (pad, color_name, element_name, details, out, indent);
+  debug_dump_pad (pad, color_name, element_name, details, str, indent);
   g_free (element_name);
 }
 
@@ -359,7 +380,7 @@
 
 static void
 debug_dump_element_pad_link (GstPad * pad, GstElement * element,
-    GstDebugGraphDetails details, FILE * out, const gint indent)
+    GstDebugGraphDetails details, GString * str, const gint indent)
 {
   GstElement *peer_element;
   GstPad *peer_pad;
@@ -416,13 +437,14 @@
 
     /* pad link */
     if (media) {
-      fprintf (out, "%s%s_%s -> %s_%s [label=\"%s\"]\n", spc,
+      g_string_append_printf (str, "%s%s_%s -> %s_%s [label=\"%s\"]\n", spc,
           element_name, pad_name, peer_element_name, peer_pad_name, media);
       g_free (media);
     } else if (media_src && media_sink) {
       /* dot has some issues with placement of head and taillabels,
        * we need an empty label to make space */
-      fprintf (out, "%s%s_%s -> %s_%s [labeldistance=\"10\", labelangle=\"0\", "
+      g_string_append_printf (str,
+          "%s%s_%s -> %s_%s [labeldistance=\"10\", labelangle=\"0\", "
           "label=\"                                                  \", "
           "taillabel=\"%s\", headlabel=\"%s\"]\n",
           spc, element_name, pad_name, peer_element_name, peer_pad_name,
@@ -430,7 +452,7 @@
       g_free (media_src);
       g_free (media_sink);
     } else {
-      fprintf (out, "%s%s_%s -> %s_%s\n", spc,
+      g_string_append_printf (str, "%s%s_%s -> %s_%s\n", spc,
           element_name, pad_name, peer_element_name, peer_pad_name);
     }
 
@@ -446,7 +468,7 @@
 
 static void
 debug_dump_element_pads (GstIterator * pad_iter, GstPad * pad,
-    GstElement * element, GstDebugGraphDetails details, FILE * out,
+    GstElement * element, GstDebugGraphDetails details, GString * str,
     const gint indent, guint * src_pads, guint * sink_pads)
 {
   GValue item = { 0, };
@@ -458,7 +480,7 @@
     switch (gst_iterator_next (pad_iter, &item)) {
       case GST_ITERATOR_OK:
         pad = g_value_get_object (&item);
-        debug_dump_element_pad (pad, element, details, out, indent);
+        debug_dump_element_pad (pad, element, details, str, indent);
         dir = gst_pad_get_direction (pad);
         if (dir == GST_PAD_SRC)
           (*src_pads)++;
@@ -486,8 +508,8 @@
  * Helper for gst_debug_bin_to_dot_file() to recursively dump a pipeline.
  */
 static void
-debug_dump_element (GstBin * bin, GstDebugGraphDetails details, FILE * out,
-    const gint indent)
+debug_dump_element (GstBin * bin, GstDebugGraphDetails details,
+    GString * str, const gint indent)
 {
   GstIterator *element_iter, *pad_iter;
   gboolean elements_done, pads_done;
@@ -513,15 +535,18 @@
           state_name = debug_dump_get_element_state (GST_ELEMENT (element));
         }
         if (details & GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS) {
-          param_name = debug_dump_get_element_params (GST_ELEMENT (element));
+          param_name = debug_dump_get_element_params (GST_ELEMENT (element),
+              details);
         }
         /* elements */
-        fprintf (out, "%ssubgraph cluster_%s {\n", spc, element_name);
-        fprintf (out, "%s  fontname=\"Bitstream Vera Sans\";\n", spc);
-        fprintf (out, "%s  fontsize=\"8\";\n", spc);
-        fprintf (out, "%s  style=filled;\n", spc);
-        fprintf (out, "%s  color=black;\n\n", spc);
-        fprintf (out, "%s  label=\"%s\\n%s%s%s\";\n", spc,
+        g_string_append_printf (str, "%ssubgraph cluster_%s {\n", spc,
+            element_name);
+        g_string_append_printf (str, "%s  fontname=\"Bitstream Vera Sans\";\n",
+            spc);
+        g_string_append_printf (str, "%s  fontsize=\"8\";\n", spc);
+        g_string_append_printf (str, "%s  style=filled;\n", spc);
+        g_string_append_printf (str, "%s  color=black;\n\n", spc);
+        g_string_append_printf (str, "%s  label=\"%s\\n%s%s%s\";\n", spc,
             G_OBJECT_TYPE_NAME (element), GST_OBJECT_NAME (element),
             (state_name ? state_name : ""), (param_name ? param_name : "")
             );
@@ -537,30 +562,30 @@
 
         src_pads = sink_pads = 0;
         if ((pad_iter = gst_element_iterate_sink_pads (element))) {
-          debug_dump_element_pads (pad_iter, pad, element, details, out, indent,
-              &src_pads, &sink_pads);
+          debug_dump_element_pads (pad_iter, pad, element, details, str,
+              indent, &src_pads, &sink_pads);
           gst_iterator_free (pad_iter);
         }
         if ((pad_iter = gst_element_iterate_src_pads (element))) {
-          debug_dump_element_pads (pad_iter, pad, element, details, out, indent,
-              &src_pads, &sink_pads);
+          debug_dump_element_pads (pad_iter, pad, element, details, str,
+              indent, &src_pads, &sink_pads);
           gst_iterator_free (pad_iter);
         }
         if (GST_IS_BIN (element)) {
-          fprintf (out, "%s  fillcolor=\"#ffffff\";\n", spc);
+          g_string_append_printf (str, "%s  fillcolor=\"#ffffff\";\n", spc);
           /* recurse */
-          debug_dump_element (GST_BIN (element), details, out, indent + 1);
+          debug_dump_element (GST_BIN (element), details, str, indent + 1);
         } else {
           if (src_pads && !sink_pads)
-            fprintf (out, "%s  fillcolor=\"#ffaaaa\";\n", spc);
+            g_string_append_printf (str, "%s  fillcolor=\"#ffaaaa\";\n", spc);
           else if (!src_pads && sink_pads)
-            fprintf (out, "%s  fillcolor=\"#aaaaff\";\n", spc);
+            g_string_append_printf (str, "%s  fillcolor=\"#aaaaff\";\n", spc);
           else if (src_pads && sink_pads)
-            fprintf (out, "%s  fillcolor=\"#aaffaa\";\n", spc);
+            g_string_append_printf (str, "%s  fillcolor=\"#aaffaa\";\n", spc);
           else
-            fprintf (out, "%s  fillcolor=\"#ffffff\";\n", spc);
+            g_string_append_printf (str, "%s  fillcolor=\"#ffffff\";\n", spc);
         }
-        fprintf (out, "%s}\n\n", spc);
+        g_string_append_printf (str, "%s}\n\n", spc);
         if ((pad_iter = gst_element_iterate_pads (element))) {
           pads_done = FALSE;
           while (!pads_done) {
@@ -569,7 +594,7 @@
                 pad = g_value_get_object (&item2);
                 if (gst_pad_is_linked (pad)) {
                   if (gst_pad_get_direction (pad) == GST_PAD_SRC) {
-                    debug_dump_element_pad_link (pad, element, details, out,
+                    debug_dump_element_pad_link (pad, element, details, str,
                         indent);
                   } else {
                     GstPad *peer_pad = gst_pad_get_peer (pad);
@@ -578,7 +603,7 @@
                       if (!GST_IS_GHOST_PAD (peer_pad)
                           && GST_IS_PROXY_PAD (peer_pad)) {
                         debug_dump_element_pad_link (peer_pad, NULL, details,
-                            out, indent);
+                            str, indent);
                       }
                       gst_object_unref (peer_pad);
                     }
@@ -614,6 +639,80 @@
   gst_iterator_free (element_iter);
 }
 
+static void
+debug_dump_header (GstBin * bin, GstDebugGraphDetails details, GString * str)
+{
+  gchar *state_name = NULL;
+  gchar *param_name = NULL;
+
+  if (details & GST_DEBUG_GRAPH_SHOW_STATES) {
+    state_name = debug_dump_get_element_state (GST_ELEMENT (bin));
+  }
+  if (details & GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS) {
+    param_name = debug_dump_get_element_params (GST_ELEMENT (bin), details);
+  }
+
+  /* write header */
+  g_string_append_printf (str,
+      "digraph pipeline {\n"
+      "  rankdir=LR;\n"
+      "  fontname=\"sans\";\n"
+      "  fontsize=\"10\";\n"
+      "  labelloc=t;\n"
+      "  nodesep=.1;\n"
+      "  ranksep=.2;\n"
+      "  label=\"<%s>\\n%s%s%s\";\n"
+      "  node [style=filled, shape=box, fontsize=\"9\", fontname=\"sans\", margin=\"0.0,0.0\"];\n"
+      "  edge [labelfontsize=\"6\", fontsize=\"9\", fontname=\"monospace\"];\n"
+      "  \n"
+      "  legend [\n"
+      "    pos=\"0,0!\",\n"
+      "    margin=\"0.05,0.05\",\n"
+      "    label=\"Legend\\lElement-States: [~] void-pending, [0] null, [-] ready, [=] paused, [>] playing\\lPad-Activation: [-] none, [>] push, [<] pull\\lPad-Flags: [b]locked, [f]lushing, [b]locking; upper-case is set\\lPad-Task: [T] has started task, [t] has paused task\\l\"\n,"
+      "  ];"
+      "\n", G_OBJECT_TYPE_NAME (bin), GST_OBJECT_NAME (bin),
+      (state_name ? state_name : ""), (param_name ? param_name : "")
+      );
+
+  if (state_name)
+    g_free (state_name);
+  if (param_name)
+    g_free (param_name);
+}
+
+static void
+debug_dump_footer (GString * str)
+{
+  g_string_append_printf (str, "}\n");
+}
+
+/*
+ * gst_debug_bin_to_dot_data:
+ * @bin: the top-level pipeline that should be analyzed
+ *
+ * To aid debugging applications one can use this method to obtain the whole
+ * network of gstreamer elements that form the pipeline into an dot file.
+ * This data can be processed with graphviz to get an image.
+ *
+ * Returns: (transfer full): a string containing the pipeline in graphviz
+ * dot format.
+ */
+gchar *
+gst_debug_bin_to_dot_data (GstBin * bin, GstDebugGraphDetails details)
+{
+  GString *str;
+
+  g_return_val_if_fail (GST_IS_BIN (bin), NULL);
+
+  str = g_string_new (NULL);
+
+  debug_dump_header (bin, details, str);
+  debug_dump_element (bin, details, str, 1);
+  debug_dump_footer (str);
+
+  return g_string_free (str, FALSE);
+}
+
 /*
  * gst_debug_bin_to_dot_file:
  * @bin: the top-level pipeline that should be analyzed
@@ -648,47 +747,14 @@
       priv_gst_dump_dot_dir, file_name);
 
   if ((out = fopen (full_file_name, "wb"))) {
-    gchar *state_name = NULL;
-    gchar *param_name = NULL;
+    gchar *buf;
 
-    if (details & GST_DEBUG_GRAPH_SHOW_STATES) {
-      state_name = debug_dump_get_element_state (GST_ELEMENT (bin));
-    }
-    if (details & GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS) {
-      param_name = debug_dump_get_element_params (GST_ELEMENT (bin));
-    }
+    buf = gst_debug_bin_to_dot_data (bin, details);
+    fputs (buf, out);
 
-    /* write header */
-    fprintf (out,
-        "digraph pipeline {\n"
-        "  rankdir=LR;\n"
-        "  fontname=\"sans\";\n"
-        "  fontsize=\"10\";\n"
-        "  labelloc=t;\n"
-        "  nodesep=.1;\n"
-        "  ranksep=.2;\n"
-        "  label=\"<%s>\\n%s%s%s\";\n"
-        "  node [style=filled, shape=box, fontsize=\"9\", fontname=\"sans\", margin=\"0.0,0.0\"];\n"
-        "  edge [labelfontsize=\"6\", fontsize=\"9\", fontname=\"monospace\"];\n"
-        "  \n"
-        "  legend [\n"
-        "    pos=\"0,0!\",\n"
-        "    margin=\"0.05,0.05\",\n"
-        "    label=\"Legend\\lElement-States: [~] void-pending, [0] null, [-] ready, [=] paused, [>] playing\\lPad-Activation: [-] none, [>] push, [<] pull\\lPad-Flags: [b]locked, [f]lushing, [b]locking; upper-case is set\\lPad-Task: [T] has started task, [t] has paused task\\l\"\n,"
-        "  ];"
-        "\n", G_OBJECT_TYPE_NAME (bin), GST_OBJECT_NAME (bin),
-        (state_name ? state_name : ""), (param_name ? param_name : "")
-        );
-    if (state_name)
-      g_free (state_name);
-    if (param_name)
-      g_free (param_name);
-
-    debug_dump_element (bin, details, out, 1);
-
-    /* write footer */
-    fprintf (out, "}\n");
+    g_free (buf);
     fclose (out);
+
     GST_INFO ("wrote bin graph to : '%s'", full_file_name);
   } else {
     GST_WARNING ("Failed to open file '%s' for writing: %s", full_file_name,
diff --git a/gst/gstdebugutils.h b/gst/gstdebugutils.h
index ee0d193..06618f9 100644
--- a/gst/gstdebugutils.h
+++ b/gst/gstdebugutils.h
@@ -33,9 +33,14 @@
  * GstDebugGraphDetails:
  * @GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE: show caps-name on edges
  * @GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS: show caps-details on edges
- * @GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS: show modified parameters on elements
+ * @GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS: show modified parameters on
+ *                                           elements
  * @GST_DEBUG_GRAPH_SHOW_STATES: show element states
- * @GST_DEBUG_GRAPH_SHOW_ALL: show all details
+ * @GST_DEBUG_GRAPH_SHOW_FULL_PARAMS: show full element parameter values even
+ *                                    if they are very long
+ * @GST_DEBUG_GRAPH_SHOW_ALL: show all the typical details that one might want
+ * @GST_DEBUG_GRAPH_SHOW_VERBOSE: show all details regardless of how large or
+ *                                verbose they make the resulting output
  *
  * Available details for pipeline graphs produced by GST_DEBUG_BIN_TO_DOT_FILE()
  * and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS().
@@ -45,12 +50,15 @@
   GST_DEBUG_GRAPH_SHOW_CAPS_DETAILS       = (1<<1),
   GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS = (1<<2),
   GST_DEBUG_GRAPH_SHOW_STATES             = (1<<3),
-  GST_DEBUG_GRAPH_SHOW_ALL                = ((1<<4)-1)
+  GST_DEBUG_GRAPH_SHOW_FULL_PARAMS        = (1<<4),
+  GST_DEBUG_GRAPH_SHOW_ALL                = ((1<<4)-1),
+  GST_DEBUG_GRAPH_SHOW_VERBOSE            = (-1)
 } GstDebugGraphDetails;
 
 
 /********** pipeline graphs **********/
 
+gchar * gst_debug_bin_to_dot_data (GstBin *bin, GstDebugGraphDetails details);
 void gst_debug_bin_to_dot_file (GstBin *bin, GstDebugGraphDetails details, const gchar *file_name);
 void gst_debug_bin_to_dot_file_with_ts (GstBin *bin, GstDebugGraphDetails details, const gchar *file_name);
 
diff --git a/gst/gstdevicemonitor.c b/gst/gstdevicemonitor.c
index a1394a2..a1b1180 100644
--- a/gst/gstdevicemonitor.c
+++ b/gst/gstdevicemonitor.c
@@ -223,7 +223,7 @@
 {
   GstDeviceMonitor *self = GST_DEVICE_MONITOR (object);
 
-  g_return_if_fail (self->priv->started == FALSE);
+  g_return_if_fail (!self->priv->started);
 
   if (self->priv->providers) {
     while (self->priv->providers->len)
diff --git a/gst/gstelement.c b/gst/gstelement.c
index 8e68a2a..0a5cdb0 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -795,7 +795,6 @@
       break;
   }
   element->pads = g_list_remove (element->pads, pad);
-  GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_NEED_PARENT);
   element->numpads--;
   element->pads_cookie++;
   GST_OBJECT_UNLOCK (element);
@@ -949,7 +948,7 @@
     pad = gst_element_get_static_pad (element, name);
     if (pad) {
       gst_object_unref (pad);
-      /* FIXME 0.11: Change this to g_return_val_if_fail() */
+      /* FIXME 2.0: Change this to g_return_val_if_fail() */
       g_critical ("Element %s already has a pad named %s, the behaviour of "
           " gst_element_get_request_pad() for existing pads is undefined!",
           GST_ELEMENT_NAME (element), name);
@@ -977,7 +976,7 @@
  *
  * This method is slower than manually getting the pad template and calling
  * gst_element_request_pad() if the pads should have a specific name (e.g.
- * @name is "src_1" instead of "src_%u").
+ * @name is "src_1" instead of "src_\%u").
  *
  * Returns: (transfer full) (nullable): requested #GstPad if found,
  *     otherwise %NULL.  Release after usage.
diff --git a/gst/gsterror.c b/gst/gsterror.c
index 0cf5285..6c0ef77 100644
--- a/gst/gsterror.c
+++ b/gst/gsterror.c
@@ -96,13 +96,13 @@
  * </itemizedlist>
  */
 
-/* FIXME 0.11: the entire error system needs an overhaul - it's not very
+/* FIXME 2.0: the entire error system needs an overhaul - it's not very
  * useful the way it is. Also, we need to be able to specify additional
  * 'details' for errors (e.g. disk/file/resource error -> out-of-space; or
  * put the url/filename/device name that caused the error somewhere)
  * without having to add enums for every little thing.
  *
- * FIXME 0.11: get rid of GST_{CORE,LIBRARY,RESOURCE,STREAM}_ERROR_NUM_ERRORS.
+ * FIXME 2.0: get rid of GST_{CORE,LIBRARY,RESOURCE,STREAM}_ERROR_NUM_ERRORS.
  * Maybe also replace _quark() functions with g_quark_from_static_string()?
  */
 #ifdef HAVE_CONFIG_H
diff --git a/gst/gstevent.c b/gst/gstevent.c
index a1cb381..4d48b9a 100644
--- a/gst/gstevent.c
+++ b/gst/gstevent.c
@@ -715,7 +715,7 @@
  * downstream synchronized with the buffer flow and contains timing information
  * and playback properties for the buffers that will follow.
  *
- * The newsegment event marks the range of buffers to be processed. All
+ * The segment event marks the range of buffers to be processed. All
  * data not within the segment range is not to be processed. This can be
  * used intelligently by plugins to apply more efficient methods of skipping
  * unneeded data. The valid range is expressed with the @start and @stop
@@ -736,10 +736,10 @@
  * stream. (@rate * @applied_rate) should always equal the rate that has been
  * requested for playback. For example, if an element has an input segment
  * with intended playback @rate of 2.0 and applied_rate of 1.0, it can adjust
- * incoming timestamps and buffer content by half and output a newsegment event
+ * incoming timestamps and buffer content by half and output a segment event
  * with @rate of 1.0 and @applied_rate of 2.0
  *
- * After a newsegment event, the buffer stream time is calculated with:
+ * After a segment event, the buffer stream time is calculated with:
  *
  *   time + (TIMESTAMP(buf) - start) * ABS (rate * applied_rate)
  *
@@ -1390,7 +1390,7 @@
  *
  * Returns: (transfer full): a new #GstEvent
  */
-/* FIXME 0.11: take ownership of msg for consistency? */
+/* FIXME 2.0: take ownership of msg for consistency? */
 GstEvent *
 gst_event_new_sink_message (const gchar * name, GstMessage * msg)
 {
@@ -1440,7 +1440,7 @@
  *
  * Source elements, demuxers and other elements that create new streams
  * are supposed to send this event as the first event of a new stream. It
- * should not be send after a flushing seek or in similar situations
+ * should not be sent after a flushing seek or in similar situations
  * and is used to mark the beginning of a new logical stream. Elements
  * combining multiple streams must ensure that this event is only forwarded
  * downstream once and not for every single input stream.
diff --git a/gst/gstevent.h b/gst/gstevent.h
index db3cb51..ee7e8e0 100644
--- a/gst/gstevent.h
+++ b/gst/gstevent.h
@@ -346,15 +346,15 @@
 
 /**
  * GstQOSType:
- * @GST_QOS_TYPE_OVERFLOW: The QoS event type that is produced when downstream
+ * @GST_QOS_TYPE_OVERFLOW: The QoS event type that is produced when upstream
  *    elements are producing data too quickly and the element can't keep up
- *    processing the data. Upstream should reduce their processing rate. This
+ *    processing the data. Upstream should reduce their production rate. This
  *    type is also used when buffers arrive early or in time.
- * @GST_QOS_TYPE_UNDERFLOW: The QoS event type that is produced when downstream
- *    elements are producing data too slowly and need to speed up their processing
- *    rate.
+ * @GST_QOS_TYPE_UNDERFLOW: The QoS event type that is produced when upstream
+ *    elements are producing data too slowly and need to speed up their
+ *    production rate.
  * @GST_QOS_TYPE_THROTTLE: The QoS event type that is produced when the
- *    application enabled throttling to limit the datarate.
+ *    application enabled throttling to limit the data rate.
  *
  * The different types of QoS events that can be given to the
  * gst_event_new_qos() method.
diff --git a/gst/gstghostpad.c b/gst/gstghostpad.c
index 082aa15..22644fc 100644
--- a/gst/gstghostpad.c
+++ b/gst/gstghostpad.c
@@ -533,8 +533,7 @@
   GstPad *pad, *internal;
 
   g_return_val_if_fail (GST_IS_GHOST_PAD (gpad), FALSE);
-  g_return_val_if_fail (GST_GHOST_PAD_PRIVATE (gpad)->constructed == FALSE,
-      FALSE);
+  g_return_val_if_fail (!GST_GHOST_PAD_PRIVATE (gpad)->constructed, FALSE);
 
   g_object_get (gpad, "direction", &dir, "template", &templ, NULL);
 
diff --git a/gst/gstinfo.c b/gst/gstinfo.c
index 3f56686..f40a281 100644
--- a/gst/gstinfo.c
+++ b/gst/gstinfo.c
@@ -264,8 +264,6 @@
 static volatile gint G_GNUC_MAY_ALIAS __default_level = GST_LEVEL_DEFAULT;
 static volatile gint G_GNUC_MAY_ALIAS __use_color = GST_DEBUG_COLOR_MODE_ON;
 
-static FILE *log_file;
-
 /* FIXME: export this? */
 gboolean
 _priv_gst_in_valgrind (void)
@@ -282,9 +280,6 @@
 #ifdef HAVE_VALGRIND_VALGRIND_H
     if (RUNNING_ON_VALGRIND) {
       GST_CAT_INFO (GST_CAT_GST_INIT, "we're running inside valgrind");
-      printf ("GStreamer has detected that it is running inside valgrind.\n");
-      printf ("It might now take different code paths to ease debugging.\n");
-      printf ("Of course, this may also lead to different bugs.\n");
       in_valgrind = GST_VG_INSIDE;
     } else {
       GST_CAT_LOG (GST_CAT_GST_INIT, "not doing extra valgrind stuff");
@@ -304,6 +299,7 @@
 _priv_gst_debug_init (void)
 {
   const gchar *env;
+  FILE *log_file;
 
   env = g_getenv ("GST_DEBUG_FILE");
   if (env != NULL && *env != '\0') {
@@ -333,7 +329,7 @@
   _GST_CAT_DEBUG = _gst_debug_category_new ("GST_DEBUG",
       GST_DEBUG_BOLD | GST_DEBUG_FG_YELLOW, "debugging subsystem");
 
-  gst_debug_add_log_function (gst_debug_log_default, NULL, NULL);
+  gst_debug_add_log_function (gst_debug_log_default, log_file, NULL);
 
   /* FIXME: add descriptions here */
   GST_CAT_GST_INIT = _gst_debug_category_new ("GST_INIT",
@@ -448,7 +444,6 @@
   va_end (var_args);
 }
 
-#ifdef G_OS_WIN32
 /* based on g_basename(), which we can't use because it was deprecated */
 static inline const gchar *
 gst_path_basename (const gchar * file_name)
@@ -471,7 +466,6 @@
 
   return file_name;
 }
-#endif
 
 /**
  * gst_debug_log_valist:
@@ -497,17 +491,14 @@
   GSList *handler;
 
   g_return_if_fail (category != NULL);
+
+  if (level > gst_debug_category_get_threshold (category))
+    return;
+
   g_return_if_fail (file != NULL);
   g_return_if_fail (function != NULL);
   g_return_if_fail (format != NULL);
 
-  /* The predefined macro __FILE__ is always the exact path given to the
-   * compiler with MSVC, which may or may not be the basename.  We work
-   * around it at runtime to improve the readability. */
-#ifdef G_OS_WIN32
-  file = gst_path_basename (file);
-#endif
-
   message.message = NULL;
   message.format = format;
   G_VA_COPY (message.arguments, args);
@@ -585,7 +576,7 @@
 gst_info_structure_to_string (const GstStructure * s)
 {
   if (G_LIKELY (s)) {
-    gchar *str = gst_structure_to_string (s);;
+    gchar *str = gst_structure_to_string (s);
     if (G_UNLIKELY (pretty_tags && s->name == GST_QUARK (TAGLIST)))
       return prettify_structure_string (str);
     else
@@ -597,14 +588,29 @@
 static inline gchar *
 gst_info_describe_buffer (GstBuffer * buffer)
 {
+  const gchar *offset_str = "none";
+  const gchar *offset_end_str = "none";
+  gchar offset_buf[32], offset_end_buf[32];
+
+  if (GST_BUFFER_OFFSET_IS_VALID (buffer)) {
+    g_snprintf (offset_buf, sizeof (offset_buf), "%" G_GUINT64_FORMAT,
+        GST_BUFFER_OFFSET (buffer));
+    offset_str = offset_buf;
+  }
+  if (GST_BUFFER_OFFSET_END_IS_VALID (buffer)) {
+    g_snprintf (offset_end_buf, sizeof (offset_end_buf), "%" G_GUINT64_FORMAT,
+        GST_BUFFER_OFFSET_END (buffer));
+    offset_end_str = offset_end_buf;
+  }
+
   return g_strdup_printf ("buffer: %p, pts %" GST_TIME_FORMAT ", dts %"
       GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", size %" G_GSIZE_FORMAT
-      ", offset %" G_GUINT64_FORMAT ", offset_end %" G_GUINT64_FORMAT
-      ", flags 0x%x", buffer, GST_TIME_ARGS (GST_BUFFER_PTS (buffer)),
+      ", offset %s, offset_end %s, flags 0x%x", buffer,
+      GST_TIME_ARGS (GST_BUFFER_PTS (buffer)),
       GST_TIME_ARGS (GST_BUFFER_DTS (buffer)),
       GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)),
-      gst_buffer_get_size (buffer), GST_BUFFER_OFFSET (buffer),
-      GST_BUFFER_OFFSET_END (buffer), GST_BUFFER_FLAGS (buffer));
+      gst_buffer_get_size (buffer), offset_str, offset_end_str,
+      GST_BUFFER_FLAGS (buffer));
 }
 
 static inline gchar *
@@ -962,12 +968,13 @@
  * @message: the actual message
  * @object: (transfer none) (allow-none): the object this message relates to,
  *     or %NULL if none
- * @unused: an unused variable, reserved for some user_data.
+ * @user_data: the FILE* to log to
  *
  * The default logging handler used by GStreamer. Logging functions get called
- * whenever a macro like GST_DEBUG or similar is used. This function outputs the
- * message and additional info to stderr (or the log file specified via the
- * GST_DEBUG_FILE environment variable).
+ * whenever a macro like GST_DEBUG or similar is used. By default this function
+ * is setup to output the message and additional info to stderr (or the log file
+ * specified via the GST_DEBUG_FILE environment variable) as received via
+ * @user_data.
  *
  * You can add other handlers by using gst_debug_add_log_function().
  * And you can remove this handler by calling
@@ -976,15 +983,23 @@
 void
 gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level,
     const gchar * file, const gchar * function, gint line,
-    GObject * object, GstDebugMessage * message, gpointer unused)
+    GObject * object, GstDebugMessage * message, gpointer user_data)
 {
   gint pid;
   GstClockTime elapsed;
   gchar *obj = NULL;
   GstDebugColorMode color_mode;
+  FILE *log_file = user_data ? user_data : stderr;
+  gchar c;
 
-  if (level > gst_debug_category_get_threshold (category))
-    return;
+  /* __FILE__ might be a file name or an absolute path or a
+   * relative path, irrespective of the exact compiler used,
+   * in which case we want to shorten it to the filename for
+   * readability. */
+  c = file[0];
+  if (c == '.' || c == '/' || c == '\\' || (c != '\0' && file[1] == ':')) {
+    file = gst_path_basename (file);
+  }
 
   pid = getpid ();
   color_mode = gst_debug_get_color_mode ();
@@ -992,7 +1007,7 @@
   if (object) {
     obj = gst_debug_print_object (object);
   } else {
-    obj = g_strdup ("");
+    obj = (gchar *) "";
   }
 
   elapsed = GST_CLOCK_DIFF (_priv_gst_info_start_time,
@@ -1075,7 +1090,8 @@
 #undef PRINT_FMT
   }
 
-  g_free (obj);
+  if (object != NULL)
+    g_free (obj);
 }
 
 /**
@@ -1801,7 +1817,7 @@
 
   g_assert (list);
 
-  if (reset == TRUE)
+  if (reset)
     gst_debug_set_default_threshold (0);
 
   split = g_strsplit (list, ",", 0);
diff --git a/gst/gstinfo.h b/gst/gstinfo.h
index 5c802bd..71cfa41 100644
--- a/gst/gstinfo.h
+++ b/gst/gstinfo.h
@@ -102,6 +102,22 @@
 #define GST_LEVEL_DEFAULT GST_LEVEL_NONE
 #endif
 
+/**
+ * GST_LEVEL_MAX:
+ *
+ * Defines the maximum debugging level to be enabled at compilation time. By default
+ * it is set such that all debugging statements will be enabled.
+ *
+ * If you wish to compile GStreamer and plugins with only some debugging statements
+ * (Such as just warnings and errors), you can define it at compile time to the
+ * maximum debug level. Any debug statements above that level will be compiled out.
+ *
+ * Since: 1.6
+ */
+#ifndef GST_LEVEL_MAX
+#define GST_LEVEL_MAX GST_LEVEL_COUNT
+#endif
+
 /* defines for format (colors etc)
  * don't change them around, it uses terminal layout
  * Terminal color strings:
@@ -338,7 +354,7 @@
                                           gint               line,
                                           GObject          * object,
                                           GstDebugMessage  * message,
-                                          gpointer           unused) G_GNUC_NO_INSTRUMENT;
+                                          gpointer           user_data) G_GNUC_NO_INSTRUMENT;
 
 const gchar *   gst_debug_level_get_name (GstDebugLevel level);
 
@@ -520,7 +536,7 @@
  */
 #ifdef G_HAVE_ISO_VARARGS
 #define GST_CAT_LEVEL_LOG(cat,level,object,...) G_STMT_START{		\
-  if (G_UNLIKELY (level <= _gst_debug_min)) {						\
+  if (G_UNLIKELY (level <= GST_LEVEL_MAX && level <= _gst_debug_min)) {						\
     gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__,	\
         (GObject *) (object), __VA_ARGS__);				\
   }									\
@@ -528,7 +544,7 @@
 #else /* G_HAVE_GNUC_VARARGS */
 #ifdef G_HAVE_GNUC_VARARGS
 #define GST_CAT_LEVEL_LOG(cat,level,object,args...) G_STMT_START{	\
-  if (G_UNLIKELY (level <= _gst_debug_min)) {						\
+  if (G_UNLIKELY (level <= GST_LEVEL_MAX && level <= _gst_debug_min)) {						\
     gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__,	\
         (GObject *) (object), ##args );					\
   }									\
@@ -538,7 +554,7 @@
 GST_CAT_LEVEL_LOG_valist (GstDebugCategory * cat,
     GstDebugLevel level, gpointer object, const char *format, va_list varargs)
 {
-  if (G_UNLIKELY (level <= _gst_debug_min)) {
+  if (G_UNLIKELY (level <= GST_LEVEL_MAX && level <= _gst_debug_min)) {
     gst_debug_log_valist (cat, level, "", "", 0, (GObject *) object, format,
         varargs);
   }
@@ -561,7 +577,8 @@
  * other macros and hence in a separate block right here. Docs chunks are
  * with the other doc chunks below though. */
 #define __GST_CAT_MEMDUMP_LOG(cat,object,msg,data,length) G_STMT_START{       \
-  if (G_UNLIKELY (GST_LEVEL_MEMDUMP <= _gst_debug_min)) {                    \
+    if (G_UNLIKELY (GST_LEVEL_MEMDUMP <= GST_LEVEL_MAX &&		      \
+		    GST_LEVEL_MEMDUMP <= _gst_debug_min)) {		      \
     _gst_debug_dump_mem ((cat), __FILE__, GST_FUNCTION, __LINE__,             \
         (GObject *) (object), (msg), (data), (length));                       \
   }                                                                           \
diff --git a/gst/gstiterator.c b/gst/gstiterator.c
index 4e5b1f5..4aed7c7 100644
--- a/gst/gstiterator.c
+++ b/gst/gstiterator.c
@@ -32,18 +32,20 @@
  * Various GStreamer objects provide access to their internal structures using
  * an iterator.
  *
- * In general, whenever calling a GstIterator function results in your code
- * receiving a refcounted object, the refcount for that object will have been
- * increased.  Your code is responsible for unreffing that object after use.
+ * Note that if calling a GstIterator function results in your code receiving
+ * a refcounted object (with, say, g_value_get_object()), the refcount for that
+ * object will not be increased. Your code is responsible for taking a reference
+ * if it wants to continue using it later.
  *
  * The basic use pattern of an iterator is as follows:
  * |[
  *   GstIterator *it = _get_iterator(object);
+ *   GValue item = G_VALUE_INIT;
  *   done = FALSE;
  *   while (!done) {
  *     switch (gst_iterator_next (it, &amp;item)) {
  *       case GST_ITERATOR_OK:
- *         ... use/change item here...
+ *         ...get/use/change item here...
  *         g_value_reset (&amp;item);
  *         break;
  *       case GST_ITERATOR_RESYNC:
diff --git a/gst/gstmessage.c b/gst/gstmessage.c
index 63950eb..51282b9 100644
--- a/gst/gstmessage.c
+++ b/gst/gstmessage.c
@@ -118,11 +118,6 @@
 
   GST_CAT_INFO (GST_CAT_GST_INIT, "init messages");
 
-  /* the GstMiniObject types need to be class_ref'd once before it can be
-   * done from multiple threads;
-   * see http://bugzilla.gnome.org/show_bug.cgi?id=304551 */
-  gst_message_get_type ();
-
   for (i = 0; message_quarks[i].name; i++) {
     message_quarks[i].quark =
         g_quark_from_static_string (message_quarks[i].name);
@@ -171,6 +166,28 @@
   return 0;
 }
 
+static gboolean
+_gst_message_dispose (GstMessage * message)
+{
+  gboolean do_free = TRUE;
+
+  if (GST_MINI_OBJECT_FLAG_IS_SET (message, GST_MESSAGE_FLAG_ASYNC_DELIVERY)) {
+    /* revive message, so bus can finish with it and clean it up */
+    gst_message_ref (message);
+
+    GST_INFO ("[msg %p] signalling async free", message);
+
+    GST_MESSAGE_LOCK (message);
+    GST_MESSAGE_SIGNAL (message);
+    GST_MESSAGE_UNLOCK (message);
+
+    /* don't free it yet, let bus finish with it first */
+    do_free = FALSE;
+  }
+
+  return do_free;
+}
+
 static void
 _gst_message_free (GstMessage * message)
 {
@@ -186,12 +203,6 @@
     GST_MESSAGE_SRC (message) = NULL;
   }
 
-  if (message->lock.p) {
-    GST_MESSAGE_LOCK (message);
-    GST_MESSAGE_SIGNAL (message);
-    GST_MESSAGE_UNLOCK (message);
-  }
-
   structure = GST_MESSAGE_STRUCTURE (message);
   if (structure) {
     gst_structure_set_parent_refcount (structure, NULL);
@@ -240,7 +251,8 @@
     GstObject * src)
 {
   gst_mini_object_init (GST_MINI_OBJECT_CAST (message), 0, _gst_message_type,
-      (GstMiniObjectCopyFunction) _gst_message_copy, NULL,
+      (GstMiniObjectCopyFunction) _gst_message_copy,
+      (GstMiniObjectDisposeFunction) _gst_message_dispose,
       (GstMiniObjectFreeFunction) _gst_message_free);
 
   GST_MESSAGE_TYPE (message) = type;
diff --git a/gst/gstobject.c b/gst/gstobject.c
index 5691bec..198a7db 100644
--- a/gst/gstobject.c
+++ b/gst/gstobject.c
@@ -779,6 +779,34 @@
 }
 
 /**
+ * gst_object_has_parent:
+ * @object: a #GstObject to check
+ * @parent: a #GstObject to check as parent
+ *
+ * Check if @parent is the parent of @object.
+ * E.g. a #GstElement can check if it owns a given #GstPad.
+ *
+ * Returns: %FALSE if either @object or @parent is %NULL. %TRUE if @parent is
+ *          the parent of @object. Otherwise %FALSE.
+ *
+ * MT safe. Grabs and releases @object's locks.
+ * Since: 1.6
+ */
+gboolean
+gst_object_has_parent (GstObject * object, GstObject * parent)
+{
+  gboolean result = FALSE;
+
+  if (G_LIKELY (GST_IS_OBJECT (object) && GST_IS_OBJECT (parent))) {
+    GST_OBJECT_LOCK (object);
+    result = GST_OBJECT_PARENT (object) == parent;
+    GST_OBJECT_UNLOCK (object);
+  }
+
+  return result;
+}
+
+/**
  * gst_object_has_ancestor:
  * @object: a #GstObject to check
  * @ancestor: a #GstObject to check as ancestor
diff --git a/gst/gstobject.h b/gst/gstobject.h
index 86c5715..b9e6661 100644
--- a/gst/gstobject.h
+++ b/gst/gstobject.h
@@ -212,6 +212,7 @@
 gboolean	gst_object_set_parent		(GstObject *object, GstObject *parent);
 GstObject*	gst_object_get_parent		(GstObject *object);
 void		gst_object_unparent		(GstObject *object);
+gboolean	gst_object_has_parent		(GstObject *object, GstObject *parent);
 gboolean	gst_object_has_ancestor		(GstObject *object, GstObject *ancestor);
 
 void            gst_object_default_deep_notify  (GObject *object, GstObject *orig,
diff --git a/gst/gstpad.c b/gst/gstpad.c
index a2c7e12..12a0833 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -115,7 +115,8 @@
   PAD_PROP_CAPS,
   PAD_PROP_DIRECTION,
   PAD_PROP_TEMPLATE,
-  /* FILL ME */
+  PAD_PROP_OFFSET
+      /* FILL ME */
 };
 
 #define GST_PAD_GET_PRIVATE(obj)  \
@@ -355,6 +356,18 @@
           "The GstPadTemplate of this pad", GST_TYPE_PAD_TEMPLATE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  /**
+   * GstPad:offset:
+   *
+   * The offset that will be applied to the running time of the pad.
+   *
+   * Since: 1.6
+   */
+  g_object_class_install_property (gobject_class, PAD_PROP_OFFSET,
+      g_param_spec_int64 ("offset", "Offset",
+          "The running time offset of the pad", 0, G_MAXINT64, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gstobject_class->path_string_separator = ".";
 
   /* Register common function pointer descriptions */
@@ -606,39 +619,46 @@
 
 /* should be called with LOCK */
 static GstEvent *
-apply_pad_offset (GstPad * pad, GstEvent * event, gboolean upstream)
+_apply_pad_offset (GstPad * pad, GstEvent * event, gboolean upstream)
 {
-  /* check if we need to adjust the segment */
-  if (pad->offset != 0) {
-    gint64 offset;
+  gint64 offset;
 
-    GST_DEBUG_OBJECT (pad, "apply pad offset %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (pad->offset));
+  GST_DEBUG_OBJECT (pad, "apply pad offset %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (pad->offset));
 
-    if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
-      GstSegment segment;
+  if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+    GstSegment segment;
 
-      g_assert (!upstream);
+    g_assert (!upstream);
 
-      /* copy segment values */
-      gst_event_copy_segment (event, &segment);
-      gst_event_unref (event);
+    /* copy segment values */
+    gst_event_copy_segment (event, &segment);
+    gst_event_unref (event);
 
-      gst_segment_offset_running_time (&segment, segment.format, pad->offset);
-      event = gst_event_new_segment (&segment);
-    }
-
-    event = gst_event_make_writable (event);
-    offset = gst_event_get_running_time_offset (event);
-    if (upstream)
-      offset -= pad->offset;
-    else
-      offset += pad->offset;
-    gst_event_set_running_time_offset (event, offset);
+    gst_segment_offset_running_time (&segment, segment.format, pad->offset);
+    event = gst_event_new_segment (&segment);
   }
+
+  event = gst_event_make_writable (event);
+  offset = gst_event_get_running_time_offset (event);
+  if (upstream)
+    offset -= pad->offset;
+  else
+    offset += pad->offset;
+  gst_event_set_running_time_offset (event, offset);
+
   return event;
 }
 
+static inline GstEvent *
+apply_pad_offset (GstPad * pad, GstEvent * event, gboolean upstream)
+{
+  if (G_UNLIKELY (pad->offset != 0))
+    return _apply_pad_offset (pad, event, upstream);
+  return event;
+}
+
+
 /* should be called with the OBJECT_LOCK */
 static GstCaps *
 get_pad_caps (GstPad * pad)
@@ -740,6 +760,9 @@
       gst_pad_set_pad_template (GST_PAD_CAST (object),
           (GstPadTemplate *) g_value_get_object (value));
       break;
+    case PAD_PROP_OFFSET:
+      gst_pad_set_offset (GST_PAD_CAST (object), g_value_get_int64 (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -764,6 +787,9 @@
     case PAD_PROP_TEMPLATE:
       g_value_set_object (value, GST_PAD_PAD_TEMPLATE (object));
       break;
+    case PAD_PROP_OFFSET:
+      g_value_set_int64 (value, gst_pad_get_offset (GST_PAD_CAST (object)));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -795,7 +821,7 @@
 /**
  * gst_pad_new_from_template:
  * @templ: the pad template to use
- * @name: (allow-none): the name of the element
+ * @name: (allow-none): the name of the pad
  *
  * Creates a new pad with the given name from the given template.
  * If name is %NULL, a guaranteed unique name (across all pads)
@@ -817,7 +843,7 @@
 /**
  * gst_pad_new_from_static_template:
  * @templ: the #GstStaticPadTemplate to use
- * @name: the name of the element
+ * @name: the name of the pad
  *
  * Creates a new pad with the given name from the given static template.
  * If name is %NULL, a guaranteed unique name (across all pads)
@@ -1285,7 +1311,7 @@
  *
  * Returns: an id or 0 if no probe is pending. The id can be used to remove the
  * probe with gst_pad_remove_probe(). When using GST_PAD_PROBE_TYPE_IDLE it can
- * happend that the probe can be run immediately and if the probe returns
+ * happen that the probe can be run immediately and if the probe returns
  * GST_PAD_PROBE_REMOVE this functions returns 0.
  *
  * MT safe.
@@ -2744,7 +2770,7 @@
   {
     GST_DEBUG_OBJECT (pad, "no parent");
     GST_OBJECT_UNLOCK (pad);
-    return FALSE;
+    return NULL;
   }
 }
 
@@ -3024,6 +3050,123 @@
   return TRUE;
 }
 
+/* Default latency implementation */
+typedef struct
+{
+  gboolean live;
+  GstClockTime min, max;
+} LatencyFoldData;
+
+static gboolean
+query_latency_default_fold (const GValue * item, GValue * ret,
+    gpointer user_data)
+{
+  GstPad *pad = g_value_get_object (item), *peer;
+  LatencyFoldData *fold_data = user_data;
+  GstQuery *query;
+  gboolean res = FALSE;
+
+  query = gst_query_new_latency ();
+
+  peer = gst_pad_get_peer (pad);
+  if (peer) {
+    res = gst_pad_peer_query (pad, query);
+  } else {
+    GST_LOG_OBJECT (pad, "No peer pad found, ignoring this pad");
+  }
+
+  if (res) {
+    gboolean live;
+    GstClockTime min, max;
+
+    gst_query_parse_latency (query, &live, &min, &max);
+
+    GST_LOG_OBJECT (pad, "got latency live:%s min:%" G_GINT64_FORMAT
+        " max:%" G_GINT64_FORMAT, live ? "true" : "false", min, max);
+
+    if (live) {
+      if (min > fold_data->min)
+        fold_data->min = min;
+
+      if (fold_data->max == GST_CLOCK_TIME_NONE)
+        fold_data->max = max;
+      else if (max < fold_data->max)
+        fold_data->max = max;
+
+      fold_data->live = TRUE;
+    }
+  } else if (peer) {
+    GST_DEBUG_OBJECT (pad, "latency query failed");
+    g_value_set_boolean (ret, FALSE);
+  }
+
+  gst_query_unref (query);
+  if (peer)
+    gst_object_unref (peer);
+
+  return TRUE;
+}
+
+static gboolean
+gst_pad_query_latency_default (GstPad * pad, GstQuery * query)
+{
+  GstIterator *it;
+  GstIteratorResult res;
+  GValue ret = G_VALUE_INIT;
+  gboolean query_ret;
+  LatencyFoldData fold_data;
+
+  it = gst_pad_iterate_internal_links (pad);
+  if (!it) {
+    GST_DEBUG_OBJECT (pad, "Can't iterate internal links");
+    return FALSE;
+  }
+
+  g_value_init (&ret, G_TYPE_BOOLEAN);
+
+retry:
+  fold_data.live = FALSE;
+  fold_data.min = 0;
+  fold_data.max = GST_CLOCK_TIME_NONE;
+
+  g_value_set_boolean (&ret, TRUE);
+  res = gst_iterator_fold (it, query_latency_default_fold, &ret, &fold_data);
+  switch (res) {
+    case GST_ITERATOR_OK:
+      g_assert_not_reached ();
+      break;
+    case GST_ITERATOR_DONE:
+      break;
+    case GST_ITERATOR_ERROR:
+      g_value_set_boolean (&ret, FALSE);
+      break;
+    case GST_ITERATOR_RESYNC:
+      gst_iterator_resync (it);
+      goto retry;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+  gst_iterator_free (it);
+
+  query_ret = g_value_get_boolean (&ret);
+  if (query_ret) {
+    GST_LOG_OBJECT (pad, "got latency live:%s min:%" G_GINT64_FORMAT
+        " max:%" G_GINT64_FORMAT, fold_data.live ? "true" : "false",
+        fold_data.min, fold_data.max);
+
+    if (fold_data.min > fold_data.max) {
+      GST_ERROR_OBJECT (pad, "minimum latency bigger than maximum latency");
+    }
+
+    gst_query_set_latency (query, fold_data.live, fold_data.min, fold_data.max);
+  } else {
+    GST_LOG_OBJECT (pad, "latency query failed");
+  }
+
+  return query_ret;
+}
+
 typedef struct
 {
   GstQuery *query;
@@ -3079,10 +3222,13 @@
       ret = gst_pad_query_caps_default (pad, query);
       forward = FALSE;
       break;
+    case GST_QUERY_LATENCY:
+      ret = gst_pad_query_latency_default (pad, query);
+      forward = FALSE;
+      break;
     case GST_QUERY_POSITION:
     case GST_QUERY_SEEKING:
     case GST_QUERY_FORMATS:
-    case GST_QUERY_LATENCY:
     case GST_QUERY_JITTER:
     case GST_QUERY_RATE:
     case GST_QUERY_CONVERT:
@@ -3215,10 +3361,11 @@
 #define PROBE_NO_DATA(pad,mask,label,defaultval)                \
   G_STMT_START {						\
     if (G_UNLIKELY (pad->num_probes)) {				\
+      GstFlowReturn pval = defaultval;				\
       /* pass NULL as the data item */                          \
       GstPadProbeInfo info = { mask, 0, NULL, 0, 0 };           \
       ret = do_probe_callbacks (pad, &info, defaultval);	\
-      if (G_UNLIKELY (ret != defaultval && ret != GST_FLOW_OK))	\
+      if (G_UNLIKELY (ret != pval && ret != GST_FLOW_OK))	\
         goto label;						\
     }								\
   } G_STMT_END
@@ -4413,8 +4560,8 @@
   g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR);
   g_return_val_if_fail (GST_PAD_IS_SRC (pad), GST_FLOW_ERROR);
   g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
-  g_return_val_if_fail (*buffer == NULL
-      || GST_IS_BUFFER (*buffer), GST_FLOW_ERROR);
+  g_return_val_if_fail (*buffer == NULL || (GST_IS_BUFFER (*buffer)
+          && gst_buffer_get_size (*buffer) >= size), GST_FLOW_ERROR);
 
   return gst_pad_get_range_unchecked (pad, offset, size, buffer);
 }
@@ -4468,8 +4615,8 @@
   g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR);
   g_return_val_if_fail (GST_PAD_IS_SINK (pad), GST_FLOW_ERROR);
   g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
-  g_return_val_if_fail (*buffer == NULL
-      || GST_IS_BUFFER (*buffer), GST_FLOW_ERROR);
+  g_return_val_if_fail (*buffer == NULL || (GST_IS_BUFFER (*buffer)
+          && gst_buffer_get_size (*buffer) >= size), GST_FLOW_ERROR);
 
   GST_OBJECT_LOCK (pad);
   if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
@@ -4768,6 +4915,9 @@
       type |= GST_PAD_PROBE_TYPE_EVENT_FLUSH;
       break;
     case GST_EVENT_FLUSH_STOP:
+      if (G_UNLIKELY (!GST_PAD_IS_ACTIVE (pad)))
+        goto inactive;
+
       GST_PAD_UNSET_FLUSHING (pad);
 
       /* Remove sticky EOS events */
@@ -4835,7 +4985,7 @@
   /* Note: we gave away ownership of the event at this point but we can still
    * print the old pointer */
   GST_LOG_OBJECT (pad,
-      "sent event %p to (%s) peerpad %" GST_PTR_FORMAT ", ret %s", event,
+      "sent event %p (%s) to peerpad %" GST_PTR_FORMAT ", ret %s", event,
       gst_event_type_get_name (event_type), peerpad, gst_flow_get_name (ret));
 
   gst_object_unref (peerpad);
@@ -4856,6 +5006,12 @@
     gst_event_unref (event);
     return GST_FLOW_FLUSHING;
   }
+inactive:
+  {
+    GST_DEBUG_OBJECT (pad, "flush-stop on inactive pad");
+    gst_event_unref (event);
+    return GST_FLOW_FLUSHING;
+  }
 probe_stopped:
   {
     GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS);
@@ -5058,17 +5214,22 @@
           "have event type %d (FLUSH_START)", GST_EVENT_TYPE (event));
 
       /* can't even accept a flush begin event when flushing */
-      if (GST_PAD_IS_FLUSHING (pad))
+      if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
         goto flushing;
 
       GST_PAD_SET_FLUSHING (pad);
       GST_CAT_DEBUG_OBJECT (GST_CAT_EVENT, pad, "set flush flag");
       break;
     case GST_EVENT_FLUSH_STOP:
-      if (G_LIKELY (GST_PAD_MODE (pad) != GST_PAD_MODE_NONE)) {
-        GST_PAD_UNSET_FLUSHING (pad);
-        GST_CAT_DEBUG_OBJECT (GST_CAT_EVENT, pad, "cleared flush flag");
-      }
+      /* we can't accept flush-stop on inactive pads else the flushing flag
+       * would be cleared and it would look like the pad can accept data.
+       * Also, some elements restart a streaming thread in flush-stop which we
+       * can't allow on inactive pads */
+      if (G_UNLIKELY (!GST_PAD_IS_ACTIVE (pad)))
+        goto inactive;
+
+      GST_PAD_UNSET_FLUSHING (pad);
+      GST_CAT_DEBUG_OBJECT (GST_CAT_EVENT, pad, "cleared flush flag");
       /* Remove pending EOS events */
       GST_LOG_OBJECT (pad, "Removing pending EOS and SEGMENT events");
       remove_event_by_type (pad, GST_EVENT_EOS);
@@ -5183,6 +5344,16 @@
     gst_event_unref (event);
     return GST_FLOW_FLUSHING;
   }
+inactive:
+  {
+    GST_OBJECT_UNLOCK (pad);
+    if (need_unlock)
+      GST_PAD_STREAM_UNLOCK (pad);
+    GST_CAT_INFO_OBJECT (GST_CAT_EVENT, pad,
+        "Received flush-stop on inactive pad. Discarding");
+    gst_event_unref (event);
+    return GST_FLOW_FLUSHING;
+  }
 eos:
   {
     GST_OBJECT_UNLOCK (pad);
diff --git a/gst/gstpad.h b/gst/gstpad.h
index 2ac335c..696d79d 100644
--- a/gst/gstpad.h
+++ b/gst/gstpad.h
@@ -254,7 +254,7 @@
  * @parent: (allow-none): the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
  *          flag is set, @parent is guaranteed to be not-%NULL and remain valid
  *          during the execution of this function.
- * @buffer: the #GstBuffer that is chained, not %NULL.
+ * @buffer: (transfer full): the #GstBuffer that is chained, not %NULL.
  *
  * A function that will be called on sinkpads when chaining buffers.
  * The function typically processes the data contained in the buffer and
@@ -277,7 +277,7 @@
  * @parent: (allow-none): the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
  *          flag is set, @parent is guaranteed to be not-%NULL and remain valid
  *          during the execution of this function.
- * @list: the #GstBufferList that is chained, not %NULL.
+ * @list: (transfer full): the #GstBufferList that is chained, not %NULL.
  *
  * A function that will be called on sinkpads when chaining buffer lists.
  * The function typically processes the data contained in the buffer list and
@@ -351,7 +351,7 @@
  * @parent: (allow-none): the parent of @pad. If the #GST_PAD_FLAG_NEED_PARENT
  *          flag is set, @parent is guaranteed to be not-%NULL and remain valid
  *          during the execution of this function.
- * @event: the #GstEvent to handle.
+ * @event: (transfer full): the #GstEvent to handle.
  *
  * Function signature to handle an event for the pad.
  *
diff --git a/gst/gstpipeline.c b/gst/gstpipeline.c
index 21e0620..7c47ae7 100644
--- a/gst/gstpipeline.c
+++ b/gst/gstpipeline.c
@@ -365,6 +365,9 @@
       GST_OBJECT_LOCK (element);
       pipeline->priv->update_clock = TRUE;
       GST_OBJECT_UNLOCK (element);
+
+      /* READY to PAUSED starts running_time from 0 */
+      reset_start_time (pipeline, 0);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
     {
@@ -462,6 +465,8 @@
       break;
     }
     case GST_STATE_CHANGE_PAUSED_TO_READY:
+      reset_start_time (pipeline, 0);
+      break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       break;
   }
@@ -472,11 +477,7 @@
     case GST_STATE_CHANGE_NULL_TO_READY:
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
-    {
-      /* READY to PAUSED starts running_time from 0 */
-      reset_start_time (pipeline, 0);
       break;
-    }
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
       break;
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
diff --git a/gst/gstplugin.c b/gst/gstplugin.c
index c9c286a..0ca5d8d 100644
--- a/gst/gstplugin.c
+++ b/gst/gstplugin.c
@@ -480,16 +480,18 @@
 {
   if (!gst_plugin_check_version (desc->major_version, desc->minor_version)) {
     if (GST_CAT_DEFAULT)
-      GST_WARNING ("plugin \"%s\" has incompatible version, not loading",
-          GST_STR_NULL (plugin->filename));
+      GST_WARNING ("plugin \"%s\" has incompatible version "
+          "(plugin: %d.%d, gst: %d,%d), not loading",
+          GST_STR_NULL (plugin->filename), desc->major_version,
+          desc->minor_version, GST_VERSION_MAJOR, GST_VERSION_MINOR);
     return NULL;
   }
 
   if (!desc->license || !desc->description || !desc->source ||
       !desc->package || !desc->origin) {
     if (GST_CAT_DEFAULT)
-      GST_WARNING ("plugin \"%s\" has incorrect GstPluginDesc, not loading",
-          GST_STR_NULL (plugin->filename));
+      GST_WARNING ("plugin \"%s\" has missing detail in GstPluginDesc, not "
+          "loading", GST_STR_NULL (plugin->filename));
     return NULL;
   }
 
@@ -706,7 +708,7 @@
   GST_CAT_DEBUG (GST_CAT_PLUGIN_LOADING, "attempt to load plugin \"%s\"",
       filename);
 
-  if (g_module_supported () == FALSE) {
+  if (!g_module_supported ()) {
     GST_CAT_DEBUG (GST_CAT_PLUGIN_LOADING, "module loading not supported");
     g_set_error (error,
         GST_PLUGIN_ERROR,
diff --git a/gst/gstpreset.c b/gst/gstpreset.c
index 27db9ec..1b42024 100644
--- a/gst/gstpreset.c
+++ b/gst/gstpreset.c
@@ -34,6 +34,9 @@
  * native preset format of those wrapped plugins.
  * One method that is useful to be overridden is gst_preset_get_property_names().
  * With that one can control which properties are saved and in which order.
+ * When implementing support for read-only presets, one should set the vmethods
+ * for gst_preset_save_preset() and gst_preset_delete_preset() to %NULL.
+ * Applications can use gst_preset_is_editable() to check for that.
  *
  * The default implementation supports presets located in a system directory, 
  * application specific directory and in the users home directory. When getting
@@ -101,8 +104,6 @@
 static GQuark preset_system_path_quark = 0;
 static GQuark preset_quark = 0;
 
-/*static GQuark property_list_quark = 0;*/
-
 /* the application can set a custom path that is checked in addition to standard
  * system and user dirs. This helps to develop new presets first local to the
  * application.
@@ -394,7 +395,7 @@
         if (presets)
           g_key_file_free (presets);
         presets = in_app;
-        version = version_system;
+        version = version_app;
       }
     }
     if (in_user) {
@@ -427,6 +428,12 @@
   return presets;
 }
 
+static gint
+compare_strings (gchar ** a, gchar ** b, gpointer user_data)
+{
+  return g_strcmp0 (*a, *b);
+}
+
 /* get a list of all supported preset names for an element */
 static gchar **
 gst_preset_default_get_preset_names (GstPreset * preset)
@@ -455,9 +462,15 @@
       groups[num_groups] = NULL;
     }
   }
+  if (!num_groups) {
+    GST_INFO_OBJECT (preset, "Empty preset file");
+    g_strfreev (groups);
+    return NULL;
+  }
+
   /* sort the array now */
   g_qsort_with_data (groups, num_groups, sizeof (gchar *),
-      (GCompareDataFunc) strcmp, NULL);
+      (GCompareDataFunc) compare_strings, NULL);
 
   return groups;
 
@@ -1150,6 +1163,24 @@
   return preset_app_dir;
 }
 
+/**
+ * gst_preset_is_editable:
+ * @preset: a #GObject that implements #GstPreset
+ *
+ * Check if one can add new presets, change existing ones and remove presets.
+ *
+ * Returns: %TRUE if presets are editable or %FALSE if they are static
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_preset_is_editable (GstPreset * preset)
+{
+  GstPresetInterface *iface = GST_PRESET_GET_INTERFACE (preset);
+
+  return iface->save_preset && iface->delete_preset;
+}
+
 /* class internals */
 
 static void
@@ -1186,8 +1217,6 @@
         g_quark_from_static_string ("GstPreset::system_path");
 
 #if 0
-    property_list_quark = g_quark_from_static_string ("GstPreset::properties");
-
     /* create interface properties, each element would need to override this
      *   g_object_class_override_property(gobject_class, PROP_PRESET_NAME, "preset-name");
      * and in _set_property() do
diff --git a/gst/gstpreset.h b/gst/gstpreset.h
index 8e3ea2a..178eccd 100644
--- a/gst/gstpreset.h
+++ b/gst/gstpreset.h
@@ -97,6 +97,7 @@
 gboolean     gst_preset_set_app_dir        (const gchar *app_dir);
 const gchar *gst_preset_get_app_dir        (void);
 
+gboolean     gst_preset_is_editable        (GstPreset *preset);
 G_END_DECLS
 
 #endif /* __GST_PRESET_H__ */
diff --git a/gst/gstquery.c b/gst/gstquery.c
index 38fc5c5..2828bd5 100644
--- a/gst/gstquery.c
+++ b/gst/gstquery.c
@@ -413,6 +413,7 @@
   GstStructure *structure;
 
   g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_LATENCY);
+  g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min_latency));
 
   structure = GST_QUERY_STRUCTURE (query);
   gst_structure_id_set (structure,
@@ -1601,7 +1602,6 @@
 
   g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION);
   g_return_if_fail (gst_query_is_writable (query));
-  g_return_if_fail (size != 0);
 
   structure = GST_QUERY_STRUCTURE (query);
   array = ensure_array (structure, GST_QUARK (POOL),
diff --git a/gst/gstregistry.c b/gst/gstregistry.c
index 73fdf0e..27a3f76 100644
--- a/gst/gstregistry.c
+++ b/gst/gstregistry.c
@@ -1247,7 +1247,7 @@
         g_free (filename);
         continue;
       }
-      /* FIXME 0.11: Don't recurse into directories, this behaviour
+      /* FIXME 2.0: Don't recurse into directories, this behaviour
        * is inconsistent with other PATH environment variables
        */
       if (level > 0) {
diff --git a/gst/gstsegment.c b/gst/gstsegment.c
index 3c4081b..fc52363 100644
--- a/gst/gstsegment.c
+++ b/gst/gstsegment.c
@@ -340,10 +340,14 @@
   segment->flags = GST_SEGMENT_FLAG_NONE;
   if ((flags & GST_SEEK_FLAG_FLUSH) != 0)
     segment->flags |= GST_SEGMENT_FLAG_RESET;
-  if ((flags & GST_SEEK_FLAG_SKIP) != 0)
-    segment->flags |= GST_SEGMENT_FLAG_SKIP;
+  if ((flags & GST_SEEK_FLAG_TRICKMODE) != 0)
+    segment->flags |= GST_SEGMENT_FLAG_TRICKMODE;
   if ((flags & GST_SEEK_FLAG_SEGMENT) != 0)
     segment->flags |= GST_SEGMENT_FLAG_SEGMENT;
+  if ((flags & GST_SEEK_FLAG_TRICKMODE_KEY_UNITS) != 0)
+    segment->flags |= GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS;
+  if ((flags & GST_SEEK_FLAG_TRICKMODE_NO_AUDIO) != 0)
+    segment->flags |= GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO;
 
   segment->rate = rate;
   segment->applied_rate = 1.0;
diff --git a/gst/gstsegment.h b/gst/gstsegment.h
index c9ec1e4..4787e49 100644
--- a/gst/gstsegment.h
+++ b/gst/gstsegment.h
@@ -56,9 +56,9 @@
  * @GST_SEEK_FLAG_KEY_UNIT: seek to the nearest keyframe. This might be
  *                     faster but less accurate.
  * @GST_SEEK_FLAG_SEGMENT: perform a segment seek.
- * @GST_SEEK_FLAG_SKIP: when doing fast forward or fast reverse playback, allow
+ * @GST_SEEK_FLAG_TRICKMODE: when doing fast forward or fast reverse playback, allow
  *                     elements to skip frames instead of generating all
- *                     frames.
+ *                     frames. (Since: 1.6)
  * @GST_SEEK_FLAG_SNAP_BEFORE: go to a location before the requested position,
  *                     if KEY_UNIT this means the keyframe at or before the
  *                     requested position the one at or before the seek target.
@@ -69,6 +69,15 @@
  *                     if KEY_UNIT this means the keyframe closest to the
  *                     requested position, if both keyframes are at an equal
  *                     distance, behaves like SNAP_BEFORE.
+ * @GST_SEEK_FLAG_TRICKMODE_KEY_UNITS: when doing fast forward or fast reverse
+ *                     playback, request that elements only decode keyframes
+ *                     and skip all other content, for formats that have
+ *                     keyframes. (Since: 1.6)
+ * @GST_SEEK_FLAG_TRICKMODE_NO_AUDIO: when doing fast forward or fast reverse
+ *                     playback, request that audio decoder elements skip
+ *                     decoding and output only gap events or silence. (Since: 1.6)
+ * @GST_SEEK_FLAG_SKIP: Deprecated backward compatibility flag, replaced
+ *                     by @GST_SEEK_FLAG_TRICKMODE
  *
  * Flags to be used with gst_element_seek() or gst_event_new_seek(). All flags
  * can be used together.
@@ -88,10 +97,15 @@
  * looping or simple linear editing.
  *
  * When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode
- * playback, the @GST_SEEK_FLAG_SKIP flag can be used to instruct decoders
+ * playback, the @GST_SEEK_FLAG_TRICKMODE flag can be used to instruct decoders
  * and demuxers to adjust the playback rate by skipping frames. This can improve
  * performance and decrease CPU usage because not all frames need to be decoded.
  *
+ * Beyond that, the @GST_SEEK_FLAG_TRICKMODE_KEY_UNITS flag can be used to
+ * request that decoders skip all frames except key units, and
+ * @GST_SEEK_FLAG_TRICKMODE_NO_AUDIO flags can be used to request that audio
+ * decoders do no decoding at all, and simple output silence.
+ *
  * The @GST_SEEK_FLAG_SNAP_BEFORE flag can be used to snap to the previous
  * relevant location, and the @GST_SEEK_FLAG_SNAP_AFTER flag can be used to
  * select the next relevant location. If KEY_UNIT is specified, the relevant
@@ -112,11 +126,16 @@
   GST_SEEK_FLAG_ACCURATE        = (1 << 1),
   GST_SEEK_FLAG_KEY_UNIT        = (1 << 2),
   GST_SEEK_FLAG_SEGMENT         = (1 << 3),
+  GST_SEEK_FLAG_TRICKMODE       = (1 << 4),
+  /* FIXME 2.0: Remove _SKIP flag,
+   * which was kept for backward compat when _TRICKMODE was added */
   GST_SEEK_FLAG_SKIP            = (1 << 4),
   GST_SEEK_FLAG_SNAP_BEFORE     = (1 << 5),
   GST_SEEK_FLAG_SNAP_AFTER      = (1 << 6),
   GST_SEEK_FLAG_SNAP_NEAREST    = GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER,
   /* Careful to restart next flag with 1<<7 here */
+  GST_SEEK_FLAG_TRICKMODE_KEY_UNITS = (1 << 7),
+  GST_SEEK_FLAG_TRICKMODE_NO_AUDIO  = (1 << 8),
 } GstSeekFlags;
 
 /**
@@ -124,8 +143,14 @@
  * @GST_SEGMENT_FLAG_NONE: no flags
  * @GST_SEGMENT_FLAG_RESET: reset the pipeline running_time to the segment
  *                          running_time
- * @GST_SEGMENT_FLAG_SKIP: perform skip playback
+ * @GST_SEGMENT_FLAG_TRICKMODE: perform skip playback (Since: 1.6)
  * @GST_SEGMENT_FLAG_SEGMENT: send SEGMENT_DONE instead of EOS
+ * @GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS: Decode only keyframes, where
+ *                                        possible (Since: 1.6)
+ * @GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO: Do not decode any audio, where
+ *                                        possible (Since: 1.6)
+ * @GST_SEGMENT_FLAG_SKIP: Deprecated backward compatibility flag, replaced
+ *                         by @GST_SEGMENT_FLAG_TRICKMODE
  *
  * Flags for the GstSegment structure. Currently mapped to the corresponding
  * values of the seek flags.
@@ -134,8 +159,13 @@
 typedef enum { /*< flags >*/
   GST_SEGMENT_FLAG_NONE            = GST_SEEK_FLAG_NONE,
   GST_SEGMENT_FLAG_RESET           = GST_SEEK_FLAG_FLUSH,
-  GST_SEGMENT_FLAG_SKIP            = GST_SEEK_FLAG_SKIP,
-  GST_SEGMENT_FLAG_SEGMENT         = GST_SEEK_FLAG_SEGMENT
+  GST_SEGMENT_FLAG_TRICKMODE       = GST_SEEK_FLAG_TRICKMODE,
+  /* FIXME 2.0: Remove _SKIP flag,
+   * which was kept for backward compat when _TRICKMODE was added */
+  GST_SEGMENT_FLAG_SKIP            = GST_SEEK_FLAG_TRICKMODE,
+  GST_SEGMENT_FLAG_SEGMENT         = GST_SEEK_FLAG_SEGMENT,
+  GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS = GST_SEEK_FLAG_TRICKMODE_KEY_UNITS,
+  GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO      = GST_SEEK_FLAG_TRICKMODE_NO_AUDIO
 } GstSegmentFlags;
 
 /**
diff --git a/gst/gststructure.c b/gst/gststructure.c
index 10ac568..8b0b54b 100644
--- a/gst/gststructure.c
+++ b/gst/gststructure.c
@@ -665,15 +665,9 @@
     GstStructureField field = { 0 };
 
     field.name = fieldname;
-
     type = va_arg (varargs, GType);
 
-#ifndef G_VALUE_COLLECT_INIT
-    g_value_init (&field.value, type);
-    G_VALUE_COLLECT (&field.value, varargs, 0, &err);
-#else
     G_VALUE_COLLECT_INIT (&field.value, type, varargs, 0, &err);
-#endif
     if (G_UNLIKELY (err)) {
       g_critical ("%s", err);
       return;
@@ -1106,7 +1100,8 @@
  * @user_data: (closure): private data
  *
  * Calls the provided function once for each field in the #GstStructure. The
- * function must not modify the fields. Also see gst_structure_map_in_place().
+ * function must not modify the fields. Also see gst_structure_map_in_place()
+ * and gst_structure_filter_and_map_in_place().
  *
  * Returns: %TRUE if the supplied function returns %TRUE For each of the fields,
  * %FALSE otherwise.
@@ -1173,6 +1168,51 @@
 }
 
 /**
+ * gst_structure_filter_and_map_in_place:
+ * @structure: a #GstStructure
+ * @func: (scope call): a function to call for each field
+ * @user_data: (closure): private data
+ *
+ * Calls the provided function once for each field in the #GstStructure. In
+ * contrast to gst_structure_foreach(), the function may modify the fields.
+ * In contrast to gst_structure_map_in_place(), the field is removed from
+ * the structure if %FALSE is returned from the function.
+ * The structure must be mutable.
+ *
+ * Since: 1.6
+ */
+void
+gst_structure_filter_and_map_in_place (GstStructure * structure,
+    GstStructureFilterMapFunc func, gpointer user_data)
+{
+  guint i, len;
+  GstStructureField *field;
+  gboolean ret;
+
+  g_return_if_fail (structure != NULL);
+  g_return_if_fail (IS_MUTABLE (structure));
+  g_return_if_fail (func != NULL);
+  len = GST_STRUCTURE_FIELDS (structure)->len;
+
+  for (i = 0; i < len;) {
+    field = GST_STRUCTURE_FIELD (structure, i);
+
+    ret = func (field->name, &field->value, user_data);
+
+    if (!ret) {
+      if (G_IS_VALUE (&field->value)) {
+        g_value_unset (&field->value);
+      }
+      GST_STRUCTURE_FIELDS (structure) =
+          g_array_remove_index (GST_STRUCTURE_FIELDS (structure), i);
+      len = GST_STRUCTURE_FIELDS (structure)->len;
+    } else {
+      i++;
+    }
+  }
+}
+
+/**
  * gst_structure_id_has_field:
  * @structure: a #GstStructure
  * @field: #GQuark of the field name
@@ -1512,7 +1552,7 @@
   if (!GST_VALUE_HOLDS_DATE_TIME (&field->value))
     return FALSE;
 
-  /* FIXME: 0.11 g_value_dup_boxed() -> g_value_get_boxed() */
+  /* FIXME 2.0: g_value_dup_boxed() -> g_value_get_boxed() */
   *value = g_value_dup_boxed (&field->value);
 
   return TRUE;
@@ -1976,7 +2016,7 @@
   s++;
 
   ret = gst_structure_parse_value (s, &s, &value1, type);
-  if (ret == FALSE)
+  if (!ret)
     return FALSE;
 
   while (g_ascii_isspace (*s))
@@ -1990,7 +2030,7 @@
     s++;
 
   ret = gst_structure_parse_value (s, &s, &value2, type);
-  if (ret == FALSE)
+  if (!ret)
     return FALSE;
 
   while (g_ascii_isspace (*s))
@@ -2006,7 +2046,7 @@
         s++;
 
       ret = gst_structure_parse_value (s, &s, &value3, type);
-      if (ret == FALSE)
+      if (!ret)
         return FALSE;
 
       while (g_ascii_isspace (*s))
@@ -2090,7 +2130,7 @@
   }
 
   ret = gst_structure_parse_value (s, &s, &list_value, type);
-  if (ret == FALSE)
+  if (!ret)
     return FALSE;
 
   g_array_append_val (array, list_value);
@@ -2108,7 +2148,7 @@
 
     memset (&list_value, 0, sizeof (list_value));
     ret = gst_structure_parse_value (s, &s, &list_value, type);
-    if (ret == FALSE)
+    if (!ret)
       return FALSE;
 
     g_array_append_val (array, list_value);
diff --git a/gst/gststructure.h b/gst/gststructure.h
index 6687970..014ef37 100644
--- a/gst/gststructure.h
+++ b/gst/gststructure.h
@@ -71,6 +71,23 @@
                                              gpointer user_data);
 
 /**
+ * GstStructureFilterMapFunc:
+ * @field_id: the #GQuark of the field name
+ * @value: the #GValue of the field
+ * @user_data: user data
+ *
+ * A function that will be called in gst_structure_filter_and_map_in_place().
+ * The function may modify @value, and the value will be removed from
+ * the structure if %FALSE is returned.
+ *
+ * Returns: %TRUE if the field should be preserved, %FALSE if it
+ * should be removed.
+ */
+typedef gboolean (*GstStructureFilterMapFunc) (GQuark   field_id,
+                                               GValue * value,
+                                               gpointer user_data);
+
+/**
  * GstStructure:
  * @type: the GType of a structure
  *
@@ -198,6 +215,10 @@
                                                           GstStructureMapFunc   func,
                                                           gpointer              user_data);
 
+void                  gst_structure_filter_and_map_in_place (GstStructure        * structure,
+                                                          GstStructureFilterMapFunc   func,
+                                                          gpointer              user_data);
+
 gint                  gst_structure_n_fields             (const GstStructure  * structure);
 
 const gchar *         gst_structure_nth_field_name       (const GstStructure  * structure,
diff --git a/gst/gstsystemclock.c b/gst/gstsystemclock.c
index 3071926..0527af2 100644
--- a/gst/gstsystemclock.c
+++ b/gst/gstsystemclock.c
@@ -339,7 +339,7 @@
 
   if (clock == NULL) {
     GST_CAT_DEBUG (GST_CAT_CLOCK, "creating new static system clock");
-    g_assert (_external_default_clock == FALSE);
+    g_assert (!_external_default_clock);
     clock = g_object_new (GST_TYPE_SYSTEM_CLOCK,
         "name", "GstSystemClock", NULL);
 
@@ -738,8 +738,10 @@
 
         if (diff <= 0) {
           /* timeout, this is fine, we can report success now */
-          if (G_UNLIKELY (!CAS_ENTRY_STATUS (entry, GST_CLOCK_DONE, GST_CLOCK_OK))) {
-            GST_CAT_DEBUG (GST_CAT_CLOCK, "unexpected status for entry %p", entry);
+          if (G_UNLIKELY (!CAS_ENTRY_STATUS (entry, GST_CLOCK_DONE,
+                      GST_CLOCK_OK))) {
+            GST_CAT_DEBUG (GST_CAT_CLOCK, "unexpected status for entry %p",
+                entry);
             status = GET_ENTRY_STATUS (entry);
             goto done;
           } else {
diff --git a/gst/gsttaglist.c b/gst/gsttaglist.c
index be502c3..ff2af18 100644
--- a/gst/gsttaglist.c
+++ b/gst/gsttaglist.c
@@ -1499,7 +1499,7 @@
   return TRUE;
 }
 
-/* FIXME 0.11: this whole merge function business is overdesigned, and the
+/* FIXME 2.0: this whole merge function business is overdesigned, and the
  * _get_foo() API is misleading as well - how many application developers will
  * expect gst_tag_list_get_string (list, GST_TAG_ARTIST, &val) might return a
  * string with multiple comma-separated artists? _get_foo() should just be
@@ -1798,7 +1798,7 @@
 TAG_MERGE_FUNCS (string, gchar *, (*value != NULL));
 
 /*
- *FIXME 0.11: Instead of _peek (non-copy) and _get (copy), we could have
+ *FIXME 2.0: Instead of _peek (non-copy) and _get (copy), we could have
  *            _get (non-copy) and _dup (copy) for strings, seems more
  *            widely used
  */
diff --git a/gst/gsttask.c b/gst/gsttask.c
index 60c0140..d9e5697 100644
--- a/gst/gsttask.c
+++ b/gst/gsttask.c
@@ -78,6 +78,10 @@
 #include <sys/prctl.h>
 #endif
 
+#ifdef HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID
+#include <pthread.h>
+#endif
+
 GST_DEBUG_CATEGORY_STATIC (task_debug);
 #define GST_CAT_DEFAULT (task_debug)
 
@@ -246,8 +250,19 @@
       GST_DEBUG_OBJECT (task, "Failed to set thread name");
   }
   GST_OBJECT_UNLOCK (task);
-#endif
-#ifdef _MSC_VER
+#elif defined(HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID)
+  const gchar *name;
+
+  GST_OBJECT_LOCK (task);
+  name = GST_OBJECT_NAME (task);
+
+  /* set the thread name to something easily identifiable */
+  GST_DEBUG_OBJECT (task, "Setting thread name to '%s'", name);
+  if (pthread_setname_np (name))
+    GST_DEBUG_OBJECT (task, "Failed to set thread name");
+
+  GST_OBJECT_UNLOCK (task);
+#elif defined (_MSC_VER)
   const gchar *name;
   name = GST_OBJECT_NAME (task);
 
diff --git a/gst/gsttoc.c b/gst/gsttoc.c
index be99cb1..b1732b2 100644
--- a/gst/gsttoc.c
+++ b/gst/gsttoc.c
@@ -388,6 +388,18 @@
   return NULL;
 }
 
+static GList *
+gst_toc_deep_copy_toc_entries (GList * entry_list)
+{
+  GQueue new_entries = G_QUEUE_INIT;
+  GList *l;
+
+  for (l = entry_list; l != NULL; l = l->next)
+    g_queue_push_tail (&new_entries, gst_toc_entry_copy (l->data));
+
+  return new_entries.head;
+}
+
 /**
  * gst_toc_entry_copy:
  * @entry: #GstTocEntry to copy.
@@ -401,9 +413,8 @@
 static GstTocEntry *
 gst_toc_entry_copy (const GstTocEntry * entry)
 {
-  GstTocEntry *ret, *sub;
+  GstTocEntry *ret;
   GstTagList *list;
-  GList *cur;
 
   g_return_val_if_fail (entry != NULL, NULL);
 
@@ -419,16 +430,7 @@
     ret->tags = list;
   }
 
-  cur = entry->subentries;
-  while (cur != NULL) {
-    sub = gst_toc_entry_copy (cur->data);
-
-    if (sub != NULL)
-      ret->subentries = g_list_prepend (ret->subentries, sub);
-
-    cur = cur->next;
-  }
-  ret->subentries = g_list_reverse (ret->subentries);
+  ret->subentries = gst_toc_deep_copy_toc_entries (entry->subentries);
 
   return ret;
 }
@@ -446,8 +448,6 @@
 gst_toc_copy (const GstToc * toc)
 {
   GstToc *ret;
-  GstTocEntry *entry;
-  GList *cur;
   GstTagList *list;
 
   g_return_val_if_fail (toc != NULL, NULL);
@@ -460,16 +460,8 @@
     ret->tags = list;
   }
 
-  cur = toc->entries;
-  while (cur != NULL) {
-    entry = gst_toc_entry_copy (cur->data);
+  ret->entries = gst_toc_deep_copy_toc_entries (toc->entries);
 
-    if (entry != NULL)
-      ret->entries = g_list_prepend (ret->entries, entry);
-
-    cur = cur->next;
-  }
-  ret->entries = g_list_reverse (ret->entries);
   return ret;
 }
 
diff --git a/gst/gsttypefind.c b/gst/gsttypefind.c
index ddcbfda..e0ca96f 100644
--- a/gst/gsttypefind.c
+++ b/gst/gsttypefind.c
@@ -72,15 +72,10 @@
 
   factory = g_object_newv (GST_TYPE_TYPE_FIND_FACTORY, 0, NULL);
   GST_DEBUG_OBJECT (factory, "using new typefind factory for %s", name);
-  g_assert (GST_IS_TYPE_FIND_FACTORY (factory));
 
   gst_plugin_feature_set_name (GST_PLUGIN_FEATURE_CAST (factory), name);
   gst_plugin_feature_set_rank (GST_PLUGIN_FEATURE_CAST (factory), rank);
 
-  if (factory->extensions) {
-    g_strfreev (factory->extensions);
-    factory->extensions = NULL;
-  }
   if (extensions)
     factory->extensions = g_strsplit (extensions, ",", -1);
 
diff --git a/gst/gsturi.c b/gst/gsturi.c
index eb8cdcc..6346ea0 100644
--- a/gst/gsturi.c
+++ b/gst/gsturi.c
@@ -2,8 +2,10 @@
  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
  *                    2000 Wim Taymans <wtay@chello.be>
  * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2014 David Waring, British Broadcasting Corporation
+ *                        <david.waring@rd.bbc.co.uk>
  *
- * gsturi.c: register URI handlers
+ * gsturi.c: register URI handlers and IETF RFC 3986 URI manipulations.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -48,10 +50,93 @@
 #include "gst-i18n-lib.h"
 
 #include <string.h>
+#include <glib.h>
+#include <glib/gprintf.h>
 
 GST_DEBUG_CATEGORY_STATIC (gst_uri_handler_debug);
 #define GST_CAT_DEFAULT gst_uri_handler_debug
 
+#ifndef HAVE_STRCASESTR
+#define strcasestr _gst_ascii_strcasestr
+
+/* From https://github.com/freebsd/freebsd/blob/master/contrib/file/src/strcasestr.c
+ * Updated to use GLib types and GLib string functions
+ *
+ * Copyright (c) 1990, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Find the first occurrence of find in s, ignore case.
+ */
+
+static gchar *
+_gst_ascii_strcasestr (const gchar * s, const gchar * find)
+{
+  gchar c, sc;
+  gsize len;
+
+  if ((c = *find++) != 0) {
+    c = g_ascii_tolower (c);
+    len = strlen (find);
+    do {
+      do {
+        if ((sc = *s++) == 0)
+          return (NULL);
+      } while (g_ascii_tolower (sc) != c);
+    } while (g_ascii_strncasecmp (s, find, len) != 0);
+    s--;
+  }
+  return (gchar *) (gintptr) (s);
+}
+#endif
+
+#if !GLIB_CHECK_VERSION (2, 33, 4)
+#define g_list_copy_deep gst_g_list_copy_deep
+static GList *
+gst_g_list_copy_deep (GList * list, GCopyFunc func, gpointer user_data)
+{
+  list = g_list_copy (list);
+
+  if (func != NULL) {
+    GList *l;
+
+    for (l = list; l != NULL; l = l->next) {
+      l->data = func (l->data, user_data);
+    }
+  }
+
+  return list;
+}
+#endif
+
 GType
 gst_uri_handler_get_type (void)
 {
@@ -733,7 +818,7 @@
 {
   GstURIHandlerInterface *iface;
   gboolean ret;
-  gchar *new_uri, *protocol, *location, *colon;
+  gchar *protocol;
 
   g_return_val_if_fail (GST_IS_URI_HANDLER (handler), FALSE);
   g_return_val_if_fail (gst_uri_is_valid (uri), FALSE);
@@ -768,15 +853,8 @@
     }
   }
 
-  colon = strstr (uri, ":");
-  location = g_strdup (colon);
-
-  new_uri = g_strdup_printf ("%s%s", protocol, location);
-
   ret = iface->set_uri (handler, uri, error);
 
-  g_free (new_uri);
-  g_free (location);
   g_free (protocol);
 
   return ret;
@@ -891,3 +969,1845 @@
   GST_DEBUG ("'%s' -> '%s'", filename, uri);
   return uri;
 }
+
+/****************************************************************************
+ * GstUri - GstMiniObject to parse and merge URIs according to IETF RFC 3986
+ ****************************************************************************/
+
+/**
+ * SECTION:gsturi
+ * @short_description: URI parsing and manipulation.
+ *
+ * A #GstUri object can be used to parse and split a URI string into its
+ * constituant parts. Two #GstUri objects can be joined to make a new #GstUri
+ * using the algorithm described in RFC3986.
+ */
+
+/* Definition for GstUri object */
+struct _GstUri
+{
+  /*< private > */
+  GstMiniObject mini_object;
+  gchar *scheme;
+  gchar *userinfo;
+  gchar *host;
+  guint port;
+  GList *path;
+  GHashTable *query;
+  gchar *fragment;
+};
+
+GST_DEFINE_MINI_OBJECT_TYPE (GstUri, gst_uri);
+
+static GstUri *_gst_uri_copy (const GstUri * uri);
+static void _gst_uri_free (GstUri * uri);
+static GstUri *_gst_uri_new (void);
+static GList *_remove_dot_segments (GList * path);
+
+/* private GstUri functions */
+
+static GstUri *
+_gst_uri_new (void)
+{
+  GstUri *uri;
+  uri = GST_URI_CAST (g_slice_new0 (GstUri));
+
+  if (uri)
+    gst_mini_object_init (GST_MINI_OBJECT_CAST (uri), 0, gst_uri_get_type (),
+        (GstMiniObjectCopyFunction) _gst_uri_copy, NULL,
+        (GstMiniObjectFreeFunction) _gst_uri_free);
+
+  return uri;
+}
+
+static void
+_gst_uri_free (GstUri * uri)
+{
+  g_return_if_fail (GST_IS_URI (uri));
+
+  g_free (uri->scheme);
+  g_free (uri->userinfo);
+  g_free (uri->host);
+  g_list_free_full (uri->path, g_free);
+  if (uri->query)
+    g_hash_table_unref (uri->query);
+  g_free (uri->fragment);
+
+  g_slice_free1 (sizeof (*uri), uri);
+}
+
+static GHashTable *
+_gst_uri_copy_query_table (GHashTable * orig)
+{
+  GHashTable *new = NULL;
+
+  if (orig != NULL) {
+    GHashTableIter iter;
+    gpointer key, value;
+    new = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+    g_hash_table_iter_init (&iter, orig);
+    while (g_hash_table_iter_next (&iter, &key, &value)) {
+      g_hash_table_insert (new, g_strdup (key), g_strdup (value));
+    }
+  }
+
+  return new;
+}
+
+static GstUri *
+_gst_uri_copy (const GstUri * orig_uri)
+{
+  GstUri *new_uri;
+
+  g_return_val_if_fail (GST_IS_URI (orig_uri), NULL);
+
+  new_uri = _gst_uri_new ();
+
+  if (new_uri) {
+    new_uri->scheme = g_strdup (orig_uri->scheme);
+    new_uri->userinfo = g_strdup (orig_uri->userinfo);
+    new_uri->host = g_strdup (orig_uri->host);
+    new_uri->port = orig_uri->port;
+    new_uri->path = g_list_copy_deep (orig_uri->path, (GCopyFunc) g_strdup,
+        NULL);
+    new_uri->query = _gst_uri_copy_query_table (orig_uri->query);
+    new_uri->fragment = g_strdup (orig_uri->fragment);
+  }
+
+  return new_uri;
+}
+
+/*
+ * _gst_uri_compare_lists:
+ *
+ * Compare two lists for equality. This compares the two lists, item for item,
+ * comparing items in the same position in the two lists. If @first is
+ * considered less than @second the result will be negative. If @first is
+ * considered to be more than @second then the result will be positive. If the
+ * lists are considered to be equal then the result will be 0. If two lists
+ * have the same items, but one list is shorter than the other, then the
+ * shorter list is considered to be less than the longer list.
+ */
+static gint
+_gst_uri_compare_lists (GList * first, GList * second, GCompareFunc cmp_fn)
+{
+  GList *itr1, *itr2;
+  gint result;
+
+  for (itr1 = first, itr2 = second;
+      itr1 != NULL || itr2 != NULL; itr1 = itr1->next, itr2 = itr2->next) {
+    if (itr1 == NULL)
+      return -1;
+    if (itr2 == NULL)
+      return 1;
+    result = cmp_fn (itr1->data, itr2->data);
+    if (result != 0)
+      return result;
+  }
+  return 0;
+}
+
+typedef enum
+{
+  _GST_URI_NORMALIZE_LOWERCASE = 1,
+  _GST_URI_NORMALIZE_UPPERCASE = 2
+} _GstUriNormalizations;
+
+/*
+ * Find the first character that hasn't been normalized according to the @flags.
+ */
+static gchar *
+_gst_uri_first_non_normalized_char (gchar * str, guint flags)
+{
+  gchar *pos;
+
+  if (str == NULL)
+    return NULL;
+
+  for (pos = str; *pos; pos++) {
+    if ((flags & _GST_URI_NORMALIZE_UPPERCASE) && g_ascii_islower (*pos))
+      return pos;
+    if ((flags & _GST_URI_NORMALIZE_LOWERCASE) && g_ascii_isupper (*pos))
+      return pos;
+  }
+  return NULL;
+}
+
+static gboolean
+_gst_uri_normalize_lowercase (gchar * str)
+{
+  gchar *pos;
+  gboolean ret = FALSE;
+
+  for (pos = _gst_uri_first_non_normalized_char (str,
+          _GST_URI_NORMALIZE_LOWERCASE);
+      pos != NULL;
+      pos = _gst_uri_first_non_normalized_char (pos + 1,
+          _GST_URI_NORMALIZE_LOWERCASE)) {
+    *pos = g_ascii_tolower (*pos);
+    ret = TRUE;
+  }
+
+  return ret;
+}
+
+#define _gst_uri_normalize_scheme _gst_uri_normalize_lowercase
+#define _gst_uri_normalize_hostname _gst_uri_normalize_lowercase
+
+static gboolean
+_gst_uri_normalize_path (GList ** path)
+{
+  GList *new_path;
+
+  new_path = _remove_dot_segments (*path);
+  if (_gst_uri_compare_lists (new_path, *path, (GCompareFunc) g_strcmp0) != 0) {
+    g_list_free_full (*path, g_free);
+    *path = new_path;
+    return TRUE;
+  }
+  g_list_free_full (new_path, g_free);
+
+  return FALSE;
+}
+
+static gboolean
+_gst_uri_normalize_str_noop (gchar * str)
+{
+  return FALSE;
+}
+
+static gboolean
+_gst_uri_normalize_table_noop (GHashTable * table)
+{
+  return FALSE;
+}
+
+#define _gst_uri_normalize_userinfo _gst_uri_normalize_str_noop
+#define _gst_uri_normalize_query _gst_uri_normalize_table_noop
+#define _gst_uri_normalize_fragment _gst_uri_normalize_str_noop
+
+/* RFC 3986 functions */
+
+static GList *
+_merge (GList * base, GList * path)
+{
+  GList *ret, *path_copy, *last;
+
+  path_copy = g_list_copy_deep (path, (GCopyFunc) g_strdup, NULL);
+  /* if base is NULL make path absolute */
+  if (base == NULL) {
+    if (path_copy != NULL && path_copy->data != NULL) {
+      path_copy = g_list_prepend (path_copy, NULL);
+    }
+    return path_copy;
+  }
+
+  ret = g_list_copy_deep (base, (GCopyFunc) g_strdup, NULL);
+  last = g_list_last (ret);
+  ret = g_list_remove_link (ret, last);
+  g_list_free_full (last, g_free);
+  ret = g_list_concat (ret, path_copy);
+
+  return ret;
+}
+
+static GList *
+_remove_dot_segments (GList * path)
+{
+  GList *out, *elem, *next;
+
+  if (path == NULL)
+    return NULL;
+
+  out = g_list_copy_deep (path, (GCopyFunc) g_strdup, NULL);
+
+  for (elem = out; elem; elem = next) {
+    next = elem->next;
+    if (elem->data == NULL && elem != out && next != NULL) {
+      out = g_list_delete_link (out, elem);
+    } else if (g_strcmp0 (elem->data, ".") == 0) {
+      g_free (elem->data);
+      out = g_list_delete_link (out, elem);
+    } else if (g_strcmp0 (elem->data, "..") == 0) {
+      GList *prev = g_list_previous (elem);
+      if (prev && (prev != out || prev->data != NULL)) {
+        g_free (prev->data);
+        out = g_list_delete_link (out, prev);
+      }
+      g_free (elem->data);
+      out = g_list_delete_link (out, elem);
+    }
+  }
+
+  return out;
+}
+
+static gchar *
+_gst_uri_escape_userinfo (const gchar * userinfo)
+{
+  return g_uri_escape_string (userinfo,
+      G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO, FALSE);
+}
+
+static gchar *
+_gst_uri_escape_host (const gchar * host)
+{
+  return g_uri_escape_string (host,
+      G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, FALSE);
+}
+
+static gchar *
+_gst_uri_escape_host_colon (const gchar * host)
+{
+  return g_uri_escape_string (host,
+      G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":", FALSE);
+}
+
+static gchar *
+_gst_uri_escape_path_segment (const gchar * segment)
+{
+  return g_uri_escape_string (segment,
+      G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT, FALSE);
+}
+
+static gchar *
+_gst_uri_escape_http_query_element (const gchar * element)
+{
+  gchar *ret, *c;
+
+  ret = g_uri_escape_string (element, "!$'()*,;:@/? ", FALSE);
+  for (c = ret; *c; c++)
+    if (*c == ' ')
+      *c = '+';
+  return ret;
+}
+
+static gchar *
+_gst_uri_escape_fragment (const gchar * fragment)
+{
+  return g_uri_escape_string (fragment,
+      G_URI_RESERVED_CHARS_ALLOWED_IN_PATH "?", FALSE);
+}
+
+static GList *
+_gst_uri_string_to_list (const gchar * str, const gchar * sep, gboolean convert,
+    gboolean unescape)
+{
+  GList *new_list = NULL;
+
+  if (str) {
+    guint pct_sep_len = 0;
+    gchar *pct_sep;
+    gchar **split_str;
+
+    if (convert && !unescape) {
+      pct_sep = g_strdup_printf ("%%%2.2X", (guint) (*sep));
+      pct_sep_len = 3;
+    }
+
+    split_str = g_strsplit (str, sep, -1);
+    if (split_str) {
+      gchar **next_elem;
+      for (next_elem = split_str; *next_elem; next_elem += 1) {
+        gchar *elem = *next_elem;
+        if (*elem == '\0') {
+          new_list = g_list_append (new_list, NULL);
+        } else {
+          if (convert && !unescape) {
+            gchar *next_sep;
+            for (next_sep = strcasestr (elem, pct_sep); next_sep;
+                next_sep = strcasestr (next_sep + 1, pct_sep)) {
+              *next_sep = *sep;
+              memmove (next_sep + 1, next_sep + pct_sep_len,
+                  strlen (next_sep + pct_sep_len) + 1);
+            }
+          }
+          if (unescape) {
+            *next_elem = g_uri_unescape_string (elem, NULL);
+            g_free (elem);
+            elem = *next_elem;
+          }
+          new_list = g_list_append (new_list, g_strdup (elem));
+        }
+      }
+    }
+    g_strfreev (split_str);
+    if (convert && !unescape)
+      g_free (pct_sep);
+  }
+
+  return new_list;
+}
+
+static GHashTable *
+_gst_uri_string_to_table (const gchar * str, const gchar * part_sep,
+    const gchar * kv_sep, gboolean convert, gboolean unescape)
+{
+  GHashTable *new_table = NULL;
+
+  if (str) {
+    gchar *pct_part_sep = NULL, *pct_kv_sep = NULL;
+    gchar **split_parts;
+
+    new_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+    if (convert && !unescape) {
+      pct_part_sep = g_strdup_printf ("%%%2.2X", (guint) (*part_sep));
+      pct_kv_sep = g_strdup_printf ("%%%2.2X", (guint) (*kv_sep));
+    }
+
+    split_parts = g_strsplit (str, part_sep, -1);
+    if (split_parts) {
+      gchar **next_part;
+      for (next_part = split_parts; *next_part; next_part += 1) {
+        gchar *part = *next_part;
+        gchar *kv_sep_pos;
+        gchar *key, *value;
+        /* if we are converting percent encoded versions of separators then
+         *  substitute the part separator now. */
+        if (convert && !unescape) {
+          gchar *next_sep;
+          for (next_sep = strcasestr (part, pct_part_sep); next_sep;
+              next_sep = strcasestr (next_sep + 1, pct_part_sep)) {
+            *next_sep = *part_sep;
+            memmove (next_sep + 1, next_sep + 3, strlen (next_sep + 3) + 1);
+          }
+        }
+        /* find the key/value separator within the part */
+        kv_sep_pos = g_strstr_len (part, -1, kv_sep);
+        if (kv_sep_pos == NULL) {
+          if (unescape) {
+            key = g_uri_unescape_string (part, NULL);
+          } else {
+            key = g_strdup (part);
+          }
+          value = NULL;
+        } else {
+          if (unescape) {
+            key = g_uri_unescape_segment (part, kv_sep_pos, NULL);
+            value = g_uri_unescape_string (kv_sep_pos + 1, NULL);
+          } else {
+            key = g_strndup (part, kv_sep_pos - part);
+            value = g_strdup (kv_sep_pos + 1);
+          }
+        }
+        /* if we are converting percent encoded versions of separators then
+         *  substitute the key/value separator in both key and value now. */
+        if (convert && !unescape) {
+          gchar *next_sep;
+          for (next_sep = strcasestr (key, pct_kv_sep); next_sep;
+              next_sep = strcasestr (next_sep + 1, pct_kv_sep)) {
+            *next_sep = *kv_sep;
+            memmove (next_sep + 1, next_sep + 3, strlen (next_sep + 3) + 1);
+          }
+          if (value) {
+            for (next_sep = strcasestr (value, pct_kv_sep); next_sep;
+                next_sep = strcasestr (next_sep + 1, pct_kv_sep)) {
+              *next_sep = *kv_sep;
+              memmove (next_sep + 1, next_sep + 3, strlen (next_sep + 3) + 1);
+            }
+          }
+        }
+        /* add value to the table */
+        g_hash_table_insert (new_table, key, value);
+      }
+    }
+    /* tidy up */
+    g_strfreev (split_parts);
+    if (convert && !unescape) {
+      g_free (pct_part_sep);
+      g_free (pct_kv_sep);
+    }
+  }
+
+  return new_table;
+}
+
+
+/*
+ * Method definitions.
+ */
+
+/**
+ * gst_uri_new:
+ * @scheme: (nullable): The scheme for the new URI.
+ * @userinfo: (nullable): The user-info for the new URI.
+ * @host: (nullable): The host name for the new URI.
+ * @port: The port number for the new URI or %GST_URI_NO_PORT.
+ * @path: (nullable): The path for the new URI with '/' separating path
+ *                      elements.
+ * @query: (nullable): The query string for the new URI with '&' separating
+ *                       query elements. Elements containing '&' characters
+ *                       should encode them as "%26".
+ * @fragment: (nullable): The fragment name for the new URI.
+ *
+ * Creates a new #GstUri object with the given URI parts. The path and query
+ * strings will be broken down into their elements. All strings should not be
+ * escaped except where indicated.
+ *
+ * Returns: (transfer full): A new #GstUri object.
+ *
+ * Since: 1.6
+ */
+GstUri *
+gst_uri_new (const gchar * scheme, const gchar * userinfo, const gchar * host,
+    guint port, const gchar * path, const gchar * query, const gchar * fragment)
+{
+  GstUri *new_uri;
+
+  new_uri = _gst_uri_new ();
+  if (new_uri) {
+    new_uri->scheme = g_strdup (scheme);
+    new_uri->userinfo = g_strdup (userinfo);
+    new_uri->host = g_strdup (host);
+    new_uri->port = port;
+    new_uri->path = _gst_uri_string_to_list (path, "/", FALSE, FALSE);
+    new_uri->query = _gst_uri_string_to_table (query, "&", "=", TRUE, FALSE);
+    new_uri->fragment = g_strdup (fragment);
+  }
+
+  return new_uri;
+}
+
+/**
+ * gst_uri_new_with_base:
+ * @base: (transfer none)(nullable): The base URI to join the new URI to.
+ * @scheme: (nullable): The scheme for the new URI.
+ * @userinfo: (nullable): The user-info for the new URI.
+ * @host: (nullable): The host name for the new URI.
+ * @port: The port number for the new URI or %GST_URI_NO_PORT.
+ * @path: (nullable): The path for the new URI with '/' separating path
+ *                      elements.
+ * @query: (nullable): The query string for the new URI with '&' separating
+ *                       query elements. Elements containing '&' characters
+ *                       should encode them as "%26".
+ * @fragment: (nullable): The fragment name for the new URI.
+ *
+ * Like gst_uri_new(), but joins the new URI onto a base URI.
+ *
+ * Returns: (transfer full): The new URI joined onto @base.
+ *
+ * Since: 1.6
+ */
+GstUri *
+gst_uri_new_with_base (GstUri * base, const gchar * scheme,
+    const gchar * userinfo, const gchar * host, guint port, const gchar * path,
+    const gchar * query, const gchar * fragment)
+{
+  GstUri *new_rel_uri;
+  GstUri *new_uri;
+
+  g_return_val_if_fail (base == NULL || GST_IS_URI (base), NULL);
+
+  new_rel_uri = gst_uri_new (scheme, userinfo, host, port, path, query,
+      fragment);
+  new_uri = gst_uri_join (base, new_rel_uri);
+  gst_uri_unref (new_rel_uri);
+
+  return new_uri;
+}
+
+/**
+ * gst_uri_from_string:
+ * @uri: The URI string to parse.
+ *
+ * Parses a URI string into a new #GstUri object. Will return NULL if the URI
+ * cannot be parsed.
+ *
+ * Returns: (transfer full)(nullable): A new #GstUri object, or NULL.
+ *
+ * Since: 1.6
+ */
+GstUri *
+gst_uri_from_string (const gchar * uri)
+{
+  const gchar *orig_uri = uri;
+  GstUri *uri_obj;
+
+  uri_obj = _gst_uri_new ();
+
+  if (uri_obj && uri != NULL) {
+    int i = 0;
+
+    /* be helpful and skip initial white space */
+    while (*uri == '\v' || g_ascii_isspace (*uri))
+      uri++;
+
+    if (g_ascii_isalpha (uri[i])) {
+      /* find end of scheme name */
+      i++;
+      while (g_ascii_isalnum (uri[i]) || uri[i] == '+' || uri[i] == '-' ||
+          uri[i] == '.')
+        i++;
+    }
+    if (i > 0 && uri[i] == ':') {
+      /* get scheme */
+      uri_obj->scheme = g_strndup (uri, i);
+      uri += i + 1;
+    }
+    if (uri[0] == '/' && uri[1] == '/') {
+      const gchar *eoa, *eoui, *eoh, *reoh;
+      /* get authority [userinfo@]host[:port] */
+      uri += 2;
+      /* find end of authority */
+      eoa = uri + strcspn (uri, "/?#");
+
+      /* find end of userinfo */
+      eoui = strchr (uri, '@');
+      if (eoui != NULL && eoui < eoa) {
+        uri_obj->userinfo = g_uri_unescape_segment (uri, eoui, NULL);
+        uri = eoui + 1;
+      }
+      /* find end of host */
+      if (uri[0] == '[') {
+        eoh = strchr (uri, ']');
+        if (eoh == NULL || eoh > eoa) {
+          GST_DEBUG ("Unable to parse the host part of the URI '%s'.",
+              orig_uri);
+          _gst_uri_free (uri_obj);
+          return NULL;
+        }
+        reoh = eoh + 1;
+        uri++;
+      } else {
+        reoh = eoh = strchr (uri, ':');
+        if (eoh == NULL || eoh > eoa)
+          reoh = eoh = eoa;
+      }
+      /* don't capture empty host strings */
+      if (eoh != uri)
+        uri_obj->host = g_uri_unescape_segment (uri, eoh, NULL);
+
+      uri = reoh;
+      if (uri < eoa) {
+        /* if port number is malformed then we can't parse this */
+        if (uri[0] != ':' || strspn (uri + 1, "0123456789") != eoa - uri - 1) {
+          GST_DEBUG ("Unable to parse host/port part of the URI '%s'.",
+              orig_uri);
+          _gst_uri_free (uri_obj);
+          return NULL;
+        }
+        /* otherwise treat port as unsigned decimal number */
+        uri++;
+        while (uri < eoa) {
+          uri_obj->port = uri_obj->port * 10 + g_ascii_digit_value (*uri);
+          uri++;
+        }
+      }
+      uri = eoa;
+    }
+    if (uri != NULL && uri[0] != '\0') {
+      /* get path */
+      size_t len;
+      len = strcspn (uri, "?#");
+      if (uri[len] == '\0') {
+        uri_obj->path = _gst_uri_string_to_list (uri, "/", FALSE, TRUE);
+        uri = NULL;
+      } else {
+        if (len > 0) {
+          gchar *path_str = g_strndup (uri, len);
+          uri_obj->path = _gst_uri_string_to_list (path_str, "/", FALSE, TRUE);
+          g_free (path_str);
+        }
+        uri += len;
+      }
+    }
+    if (uri != NULL && uri[0] == '?') {
+      /* get query */
+      gchar *eoq;
+      eoq = strchr (++uri, '#');
+      if (eoq == NULL) {
+        uri_obj->query = _gst_uri_string_to_table (uri, "&", "=", TRUE, TRUE);
+        uri = NULL;
+      } else {
+        if (eoq != uri) {
+          gchar *query_str = g_strndup (uri, eoq - uri);
+          uri_obj->query = _gst_uri_string_to_table (query_str, "&", "=", TRUE,
+              TRUE);
+          g_free (query_str);
+        }
+        uri = eoq;
+      }
+    }
+    if (uri != NULL && uri[0] == '#') {
+      uri_obj->fragment = g_uri_unescape_string (uri + 1, NULL);
+    }
+  }
+
+  return uri_obj;
+}
+
+/**
+ * gst_uri_from_string_with_base:
+ * @base: (transfer none)(nullable): The base URI to join the new URI with.
+ * @uri: The URI string to parse.
+ *
+ * Like gst_uri_from_string() but also joins with a base URI.
+ *
+ * Returns: (transfer full): A new #GstUri object.
+ *
+ * Since: 1.6
+ */
+GstUri *
+gst_uri_from_string_with_base (GstUri * base, const gchar * uri)
+{
+  GstUri *new_rel_uri;
+  GstUri *new_uri;
+
+  g_return_val_if_fail (base == NULL || GST_IS_URI (base), NULL);
+
+  new_rel_uri = gst_uri_from_string (uri);
+  new_uri = gst_uri_join (base, new_rel_uri);
+  gst_uri_unref (new_rel_uri);
+
+  return new_uri;
+}
+
+/**
+ * gst_uri_equal:
+ * @first: First #GstUri to compare.
+ * @second: Second #GstUri to compare.
+ *
+ * Compares two #GstUri objects to see if they represent the same normalized
+ * URI.
+ *
+ * Returns: %TRUE if the normalized versions of the two URI's would be equal.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_equal (const GstUri * first, const GstUri * second)
+{
+  gchar *first_norm = NULL, *second_norm = NULL;
+  GList *first_norm_list = NULL, *second_norm_list = NULL;
+  const gchar *first_cmp, *second_cmp;
+  GHashTableIter table_iter;
+  gpointer key, value;
+  int result;
+
+  g_return_val_if_fail ((first == NULL || GST_IS_URI (first)) &&
+      (second == NULL || GST_IS_URI (second)), FALSE);
+
+  if (first == second)
+    return TRUE;
+
+  if (first == NULL || second == NULL)
+    return FALSE;
+
+  if (first->port != second->port)
+    return FALSE;
+
+/* work out a version of field value (normalized or not) to compare.
+ * first_cmp, second_cmp will be the values to compare later.
+ * first_norm, second_norm will be non-NULL if normalized versions are used,
+ *  and need to be freed later.
+ */
+#define GST_URI_NORMALIZED_FIELD(pos, field, norm_fn, flags) \
+  pos##_cmp = pos->field; \
+  if (_gst_uri_first_non_normalized_char ((gchar*)pos##_cmp, flags) != NULL) { \
+    pos##_norm = g_strdup (pos##_cmp); \
+    norm_fn (pos##_norm); \
+    pos##_cmp = pos##_norm; \
+  }
+
+/* compare two string values, normalizing if needed */
+#define GST_URI_NORMALIZED_CMP_STR(field, norm_fn, flags) \
+  GST_URI_NORMALIZED_FIELD (first, field, norm_fn, flags) \
+  GST_URI_NORMALIZED_FIELD (second, field, norm_fn, flags) \
+  result = g_strcmp0 (first_cmp, second_cmp); \
+  g_free (first_norm); \
+  first_norm = NULL; \
+  g_free (second_norm); \
+  second_norm = NULL; \
+  if (result != 0) return FALSE
+
+/* compare two string values */
+#define GST_URI_CMP_STR(field) \
+  if (g_strcmp0 (first->field, second->field) != 0) return FALSE
+
+/* compare two GLists, normalize lists if needed before comparison */
+#define GST_URI_NORMALIZED_CMP_LIST(field, norm_fn, copy_fn, cmp_fn, free_fn) \
+  first_norm_list = g_list_copy_deep (first->field, (GCopyFunc) copy_fn, NULL); \
+  norm_fn (&first_norm_list); \
+  second_norm_list = g_list_copy_deep (second->field, (GCopyFunc) copy_fn, NULL); \
+  norm_fn (&second_norm_list); \
+  result = _gst_uri_compare_lists (first_norm_list, second_norm_list, (GCompareFunc) cmp_fn); \
+  g_list_free_full (first_norm_list, free_fn); \
+  g_list_free_full (second_norm_list, free_fn); \
+  if (result != 0) return FALSE
+
+  GST_URI_CMP_STR (userinfo);
+
+  GST_URI_CMP_STR (fragment);
+
+  GST_URI_NORMALIZED_CMP_STR (scheme, _gst_uri_normalize_scheme,
+      _GST_URI_NORMALIZE_LOWERCASE);
+
+  GST_URI_NORMALIZED_CMP_STR (host, _gst_uri_normalize_hostname,
+      _GST_URI_NORMALIZE_LOWERCASE);
+
+  GST_URI_NORMALIZED_CMP_LIST (path, _gst_uri_normalize_path, g_strdup,
+      g_strcmp0, g_free);
+
+  if (first->query == NULL && second->query != NULL)
+    return FALSE;
+  if (first->query != NULL && second->query == NULL)
+    return FALSE;
+  if (first->query != NULL) {
+    if (g_hash_table_size (first->query) != g_hash_table_size (second->query))
+      return FALSE;
+
+    g_hash_table_iter_init (&table_iter, first->query);
+    while (g_hash_table_iter_next (&table_iter, &key, &value)) {
+      if (!g_hash_table_contains (second->query, key))
+        return FALSE;
+      result = g_strcmp0 (g_hash_table_lookup (second->query, key), value);
+      if (result != 0)
+        return FALSE;
+    }
+  }
+#undef GST_URI_NORMALIZED_CMP_STR
+#undef GST_URI_CMP_STR
+#undef GST_URI_NORMALIZED_CMP_LIST
+#undef GST_URI_NORMALIZED_FIELD
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_join:
+ * @base_uri: (transfer none)(nullable): The base URI to join another to.
+ * @ref_uri: (transfer none)(nullable): The reference URI to join onto the
+ *                                        base URI.
+ *
+ * Join a reference URI onto a base URI using the method from RFC 3986.
+ * If either URI is %NULL then the other URI will be returned with the ref count
+ * increased.
+ *
+ * Returns: (transfer full): A #GstUri which represents the base with the
+ *                           reference URI joined on.
+ *
+ * Since: 1.6
+ */
+GstUri *
+gst_uri_join (GstUri * base_uri, GstUri * ref_uri)
+{
+  const gchar *r_scheme;
+  GstUri *t;
+
+  g_return_val_if_fail ((base_uri == NULL || GST_IS_URI (base_uri)) &&
+      (ref_uri == NULL || GST_IS_URI (ref_uri)), NULL);
+
+  if (base_uri == NULL && ref_uri == NULL)
+    return NULL;
+  if (base_uri == NULL) {
+    g_return_val_if_fail (GST_IS_URI (ref_uri), NULL);
+    return gst_uri_ref (ref_uri);
+  }
+  if (ref_uri == NULL) {
+    g_return_val_if_fail (GST_IS_URI (base_uri), NULL);
+    return gst_uri_ref (base_uri);
+  }
+
+  g_return_val_if_fail (GST_IS_URI (base_uri) && GST_IS_URI (ref_uri), NULL);
+
+  t = _gst_uri_new ();
+
+  if (t == NULL)
+    return t;
+
+  /* process according to RFC3986 */
+  r_scheme = ref_uri->scheme;
+  if (r_scheme != NULL && g_strcmp0 (base_uri->scheme, r_scheme) == 0) {
+    r_scheme = NULL;
+  }
+  if (r_scheme != NULL) {
+    t->scheme = g_strdup (r_scheme);
+    t->userinfo = g_strdup (ref_uri->userinfo);
+    t->host = g_strdup (ref_uri->host);
+    t->port = ref_uri->port;
+    t->path = _remove_dot_segments (ref_uri->path);
+    t->query = _gst_uri_copy_query_table (ref_uri->query);
+  } else {
+    if (ref_uri->host != NULL) {
+      t->userinfo = g_strdup (ref_uri->userinfo);
+      t->host = g_strdup (ref_uri->host);
+      t->port = ref_uri->port;
+      t->path = _remove_dot_segments (ref_uri->path);
+      t->query = _gst_uri_copy_query_table (ref_uri->query);
+    } else {
+      if (ref_uri->path == NULL) {
+        t->path = g_list_copy_deep (base_uri->path, (GCopyFunc) g_strdup, NULL);
+        if (ref_uri->query != NULL)
+          t->query = _gst_uri_copy_query_table (ref_uri->query);
+        else
+          t->query = _gst_uri_copy_query_table (base_uri->query);
+      } else {
+        if (ref_uri->path->data == NULL)
+          t->path = _remove_dot_segments (ref_uri->path);
+        else {
+          GList *mrgd = _merge (base_uri->path, ref_uri->path);
+          t->path = _remove_dot_segments (mrgd);
+          g_list_free_full (mrgd, g_free);
+        }
+        t->query = _gst_uri_copy_query_table (ref_uri->query);
+      }
+      t->userinfo = g_strdup (base_uri->userinfo);
+      t->host = g_strdup (base_uri->host);
+      t->port = base_uri->port;
+    }
+    t->scheme = g_strdup (base_uri->scheme);
+  }
+  t->fragment = g_strdup (ref_uri->fragment);
+
+  return t;
+}
+
+/**
+ * gst_uri_join_strings:
+ * @base_uri: The percent-encoded base URI.
+ * @ref_uri: The percent-encoded reference URI to join to the @base_uri.
+ *
+ * This is a convenience function to join two URI strings and return the result.
+ * The returned string should be g_free()'d after use.
+ *
+ * Returns: (transfer full): A string representing the percent-encoded join of
+ *          the two URIs.
+ *
+ * Since: 1.6
+ */
+gchar *
+gst_uri_join_strings (const gchar * base_uri, const gchar * ref_uri)
+{
+  GstUri *base, *result;
+  gchar *result_uri;
+
+  base = gst_uri_from_string (base_uri);
+  result = gst_uri_from_string_with_base (base, ref_uri);
+  result_uri = gst_uri_to_string (result);
+  gst_uri_unref (base);
+  gst_uri_unref (result);
+
+  return result_uri;
+}
+
+/**
+ * gst_uri_is_writable:
+ * @uri: The #GstUri object to test.
+ *
+ * Check if it is safe to write to this #GstUri.
+ *
+ * Check if the refcount of @uri is exactly 1, meaning that no other
+ * reference exists to the #GstUri and that the #GstUri is therefore writable.
+ *
+ * Modification of a #GstUri should only be done after verifying that it is
+ * writable.
+ *
+ * Returns: %TRUE if it is safe to write to the object.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_is_writable (const GstUri * uri)
+{
+  g_return_val_if_fail (GST_IS_URI (uri), FALSE);
+  return gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (uri));
+}
+
+/**
+ * gst_uri_make_writable:
+ * @uri: (transfer full): The #GstUri object to make writable.
+ *
+ * Make the #GstUri writable.
+ *
+ * Checks if @uri is writable, and if so the original object is returned. If
+ * not, then a writable copy is made and returned. This gives away the
+ * reference to @uri and returns a reference to the new #GstUri.
+ * If @uri is %NULL then %NULL is returned.
+ *
+ * Returns: (transfer full): A writable version of @uri.
+ *
+ * Since: 1.6
+ */
+GstUri *
+gst_uri_make_writable (GstUri * uri)
+{
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+  return
+      GST_URI_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (uri)));
+}
+
+/**
+ * gst_uri_to_string:
+ * @uri: This #GstUri to convert to a string.
+ *
+ * Convert the URI to a string.
+ *
+ * Returns the URI as held in this object as a gchar* %NUL terminated string.
+ * The caller should g_free() the string once they are finished with it.
+ * The string is put together as described in RFC 3986.
+ *
+ * Returns: (transfer full): The string version of the URI.
+ *
+ * Since: 1.6
+ */
+gchar *
+gst_uri_to_string (const GstUri * uri)
+{
+  GString *uri_str;
+  gchar *escaped;
+
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+
+  uri_str = g_string_new (NULL);
+
+  if (uri->scheme != NULL)
+    g_string_append_printf (uri_str, "%s:", uri->scheme);
+
+  if (uri->userinfo != NULL || uri->host != NULL ||
+      uri->port != GST_URI_NO_PORT)
+    g_string_append (uri_str, "//");
+
+  if (uri->userinfo != NULL) {
+    escaped = _gst_uri_escape_userinfo (uri->userinfo);
+    g_string_append_printf (uri_str, "%s@", escaped);
+    g_free (escaped);
+  }
+
+  if (uri->host != NULL) {
+    if (strchr (uri->host, ':') != NULL) {
+      escaped = _gst_uri_escape_host_colon (uri->host);
+      g_string_append_printf (uri_str, "[%s]", escaped);
+      g_free (escaped);
+    } else {
+      escaped = _gst_uri_escape_host (uri->host);
+      g_string_append (uri_str, escaped);
+      g_free (escaped);
+    }
+  }
+
+  if (uri->port != GST_URI_NO_PORT)
+    g_string_append_printf (uri_str, ":%u", uri->port);
+
+  if (uri->path != NULL) {
+    escaped = gst_uri_get_path_string (uri);
+    g_string_append (uri_str, escaped);
+    g_free (escaped);
+  }
+
+  if (uri->query) {
+    g_string_append (uri_str, "?");
+    escaped = gst_uri_get_query_string (uri);
+    g_string_append (uri_str, escaped);
+    g_free (escaped);
+  }
+
+  if (uri->fragment != NULL) {
+    escaped = _gst_uri_escape_fragment (uri->fragment);
+    g_string_append_printf (uri_str, "#%s", escaped);
+    g_free (escaped);
+  }
+
+  return g_string_free (uri_str, FALSE);
+}
+
+/**
+ * gst_uri_is_normalized:
+ * @uri: The #GstUri to test to see if it is normalized.
+ *
+ * Tests the @uri to see if it is normalized. A %NULL @uri is considered to be
+ * normalized.
+ *
+ * Returns: TRUE if the URI is normalized or is %NULL.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_is_normalized (const GstUri * uri)
+{
+  GList *new_path;
+  gboolean ret;
+
+  if (uri == NULL)
+    return TRUE;
+
+  g_return_val_if_fail (GST_IS_URI (uri), FALSE);
+
+  /* check for non-normalized characters in uri parts */
+  if (_gst_uri_first_non_normalized_char (uri->scheme,
+          _GST_URI_NORMALIZE_LOWERCASE) != NULL ||
+      /*_gst_uri_first_non_normalized_char (uri->userinfo,
+          _GST_URI_NORMALIZE_PERCENTAGES) != NULL || */
+      _gst_uri_first_non_normalized_char (uri->host,
+          _GST_URI_NORMALIZE_LOWERCASE /*| _GST_URI_NORMALIZE_PERCENTAGES */ )
+      != NULL
+      /*|| _gst_uri_first_non_normalized_char (uri->path,
+         _GST_URI_NORMALIZE_PERCENTAGES) != NULL
+         || _gst_uri_first_non_normalized_char (uri->query,
+         _GST_URI_NORMALIZE_PERCENTAGES) != NULL
+         || _gst_uri_first_non_normalized_char (uri->fragment,
+         _GST_URI_NORMALIZE_PERCENTAGES) != NULL */ )
+    return FALSE;
+
+  /* also check path has had dot segments removed */
+  new_path = _remove_dot_segments (uri->path);
+  ret =
+      (_gst_uri_compare_lists (new_path, uri->path,
+          (GCompareFunc) g_strcmp0) == 0);
+  g_list_free_full (new_path, g_free);
+  return ret;
+}
+
+/**
+ * gst_uri_normalize:
+ * @uri: (transfer none): The #GstUri to normalize.
+ *
+ * Normalization will remove extra path segments ("." and "..") from the URI. It
+ * will also convert the scheme and host name to lower case and any
+ * percent-encoded values to uppercase.
+ *
+ * The #GstUri object must be writable. Check with gst_uri_is_writable() or use
+ * gst_uri_make_writable() first.
+ *
+ * Returns: TRUE if the URI was modified.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_normalize (GstUri * uri)
+{
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  return _gst_uri_normalize_scheme (uri->scheme) |
+      _gst_uri_normalize_userinfo (uri->userinfo) |
+      _gst_uri_normalize_hostname (uri->host) |
+      _gst_uri_normalize_path (&uri->path) |
+      _gst_uri_normalize_query (uri->query) |
+      _gst_uri_normalize_fragment (uri->fragment);
+}
+
+/**
+ * gst_uri_get_scheme:
+ * @uri: (nullable): This #GstUri object.
+ *
+ * Get the scheme name from the URI or %NULL if it doesn't exist.
+ * If @uri is %NULL then returns %NULL.
+ *
+ * Returns: The scheme from the #GstUri object or %NULL.
+ */
+const gchar *
+gst_uri_get_scheme (const GstUri * uri)
+{
+  g_return_val_if_fail (uri == NULL || GST_IS_URI (uri), NULL);
+  return (uri ? uri->scheme : NULL);
+}
+
+/**
+ * gst_uri_set_scheme:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @scheme: The new scheme to set or %NULL to unset the scheme.
+ *
+ * Set or unset the scheme for the URI.
+ *
+ * Returns: %TRUE if the scheme was set/unset successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_scheme (GstUri * uri, const gchar * scheme)
+{
+  if (!uri)
+    return scheme == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  g_free (uri->scheme);
+  uri->scheme = g_strdup (scheme);
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_userinfo:
+ * @uri: (nullable): This #GstUri object.
+ *
+ * Get the userinfo (usually in the form "username:password") from the URI
+ * or %NULL if it doesn't exist. If @uri is %NULL then returns %NULL.
+ *
+ * Returns: The userinfo from the #GstUri object or %NULL.
+ *
+ * Since: 1.6
+ */
+const gchar *
+gst_uri_get_userinfo (const GstUri * uri)
+{
+  g_return_val_if_fail (uri == NULL || GST_IS_URI (uri), NULL);
+  return (uri ? uri->userinfo : NULL);
+}
+
+/**
+ * gst_uri_set_userinfo:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @userinfo: The new user-information string to set or %NULL to unset.
+ *
+ * Set or unset the user information for the URI.
+ *
+ * Returns: %TRUE if the user information was set/unset successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_userinfo (GstUri * uri, const gchar * userinfo)
+{
+  if (!uri)
+    return userinfo == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  g_free (uri->userinfo);
+  uri->userinfo = g_strdup (userinfo);
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_host:
+ * @uri: (nullable): This #GstUri object.
+ *
+ * Get the host name from the URI or %NULL if it doesn't exist.
+ * If @uri is %NULL then returns %NULL.
+ *
+ * Returns: The host name from the #GstUri object or %NULL.
+ *
+ * Since: 1.6
+ */
+const gchar *
+gst_uri_get_host (const GstUri * uri)
+{
+  g_return_val_if_fail (uri == NULL || GST_IS_URI (uri), NULL);
+  return (uri ? uri->host : NULL);
+}
+
+/**
+ * gst_uri_set_host:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @host: The new host string to set or %NULL to unset.
+ *
+ * Set or unset the host for the URI.
+ *
+ * Returns: %TRUE if the host was set/unset successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_host (GstUri * uri, const gchar * host)
+{
+  if (!uri)
+    return host == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  g_free (uri->host);
+  uri->host = g_strdup (host);
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_port:
+ * @uri: (nullable): This #GstUri object.
+ *
+ * Get the port number from the URI or %GST_URI_NO_PORT if it doesn't exist.
+ * If @uri is %NULL then returns %GST_URI_NO_PORT.
+ *
+ * Returns: The port number from the #GstUri object or %GST_URI_NO_PORT.
+ *
+ * Since: 1.6
+ */
+guint
+gst_uri_get_port (const GstUri * uri)
+{
+  g_return_val_if_fail (uri == NULL || GST_IS_URI (uri), GST_URI_NO_PORT);
+  return (uri ? uri->port : GST_URI_NO_PORT);
+}
+
+/**
+ * gst_uri_set_port:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @port: The new port number to set or %GST_URI_NO_PORT to unset.
+ *
+ * Set or unset the port number for the URI.
+ *
+ * Returns: %TRUE if the port number was set/unset successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_port (GstUri * uri, guint port)
+{
+  if (!uri)
+    return port == GST_URI_NO_PORT;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  uri->port = port;
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_path:
+ * @uri: The #GstUri to get the path from.
+ *
+ * Extract the path string from the URI object.
+ *
+ * Returns: (transfer full): The path from the URI. Once finished with the
+ *                           string should be g_free()'d.
+ *
+ * Since: 1.6
+ */
+gchar *
+gst_uri_get_path (const GstUri * uri)
+{
+  GList *path_segment;
+  const gchar *sep = "";
+  GString *ret;
+
+  if (!uri)
+    return NULL;
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+  if (!uri->path)
+    return NULL;
+
+  ret = g_string_new (NULL);
+
+  for (path_segment = uri->path; path_segment;
+      path_segment = path_segment->next) {
+    g_string_append (ret, sep);
+    if (path_segment->data) {
+      g_string_append (ret, path_segment->data);
+    }
+    sep = "/";
+  }
+
+  return g_string_free (ret, FALSE);
+}
+
+/**
+ * gst_uri_set_path:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @path: The new path to set with path segments separated by '/', or use %NULL
+ *        to unset the path.
+ *
+ * Sets or unsets the path in the URI.
+ *
+ * Returns: %TRUE if the path was set successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_path (GstUri * uri, const gchar * path)
+{
+  if (!uri)
+    return path == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  g_list_free_full (uri->path, g_free);
+  uri->path = _gst_uri_string_to_list (path, "/", FALSE, FALSE);
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_path_string:
+ * @uri: The #GstUri to get the path from.
+ *
+ * Extract the path string from the URI object as a percent encoded URI path.
+ *
+ * Returns: (transfer full): The path from the URI. Once finished with the
+ *                           string should be g_free()'d.
+ *
+ * Since: 1.6
+ */
+gchar *
+gst_uri_get_path_string (const GstUri * uri)
+{
+  GList *path_segment;
+  const gchar *sep = "";
+  GString *ret;
+  gchar *escaped;
+
+  if (!uri)
+    return NULL;
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+  if (!uri->path)
+    return NULL;
+
+  ret = g_string_new (NULL);
+
+  for (path_segment = uri->path; path_segment;
+      path_segment = path_segment->next) {
+    g_string_append (ret, sep);
+    if (path_segment->data) {
+      escaped = _gst_uri_escape_path_segment (path_segment->data);
+      g_string_append (ret, escaped);
+      g_free (escaped);
+    }
+    sep = "/";
+  }
+
+  return g_string_free (ret, FALSE);
+}
+
+/**
+ * gst_uri_set_path_string:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @path: The new percent encoded path to set with path segments separated by
+ * '/', or use %NULL to unset the path.
+ *
+ * Sets or unsets the path in the URI.
+ *
+ * Returns: %TRUE if the path was set successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_path_string (GstUri * uri, const gchar * path)
+{
+  if (!uri)
+    return path == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  g_list_free_full (uri->path, g_free);
+  uri->path = _gst_uri_string_to_list (path, "/", FALSE, TRUE);
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_path_segments:
+ * @uri: (nullable): The #GstUri to get the path from.
+ *
+ * Get a list of path segments from the URI.
+ *
+ * Returns: (transfer full)(element-type gchar*): A #GList of path segment
+ *          strings or %NULL if no path segments are available. Free the list
+ *          when no longer needed with g_list_free_full(list, g_free).
+ *
+ * Since: 1.6
+ */
+GList *
+gst_uri_get_path_segments (const GstUri * uri)
+{
+  GList *ret = NULL;
+
+  g_return_val_if_fail (uri == NULL || GST_IS_URI (uri), NULL);
+
+  if (uri) {
+    ret = g_list_copy_deep (uri->path, (GCopyFunc) g_strdup, NULL);
+  }
+
+  return ret;
+}
+
+/**
+ * gst_uri_set_path_segments:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @path_segments: (transfer full)(nullable)(element-type gchar*): The new
+ *                 path list to set.
+ *
+ * Replace the path segments list in the URI.
+ *
+ * Returns: %TRUE if the path segments were set successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_path_segments (GstUri * uri, GList * path_segments)
+{
+  g_return_val_if_fail (uri == NULL || GST_IS_URI (uri), FALSE);
+
+  if (!uri) {
+    if (path_segments)
+      g_list_free_full (path_segments, g_free);
+    return path_segments == NULL;
+  }
+
+  g_return_val_if_fail (gst_uri_is_writable (uri), FALSE);
+
+  g_list_free_full (uri->path, g_free);
+  uri->path = path_segments;
+  return TRUE;
+}
+
+/**
+ * gst_uri_append_path:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @relative_path: Relative path to append to the end of the current path.
+ *
+ * Append a path onto the end of the path in the URI. The path is not
+ * normalized, call #gst_uri_normalize() to normalize the path.
+ *
+ * Returns: %TRUE if the path was appended successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_append_path (GstUri * uri, const gchar * relative_path)
+{
+  GList *rel_path_list;
+
+  if (!uri)
+    return relative_path == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+  if (!relative_path)
+    return TRUE;
+
+  if (uri->path) {
+    GList *last_elem = g_list_last (uri->path);
+    if (last_elem->data == NULL) {
+      uri->path = g_list_delete_link (uri->path, last_elem);
+    }
+  }
+  rel_path_list = _gst_uri_string_to_list (relative_path, "/", FALSE, FALSE);
+  /* if path was absolute, make it relative by removing initial NULL element */
+  if (rel_path_list && rel_path_list->data == NULL) {
+    rel_path_list = g_list_delete_link (rel_path_list, rel_path_list);
+  }
+  uri->path = g_list_concat (uri->path, rel_path_list);
+  return TRUE;
+}
+
+/**
+ * gst_uri_append_path_segment:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @path_segment: The path segment string to append to the URI path.
+ *
+ * Append a single path segment onto the end of the URI path.
+ *
+ * Returns: %TRUE if the path was appended successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_append_path_segment (GstUri * uri, const gchar * path_segment)
+{
+  if (!uri)
+    return path_segment == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+  if (!path_segment)
+    return TRUE;
+
+  /* if base path ends in a directory (i.e. last element is NULL), remove it */
+  if (uri->path && g_list_last (uri->path)->data == NULL) {
+    uri->path = g_list_delete_link (uri->path, g_list_last (uri->path));
+  }
+  uri->path = g_list_append (uri->path, g_strdup (path_segment));
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_query_string:
+ * @uri: (nullable): The #GstUri to get the query string from.
+ *
+ * Get a percent encoded URI query string from the @uri.
+ *
+ * Returns: (transfer full): A percent encoded query string. Use g_free() when
+ *          no longer needed.
+ *
+ * Since: 1.6
+ */
+gchar *
+gst_uri_get_query_string (const GstUri * uri)
+{
+  GHashTableIter iter;
+  gpointer key, value;
+  const gchar *sep = "";
+  gchar *escaped;
+  GString *ret;
+
+  if (!uri)
+    return NULL;
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+  if (!uri->query)
+    return NULL;
+
+  ret = g_string_new (NULL);
+  g_hash_table_iter_init (&iter, uri->query);
+  while (g_hash_table_iter_next (&iter, &key, &value)) {
+    g_string_append (ret, sep);
+    escaped = _gst_uri_escape_http_query_element (key);
+    g_string_append (ret, escaped);
+    g_free (escaped);
+    if (value) {
+      escaped = _gst_uri_escape_http_query_element (value);
+      g_string_append_printf (ret, "=%s", escaped);
+      g_free (escaped);
+    }
+    sep = "&";
+  }
+
+  return g_string_free (ret, FALSE);
+}
+
+/**
+ * gst_uri_set_query_string:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @query: The new percent encoded query string to use to populate the query
+ *        table, or use %NULL to unset the query table.
+ *
+ * Sets or unsets the query table in the URI.
+ *
+ * Returns: %TRUE if the query table was set successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_query_string (GstUri * uri, const gchar * query)
+{
+  if (!uri)
+    return query == NULL;
+
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  if (uri->query)
+    g_hash_table_unref (uri->query);
+  uri->query = _gst_uri_string_to_table (query, "&", "=", TRUE, TRUE);
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_get_query_table:
+ * @uri: (nullable): The #GstUri to get the query table from.
+ *
+ * Get the query table from the URI. Keys and values in the table are freed
+ * with g_free when they are deleted. A value may be %NULL to indicate that
+ * the key should appear in the query string in the URI, but does not have a
+ * value. Free the returned #GHashTable with #g_hash_table_unref() when it is
+ * no longer required. Modifying this hash table will modify the query in the
+ * URI.
+ *
+ * Returns: (transfer full)(element-type gchar* gchar*): The query hash table
+ *          from the URI.
+ *
+ * Since: 1.6
+ */
+GHashTable *
+gst_uri_get_query_table (const GstUri * uri)
+{
+  if (!uri)
+    return NULL;
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+  if (!uri->query)
+    return NULL;
+
+  return g_hash_table_ref (uri->query);
+}
+
+/**
+ * gst_uri_set_query_table:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @query_table: (transfer none)(nullable)(element-type gchar* gchar*): The new
+ *               query table to use.
+ *
+ * Set the query table to use in the URI. The old table is unreferenced and a
+ * reference to the new one is used instead. A value if %NULL for @query_table
+ * will remove the query string from the URI.
+ *
+ * Returns: %TRUE if the new table was sucessfully used for the query table.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_query_table (GstUri * uri, GHashTable * query_table)
+{
+  GHashTable *old_table = NULL;
+
+  if (!uri)
+    return query_table == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  old_table = uri->query;
+  if (query_table)
+    uri->query = g_hash_table_ref (query_table);
+  else
+    uri->query = NULL;
+  if (old_table)
+    g_hash_table_unref (old_table);
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_set_query_value:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @query_key: (transfer none): The key for the query entry.
+ * @query_value: (transfer none)(nullable): The value for the key.
+ *
+ * This inserts or replaces a key in the query table. A @query_value of %NULL
+ * indicates that the key has no associated value, but will still be present in
+ * the query string.
+ *
+ * Returns: %TRUE if the query table was sucessfully updated.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_query_value (GstUri * uri, const gchar * query_key,
+    const gchar * query_value)
+{
+  if (!uri)
+    return FALSE;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  if (!uri->query) {
+    uri->query = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
+        g_free);
+  }
+  g_hash_table_insert (uri->query, g_strdup (query_key),
+      g_strdup (query_value));
+
+  return TRUE;
+}
+
+/**
+ * gst_uri_remove_query_key:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @query_key: The key to remove.
+ *
+ * Remove an entry from the query table by key.
+ *
+ * Returns: %TRUE if the key existed in the table and was removed.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_remove_query_key (GstUri * uri, const gchar * query_key)
+{
+  gboolean result;
+
+  if (!uri)
+    return FALSE;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+  if (!uri->query)
+    return FALSE;
+
+  result = g_hash_table_remove (uri->query, query_key);
+  /* if this was the last query entry, remove the query string completely */
+  if (result && g_hash_table_size (uri->query) == 0) {
+    g_hash_table_unref (uri->query);
+    uri->query = NULL;
+  }
+  return result;
+}
+
+/**
+ * gst_uri_query_has_key:
+ * @uri: (nullable): The #GstUri to examine.
+ * @query_key: The key to lookup.
+ *
+ * Check if there is a query table entry for the @query_key key.
+ *
+ * Returns: %TRUE if @query_key exists in the URI query table.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_query_has_key (const GstUri * uri, const gchar * query_key)
+{
+  if (!uri)
+    return FALSE;
+  g_return_val_if_fail (GST_IS_URI (uri), FALSE);
+  if (!uri->query)
+    return FALSE;
+
+  return g_hash_table_contains (uri->query, query_key);
+}
+
+/**
+ * gst_uri_get_query_value:
+ * @uri: (nullable): The #GstUri to examine.
+ * @query_key: The key to lookup.
+ *
+ * Get the value associated with the @query_key key. Will return %NULL if the
+ * key has no value or if the key does not exist in the URI query table. Because
+ * %NULL is returned for both missing keys and keys with no value, you should
+ * use gst_uri_query_has_key() to determine if a key is present in the URI
+ * query.
+ *
+ * Returns: The value for the given key, or %NULL if not found.
+ *
+ * Since: 1.6
+ */
+const gchar *
+gst_uri_get_query_value (const GstUri * uri, const gchar * query_key)
+{
+  if (!uri)
+    return NULL;
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+  if (!uri->query)
+    return NULL;
+
+  return g_hash_table_lookup (uri->query, query_key);
+}
+
+/**
+ * gst_uri_get_query_keys:
+ * @uri: (nullable): The #GstUri to examine.
+ *
+ * Get a list of the query keys from the URI.
+ *
+ * Returns: (transfer container)(element-type gchar*): A list of keys from
+ *          the URI query. Free the list with g_list_free().
+ *
+ * Since: 1.6
+ */
+GList *
+gst_uri_get_query_keys (const GstUri * uri)
+{
+  if (!uri)
+    return NULL;
+  g_return_val_if_fail (GST_IS_URI (uri), NULL);
+  if (!uri->query)
+    return NULL;
+
+  return g_hash_table_get_keys (uri->query);
+}
+
+/**
+ * gst_uri_get_fragment:
+ * @uri: (nullable): This #GstUri object.
+ *
+ * Get the fragment name from the URI or %NULL if it doesn't exist.
+ * If @uri is %NULL then returns %NULL.
+ *
+ * Returns: The host name from the #GstUri object or %NULL.
+ *
+ * Since: 1.6
+ */
+const gchar *
+gst_uri_get_fragment (const GstUri * uri)
+{
+  g_return_val_if_fail (uri == NULL || GST_IS_URI (uri), NULL);
+  return (uri ? uri->fragment : NULL);
+}
+
+/**
+ * gst_uri_set_fragment:
+ * @uri: (transfer none)(nullable): The #GstUri to modify.
+ * @fragment: (nullable): The fragment string to set.
+ *
+ * Sets the fragment string in the URI. Use a value of %NULL in @fragment to
+ * unset the fragment string.
+ *
+ * Returns: %TRUE if the fragment was set/unset successfully.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_uri_set_fragment (GstUri * uri, const gchar * fragment)
+{
+  if (!uri)
+    return fragment == NULL;
+  g_return_val_if_fail (GST_IS_URI (uri) && gst_uri_is_writable (uri), FALSE);
+
+  g_free (uri->fragment);
+  uri->fragment = g_strdup (fragment);
+  return TRUE;
+}
diff --git a/gst/gsturi.h b/gst/gsturi.h
index 8a4a9cc..2542c15 100644
--- a/gst/gsturi.h
+++ b/gst/gsturi.h
@@ -1,8 +1,10 @@
 /* GStreamer
  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
  *                    2000 Wim Taymans <wtay@chello.be>
+ *                    2014 David Waring, British Broadcasting Corporation
+ *                             <david.waring@rd.bbc.co.uk>
  *
- * gsturi.h: Header for uri to element mappings
+ * gsturi.h: Header for uri to element mappings and URI manipulation.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -25,7 +27,11 @@
 #define __GST_URI_H__
 
 #include <glib.h>
+#include <glib-object.h>
 #include <gst/gstelement.h>
+#include <gst/gstconfig.h>
+
+#include "gstminiobject.h"
 
 G_BEGIN_DECLS
 
@@ -151,6 +157,159 @@
                                                      const gchar   * uri,
                                                      GError       ** error);
 
+/*
+ * GstUri Type macros.
+ */
+#define GST_TYPE_URI        (gst_uri_get_type ())
+#define GST_IS_URI(obj)	    (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_URI))
+#define GST_URI_CAST(obj)   ((GstUri *)(obj))
+#define GST_URI_CONST_CAST(obj) ((const GstUri *)(obj))
+#define GST_URI(obj)        (GST_URI_CAST(obj))
+
+/**
+ * GstUri:
+ *
+ * This is a private structure that holds the various parts of a parsed URI.
+ */
+struct _GstUri;
+typedef struct _GstUri GstUri;
+
+/**
+ * GST_URI_NO_PORT:
+ *
+ * Value for #GstUri.port to indicate no port number.
+ */
+#define GST_URI_NO_PORT 0
+
+/* used by GST_TYPE_URI */
+GType gst_uri_get_type (void);
+
+/*
+ * Method definitions.
+ */
+
+GstUri * gst_uri_new                   (const gchar * scheme,
+                                        const gchar * userinfo,
+                                        const gchar * host,
+                                        guint port,
+                                        const gchar * path,
+                                        const gchar * query,
+                                        const gchar * fragment) G_GNUC_MALLOC;
+GstUri * gst_uri_new_with_base         (GstUri * base,
+                                        const gchar * scheme,
+                                        const gchar * userinfo,
+                                        const gchar * host,
+                                        guint port,
+                                        const gchar * path,
+                                        const gchar * query,
+                                        const gchar * fragment) G_GNUC_MALLOC;
+GstUri * gst_uri_from_string           (const gchar * uri) G_GNUC_MALLOC;
+GstUri * gst_uri_from_string_with_base (GstUri * base,
+                                        const gchar * uri) G_GNUC_MALLOC;
+gboolean gst_uri_equal                 (const GstUri * first,
+                                        const GstUri * second);
+GstUri * gst_uri_join                  (GstUri * base_uri,
+                                        GstUri * ref_uri);
+gchar *  gst_uri_join_strings          (const gchar * base_uri,
+                                        const gchar * ref_uri) G_GNUC_MALLOC;
+gboolean gst_uri_is_writable           (const GstUri * uri);
+GstUri * gst_uri_make_writable         (GstUri * uri);
+gchar *  gst_uri_to_string             (const GstUri * uri) G_GNUC_MALLOC;
+gboolean gst_uri_is_normalized         (const GstUri * uri);
+gboolean gst_uri_normalize             (GstUri * uri);
+const gchar * gst_uri_get_scheme       (const GstUri * uri);
+gboolean gst_uri_set_scheme            (GstUri * uri, const gchar * scheme);
+const gchar * gst_uri_get_userinfo     (const GstUri * uri);
+gboolean gst_uri_set_userinfo          (GstUri * uri, const gchar * userinfo);
+const gchar * gst_uri_get_host         (const GstUri * uri);
+gboolean gst_uri_set_host              (GstUri * uri, const gchar * host);
+guint gst_uri_get_port                 (const GstUri * uri);
+gboolean gst_uri_set_port              (GstUri * uri, guint port);
+gchar * gst_uri_get_path               (const GstUri * uri);
+gboolean gst_uri_set_path              (GstUri * uri, const gchar * path);
+gchar * gst_uri_get_path_string        (const GstUri * uri);
+gboolean gst_uri_set_path_string       (GstUri * uri, const gchar * path);
+GList * gst_uri_get_path_segments      (const GstUri * uri);
+gboolean gst_uri_set_path_segments     (GstUri * uri, GList * path_segments);
+gboolean gst_uri_append_path           (GstUri * uri,
+                                        const gchar * relative_path);
+gboolean gst_uri_append_path_segment   (GstUri * uri,
+                                        const gchar * path_segment);
+gchar * gst_uri_get_query_string       (const GstUri * uri);
+gboolean gst_uri_set_query_string      (GstUri * uri, const gchar * query);
+GHashTable * gst_uri_get_query_table   (const GstUri * uri);
+gboolean gst_uri_set_query_table       (GstUri * uri,
+                                        GHashTable * query_table);
+gboolean gst_uri_set_query_value       (GstUri * uri, const gchar * query_key,
+                                        const gchar * query_value);
+gboolean gst_uri_remove_query_key      (GstUri * uri, const gchar * query_key);
+gboolean gst_uri_query_has_key         (const GstUri * uri,
+                                        const gchar * query_key);
+const gchar * gst_uri_get_query_value  (const GstUri * uri,
+                                        const gchar * query_key);
+GList * gst_uri_get_query_keys         (const GstUri * uri);
+const gchar * gst_uri_get_fragment     (const GstUri * uri);
+gboolean gst_uri_set_fragment          (GstUri * uri, const gchar * fragment);
+
+/**
+ * gst_uri_copy:
+ * @uri: This #GstUri object.
+ *
+ * Create a new #GstUri object with the same data as this #GstUri object.
+ * If @uri is %NULL then returns %NULL.
+ *
+ * Returns: (transfer full): A new #GstUri object which is a copy of this
+ *          #GstUri or %NULL.
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC GstUri * gst_uri_copy (const GstUri * uri);
+#endif
+
+static inline GstUri *
+gst_uri_copy (const GstUri * uri)
+{
+  return GST_URI_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (uri)));
+}
+
+/**
+ * gst_uri_ref:
+ * @uri: (transfer none): This #GstUri object.
+ *
+ * Add a reference to this #GstUri object. See gst_mini_object_ref() for further
+ * info.
+ *
+ * Returns: This object with the reference count incremented.
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC GstUri * gst_uri_ref (GstUri * uri);
+#endif
+
+static inline GstUri *
+gst_uri_ref (GstUri * uri)
+{
+  return GST_URI_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST (uri)));
+}
+
+/**
+ * gst_uri_unref:
+ * @uri: (transfer full): This #GstUri object.
+ *
+ * Decrement the reference count to this #GstUri object.
+ *
+ * If the reference count drops to 0 then finalize this object.
+ *
+ * See gst_mini_object_unref() for further info.
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC void gst_uri_unref (GstUri * uri);
+#endif
+
+static inline void
+gst_uri_unref (GstUri * uri)
+{
+  gst_mini_object_unref (GST_MINI_OBJECT_CAST (uri));
+}
+
 G_END_DECLS
 
 #endif /* __GST_URI_H__ */
diff --git a/gst/gstutils.c b/gst/gstutils.c
index 2aacbdc..e00f8e8 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -924,11 +924,6 @@
 static gboolean
 gst_pad_check_link (GstPad * srcpad, GstPad * sinkpad)
 {
-  /* FIXME This function is gross.  It's almost a direct copy of
-   * gst_pad_link_filtered().  Any decent programmer would attempt
-   * to merge the two functions, which I will do some day. --ds
-   */
-
   /* generic checks */
   g_return_val_if_fail (GST_IS_PAD (srcpad), FALSE);
   g_return_val_if_fail (GST_IS_PAD (sinkpad), FALSE);
@@ -936,7 +931,6 @@
   GST_CAT_INFO (GST_CAT_PADS, "trying to link %s:%s and %s:%s",
       GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (sinkpad));
 
-  /* FIXME: shouldn't we convert this to g_return_val_if_fail? */
   if (GST_PAD_PEER (srcpad) != NULL) {
     GST_CAT_INFO (GST_CAT_PADS, "Source pad %s:%s has a peer, failed",
         GST_DEBUG_PAD_NAME (srcpad));
@@ -1452,8 +1446,24 @@
   /* we need to setup some ghost pads */
   root = find_common_root (e1, e2);
   if (!root) {
-    g_warning ("Trying to connect elements that don't share a common "
-        "ancestor: %s and %s", GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (e2));
+    if (GST_OBJECT_PARENT (e1) == NULL)
+      g_warning ("Trying to link elements %s and %s that don't share a common "
+          "ancestor: %s hasn't been added to a bin or pipeline, but %s is in %s",
+          GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (e2),
+          GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (e2),
+          GST_ELEMENT_NAME (GST_OBJECT_PARENT (e2)));
+    else if (GST_OBJECT_PARENT (e2) == NULL)
+      g_warning ("Trying to link elements %s and %s that don't share a common "
+          "ancestor: %s hasn't been added to a bin or pipeline, and %s is in %s",
+          GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (e2),
+          GST_ELEMENT_NAME (e2), GST_ELEMENT_NAME (e1),
+          GST_ELEMENT_NAME (GST_OBJECT_PARENT (e1)));
+    else
+      g_warning ("Trying to link elements %s and %s that don't share a common "
+          "ancestor: %s is in %s, and %s is in %s",
+          GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (e2),
+          GST_ELEMENT_NAME (e1), GST_ELEMENT_NAME (GST_OBJECT_PARENT (e1)),
+          GST_ELEMENT_NAME (e2), GST_ELEMENT_NAME (GST_OBJECT_PARENT (e2)));
     return FALSE;
   }
 
@@ -1503,6 +1513,16 @@
   return ret;
 }
 
+static void
+release_and_unref_pad (GstElement * element, GstPad * pad, gboolean requestpad)
+{
+  if (pad) {
+    if (requestpad)
+      gst_element_release_request_pad (element, pad);
+    gst_object_unref (pad);
+  }
+}
+
 /**
  * gst_element_link_pads_full:
  * @src: a #GstElement containing the source pad.
@@ -1534,6 +1554,7 @@
   GstPad *srcpad, *destpad;
   GstPadTemplate *srctempl, *desttempl;
   GstElementClass *srcclass, *destclass;
+  gboolean srcrequest, destrequest;
 
   /* checks */
   g_return_val_if_fail (GST_IS_ELEMENT (src), FALSE);
@@ -1544,11 +1565,16 @@
       srcpadname ? srcpadname : "(any)", GST_ELEMENT_NAME (dest),
       destpadname ? destpadname : "(any)");
 
+  srcrequest = FALSE;
+  destrequest = FALSE;
+
   /* get a src pad */
   if (srcpadname) {
     /* name specified, look it up */
-    if (!(srcpad = gst_element_get_static_pad (src, srcpadname)))
-      srcpad = gst_element_get_request_pad (src, srcpadname);
+    if (!(srcpad = gst_element_get_static_pad (src, srcpadname))) {
+      if ((srcpad = gst_element_get_request_pad (src, srcpadname)))
+        srcrequest = TRUE;
+    }
     if (!srcpad) {
       GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no pad %s:%s",
           GST_ELEMENT_NAME (src), srcpadname);
@@ -1557,13 +1583,15 @@
       if (!(GST_PAD_DIRECTION (srcpad) == GST_PAD_SRC)) {
         GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "pad %s:%s is no src pad",
             GST_DEBUG_PAD_NAME (srcpad));
-        gst_object_unref (srcpad);
+        release_and_unref_pad (src, srcpad, srcrequest);
         return FALSE;
       }
       if (GST_PAD_PEER (srcpad) != NULL) {
         GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS,
             "pad %s:%s is already linked to %s:%s", GST_DEBUG_PAD_NAME (srcpad),
             GST_DEBUG_PAD_NAME (GST_PAD_PEER (srcpad)));
+        /* already linked request pads look like static pads, so the request pad
+         * was never requested a second time above, so no need to release it */
         gst_object_unref (srcpad);
         return FALSE;
       }
@@ -1582,17 +1610,21 @@
   /* get a destination pad */
   if (destpadname) {
     /* name specified, look it up */
-    if (!(destpad = gst_element_get_static_pad (dest, destpadname)))
-      destpad = gst_element_get_request_pad (dest, destpadname);
+    if (!(destpad = gst_element_get_static_pad (dest, destpadname))) {
+      if ((destpad = gst_element_get_request_pad (dest, destpadname)))
+        destrequest = TRUE;
+    }
     if (!destpad) {
       GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no pad %s:%s",
           GST_ELEMENT_NAME (dest), destpadname);
+      release_and_unref_pad (src, srcpad, srcrequest);
       return FALSE;
     } else {
       if (!(GST_PAD_DIRECTION (destpad) == GST_PAD_SINK)) {
         GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "pad %s:%s is no sink pad",
             GST_DEBUG_PAD_NAME (destpad));
-        gst_object_unref (destpad);
+        release_and_unref_pad (src, srcpad, srcrequest);
+        release_and_unref_pad (dest, destpad, destrequest);
         return FALSE;
       }
       if (GST_PAD_PEER (destpad) != NULL) {
@@ -1600,6 +1632,9 @@
             "pad %s:%s is already linked to %s:%s",
             GST_DEBUG_PAD_NAME (destpad),
             GST_DEBUG_PAD_NAME (GST_PAD_PEER (destpad)));
+        release_and_unref_pad (src, srcpad, srcrequest);
+        /* already linked request pads look like static pads, so the request pad
+         * was never requested a second time above, so no need to release it */
         gst_object_unref (destpad);
         return FALSE;
       }
@@ -1621,9 +1656,13 @@
     /* two explicitly specified pads */
     result = pad_link_maybe_ghosting (srcpad, destpad, flags);
 
-    gst_object_unref (srcpad);
-    gst_object_unref (destpad);
-
+    if (result) {
+      gst_object_unref (srcpad);
+      gst_object_unref (destpad);
+    } else {
+      release_and_unref_pad (src, srcpad, srcrequest);
+      release_and_unref_pad (dest, destpad, destrequest);
+    }
     return result;
   }
 
@@ -1637,6 +1676,7 @@
           GST_DEBUG_PAD_NAME (srcpad));
       if ((GST_PAD_DIRECTION (srcpad) == GST_PAD_SRC) &&
           (GST_PAD_PEER (srcpad) == NULL)) {
+        gboolean temprequest = FALSE;
         GstPad *temp;
 
         if (destpadname) {
@@ -1644,6 +1684,11 @@
           gst_object_ref (temp);
         } else {
           temp = gst_element_get_compatible_pad (dest, srcpad, NULL);
+          if (temp && GST_PAD_PAD_TEMPLATE (temp)
+              && GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (temp)) ==
+              GST_PAD_REQUEST) {
+            temprequest = TRUE;
+          }
         }
 
         if (temp && pad_link_maybe_ghosting (srcpad, temp, flags)) {
@@ -1657,6 +1702,8 @@
         }
 
         if (temp) {
+          if (temprequest)
+            gst_element_release_request_pad (dest, temp);
           gst_object_unref (temp);
         }
       }
@@ -1674,13 +1721,16 @@
   if (srcpadname) {
     GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no link possible from %s:%s to %s",
         GST_DEBUG_PAD_NAME (srcpad), GST_ELEMENT_NAME (dest));
+    /* no need to release any request pad as both src- and destpadname must be
+     * set to end up here, but this case has already been taken care of above */
     if (destpad)
       gst_object_unref (destpad);
     destpad = NULL;
   }
-  if (srcpad)
-    gst_object_unref (srcpad);
-  srcpad = NULL;
+  if (srcpad) {
+    release_and_unref_pad (src, srcpad, srcrequest);
+    srcpad = NULL;
+  }
 
   if (destpad) {
     /* loop through the existing pads in the destination */
@@ -1690,6 +1740,13 @@
       if ((GST_PAD_DIRECTION (destpad) == GST_PAD_SINK) &&
           (GST_PAD_PEER (destpad) == NULL)) {
         GstPad *temp = gst_element_get_compatible_pad (src, destpad, NULL);
+        gboolean temprequest = FALSE;
+
+        if (temp && GST_PAD_PAD_TEMPLATE (temp)
+            && GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (temp)) ==
+            GST_PAD_REQUEST) {
+          temprequest = TRUE;
+        }
 
         if (temp && pad_link_maybe_ghosting (temp, destpad, flags)) {
           GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "linked pad %s:%s to pad %s:%s",
@@ -1698,9 +1755,8 @@
           gst_object_unref (destpad);
           return TRUE;
         }
-        if (temp) {
-          gst_object_unref (temp);
-        }
+
+        release_and_unref_pad (src, temp, temprequest);
       }
       if (destpads) {
         destpads = g_list_next (destpads);
@@ -1716,11 +1772,15 @@
   if (destpadname) {
     GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "no link possible from %s to %s:%s",
         GST_ELEMENT_NAME (src), GST_DEBUG_PAD_NAME (destpad));
-    gst_object_unref (destpad);
+    release_and_unref_pad (dest, destpad, destrequest);
     return FALSE;
   } else {
-    if (destpad)
+    /* no need to release any request pad as the case of unset destpatname and
+     * destpad being a requst pad has already been taken care of when looking
+     * though the destination pads above */
+    if (destpad) {
       gst_object_unref (destpad);
+    }
     destpad = NULL;
   }
 
@@ -1763,10 +1823,14 @@
                 return TRUE;
               }
               /* it failed, so we release the request pads */
-              if (srcpad)
+              if (srcpad) {
                 gst_element_release_request_pad (src, srcpad);
-              if (destpad)
+                gst_object_unref (srcpad);
+              }
+              if (destpad) {
                 gst_element_release_request_pad (dest, destpad);
+                gst_object_unref (destpad);
+              }
             }
             gst_caps_unref (srccaps);
             gst_caps_unref (destcaps);
@@ -3004,6 +3068,58 @@
   return pad;
 }
 
+static void
+gst_bin_sync_children_states_foreach (const GValue * value, gpointer user_data)
+{
+  gboolean *success = user_data;
+  GstElement *element = g_value_get_object (value);
+
+  if (gst_element_is_locked_state (element)) {
+    *success = TRUE;
+  } else {
+    *success = *success && gst_element_sync_state_with_parent (element);
+
+    if (GST_IS_BIN (element))
+      *success = *success
+          && gst_bin_sync_children_states (GST_BIN_CAST (element));
+  }
+}
+
+/**
+ * gst_bin_sync_children_states:
+ * @bin: a #GstBin
+ *
+ * Synchronizes the state of every child of @bin with the state
+ * of @bin. See also gst_element_sync_state_with_parent().
+ *
+ * Returns: %TRUE if syncing the state was successful for all children,
+ *  otherwise %FALSE.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_bin_sync_children_states (GstBin * bin)
+{
+  GstIterator *it;
+  GstIteratorResult res = GST_ITERATOR_OK;
+  gboolean success = TRUE;
+
+  it = gst_bin_iterate_sorted (bin);
+
+  do {
+    if (res == GST_ITERATOR_RESYNC) {
+      success = TRUE;
+      gst_iterator_resync (it);
+    }
+    res =
+        gst_iterator_foreach (it, gst_bin_sync_children_states_foreach,
+        &success);
+  } while (res == GST_ITERATOR_RESYNC);
+  gst_iterator_free (it);
+
+  return success;
+}
+
 /**
  * gst_parse_bin_from_description:
  * @bin_description: command line describing the bin
@@ -3621,15 +3737,17 @@
    * here is for source elements */
   if (!upstream_stream_id) {
     GstQuery *query;
+    gchar *uri = NULL;
 
     /* Try to generate one from the URI query and
      * if it fails take a random number instead */
     query = gst_query_new_uri ();
     if (gst_element_query (parent, query)) {
-      GChecksum *cs;
-      gchar *uri;
-
       gst_query_parse_uri (query, &uri);
+    }
+
+    if (uri) {
+      GChecksum *cs;
 
       /* And then generate an SHA256 sum of the URI */
       cs = g_checksum_new (G_CHECKSUM_SHA256);
diff --git a/gst/gstutils.h b/gst/gstutils.h
index a935883..186f439 100644
--- a/gst/gstutils.h
+++ b/gst/gstutils.h
@@ -983,6 +983,8 @@
 void                    gst_bin_remove_many             (GstBin *bin, GstElement *element_1, ...) G_GNUC_NULL_TERMINATED;
 GstPad *                gst_bin_find_unlinked_pad       (GstBin *bin, GstPadDirection direction);
 
+gboolean                gst_bin_sync_children_states    (GstBin *bin);
+
 /* parse utility functions */
 GstElement *            gst_parse_bin_from_description      (const gchar     * bin_description,
                                                              gboolean          ghost_unlinked_pads,
diff --git a/gst/gstvalue.c b/gst/gstvalue.c
index 964431c..031c02a 100644
--- a/gst/gstvalue.c
+++ b/gst/gstvalue.c
@@ -839,7 +839,7 @@
 
 /* Do an unordered compare of the contents of a list */
 static gint
-gst_value_compare_list (const GValue * value1, const GValue * value2)
+gst_value_compare_value_list (const GValue * value1, const GValue * value2)
 {
   guint i, j;
   GArray *array1 = value1->data[0].v_pointer;
@@ -894,7 +894,7 @@
 
 /* Perform an ordered comparison of the contents of an array */
 static gint
-gst_value_compare_array (const GValue * value1, const GValue * value2)
+gst_value_compare_value_array (const GValue * value1, const GValue * value2)
 {
   guint i;
   GArray *array1 = value1->data[0].v_pointer;
@@ -917,26 +917,26 @@
 }
 
 static gchar *
-gst_value_serialize_list (const GValue * value)
+gst_value_serialize_value_list (const GValue * value)
 {
   return gst_value_serialize_any_list (value, "{ ", " }");
 }
 
 static gboolean
-gst_value_deserialize_list (GValue * dest, const gchar * s)
+gst_value_deserialize_value_list (GValue * dest, const gchar * s)
 {
   g_warning ("gst_value_deserialize_list: unimplemented");
   return FALSE;
 }
 
 static gchar *
-gst_value_serialize_array (const GValue * value)
+gst_value_serialize_value_array (const GValue * value)
 {
   return gst_value_serialize_any_list (value, "< ", " >");
 }
 
 static gboolean
-gst_value_deserialize_array (GValue * dest, const gchar * s)
+gst_value_deserialize_value_array (GValue * dest, const gchar * s)
 {
   g_warning ("gst_value_deserialize_array: unimplemented");
   return FALSE;
@@ -2159,6 +2159,16 @@
 /**************
  * GstTagList *
  **************/
+static gint
+gst_value_compare_tag_list (const GValue * value1, const GValue * value2)
+{
+  GstTagList *taglist1 = GST_TAG_LIST (g_value_get_boxed (value1));
+  GstTagList *taglist2 = GST_TAG_LIST (g_value_get_boxed (value2));
+
+  if (gst_tag_list_is_equal (taglist1, taglist2))
+    return GST_VALUE_EQUAL;
+  return GST_VALUE_UNORDERED;
+}
 
 static gboolean
 gst_value_deserialize_tag_list (GValue * dest, const gchar * s)
@@ -2679,18 +2689,6 @@
   return ret;                                                           \
 }
 
-#define REGISTER_SERIALIZATION(_gtype, _type)                           \
-G_STMT_START {                                                          \
-  static const GstValueTable gst_value = {                              \
-    _gtype,                                                             \
-    gst_value_compare_ ## _type,                                        \
-    gst_value_serialize_ ## _type,                                      \
-    gst_value_deserialize_ ## _type,                                    \
-  };                                                                    \
-                                                                        \
-  gst_value_register (&gst_value);                                      \
-} G_STMT_END
-
 CREATE_SERIALIZATION (int, INT);
 CREATE_SERIALIZATION (int64, INT64);
 CREATE_SERIALIZATION (long, LONG);
@@ -2699,7 +2697,7 @@
 CREATE_USERIALIZATION (uint64, UINT64);
 CREATE_USERIALIZATION (ulong, ULONG);
 
-/* FIXME 0.11: remove this again, plugins shouldn't have uchar properties */
+/* FIXME 2.0: remove this again, plugins shouldn't have uchar properties */
 #ifndef G_MAXUCHAR
 #define G_MAXUCHAR 255
 #endif
@@ -6119,268 +6117,105 @@
 #endif
 }
 
+#define SERIAL_VTABLE(t,c,s,d) { t, c, s, d }
+
+#define REGISTER_SERIALIZATION_CONST(_gtype, _type)                     \
+G_STMT_START {                                                          \
+  static const GstValueTable gst_value =                                \
+    SERIAL_VTABLE (_gtype, gst_value_compare_ ## _type,                 \
+    gst_value_serialize_ ## _type, gst_value_deserialize_ ## _type);    \
+  gst_value_register (&gst_value);                                      \
+} G_STMT_END
+
+#define REGISTER_SERIALIZATION(_gtype, _type)                           \
+G_STMT_START {                                                          \
+  static GstValueTable gst_value =                                      \
+    SERIAL_VTABLE (0, gst_value_compare_ ## _type,                      \
+    gst_value_serialize_ ## _type, gst_value_deserialize_ ## _type);    \
+  gst_value.type = _gtype;                                              \
+  gst_value_register (&gst_value);                                      \
+} G_STMT_END
+
+#define REGISTER_SERIALIZATION_NO_COMPARE(_gtype, _type)                \
+G_STMT_START {                                                          \
+  static GstValueTable gst_value =                                      \
+    SERIAL_VTABLE (0, NULL,                                             \
+    gst_value_serialize_ ## _type, gst_value_deserialize_ ## _type);    \
+  gst_value.type = _gtype;                                              \
+  gst_value_register (&gst_value);                                      \
+} G_STMT_END
+
+#define REGISTER_SERIALIZATION_COMPARE_ONLY(_gtype, _type)              \
+G_STMT_START {                                                          \
+  static GstValueTable gst_value =                                      \
+    SERIAL_VTABLE (0, gst_value_compare_ ## _type,                      \
+        NULL, NULL);                                                    \
+  gst_value.type = _gtype;                                              \
+  gst_value_register (&gst_value);                                      \
+} G_STMT_END
+
+static const gint GST_VALUE_TABLE_DEFAULT_SIZE = 32;
+static const gint GST_VALUE_UNION_TABLE_DEFAULT_SIZE = 2;
+static const gint GST_VALUE_INTERSECT_TABLE_DEFAULT_SIZE = 9;
+static const gint GST_VALUE_SUBTRACT_TABLE_DEFAULT_SIZE = 12;
+
 void
 _priv_gst_value_initialize (void)
 {
-  gst_value_table = g_array_new (FALSE, FALSE, sizeof (GstValueTable));
+  gst_value_table =
+      g_array_sized_new (FALSE, FALSE, sizeof (GstValueTable),
+      GST_VALUE_TABLE_DEFAULT_SIZE);
   gst_value_hash = g_hash_table_new (NULL, NULL);
-  gst_value_union_funcs = g_array_new (FALSE, FALSE,
-      sizeof (GstValueUnionInfo));
-  gst_value_intersect_funcs = g_array_new (FALSE, FALSE,
-      sizeof (GstValueIntersectInfo));
-  gst_value_subtract_funcs = g_array_new (FALSE, FALSE,
-      sizeof (GstValueSubtractInfo));
+  gst_value_union_funcs = g_array_sized_new (FALSE, FALSE,
+      sizeof (GstValueUnionInfo), GST_VALUE_UNION_TABLE_DEFAULT_SIZE);
+  gst_value_intersect_funcs = g_array_sized_new (FALSE, FALSE,
+      sizeof (GstValueIntersectInfo), GST_VALUE_INTERSECT_TABLE_DEFAULT_SIZE);
+  gst_value_subtract_funcs = g_array_sized_new (FALSE, FALSE,
+      sizeof (GstValueSubtractInfo), GST_VALUE_SUBTRACT_TABLE_DEFAULT_SIZE);
 
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_int_range,
-      gst_value_serialize_int_range,
-      gst_value_deserialize_int_range,
-    };
+  REGISTER_SERIALIZATION (gst_int_range_get_type (), int_range);
+  REGISTER_SERIALIZATION (gst_int64_range_get_type (), int64_range);
+  REGISTER_SERIALIZATION (gst_double_range_get_type (), double_range);
+  REGISTER_SERIALIZATION (gst_fraction_range_get_type (), fraction_range);
+  REGISTER_SERIALIZATION (gst_value_list_get_type (), value_list);
+  REGISTER_SERIALIZATION (gst_value_array_get_type (), value_array);
+  REGISTER_SERIALIZATION (gst_buffer_get_type (), buffer);
+  REGISTER_SERIALIZATION (gst_sample_get_type (), sample);
+  REGISTER_SERIALIZATION (gst_fraction_get_type (), fraction);
+  REGISTER_SERIALIZATION (gst_caps_get_type (), caps);
+  REGISTER_SERIALIZATION (gst_tag_list_get_type (), tag_list);
+  REGISTER_SERIALIZATION (G_TYPE_DATE, date);
+  REGISTER_SERIALIZATION (gst_date_time_get_type (), date_time);
+  REGISTER_SERIALIZATION (gst_bitmask_get_type (), bitmask);
 
-    gst_value.type = gst_int_range_get_type ();
-    gst_value_register (&gst_value);
-  }
+  REGISTER_SERIALIZATION_NO_COMPARE (gst_segment_get_type (), segment);
+  REGISTER_SERIALIZATION_NO_COMPARE (gst_structure_get_type (), structure);
+  REGISTER_SERIALIZATION_NO_COMPARE (gst_caps_features_get_type (),
+      caps_features);
 
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_int64_range,
-      gst_value_serialize_int64_range,
-      gst_value_deserialize_int64_range,
-    };
+  REGISTER_SERIALIZATION_COMPARE_ONLY (gst_allocation_params_get_type (),
+      allocation_params);
+  REGISTER_SERIALIZATION_COMPARE_ONLY (G_TYPE_OBJECT, object);
 
-    gst_value.type = gst_int64_range_get_type ();
-    gst_value_register (&gst_value);
-  }
+  REGISTER_SERIALIZATION_CONST (G_TYPE_DOUBLE, double);
+  REGISTER_SERIALIZATION_CONST (G_TYPE_FLOAT, float);
 
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_double_range,
-      gst_value_serialize_double_range,
-      gst_value_deserialize_double_range,
-    };
+  REGISTER_SERIALIZATION_CONST (G_TYPE_STRING, string);
+  REGISTER_SERIALIZATION_CONST (G_TYPE_BOOLEAN, boolean);
+  REGISTER_SERIALIZATION_CONST (G_TYPE_ENUM, enum);
 
-    gst_value.type = gst_double_range_get_type ();
-    gst_value_register (&gst_value);
-  }
+  REGISTER_SERIALIZATION_CONST (G_TYPE_FLAGS, flags);
 
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_fraction_range,
-      gst_value_serialize_fraction_range,
-      gst_value_deserialize_fraction_range,
-    };
+  REGISTER_SERIALIZATION_CONST (G_TYPE_INT, int);
 
-    gst_value.type = gst_fraction_range_get_type ();
-    gst_value_register (&gst_value);
-  }
+  REGISTER_SERIALIZATION_CONST (G_TYPE_INT64, int64);
+  REGISTER_SERIALIZATION_CONST (G_TYPE_LONG, long);
 
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_list,
-      gst_value_serialize_list,
-      gst_value_deserialize_list,
-    };
+  REGISTER_SERIALIZATION_CONST (G_TYPE_UINT, uint);
+  REGISTER_SERIALIZATION_CONST (G_TYPE_UINT64, uint64);
+  REGISTER_SERIALIZATION_CONST (G_TYPE_ULONG, ulong);
 
-    gst_value.type = gst_value_list_get_type ();
-    gst_value_register (&gst_value);
-  }
-
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_array,
-      gst_value_serialize_array,
-      gst_value_deserialize_array,
-    };
-
-    gst_value.type = gst_value_array_get_type ();
-    gst_value_register (&gst_value);
-  }
-
-  {
-#if 0
-    static const GTypeValueTable value_table = {
-      gst_value_init_buffer,
-      NULL,
-      gst_value_copy_buffer,
-      NULL,
-      "i",
-      NULL,                     /*gst_value_collect_buffer, */
-      "p",
-      NULL                      /*gst_value_lcopy_buffer */
-    };
-#endif
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_buffer,
-      gst_value_serialize_buffer,
-      gst_value_deserialize_buffer,
-    };
-
-    gst_value.type = GST_TYPE_BUFFER;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_sample,
-      gst_value_serialize_sample,
-      gst_value_deserialize_sample,
-    };
-
-    gst_value.type = GST_TYPE_SAMPLE;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_fraction,
-      gst_value_serialize_fraction,
-      gst_value_deserialize_fraction,
-    };
-
-    gst_value.type = gst_fraction_get_type ();
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_caps,
-      gst_value_serialize_caps,
-      gst_value_deserialize_caps,
-    };
-
-    gst_value.type = GST_TYPE_CAPS;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      NULL,
-      gst_value_serialize_segment,
-      gst_value_deserialize_segment,
-    };
-
-    gst_value.type = GST_TYPE_SEGMENT;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      NULL,
-      gst_value_serialize_structure,
-      gst_value_deserialize_structure,
-    };
-
-    gst_value.type = GST_TYPE_STRUCTURE;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      NULL,
-      gst_value_serialize_caps_features,
-      gst_value_deserialize_caps_features,
-    };
-
-    gst_value.type = GST_TYPE_CAPS_FEATURES;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      NULL,
-      gst_value_serialize_tag_list,
-      gst_value_deserialize_tag_list,
-    };
-
-    gst_value.type = GST_TYPE_TAG_LIST;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_date,
-      gst_value_serialize_date,
-      gst_value_deserialize_date,
-    };
-
-    gst_value.type = G_TYPE_DATE;
-    gst_value_register (&gst_value);
-  }
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_date_time,
-      gst_value_serialize_date_time,
-      gst_value_deserialize_date_time,
-    };
-
-    gst_value.type = gst_date_time_get_type ();
-    gst_value_register (&gst_value);
-  }
-
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_bitmask,
-      gst_value_serialize_bitmask,
-      gst_value_deserialize_bitmask,
-    };
-
-    gst_value.type = gst_bitmask_get_type ();
-    gst_value_register (&gst_value);
-  }
-
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_allocation_params,
-      NULL,
-      NULL,
-    };
-
-    gst_value.type = gst_allocation_params_get_type ();
-    gst_value_register (&gst_value);
-  }
-
-  {
-    static GstValueTable gst_value = {
-      0,
-      gst_value_compare_object,
-      NULL,
-      NULL,
-    };
-
-    gst_value.type = G_TYPE_OBJECT;
-    gst_value_register (&gst_value);
-  }
-
-  REGISTER_SERIALIZATION (G_TYPE_DOUBLE, double);
-  REGISTER_SERIALIZATION (G_TYPE_FLOAT, float);
-
-  REGISTER_SERIALIZATION (G_TYPE_STRING, string);
-  REGISTER_SERIALIZATION (G_TYPE_BOOLEAN, boolean);
-  REGISTER_SERIALIZATION (G_TYPE_ENUM, enum);
-
-  REGISTER_SERIALIZATION (G_TYPE_FLAGS, flags);
-
-  REGISTER_SERIALIZATION (G_TYPE_INT, int);
-
-  REGISTER_SERIALIZATION (G_TYPE_INT64, int64);
-  REGISTER_SERIALIZATION (G_TYPE_LONG, long);
-
-  REGISTER_SERIALIZATION (G_TYPE_UINT, uint);
-  REGISTER_SERIALIZATION (G_TYPE_UINT64, uint64);
-  REGISTER_SERIALIZATION (G_TYPE_ULONG, ulong);
-
-  REGISTER_SERIALIZATION (G_TYPE_UCHAR, uchar);
+  REGISTER_SERIALIZATION_CONST (G_TYPE_UCHAR, uchar);
 
   g_value_register_transform_func (GST_TYPE_INT_RANGE, G_TYPE_STRING,
       gst_value_transform_int_range_string);
@@ -6479,6 +6314,31 @@
   gst_value_register_union_func (GST_TYPE_INT_RANGE, GST_TYPE_INT_RANGE,
       gst_value_union_int_range_int_range);
 
+#if GST_VERSION_NANO == 1
+  /* If building from git master, check starting array sizes matched actual size
+   * so we can keep the defines in sync and save a few reallocs on startup */
+  if (gst_value_table->len != GST_VALUE_TABLE_DEFAULT_SIZE) {
+    GST_ERROR ("Wrong initial gst_value_table size. "
+        "Please set GST_VALUE_TABLE_DEFAULT_SIZE to %u in gstvalue.c",
+        gst_value_table->len);
+  }
+  if (gst_value_union_funcs->len != GST_VALUE_UNION_TABLE_DEFAULT_SIZE) {
+    GST_ERROR ("Wrong initial gst_value_union_funcs table size. "
+        "Please set GST_VALUE_UNION_TABLE_DEFAULT_SIZE to %u in gstvalue.c",
+        gst_value_union_funcs->len);
+  }
+  if (gst_value_intersect_funcs->len != GST_VALUE_INTERSECT_TABLE_DEFAULT_SIZE) {
+    GST_ERROR ("Wrong initial gst_value_intersect_funcs table size. "
+        "Please set GST_VALUE_INTERSECT_TABLE_DEFAULT_SIZE to %u in gstvalue.c",
+        gst_value_intersect_funcs->len);
+  }
+  if (gst_value_subtract_funcs->len != GST_VALUE_SUBTRACT_TABLE_DEFAULT_SIZE) {
+    GST_ERROR ("Wrong initial gst_value_subtract_funcs table size. "
+        "Please set GST_VALUE_SUBTRACT_TABLE_DEFAULT_SIZE to %u in gstvalue.c",
+        gst_value_subtract_funcs->len);
+  }
+#endif
+
 #if 0
   /* Implement these if needed */
   gst_value_register_union_func (GST_TYPE_FRACTION, GST_TYPE_FRACTION_RANGE,
diff --git a/gst/gstvalue.h b/gst/gstvalue.h
index de01abc..2e15642 100644
--- a/gst/gstvalue.h
+++ b/gst/gstvalue.h
@@ -80,12 +80,14 @@
  * Can be used together with #GST_FOURCC_FORMAT to properly output a
  * #guint32 fourcc value in a printf()-style text message.
  */
-#define GST_FOURCC_ARGS(fourcc) \
-        ((gchar) ((fourcc)     &0xff)), \
-        ((gchar) (((fourcc)>>8 )&0xff)), \
-        ((gchar) (((fourcc)>>16)&0xff)), \
-        ((gchar) (((fourcc)>>24)&0xff))
 
+#define __GST_PRINT_CHAR(c) \
+  g_ascii_isprint(c) ? (c) : '.'
+#define GST_FOURCC_ARGS(fourcc)               \
+  __GST_PRINT_CHAR((fourcc) & 0xff),          \
+  __GST_PRINT_CHAR(((fourcc) >> 8) & 0xff),   \
+  __GST_PRINT_CHAR(((fourcc) >> 16) & 0xff),  \
+  __GST_PRINT_CHAR(((fourcc) >> 24) & 0xff)
 /**
  * GST_VALUE_HOLDS_INT_RANGE:
  * @x: the #GValue to check
diff --git a/gst/parse/Makefile.in b/gst/parse/Makefile.in
index 517775a..31c90a8 100644
--- a/gst/parse/Makefile.in
+++ b/gst/parse/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -212,6 +213,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -317,6 +322,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/gst/printf/Makefile.in b/gst/printf/Makefile.in
index 092dcea..49c65e3 100644
--- a/gst/printf/Makefile.in
+++ b/gst/printf/Makefile.in
@@ -90,6 +90,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -107,7 +108,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -210,6 +211,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -315,6 +320,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/gst/printf/printf-parse.c b/gst/printf/printf-parse.c
index 5d60448..d045ae8 100644
--- a/gst/printf/printf-parse.c
+++ b/gst/printf/printf-parse.c
@@ -256,6 +256,10 @@
               cp += 3;
             }
 #endif
+            else if (cp[0] == 'I' && cp[1] == '3' && cp[2] == '2') {
+              //flags = 32;
+              cp += 3;
+            }
 #ifdef HAVE_INTMAX_T
             else if (*cp == 'j') {
               if (sizeof (intmax_t) > sizeof (long)) {
diff --git a/gst/printf/vasnprintf.c b/gst/printf/vasnprintf.c
index 7f3d9e2..b40fc09 100644
--- a/gst/printf/vasnprintf.c
+++ b/gst/printf/vasnprintf.c
@@ -121,6 +121,11 @@
       digits = upper;
       negative = FALSE;
       break;
+    case 'u':
+      base = 10;
+      digits = lower;
+      negative = FALSE;
+      break;
     default:
       base = 10;
       digits = lower;
diff --git a/gstreamer.doap b/gstreamer.doap
index 4c3031f..6fd7def 100644
--- a/gstreamer.doap
+++ b/gstreamer.doap
@@ -40,56 +40,6 @@
 
  <release>
   <Version>
-   <revision>1.4.5</revision>
-   <branch>1.4</branch>
-   <name></name>
-   <created>2014-12-18</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.4.5.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.4.4</revision>
-   <branch>1.4</branch>
-   <name></name>
-   <created>2014-11-06</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.4.4.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.4.3</revision>
-   <branch>1.4</branch>
-   <name></name>
-   <created>2014-09-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.4.3.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.4.2</revision>
-   <branch>1.4</branch>
-   <name></name>
-   <created>2014-09-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.4.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.4.1</revision>
-   <branch>1.4</branch>
-   <name></name>
-   <created>2014-08-27</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.4.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
    <revision>1.4.0</revision>
    <branch>1.4</branch>
    <name></name>
diff --git a/gstreamer.spec b/gstreamer.spec
index e97171b..f8e19eb 100644
--- a/gstreamer.spec
+++ b/gstreamer.spec
@@ -4,8 +4,8 @@
 %define 	_glib2		2.32.0
 
 Name: 		%{gstreamer}
-Version: 	1.4.5
-Release: 	1
+Version: 	1.5.0.1
+Release: 	0.20150316.185135
 Summary: 	GStreamer streaming media framework runtime
 
 Group: 		Applications/Multimedia
diff --git a/libs/Makefile.in b/libs/Makefile.in
index b19c609..40f8eca 100644
--- a/libs/Makefile.in
+++ b/libs/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -213,6 +214,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -318,6 +323,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/libs/gst/Makefile.in b/libs/gst/Makefile.in
index 6f9e86f..aa83476 100644
--- a/libs/gst/Makefile.in
+++ b/libs/gst/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -212,6 +213,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -317,6 +322,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/libs/gst/base/Makefile.in b/libs/gst/base/Makefile.in
index 601edaf..183f860 100644
--- a/libs/gst/base/Makefile.in
+++ b/libs/gst/base/Makefile.in
@@ -95,6 +95,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -112,7 +113,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -260,6 +261,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -365,6 +370,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c
index fc1582b..7a1c760 100644
--- a/libs/gst/base/gstadapter.c
+++ b/libs/gst/base/gstadapter.c
@@ -132,6 +132,7 @@
   GSList *buflist_end;
   gsize size;
   gsize skip;
+  guint count;
 
   /* we keep state of assembled pieces */
   gpointer assembled_data;
@@ -233,6 +234,7 @@
   g_slist_free (adapter->buflist);
   adapter->buflist = NULL;
   adapter->buflist_end = NULL;
+  adapter->count = 0;
   adapter->size = 0;
   adapter->skip = 0;
   adapter->assembled_len = 0;
@@ -346,6 +348,7 @@
     adapter->buflist_end = g_slist_append (adapter->buflist_end, buf);
     adapter->buflist_end = g_slist_next (adapter->buflist_end);
   }
+  ++adapter->count;
 }
 
 #if 0
@@ -549,7 +552,7 @@
 }
 
 /**
- * gst_adapter_copy_bytes:
+ * gst_adapter_copy_bytes: (rename-to gst_adapter_copy)
  * @adapter: a #GstAdapter
  * @offset: the bytes offset in the adapter to start from
  * @size: the number of bytes to copy
@@ -561,8 +564,6 @@
  *
  * Returns: (transfer full): A new #GBytes structure containing the copied data.
  *
- * Rename to: gst_adapter_copy
- *
  * Since: 1.4
  */
 GBytes *
@@ -609,6 +610,7 @@
 
     gst_buffer_unref (cur);
     g = g_slist_delete_link (g, g);
+    --adapter->count;
 
     if (G_UNLIKELY (g == NULL)) {
       GST_LOG_OBJECT (adapter, "adapter empty now");
@@ -797,10 +799,11 @@
   }
 
   for (item = adapter->buflist; item && left > 0; item = item->next) {
-    gsize size;
+    gsize size, cur_size;
 
     cur = item->data;
-    size = MIN (gst_buffer_get_size (cur) - skip, left);
+    cur_size = gst_buffer_get_size (cur);
+    size = MIN (cur_size - skip, left);
 
     GST_LOG_OBJECT (adapter, "appending %" G_GSIZE_FORMAT " bytes"
         " via region copy", size);
@@ -926,7 +929,7 @@
 {
   GQueue queue = G_QUEUE_INIT;
   GstBuffer *cur;
-  gsize hsize, skip;
+  gsize hsize, skip, cur_size;
 
   g_return_val_if_fail (GST_IS_ADAPTER (adapter), NULL);
   g_return_val_if_fail (nbytes <= adapter->size, NULL);
@@ -936,7 +939,8 @@
   while (nbytes > 0) {
     cur = adapter->buflist->data;
     skip = adapter->skip;
-    hsize = MIN (nbytes, gst_buffer_get_size (cur) - skip);
+    cur_size = gst_buffer_get_size (cur);
+    hsize = MIN (nbytes, cur_size - skip);
 
     cur = gst_adapter_take_buffer (adapter, hsize);
 
@@ -948,6 +952,60 @@
 }
 
 /**
+ * gst_adapter_take_buffer_list:
+ * @adapter: a #GstAdapter
+ * @nbytes: the number of bytes to take
+ *
+ * Returns a #GstBufferList of buffers containing the first @nbytes bytes of
+ * the @adapter. The returned bytes will be flushed from the adapter.
+ * When the caller can deal with individual buffers, this function is more
+ * performant because no memory should be copied.
+ *
+ * Caller owns the returned list. Call gst_buffer_list_unref() to free
+ * the list after usage.
+ *
+ * Returns: (transfer full) (nullable): a #GstBufferList of buffers containing
+ *     the first @nbytes of the adapter, or %NULL if @nbytes bytes are not
+ *     available
+ *
+ * Since: 1.6
+ */
+GstBufferList *
+gst_adapter_take_buffer_list (GstAdapter * adapter, gsize nbytes)
+{
+  GstBufferList *buffer_list;
+  GstBuffer *cur;
+  gsize hsize, skip, cur_size;
+  guint n_bufs;
+
+  g_return_val_if_fail (GST_IS_ADAPTER (adapter), NULL);
+
+  if (nbytes > adapter->size)
+    return NULL;
+
+  GST_LOG_OBJECT (adapter, "taking %" G_GSIZE_FORMAT " bytes", nbytes);
+
+  /* try to create buffer list with sufficient size, so no resize is done later */
+  if (adapter->count < 64)
+    n_bufs = adapter->count;
+  else
+    n_bufs = (adapter->count * nbytes * 1.2 / adapter->size) + 1;
+
+  buffer_list = gst_buffer_list_new_sized (n_bufs);
+
+  while (nbytes > 0) {
+    cur = adapter->buflist->data;
+    skip = adapter->skip;
+    cur_size = gst_buffer_get_size (cur);
+    hsize = MIN (nbytes, cur_size - skip);
+
+    gst_buffer_list_add (buffer_list, gst_adapter_take_buffer (adapter, hsize));
+    nbytes -= hsize;
+  }
+  return buffer_list;
+}
+
+/**
  * gst_adapter_available:
  * @adapter: a #GstAdapter
  *
diff --git a/libs/gst/base/gstadapter.h b/libs/gst/base/gstadapter.h
index f82fbfb..3e93ca2 100644
--- a/libs/gst/base/gstadapter.h
+++ b/libs/gst/base/gstadapter.h
@@ -63,6 +63,7 @@
 GstBuffer*              gst_adapter_take_buffer         (GstAdapter *adapter, gsize nbytes);
 GList*                  gst_adapter_take_list           (GstAdapter *adapter, gsize nbytes);
 GstBuffer *             gst_adapter_take_buffer_fast    (GstAdapter *adapter, gsize nbytes);
+GstBufferList *         gst_adapter_take_buffer_list    (GstAdapter *adapter, gsize nbytes);
 gsize                   gst_adapter_available           (GstAdapter *adapter);
 gsize                   gst_adapter_available_fast      (GstAdapter *adapter);
 
diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index 57e78bb..435d2d1 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -262,6 +262,7 @@
   gboolean discont;
   gboolean flushing;
   gboolean drain;
+  gboolean saw_gaps;
 
   gint64 offset;
   gint64 sync_offset;
@@ -350,8 +351,14 @@
   GList *detect_buffers;
   guint detect_buffers_size;
 
+  /* True when no buffers have been received yet */
+  gboolean first_buffer;
+
   /* if TRUE, a STREAM_START event needs to be pushed */
   gboolean push_stream_start;
+
+  /* When we need to skip more data than we have currently */
+  guint skip;
 };
 
 typedef struct _GstBaseParseSeek
@@ -788,6 +795,7 @@
   parse->priv->min_frame_size = 1;
   parse->priv->discont = TRUE;
   parse->priv->flushing = FALSE;
+  parse->priv->saw_gaps = FALSE;
   parse->priv->offset = 0;
   parse->priv->sync_offset = 0;
   parse->priv->update_interval = -1;
@@ -837,6 +845,8 @@
   parse->priv->last_pts = GST_CLOCK_TIME_NONE;
   parse->priv->last_offset = 0;
 
+  parse->priv->skip = 0;
+
   g_list_foreach (parse->priv->pending_events, (GFunc) gst_mini_object_unref,
       NULL);
   g_list_free (parse->priv->pending_events);
@@ -856,6 +866,8 @@
 
   parse->priv->new_frame = TRUE;
 
+  parse->priv->first_buffer = TRUE;
+
   g_list_foreach (parse->priv->detect_buffers, (GFunc) gst_buffer_unref, NULL);
   g_list_free (parse->priv->detect_buffers);
   parse->priv->detect_buffers = NULL;
@@ -1122,9 +1134,21 @@
       parse->priv->prev_dts = GST_CLOCK_TIME_NONE;
       parse->priv->discont = TRUE;
       parse->priv->seen_keyframe = FALSE;
+      parse->priv->skip = 0;
       break;
     }
 
+    case GST_EVENT_SEGMENT_DONE:
+      /* need to drain now, rather than upon a new segment,
+       * since that would have SEGMENT_DONE come before potential
+       * delayed last part of the current segment */
+      GST_DEBUG_OBJECT (parse, "draining current segment");
+      if (parse->segment.rate > 0.0)
+        gst_base_parse_drain (parse);
+      else
+        gst_base_parse_finish_fragment (parse, FALSE);
+      break;
+
     case GST_EVENT_FLUSH_START:
       GST_OBJECT_LOCK (parse);
       parse->priv->flushing = TRUE;
@@ -1139,6 +1163,7 @@
       parse->priv->last_pts = GST_CLOCK_TIME_NONE;
       parse->priv->last_dts = GST_CLOCK_TIME_NONE;
       parse->priv->new_frame = TRUE;
+      parse->priv->skip = 0;
 
       forward_immediate = TRUE;
       break;
@@ -1150,14 +1175,15 @@
         gst_base_parse_finish_fragment (parse, TRUE);
 
       /* If we STILL have zero frames processed, fire an error */
-      if (parse->priv->framecount == 0) {
+      if (parse->priv->framecount == 0 && !parse->priv->saw_gaps) {
         GST_ELEMENT_ERROR (parse, STREAM, WRONG_TYPE,
             ("No valid frames found before end of stream"), (NULL));
       }
       /* newsegment and other serialized events before eos */
       gst_base_parse_push_pending_events (parse);
 
-      if (parse->priv->framecount < MIN_FRAMES_TO_POST_BITRATE) {
+      if (!parse->priv->saw_gaps
+          && parse->priv->framecount < MIN_FRAMES_TO_POST_BITRATE) {
         /* We've not posted bitrate tags yet - do so now */
         gst_base_parse_post_bitrates (parse, TRUE, TRUE, TRUE);
       }
@@ -1198,6 +1224,7 @@
       else
         gst_base_parse_finish_fragment (parse, TRUE);
       forward_immediate = TRUE;
+      parse->priv->saw_gaps = TRUE;
       break;
     }
     case GST_EVENT_TAG:
@@ -1229,10 +1256,8 @@
     if (!GST_EVENT_IS_SERIALIZED (event) || forward_immediate) {
       ret = gst_pad_push_event (parse->srcpad, event);
     } else {
-      // GST_VIDEO_DECODER_STREAM_LOCK (decoder);
       parse->priv->pending_events =
           g_list_prepend (parse->priv->pending_events, event);
-      // GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
       ret = TRUE;
     }
   }
@@ -1990,7 +2015,20 @@
           g_slist_prepend (parse->priv->buffers_head, outbuf);
       outbuf = NULL;
     } else {
-      gst_adapter_flush (parse->priv->adapter, *skip);
+      /* If we're asked to skip more than is available in the adapter,
+         we need to remember what we need to skip for next iteration */
+      gsize av = gst_adapter_available (parse->priv->adapter);
+      GST_DEBUG ("Asked to skip %u (%" G_GSIZE_FORMAT " available)", *skip, av);
+      if (av >= *skip) {
+        gst_adapter_flush (parse->priv->adapter, *skip);
+      } else {
+        GST_DEBUG
+            ("This is more than available, flushing %" G_GSIZE_FORMAT
+            ", storing %u to skip", av, (guint) (*skip - av));
+        parse->priv->skip = *skip - av;
+        gst_adapter_flush (parse->priv->adapter, av);
+        *skip = av;
+      }
     }
     if (!parse->priv->discont)
       parse->priv->sync_offset = parse->priv->offset;
@@ -2716,6 +2754,59 @@
 }
 
 static GstFlowReturn
+gst_base_parse_process_streamheader (GstBaseParse * parse)
+{
+  GstCaps *caps;
+  GstStructure *str;
+  const GValue *value;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (parse));
+  if (caps == NULL)
+    goto notfound;
+
+  str = gst_caps_get_structure (caps, 0);
+  value = gst_structure_get_value (str, "streamheader");
+  if (value == NULL)
+    goto notfound;
+
+  GST_DEBUG_OBJECT (parse, "Found streamheader field on input caps");
+
+  if (GST_VALUE_HOLDS_ARRAY (value)) {
+    gint i;
+    gsize len = gst_value_array_get_size (value);
+
+    for (i = 0; i < len; i++) {
+      GstBuffer *buffer =
+          gst_value_get_buffer (gst_value_array_get_value (value, i));
+      ret =
+          gst_base_parse_chain (GST_BASE_PARSE_SINK_PAD (parse),
+          GST_OBJECT_CAST (parse), gst_buffer_ref (buffer));
+    }
+
+  } else if (GST_VALUE_HOLDS_BUFFER (value)) {
+    GstBuffer *buffer = gst_value_get_buffer (value);
+    ret =
+        gst_base_parse_chain (GST_BASE_PARSE_SINK_PAD (parse),
+        GST_OBJECT_CAST (parse), gst_buffer_ref (buffer));
+  }
+
+  gst_caps_unref (caps);
+
+  return ret;
+
+notfound:
+  {
+    if (caps) {
+      gst_caps_unref (caps);
+    }
+
+    GST_DEBUG_OBJECT (parse, "No streamheader on caps");
+    return GST_FLOW_OK;
+  }
+}
+
+static GstFlowReturn
 gst_base_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 {
   GstBaseParseClass *bclass;
@@ -2731,6 +2822,44 @@
 
   parse = GST_BASE_PARSE (parent);
   bclass = GST_BASE_PARSE_GET_CLASS (parse);
+  GST_DEBUG_OBJECT (parent, "chain");
+
+  /* early out for speed, if we need to skip */
+  if (buffer && GST_BUFFER_IS_DISCONT (buffer))
+    parse->priv->skip = 0;
+  if (parse->priv->skip > 0) {
+    gsize bsize = gst_buffer_get_size (buffer);
+    GST_DEBUG ("Got %" G_GSIZE_FORMAT " buffer, need to skip %u", bsize,
+        parse->priv->skip);
+    if (parse->priv->skip >= bsize) {
+      parse->priv->skip -= bsize;
+      GST_DEBUG ("All the buffer is skipped");
+      parse->priv->offset += bsize;
+      parse->priv->sync_offset = parse->priv->offset;
+      return GST_FLOW_OK;
+    }
+    buffer = gst_buffer_make_writable (buffer);
+    gst_buffer_resize (buffer, parse->priv->skip, bsize - parse->priv->skip);
+    parse->priv->offset += parse->priv->skip;
+    GST_DEBUG ("Done skipping, we have %u left on this buffer",
+        (unsigned) (bsize - parse->priv->skip));
+    parse->priv->skip = 0;
+    parse->priv->discont = TRUE;
+  }
+
+  if (G_UNLIKELY (parse->priv->first_buffer)) {
+    parse->priv->first_buffer = FALSE;
+    if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_HEADER)) {
+      /* this stream has no header buffers, check if we just prepend the
+       * streamheader from caps to the stream */
+      GST_DEBUG_OBJECT (parse, "Looking for streamheader field on caps to "
+          "prepend to the stream");
+      gst_base_parse_process_streamheader (parse);
+    } else {
+      GST_DEBUG_OBJECT (parse, "Stream has header buffers, not prepending "
+          "streamheader from caps");
+    }
+  }
 
   if (parse->priv->detecting) {
     GstBuffer *detect_buf;
@@ -3124,6 +3253,12 @@
     if (ret != GST_FLOW_OK)
       break;
 
+    /* If a large amount of data was requested to be skipped, _handle_buffer
+       might have set the priv->skip flag to an extra amount on top of skip.
+       In pull mode, we can just pull from the new offset directly. */
+    parse->priv->offset += parse->priv->skip;
+    parse->priv->skip = 0;
+
     /* something flushed means something happened,
      * and we should bail out of this loop so as not to occupy
      * the task thread indefinitely */
@@ -3635,6 +3770,9 @@
 gst_base_parse_set_latency (GstBaseParse * parse, GstClockTime min_latency,
     GstClockTime max_latency)
 {
+  g_return_if_fail (min_latency != GST_CLOCK_TIME_NONE);
+  g_return_if_fail (min_latency <= max_latency);
+
   GST_OBJECT_LOCK (parse);
   parse->priv->min_latency = min_latency;
   parse->priv->max_latency = max_latency;
@@ -3804,9 +3942,10 @@
 
         GST_OBJECT_LOCK (parse);
         /* add our latency */
-        if (min_latency != -1)
-          min_latency += parse->priv->min_latency;
-        if (max_latency != -1)
+        min_latency += parse->priv->min_latency;
+        if (max_latency == -1 || parse->priv->max_latency == -1)
+          max_latency = -1;
+        else
           max_latency += parse->priv->max_latency;
         GST_OBJECT_UNLOCK (parse);
 
diff --git a/libs/gst/base/gstbaseparse.h b/libs/gst/base/gstbaseparse.h
index f84d973..94dac21 100644
--- a/libs/gst/base/gstbaseparse.h
+++ b/libs/gst/base/gstbaseparse.h
@@ -182,8 +182,10 @@
  * @stop:           Optional.
  *                  Called when the element stops processing.
  *                  Allows closing external resources.
- * @set_sink_caps:  allows the subclass to be notified of the actual caps set.
- * @get_sink_caps:  allows the subclass to do its own sink get caps if needed.
+ * @set_sink_caps:  Optional.
+ *                  Allows the subclass to be notified of the actual caps set.
+ * @get_sink_caps:  Optional.
+ *                  Allows the subclass to do its own sink get caps if needed.
  * @handle_frame:   Parses the input data into valid frames as defined by subclass
  *                  which should be passed to gst_base_parse_finish_frame().
  *                  The frame's input buffer is guaranteed writable,
@@ -222,8 +224,7 @@
  *                   parent to let the default handler run (Since 1.2)
  *
  * Subclasses can override any of the available virtual methods or not, as
- * needed. At minimum @check_valid_frame and @parse_frame needs to be
- * overridden.
+ * needed. At minimum @handle_frame needs to be overridden.
  */
 struct _GstBaseParseClass {
   GstElementClass parent_class;
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
index de295a5..a505695 100644
--- a/libs/gst/base/gstbasesink.c
+++ b/libs/gst/base/gstbasesink.c
@@ -492,7 +492,7 @@
    *
    * The amount of bytes to pull when operating in pull mode.
    */
-  /* FIXME 0.11: blocksize property should be int, otherwise min>max.. */
+  /* FIXME 2.0: blocksize property should be int, otherwise min>max.. */
   g_object_class_install_property (gobject_class, PROP_BLOCKSIZE,
       g_param_spec_uint ("blocksize", "Block size",
           "Size in bytes to pull per buffer (0 = default)", 0, G_MAXUINT,
@@ -1086,8 +1086,7 @@
       }
       if (l) {
         /* we need to add the render delay if we are live */
-        if (min != -1)
-          min += render_delay;
+        min += render_delay;
         if (max != -1)
           max += render_delay;
       }
@@ -1192,7 +1191,7 @@
  * Set the number of bytes that the sink will pull when it is operating in pull
  * mode.
  */
-/* FIXME 0.11: blocksize property should be int, otherwise min>max.. */
+/* FIXME 2.0: blocksize property should be int, otherwise min>max.. */
 void
 gst_base_sink_set_blocksize (GstBaseSink * sink, guint blocksize)
 {
@@ -1213,7 +1212,7 @@
  *
  * Returns: the number of bytes @sink will pull in pull mode.
  */
-/* FIXME 0.11: blocksize property should be int, otherwise min>max.. */
+/* FIXME 2.0: blocksize property should be int, otherwise min>max.. */
 guint
 gst_base_sink_get_blocksize (GstBaseSink * sink)
 {
@@ -3069,19 +3068,28 @@
     }
     case GST_EVENT_CAPS:
     {
-      GstCaps *caps;
+      GstCaps *caps, *current_caps;
 
       GST_DEBUG_OBJECT (basesink, "caps %p", event);
 
       gst_event_parse_caps (event, &caps);
-      if (bclass->set_caps)
-        result = bclass->set_caps (basesink, caps);
+      current_caps = gst_pad_get_current_caps (GST_BASE_SINK_PAD (basesink));
 
-      if (result) {
-        GST_OBJECT_LOCK (basesink);
-        gst_caps_replace (&basesink->priv->caps, caps);
-        GST_OBJECT_UNLOCK (basesink);
+      if (current_caps && gst_caps_is_equal (current_caps, caps)) {
+        GST_DEBUG_OBJECT (basesink,
+            "New caps equal to old ones: %" GST_PTR_FORMAT, caps);
+      } else {
+        if (bclass->set_caps)
+          result = bclass->set_caps (basesink, caps);
+
+        if (result) {
+          GST_OBJECT_LOCK (basesink);
+          gst_caps_replace (&basesink->priv->caps, caps);
+          GST_OBJECT_UNLOCK (basesink);
+        }
       }
+      if (current_caps)
+        gst_caps_unref (current_caps);
       break;
     }
     case GST_EVENT_SEGMENT:
@@ -3288,7 +3296,12 @@
     goto was_eos;
 
   if (is_list) {
-    sync_buf = gst_buffer_list_get (GST_BUFFER_LIST_CAST (obj), 0);
+    GstBufferList *buffer_list = GST_BUFFER_LIST_CAST (obj);
+
+    if (gst_buffer_list_length (buffer_list) == 0)
+      goto empty_list;
+
+    sync_buf = gst_buffer_list_get (buffer_list, 0);
     g_assert (NULL != sync_buf);
   } else {
     sync_buf = GST_BUFFER_CAST (obj);
@@ -3470,6 +3483,12 @@
     gst_mini_object_unref (GST_MINI_OBJECT_CAST (obj));
     return GST_FLOW_EOS;
   }
+empty_list:
+  {
+    GST_DEBUG_OBJECT (basesink, "buffer list with no buffers");
+    gst_mini_object_unref (GST_MINI_OBJECT_CAST (obj));
+    return GST_FLOW_OK;
+  }
 out_of_segment:
   {
     GST_DEBUG_OBJECT (basesink, "dropping buffer, out of clipping segment");
@@ -4425,7 +4444,7 @@
 
   /* assume we will use the clock for getting the current position */
   with_clock = TRUE;
-  if (basesink->sync == FALSE)
+  if (!basesink->sync)
     with_clock = FALSE;
 
   /* and we need a clock */
@@ -4797,6 +4816,18 @@
   return res;
 }
 
+static void
+gst_base_sink_drain (GstBaseSink * basesink)
+{
+  GstBuffer *old;
+
+  GST_OBJECT_LOCK (basesink);
+  if ((old = basesink->priv->last_buffer))
+    basesink->priv->last_buffer = gst_buffer_copy_deep (old);
+  GST_OBJECT_UNLOCK (basesink);
+  if (old)
+    gst_buffer_unref (old);
+}
 
 static gboolean
 gst_base_sink_default_query (GstBaseSink * basesink, GstQuery * query)
@@ -4809,6 +4840,7 @@
   switch (GST_QUERY_TYPE (query)) {
     case GST_QUERY_ALLOCATION:
     {
+      gst_base_sink_drain (basesink);
       if (bclass->propose_allocation)
         res = bclass->propose_allocation (basesink, query);
       else
@@ -4845,17 +4877,15 @@
     }
     case GST_QUERY_DRAIN:
     {
-      GstBuffer *old;
-
-      GST_OBJECT_LOCK (basesink);
-      if ((old = basesink->priv->last_buffer))
-        basesink->priv->last_buffer = gst_buffer_copy (old);
-      GST_OBJECT_UNLOCK (basesink);
-      if (old)
-        gst_buffer_unref (old);
+      gst_base_sink_drain (basesink);
       res = TRUE;
       break;
     }
+    case GST_QUERY_POSITION:
+    {
+      res = default_element_query (GST_ELEMENT (basesink), query);
+      break;
+    }
     default:
       res =
           gst_pad_query_default (basesink->sinkpad, GST_OBJECT_CAST (basesink),
@@ -5007,11 +5037,6 @@
       if (bclass->unlock_stop)
         bclass->unlock_stop (basesink);
 
-      /* we need preroll again and we set the flag before unlocking the clockid
-       * because if the clockid is unlocked before a current buffer expired, we
-       * can use that buffer to preroll with */
-      basesink->need_preroll = TRUE;
-
       if (basesink->clock_id) {
         GST_DEBUG_OBJECT (basesink, "unschedule clock");
         gst_clock_id_unschedule (basesink->clock_id);
@@ -5022,6 +5047,7 @@
       if (!gst_base_sink_needs_preroll (basesink)) {
         GST_DEBUG_OBJECT (basesink, "PLAYING to PAUSED, we are prerolled");
         basesink->playing_async = FALSE;
+        basesink->need_preroll = FALSE;
       } else {
         if (GST_STATE_TARGET (GST_ELEMENT (basesink)) <= GST_STATE_READY) {
           GST_DEBUG_OBJECT (basesink, "element is <= READY");
@@ -5030,6 +5056,7 @@
           GST_DEBUG_OBJECT (basesink,
               "PLAYING to PAUSED, we are not prerolled");
           basesink->playing_async = TRUE;
+          basesink->need_preroll = TRUE;
           priv->commited = FALSE;
           priv->call_preroll = TRUE;
           if (priv->async_enabled) {
diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c
index b157a05..211a715 100644
--- a/libs/gst/base/gstbasesrc.c
+++ b/libs/gst/base/gstbasesrc.c
@@ -695,9 +695,9 @@
  * @max_latency: (out) (allow-none): the max latency of the source
  *
  * Query the source for the latency parameters. @live will be %TRUE when @src is
- * configured as a live source. @min_latency will be set to the difference
- * between the running time and the timestamp of the first buffer.
- * @max_latency is always the undefined value of -1.
+ * configured as a live source. @min_latency and @max_latency will be set
+ * to the difference between the running time and the timestamp of the first
+ * buffer.
  *
  * This function is mostly used by subclasses.
  *
@@ -726,11 +726,11 @@
   if (min_latency)
     *min_latency = min;
   if (max_latency)
-    *max_latency = -1;
+    *max_latency = min;
 
   GST_LOG_OBJECT (src, "latency: live %d, min %" GST_TIME_FORMAT
       ", max %" GST_TIME_FORMAT, src->is_live, GST_TIME_ARGS (min),
-      GST_TIME_ARGS (-1));
+      GST_TIME_ARGS (min));
   GST_OBJECT_UNLOCK (src);
 
   return TRUE;
@@ -895,7 +895,7 @@
 /**
  * gst_base_src_set_caps:
  * @src: a #GstBaseSrc
- * @caps: a #GstCaps
+ * @caps: (transfer none): a #GstCaps
  *
  * Set new caps on the basesrc source pad.
  *
@@ -906,16 +906,27 @@
 {
   GstBaseSrcClass *bclass;
   gboolean res = TRUE;
+  GstCaps *current_caps;
 
   bclass = GST_BASE_SRC_GET_CLASS (src);
 
   gst_base_src_send_stream_start (src);
 
-  if (bclass->set_caps)
-    res = bclass->set_caps (src, caps);
+  current_caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (src));
+  if (current_caps && gst_caps_is_equal (current_caps, caps)) {
+    GST_DEBUG_OBJECT (src, "New caps equal to old ones: %" GST_PTR_FORMAT,
+        caps);
+    res = TRUE;
+  } else {
+    if (bclass->set_caps)
+      res = bclass->set_caps (src, caps);
 
-  if (res)
-    res = gst_pad_push_event (src->srcpad, gst_event_new_caps (caps));
+    if (res)
+      res = gst_pad_push_event (src->srcpad, gst_event_new_caps (caps));
+  }
+
+  if (current_caps)
+    gst_caps_unref (current_caps);
 
   return res;
 }
@@ -1103,7 +1114,7 @@
             gst_base_src_seekable (src), 0, duration);
         res = TRUE;
       } else {
-        /* FIXME 0.11: return TRUE + seekable=FALSE for SEEKING query here */
+        /* FIXME 2.0: return TRUE + seekable=FALSE for SEEKING query here */
         /* Don't reply to the query to make up for demuxers which don't
          * handle the SEEKING query yet. Players like Totem will fall back
          * to the duration when the SEEKING query isn't answered. */
@@ -2310,20 +2321,18 @@
 {
   guint64 size, maxsize;
   GstBaseSrcClass *bclass;
-  GstFormat format;
   gint64 stop;
 
+  /* only operate if we are working with bytes */
+  if (src->segment.format != GST_FORMAT_BYTES)
+    return TRUE;
+
   bclass = GST_BASE_SRC_GET_CLASS (src);
 
-  format = src->segment.format;
   stop = src->segment.stop;
   /* get total file size */
   size = src->segment.duration;
 
-  /* only operate if we are working with bytes */
-  if (format != GST_FORMAT_BYTES)
-    return TRUE;
-
   /* when not doing automatic EOS, just use the stop position. We don't use
    * the size to check for EOS */
   if (!g_atomic_int_get (&src->priv->automatic_eos))
@@ -2379,6 +2388,7 @@
   /* ERRORS */
 unexpected_length:
   {
+    GST_WARNING_OBJECT (src, "processing at or past EOS");
     return FALSE;
   }
 }
@@ -3068,7 +3078,7 @@
       /* If change are not acceptable, fallback to generic pool */
       if (!gst_buffer_pool_config_validate_params (config, outcaps, size, min,
               max)) {
-        GST_DEBUG_OBJECT (basesrc, "unsuported pool, making new pool");
+        GST_DEBUG_OBJECT (basesrc, "unsupported pool, making new pool");
 
         gst_object_unref (pool);
         pool = gst_buffer_pool_new ();
diff --git a/libs/gst/base/gstbasesrc.h b/libs/gst/base/gstbasesrc.h
index 75de438..4ddfda9 100644
--- a/libs/gst/base/gstbasesrc.h
+++ b/libs/gst/base/gstbasesrc.h
@@ -127,7 +127,8 @@
  * @get_times: Given a buffer, return the start and stop time when it
  *    should be pushed out. The base class will sync on the clock using
  *    these times.
- * @get_size: Return the total size of the resource, in the configured format.
+ * @get_size: Return the total size of the resource, in the format set by
+ *     gst_base_src_set_format().
  * @is_seekable: Check if the source can seek
  * @prepare_seek_segment: Prepare the #GstSegment that will be passed to the
  *   #GstBaseSrcClass.do_seek() vmethod for executing a seek
@@ -190,7 +191,8 @@
   void          (*get_times)    (GstBaseSrc *src, GstBuffer *buffer,
                                  GstClockTime *start, GstClockTime *end);
 
-  /* get the total size of the resource in bytes */
+  /* get the total size of the resource in the format set by
+   * gst_base_src_set_format() */
   gboolean      (*get_size)     (GstBaseSrc *src, guint64 *size);
 
   /* check if the resource is seekable */
diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c
index c20a613..073d08c 100644
--- a/libs/gst/base/gstbasetransform.c
+++ b/libs/gst/base/gstbasetransform.c
@@ -677,7 +677,7 @@
     GstCaps * filter)
 {
   GstPad *otherpad;
-  GstCaps *peercaps, *caps, *temp, *peerfilter = NULL;
+  GstCaps *peercaps = NULL, *caps, *temp, *peerfilter = NULL;
   GstCaps *templ, *otempl;
 
   otherpad = (pad == trans->srcpad) ? trans->sinkpad : trans->srcpad;
@@ -701,14 +701,26 @@
     GST_DEBUG_OBJECT (pad, "transformed  %" GST_PTR_FORMAT, peerfilter);
     gst_caps_unref (temp);
 
-    /* and filter against the template of the other pad */
-    GST_DEBUG_OBJECT (pad, "our template  %" GST_PTR_FORMAT, otempl);
-    /* We keep the caps sorted like the returned caps */
-    temp =
-        gst_caps_intersect_full (peerfilter, otempl, GST_CAPS_INTERSECT_FIRST);
-    GST_DEBUG_OBJECT (pad, "intersected %" GST_PTR_FORMAT, temp);
-    gst_caps_unref (peerfilter);
-    peerfilter = temp;
+    if (!gst_caps_is_empty (peerfilter)) {
+      /* and filter against the template of the other pad */
+      GST_DEBUG_OBJECT (pad, "our template  %" GST_PTR_FORMAT, otempl);
+      /* We keep the caps sorted like the returned caps */
+      temp =
+          gst_caps_intersect_full (peerfilter, otempl,
+          GST_CAPS_INTERSECT_FIRST);
+      GST_DEBUG_OBJECT (pad, "intersected %" GST_PTR_FORMAT, temp);
+      gst_caps_unref (peerfilter);
+      peerfilter = temp;
+    }
+  }
+
+  GST_DEBUG_OBJECT (pad, "peer filter caps %" GST_PTR_FORMAT, peerfilter);
+
+  if (peerfilter && gst_caps_is_empty (peerfilter)) {
+    GST_DEBUG_OBJECT (pad, "peer filter caps are empty");
+    caps = peerfilter;
+    peerfilter = NULL;
+    goto done;
   }
 
   /* query the peer with the transformed filter */
@@ -733,7 +745,7 @@
       GST_PAD_DIRECTION (otherpad), temp, filter);
   GST_DEBUG_OBJECT (pad, "transformed  %" GST_PTR_FORMAT, caps);
   gst_caps_unref (temp);
-  if (caps == NULL)
+  if (caps == NULL || gst_caps_is_empty (caps))
     goto done;
 
   if (peercaps) {
@@ -1109,7 +1121,7 @@
 
   /* The caps we can actually output is the intersection of the transformed
    * caps with the pad template for the pad */
-  if (othercaps) {
+  if (othercaps && !gst_caps_is_empty (othercaps)) {
     GstCaps *intersect, *templ_caps;
 
     templ_caps = gst_pad_get_pad_template_caps (otherpad);
@@ -1342,7 +1354,7 @@
     GstCaps * incaps)
 {
   GstBaseTransformPrivate *priv = trans->priv;
-  GstCaps *outcaps, *prevcaps;
+  GstCaps *outcaps, *prev_incaps = NULL, *prev_outcaps = NULL;
   gboolean ret = TRUE;
 
   GST_DEBUG_OBJECT (pad, "have new caps %p %" GST_PTR_FORMAT, incaps, incaps);
@@ -1361,18 +1373,23 @@
     outcaps = gst_caps_ref (incaps);
   }
 
-  /* call configure now */
-  if (!(ret = gst_base_transform_configure_caps (trans, incaps, outcaps)))
-    goto failed_configure;
+  prev_incaps = gst_pad_get_current_caps (trans->sinkpad);
+  prev_outcaps = gst_pad_get_current_caps (trans->srcpad);
+  if (prev_incaps && prev_outcaps && gst_caps_is_equal (prev_incaps, incaps)
+      && gst_caps_is_equal (prev_outcaps, outcaps)) {
+    GST_DEBUG_OBJECT (trans,
+        "New caps equal to old ones: %" GST_PTR_FORMAT " -> %" GST_PTR_FORMAT,
+        incaps, outcaps);
+    ret = TRUE;
+  } else {
+    /* call configure now */
+    if (!(ret = gst_base_transform_configure_caps (trans, incaps, outcaps)))
+      goto failed_configure;
 
-  prevcaps = gst_pad_get_current_caps (trans->srcpad);
-
-  if (!prevcaps || !gst_caps_is_equal (outcaps, prevcaps))
-    /* let downstream know about our caps */
-    ret = gst_pad_set_caps (trans->srcpad, outcaps);
-
-  if (prevcaps)
-    gst_caps_unref (prevcaps);
+    if (!prev_outcaps || !gst_caps_is_equal (outcaps, prev_outcaps))
+      /* let downstream know about our caps */
+      ret = gst_pad_set_caps (trans->srcpad, outcaps);
+  }
 
   if (ret) {
     /* try to get a pool when needed */
@@ -1382,6 +1399,10 @@
 done:
   if (outcaps)
     gst_caps_unref (outcaps);
+  if (prev_incaps)
+    gst_caps_unref (prev_incaps);
+  if (prev_outcaps)
+    gst_caps_unref (prev_outcaps);
 
   GST_OBJECT_LOCK (trans);
   priv->negotiated = ret;
@@ -2455,7 +2476,7 @@
   bclass = GST_BASE_TRANSFORM_GET_CLASS (trans);
 
   GST_OBJECT_LOCK (trans);
-  if (passthrough == FALSE) {
+  if (!passthrough) {
     if (bclass->transform_ip || bclass->transform)
       trans->priv->passthrough = FALSE;
   } else {
diff --git a/libs/gst/base/gstbytereader.c b/libs/gst/base/gstbytereader.c
index b73a679..75dfd08 100644
--- a/libs/gst/base/gstbytereader.c
+++ b/libs/gst/base/gstbytereader.c
@@ -1,7 +1,7 @@
 /* GStreamer byte reader
  *
  * Copyright (C) 2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>.
- * Copyright (C) 2009 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2009,2014 Tim-Philipp Müller <tim centricular net>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -100,6 +100,56 @@
 }
 
 /**
+ * gst_byte_reader_peek_sub_reader: (skip)
+ * @reader: an existing and initialized #GstByteReader instance
+ * @sub_reader: a #GstByteReader instance to initialize as sub-reader
+ * @size: size of @sub_reader in bytes
+ *
+ * Initializes a #GstByteReader sub-reader instance to contain @size bytes of
+ * data from the current position of @reader. This is useful to read chunked
+ * formats and make sure that one doesn't read beyond the size of the sub-chunk.
+ *
+ * Unlike gst_byte_reader_get_sub_reader(), this function does not modify the
+ * current position of @reader.
+ *
+ * Returns: FALSE on error or if @reader does not contain @size more bytes from
+ *     the current position, and otherwise TRUE
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_byte_reader_peek_sub_reader (GstByteReader * reader,
+    GstByteReader * sub_reader, guint size)
+{
+  return _gst_byte_reader_peek_sub_reader_inline (reader, sub_reader, size);
+}
+
+/**
+ * gst_byte_reader_get_sub_reader: (skip)
+ * @reader: an existing and initialized #GstByteReader instance
+ * @sub_reader: a #GstByteReader instance to initialize as sub-reader
+ * @size: size of @sub_reader in bytes
+ *
+ * Initializes a #GstByteReader sub-reader instance to contain @size bytes of
+ * data from the current position of @reader. This is useful to read chunked
+ * formats and make sure that one doesn't read beyond the size of the sub-chunk.
+ *
+ * Unlike gst_byte_reader_peek_sub_reader(), this function also modifies the
+ * position of @reader and moves it forward by @size bytes.
+ *
+ * Returns: FALSE on error or if @reader does not contain @size more bytes from
+ *     the current position, and otherwise TRUE
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_byte_reader_get_sub_reader (GstByteReader * reader,
+    GstByteReader * sub_reader, guint size)
+{
+  return _gst_byte_reader_get_sub_reader_inline (reader, sub_reader, size);
+}
+
+/**
  * gst_byte_reader_set_pos:
  * @reader: a #GstByteReader instance
  * @pos: The new position in bytes
@@ -794,6 +844,55 @@
   return -1;
 }
 
+static inline guint
+_masked_scan_uint32_peek (const GstByteReader * reader,
+    guint32 mask, guint32 pattern, guint offset, guint size, guint32 * value)
+{
+  const guint8 *data;
+  guint32 state;
+  guint i;
+
+  g_return_val_if_fail (size > 0, -1);
+  g_return_val_if_fail ((guint64) offset + size <= reader->size - reader->byte,
+      -1);
+
+  /* we can't find the pattern with less than 4 bytes */
+  if (G_UNLIKELY (size < 4))
+    return -1;
+
+  data = reader->data + reader->byte + offset;
+
+  /* Handle special case found in MPEG and H264 */
+  if ((pattern == 0x00000100) && (mask == 0xffffff00)) {
+    guint ret = _scan_for_start_code (data, offset, size);
+    if (G_UNLIKELY (value))
+      *value = (1 << 8) | data[ret + 3];
+    return ret;
+  }
+
+  /* set the state to something that does not match */
+  state = ~pattern;
+
+  /* now find data */
+  for (i = 0; i < size; i++) {
+    /* throw away one byte and move in the next byte */
+    state = ((state << 8) | data[i]);
+    if (G_UNLIKELY ((state & mask) == pattern)) {
+      /* we have a match but we need to have skipped at
+       * least 4 bytes to fill the state. */
+      if (G_LIKELY (i >= 3)) {
+        if (value)
+          *value = state;
+        return offset + i - 3;
+      }
+    }
+  }
+
+  /* nothing found */
+  return -1;
+}
+
+
 /**
  * gst_byte_reader_masked_scan_uint32:
  * @reader: a #GstByteReader
@@ -840,41 +939,39 @@
 gst_byte_reader_masked_scan_uint32 (const GstByteReader * reader, guint32 mask,
     guint32 pattern, guint offset, guint size)
 {
-  const guint8 *data;
-  guint32 state;
-  guint i;
+  return _masked_scan_uint32_peek (reader, mask, pattern, offset, size, NULL);
+}
 
-  g_return_val_if_fail (size > 0, -1);
-  g_return_val_if_fail ((guint64) offset + size <= reader->size - reader->byte,
-      -1);
-
-  /* we can't find the pattern with less than 4 bytes */
-  if (G_UNLIKELY (size < 4))
-    return -1;
-
-  data = reader->data + reader->byte + offset;
-
-  /* Handle special case found in MPEG and H264 */
-  if ((pattern == 0x00000100) && (mask == 0xffffff00))
-    return _scan_for_start_code (data, offset, size);
-
-  /* set the state to something that does not match */
-  state = ~pattern;
-
-  /* now find data */
-  for (i = 0; i < size; i++) {
-    /* throw away one byte and move in the next byte */
-    state = ((state << 8) | data[i]);
-    if (G_UNLIKELY ((state & mask) == pattern)) {
-      /* we have a match but we need to have skipped at
-       * least 4 bytes to fill the state. */
-      if (G_LIKELY (i >= 3))
-        return offset + i - 3;
-    }
-  }
-
-  /* nothing found */
-  return -1;
+/**
+ * gst_byte_reader_masked_scan_uint32_peek:
+ * @reader: a #GstByteReader
+ * @mask: mask to apply to data before matching against @pattern
+ * @pattern: pattern to match (after mask is applied)
+ * @offset: offset from which to start scanning, relative to the current
+ *     position
+ * @size: number of bytes to scan from offset
+ * @value: pointer to uint32 to return matching data
+ *
+ * Scan for pattern @pattern with applied mask @mask in the byte reader data,
+ * starting from offset @offset relative to the current position.
+ *
+ * The bytes in @pattern and @mask are interpreted left-to-right, regardless
+ * of endianness.  All four bytes of the pattern must be present in the
+ * byte reader data for it to match, even if the first or last bytes are masked
+ * out.
+ *
+ * It is an error to call this function without making sure that there is
+ * enough data (offset+size bytes) in the byte reader.
+ *
+ * Returns: offset of the first match, or -1 if no match was found.
+ *
+ * Since: 1.6
+ */
+guint
+gst_byte_reader_masked_scan_uint32_peek (const GstByteReader * reader,
+    guint32 mask, guint32 pattern, guint offset, guint size, guint32 * value)
+{
+  return _masked_scan_uint32_peek (reader, mask, pattern, offset, size, value);
 }
 
 #define GST_BYTE_READER_SCAN_STRING(bits) \
diff --git a/libs/gst/base/gstbytereader.h b/libs/gst/base/gstbytereader.h
index 8745ef6..dd66011 100644
--- a/libs/gst/base/gstbytereader.h
+++ b/libs/gst/base/gstbytereader.h
@@ -52,6 +52,14 @@
 
 void            gst_byte_reader_init            (GstByteReader *reader, const guint8 *data, guint size);
 
+gboolean        gst_byte_reader_peek_sub_reader (GstByteReader * reader,
+                                                 GstByteReader * sub_reader,
+                                                 guint           size);
+
+gboolean        gst_byte_reader_get_sub_reader  (GstByteReader * reader,
+                                                 GstByteReader * sub_reader,
+                                                 guint           size);
+
 gboolean        gst_byte_reader_set_pos         (GstByteReader *reader, guint pos);
 guint           gst_byte_reader_get_pos         (const GstByteReader *reader);
 
@@ -141,6 +149,12 @@
                                                     guint32               pattern,
                                                     guint                 offset,
                                                     guint                 size);
+guint           gst_byte_reader_masked_scan_uint32_peek (const GstByteReader * reader,
+                                                         guint32 mask,
+                                                         guint32 pattern,
+                                                         guint offset,
+                                                         guint size,
+                                                         guint32 * value);
 
 /**
  * GST_BYTE_READER_INIT:
@@ -450,12 +464,38 @@
 }
 
 static inline gboolean
+_gst_byte_reader_peek_sub_reader_inline (GstByteReader * reader,
+    GstByteReader * sub_reader, guint size)
+{
+  g_return_val_if_fail (reader != NULL, FALSE);
+  g_return_val_if_fail (sub_reader != NULL, FALSE);
+
+  if (_gst_byte_reader_get_remaining_unchecked (reader) < size)
+    return FALSE;
+
+  sub_reader->data = reader->data + reader->byte;
+  sub_reader->byte = 0;
+  sub_reader->size = size;
+  return TRUE;
+}
+
+static inline gboolean
+_gst_byte_reader_get_sub_reader_inline (GstByteReader * reader,
+    GstByteReader * sub_reader, guint size)
+{
+  if (!_gst_byte_reader_peek_sub_reader_inline (reader, sub_reader, size))
+    return FALSE;
+  gst_byte_reader_skip_unchecked (reader, size);
+  return TRUE;
+}
+
+static inline gboolean
 _gst_byte_reader_dup_data_inline (GstByteReader * reader, guint size, guint8 ** val)
 {
   g_return_val_if_fail (reader != NULL, FALSE);
   g_return_val_if_fail (val != NULL, FALSE);
 
-  if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size))
+  if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_unchecked (reader) < size))
     return FALSE;
 
   *val = gst_byte_reader_dup_data_unchecked (reader, size);
@@ -468,7 +508,7 @@
   g_return_val_if_fail (reader != NULL, FALSE);
   g_return_val_if_fail (val != NULL, FALSE);
 
-  if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size))
+  if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_unchecked (reader) < size))
     return FALSE;
 
   *val = gst_byte_reader_get_data_unchecked (reader, size);
@@ -481,7 +521,7 @@
   g_return_val_if_fail (reader != NULL, FALSE);
   g_return_val_if_fail (val != NULL, FALSE);
 
-  if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size))
+  if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_unchecked (reader) < size))
     return FALSE;
 
   *val = gst_byte_reader_peek_data_unchecked (reader);
diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c
index 992446b..8866790 100644
--- a/libs/gst/base/gstcollectpads.c
+++ b/libs/gst/base/gstcollectpads.c
@@ -939,7 +939,7 @@
   if ((result = data->buffer))
     gst_buffer_ref (result);
 
-  GST_DEBUG_OBJECT (pads, "Peeking at pad %s:%s: buffer=%p",
+  GST_DEBUG_OBJECT (pads, "Peeking at pad %s:%s: buffer=%" GST_PTR_FORMAT,
       GST_DEBUG_PAD_NAME (data->pad), result);
 
   return result;
@@ -978,7 +978,7 @@
 
   GST_COLLECT_PADS_EVT_BROADCAST (pads);
 
-  GST_DEBUG_OBJECT (pads, "Pop buffer on pad %s:%s: buffer=%p",
+  GST_DEBUG_OBJECT (pads, "Pop buffer on pad %s:%s: buffer=%" GST_PTR_FORMAT,
       GST_DEBUG_PAD_NAME (data->pad), result);
 
   return result;
@@ -1131,7 +1131,7 @@
 gst_collect_pads_read_buffer (GstCollectPads * pads, GstCollectData * data,
     guint size)
 {
-  guint readsize;
+  guint readsize, buf_size;
   GstBuffer *buffer;
 
   g_return_val_if_fail (pads != NULL, NULL);
@@ -1142,7 +1142,8 @@
   if ((buffer = data->buffer) == NULL)
     return NULL;
 
-  readsize = MIN (size, gst_buffer_get_size (buffer) - data->pos);
+  buf_size = gst_buffer_get_size (buffer);
+  readsize = MIN (size, buf_size - data->pos);
 
   return gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, data->pos,
       readsize);
@@ -1315,7 +1316,7 @@
         pads->priv->numpads, GST_DEBUG_FUNCPTR_NAME (func));
 
     if (G_UNLIKELY (g_atomic_int_compare_and_exchange (&pads->priv->seeking,
-                TRUE, FALSE) == TRUE)) {
+                TRUE, FALSE))) {
       GST_INFO_OBJECT (pads, "finished seeking");
     }
     do {
@@ -1333,7 +1334,7 @@
           GST_DEBUG_FUNCPTR_NAME (func));
 
       if (G_UNLIKELY (g_atomic_int_compare_and_exchange (&pads->priv->seeking,
-                  TRUE, FALSE) == TRUE)) {
+                  TRUE, FALSE))) {
         GST_INFO_OBJECT (pads, "finished seeking");
       }
       flow_ret = func (pads, user_data);
@@ -1664,8 +1665,8 @@
     {
       if (g_atomic_int_get (&pads->priv->seeking)) {
         /* drop all but the first FLUSH_STARTs when seeking */
-        if (g_atomic_int_compare_and_exchange (&pads->priv->pending_flush_start,
-                TRUE, FALSE) == FALSE)
+        if (!g_atomic_int_compare_and_exchange (&pads->
+                priv->pending_flush_start, TRUE, FALSE))
           goto eat;
 
         /* unblock collect pads */
diff --git a/libs/gst/base/gstdataqueue.c b/libs/gst/base/gstdataqueue.c
index 6f61062..2f9c16a 100644
--- a/libs/gst/base/gstdataqueue.c
+++ b/libs/gst/base/gstdataqueue.c
@@ -217,9 +217,10 @@
  * @checkdata: a #gpointer that will be passed to the @checkfull, @fullcallback,
  *   and @emptycallback callbacks.
  *
- * Creates a new #GstDataQueue. The difference with @gst_data_queue_new is that it will
- * not emit the 'full' and 'empty' signals, but instead calling directly @fullcallback
- * or @emptycallback.
+ * Creates a new #GstDataQueue. If @fullcallback or @emptycallback are supplied, then
+ * the #GstDataQueue will call the respective callback to signal full or empty condition.
+ * If the callbacks are NULL the #GstDataQueue will instead emit 'full' and 'empty'
+ * signals.
  *
  * Returns: a new #GstDataQueue.
  *
diff --git a/libs/gst/base/gstflowcombiner.c b/libs/gst/base/gstflowcombiner.c
index e21f6c2..9dd5123 100644
--- a/libs/gst/base/gstflowcombiner.c
+++ b/libs/gst/base/gstflowcombiner.c
@@ -41,9 +41,7 @@
  * Please be aware that this struct isn't thread safe as its designed to be
  *  used by demuxers, those usually will have a single thread operating it.
  *
- * None of these functions will take refs on the passed #GstPad<!-- -->s, it
- * is the caller's responsibility to make sure that the #GstPad exists as long
- * as this struct exists.
+ * These functions will take refs on the passed #GstPad<!-- -->s.
  *
  * Aside from reducing the user's code size, the main advantage of using this
  * helper struct is to follow the standard rules for #GstFlowReturn combination.
@@ -140,6 +138,50 @@
   }
 }
 
+/**
+ * gst_flow_combiner_clear:
+ * @combiner: the #GstFlowCombiner to clear
+ *
+ * Removes all pads from a #GstFlowCombiner and resets it to its initial state.
+ *
+ * Since: 1.6
+ */
+void
+gst_flow_combiner_clear (GstFlowCombiner * combiner)
+{
+  GstPad *pad;
+
+  g_return_if_fail (combiner != NULL);
+
+  while ((pad = g_queue_pop_head (&combiner->pads)))
+    gst_object_unref (pad);
+  combiner->last_ret = GST_FLOW_OK;
+}
+
+/**
+ * gst_flow_combiner_reset:
+ * @combiner: the #GstFlowCombiner to clear
+ *
+ * Removes all pads from a #GstFlowCombiner and resets it to its initial state.
+ *
+ * Since: 1.6
+ */
+void
+gst_flow_combiner_reset (GstFlowCombiner * combiner)
+{
+  GList *iter;
+
+  g_return_if_fail (combiner != NULL);
+
+  GST_DEBUG ("Reset flow returns");
+
+  for (iter = combiner->pads.head; iter; iter = iter->next) {
+    GST_PAD_LAST_FLOW_RETURN (iter->data) = GST_FLOW_OK;
+  }
+
+  combiner->last_ret = GST_FLOW_OK;
+}
+
 static GstFlowReturn
 gst_flow_combiner_get_flow (GstFlowCombiner * combiner)
 {
@@ -182,7 +224,7 @@
  *
  * Computes the combined flow return for the pads in it.
  *
- * The #GstFlowReturn paramter should be the last flow return update for a pad
+ * The #GstFlowReturn parameter should be the last flow return update for a pad
  * in this #GstFlowCombiner. It will use this value to be able to shortcut some
  * combinations and avoid looking over all pads again. e.g. The last combined
  * return is the same as the latest obtained #GstFlowReturn.
@@ -211,6 +253,34 @@
 }
 
 /**
+ * gst_flow_combiner_update_pad_flow:
+ * @combiner: the #GstFlowCombiner
+ * @pad: the #GstPad whose #GstFlowReturn to update
+ * @fret: the latest #GstFlowReturn received for a pad in this #GstFlowCombiner
+ *
+ * Sets the provided pad's last flow return to provided value and computes
+ * the combined flow return for the pads in it.
+ *
+ * The #GstFlowReturn parameter should be the last flow return update for a pad
+ * in this #GstFlowCombiner. It will use this value to be able to shortcut some
+ * combinations and avoid looking over all pads again. e.g. The last combined
+ * return is the same as the latest obtained #GstFlowReturn.
+ *
+ * Returns: The combined #GstFlowReturn
+ * Since: 1.6
+ */
+GstFlowReturn
+gst_flow_combiner_update_pad_flow (GstFlowCombiner * combiner, GstPad * pad,
+    GstFlowReturn fret)
+{
+  g_return_val_if_fail (pad != NULL, GST_FLOW_ERROR);
+
+  GST_PAD_LAST_FLOW_RETURN (pad) = fret;
+
+  return gst_flow_combiner_update_flow (combiner, fret);
+}
+
+/**
  * gst_flow_combiner_add_pad:
  * @combiner: the #GstFlowCombiner
  * @pad: (transfer none): the #GstPad that is being added
diff --git a/libs/gst/base/gstflowcombiner.h b/libs/gst/base/gstflowcombiner.h
index 43c37e3..79e4bed 100644
--- a/libs/gst/base/gstflowcombiner.h
+++ b/libs/gst/base/gstflowcombiner.h
@@ -47,10 +47,17 @@
 
 GstFlowReturn     gst_flow_combiner_update_flow (GstFlowCombiner * combiner, GstFlowReturn fret);
 
+GstFlowReturn     gst_flow_combiner_update_pad_flow (GstFlowCombiner * combiner, GstPad * pad,
+                                                     GstFlowReturn fret);
+
 void              gst_flow_combiner_add_pad    (GstFlowCombiner * combiner, GstPad * pad);
 
 void              gst_flow_combiner_remove_pad (GstFlowCombiner * combiner, GstPad * pad);
 
+void              gst_flow_combiner_clear (GstFlowCombiner * combiner);
+
+void              gst_flow_combiner_reset (GstFlowCombiner * combiner);
+
 GType             gst_flow_combiner_get_type (void);
 
 G_END_DECLS
diff --git a/libs/gst/check/Makefile.am b/libs/gst/check/Makefile.am
index 1389270..8c2a1b3 100644
--- a/libs/gst/check/Makefile.am
+++ b/libs/gst/check/Makefile.am
@@ -2,11 +2,8 @@
 
 SYMBOLS_FILE = exports.sym
 
-BUILT_SOURCES = internal-check.h
-
 libgstcheck_@GST_API_VERSION@_la_DEPENDENCIES = \
 	$(top_builddir)/gst/libgstreamer-@GST_API_VERSION@.la \
-	internal-check.h \
 	$(SYMBOLS_FILE)
 libgstcheck_@GST_API_VERSION@_la_SOURCES =	\
 	gstbufferstraw.c			\
@@ -35,12 +32,9 @@
 	gsttestclock.h
 
 nodist_libgstcheck_@GST_API_VERSION@include_HEADERS =	\
-	internal-check.h	
+	internal-check.h
 
-CLEANFILES = *.gcno *.gcda *.gcov internal-check.h $(SYMBOLS_FILE)
-
-internal-check.h: $(top_builddir)/libs/gst/check/libcheck/check.h
-	$(AM_V_GEN)cp $(top_builddir)/libs/gst/check/libcheck/check.h internal-check.h
+CLEANFILES = *.gcno *.gcda *.gcov $(SYMBOLS_FILE)
 
 %.c.gcov: .libs/libgstcheck_@GST_API_VERSION@_la-%.gcda %.c
 	$(GCOV) -b -f -o $^ > $@.out
@@ -93,6 +87,8 @@
 	gst_check_teardown_pad_by_name \
 	gst_check_teardown_sink_pad \
 	gst_check_teardown_src_pad \
+	gst_check_objects_destroyed_on_unref \
+	gst_check_object_destroyed_on_unref \
 	gst_consistency_checker_add_pad \
 	gst_consistency_checker_new \
 	gst_consistency_checker_reset \
@@ -113,10 +109,14 @@
 	gst_test_clock_process_id_list \
 	gst_test_clock_id_list_get_latest_time
 
+# For backwards compatibility with GStreamer < 1.5
+LIBGSTCHECK_EXPORTED_COMPAT_FUNCS = \
+	_fail_unless
 
 LIBGSTCHECK_EXPORTED_SYMBOLS = \
 	$(LIBGSTCHECK_EXPORTED_VARS) \
-	$(LIBGSTCHECK_EXPORTED_FUNCS)
+	$(LIBGSTCHECK_EXPORTED_FUNCS) \
+	$(LIBGSTCHECK_EXPORTED_COMPAT_FUNCS)
 
 # Please do not even think about changing the alphabet below into A-Za-z.
 # It is there for purpose. (Bug #602093)
@@ -126,7 +126,7 @@
 	  echo $$s; \
 	done;
 
-$(SYMBOLS_FILE): $(libgstcheck_@GST_API_VERSION@include_HEADERS) libcheck/check.h
+$(SYMBOLS_FILE): $(libgstcheck_@GST_API_VERSION@include_HEADERS) internal-check.h
 	$(AM_V_GEN)rm -f $(SYMBOLS_FILE) 2>/dev/null; \
 	for s in $(LIBGSTCHECK_EXPORTED_SYMBOLS) $(CHECK_SYMS); do \
 	  echo $$s >> $(SYMBOLS_FILE); \
diff --git a/libs/gst/check/Makefile.in b/libs/gst/check/Makefile.in
index 9f470d4..cf358d2 100644
--- a/libs/gst/check/Makefile.in
+++ b/libs/gst/check/Makefile.in
@@ -84,6 +84,7 @@
 @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = libs/gst/check
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/libs/gst/check/libcheck/check.h.in \
 	$(top_srcdir)/depcomp \
 	$(libgstcheck_@GST_API_VERSION@include_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -94,6 +95,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -111,7 +113,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -126,7 +128,7 @@
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = internal-check.h
 CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -292,6 +294,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -397,6 +403,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -560,10 +567,8 @@
 top_srcdir = @top_srcdir@
 lib_LTLIBRARIES = libgstcheck-@GST_API_VERSION@.la
 SYMBOLS_FILE = exports.sym
-BUILT_SOURCES = internal-check.h
 libgstcheck_@GST_API_VERSION@_la_DEPENDENCIES = \
 	$(top_builddir)/gst/libgstreamer-@GST_API_VERSION@.la \
-	internal-check.h \
 	$(SYMBOLS_FILE)
 
 libgstcheck_@GST_API_VERSION@_la_SOURCES = \
@@ -595,10 +600,9 @@
 	gsttestclock.h
 
 nodist_libgstcheck_@GST_API_VERSION@include_HEADERS = \
-	internal-check.h	
+	internal-check.h
 
-CLEANFILES = *.gcno *.gcda *.gcov internal-check.h $(SYMBOLS_FILE) \
-	$(am__append_1)
+CLEANFILES = *.gcno *.gcda *.gcov $(SYMBOLS_FILE) $(am__append_1)
 SUBDIRS = libcheck
 LIBGSTCHECK_EXPORTED_VARS = \
 	_gst_check_threads_running \
@@ -644,6 +648,8 @@
 	gst_check_teardown_pad_by_name \
 	gst_check_teardown_sink_pad \
 	gst_check_teardown_src_pad \
+	gst_check_objects_destroyed_on_unref \
+	gst_check_object_destroyed_on_unref \
 	gst_consistency_checker_add_pad \
 	gst_consistency_checker_new \
 	gst_consistency_checker_reset \
@@ -664,9 +670,15 @@
 	gst_test_clock_process_id_list \
 	gst_test_clock_id_list_get_latest_time
 
+
+# For backwards compatibility with GStreamer < 1.5
+LIBGSTCHECK_EXPORTED_COMPAT_FUNCS = \
+	_fail_unless
+
 LIBGSTCHECK_EXPORTED_SYMBOLS = \
 	$(LIBGSTCHECK_EXPORTED_VARS) \
-	$(LIBGSTCHECK_EXPORTED_FUNCS)
+	$(LIBGSTCHECK_EXPORTED_FUNCS) \
+	$(LIBGSTCHECK_EXPORTED_COMPAT_FUNCS)
 
 
 # Please do not even think about changing the alphabet below into A-Za-z.
@@ -682,8 +694,7 @@
 @HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
 @HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
 @HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+all: all-recursive
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
@@ -717,6 +728,8 @@
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
+internal-check.h: $(top_builddir)/config.status $(top_srcdir)/libs/gst/check/libcheck/check.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
@@ -1064,16 +1077,14 @@
 	  fi; \
 	done
 check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-recursive
+check: check-recursive
 all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
 installdirs: installdirs-recursive
 installdirs-am:
 	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstcheck_@GST_API_VERSION@includedir)" "$(DESTDIR)$(libgstcheck_@GST_API_VERSION@includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-recursive
+install: install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
 uninstall: uninstall-recursive
@@ -1104,7 +1115,6 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-recursive
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
@@ -1182,8 +1192,7 @@
 	uninstall-nodist_libgstcheck_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
-.MAKE: $(am__recursive_targets) all check install install-am \
-	install-strip
+.MAKE: $(am__recursive_targets) install-am install-strip
 
 .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
 	check-am clean clean-generic clean-libLTLIBRARIES \
@@ -1209,9 +1218,6 @@
 	uninstall-typelibsDATA
 
 
-internal-check.h: $(top_builddir)/libs/gst/check/libcheck/check.h
-	$(AM_V_GEN)cp $(top_builddir)/libs/gst/check/libcheck/check.h internal-check.h
-
 %.c.gcov: .libs/libgstcheck_@GST_API_VERSION@_la-%.gcda %.c
 	$(GCOV) -b -f -o $^ > $@.out
 
@@ -1221,7 +1227,7 @@
 	  echo $$s; \
 	done;
 
-$(SYMBOLS_FILE): $(libgstcheck_@GST_API_VERSION@include_HEADERS) libcheck/check.h
+$(SYMBOLS_FILE): $(libgstcheck_@GST_API_VERSION@include_HEADERS) internal-check.h
 	$(AM_V_GEN)rm -f $(SYMBOLS_FILE) 2>/dev/null; \
 	for s in $(LIBGSTCHECK_EXPORTED_SYMBOLS) $(CHECK_SYMS); do \
 	  echo $$s >> $(SYMBOLS_FILE); \
diff --git a/libs/gst/check/gstcheck.c b/libs/gst/check/gstcheck.c
index 8cadbca..41695ba 100644
--- a/libs/gst/check/gstcheck.c
+++ b/libs/gst/check/gstcheck.c
@@ -27,9 +27,9 @@
  * These macros and functions are for internal use of the unit tests found
  * inside the 'check' directories of various GStreamer packages.
  *
- * One notable feature is that one can use the environment variables GST_CHECK
- * and GST_CHECK_IGNORE to select which tests to run or skip. Both variables
- * can contain a comman separated list of test name globs (e.g. test_*).
+ * One notable feature is that one can use the environment variables GST_CHECKS
+ * and GST_CHECKS_IGNORE to select which tests to run or skip. Both variables
+ * can contain a comma separated list of test name globs (e.g. test_*).
  */
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -55,7 +55,7 @@
 GMutex check_mutex;
 GCond check_cond;
 
-/* FIXME 0.11: shouldn't _gst_check_debug be static? Not used anywhere */
+/* FIXME 2.0: shouldn't _gst_check_debug be static? Not used anywhere */
 gboolean _gst_check_debug = FALSE;
 gboolean _gst_check_raised_critical = FALSE;
 gboolean _gst_check_raised_warning = FALSE;
@@ -243,7 +243,9 @@
  * @element: element to setup pad on
  * @tmpl: pad template
  *
- * Returns: (transfer full): a new pad
+ * Does the same as #gst_check_setup_src_pad_by_name with the <emphasis> name </emphasis> parameter equal to "sink".
+ *
+ * Returns: (transfer full): A new pad that can be used to inject data on @element
  */
 GstPad *
 gst_check_setup_src_pad (GstElement * element, GstStaticPadTemplate * tmpl)
@@ -253,11 +255,45 @@
 
 /**
  * gst_check_setup_src_pad_by_name:
- * @element: element to setup pad on
+ * @element: element to setup src pad on
  * @tmpl: pad template
- * @name: name
+ * @name: Name of the @element sink pad that will be linked to the src pad that will be setup
  *
- * Returns: (transfer full): a new pad
+ * Creates a new src pad (based on the given @tmpl) and links it to the given @element sink pad (the pad that matches the given @name).
+ * Before using the src pad to push data on @element you need to call #gst_check_setup_events on the created src pad.
+ *
+ * Example of how to push a buffer on @element:
+ *
+ * |[<!-- language="C" -->
+ * static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ * GST_PAD_SINK,
+ * GST_PAD_ALWAYS,
+ * GST_STATIC_CAPS (YOUR_CAPS_TEMPLATE_STRING)
+ * );
+ * static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ * GST_PAD_SRC,
+ * GST_PAD_ALWAYS,
+ * GST_STATIC_CAPS (YOUR_CAPS_TEMPLATE_STRING)
+ * );
+ *
+ * GstElement * element = gst_check_setup_element ("element");
+ * GstPad * mysrcpad = gst_check_setup_src_pad (element, &srctemplate);
+ * GstPad * mysinkpad = gst_check_setup_sink_pad (element, &sinktemplate);
+ *
+ * gst_pad_set_active (mysrcpad, TRUE);
+ * gst_pad_set_active (mysinkpad, TRUE);
+ * fail_unless (gst_element_set_state (element, GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, "could not set to playing");
+ *
+ * GstCaps * caps = gst_caps_from_string (YOUR_DESIRED_SINK_CAPS);
+ * gst_check_setup_events (mysrcpad, element, caps, GST_FORMAT_TIME);
+ * gst_caps_unref (caps);
+ *
+ * fail_unless (gst_pad_push (mysrcpad, gst_buffer_new_and_alloc(2)) == GST_FLOW_OK);
+ * ]|
+ *
+ * For very simple input/output test scenarios checkout #gst_check_element_push_buffer_list and #gst_check_element_push_buffer.
+ *
+ * Returns: (transfer full): A new pad that can be used to inject data on @element
  */
 GstPad *
 gst_check_setup_src_pad_by_name (GstElement * element,
@@ -369,7 +405,9 @@
  * @element: element to setup pad on
  * @tmpl: pad template
  *
- * Returns: (transfer full): a new pad
+ * Does the same as #gst_check_setup_sink_pad_by_name with the <emphasis> name </emphasis> parameter equal to "src".
+ *
+ * Returns: (transfer full): a new pad that can be used to check the output of @element
  */
 GstPad *
 gst_check_setup_sink_pad (GstElement * element, GstStaticPadTemplate * tmpl)
@@ -381,9 +419,13 @@
  * gst_check_setup_sink_pad_by_name:
  * @element: element to setup pad on
  * @tmpl: pad template
- * @name: name
+ * @name: Name of the @element src pad that will be linked to the sink pad that will be setup
  *
- * Returns: (transfer full): a new pad
+ * Creates a new sink pad (based on the given @tmpl) and links it to the given @element src pad 
+ * (the pad that matches the given @name).
+ * You can set event/chain/query functions on this pad to check the output of the @element.
+ *
+ * Returns: (transfer full): a new pad that can be used to check the output of @element
  */
 GstPad *
 gst_check_setup_sink_pad_by_name (GstElement * element,
@@ -561,7 +603,7 @@
  * This can be used to set up a test which pushes some buffers and then an
  * invalid buffer, when the final buffer is expected to fail, for example.
  */
-/* FIXME 0.11: rename this function now that there's GstBufferList? */
+/* FIXME 2.0: rename this function now that there's GstBufferList? */
 void
 gst_check_element_push_buffer_list (const gchar * element_name,
     GList * buffer_in, GstCaps * caps_in, GList * buffer_out,
@@ -884,3 +926,113 @@
       stream_id);
   g_free (stream_id);
 }
+
+typedef struct _DestroyedObjectStruct
+{
+  GObject *object;
+  gboolean destroyed;
+} DestroyedObjectStruct;
+
+static void
+weak_notify (DestroyedObjectStruct * destroyed, GObject ** object)
+{
+  destroyed->destroyed = TRUE;
+}
+
+/**
+ * gst_check_objects_destroyed_on_unref:
+ * @object_to_unref: The #GObject to unref
+ * @first_object: (allow-none): The first object that should be destroyed as a
+ * concequence of unrefing @object_to_unref.
+ * @... : Additional object that should have been destroyed.
+ *
+ * Unrefs @object_to_unref and checks that is has properly been
+ * destroyed, also checks that the other objects passed in
+ * parametter have been destroyed as a concequence of
+ * unrefing @object_to_unref. Last variable argument should be NULL.
+ *
+ * Since: 1.6
+ */
+void
+gst_check_objects_destroyed_on_unref (gpointer object_to_unref,
+    gpointer first_object, ...)
+{
+  GObject *object;
+  GList *objs = NULL, *tmp;
+  DestroyedObjectStruct *destroyed = g_slice_new0 (DestroyedObjectStruct);
+
+  destroyed->object = object_to_unref;
+  g_object_weak_ref (object_to_unref, (GWeakNotify) weak_notify, destroyed);
+  objs = g_list_prepend (objs, destroyed);
+
+  if (first_object) {
+    va_list varargs;
+
+    object = first_object;
+
+    va_start (varargs, first_object);
+    while (object) {
+      destroyed = g_slice_new0 (DestroyedObjectStruct);
+      destroyed->object = object;
+      g_object_weak_ref (object, (GWeakNotify) weak_notify, destroyed);
+      objs = g_list_prepend (objs, destroyed);
+      object = va_arg (varargs, GObject *);
+    }
+    va_end (varargs);
+  }
+  gst_object_unref (object_to_unref);
+
+  for (tmp = objs; tmp; tmp = tmp->next) {
+    DestroyedObjectStruct *destroyed = tmp->data;
+
+    if (!destroyed->destroyed) {
+      fail_unless (destroyed->destroyed,
+          "%s_%p is not destroyed, %d refcounts left!",
+          GST_IS_OBJECT (destroyed->
+              object) ? GST_OBJECT_NAME (destroyed->object) :
+          G_OBJECT_TYPE_NAME (destroyed), destroyed->object,
+          destroyed->object->ref_count);
+    }
+    g_slice_free (DestroyedObjectStruct, tmp->data);
+  }
+  g_list_free (objs);
+}
+
+/**
+ * gst_check_object_destroyed_on_unref:
+ * @object_to_unref: The #GObject to unref
+ *
+ * Unrefs @object_to_unref and checks that is has properly been
+ * destroyed.
+ *
+ * Since: 1.6
+ */
+void
+gst_check_object_destroyed_on_unref (gpointer object_to_unref)
+{
+  gst_check_objects_destroyed_on_unref (object_to_unref, NULL, NULL);
+}
+
+/* For ABI compatibility with GStreamer < 1.5 */
+void
+_fail_unless (int result, const char *file, int line, const char *expr, ...)
+G_GNUC_PRINTF (4, 5);
+
+void _fail_unless (int result, const char *file, int line,
+    const char *expr, ...)
+{
+  gchar *msg;
+  va_list args;
+
+  if (result) {
+    _mark_point(file, line);
+    return;
+  }
+
+  va_start (args, expr);
+  msg = g_strdup_vprintf (expr, args);
+  va_end (args);
+
+  _ck_assert_failed (file, line, msg, NULL);
+  g_free (msg);
+}
diff --git a/libs/gst/check/gstcheck.h b/libs/gst/check/gstcheck.h
index 84d1d11..77f4596 100644
--- a/libs/gst/check/gstcheck.h
+++ b/libs/gst/check/gstcheck.h
@@ -107,6 +107,9 @@
 void gst_check_setup_events_with_stream_id (GstPad * srcpad,
     GstElement * element, GstCaps * caps, GstFormat format,
     const gchar * stream_id);
+void gst_check_objects_destroyed_on_unref (gpointer object_to_unref, gpointer first_object, ...)
+  G_GNUC_NULL_TERMINATED;
+void gst_check_object_destroyed_on_unref (gpointer object_to_unref);
 
 #define fail_unless_message_error(msg, domain, code)            \
 gst_check_message_error (msg, GST_MESSAGE_ERROR,                \
@@ -497,7 +500,7 @@
   g_usleep (1);                                                 \
 } G_STMT_END;
 
-#define THREAD_TEST_RUNNING()   (_gst_check_threads_running == TRUE)
+#define THREAD_TEST_RUNNING()   (!!_gst_check_threads_running)
 
 /* additional assertions */
 #define ASSERT_CRITICAL(code)                                   \
@@ -505,8 +508,9 @@
   _gst_check_expecting_log = TRUE;                              \
   _gst_check_raised_critical = FALSE;                           \
   code;                                                         \
-  _fail_unless (_gst_check_raised_critical, __FILE__, __LINE__, \
-                "Expected g_critical, got nothing", NULL);      \
+  if (!_gst_check_raised_critical)                              \
+    _ck_assert_failed (__FILE__, __LINE__,                      \
+        "Expected g_critical, got nothing", NULL);              \
   _gst_check_expecting_log = FALSE;                             \
 } G_STMT_END
 
@@ -515,8 +519,9 @@
   _gst_check_expecting_log = TRUE;                              \
   _gst_check_raised_warning = FALSE;                            \
   code;                                                         \
-  _fail_unless (_gst_check_raised_warning, __FILE__, __LINE__,  \
-                "Expected g_warning, got nothing", NULL);       \
+  if (!_gst_check_raised_warning)                               \
+    _ck_assert_failed (__FILE__, __LINE__,                      \
+        "Expected g_warning, got nothing", NULL);               \
   _gst_check_expecting_log = FALSE;                             \
 } G_STMT_END
 
@@ -560,7 +565,7 @@
 } G_STMT_END
 
 #define ASSERT_SET_STATE(element, state, ret)                   \
-fail_unless (gst_element_set_state (element,                    \
+fail_unless (gst_element_set_state (GST_ELEMENT(element),       \
   state) == ret,                                                \
   "could not change state to " #state);
 
diff --git a/libs/gst/check/gsttestclock.c b/libs/gst/check/gsttestclock.c
index 0981b0b..2fb30bc 100644
--- a/libs/gst/check/gsttestclock.c
+++ b/libs/gst/check/gsttestclock.c
@@ -139,7 +139,7 @@
  *   g_assert_cmpint (GST_BUFFER_TIMESTAMP (buf), ==, latency);
  *   gst_buffer_unref (buf);
  *   GST_INFO ("Check that element does not wait for any clock notification\n");
- *   g_assert (gst_test_clock_peek_next_pending_id (test_clock, NULL) == FALSE);
+ *   g_assert (!gst_test_clock_peek_next_pending_id (test_clock, NULL));
  *
  *   GST_INFO ("Set time, create and push the second buffer\n");
  *   gst_test_clock_advance_time (test_clock, 10 * GST_SECOND);
@@ -164,7 +164,7 @@
  *       10 * GST_SECOND + latency + 7 * GST_MSECOND);
  *   gst_buffer_unref (buf);
  *   GST_INFO ("Check that element does not wait for any clock notification\n");
- *   g_assert (gst_test_clock_peek_next_pending_id (test_clock, NULL) == FALSE);
+ *   g_assert (!gst_test_clock_peek_next_pending_id (test_clock, NULL));
  *   ...
  *   </programlisting>
  * </example>
diff --git a/libs/gst/check/libcheck/Makefile.am b/libs/gst/check/libcheck/Makefile.am
index e814fc8..dfa2062 100644
--- a/libs/gst/check/libcheck/Makefile.am
+++ b/libs/gst/check/libcheck/Makefile.am
@@ -11,10 +11,29 @@
 	check_pack.c	\
 	check_print.c	\
 	check_run.c	\
-	check_str.c
+	check_str.c	\
+	libcompat.c
+
+if !HAVE_ALARM
+CFILES += alarm.c
+endif
+
+if !HAVE_CLOCK_GETTIME
+CFILES += clock_gettime.c
+endif
+
+if !HAVE_STRSIGNAL
+CFILES += strsignal.c
+endif
+
+if !HAVE_TIMER_CREATE_SETTIME_DELETE
+CFILES +=\
+	timer_create.c	\
+	timer_settime.c	\
+	timer_delete.c
+endif
 
 HFILES =\
-	check.h		\
 	check_error.h	\
 	check_impl.h	\
 	check_list.h	\
@@ -22,17 +41,20 @@
 	check_msg.h	\
 	check_pack.h	\
 	check_print.h	\
-	check_str.h
+	check_str.h	\
+	libcompat.h
 
 noinst_HEADERS = $(HFILES)
 
 libcheckinternal_la_SOURCES	= $(CFILES) $(HFILES)
 
+libcheckinternal_la_CFLAGS	= -I$(top_builddir)/libs/gst/check
+libcheckinternal_la_LIBADD	=
+
 # define HAVE_PTHREAD here as well so we keep changes to the code to a minimum
 if HAVE_PTHREAD
-libcheckinternal_la_CFLAGS	= $(PTHREAD_CFLAGS) -D_GNU_SOURCE -DHAVE_PTHREAD
-libcheckinternal_la_LIBADD	= $(PTHREAD_LIBS)
+libcheckinternal_la_CFLAGS	+= $(PTHREAD_CFLAGS) -D_GNU_SOURCE -DHAVE_PTHREAD
+libcheckinternal_la_LIBADD	+= $(PTHREAD_LIBS)
 else
-libcheckinternal_la_CFLAGS	= -D_GNU_SOURCE
-libcheckinternal_la_LIBADD	=
+libcheckinternal_la_CFLAGS	+= -D_GNU_SOURCE
 endif
diff --git a/libs/gst/check/libcheck/Makefile.in b/libs/gst/check/libcheck/Makefile.in
index 1d3988f..926dfd4 100644
--- a/libs/gst/check/libcheck/Makefile.in
+++ b/libs/gst/check/libcheck/Makefile.in
@@ -80,9 +80,22 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+@HAVE_ALARM_FALSE@am__append_1 = alarm.c
+@HAVE_CLOCK_GETTIME_FALSE@am__append_2 = clock_gettime.c
+@HAVE_STRSIGNAL_FALSE@am__append_3 = strsignal.c
+@HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE@am__append_4 = \
+@HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE@	timer_create.c	\
+@HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE@	timer_settime.c	\
+@HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE@	timer_delete.c
+
+
+# define HAVE_PTHREAD here as well so we keep changes to the code to a minimum
+@HAVE_PTHREAD_TRUE@am__append_5 = $(PTHREAD_CFLAGS) -D_GNU_SOURCE -DHAVE_PTHREAD
+@HAVE_PTHREAD_TRUE@am__append_6 = $(PTHREAD_LIBS)
+@HAVE_PTHREAD_FALSE@am__append_7 = -D_GNU_SOURCE
 subdir = libs/gst/check/libcheck
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(srcdir)/check.h.in $(top_srcdir)/depcomp $(noinst_HEADERS)
+	$(top_srcdir)/depcomp $(noinst_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -91,6 +104,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +122,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -123,13 +137,27 @@
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = check.h
+CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-@HAVE_PTHREAD_TRUE@libcheckinternal_la_DEPENDENCIES =  \
-@HAVE_PTHREAD_TRUE@	$(am__DEPENDENCIES_1)
-am__objects_1 = libcheckinternal_la-check.lo \
+@HAVE_PTHREAD_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+libcheckinternal_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am__libcheckinternal_la_SOURCES_DIST = check.c check_error.c \
+	check_list.c check_log.c check_msg.c check_pack.c \
+	check_print.c check_run.c check_str.c libcompat.c alarm.c \
+	clock_gettime.c strsignal.c timer_create.c timer_settime.c \
+	timer_delete.c check_error.h check_impl.h check_list.h \
+	check_log.h check_msg.h check_pack.h check_print.h check_str.h \
+	libcompat.h
+@HAVE_ALARM_FALSE@am__objects_1 = libcheckinternal_la-alarm.lo
+@HAVE_CLOCK_GETTIME_FALSE@am__objects_2 = libcheckinternal_la-clock_gettime.lo
+@HAVE_STRSIGNAL_FALSE@am__objects_3 =  \
+@HAVE_STRSIGNAL_FALSE@	libcheckinternal_la-strsignal.lo
+@HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE@am__objects_4 = libcheckinternal_la-timer_create.lo \
+@HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE@	libcheckinternal_la-timer_settime.lo \
+@HAVE_TIMER_CREATE_SETTIME_DELETE_FALSE@	libcheckinternal_la-timer_delete.lo
+am__objects_5 = libcheckinternal_la-check.lo \
 	libcheckinternal_la-check_error.lo \
 	libcheckinternal_la-check_list.lo \
 	libcheckinternal_la-check_log.lo \
@@ -137,9 +165,11 @@
 	libcheckinternal_la-check_pack.lo \
 	libcheckinternal_la-check_print.lo \
 	libcheckinternal_la-check_run.lo \
-	libcheckinternal_la-check_str.lo
-am__objects_2 =
-am_libcheckinternal_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+	libcheckinternal_la-check_str.lo \
+	libcheckinternal_la-libcompat.lo $(am__objects_1) \
+	$(am__objects_2) $(am__objects_3) $(am__objects_4)
+am__objects_6 =
+am_libcheckinternal_la_OBJECTS = $(am__objects_5) $(am__objects_6)
 libcheckinternal_la_OBJECTS = $(am_libcheckinternal_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -184,7 +214,7 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libcheckinternal_la_SOURCES)
-DIST_SOURCES = $(libcheckinternal_la_SOURCES)
+DIST_SOURCES = $(am__libcheckinternal_la_SOURCES_DIST)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -221,6 +251,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -326,6 +360,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -489,19 +524,11 @@
 top_srcdir = @top_srcdir@
 noinst_LTLIBRARIES = libcheckinternal.la
 EXTRA_DIST = check.h.in
-CFILES = \
-	check.c		\
-	check_error.c	\
-	check_list.c	\
-	check_log.c	\
-	check_msg.c	\
-	check_pack.c	\
-	check_print.c	\
-	check_run.c	\
-	check_str.c
-
+CFILES = check.c check_error.c check_list.c check_log.c check_msg.c \
+	check_pack.c check_print.c check_run.c check_str.c libcompat.c \
+	$(am__append_1) $(am__append_2) $(am__append_3) \
+	$(am__append_4)
 HFILES = \
-	check.h		\
 	check_error.h	\
 	check_impl.h	\
 	check_list.h	\
@@ -509,16 +536,14 @@
 	check_msg.h	\
 	check_pack.h	\
 	check_print.h	\
-	check_str.h
+	check_str.h	\
+	libcompat.h
 
 noinst_HEADERS = $(HFILES)
 libcheckinternal_la_SOURCES = $(CFILES) $(HFILES)
-@HAVE_PTHREAD_FALSE@libcheckinternal_la_CFLAGS = -D_GNU_SOURCE
-
-# define HAVE_PTHREAD here as well so we keep changes to the code to a minimum
-@HAVE_PTHREAD_TRUE@libcheckinternal_la_CFLAGS = $(PTHREAD_CFLAGS) -D_GNU_SOURCE -DHAVE_PTHREAD
-@HAVE_PTHREAD_FALSE@libcheckinternal_la_LIBADD = 
-@HAVE_PTHREAD_TRUE@libcheckinternal_la_LIBADD = $(PTHREAD_LIBS)
+libcheckinternal_la_CFLAGS = -I$(top_builddir)/libs/gst/check \
+	$(am__append_5) $(am__append_7)
+libcheckinternal_la_LIBADD = $(am__append_6)
 all: all-am
 
 .SUFFIXES:
@@ -553,8 +578,6 @@
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
-check.h: $(top_builddir)/config.status $(srcdir)/check.h.in
-	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
 clean-noinstLTLIBRARIES:
 	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@@ -576,6 +599,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-alarm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-check.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-check_error.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-check_list.Plo@am__quote@
@@ -585,6 +609,12 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-check_print.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-check_run.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-check_str.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-clock_gettime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-libcompat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-strsignal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-timer_create.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-timer_delete.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheckinternal_la-timer_settime.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -673,6 +703,55 @@
 @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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-check_str.lo `test -f 'check_str.c' || echo '$(srcdir)/'`check_str.c
 
+libcheckinternal_la-libcompat.lo: libcompat.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -MT libcheckinternal_la-libcompat.lo -MD -MP -MF $(DEPDIR)/libcheckinternal_la-libcompat.Tpo -c -o libcheckinternal_la-libcompat.lo `test -f 'libcompat.c' || echo '$(srcdir)/'`libcompat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcheckinternal_la-libcompat.Tpo $(DEPDIR)/libcheckinternal_la-libcompat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libcompat.c' object='libcheckinternal_la-libcompat.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-libcompat.lo `test -f 'libcompat.c' || echo '$(srcdir)/'`libcompat.c
+
+libcheckinternal_la-alarm.lo: alarm.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -MT libcheckinternal_la-alarm.lo -MD -MP -MF $(DEPDIR)/libcheckinternal_la-alarm.Tpo -c -o libcheckinternal_la-alarm.lo `test -f 'alarm.c' || echo '$(srcdir)/'`alarm.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcheckinternal_la-alarm.Tpo $(DEPDIR)/libcheckinternal_la-alarm.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='alarm.c' object='libcheckinternal_la-alarm.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-alarm.lo `test -f 'alarm.c' || echo '$(srcdir)/'`alarm.c
+
+libcheckinternal_la-clock_gettime.lo: clock_gettime.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -MT libcheckinternal_la-clock_gettime.lo -MD -MP -MF $(DEPDIR)/libcheckinternal_la-clock_gettime.Tpo -c -o libcheckinternal_la-clock_gettime.lo `test -f 'clock_gettime.c' || echo '$(srcdir)/'`clock_gettime.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcheckinternal_la-clock_gettime.Tpo $(DEPDIR)/libcheckinternal_la-clock_gettime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='clock_gettime.c' object='libcheckinternal_la-clock_gettime.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-clock_gettime.lo `test -f 'clock_gettime.c' || echo '$(srcdir)/'`clock_gettime.c
+
+libcheckinternal_la-strsignal.lo: strsignal.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -MT libcheckinternal_la-strsignal.lo -MD -MP -MF $(DEPDIR)/libcheckinternal_la-strsignal.Tpo -c -o libcheckinternal_la-strsignal.lo `test -f 'strsignal.c' || echo '$(srcdir)/'`strsignal.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcheckinternal_la-strsignal.Tpo $(DEPDIR)/libcheckinternal_la-strsignal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='strsignal.c' object='libcheckinternal_la-strsignal.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-strsignal.lo `test -f 'strsignal.c' || echo '$(srcdir)/'`strsignal.c
+
+libcheckinternal_la-timer_create.lo: timer_create.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -MT libcheckinternal_la-timer_create.lo -MD -MP -MF $(DEPDIR)/libcheckinternal_la-timer_create.Tpo -c -o libcheckinternal_la-timer_create.lo `test -f 'timer_create.c' || echo '$(srcdir)/'`timer_create.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcheckinternal_la-timer_create.Tpo $(DEPDIR)/libcheckinternal_la-timer_create.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='timer_create.c' object='libcheckinternal_la-timer_create.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-timer_create.lo `test -f 'timer_create.c' || echo '$(srcdir)/'`timer_create.c
+
+libcheckinternal_la-timer_settime.lo: timer_settime.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -MT libcheckinternal_la-timer_settime.lo -MD -MP -MF $(DEPDIR)/libcheckinternal_la-timer_settime.Tpo -c -o libcheckinternal_la-timer_settime.lo `test -f 'timer_settime.c' || echo '$(srcdir)/'`timer_settime.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcheckinternal_la-timer_settime.Tpo $(DEPDIR)/libcheckinternal_la-timer_settime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='timer_settime.c' object='libcheckinternal_la-timer_settime.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-timer_settime.lo `test -f 'timer_settime.c' || echo '$(srcdir)/'`timer_settime.c
+
+libcheckinternal_la-timer_delete.lo: timer_delete.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -MT libcheckinternal_la-timer_delete.lo -MD -MP -MF $(DEPDIR)/libcheckinternal_la-timer_delete.Tpo -c -o libcheckinternal_la-timer_delete.lo `test -f 'timer_delete.c' || echo '$(srcdir)/'`timer_delete.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcheckinternal_la-timer_delete.Tpo $(DEPDIR)/libcheckinternal_la-timer_delete.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='timer_delete.c' object='libcheckinternal_la-timer_delete.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) $(libcheckinternal_la_CFLAGS) $(CFLAGS) -c -o libcheckinternal_la-timer_delete.lo `test -f 'timer_delete.c' || echo '$(srcdir)/'`timer_delete.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/libs/gst/check/libcheck/alarm.c b/libs/gst/check/libcheck/alarm.c
new file mode 100644
index 0000000..9f87019
--- /dev/null
+++ b/libs/gst/check/libcheck/alarm.c
@@ -0,0 +1,8 @@
+#include "libcompat.h"
+
+unsigned int
+alarm (unsigned int seconds CK_ATTRIBUTE_UNUSED)
+{
+  assert (0);
+  return 0;
+}
diff --git a/libs/gst/check/libcheck/check.c b/libs/gst/check/libcheck/check.c
index 2b7f481..5a50d7d 100644
--- a/libs/gst/check/libcheck/check.c
+++ b/libs/gst/check/libcheck/check.c
@@ -18,14 +18,15 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
+#include <math.h>
 
-#include "check.h"
+#include "internal-check.h"
 #include "check_error.h"
 #include "check_list.h"
 #include "check_impl.h"
@@ -39,6 +40,14 @@
 #define DEFAULT_TIMEOUT 4
 #endif
 
+/*
+ * When a process exits either normally, with exit(), or
+ * by an uncaught signal, The lower 0x377 bits are passed
+ * to the parent. Of those, only the lower 8 bits are
+ * returned by the WEXITSTATUS() macro.
+ */
+#define WEXITSTATUS_MASK 0xFF
+
 int check_major_version = CHECK_MAJOR_VERSION;
 int check_minor_version = CHECK_MINOR_VERSION;
 int check_micro_version = CHECK_MICRO_VERSION;
@@ -55,7 +64,8 @@
 suite_create (const char *name)
 {
   Suite *s;
-  s = emalloc (sizeof (Suite)); /* freed in suite_free */
+
+  s = (Suite *) emalloc (sizeof (Suite));       /* freed in suite_free */
   if (name == NULL)
     s->name = "";
   else
@@ -64,17 +74,37 @@
   return s;
 }
 
+int
+suite_tcase (Suite * s, const char *tcname)
+{
+  List *l;
+  TCase *tc;
+
+  if (s == NULL)
+    return 0;
+
+  l = s->tclst;
+  for (check_list_front (l); !check_list_at_end (l); check_list_advance (l)) {
+    tc = (TCase *) check_list_val (l);
+    if (strcmp (tcname, tc->name) == 0)
+      return 1;
+  }
+
+  return 0;
+}
+
 static void
 suite_free (Suite * s)
 {
   List *l;
+
   if (s == NULL)
     return;
   l = s->tclst;
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    tcase_free (list_val (l));
+  for (check_list_front (l); !check_list_at_end (l); check_list_advance (l)) {
+    tcase_free ((TCase *) check_list_val (l));
   }
-  list_free (s->tclst);
+  check_list_free (s->tclst);
   free (s);
 }
 
@@ -82,8 +112,10 @@
 tcase_create (const char *name)
 {
   char *env;
-  int timeout = DEFAULT_TIMEOUT;
-  TCase *tc = emalloc (sizeof (TCase)); /*freed in tcase_free */
+  double timeout_sec = DEFAULT_TIMEOUT;
+
+  TCase *tc = (TCase *) emalloc (sizeof (TCase));       /*freed in tcase_free */
+
   if (name == NULL)
     tc->name = "";
   else
@@ -91,21 +123,28 @@
 
   env = getenv ("CK_DEFAULT_TIMEOUT");
   if (env != NULL) {
-    int tmp = atoi (env);
-    if (tmp >= 0) {
-      timeout = tmp;
+    char *endptr = NULL;
+    double tmp = strtod (env, &endptr);
+
+    if (tmp >= 0 && endptr != env && (*endptr) == '\0') {
+      timeout_sec = tmp;
     }
   }
 
   env = getenv ("CK_TIMEOUT_MULTIPLIER");
   if (env != NULL) {
-    int tmp = atoi (env);
-    if (tmp >= 0) {
-      timeout = timeout * tmp;
+    char *endptr = NULL;
+    double tmp = strtod (env, &endptr);
+
+    if (tmp >= 0 && endptr != env && (*endptr) == '\0') {
+      timeout_sec = timeout_sec * tmp;
     }
   }
 
-  tc->timeout = timeout;
+  tc->timeout.tv_sec = (time_t) floor (timeout_sec);
+  tc->timeout.tv_nsec =
+      (long) ((timeout_sec - floor (timeout_sec)) * (double) NANOS_PER_SECONDS);
+
   tc->tflst = check_list_create ();
   tc->unch_sflst = check_list_create ();
   tc->ch_sflst = check_list_create ();
@@ -119,16 +158,16 @@
 static void
 tcase_free (TCase * tc)
 {
-  list_apply (tc->tflst, free);
-  list_apply (tc->unch_sflst, free);
-  list_apply (tc->ch_sflst, free);
-  list_apply (tc->unch_tflst, free);
-  list_apply (tc->ch_tflst, free);
-  list_free (tc->tflst);
-  list_free (tc->unch_sflst);
-  list_free (tc->ch_sflst);
-  list_free (tc->unch_tflst);
-  list_free (tc->ch_tflst);
+  check_list_apply (tc->tflst, free);
+  check_list_apply (tc->unch_sflst, free);
+  check_list_apply (tc->ch_sflst, free);
+  check_list_apply (tc->unch_tflst, free);
+  check_list_apply (tc->ch_tflst, free);
+  check_list_free (tc->tflst);
+  check_list_free (tc->unch_sflst);
+  check_list_free (tc->ch_sflst);
+  check_list_free (tc->unch_tflst);
+  check_list_free (tc->ch_tflst);
 
   free (tc);
 }
@@ -138,7 +177,7 @@
 {
   if (s == NULL || tc == NULL)
     return;
-  list_add_end (s->tclst, tc);
+  check_list_add_end (s->tclst, tc);
 }
 
 void
@@ -146,23 +185,25 @@
     int allowed_exit_value, int start, int end)
 {
   TF *tf;
+
   if (tc == NULL || fn == NULL || name == NULL)
     return;
-  tf = emalloc (sizeof (TF));   /* freed in tcase_free */
+  tf = (TF *) emalloc (sizeof (TF));    /* freed in tcase_free */
   tf->fn = fn;
   tf->loop_start = start;
   tf->loop_end = end;
   tf->signal = _signal;         /* 0 means no signal expected */
-  tf->allowed_exit_value = allowed_exit_value;  /* 0 is default successful exit */
+  tf->allowed_exit_value = (WEXITSTATUS_MASK & allowed_exit_value);     /* 0 is default successful exit */
   tf->name = name;
-  list_add_end (tc->tflst, tf);
+  check_list_add_end (tc->tflst, tf);
 }
 
 static Fixture *
 fixture_create (SFun fun, int ischecked)
 {
   Fixture *f;
-  f = emalloc (sizeof (Fixture));
+
+  f = (Fixture *) emalloc (sizeof (Fixture));
   f->fun = fun;
   f->ischecked = ischecked;
 
@@ -186,33 +227,48 @@
 {
   if (setup) {
     if (ischecked)
-      list_add_end (tc->ch_sflst, fixture_create (setup, ischecked));
+      check_list_add_end (tc->ch_sflst, fixture_create (setup, ischecked));
     else
-      list_add_end (tc->unch_sflst, fixture_create (setup, ischecked));
+      check_list_add_end (tc->unch_sflst, fixture_create (setup, ischecked));
   }
 
   /* Add teardowns at front so they are run in reverse order. */
   if (teardown) {
     if (ischecked)
-      list_add_front (tc->ch_tflst, fixture_create (teardown, ischecked));
+      check_list_add_front (tc->ch_tflst, fixture_create (teardown, ischecked));
     else
-      list_add_front (tc->unch_tflst, fixture_create (teardown, ischecked));
+      check_list_add_front (tc->unch_tflst,
+          fixture_create (teardown, ischecked));
   }
 }
 
 void
-tcase_set_timeout (TCase * tc, int timeout)
+tcase_set_timeout (TCase * tc, double timeout)
 {
+#if defined(HAVE_FORK)
   if (timeout >= 0) {
     char *env = getenv ("CK_TIMEOUT_MULTIPLIER");
+
     if (env != NULL) {
-      int tmp = atoi (env);
-      if (tmp >= 0) {
+      char *endptr = NULL;
+      double tmp = strtod (env, &endptr);
+
+      if (tmp >= 0 && endptr != env && (*endptr) == '\0') {
         timeout = timeout * tmp;
       }
     }
-    tc->timeout = timeout;
+
+    tc->timeout.tv_sec = (time_t) floor (timeout);
+    tc->timeout.tv_nsec =
+        (long) ((timeout - floor (timeout)) * (double) NANOS_PER_SECONDS);
   }
+#else
+  (void) tc;
+  (void) timeout;
+  eprintf
+      ("This version does not support timeouts, as fork is not supported",
+      __FILE__, __LINE__);
+#endif /* HAVE_FORK */
 }
 
 void
@@ -230,44 +286,57 @@
 }
 
 void
-_fail_unless (int result, const char *file, int line, const char *expr, ...)
+_ck_assert_failed (const char *file, int line, const char *expr, ...)
 {
   const char *msg;
+  va_list ap;
+  char buf[BUFSIZ];
 
   send_loc_info (file, line);
-  if (!result) {
-    va_list ap;
-    char buf[BUFSIZ];
 
-    va_start (ap, expr);
-    msg = (const char *) va_arg (ap, char *);
-    if (msg == NULL)
-      msg = expr;
-    vsnprintf (buf, BUFSIZ, msg, ap);
-    va_end (ap);
-    send_failure_info (buf);
-    if (cur_fork_status () == CK_FORK) {
-#ifdef _POSIX_VERSION
-      _exit (1);
-#endif /* _POSIX_VERSION */
-    }
+  va_start (ap, expr);
+  msg = (const char *) va_arg (ap, char *);
+
+  if (msg == NULL)
+    msg = expr;
+  vsnprintf (buf, BUFSIZ, msg, ap);
+  va_end (ap);
+  send_failure_info (buf);
+  if (cur_fork_status () == CK_FORK) {
+#if defined(HAVE_FORK) && HAVE_FORK==1
+    _exit (1);
+#endif /* HAVE_FORK */
+  } else {
+    longjmp (error_jmp_buffer, 1);
   }
 }
 
 SRunner *
 srunner_create (Suite * s)
 {
-  SRunner *sr = emalloc (sizeof (SRunner));     /* freed in srunner_free */
+  SRunner *sr = (SRunner *) emalloc (sizeof (SRunner)); /* freed in srunner_free */
+
   sr->slst = check_list_create ();
   if (s != NULL)
-    list_add_end (sr->slst, s);
-  sr->stats = emalloc (sizeof (TestStats));     /* freed in srunner_free */
+    check_list_add_end (sr->slst, s);
+  sr->stats = (TestStats *) emalloc (sizeof (TestStats));       /* freed in srunner_free */
   sr->stats->n_checked = sr->stats->n_failed = sr->stats->n_errors = 0;
   sr->resultlst = check_list_create ();
   sr->log_fname = NULL;
   sr->xml_fname = NULL;
+  sr->tap_fname = NULL;
   sr->loglst = NULL;
+
+#if defined(HAVE_FORK)
   sr->fstat = CK_FORK_GETENV;
+#else
+  /*
+   * Overriding the default of running tests in fork mode,
+   * as this system does not have fork()
+   */
+  sr->fstat = CK_NOFORK;
+#endif /* HAVE_FORK */
+
   return sr;
 }
 
@@ -277,7 +346,7 @@
   if (s == NULL)
     return;
 
-  list_add_end (sr->slst, s);
+  check_list_add_end (sr->slst, s);
 }
 
 void
@@ -285,24 +354,23 @@
 {
   List *l;
   TestResult *tr;
+
   if (sr == NULL)
     return;
 
   free (sr->stats);
   l = sr->slst;
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    suite_free (list_val (l));
+  for (check_list_front (l); !check_list_at_end (l); check_list_advance (l)) {
+    suite_free ((Suite *) check_list_val (l));
   }
-  list_free (sr->slst);
+  check_list_free (sr->slst);
 
   l = sr->resultlst;
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    tr = list_val (l);
-    free (tr->file);
-    free (tr->msg);
-    free (tr);
+  for (check_list_front (l); !check_list_at_end (l); check_list_advance (l)) {
+    tr = (TestResult *) check_list_val (l);
+    tr_free (tr);
   }
-  list_free (sr->resultlst);
+  check_list_free (sr->resultlst);
 
   free (sr);
 }
@@ -325,11 +393,16 @@
   int i = 0;
   TestResult **trarray;
   List *rlst;
-  trarray = malloc (sizeof (trarray[0]) * srunner_ntests_failed (sr));
+
+  trarray =
+      (TestResult **) emalloc (sizeof (trarray[0]) *
+      srunner_ntests_failed (sr));
 
   rlst = sr->resultlst;
-  for (list_front (rlst); !list_at_end (rlst); list_advance (rlst)) {
-    TestResult *tr = list_val (rlst);
+  for (check_list_front (rlst); !check_list_at_end (rlst);
+      check_list_advance (rlst)) {
+    TestResult *tr = (TestResult *) check_list_val (rlst);
+
     if (non_pass (tr->rtype))
       trarray[i++] = tr;
 
@@ -344,11 +417,13 @@
   TestResult **trarray;
   List *rlst;
 
-  trarray = malloc (sizeof (trarray[0]) * srunner_ntests_run (sr));
+  trarray =
+      (TestResult **) emalloc (sizeof (trarray[0]) * srunner_ntests_run (sr));
 
   rlst = sr->resultlst;
-  for (list_front (rlst); !list_at_end (rlst); list_advance (rlst)) {
-    trarray[i++] = list_val (rlst);
+  for (check_list_front (rlst); !check_list_at_end (rlst);
+      check_list_advance (rlst)) {
+    trarray[i++] = (TestResult *) check_list_val (rlst);
   }
   return trarray;
 }
@@ -364,17 +439,11 @@
 {
   TestResult *tr;
 
-  tr = emalloc (sizeof (TestResult));
+  tr = (TestResult *) emalloc (sizeof (TestResult));
   tr_init (tr);
   return tr;
 }
 
-void
-tr_reset (TestResult * tr)
-{
-  tr_init (tr);
-}
-
 static void
 tr_init (TestResult * tr)
 {
@@ -385,6 +454,15 @@
   tr->file = NULL;
   tr->tcname = NULL;
   tr->tname = NULL;
+  tr->duration = -1;
+}
+
+void
+tr_free (TestResult * tr)
+{
+  free (tr->file);
+  free (tr->msg);
+  free (tr);
 }
 
 
@@ -424,7 +502,7 @@
   return tr->tcname;
 }
 
-static int _fstat = CK_FORK;
+static enum fork_status _fstat = CK_FORK;
 
 void
 set_fork_status (enum fork_status fstat)
@@ -440,3 +518,41 @@
 {
   return _fstat;
 }
+
+/**
+ * Not all systems support the same clockid_t's. This call checks
+ * if the CLOCK_MONOTONIC clockid_t is valid. If so, that is returned,
+ * otherwise, CLOCK_REALTIME is returned.
+ *
+ * The clockid_t that was found to work on the first call is
+ * cached for subsequent calls.
+ */
+clockid_t
+check_get_clockid ()
+{
+  static clockid_t clockid = -1;
+
+  if (clockid == -1) {
+/*
+ * Only check if we have librt available. Otherwise, the clockid
+ * will be ignored anyway, as the clock_gettime() and
+ * timer_create() functions will be re-implemented in libcompat.
+ * Worse, if librt and alarm() are unavailable, this check
+ * will result in an assert(0).
+ */
+#if defined(HAVE_POSIX_TIMERS) && defined(HAVE_MONOTONIC_CLOCK)
+    timer_t timerid;
+
+    if (timer_create (CLOCK_MONOTONIC, NULL, &timerid) == 0) {
+      timer_delete (timerid);
+      clockid = CLOCK_MONOTONIC;
+    } else {
+      clockid = CLOCK_REALTIME;
+    }
+#else
+    clockid = CLOCK_MONOTONIC;
+#endif
+  }
+
+  return clockid;
+}
diff --git a/libs/gst/check/libcheck/check.h b/libs/gst/check/libcheck/check.h
deleted file mode 100644
index 25dac71..0000000
--- a/libs/gst/check/libcheck/check.h
+++ /dev/null
@@ -1,418 +0,0 @@
-/*-*- mode:C; -*- */
-/*
- * Check: a unit test framework for C
- * Copyright (C) 2001, 2002, Arien Malec
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef CHECK_H
-#define CHECK_H
-
-#include <stddef.h>
-#include <string.h>
-
-/* Check: a unit test framework for C
-
-   Check is a unit test framework for C. It features a simple
-   interface for defining unit tests, putting little in the way of the
-   developer. Tests are run in a separate address space, so Check can
-   catch both assertion failures and code errors that cause
-   segmentation faults or other signals. The output from unit tests
-   can be used within source code editors and IDEs.
-
-   Unit tests are created with the START_TEST/END_TEST macro
-   pair. The fail_unless and fail macros are used for creating
-   checks within unit tests; the mark_point macro is useful for
-   trapping the location of signals and/or early exits.
-
-
-   Test cases are created with tcase_create, unit tests are added
-   with tcase_add_test
-
-
-   Suites are created with suite_create; test cases are added
-   with suite_add_tcase
-
-   Suites are run through an SRunner, which is created with
-   srunner_create. Additional suites can be added to an SRunner with
-   srunner_add_suite. An SRunner is freed with srunner_free, which also
-   frees all suites added to the runner. 
-
-   Use srunner_run_all to run a suite and print results.
-
-   Macros and functions starting with _ (underscore) are internal and
-   may change without notice. You have been warned!.
-
-*/
-
-
-#ifdef __cplusplus
-#define CK_CPPSTART extern "C" {
-#define CK_CPPEND }
-CK_CPPSTART
-#endif
-
-#if defined(__GNUC__) && defined(__GNUC_MINOR__)
-#define GCC_VERSION_AT_LEAST(major, minor) \
-((__GNUC__ > (major)) || \
- (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
-#else
-#define GCC_VERSION_AT_LEAST(major, minor) 0
-#endif
-
-#if GCC_VERSION_AT_LEAST(2,95)
-#define CK_ATTRIBUTE_UNUSED __attribute__ ((unused))
-#else
-#define CK_ATTRIBUTE_UNUSED              
-#endif /* GCC 2.95 */
-
-#include <sys/types.h>
-
-/* Used to create the linker script for hiding lib-local symbols. Shall
-   be put directly in front of the exported symbol. */
-#define CK_EXPORT
-
-/* check version numbers */
-  
-#define CHECK_MAJOR_VERSION (0)
-#define CHECK_MINOR_VERSION (9)
-#define CHECK_MICRO_VERSION (8)
-
-extern int CK_EXPORT check_major_version;
-extern int CK_EXPORT check_minor_version;
-extern int CK_EXPORT check_micro_version;
-
-#ifndef NULL
-#define NULL ((void*)0)
-#endif
-
-/* opaque type for a test case
-
-   A TCase represents a test case.  Create with tcase_create, free
-   with tcase_free.  For the moment, test cases can only be run
-   through a suite
-*/
-typedef struct TCase TCase; 
-
-/* type for a test function */
-typedef void (*TFun) (int);
-
-/* type for a setup/teardown function */
-typedef void (*SFun) (void);
- 
-/* Opaque type for a test suite */
-typedef struct Suite Suite;
- 
-/* Creates a test suite with the given name */
-Suite * CK_EXPORT suite_create (const char *name);
-
-/* Add a test case to a suite */
-void CK_EXPORT suite_add_tcase (Suite *s, TCase *tc);
-
-/* Create a test case */
-TCase * CK_EXPORT tcase_create (const char *name);
-
-/* Add a test function to a test case (macro version) */
-#define tcase_add_test(tc,tf) tcase_add_test_raise_signal(tc,tf,0)
-
-/* Add a test function with signal handling to a test case (macro version) */
-#define tcase_add_test_raise_signal(tc,tf,signal) \
-   _tcase_add_test((tc),(tf),"" # tf "",(signal), 0, 0, 1)
-
-/* Add a test function with an expected exit value to a test case (macro version) */
-#define tcase_add_exit_test(tc, tf, expected_exit_value) \
-  _tcase_add_test((tc),(tf),"" # tf "",0,(expected_exit_value),0,1)
-
-/* Add a looping test function to a test case (macro version)
-
-   The test will be called in a for(i = s; i < e; i++) loop with each
-   iteration being executed in a new context. The loop variable 'i' is
-   available in the test.
- */
-#define tcase_add_loop_test(tc,tf,s,e) \
-  _tcase_add_test((tc),(tf),"" # tf "",0,0,(s),(e))
- 
-/* Signal version of loop test.  
-   FIXME: add a test case; this is untested as part of Check's tests.
- */
-#define tcase_add_loop_test_raise_signal(tc,tf,signal,s,e) \
-  _tcase_add_test((tc),(tf),"" # tf "",(signal),0,(s),(e))
-
-/* allowed exit value version of loop test. */
-#define tcase_add_loop_exit_test(tc,tf,expected_exit_value,s,e) \
-  _tcase_add_test((tc),(tf),"" # tf "",0,(expected_exit_value),(s),(e))
-
-/* Add a test function to a test case
-  (function version -- use this when the macro won't work
-*/
-void CK_EXPORT _tcase_add_test (TCase *tc, TFun tf, const char *fname, int _signal, int allowed_exit_value, int start, int end);
-
-/* Add unchecked fixture setup/teardown functions to a test case
-
-   If unchecked fixture functions are run at the start and end of the
-   test case, and not before and after unit tests. Note that unchecked
-   setup/teardown functions are not run in a separate address space,
-   like test functions, and so must not exit or signal (e.g.,
-   segfault)
-
-   Also, when run in CK_NOFORK mode, unchecked fixture functions may
-   lead to different unit test behavior IF unit tests change data
-   setup by the fixture functions.
-*/
-void CK_EXPORT tcase_add_unchecked_fixture (TCase *tc, SFun setup, SFun teardown);
-
-/* Add fixture setup/teardown functions to a test case
-
-   Checked fixture functions are run before and after unit
-   tests. Unlike unchecked fixture functions, checked fixture
-   functions are run in the same separate address space as the test
-   program, and thus the test function will survive signals or
-   unexpected exits in the fixture function. Also, IF the setup
-   function is idempotent, unit test behavior will be the same in
-   CK_FORK and CK_NOFORK modes.
-
-   However, since fixture functions are run before and after each unit
-   test, they should not be expensive code.
-
-*/ 
-void CK_EXPORT tcase_add_checked_fixture (TCase *tc, SFun setup, SFun teardown);
-
-/* Set the timeout for all tests in a test case. A test that lasts longer
-   than the timeout (in seconds) will be killed and thus fail with an error.
-   The timeout can also be set globaly with the environment variable
-   CK_DEFAULT_TIMEOUT, the specific setting always takes precedence.
-*/
-void CK_EXPORT tcase_set_timeout (TCase *tc, int timeout);
- 
-/* Internal function to mark the start of a test function */
-void CK_EXPORT tcase_fn_start (const char *fname, const char *file, int line);
-
-/* Start a unit test with START_TEST(unit_name), end with END_TEST
-   One must use braces within a START_/END_ pair to declare new variables
-*/ 
-#define START_TEST(__testname)\
-static void __testname (int _i CK_ATTRIBUTE_UNUSED)\
-{\
-  tcase_fn_start (""# __testname, __FILE__, __LINE__);
-
-/* End a unit test */
-#define END_TEST }
-
-/* Fail the test case unless expr is true */
-/* The space before the comma sign before ## is essential to be compatible
-   with gcc 2.95.3 and earlier.
-*/
-#define fail_unless(expr, ...)\
-        _fail_unless(expr, __FILE__, __LINE__,\
-        "Assertion '"#expr"' failed" , ## __VA_ARGS__, NULL)
-
-/* Fail the test case if expr is true */
-/* The space before the comma sign before ## is essential to be compatible
-   with gcc 2.95.3 and earlier.
-*/
-
-/* FIXME: these macros may conflict with C89 if expr is 
-   FIXME:   strcmp (str1, str2) due to excessive string length. */
-#define fail_if(expr, ...)\
-        _fail_unless(!(expr), __FILE__, __LINE__,\
-        "Failure '"#expr"' occured" , ## __VA_ARGS__, NULL)
-
-/* Always fail */
-#define fail(...) _fail_unless(0, __FILE__, __LINE__, "Failed", __VA_ARGS__, NULL)
-
-/* Non macro version of #fail_unless, with more complicated interface */
-void CK_EXPORT _fail_unless (int result, const char *file,
-                             int line, const char *expr, ...);
-
-/* New check fail API. */
-#define ck_abort() ck_abort_msg(NULL)
-#define ck_abort_msg fail
-#define ck_assert(C) ck_assert_msg(C, NULL)
-#define ck_assert_msg fail_unless
-
-/* Integer comparsion macros with improved output compared to fail_unless(). */
-/* O may be any comparion operator. */
-#define _ck_assert_int(X, O, Y) ck_assert_msg((X) O (Y), "Assertion '"#X#O#Y"' failed: "#X"==%d, "#Y"==%d", X, Y) 
-#define ck_assert_int_eq(X, Y) _ck_assert_int(X, ==, Y) 
-#define ck_assert_int_ne(X, Y) _ck_assert_int(X, !=, Y) 
-
-/* String comparsion macros with improved output compared to fail_unless() */
-#define _ck_assert_str(C, X, O, Y) ck_assert_msg(C, "Assertion '"#X#O#Y"' failed: "#X"==\"%s\", "#Y"==\"%s\"", X, Y) 
-#define ck_assert_str_eq(X, Y) _ck_assert_str(!strcmp(X, Y), X, ==, Y)
-#define ck_assert_str_ne(X, Y) _ck_assert_str(strcmp(X, Y), X, !=, Y)
-
-
-/* Mark the last point reached in a unit test
-   (useful for tracking down where a segfault, etc. occurs)
-*/
-#define mark_point() _mark_point(__FILE__,__LINE__)
-
-/* Non macro version of #mark_point */
-void CK_EXPORT _mark_point (const char *file, int line);
-
-/* Result of a test */
-enum test_result {
-  CK_TEST_RESULT_INVALID, /* Default value; should not encounter this */
-  CK_PASS, /* Test passed*/
-  CK_FAILURE, /* Test completed but failed */
-  CK_ERROR /* Test failed to complete
-	      (unexpected signal or non-zero early exit) */ 
-};
-
-/* Specifies the how much output an SRunner should produce */
-enum print_output {
-  CK_SILENT, /* No output */
-  CK_MINIMAL, /* Only summary output */
-  CK_NORMAL, /* All failed tests */
-  CK_VERBOSE, /* All tests */
-  CK_ENV, /* Look at environment var */
-#if 0
-  CK_SUBUNIT, /* Run as a subunit child process */
-#endif
-  CK_LAST
-};
-
-/* Holds state for a running of a test suite */
-typedef struct SRunner SRunner;
-
-/* Opaque type for a test failure */
-typedef struct TestResult TestResult;
-
-/* accessors for tr fields */
-enum ck_result_ctx {
-  CK_CTX_INVALID, /* Default value; should not encounter this */
-  CK_CTX_SETUP,
-  CK_CTX_TEST,
-  CK_CTX_TEARDOWN
-};
-
-/* Type of result */
-int CK_EXPORT tr_rtype (TestResult *tr);
-/* Context in which the result occurred */ 
-enum ck_result_ctx CK_EXPORT tr_ctx (TestResult *tr); 
-/* Failure message */
-const char * CK_EXPORT tr_msg (TestResult *tr);
-/* Line number at which failure occured */
-int CK_EXPORT tr_lno (TestResult *tr);
-/* File name at which failure occured */
-const char * CK_EXPORT tr_lfile (TestResult *tr);
-/* Test case in which unit test was run */
-const char * CK_EXPORT tr_tcname (TestResult *tr);
-
-/* Creates an SRunner for the given suite */
-SRunner * CK_EXPORT srunner_create (Suite *s);
-
-/* Adds a Suite to an SRunner */
-void CK_EXPORT srunner_add_suite (SRunner *sr, Suite *s);
-
-/* Frees an SRunner, all suites added to it and all contained test cases */
-void CK_EXPORT srunner_free (SRunner *sr);
-
- 
-/* Test running */
-
-/* Runs an SRunner, printing results as specified (see enum print_output) */
-void CK_EXPORT srunner_run_all (SRunner *sr, enum print_output print_mode);
-
- 
-/* Next functions are valid only after the suite has been
-   completely run, of course */
-
-/* Number of failed tests in a run suite. Includes failures + errors */
-int CK_EXPORT srunner_ntests_failed (SRunner *sr);
-
-/* Total number of tests run in a run suite */
-int CK_EXPORT srunner_ntests_run (SRunner *sr);
-
-/* Return an array of results for all failures
-  
-   Number of failures is equal to srunner_nfailed_tests.  Memory for
-   the array is malloc'ed and must be freed, but individual TestResults
-   must not
-*/
-TestResult ** CK_EXPORT srunner_failures (SRunner *sr);
-
-/* Return an array of results for all run tests
-
-   Number of results is equal to srunner_ntests_run, and excludes
-   failures due to setup function failure.
-
-   Memory is malloc'ed and must be freed, but individual TestResults
-   must not
-*/  
-TestResult ** CK_EXPORT srunner_results (SRunner *sr);
-
- 
-/* Printing */
-
-/* Print the results contained in an SRunner */
-void CK_EXPORT srunner_print (SRunner *sr, enum print_output print_mode);
-  
-  
-/* Set a log file to which to write during test running.
-
-  Log file setting is an initialize only operation -- it should be
-  done immediatly after SRunner creation, and the log file can't be
-  changed after being set.
-*/
-void CK_EXPORT srunner_set_log (SRunner *sr, const char *fname);
-
-/* Does the SRunner have a log file? */
-int CK_EXPORT srunner_has_log (SRunner *sr);
-
-/* Return the name of the log file, or NULL if none */
-const char * CK_EXPORT srunner_log_fname (SRunner *sr);
-
-/* Set a xml file to which to write during test running.
-
-  XML file setting is an initialize only operation -- it should be
-  done immediatly after SRunner creation, and the XML file can't be
-  changed after being set.
-*/
-void CK_EXPORT srunner_set_xml (SRunner *sr, const char *fname);
-
-/* Does the SRunner have an XML log file? */
-int CK_EXPORT srunner_has_xml (SRunner *sr);
-
-/* Return the name of the XML file, or NULL if none */
-const char * CK_EXPORT srunner_xml_fname (SRunner *sr);
-
-
-/* Control forking */
-enum fork_status {
-  CK_FORK_GETENV, /* look in the environment for CK_FORK */
-  CK_FORK,        /* call fork to run tests */
-  CK_NOFORK       /* don't call fork */
-};
- 
-/* Get the current fork status */
-enum fork_status CK_EXPORT srunner_fork_status (SRunner *sr);
-
-/* Set the current fork status */
-void CK_EXPORT srunner_set_fork_status (SRunner *sr, enum fork_status fstat); 
-  
-/* Fork in a test and make sure messaging and tests work. */
-pid_t CK_EXPORT check_fork(void);
-
-/* Wait for the pid and exit. If pid is zero, just exit. */
-void CK_EXPORT check_waitpid_and_exit(pid_t pid);
-
-#ifdef __cplusplus 
-CK_CPPEND
-#endif
-
-#endif /* CHECK_H */
diff --git a/libs/gst/check/libcheck/check.h.in b/libs/gst/check/libcheck/check.h.in
index 3741ad0..996be7b 100644
--- a/libs/gst/check/libcheck/check.h.in
+++ b/libs/gst/check/libcheck/check.h.in
@@ -15,8 +15,8 @@
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
  */
 
 #ifndef CHECK_H
@@ -25,38 +25,9 @@
 #include <stddef.h>
 #include <string.h>
 
-/* Check: a unit test framework for C
-
-   Check is a unit test framework for C. It features a simple
-   interface for defining unit tests, putting little in the way of the
-   developer. Tests are run in a separate address space, so Check can
-   catch both assertion failures and code errors that cause
-   segmentation faults or other signals. The output from unit tests
-   can be used within source code editors and IDEs.
-
-   Unit tests are created with the START_TEST/END_TEST macro
-   pair. The fail_unless and fail macros are used for creating
-   checks within unit tests; the mark_point macro is useful for
-   trapping the location of signals and/or early exits.
-
-
-   Test cases are created with tcase_create, unit tests are added
-   with tcase_add_test
-
-
-   Suites are created with suite_create; test cases are added
-   with suite_add_tcase
-
-   Suites are run through an SRunner, which is created with
-   srunner_create. Additional suites can be added to an SRunner with
-   srunner_add_suite. An SRunner is freed with srunner_free, which also
-   frees all suites added to the runner. 
-
-   Use srunner_run_all to run a suite and print results.
-
+/*
    Macros and functions starting with _ (underscore) are internal and
    may change without notice. You have been warned!.
-
 */
 
 
@@ -65,7 +36,6 @@
 #define CK_CPPEND }
 CK_CPPSTART
 #endif
-
 #if defined(__GNUC__) && defined(__GNUC_MINOR__)
 #define GCC_VERSION_AT_LEAST(major, minor) \
 ((__GNUC__ > (major)) || \
@@ -73,346 +43,1200 @@
 #else
 #define GCC_VERSION_AT_LEAST(major, minor) 0
 #endif
-
 #if GCC_VERSION_AT_LEAST(2,95)
 #define CK_ATTRIBUTE_UNUSED __attribute__ ((unused))
 #else
-#define CK_ATTRIBUTE_UNUSED              
+#define CK_ATTRIBUTE_UNUSED
 #endif /* GCC 2.95 */
-
+#if GCC_VERSION_AT_LEAST(2,5)
+#define CK_ATTRIBUTE_NORETURN __attribute__ ((noreturn))
+#else
+#define CK_ATTRIBUTE_NORETURN
+#endif /* GCC 2.5 */
 #include <sys/types.h>
-
-/* Used to create the linker script for hiding lib-local symbols. Shall
-   be put directly in front of the exported symbol. */
+/*
+ * Used to create the linker script for hiding lib-local symbols. Shall
+ * be put directly in front of the exported symbol.
+ */
 #define CK_EXPORT
-
+/*
+ * Used for MSVC to create the export attribute
+ * CK_DLL_EXP is defined during the compilation of the library
+ * on the command line.
+ */
+#ifndef CK_DLL_EXP
+#define CK_DLL_EXP
+#endif
 /* check version numbers */
-  
 #define CHECK_MAJOR_VERSION (@CHECK_MAJOR_VERSION@)
 #define CHECK_MINOR_VERSION (@CHECK_MINOR_VERSION@)
 #define CHECK_MICRO_VERSION (@CHECK_MICRO_VERSION@)
-
-extern int CK_EXPORT check_major_version;
-extern int CK_EXPORT check_minor_version;
-extern int CK_EXPORT check_micro_version;
+CK_DLL_EXP extern int CK_EXPORT check_major_version;
+CK_DLL_EXP extern int CK_EXPORT check_minor_version;
+CK_DLL_EXP extern int CK_EXPORT check_micro_version;
 
 #ifndef NULL
 #define NULL ((void*)0)
 #endif
 
-/* opaque type for a test case
-
-   A TCase represents a test case.  Create with tcase_create, free
-   with tcase_free.  For the moment, test cases can only be run
-   through a suite
+/**
+ * Type for a test case
+ *
+ * A TCase represents a test case.  Create with tcase_create, free
+ * with tcase_free.  For the moment, test cases can only be run
+ * through a suite
 */
-typedef struct TCase TCase; 
+typedef struct TCase TCase;
 
-/* type for a test function */
+/**
+ * Type for a test function
+ */
 typedef void (*TFun) (int);
 
-/* type for a setup/teardown function */
+/**
+ * Type for a setup/teardown function
+ */
 typedef void (*SFun) (void);
- 
-/* Opaque type for a test suite */
+
+/**
+ * Type for a test suite
+ */
 typedef struct Suite Suite;
- 
-/* Creates a test suite with the given name */
-Suite * CK_EXPORT suite_create (const char *name);
 
-/* Add a test case to a suite */
-void CK_EXPORT suite_add_tcase (Suite *s, TCase *tc);
+/**
+ * Creates a test suite with the given name.
+ *
+ * Create a suite, which will contain test cases. Once
+ * created, use suite_add_tcase() to add test cases.
+ * When finished, create a suite runner from the
+ * suite using srunner_create()
+ *
+ * @param name name of the suite
+ *
+ * @return suite
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP Suite *CK_EXPORT suite_create (const char *name);
 
-/* Create a test case */
-TCase * CK_EXPORT tcase_create (const char *name);
+/**
+ * Determines whether a given test suite contains a case named after a
+ * given string.
+ *
+ * @param s suite to check
+ * @param tcname test case to look for
+ *
+ * @return 1 iff the given test case is within the given suite;
+ *          0 otherwise
+ *
+ * @since 0.9.9
+ */
+CK_DLL_EXP int CK_EXPORT suite_tcase (Suite * s, const char *tcname);
 
-/* Add a test function to a test case (macro version) */
+/**
+ * Add a test case to a suite
+ *
+ * @param s suite to add test case to
+ * @param tc test case to add to suite
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP void CK_EXPORT suite_add_tcase (Suite * s, TCase * tc);
+
+/**
+ * Create a test case.
+ *
+ * Once created, tests can be added with the tcase_add_test()
+ * function, and the test case assigned to a suite with the
+ * suite_add_tcase() function.
+ *
+ * @param name name of the test case
+ *
+ * @return test case containing no tests
+ *
+ * @since 0.6.0
+ * */
+CK_DLL_EXP TCase *CK_EXPORT tcase_create (const char *name);
+
+/**
+ * Add a test function to a test case
+ *
+ * @param tc test case to add test to
+ * @param tf test function to add to test case
+ *
+ * @since 0.6.0
+ * */
 #define tcase_add_test(tc,tf) tcase_add_test_raise_signal(tc,tf,0)
 
-/* Add a test function with signal handling to a test case (macro version) */
+/**
+ * Add a test function with signal handling to a test case
+ *
+ * The added test is expected to terminate by throwing the given signal
+ *
+ * @param tc test case to add test to
+ * @param tf test function to add to test case
+ * @param signal expected signal for test function to throw in order for
+ *                the test to be considered passing
+ *
+ * @since 0.9.2
+ * */
 #define tcase_add_test_raise_signal(tc,tf,signal) \
    _tcase_add_test((tc),(tf),"" # tf "",(signal), 0, 0, 1)
 
-/* Add a test function with an expected exit value to a test case (macro version) */
+/**
+ * Add a test function with an expected exit value to a test case
+ *
+ * The added test is expected to terminate by exiting with the given value
+ *
+ * @param tc test case to add test to
+ * @param tf test function to add to test case
+ * @param expected_exit_value exit value for test function to return in
+ *                             order for the test to be considered passing
+ *
+ * @since 0.9.7
+ */
 #define tcase_add_exit_test(tc, tf, expected_exit_value) \
   _tcase_add_test((tc),(tf),"" # tf "",0,(expected_exit_value),0,1)
 
-/* Add a looping test function to a test case (macro version)
-
-   The test will be called in a for(i = s; i < e; i++) loop with each
-   iteration being executed in a new context. The loop variable 'i' is
-   available in the test.
+/**
+ * Add a looping test function to a test case
+ *
+ * The test will be called in a for(i = s; i < e; i++) loop with each
+ * iteration being executed in a new context. The loop variable 'i' is
+ * available in the test.
+ *
+ * @param tc test case to add test to
+ * @param tf function to add to test case
+ * @param s starting index for value "i" in test
+ * @param e ending index for value "i" in test
+ *
+ * @since 0.9.4
  */
 #define tcase_add_loop_test(tc,tf,s,e) \
   _tcase_add_test((tc),(tf),"" # tf "",0,0,(s),(e))
- 
-/* Signal version of loop test.  
-   FIXME: add a test case; this is untested as part of Check's tests.
+
+/**
+ * Add a looping test function with signal handling to a test case
+ *
+ * The test will be called in a for(i = s; i < e; i++) loop with each
+ * iteration being executed in a new context. The loop variable 'i' is
+ * available in the test.
+ *
+ * The added test is expected to terminate by throwing the given signal
+ *
+ * @param tc test case to add test to
+ * @param tf function to add to test case
+ * @param signal expected signal for test function to throw in order for
+ *                the test to be considered passing
+ * @param s starting index for value "i" in test
+ * @param e ending index for value "i" in test
+ *
+ * @since 0.9.5
  */
 #define tcase_add_loop_test_raise_signal(tc,tf,signal,s,e) \
   _tcase_add_test((tc),(tf),"" # tf "",(signal),0,(s),(e))
 
-/* allowed exit value version of loop test. */
+/**
+ * Add a looping test function with an expected exit value to a test case
+ *
+ * The test will be called in a for(i = s; i < e; i++) loop with each
+ * iteration being executed in a new context. The loop variable 'i' is
+ * available in the test.
+ *
+ * The added test is expected to terminate by exiting with the given value
+ *
+ * @param tc test case to add test to
+ * @param tf function to add to test case
+ * @param expected_exit_value exit value for test function to return in
+ *                             order for the test to be considered passing
+ * @param s starting index for value "i" in test
+ * @param e ending index for value "i" in test
+ *
+ * @since 0.9.7
+ */
 #define tcase_add_loop_exit_test(tc,tf,expected_exit_value,s,e) \
   _tcase_add_test((tc),(tf),"" # tf "",0,(expected_exit_value),(s),(e))
 
 /* Add a test function to a test case
   (function version -- use this when the macro won't work
 */
-void CK_EXPORT _tcase_add_test (TCase *tc, TFun tf, const char *fname, int _signal, int allowed_exit_value, int start, int end);
+CK_DLL_EXP void CK_EXPORT _tcase_add_test (TCase * tc, TFun tf,
+    const char *fname, int _signal, int allowed_exit_value, int start, int end);
 
-/* Add unchecked fixture setup/teardown functions to a test case
+/**
+ * Add unchecked fixture setup/teardown functions to a test case
+ *
+ * Unchecked fixture functions are run at the start and end of the
+ * test case, and not before and after unit tests. Further,
+ * unchecked fixture functions are not run in a separate address space,
+ * like test functions, and so must not exit or signal (e.g.,
+ * segfault).
+ *
+ * Also, when run in CK_NOFORK mode, unchecked fixture functions may
+ * lead to different unit test behavior if unit tests change data
+ * setup by the fixture functions.
+ *
+ * Note that if a setup function fails, the remaining setup functions
+ * will be omitted, as will the test case and the teardown functions.
+ * If a teardown function fails the remaining teardown functins will be
+ * omitted.
+ *
+ * @param tc test case to add unchecked fixture setup/teardown to
+ * @param setup function to add to be executed before the test case;
+ *               if NULL no setup function is added
+ * @param teardown function to add to be executed after the test case;
+ *               if NULL no teardown function is added
+ * @since 0.8.0
+ */
+CK_DLL_EXP void CK_EXPORT tcase_add_unchecked_fixture (TCase * tc, SFun setup,
+    SFun teardown);
 
-   If unchecked fixture functions are run at the start and end of the
-   test case, and not before and after unit tests. Note that unchecked
-   setup/teardown functions are not run in a separate address space,
-   like test functions, and so must not exit or signal (e.g.,
-   segfault)
-
-   Also, when run in CK_NOFORK mode, unchecked fixture functions may
-   lead to different unit test behavior IF unit tests change data
-   setup by the fixture functions.
+/**
+ * Add checked fixture setup/teardown functions to a test case
+ *
+ * Checked fixture functions are run before and after each unit test inside
+ * of the address space of the test. Thus, if using CK_FORK
+ * mode the separate process running the unit test will survive signals
+ * or unexpected exits in the fixture function. Also, if the setup
+ * function is idempotent, unit test behavior will be the same in
+ * CK_FORK and CK_NOFORK modes.
+ *
+ * However, since fixture functions are run before and after each unit
+ * test, they should not be expensive code.
+ *
+ * Note that if a setup function fails, the remaining setup functions
+ * will be omitted, as will the test and the teardown functions. If a
+ * teardown function fails the remaining teardown functins will be
+ * omitted.
+ *
+ * @param tc test case to add checked fixture setup/teardown to
+ * @param setup function to add to be executed before each unit test in
+ *               the test case;  if NULL no setup function is added
+ * @param teardown function to add to be executed after each unit test in
+ *               the test case; if NULL no teardown function is added
+ *
+ * @since 0.8.0
 */
-void CK_EXPORT tcase_add_unchecked_fixture (TCase *tc, SFun setup, SFun teardown);
+CK_DLL_EXP void CK_EXPORT tcase_add_checked_fixture (TCase * tc, SFun setup,
+    SFun teardown);
 
-/* Add fixture setup/teardown functions to a test case
+/**
+ * Set the timeout for all tests in a test case.
+ *
+ * A test that lasts longer than the timeout (in seconds) will be killed
+ * and thus fail with an error.
+ *
+ * If not set, the default timeout is one assigned at compile time. If
+ * the environment variable CK_DEFAULT_TIMEOUT is defined and no timeout
+ * is set, the value in the environment variable is used.
+ *
+ * @param tc test case to assign timeout to
+ * @param timeout to use, in seconds. If the value contains a decimal
+ *                 portion, but no high resolution timer is available,
+ *                 the value is rounded up to the nearest second.
+ *
+ * @since 0.9.2
+ */
+CK_DLL_EXP void CK_EXPORT tcase_set_timeout (TCase * tc, double timeout);
 
-   Checked fixture functions are run before and after unit
-   tests. Unlike unchecked fixture functions, checked fixture
-   functions are run in the same separate address space as the test
-   program, and thus the test function will survive signals or
-   unexpected exits in the fixture function. Also, IF the setup
-   function is idempotent, unit test behavior will be the same in
-   CK_FORK and CK_NOFORK modes.
-
-   However, since fixture functions are run before and after each unit
-   test, they should not be expensive code.
-
-*/ 
-void CK_EXPORT tcase_add_checked_fixture (TCase *tc, SFun setup, SFun teardown);
-
-/* Set the timeout for all tests in a test case. A test that lasts longer
-   than the timeout (in seconds) will be killed and thus fail with an error.
-   The timeout can also be set globaly with the environment variable
-   CK_DEFAULT_TIMEOUT, the specific setting always takes precedence.
-*/
-void CK_EXPORT tcase_set_timeout (TCase *tc, int timeout);
- 
 /* Internal function to mark the start of a test function */
-void CK_EXPORT tcase_fn_start (const char *fname, const char *file, int line);
+CK_DLL_EXP void CK_EXPORT tcase_fn_start (const char *fname, const char *file,
+    int line);
 
-/* Start a unit test with START_TEST(unit_name), end with END_TEST
-   One must use braces within a START_/END_ pair to declare new variables
-*/ 
+/**
+ * Start a unit test with START_TEST(unit_name), end with END_TEST.
+ *
+ * One must use braces within a START_/END_ pair to declare new variables
+ *
+ * @since 0.6.0
+ */
 #define START_TEST(__testname)\
 static void __testname (int _i CK_ATTRIBUTE_UNUSED)\
 {\
   tcase_fn_start (""# __testname, __FILE__, __LINE__);
 
-/* End a unit test */
+/**
+ *  End a unit test
+ *
+ * @since 0.6.0
+ */
 #define END_TEST }
 
-/* Fail the test case unless expr is true */
-/* The space before the comma sign before ## is essential to be compatible
-   with gcc 2.95.3 and earlier.
-*/
-#define fail_unless(expr, ...)\
-        _fail_unless(expr, __FILE__, __LINE__,\
-        "Assertion '"#expr"' failed" , ## __VA_ARGS__, NULL)
+/*
+ * Fail the test case unless expr is false
+ *
+ * This call is deprecated.
+ */
+#define fail_unless ck_assert_msg
 
-/* Fail the test case if expr is true */
-/* The space before the comma sign before ## is essential to be compatible
-   with gcc 2.95.3 and earlier.
-*/
-
-/* FIXME: these macros may conflict with C89 if expr is 
-   FIXME:   strcmp (str1, str2) due to excessive string length. */
+/*
+ * Fail the test case if expr is false
+ *
+ * This call is deprecated.
+ *
+ * NOTE: The space before the comma sign before ## is essential to be compatible
+ * with gcc 2.95.3 and earlier.
+ * FIXME: these macros may conflict with C89 if expr is
+ * FIXME:   strcmp (str1, str2) due to excessive string length.
+ */
 #define fail_if(expr, ...)\
-        _fail_unless(!(expr), __FILE__, __LINE__,\
-        "Failure '"#expr"' occured" , ## __VA_ARGS__, NULL)
+  (expr) ? \
+     _ck_assert_failed(__FILE__, __LINE__, "Failure '"#expr"' occurred" , ## __VA_ARGS__, NULL) \
+     : _mark_point(__FILE__, __LINE__)
 
-/* Always fail */
-#define fail(...) _fail_unless(0, __FILE__, __LINE__, "Failed", __VA_ARGS__, NULL)
+/*
+ * Fail the test
+ *
+ * This call is deprecated.
+ */
+#define fail ck_abort_msg
 
-/* Non macro version of #fail_unless, with more complicated interface */
-void CK_EXPORT _fail_unless (int result, const char *file,
-                             int line, const char *expr, ...);
+/*
+ * This is called whenever an assertion fails.
+ * Note that it only has the noreturn modifier when
+ * using fork. If fork is unavailable, the function
+ * calls longjmp() when a test assertion fails. Marking
+ * the function as noreturn causes gcc to make assumptions
+ * which are not valid, as longjmp() is like a return.
+ */
+#if @HAVE_FORK@
+CK_DLL_EXP void CK_EXPORT
+_ck_assert_failed (const char *file, int line, const char *expr, ...)
+    CK_ATTRIBUTE_NORETURN;
+#else
+CK_DLL_EXP void CK_EXPORT _ck_assert_failed (const char *file, int line,
+    const char *expr, ...);
+#endif
 
-/* New check fail API. */
+/**
+ * Fail the test if expression is false
+ *
+ * @param expr expression to evaluate
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
+#define ck_assert(expr) ck_assert_msg(expr, NULL)
+
+/* The space before the comma sign before ## is essential to be compatible
+   with gcc 2.95.3 and earlier.
+*/
+/**
+ * Fail the test if the expression is false; print message on failure
+ *
+ * @param expr expression to evaluate
+ * @param ... message to print (in printf format) if expression is false
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
+#define ck_assert_msg(expr, ...) \
+  (expr) ? \
+     _mark_point(__FILE__, __LINE__) : \
+     _ck_assert_failed(__FILE__, __LINE__, "Assertion '"#expr"' failed" , ## __VA_ARGS__, NULL)
+
+/**
+ * Unconditionally fail the test
+ *
+ * @note Once called, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
 #define ck_abort() ck_abort_msg(NULL)
-#define ck_abort_msg fail
-#define ck_assert(C) ck_assert_msg(C, NULL)
-#define ck_assert_msg fail_unless
+/**
+ * Unconditionally fail the test; print a message
+ *
+ * @param ... message to print (in printf format)
+ *
+ * @note Once called, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
+#define ck_abort_msg(...) _ck_assert_failed(__FILE__, __LINE__, "Failed" , ## __VA_ARGS__, NULL)
 
-/* Integer comparsion macros with improved output compared to fail_unless(). */
-/* O may be any comparion operator. */
-#define _ck_assert_int(X, O, Y) ck_assert_msg((X) O (Y), "Assertion '"#X#O#Y"' failed: "#X"==%d, "#Y"==%d", X, Y) 
-#define ck_assert_int_eq(X, Y) _ck_assert_int(X, ==, Y) 
-#define ck_assert_int_ne(X, Y) _ck_assert_int(X, !=, Y) 
+/* Signed and unsigned integer comparison macros with improved output compared to ck_assert(). */
+/* OP may be any comparison operator. */
+#define _ck_assert_int(X, OP, Y) do { \
+  gint64 _ck_x = (X); \
+  gint64 _ck_y = (Y); \
+  ck_assert_msg(_ck_x OP _ck_y, "Assertion '%s' failed: " \
+      "%s==%" G_GINT64_FORMAT ", %s==%" G_GINT64_FORMAT, #X#OP#Y, #X, _ck_x, #Y, _ck_y); \
+} while (0)
 
-/* String comparsion macros with improved output compared to fail_unless() */
-#define _ck_assert_str(C, X, O, Y) ck_assert_msg(C, "Assertion '"#X#O#Y"' failed: "#X"==\"%s\", "#Y"==\"%s\"", X, Y) 
-#define ck_assert_str_eq(X, Y) _ck_assert_str(!strcmp(X, Y), X, ==, Y)
-#define ck_assert_str_ne(X, Y) _ck_assert_str(strcmp(X, Y), X, !=, Y)
+/**
+ * Check two signed integers to determine if X==Y
+ *
+ * If not X==Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
+#define ck_assert_int_eq(X, Y) _ck_assert_int(X, ==, Y)
+/**
+ * Check two signed integers to determine if X!=Y
+ *
+ * If not X!=Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
+#define ck_assert_int_ne(X, Y) _ck_assert_int(X, !=, Y)
+/**
+ * Check two signed integers to determine if X<Y
+ *
+ * If not X<Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_int_lt(X, Y) _ck_assert_int(X, <, Y)
+/**
+ * Check two signed integers to determine if X<=Y
+ *
+ * If not X<=Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_int_le(X, Y) _ck_assert_int(X, <=, Y)
+/**
+ * Check two signed integers to determine if X>Y
+ *
+ * If not X>Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_int_gt(X, Y) _ck_assert_int(X, >, Y)
+/**
+ * Check two signed integers to determine if X>=Y
+ *
+ * If not X>=Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_int_ge(X, Y) _ck_assert_int(X, >=, Y)
 
+#define _ck_assert_uint(X, OP, Y) do { \
+  guint64 _ck_x = (X); \
+  guint64 _ck_y = (Y); \
+  ck_assert_msg(_ck_x OP _ck_y, "Assertion '%s' failed: " \
+      "%s==%" G_GUINT64_FORMAT ", %s==%" G_GUINT64_FORMAT, #X#OP#Y, #X, _ck_x, #Y, _ck_y); \
+} while (0)
+/**
+ * Check two unsigned integers to determine if X==Y
+ *
+ * If not X==Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_uint_eq(X, Y) _ck_assert_uint(X, ==, Y)
+/**
+ * Check two unsigned integers to determine if X!=Y
+ *
+ * If not X!=Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_uint_ne(X, Y) _ck_assert_uint(X, !=, Y)
+/**
+ * Check two unsigned integers to determine if X<Y
+ *
+ * If not X<Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_uint_lt(X, Y) _ck_assert_uint(X, <, Y)
+/**
+ * Check two unsigned integers to determine if X<=Y
+ *
+ * If not X<=Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_uint_le(X, Y) _ck_assert_uint(X, <=, Y)
+/**
+ * Check two unsigned integers to determine if X>Y
+ *
+ * If not X>Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_uint_gt(X, Y) _ck_assert_uint(X, >, Y)
+/**
+ * Check two unsigned integers to determine if X>=Y
+ *
+ * If not X>=Y, the test fails.
+ *
+ * @param X signed integer
+ * @param Y signed integer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_uint_ge(X, Y) _ck_assert_uint(X, >=, Y)
 
-/* Mark the last point reached in a unit test
-   (useful for tracking down where a segfault, etc. occurs)
+/* String comparison macros with improved output compared to ck_assert() */
+/* OP might be any operator that can be used in '0 OP strcmp(X,Y)' comparison */
+/* The x and y parameter swap in strcmp() is needed to handle >, >=, <, <= operators */
+#define _ck_assert_str(X, OP, Y) do { \
+  const char* _ck_x = (X); \
+  const char* _ck_y = (Y); \
+  ck_assert_msg(0 OP strcmp(_ck_y, _ck_x), \
+    "Assertion '%s' failed: %s==\"%s\", %s==\"%s\"", #X#OP#Y, #X, _ck_x, #Y, _ck_y); \
+} while (0)
+/**
+ * Check two strings to determine if 0==strcmp(X,Y)
+ *
+ * If not 0==strcmp(X,Y), the test fails.
+ *
+ * @param X string
+ * @param Y string to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
+#define ck_assert_str_eq(X, Y) _ck_assert_str(X, ==, Y)
+/**
+ * Check two strings to determine if 0!=strcmp(X,Y)
+ *
+ * If not 0!=strcmp(X,Y), the test fails.
+ *
+ * @param X string
+ * @param Y string to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.6
+ */
+#define ck_assert_str_ne(X, Y) _ck_assert_str(X, !=, Y)
+/**
+ * Check two strings to determine if 0<strcmp(X,Y), (e.g. strcmp(X,Y)>0)
+ *
+ * If not 0<strcmp(X,Y), the test fails.
+ *
+ * @param X string
+ * @param Y string to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_str_lt(X, Y) _ck_assert_str(X, <, Y)
+/**
+ * Check two strings to determine if 0<=strcmp(X,Y) (e.g. strcmp(X,Y)>=0)
+ *
+ * If not 0<=strcmp(X,Y), the test fails.
+ *
+ * @param X string
+ * @param Y string to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_str_le(X, Y) _ck_assert_str(X, <=, Y)
+/**
+ * Check two strings to determine if 0<strcmp(X,Y) (e.g. strcmp(X,Y)>0)
+ *
+ * If not 0<strcmp(X,Y), the test fails.
+ *
+ * @param X string
+ * @param Y string to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_str_gt(X, Y) _ck_assert_str(X, >, Y)
+/**
+ * Check two strings to determine if 0>=strcmp(X,Y) (e.g. strcmp(X,Y)<=0)
+ *
+ * If not 0>=strcmp(X,Y), the test fails.
+ *
+ * @param X string
+ * @param Y string to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_str_ge(X, Y) _ck_assert_str(X, >=, Y)
+
+/* Pointer comparison macros with improved output compared to ck_assert(). */
+/* OP may only be == or !=  */
+#define _ck_assert_ptr(X, OP, Y) do { \
+  const void* _ck_x = (X); \
+  const void* _ck_y = (Y); \
+  ck_assert_msg(_ck_x OP _ck_y, "Assertion '%s' failed: %s==%#x, %s==%#x", #X#OP#Y, #X, _ck_x, #Y, _ck_y); \
+} while (0)
+
+/**
+ * Check if two pointers are equal.
+ *
+ * If the two passed pointers are not equal, the test
+ * fails.
+ *
+ * @param X pointer
+ * @param Y pointer to compare against X
+ *
+ * @note If the check fails, the remaining of the test is aborted
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_ptr_eq(X, Y) _ck_assert_ptr(X, ==, Y)
+
+/**
+ * Check if two pointers are not.
+ *
+ * If the two passed pointers are equal, the test fails.
+ *
+ * @param X pointer
+ * @param Y pointer to compare against X
+ *
+ * @since 0.9.10
+ */
+#define ck_assert_ptr_ne(X, Y) _ck_assert_ptr(X, !=, Y)
+
+/**
+ * Mark the last point reached in a unit test.
+ *
+ * If the test throws a signal or exits, the location noted with the
+ * failure is the last location of a ck_assert*() or ck_abort() call.
+ * Use mark_point() to record intermediate locations (useful for tracking down
+ * crashes or exits).
+ *
+ * @since 0.6.0
 */
 #define mark_point() _mark_point(__FILE__,__LINE__)
 
 /* Non macro version of #mark_point */
-void CK_EXPORT _mark_point (const char *file, int line);
+CK_DLL_EXP void CK_EXPORT _mark_point (const char *file, int line);
 
-/* Result of a test */
-enum test_result {
-  CK_TEST_RESULT_INVALID, /* Default value; should not encounter this */
-  CK_PASS, /* Test passed*/
-  CK_FAILURE, /* Test completed but failed */
-  CK_ERROR /* Test failed to complete
-	      (unexpected signal or non-zero early exit) */ 
+/**
+ * Enum describing the possible results of a test
+ */
+enum test_result
+{
+  CK_TEST_RESULT_INVALID,       /**< Default value; should not encounter this */
+  CK_PASS,                      /**< Test passed */
+  CK_FAILURE,                   /**< Test completed but failed */
+  CK_ERROR                      /**< Test failed to complete
+                                   (unexpected signal or non-zero early exit) */
 };
 
-/* Specifies the how much output an SRunner should produce */
-enum print_output {
-  CK_SILENT, /* No output */
-  CK_MINIMAL, /* Only summary output */
-  CK_NORMAL, /* All failed tests */
-  CK_VERBOSE, /* All tests */
-  CK_ENV, /* Look at environment var */
+/**
+ * Enum specifying the verbosity of output a SRunner should produce
+ */
+enum print_output
+{
+  CK_SILENT,                    /**< No output */
+  CK_MINIMAL,                   /**< Only summary output */
+  CK_NORMAL,                    /**< All failed tests */
+  CK_VERBOSE,                   /**< All tests */
+  CK_ENV,                       /**< Look at environment var CK_VERBOSITY
+                                     for what verbosity to use, which can be
+                                     either "silent", "minimal", "normal",
+                                     or "verbose". If the environment variable
+                                     is not set, then CK_NORMAL will be used.*/
 #if @ENABLE_SUBUNIT@
-  CK_SUBUNIT, /* Run as a subunit child process */
+  CK_SUBUNIT,                   /**< Run as a subunit child process */
 #endif
-  CK_LAST
+  CK_LAST                       /**< Not a valid option */
 };
 
-/* Holds state for a running of a test suite */
+/**
+ * Holds state for a running of a test suite
+ */
 typedef struct SRunner SRunner;
 
-/* Opaque type for a test failure */
+/**
+ * Opaque type for a test failure
+ */
 typedef struct TestResult TestResult;
 
-/* accessors for tr fields */
-enum ck_result_ctx {
-  CK_CTX_INVALID, /* Default value; should not encounter this */
-  CK_CTX_SETUP,
-  CK_CTX_TEST,
-  CK_CTX_TEARDOWN
+/**
+ * Enum representing the types of contexts for a test
+ */
+enum ck_result_ctx
+{
+  CK_CTX_INVALID,               /**< Default value; should not encounter this */
+  CK_CTX_SETUP,                 /**< Setup before a test */
+  CK_CTX_TEST,                  /**< Body of test itself */
+  CK_CTX_TEARDOWN               /**< Teardown after a test */
 };
 
-/* Type of result */
-int CK_EXPORT tr_rtype (TestResult *tr);
-/* Context in which the result occurred */ 
-enum ck_result_ctx CK_EXPORT tr_ctx (TestResult *tr); 
-/* Failure message */
-const char * CK_EXPORT tr_msg (TestResult *tr);
-/* Line number at which failure occured */
-int CK_EXPORT tr_lno (TestResult *tr);
-/* File name at which failure occured */
-const char * CK_EXPORT tr_lfile (TestResult *tr);
-/* Test case in which unit test was run */
-const char * CK_EXPORT tr_tcname (TestResult *tr);
+/**
+ * Retrieve type of result that the given test result represents.
+ *
+ * This is a member of test_result, and can represent a
+ * pass, failure, or error.
+ *
+ * @param tr test result to retrieve result from
+ *
+ * @return result of given test
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP int CK_EXPORT tr_rtype (TestResult * tr);
 
-/* Creates an SRunner for the given suite */
-SRunner * CK_EXPORT srunner_create (Suite *s);
+/**
+ * Retrieve context in which the result occurred for the given test result.
+ *
+ * The types of contents include the test setup, teardown, or the
+ * body of the test itself.
+ *
+ * @param tr test result to retrieve context from
+ *
+ * @return context to which the given test result applies
+ *
+ * @since 0.8.0
+ */
+CK_DLL_EXP enum ck_result_ctx CK_EXPORT tr_ctx (TestResult * tr);
 
-/* Adds a Suite to an SRunner */
-void CK_EXPORT srunner_add_suite (SRunner *sr, Suite *s);
+/**
+ * Retrieve failure message from test result, if applicable.
+ *
+ * @return pointer to a message, if one exists. NULL otherwise.
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP const char *CK_EXPORT tr_msg (TestResult * tr);
 
-/* Frees an SRunner, all suites added to it and all contained test cases */
-void CK_EXPORT srunner_free (SRunner *sr);
+/**
+ * Retrieve line number at which a failure occurred, if applicable.
+ *
+ * @return If the test resulted in a failure, returns the line number
+ *          that the failure occurred on; otherwise returns -1.
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP int CK_EXPORT tr_lno (TestResult * tr);
 
- 
-/* Test running */
+/**
+ * Retrieve file name at which a failure occurred, if applicable.
+ *
+ * @return If the test resulted in a failure, returns a string
+ *          containing the name of the file where the failure
+ *          occurred; otherwise returns NULL.
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP const char *CK_EXPORT tr_lfile (TestResult * tr);
 
-/* Runs an SRunner, printing results as specified (see enum print_output) */
-void CK_EXPORT srunner_run_all (SRunner *sr, enum print_output print_mode);
+/**
+ * Retrieve test case name in which a failure occurred, if applicable.
+ *
+ * @return If the test resulted in a failure, returns a string
+ *          containing the name of the test suite where the failure
+ *          occurred; otherwise returns NULL.
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP const char *CK_EXPORT tr_tcname (TestResult * tr);
 
- 
-/* Next functions are valid only after the suite has been
-   completely run, of course */
+/**
+ * Creates a suite runner for the given suite.
+ *
+ * Once created, additional suites can be added to the
+ * suite runner using srunner_add_suite(), and the suite runner can be
+ * run with srunner_run_all(). Once finished, the suite runner
+ * must be freed with srunner_free().
+ *
+ * @param s suite to generate a suite runner for
+ *
+ * @return suite runner for the given suite
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP SRunner *CK_EXPORT srunner_create (Suite * s);
 
-/* Number of failed tests in a run suite. Includes failures + errors */
-int CK_EXPORT srunner_ntests_failed (SRunner *sr);
+/**
+ * Add an additional suite to a suite runner.
+ *
+ * The first suite in a suite runner is always added in srunner_create().
+ * This call adds additional suites to a suite runner.
+ *
+ * @param sr suite runner to add the given suite
+ * @param s suite to add to the given suite runner
+ *
+ * @since 0.7.0
+ */
+CK_DLL_EXP void CK_EXPORT srunner_add_suite (SRunner * sr, Suite * s);
 
-/* Total number of tests run in a run suite */
-int CK_EXPORT srunner_ntests_run (SRunner *sr);
+/**
+ * Frees a suite runner, including all contained suite and test cases.
+ *
+ * This call is responsible for freeing all resources related to a
+ * suite runner and all contained suites and test cases. Suite and
+ * test cases need not be freed individually, as this call handles that.
+ *
+ * @param sr suite runner to free
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP void CK_EXPORT srunner_free (SRunner * sr);
 
-/* Return an array of results for all failures
-  
-   Number of failures is equal to srunner_nfailed_tests.  Memory for
-   the array is malloc'ed and must be freed, but individual TestResults
-   must not
+/**
+ * Runs a suite runner and all contained suite, printing results to
+ * stdout as specified by the print_mode.
+ *
+ * In addition to running all suites, if the suite runner has been
+ * configured to output to a log, that is also performed.
+ *
+ * Note that if the CK_RUN_CASE and/or CK_RUN_SUITE environment variables
+ * are defined, then only the named suite and/or test case is run.
+ *
+ * @param sr suite runner to run all suites from
+ * @param print_mode the verbosity in which to report results to stdout
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP void CK_EXPORT srunner_run_all (SRunner * sr,
+    enum print_output print_mode);
+
+/**
+ * Run a specific suite or test case from a suite runner, printing results
+ * to stdout as specified by the print_mode.
+ *
+ * In addition to running any applicable suites or test cases, if the
+ * suite runner has been configured to output to a log, that is also
+ * performed.
+ *
+ * @param sr suite runner where the given suite or test case must be
+ * @param sname suite name to run. A NULL means "any suite".
+ * @param tcname test case name to run. A NULL means "any test case"
+ * @param print_mode the verbosity in which to report results to stdout
+ *
+ * @since 0.9.9
+ */
+CK_DLL_EXP void CK_EXPORT srunner_run (SRunner * sr, const char *sname,
+    const char *tcname, enum print_output print_mode);
+
+
+/**
+ * Retrieve the number of failed tests executed by a suite runner.
+ *
+ * This value represents both test failures and errors.
+ *
+ * @param sr suite runner to query for all failed tests
+ *
+ * @return number of test failures and errors found by the suite runner
+ *
+ * @since 0.6.1
+ */
+CK_DLL_EXP int CK_EXPORT srunner_ntests_failed (SRunner * sr);
+
+/**
+ * Retrieve the total number of tests run by a suite runner.
+ *
+ * @param sr suite runner to query for all tests run
+ *
+ * @return number of all tests run by the suite runner
+ *
+ * @since 0.6.1
+ */
+CK_DLL_EXP int CK_EXPORT srunner_ntests_run (SRunner * sr);
+
+/**
+ * Return an array of results for all failures found by a suite runner.
+ *
+ * Number of results is equal to srunner_nfailed_tests().
+ *
+ * Information about individual results can be queried using:
+ * tr_rtype(), tr_ctx(), tr_msg(), tr_lno(), tr_lfile(), and tr_tcname().
+ *
+ * Memory is malloc'ed and must be freed; however free the entire structure
+ * instead of individual test cases.
+ *
+ * @param sr suite runner to retrieve results from
+ *
+ * @return array of TestResult objects
+ *
+ * @since 0.6.0
+ */
+CK_DLL_EXP TestResult **CK_EXPORT srunner_failures (SRunner * sr);
+
+/**
+ * Return an array of results for all tests run by a suite runner.
+ *
+ * Number of results is equal to srunner_ntests_run(), and excludes
+ * failures due to setup function failure.
+ *
+ * Information about individual results can be queried using:
+ * tr_rtype(), tr_ctx(), tr_msg(), tr_lno(), tr_lfile(), and tr_tcname().
+ *
+ * Memory is malloc'ed and must be freed; however free the entire structure
+ * instead of individual test cases.
+ *
+ * @param sr suite runner to retrieve results from
+ *
+ * @return array of TestResult objects
+ *
+ * @since 0.6.1
 */
-TestResult ** CK_EXPORT srunner_failures (SRunner *sr);
+CK_DLL_EXP TestResult **CK_EXPORT srunner_results (SRunner * sr);
 
-/* Return an array of results for all run tests
+/**
+ * Print the results contained in an SRunner to stdout.
+ *
+ * @param sr suite runner to print results for to stdout
+ * @param print_mode the print_output (verbosity) to use to report
+ *         the result
+ *
+ * @since 0.7.0
+ */
+CK_DLL_EXP void CK_EXPORT srunner_print (SRunner * sr,
+    enum print_output print_mode);
 
-   Number of results is equal to srunner_ntests_run, and excludes
-   failures due to setup function failure.
-
-   Memory is malloc'ed and must be freed, but individual TestResults
-   must not
-*/  
-TestResult ** CK_EXPORT srunner_results (SRunner *sr);
-
- 
-/* Printing */
-
-/* Print the results contained in an SRunner */
-void CK_EXPORT srunner_print (SRunner *sr, enum print_output print_mode);
-  
-  
-/* Set a log file to which to write during test running.
-
-  Log file setting is an initialize only operation -- it should be
-  done immediatly after SRunner creation, and the log file can't be
-  changed after being set.
+/**
+ * Set the suite runner to output the result in log format to the
+ * given file.
+ *
+ * Note: log file setting is an initialize only operation -- it should
+ * be done immediately after SRunner creation, and the log file can't be
+ * changed after being set.
+ *
+ * This setting does not conflict with the other log output types;
+ * all logging types can occur concurrently if configured.
+ *
+ * @param sr suite runner to log results of in log format
+ * @param fname file name to output log results to
+ *
+ * @since 0.7.1
 */
-void CK_EXPORT srunner_set_log (SRunner *sr, const char *fname);
+CK_DLL_EXP void CK_EXPORT srunner_set_log (SRunner * sr, const char *fname);
 
-/* Does the SRunner have a log file? */
-int CK_EXPORT srunner_has_log (SRunner *sr);
+/**
+ * Checks if the suite runner is assigned a file for log output.
+ *
+ * @param sr suite runner to check
+ *
+ * @return 1 iff the suite runner currently is configured to output
+ *         in log format; 0 otherwise
+ *
+ * @since 0.7.1
+ */
+CK_DLL_EXP int CK_EXPORT srunner_has_log (SRunner * sr);
 
-/* Return the name of the log file, or NULL if none */
-const char * CK_EXPORT srunner_log_fname (SRunner *sr);
+/**
+ * Retrieves the name of the currently assigned file
+ * for log output, if any exists.
+ *
+ * @return the name of the log file, or NULL if none is configured
+ *
+ * @since 0.7.1
+ */
+CK_DLL_EXP const char *CK_EXPORT srunner_log_fname (SRunner * sr);
 
-/* Set a xml file to which to write during test running.
-
-  XML file setting is an initialize only operation -- it should be
-  done immediatly after SRunner creation, and the XML file can't be
-  changed after being set.
+/**
+ * Set the suite runner to output the result in XML format to the
+ * given file.
+ *
+ * Note: XML file setting is an initialize only operation -- it should
+ * be done immediately after SRunner creation, and the XML file can't be
+ * changed after being set.
+ *
+ * This setting does not conflict with the other log output types;
+ * all logging types can occur concurrently if configured.
+ *
+ * @param sr suite runner to log results of in XML format
+ * @param fname file name to output XML results to
+ *
+ * @since 0.9.1
 */
-void CK_EXPORT srunner_set_xml (SRunner *sr, const char *fname);
+CK_DLL_EXP void CK_EXPORT srunner_set_xml (SRunner * sr, const char *fname);
 
-/* Does the SRunner have an XML log file? */
-int CK_EXPORT srunner_has_xml (SRunner *sr);
+/**
+ * Checks if the suite runner is assigned a file for XML output.
+ *
+ * @param sr suite runner to check
+ *
+ * @return 1 iff the suite runner currently is configured to output
+ *         in XML format; 0 otherwise
+ *
+ * @since 0.9.1
+ */
+CK_DLL_EXP int CK_EXPORT srunner_has_xml (SRunner * sr);
 
-/* Return the name of the XML file, or NULL if none */
-const char * CK_EXPORT srunner_xml_fname (SRunner *sr);
+/**
+ * Retrieves the name of the currently assigned file
+ * for XML output, if any exists.
+ *
+ * @return the name of the XML file, or NULL if none is configured
+ *
+ * @since 0.9.1
+ */
+CK_DLL_EXP const char *CK_EXPORT srunner_xml_fname (SRunner * sr);
 
+/**
+ * Set the suite runner to output the result in TAP format to the
+ * given file.
+ *
+ * Note: TAP file setting is an initialize only operation -- it should
+ * be done immediately after SRunner creation, and the TAP file can't be
+ * changed after being set.
+ *
+ * This setting does not conflict with the other log output types;
+ * all logging types can occur concurrently if configured.
+ *
+ * @param sr suite runner to log results of in TAP format
+ * @param fname file name to output TAP results to
+ *
+ * @since 0.9.12
+*/
+CK_DLL_EXP void CK_EXPORT srunner_set_tap (SRunner * sr, const char *fname);
 
-/* Control forking */
-enum fork_status {
-  CK_FORK_GETENV, /* look in the environment for CK_FORK */
-  CK_FORK,        /* call fork to run tests */
-  CK_NOFORK       /* don't call fork */
+/**
+ * Checks if the suite runner is assigned a file for TAP output.
+ *
+ * @param sr suite runner to check
+ *
+ * @return 1 iff the suite runner currently is configured to output
+ *         in TAP format; 0 otherwise
+ *
+ * @since 0.9.12
+ */
+CK_DLL_EXP int CK_EXPORT srunner_has_tap (SRunner * sr);
+
+/**
+ * Retrieves the name of the currently assigned file
+ * for TAP output, if any exists.
+ *
+ * @return the name of the TAP file, or NULL if none is configured
+ *
+ * @since 0.9.12
+ */
+CK_DLL_EXP const char *CK_EXPORT srunner_tap_fname (SRunner * sr);
+
+/**
+ * Enum describing the current fork usage.
+ */
+enum fork_status
+{
+  CK_FORK_GETENV,               /**< look in the environment for CK_FORK */
+  CK_FORK,                      /**< call fork to run tests */
+  CK_NOFORK                     /**< don't call fork */
 };
- 
-/* Get the current fork status */
-enum fork_status CK_EXPORT srunner_fork_status (SRunner *sr);
 
-/* Set the current fork status */
-void CK_EXPORT srunner_set_fork_status (SRunner *sr, enum fork_status fstat); 
-  
-/* Fork in a test and make sure messaging and tests work. */
-pid_t CK_EXPORT check_fork(void);
+/**
+ * Retrieve the current fork status for the given suite runner
+ *
+ * @param sr suite runner to check fork status of
+ *
+ * @since 0.8.0
+ */
+CK_DLL_EXP enum fork_status CK_EXPORT srunner_fork_status (SRunner * sr);
 
-/* Wait for the pid and exit. If pid is zero, just exit. */
-void CK_EXPORT check_waitpid_and_exit(pid_t pid);
+/**
+ * Set the fork status for a given suite runner.
+ *
+ * The default fork status is CK_FORK_GETENV, which will look
+ * for the CK_FORK environment variable, which can be set to
+ * "yes" or "no". If the environment variable is not present,
+ * CK_FORK will be used if fork() is available on the system,
+ * otherwise CK_NOFORK is used.
+ *
+ * If set to CK_FORK or CK_NOFORK, the environment variable
+ * if defined is ignored.
+ *
+ * @param sr suite runner to assign the fork status to
+ * @param fstat fork status to assign
+ *
+ * @since 0.8.0
+ */
+CK_DLL_EXP void CK_EXPORT srunner_set_fork_status (SRunner * sr,
+    enum fork_status fstat);
 
-#ifdef __cplusplus 
+/**
+ * Invoke fork() during a test and assign the child to the same
+ * process group that the rest of the test case uses.
+ *
+ * One can invoke fork() directly during a test; however doing so
+ * may not guarantee that any children processes are destroyed once
+ * the test finishes. Once a test has completed, all processes in
+ * the process group will be killed; using this wrapper will prevent
+ * orphan processes.
+ *
+ * @return On success, the PID of the child process is returned in
+ *          the parent, and 0 is returned in the child.  On failure,
+ *          an error will be printed and exit() invoked.
+ *
+ * @since 0.9.3
+ */
+CK_DLL_EXP pid_t CK_EXPORT check_fork (void);
+
+/**
+ * Wait for the pid and exit.
+ *
+ * This is to be used in conjunction with check_fork(). When called,
+ * will wait for the given process to terminate. If the process
+ * exited without error, exit(EXIT_SUCCESS) is invoked; otherwise
+ * exit(EXIT_FAILURE) is invoked.
+ *
+ * @param pid process to wait for, created by check_fork()
+ *
+ * @since 0.9.3
+ */
+CK_DLL_EXP void CK_EXPORT
+check_waitpid_and_exit (pid_t pid)
+    CK_ATTRIBUTE_NORETURN;
+
+#ifdef __cplusplus
 CK_CPPEND
 #endif
-
 #endif /* CHECK_H */
diff --git a/libs/gst/check/libcheck/check_error.c b/libs/gst/check/libcheck/check_error.c
index 247b9ca..9ee1dd1 100644
--- a/libs/gst/check/libcheck/check_error.c
+++ b/libs/gst/check/libcheck/check_error.c
@@ -18,22 +18,29 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <errno.h>
+#include <setjmp.h>
 
 #include "check_error.h"
 
+/**
+ * Storage for setjmp/longjmp context information used in NOFORK mode
+ */
+jmp_buf error_jmp_buffer;
+
 
 /* FIXME: including a colon at the end is a bad way to indicate an error */
 void
 eprintf (const char *fmt, const char *file, int line, ...)
 {
   va_list args;
+
   fflush (stderr);
 
   fprintf (stderr, "%s:%d: ", file, line);
@@ -53,6 +60,7 @@
 emalloc (size_t n)
 {
   void *p;
+
   p = malloc (n);
   if (p == NULL)
     eprintf ("malloc of %u bytes failed:", __FILE__, __LINE__ - 2, n);
@@ -63,6 +71,7 @@
 erealloc (void *ptr, size_t n)
 {
   void *p;
+
   p = realloc (ptr, n);
   if (p == NULL)
     eprintf ("realloc of %u bytes failed:", __FILE__, __LINE__ - 2, n);
diff --git a/libs/gst/check/libcheck/check_error.h b/libs/gst/check/libcheck/check_error.h
index 3fa0129..771a7fd 100644
--- a/libs/gst/check/libcheck/check_error.h
+++ b/libs/gst/check/libcheck/check_error.h
@@ -21,13 +21,20 @@
 #ifndef ERROR_H
 #define ERROR_H
 
+#include "libcompat.h"
+#include <setjmp.h>
+
+extern jmp_buf error_jmp_buffer;
+
 /* Include stdlib.h beforehand */
 
 /* Print error message and die
    If fmt ends in colon, include system error information */
-void eprintf (const char *fmt, const char *file, int line,...);
+void
+eprintf (const char *fmt, const char *file, int line, ...)
+    CK_ATTRIBUTE_NORETURN;
 /* malloc or die */
-void *emalloc(size_t n);
-void *erealloc(void *, size_t n);
+     void *emalloc (size_t n);
+     void *erealloc (void *, size_t n);
 
-#endif /*ERROR_H*/
+#endif /*ERROR_H */
diff --git a/libs/gst/check/libcheck/check_impl.h b/libs/gst/check/libcheck/check_impl.h
index c76488e..e5ca7e9 100644
--- a/libs/gst/check/libcheck/check_impl.h
+++ b/libs/gst/check/libcheck/check_impl.h
@@ -21,97 +21,117 @@
 #ifndef CHECK_IMPL_H
 #define CHECK_IMPL_H
 
-
 /* This header should be included by any module that needs
    to know the implementation details of the check structures
-   Include stdio.h & list.h before this header
+   Include stdio.h, time.h, & list.h before this header
 */
 
-typedef struct TF {
+#define US_PER_SEC 1000000
+#define NANOS_PER_SECONDS 1000000000
+
+/** calculate the difference in useconds out of two "struct timespec"s */
+#define DIFF_IN_USEC(begin, end) \
+  ( (((end).tv_sec - (begin).tv_sec) * US_PER_SEC) + \
+    ((end).tv_nsec/1000) - ((begin).tv_nsec/1000) )
+
+typedef struct TF
+{
   TFun fn;
   int loop_start;
   int loop_end;
   const char *name;
   int signal;
-  unsigned char allowed_exit_value;
+  signed char allowed_exit_value;
 } TF;
 
-struct Suite {
+struct Suite
+{
   const char *name;
-  List *tclst; /* List of test cases */
+  List *tclst;                  /* List of test cases */
 };
 
-typedef struct Fixture 
+typedef struct Fixture
 {
   int ischecked;
   SFun fun;
 } Fixture;
 
-struct TCase {
+struct TCase
+{
   const char *name;
-  int timeout;
-  List *tflst; /* list of test functions */
+  struct timespec timeout;
+  List *tflst;                  /* list of test functions */
   List *unch_sflst;
   List *unch_tflst;
   List *ch_sflst;
   List *ch_tflst;
 };
 
-typedef struct TestStats {
+typedef struct TestStats
+{
   int n_checked;
   int n_failed;
   int n_errors;
 } TestStats;
 
-struct TestResult {
-  enum test_result rtype;     /* Type of result */
-  enum ck_result_ctx ctx;     /* When the result occurred */
-  char *file;    /* File where the test occured */
-  int line;      /* Line number where the test occurred */
-  int iter;      /* The iteration value for looping tests */
-  const char *tcname;  /* Test case that generated the result */
-  const char *tname;  /* Test that generated the result */
-  char *msg;     /* Failure message */
+struct TestResult
+{
+  enum test_result rtype;       /* Type of result */
+  enum ck_result_ctx ctx;       /* When the result occurred */
+  char *file;                   /* File where the test occured */
+  int line;                     /* Line number where the test occurred */
+  int iter;                     /* The iteration value for looping tests */
+  int duration;                 /* duration of this test in microseconds */
+  const char *tcname;           /* Test case that generated the result */
+  const char *tname;            /* Test that generated the result */
+  char *msg;                    /* Failure message */
 };
 
-TestResult *tr_create(void);
-void tr_reset(TestResult *tr);
+TestResult *tr_create (void);
+void tr_reset (TestResult * tr);
+void tr_free (TestResult * tr);
 
-enum cl_event {
-  CLINITLOG_SR,
-  CLENDLOG_SR,
-  CLSTART_SR,
-  CLSTART_S,
-  CLEND_SR,
-  CLEND_S,
-  CLSTART_T, /* A test case is about to run */
-  CLEND_T
+enum cl_event
+{
+  CLINITLOG_SR,                 /* Initialize log file */
+  CLENDLOG_SR,                  /* Tests are complete */
+  CLSTART_SR,                   /* Suite runner start */
+  CLSTART_S,                    /* Suite start */
+  CLEND_SR,                     /* Suite runner end */
+  CLEND_S,                      /* Suite end */
+  CLSTART_T,                    /* A test case is about to run */
+  CLEND_T                       /* Test case end */
 };
 
-typedef void (*LFun) (SRunner *, FILE*, enum print_output,
-		      void *, enum cl_event);
+typedef void (*LFun) (SRunner *, FILE *, enum print_output,
+    void *, enum cl_event);
 
-typedef struct Log {
+typedef struct Log
+{
   FILE *lfile;
   LFun lfun;
   int close;
   enum print_output mode;
 } Log;
 
-struct SRunner {
-  List *slst; /* List of Suite objects */
-  TestStats *stats; /* Run statistics */
-  List *resultlst; /* List of unit test results */
-  const char *log_fname; /* name of log file */
-  const char *xml_fname; /* name of xml output file */
-  List *loglst; /* list of Log objects */
-  enum fork_status fstat; /* controls if suites are forked or not
-			     NOTE: Don't use this value directly,
-			     instead use srunner_fork_status */
+struct SRunner
+{
+  List *slst;                   /* List of Suite objects */
+  TestStats *stats;             /* Run statistics */
+  List *resultlst;              /* List of unit test results */
+  const char *log_fname;        /* name of log file */
+  const char *xml_fname;        /* name of xml output file */
+  const char *tap_fname;        /* name of tap output file */
+  List *loglst;                 /* list of Log objects */
+  enum fork_status fstat;       /* controls if suites are forked or not
+                                   NOTE: Don't use this value directly,
+                                   instead use srunner_fork_status */
 };
 
 
-void set_fork_status(enum fork_status fstat);
+void set_fork_status (enum fork_status fstat);
 enum fork_status cur_fork_status (void);
 
+clockid_t check_get_clockid (void);
+
 #endif /* CHECK_IMPL_H */
diff --git a/libs/gst/check/libcheck/check_list.c b/libs/gst/check/libcheck/check_list.c
index c40ab58..bce19d8 100644
--- a/libs/gst/check/libcheck/check_list.c
+++ b/libs/gst/check/libcheck/check_list.c
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -35,11 +35,11 @@
 
 struct List
 {
-  int n_elts;
-  int max_elts;
+  unsigned int n_elts;
+  unsigned int max_elts;
   int current;                  /* pointer to the current node */
   int last;                     /* pointer to the node before END */
-  const void **data;
+  void **data;
 };
 
 static void
@@ -47,7 +47,8 @@
 {
   if (lp->n_elts >= lp->max_elts) {
     lp->max_elts *= LGROW;
-    lp->data = erealloc (lp->data, lp->max_elts * sizeof (lp->data[0]));
+    lp->data =
+        (void **) erealloc (lp->data, lp->max_elts * sizeof (lp->data[0]));
   }
 }
 
@@ -55,16 +56,17 @@
 check_list_create (void)
 {
   List *lp;
-  lp = emalloc (sizeof (List));
+
+  lp = (List *) emalloc (sizeof (List));
   lp->n_elts = 0;
   lp->max_elts = LINIT;
-  lp->data = emalloc (sizeof (lp->data[0]) * LINIT);
+  lp->data = (void **) emalloc (sizeof (lp->data[0]) * LINIT);
   lp->current = lp->last = -1;
   return lp;
 }
 
 void
-list_add_front (List * lp, const void *val)
+check_list_add_front (List * lp, void *val)
 {
   if (lp == NULL)
     return;
@@ -77,7 +79,7 @@
 }
 
 void
-list_add_end (List * lp, const void *val)
+check_list_add_end (List * lp, void *val)
 {
   if (lp == NULL)
     return;
@@ -89,7 +91,7 @@
 }
 
 int
-list_at_end (List * lp)
+check_list_at_end (List * lp)
 {
   if (lp->current == -1)
     return 1;
@@ -98,7 +100,7 @@
 }
 
 void
-list_front (List * lp)
+check_list_front (List * lp)
 {
   if (lp->current == -1)
     return;
@@ -107,7 +109,7 @@
 
 
 void
-list_free (List * lp)
+check_list_free (List * lp)
 {
   if (lp == NULL)
     return;
@@ -117,34 +119,34 @@
 }
 
 void *
-list_val (List * lp)
+check_list_val (List * lp)
 {
   if (lp == NULL)
     return NULL;
   if (lp->current == -1 || lp->current > lp->last)
     return NULL;
 
-  return (void *) lp->data[lp->current];
+  return lp->data[lp->current];
 }
 
 void
-list_advance (List * lp)
+check_list_advance (List * lp)
 {
   if (lp == NULL)
     return;
-  if (list_at_end (lp))
+  if (check_list_at_end (lp))
     return;
   lp->current++;
 }
 
 
 void
-list_apply (List * lp, void (*fp) (void *))
+check_list_apply (List * lp, void (*fp) (void *))
 {
   if (lp == NULL || fp == NULL)
     return;
 
-  for (list_front (lp); !list_at_end (lp); list_advance (lp))
-    fp (list_val (lp));
+  for (check_list_front (lp); !check_list_at_end (lp); check_list_advance (lp))
+    fp (check_list_val (lp));
 
 }
diff --git a/libs/gst/check/libcheck/check_list.h b/libs/gst/check/libcheck/check_list.h
index 7936c19..0270115 100644
--- a/libs/gst/check/libcheck/check_list.h
+++ b/libs/gst/check/libcheck/check_list.h
@@ -24,33 +24,33 @@
 typedef struct List List;
 
 /* Create an empty list */
-List * check_list_create (void);
+List *check_list_create (void);
 
 /* Is list at end? */
-int list_at_end (List * lp);
+int check_list_at_end (List * lp);
 
 /* Position list at front */
-void list_front(List *lp);
+void check_list_front (List * lp);
 
 /* Add a value to the front of the list,
    positioning newly added value as current value.
    More expensive than list_add_end, as it uses memmove. */
-void list_add_front (List *lp, const void *val);
+void check_list_add_front (List * lp, void *val);
 
 /* Add a value to the end of the list,
    positioning newly added value as current value */
-void list_add_end (List *lp, const void *val);
+void check_list_add_end (List * lp, void *val);
 
 /* Give the value of the current node */
-void *list_val (List * lp);
+void *check_list_val (List * lp);
 
 /* Position the list at the next node */
-void list_advance (List * lp);
+void check_list_advance (List * lp);
 
 /* Free a list, but don't free values */
-void list_free (List * lp);
+void check_list_free (List * lp);
 
-void list_apply (List *lp, void (*fp) (void *));
+void check_list_apply (List * lp, void (*fp) (void *));
 
 
 #endif /* CHECK_LIST_H */
diff --git a/libs/gst/check/libcheck/check_log.c b/libs/gst/check/libcheck/check_log.c
index 5f0dd97..ad5bb79 100644
--- a/libs/gst/check/libcheck/check_log.c
+++ b/libs/gst/check/libcheck/check_log.c
@@ -18,16 +18,12 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <stdlib.h>
 #include <stdio.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include <time.h>
-#include <check.h>
-#if HAVE_SUBUNIT_CHILD_H
+#include <internal-check.h>
+#if ENABLE_SUBUNIT
 #include <subunit/child.h>
 #endif
 
@@ -38,20 +34,11 @@
 #include "check_print.h"
 #include "check_str.h"
 
-/* localtime_r is apparently not available on Windows */
-#ifndef HAVE_LOCALTIME_R
-static struct tm *
-localtime_r (const time_t * clock, struct tm *result)
-{
-  struct tm *now = localtime (clock);
-  if (now == NULL) {
-    return NULL;
-  } else {
-    *result = *now;
-  }
-  return result;
-}
-#endif /* HAVE_DECL_LOCALTIME_R */
+/*
+ * If a log file is specified to be "-", then instead of
+ * opening a file the log output is printed to stdout.
+ */
+#define STDOUT_OVERRIDE_LOG_FILE_NAME "-"
 
 static void srunner_send_evt (SRunner * sr, void *obj, enum cl_event evt);
 
@@ -66,13 +53,17 @@
 int
 srunner_has_log (SRunner * sr)
 {
-  return sr->log_fname != NULL;
+  return srunner_log_fname (sr) != NULL;
 }
 
 const char *
 srunner_log_fname (SRunner * sr)
 {
-  return sr->log_fname;
+  /* check if log filename have been set explicitly */
+  if (sr->log_fname != NULL)
+    return sr->log_fname;
+
+  return getenv ("CK_LOG_FILE_NAME");
 }
 
 
@@ -87,20 +78,50 @@
 int
 srunner_has_xml (SRunner * sr)
 {
-  return sr->xml_fname != NULL;
+  return srunner_xml_fname (sr) != NULL;
 }
 
 const char *
 srunner_xml_fname (SRunner * sr)
 {
-  return sr->xml_fname;
+  /* check if XML log filename have been set explicitly */
+  if (sr->xml_fname != NULL) {
+    return sr->xml_fname;
+  }
+
+  return getenv ("CK_XML_LOG_FILE_NAME");
+}
+
+void
+srunner_set_tap (SRunner * sr, const char *fname)
+{
+  if (sr->tap_fname)
+    return;
+  sr->tap_fname = fname;
+}
+
+int
+srunner_has_tap (SRunner * sr)
+{
+  return srunner_tap_fname (sr) != NULL;
+}
+
+const char *
+srunner_tap_fname (SRunner * sr)
+{
+  /* check if tap log filename have been set explicitly */
+  if (sr->tap_fname != NULL) {
+    return sr->tap_fname;
+  }
+
+  return getenv ("CK_TAP_LOG_FILE_NAME");
 }
 
 void
 srunner_register_lfun (SRunner * sr, FILE * lfile, int close,
     LFun lfun, enum print_output printmode)
 {
-  Log *l = emalloc (sizeof (Log));
+  Log *l = (Log *) emalloc (sizeof (Log));
 
   if (printmode == CK_ENV) {
     printmode = get_env_printmode ();
@@ -110,7 +131,7 @@
   l->lfun = lfun;
   l->close = close;
   l->mode = printmode;
-  list_add_end (sr->loglst, l);
+  check_list_add_end (sr->loglst, l);
   return;
 }
 
@@ -142,6 +163,7 @@
 log_test_start (SRunner * sr, TCase * tc, TF * tfun)
 {
   char buffer[100];
+
   snprintf (buffer, 99, "%s:%s", tc->name, tfun->name);
   srunner_send_evt (sr, buffer, CLSTART_T);
 }
@@ -157,9 +179,10 @@
 {
   List *l;
   Log *lg;
+
   l = sr->loglst;
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    lg = list_val (l);
+  for (check_list_front (l); !check_list_at_end (l); check_list_advance (l)) {
+    lg = (Log *) check_list_val (l);
     fflush (lg->lfile);
     lg->lfun (sr, lg->lfile, lg->mode, obj, evt);
     fflush (lg->lfile);
@@ -172,10 +195,6 @@
 {
   Suite *s;
 
-  if (printmode == CK_ENV) {
-    printmode = get_env_printmode ();
-  }
-
   switch (evt) {
     case CLINITLOG_SR:
       break;
@@ -187,7 +206,7 @@
       }
       break;
     case CLSTART_S:
-      s = obj;
+      s = (Suite *) obj;
       if (printmode > CK_SILENT) {
         fprintf (file, " %s\n", s->name);
       }
@@ -202,7 +221,6 @@
       }
       break;
     case CLEND_S:
-      s = obj;
       break;
     case CLSTART_T:
       break;
@@ -231,7 +249,7 @@
     case CLSTART_SR:
       break;
     case CLSTART_S:
-      s = obj;
+      s = (Suite *) obj;
       fprintf (file, "Running suite %s\n", s->name);
       break;
     case CLEND_SR:
@@ -239,12 +257,11 @@
       srunner_fprint (file, sr, CK_MINIMAL);
       break;
     case CLEND_S:
-      s = obj;
       break;
     case CLSTART_T:
       break;
     case CLEND_T:
-      tr = obj;
+      tr = (TestResult *) obj;
       tr_fprint (file, tr, CK_VERBOSE);
       break;
     default:
@@ -261,47 +278,60 @@
 {
   TestResult *tr;
   Suite *s;
-  static struct timeval inittv, endtv;
+  static struct timespec ts_start = { 0, 0 };
   static char t[sizeof "yyyy-mm-dd hh:mm:ss"] = { 0 };
 
   if (t[0] == 0) {
+    struct timeval inittv;
     struct tm now;
+
     gettimeofday (&inittv, NULL);
-    localtime_r (&(inittv.tv_sec), &now);
-    strftime (t, sizeof ("yyyy-mm-dd hh:mm:ss"), "%Y-%m-%d %H:%M:%S", &now);
+    clock_gettime (check_get_clockid (), &ts_start);
+    if (localtime_r ((const time_t *) &(inittv.tv_sec), &now) != NULL) {
+      strftime (t, sizeof ("yyyy-mm-dd hh:mm:ss"), "%Y-%m-%d %H:%M:%S", &now);
+    }
   }
 
   switch (evt) {
     case CLINITLOG_SR:
       fprintf (file, "<?xml version=\"1.0\"?>\n");
       fprintf (file,
+          "<?xml-stylesheet type=\"text/xsl\" href=\"http://check.sourceforge.net/xml/check_unittest.xslt\"?>\n");
+      fprintf (file,
           "<testsuites xmlns=\"http://check.sourceforge.net/ns\">\n");
       fprintf (file, "  <datetime>%s</datetime>\n", t);
       break;
     case CLENDLOG_SR:
-      gettimeofday (&endtv, NULL);
-      fprintf (file, "  <duration>%f</duration>\n",
-          (endtv.tv_sec + (float) (endtv.tv_usec) / 1000000) -
-          (inittv.tv_sec + (float) (inittv.tv_usec / 1000000)));
+    {
+      struct timespec ts_end = { 0, 0 };
+      unsigned long duration;
+
+      /* calculate time the test were running */
+      clock_gettime (check_get_clockid (), &ts_end);
+      duration = (unsigned long) DIFF_IN_USEC (ts_start, ts_end);
+      fprintf (file, "  <duration>%lu.%06lu</duration>\n",
+          duration / US_PER_SEC, duration % US_PER_SEC);
       fprintf (file, "</testsuites>\n");
+    }
       break;
     case CLSTART_SR:
       break;
     case CLSTART_S:
-      s = obj;
+      s = (Suite *) obj;
       fprintf (file, "  <suite>\n");
-      fprintf (file, "    <title>%s</title>\n", s->name);
+      fprintf (file, "    <title>");
+      fprint_xml_esc (file, s->name);
+      fprintf (file, "</title>\n");
       break;
     case CLEND_SR:
       break;
     case CLEND_S:
       fprintf (file, "  </suite>\n");
-      s = obj;
       break;
     case CLSTART_T:
       break;
     case CLEND_T:
-      tr = obj;
+      tr = (TestResult *) obj;
       tr_xmlprint (file, tr, CK_VERBOSE);
       break;
     default:
@@ -310,13 +340,55 @@
 
 }
 
+void
+tap_lfun (SRunner * sr CK_ATTRIBUTE_UNUSED, FILE * file,
+    enum print_output printmode CK_ATTRIBUTE_UNUSED, void *obj,
+    enum cl_event evt)
+{
+  TestResult *tr;
+
+  static int num_tests_run = 0;
+
+  switch (evt) {
+    case CLINITLOG_SR:
+      /* As this is a new log file, reset the number of tests executed */
+      num_tests_run = 0;
+      break;
+    case CLENDLOG_SR:
+      /* Output the test plan as the last line */
+      fprintf (file, "1..%d\n", num_tests_run);
+      fflush (file);
+      break;
+    case CLSTART_SR:
+      break;
+    case CLSTART_S:
+      break;
+    case CLEND_SR:
+      break;
+    case CLEND_S:
+      break;
+    case CLSTART_T:
+      break;
+    case CLEND_T:
+      /* Print the test result to the tap file */
+      num_tests_run += 1;
+      tr = (TestResult *) obj;
+      fprintf (file, "%s %d - %s:%s:%s: %s\n",
+          tr->rtype == CK_PASS ? "ok" : "not ok", num_tests_run,
+          tr->file, tr->tcname, tr->tname, tr->msg);
+      fflush (file);
+      break;
+    default:
+      eprintf ("Bad event type received in tap_lfun", __FILE__, __LINE__);
+  }
+}
+
 #if ENABLE_SUBUNIT
 void
 subunit_lfun (SRunner * sr, FILE * file, enum print_output printmode,
     void *obj, enum cl_event evt)
 {
   TestResult *tr;
-  Suite *s;
   char const *name;
 
   /* assert(printmode == CK_SUBUNIT); */
@@ -329,7 +401,6 @@
     case CLSTART_SR:
       break;
     case CLSTART_S:
-      s = obj;
       break;
     case CLEND_SR:
       if (printmode > CK_SILENT) {
@@ -338,17 +409,17 @@
       }
       break;
     case CLEND_S:
-      s = obj;
       break;
     case CLSTART_T:
-      name = obj;
+      name = (const char *) obj;
       subunit_test_start (name);
       break;
     case CLEND_T:
-      tr = obj;
+      tr = (TestResult *) obj;
       {
         char *name = ck_strdup_printf ("%s:%s", tr->tcname, tr->tname);
         char *msg = tr_short_str (tr);
+
         switch (tr->rtype) {
           case CK_PASS:
             subunit_test_pass (name);
@@ -359,6 +430,7 @@
           case CK_ERROR:
             subunit_test_error (name, msg);
             break;
+          case CK_TEST_RESULT_INVALID:
           default:
             eprintf ("Bad result type in subunit_lfun", __FILE__, __LINE__);
             free (name);
@@ -372,15 +444,30 @@
 }
 #endif
 
+static FILE *
+srunner_open_file (const char *filename)
+{
+  FILE *f = NULL;
+
+  if (strcmp (filename, STDOUT_OVERRIDE_LOG_FILE_NAME) == 0) {
+    f = stdout;
+  } else {
+    f = fopen (filename, "w");
+    if (f == NULL) {
+      eprintf ("Error in call to fopen while opening file %s:", __FILE__,
+          __LINE__ - 2, filename);
+    }
+  }
+  return f;
+}
+
 FILE *
 srunner_open_lfile (SRunner * sr)
 {
   FILE *f = NULL;
+
   if (srunner_has_log (sr)) {
-    f = fopen (sr->log_fname, "w");
-    if (f == NULL)
-      eprintf ("Error in call to fopen while opening log file %s:", __FILE__,
-          __LINE__ - 2, sr->log_fname);
+    f = srunner_open_file (srunner_log_fname (sr));
   }
   return f;
 }
@@ -389,11 +476,20 @@
 srunner_open_xmlfile (SRunner * sr)
 {
   FILE *f = NULL;
+
   if (srunner_has_xml (sr)) {
-    f = fopen (sr->xml_fname, "w");
-    if (f == NULL)
-      eprintf ("Error in call to fopen while opening xml file %s:", __FILE__,
-          __LINE__ - 2, sr->xml_fname);
+    f = srunner_open_file (srunner_xml_fname (sr));
+  }
+  return f;
+}
+
+FILE *
+srunner_open_tapfile (SRunner * sr)
+{
+  FILE *f = NULL;
+
+  if (srunner_has_tap (sr)) {
+    f = srunner_open_file (srunner_tap_fname (sr));
   }
   return f;
 }
@@ -402,6 +498,7 @@
 srunner_init_logging (SRunner * sr, enum print_output print_mode)
 {
   FILE *f;
+
   sr->loglst = check_list_create ();
 #if ENABLE_SUBUNIT
   if (print_mode != CK_SUBUNIT)
@@ -413,11 +510,15 @@
 #endif
   f = srunner_open_lfile (sr);
   if (f) {
-    srunner_register_lfun (sr, f, 1, lfile_lfun, print_mode);
+    srunner_register_lfun (sr, f, f != stdout, lfile_lfun, print_mode);
   }
   f = srunner_open_xmlfile (sr);
   if (f) {
-    srunner_register_lfun (sr, f, 2, xml_lfun, print_mode);
+    srunner_register_lfun (sr, f, f != stdout, xml_lfun, print_mode);
+  }
+  f = srunner_open_tapfile (sr);
+  if (f) {
+    srunner_register_lfun (sr, f, f != stdout, tap_lfun, print_mode);
   }
   srunner_send_evt (sr, NULL, CLINITLOG_SR);
 }
@@ -431,16 +532,17 @@
   srunner_send_evt (sr, NULL, CLENDLOG_SR);
 
   l = sr->loglst;
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    Log *lg = list_val (l);
+  for (check_list_front (l); !check_list_at_end (l); check_list_advance (l)) {
+    Log *lg = (Log *) check_list_val (l);
+
     if (lg->close) {
       rval = fclose (lg->lfile);
       if (rval != 0)
-        eprintf ("Error in call to fclose while closing log file:", __FILE__,
-            __LINE__ - 2);
+        eprintf ("Error in call to fclose while closing log file:",
+            __FILE__, __LINE__ - 2);
     }
     free (lg);
   }
-  list_free (l);
+  check_list_free (l);
   sr->loglst = NULL;
 }
diff --git a/libs/gst/check/libcheck/check_log.h b/libs/gst/check/libcheck/check_log.h
index 84c9b7c..8578a90 100644
--- a/libs/gst/check/libcheck/check_log.h
+++ b/libs/gst/check/libcheck/check_log.h
@@ -21,31 +21,35 @@
 #ifndef CHECK_LOG_H
 #define CHECK_LOG_H
 
-void log_srunner_start (SRunner *sr);
-void log_srunner_end (SRunner *sr);
-void log_suite_start (SRunner *sr, Suite *s);
-void log_suite_end (SRunner *sr, Suite *s);
-void log_test_end (SRunner *sr, TestResult *tr);
-void log_test_start (SRunner *sr, TCase *tc, TF *tfun);
+void log_srunner_start (SRunner * sr);
+void log_srunner_end (SRunner * sr);
+void log_suite_start (SRunner * sr, Suite * s);
+void log_suite_end (SRunner * sr, Suite * s);
+void log_test_end (SRunner * sr, TestResult * tr);
+void log_test_start (SRunner * sr, TCase * tc, TF * tfun);
 
-void stdout_lfun (SRunner *sr, FILE *file, enum print_output,
-		  void *obj, enum cl_event evt);
+void stdout_lfun (SRunner * sr, FILE * file, enum print_output,
+    void *obj, enum cl_event evt);
 
-void lfile_lfun (SRunner *sr, FILE *file, enum print_output,
-		  void *obj, enum cl_event evt);
+void lfile_lfun (SRunner * sr, FILE * file, enum print_output,
+    void *obj, enum cl_event evt);
 
-void xml_lfun (SRunner *sr, FILE *file, enum print_output,
-		  void *obj, enum cl_event evt);
+void xml_lfun (SRunner * sr, FILE * file, enum print_output,
+    void *obj, enum cl_event evt);
 
-void subunit_lfun (SRunner *sr, FILE *file, enum print_output,
-		  void *obj, enum cl_event evt);
+void tap_lfun (SRunner * sr, FILE * file, enum print_output,
+    void *obj, enum cl_event evt);
 
-void srunner_register_lfun (SRunner *sr, FILE *lfile, int close,
-			    LFun lfun, enum print_output);
+void subunit_lfun (SRunner * sr, FILE * file, enum print_output,
+    void *obj, enum cl_event evt);
 
-FILE *srunner_open_lfile (SRunner *sr);
-FILE *srunner_open_xmlfile (SRunner *sr);
-void srunner_init_logging (SRunner *sr, enum print_output print_mode);
-void srunner_end_logging (SRunner *sr);
+void srunner_register_lfun (SRunner * sr, FILE * lfile, int close,
+    LFun lfun, enum print_output);
+
+FILE *srunner_open_lfile (SRunner * sr);
+FILE *srunner_open_xmlfile (SRunner * sr);
+FILE *srunner_open_tapfile (SRunner * sr);
+void srunner_init_logging (SRunner * sr, enum print_output print_mode);
+void srunner_end_logging (SRunner * sr);
 
 #endif /* CHECK_LOG_H */
diff --git a/libs/gst/check/libcheck/check_msg.c b/libs/gst/check/libcheck/check_msg.c
index ae653ff..676c18b 100644
--- a/libs/gst/check/libcheck/check_msg.c
+++ b/libs/gst/check/libcheck/check_msg.c
@@ -18,22 +18,20 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
 #include <stdlib.h>
 #include <fcntl.h>
 #include <stdio.h>
 
 #include "check_error.h"
-#include "check.h"
+#include "internal-check.h"
 #include "check_list.h"
 #include "check_impl.h"
 #include "check_msg.h"
 #include "check_pack.h"
+#include "check_str.h"
 
 
 /* 'Pipe' is implemented as a temporary file to overcome message
@@ -57,7 +55,9 @@
  */
 
 static FILE *send_file1;
+static char *send_file1_name;
 static FILE *send_file2;
+static char *send_file2_name;
 
 static FILE *get_pipe (void);
 static void setup_pipe (void);
@@ -86,8 +86,18 @@
 {
   FailMsg fmsg;
 
-  fmsg.msg = (char *) msg;
-  ppack (fileno (get_pipe ()), CK_MSG_FAIL, (CheckMsg *) & fmsg);
+  fmsg.msg = strdup (msg);
+  ppack (get_pipe (), CK_MSG_FAIL, (CheckMsg *) & fmsg);
+  free (fmsg.msg);
+}
+
+void
+send_duration_info (int duration)
+{
+  DurationMsg dmsg;
+
+  dmsg.duration = duration;
+  ppack (get_pipe (), CK_MSG_DURATION, (CheckMsg *) & dmsg);
 }
 
 void
@@ -95,9 +105,10 @@
 {
   LocMsg lmsg;
 
-  lmsg.file = (char *) file;
+  lmsg.file = strdup (file);
   lmsg.line = line;
-  ppack (fileno (get_pipe ()), CK_MSG_LOC, (CheckMsg *) & lmsg);
+  ppack (get_pipe (), CK_MSG_LOC, (CheckMsg *) & lmsg);
+  free (lmsg.file);
 }
 
 void
@@ -106,7 +117,7 @@
   CtxMsg cmsg;
 
   cmsg.ctx = ctx;
-  ppack (fileno (get_pipe ()), CK_MSG_CTX, (CheckMsg *) & cmsg);
+  ppack (get_pipe (), CK_MSG_CTX, (CheckMsg *) & cmsg);
 }
 
 TestResult *
@@ -117,10 +128,17 @@
   TestResult *result;
 
   fp = get_pipe ();
-  if (fp == NULL)
+  if (fp == NULL) {
     eprintf ("Error in call to get_pipe", __FILE__, __LINE__ - 2);
+  }
+
   rewind (fp);
-  rmsg = punpack (fileno (fp));
+  rmsg = punpack (fp);
+
+  if (rmsg == NULL) {
+    eprintf ("Error in call to punpack", __FILE__, __LINE__ - 4);
+  }
+
   teardown_pipe ();
   setup_pipe ();
 
@@ -156,7 +174,7 @@
   tr = tr_create ();
 
   if (rmsg->msg != NULL || waserror) {
-    tr->ctx = (cur_fork_status () == CK_FORK) ? rmsg->lastctx : rmsg->failctx;
+    tr->ctx = rmsg->lastctx;
     tr->msg = rmsg->msg;
     rmsg->msg = NULL;
     tr_set_loc_by_ctx (tr, tr->ctx, rmsg);
@@ -167,6 +185,7 @@
   } else {
     tr->ctx = CK_CTX_TEST;
     tr->msg = NULL;
+    tr->duration = rmsg->duration;
     tr_set_loc_by_ctx (tr, CK_CTX_TEST, rmsg);
   }
 
@@ -185,16 +204,83 @@
   teardown_pipe ();
 }
 
+/**
+ * Open a temporary file.
+ *
+ * If the file could be unlinked upon creation, the name
+ * of the file is not returned via 'name'. However, if the
+ * file could not be unlinked, the name is returned,
+ * expecting the caller to both delete the file and
+ * free the 'name' field after the file is closed.
+ */
+FILE *
+open_tmp_file (char **name)
+{
+  FILE *file = NULL;
+
+  *name = NULL;
+
+#if !HAVE_MKSTEMP
+  /* Windows does not like tmpfile(). This is likely because tmpfile()
+   * call unlink() on the file before returning it, to make sure the
+   * file is deleted when it is closed. The unlink() call also fails
+   * on Windows if the file is still open. */
+  /* also note that mkstemp is apparently a C90 replacement for tmpfile */
+  /* perhaps all we need to do on Windows is set TMPDIR to whatever is
+     stored in TEMP for tmpfile to work */
+  /* and finally, the "b" from "w+b" is ignored on OS X, not sure about WIN32 */
+
+  file = tmpfile ();
+  if (file == NULL) {
+    char *tmp = getenv ("TEMP");
+    char *tmp_file = tempnam (tmp, "check_");
+
+    /*
+     * Note, tempnam is not enough to get a unique name. Between
+     * getting the name and opening the file, something else also
+     * calling tempnam() could get the same name. It has been observed
+     * on MinGW-w64 builds on Wine that this exact thing happens
+     * if multiple instances of a unit tests are running concurrently.
+     * To prevent two concurrent unit tests from getting the same file,
+     * we append the pid to the file. The pid should be unique on the
+     * system.
+     */
+    char *uniq_tmp_file = ck_strdup_printf ("%s.%d", tmp_file, getpid ());
+
+    file = fopen (uniq_tmp_file, "w+b");
+    *name = uniq_tmp_file;
+    free (tmp_file);
+  }
+#else
+  int fd = -1;
+  const char *tmp_dir = getenv ("TEMP");
+  if (!tmp_dir) {
+    tmp_dir = ".";
+  }
+  *name = ck_strdup_printf ("%s/check_XXXXXX", tmp_dir);
+  if (-1 < (fd = mkstemp (*name))) {
+    file = fdopen (fd, "w+b");
+    if (0 == unlink (*name) || NULL == file) {
+      free (*name);
+      *name = NULL;
+    }
+  }
+#endif
+  return file;
+}
+
 static void
 setup_pipe (void)
 {
-  if (send_file1 != 0) {
-    if (send_file2 != 0)
-      eprintf ("Only one nesting of suite runs supported", __FILE__, __LINE__);
-    send_file2 = tmpfile ();
-  } else {
-    send_file1 = tmpfile ();
+  if (send_file1 == NULL) {
+    send_file1 = open_tmp_file (&send_file1_name);
+    return;
   }
+  if (send_file2 == NULL) {
+    send_file2 = open_tmp_file (&send_file2_name);
+    return;
+  }
+  eprintf ("Only one nesting of suite runs supported", __FILE__, __LINE__);
 }
 
 static void
@@ -203,9 +289,19 @@
   if (send_file2 != 0) {
     fclose (send_file2);
     send_file2 = 0;
+    if (send_file2_name != NULL) {
+      unlink (send_file2_name);
+      free (send_file2_name);
+      send_file2_name = NULL;
+    }
   } else if (send_file1 != 0) {
     fclose (send_file1);
     send_file1 = 0;
+    if (send_file1_name != NULL) {
+      unlink (send_file1_name);
+      free (send_file1_name);
+      send_file1_name = NULL;
+    }
   } else {
     eprintf ("No messaging setup", __FILE__, __LINE__);
   }
diff --git a/libs/gst/check/libcheck/check_msg.h b/libs/gst/check/libcheck/check_msg.h
index 6ddaa3d..f84ee8c 100644
--- a/libs/gst/check/libcheck/check_msg.h
+++ b/libs/gst/check/libcheck/check_msg.h
@@ -24,13 +24,16 @@
 
 /* Functions implementing messaging during test runs */
 
-void send_failure_info(const char *msg);
-void send_loc_info(const char *file, int line);
-void send_ctx_info(enum ck_result_ctx ctx);
+void send_failure_info (const char *msg);
+void send_loc_info (const char *file, int line);
+void send_ctx_info (enum ck_result_ctx ctx);
+void send_duration_info (int duration);
 
-TestResult *receive_test_result(int waserror);
+TestResult *receive_test_result (int waserror);
 
-void setup_messaging(void);
-void teardown_messaging(void);
+void setup_messaging (void);
+void teardown_messaging (void);
+
+FILE *open_tmp_file (char **name);
 
 #endif /*CHECK_MSG_NEW_H */
diff --git a/libs/gst/check/libcheck/check_pack.c b/libs/gst/check/libcheck/check_pack.c
index c34644a..5119dfc 100644
--- a/libs/gst/check/libcheck/check_pack.c
+++ b/libs/gst/check/libcheck/check_pack.c
@@ -18,32 +18,37 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "_stdint.h"
-
-#include "check.h"
+#include "internal-check.h"
 #include "check_error.h"
 #include "check_list.h"
 #include "check_impl.h"
 #include "check_pack.h"
 
-#ifdef HAVE_PTHREAD
-#include <pthread.h>
-pthread_mutex_t lock_mutex = PTHREAD_MUTEX_INITIALIZER;
-#else
+#ifndef HAVE_PTHREAD
 #define pthread_mutex_lock(arg)
 #define pthread_mutex_unlock(arg)
+#define pthread_cleanup_push(f,a) {
+#define pthread_cleanup_pop(e) }
 #endif
 
+/* Maximum size for one message in the message stream. */
+#define CK_MAX_MSG_SIZE 8192
+/* This is used to implement a sliding window on the receiving
+ * side. When sending messages, we assure that no single message
+ * is bigger than this (actually we check against CK_MAX_MSG_SIZE/2).
+ * The usual size for a message is less than 80 bytes.
+ * All this is done instead of the previous approach to allocate (actually
+ * continuously reallocate) one big chunk for the whole message stream.
+ * Problems were seen in the wild with up to 4 GB reallocations.
+ */
+
+
 /* typedef an unsigned int that has at least 4 bytes */
 typedef uint32_t ck_uint32;
 
@@ -56,15 +61,17 @@
 static int pack_ctx (char **buf, CtxMsg * cmsg);
 static int pack_loc (char **buf, LocMsg * lmsg);
 static int pack_fail (char **buf, FailMsg * fmsg);
+static int pack_duration (char **buf, DurationMsg * fmsg);
 static void upack_ctx (char **buf, CtxMsg * cmsg);
 static void upack_loc (char **buf, LocMsg * lmsg);
 static void upack_fail (char **buf, FailMsg * fmsg);
+static void upack_duration (char **buf, DurationMsg * fmsg);
 
 static void check_type (int type, const char *file, int line);
 static enum ck_msg_type upack_type (char **buf);
 static void pack_type (char **buf, enum ck_msg_type type);
 
-static int read_buf (int fdes, char **buf);
+static int read_buf (FILE * fdes, int size, char *buf);
 static int get_result (char *buf, RcvMsg * rmsg);
 static void rcvmsg_update_ctx (RcvMsg * rmsg, enum ck_result_ctx ctx);
 static void rcvmsg_update_loc (RcvMsg * rmsg, const char *file, int line);
@@ -77,13 +84,15 @@
 static pfun pftab[] = {
   (pfun) pack_ctx,
   (pfun) pack_fail,
-  (pfun) pack_loc
+  (pfun) pack_loc,
+  (pfun) pack_duration
 };
 
 static upfun upftab[] = {
   (upfun) upack_ctx,
   (upfun) upack_fail,
-  (upfun) upack_loc
+  (upfun) upack_loc,
+  (upfun) upack_duration
 };
 
 int
@@ -103,7 +112,6 @@
 upack (char *buf, CheckMsg * msg, enum ck_msg_type *type)
 {
   char *obuf;
-  int nread;
 
   if (buf == NULL)
     return -1;
@@ -116,8 +124,7 @@
 
   upftab[*type] (&buf, msg);
 
-  nread = buf - obuf;
-  return nread;
+  return buf - obuf;
 }
 
 static void
@@ -126,10 +133,10 @@
   unsigned char *ubuf = (unsigned char *) *buf;
   ck_uint32 uval = val;
 
-  ubuf[0] = (uval >> 24) & 0xFF;
-  ubuf[1] = (uval >> 16) & 0xFF;
-  ubuf[2] = (uval >> 8) & 0xFF;
-  ubuf[3] = uval & 0xFF;
+  ubuf[0] = (unsigned char) ((uval >> 24) & 0xFF);
+  ubuf[1] = (unsigned char) ((uval >> 16) & 0xFF);
+  ubuf[2] = (unsigned char) ((uval >> 8) & 0xFF);
+  ubuf[3] = (unsigned char) (uval & 0xFF);
 
   *buf += 4;
 }
@@ -140,7 +147,9 @@
   unsigned char *ubuf = (unsigned char *) *buf;
   ck_uint32 uval;
 
-  uval = ((ubuf[0] << 24) | (ubuf[1] << 16) | (ubuf[2] << 8) | ubuf[3]);
+  uval =
+      (ck_uint32) ((ubuf[0] << 24) | (ubuf[1] << 16) | (ubuf[2] << 8) |
+      ubuf[3]);
 
   *buf += 4;
 
@@ -174,12 +183,12 @@
   strsz = upack_int (buf);
 
   if (strsz > 0) {
-    val = emalloc (strsz + 1);
+    val = (char *) emalloc (strsz + 1);
     memcpy (val, *buf, strsz);
     val[strsz] = 0;
     *buf += strsz;
   } else {
-    val = emalloc (1);
+    val = (char *) emalloc (1);
     *val = 0;
   }
 
@@ -206,7 +215,7 @@
   int len;
 
   len = 4 + 4;
-  *buf = ptr = emalloc (len);
+  *buf = ptr = (char *) emalloc (len);
 
   pack_type (&ptr, CK_MSG_CTX);
   pack_int (&ptr, (int) cmsg->ctx);
@@ -217,7 +226,28 @@
 static void
 upack_ctx (char **buf, CtxMsg * cmsg)
 {
-  cmsg->ctx = upack_int (buf);
+  cmsg->ctx = (enum ck_result_ctx) upack_int (buf);
+}
+
+static int
+pack_duration (char **buf, DurationMsg * cmsg)
+{
+  char *ptr;
+  int len;
+
+  len = 4 + 4;
+  *buf = ptr = (char *) emalloc (len);
+
+  pack_type (&ptr, CK_MSG_DURATION);
+  pack_int (&ptr, cmsg->duration);
+
+  return len;
+}
+
+static void
+upack_duration (char **buf, DurationMsg * cmsg)
+{
+  cmsg->duration = upack_int (buf);
 }
 
 static int
@@ -227,7 +257,7 @@
   int len;
 
   len = 4 + 4 + (lmsg->file ? strlen (lmsg->file) : 0) + 4;
-  *buf = ptr = emalloc (len);
+  *buf = ptr = (char *) emalloc (len);
 
   pack_type (&ptr, CK_MSG_LOC);
   pack_str (&ptr, lmsg->file);
@@ -250,7 +280,7 @@
   int len;
 
   len = 4 + 4 + (fmsg->msg ? strlen (fmsg->msg) : 0);
-  *buf = ptr = emalloc (len);
+  *buf = ptr = (char *) emalloc (len);
 
   pack_type (&ptr, CK_MSG_FAIL);
   pack_str (&ptr, fmsg->msg);
@@ -272,54 +302,52 @@
 }
 
 #ifdef HAVE_PTHREAD
-pthread_mutex_t mutex_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t ck_mutex_lock = PTHREAD_MUTEX_INITIALIZER;
+static void
+ppack_cleanup (void *mutex)
+{
+  pthread_mutex_unlock ((pthread_mutex_t *) mutex);
+}
 #endif
 
 void
-ppack (int fdes, enum ck_msg_type type, CheckMsg * msg)
+ppack (FILE * fdes, enum ck_msg_type type, CheckMsg * msg)
 {
-  char *buf;
+  char *buf = NULL;
   int n;
   ssize_t r;
 
   n = pack (type, &buf, msg);
-  pthread_mutex_lock (&mutex_lock);
-  r = write (fdes, buf, n);
-  pthread_mutex_unlock (&mutex_lock);
-  if (r == -1)
-    eprintf ("Error in call to write:", __FILE__, __LINE__ - 2);
+  /* Keep it on the safe side to not send too much data. */
+  if (n > (CK_MAX_MSG_SIZE / 2))
+    eprintf ("Message string too long", __FILE__, __LINE__ - 2);
+
+  pthread_cleanup_push (ppack_cleanup, &ck_mutex_lock);
+  pthread_mutex_lock (&ck_mutex_lock);
+  r = fwrite (buf, 1, n, fdes);
+  fflush (fdes);
+  pthread_mutex_unlock (&ck_mutex_lock);
+  pthread_cleanup_pop (0);
+  if (r != n)
+    eprintf ("Error in call to fwrite:", __FILE__, __LINE__ - 2);
 
   free (buf);
 }
 
 static int
-read_buf (int fdes, char **buf)
+read_buf (FILE * fdes, int size, char *buf)
 {
-  char *readloc;
   int n;
-  int nread = 0;
-  int size = 1;
-  int grow = 2;
 
-  *buf = emalloc (size);
-  readloc = *buf;
-  while (1) {
-    n = read (fdes, readloc, size - nread);
-    if (n == 0)
-      break;
-    if (n == -1)
-      eprintf ("Error in call to read:", __FILE__, __LINE__ - 4);
+  n = fread (buf, 1, size, fdes);
 
-    nread += n;
-    size *= grow;
-    *buf = erealloc (*buf, size);
-    readloc = *buf + nread;
+  if (ferror (fdes)) {
+    eprintf ("Error in call to fread:", __FILE__, __LINE__ - 4);
   }
 
-  return nread;
+  return n;
 }
 
-
 static int
 get_result (char *buf, RcvMsg * rmsg)
 {
@@ -333,23 +361,29 @@
 
   if (type == CK_MSG_CTX) {
     CtxMsg *cmsg = (CtxMsg *) & msg;
+
     rcvmsg_update_ctx (rmsg, cmsg->ctx);
   } else if (type == CK_MSG_LOC) {
     LocMsg *lmsg = (LocMsg *) & msg;
+
     if (rmsg->failctx == CK_CTX_INVALID) {
       rcvmsg_update_loc (rmsg, lmsg->file, lmsg->line);
     }
     free (lmsg->file);
   } else if (type == CK_MSG_FAIL) {
     FailMsg *fmsg = (FailMsg *) & msg;
+
     if (rmsg->msg == NULL) {
-      rmsg->msg = emalloc (strlen (fmsg->msg) + 1);
-      strcpy (rmsg->msg, fmsg->msg);
+      rmsg->msg = strdup (fmsg->msg);
       rmsg->failctx = rmsg->lastctx;
     } else {
       /* Skip subsequent failure messages, only happens for CK_NOFORK */
     }
     free (fmsg->msg);
+  } else if (type == CK_MSG_DURATION) {
+    DurationMsg *cmsg = (DurationMsg *) & msg;
+
+    rmsg->duration = cmsg->duration;
   } else
     check_type (type, __FILE__, __LINE__);
 
@@ -375,10 +409,11 @@
 {
   RcvMsg *rmsg;
 
-  rmsg = emalloc (sizeof (RcvMsg));
+  rmsg = (RcvMsg *) emalloc (sizeof (RcvMsg));
   rmsg->lastctx = CK_CTX_INVALID;
   rmsg->failctx = CK_CTX_INVALID;
   rmsg->msg = NULL;
+  rmsg->duration = -1;
   reset_rcv_test (rmsg);
   reset_rcv_fixture (rmsg);
   return rmsg;
@@ -406,40 +441,47 @@
 static void
 rcvmsg_update_loc (RcvMsg * rmsg, const char *file, int line)
 {
-  int flen = strlen (file);
-
   if (rmsg->lastctx == CK_CTX_TEST) {
     free (rmsg->test_file);
     rmsg->test_line = line;
-    rmsg->test_file = emalloc (flen + 1);
-    strcpy (rmsg->test_file, file);
+    rmsg->test_file = strdup (file);
   } else {
     free (rmsg->fixture_file);
     rmsg->fixture_line = line;
-    rmsg->fixture_file = emalloc (flen + 1);
-    strcpy (rmsg->fixture_file, file);
+    rmsg->fixture_file = strdup (file);
   }
 }
 
 RcvMsg *
-punpack (int fdes)
+punpack (FILE * fdes)
 {
-  int nread, n;
+  int nread, nparse, n;
   char *buf;
-  char *obuf;
   RcvMsg *rmsg;
 
-  nread = read_buf (fdes, &buf);
-  obuf = buf;
   rmsg = rcvmsg_create ();
 
-  while (nread > 0) {
+  /* Allcate a buffer */
+  buf = (char *) emalloc (CK_MAX_MSG_SIZE);
+  /* Fill the buffer from the file */
+  nread = read_buf (fdes, CK_MAX_MSG_SIZE, buf);
+  nparse = nread;
+  /* While not all parsed */
+  while (nparse > 0) {
+    /* Parse one message */
     n = get_result (buf, rmsg);
-    nread -= n;
-    buf += n;
+    nparse -= n;
+    /* Move remaining data in buffer to the beginning */
+    memmove (buf, buf + n, nparse);
+    /* If EOF has not been seen */
+    if (nread > 0) {
+      /* Read more data into empty space at end of the buffer */
+      nread = read_buf (fdes, n, buf + nparse);
+      nparse += nread;
+    }
   }
+  free (buf);
 
-  free (obuf);
   if (rmsg->lastctx == CK_CTX_INVALID) {
     free (rmsg);
     rmsg = NULL;
diff --git a/libs/gst/check/libcheck/check_pack.h b/libs/gst/check/libcheck/check_pack.h
index 3b916c9..7bde267 100644
--- a/libs/gst/check/libcheck/check_pack.h
+++ b/libs/gst/check/libcheck/check_pack.h
@@ -22,10 +22,12 @@
 #define CHECK_PACK_H
 
 
-enum ck_msg_type {
+enum ck_msg_type
+{
   CK_MSG_CTX,
   CK_MSG_FAIL,
   CK_MSG_LOC,
+  CK_MSG_DURATION,
   CK_MSG_LAST
 };
 
@@ -34,7 +36,7 @@
   enum ck_result_ctx ctx;
 } CtxMsg;
 
-typedef struct LocMsg 
+typedef struct LocMsg
 {
   int line;
   char *file;
@@ -45,11 +47,17 @@
   char *msg;
 } FailMsg;
 
+typedef struct DurationMsg
+{
+  int duration;
+} DurationMsg;
+
 typedef union
 {
-  CtxMsg  ctx_msg;
+  CtxMsg ctx_msg;
   FailMsg fail_msg;
-  LocMsg  loc_msg;
+  LocMsg loc_msg;
+  DurationMsg duration_msg;
 } CheckMsg;
 
 typedef struct RcvMsg
@@ -61,16 +69,16 @@
   char *test_file;
   int test_line;
   char *msg;
+  int duration;
 } RcvMsg;
 
-void rcvmsg_free (RcvMsg *rmsg);
+void rcvmsg_free (RcvMsg * rmsg);
 
-  
-int pack (enum ck_msg_type type, char **buf, CheckMsg *msg);
-int upack (char *buf, CheckMsg *msg, enum ck_msg_type *type);
 
-void ppack (int fdes, enum ck_msg_type type, CheckMsg *msg);
-RcvMsg *punpack (int fdes);
+int pack (enum ck_msg_type type, char **buf, CheckMsg * msg);
+int upack (char *buf, CheckMsg * msg, enum ck_msg_type *type);
 
+void ppack (FILE * fdes, enum ck_msg_type type, CheckMsg * msg);
+RcvMsg *punpack (FILE * fdes);
 
 #endif /*CHECK_PACK_H */
diff --git a/libs/gst/check/libcheck/check_print.c b/libs/gst/check/libcheck/check_print.c
index e29aa7b..4c1a4ad 100644
--- a/libs/gst/check/libcheck/check_print.c
+++ b/libs/gst/check/libcheck/check_print.c
@@ -18,13 +18,13 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 
-#include "check.h"
+#include "internal-check.h"
 #include "check_list.h"
 #include "check_impl.h"
 #include "check_str.h"
@@ -83,30 +83,16 @@
 
   resultlst = sr->resultlst;
 
-  for (list_front (resultlst); !list_at_end (resultlst);
-      list_advance (resultlst)) {
-    TestResult *tr = list_val (resultlst);
+  for (check_list_front (resultlst); !check_list_at_end (resultlst);
+      check_list_advance (resultlst)) {
+    TestResult *tr = (TestResult *) check_list_val (resultlst);
+
     tr_fprint (file, tr, print_mode);
   }
   return;
 }
 
 void
-tr_fprint (FILE * file, TestResult * tr, enum print_output print_mode)
-{
-  if (print_mode == CK_ENV) {
-    print_mode = get_env_printmode ();
-  }
-
-  if ((print_mode >= CK_VERBOSE && tr->rtype == CK_PASS) ||
-      (tr->rtype != CK_PASS && print_mode >= CK_NORMAL)) {
-    char *trstr = tr_str (tr);
-    fprintf (file, "%s\n", trstr);
-    free (trstr);
-  }
-}
-
-static void
 fprint_xml_esc (FILE * file, const char *str)
 {
   for (; *str != '\0'; str++) {
@@ -139,23 +125,39 @@
 }
 
 void
+tr_fprint (FILE * file, TestResult * tr, enum print_output print_mode)
+{
+  if (print_mode == CK_ENV) {
+    print_mode = get_env_printmode ();
+  }
+
+  if ((print_mode >= CK_VERBOSE && tr->rtype == CK_PASS) ||
+      (tr->rtype != CK_PASS && print_mode >= CK_NORMAL)) {
+    char *trstr = tr_str (tr);
+
+    fprintf (file, "%s\n", trstr);
+    free (trstr);
+  }
+}
+
+void
 tr_xmlprint (FILE * file, TestResult * tr,
     enum print_output print_mode CK_ATTRIBUTE_UNUSED)
 {
   char result[10];
-  char *path_name;
-  char *file_name;
-  char *slash;
+  char *path_name = NULL;
+  char *file_name = NULL;
+  char *slash = NULL;
 
   switch (tr->rtype) {
     case CK_PASS:
-      strcpy (result, "success");
+      snprintf (result, sizeof (result), "%s", "success");
       break;
     case CK_FAILURE:
-      strcpy (result, "failure");
+      snprintf (result, sizeof (result), "%s", "failure");
       break;
     case CK_ERROR:
-      strcpy (result, "error");
+      snprintf (result, sizeof (result), "%s", "error");
       break;
     case CK_TEST_RESULT_INVALID:
     default:
@@ -163,22 +165,33 @@
       break;
   }
 
-  slash = strrchr (tr->file, '/');
-  if (slash == NULL) {
-    path_name = (char *) ".";
-    file_name = tr->file;
-  } else {
-    path_name = strdup (tr->file);
-    path_name[slash - tr->file] = 0;    /* Terminate the temporary string. */
-    file_name = slash + 1;
+  if (tr->file) {
+    slash = strrchr (tr->file, '/');
+    if (slash == NULL) {
+      slash = strrchr (tr->file, '\\');
+    }
+
+    if (slash == NULL) {
+      path_name = strdup (".");
+      file_name = tr->file;
+    } else {
+      path_name = strdup (tr->file);
+      path_name[slash - tr->file] = 0;  /* Terminate the temporary string. */
+      file_name = slash + 1;
+    }
   }
 
 
   fprintf (file, "    <test result=\"%s\">\n", result);
-  fprintf (file, "      <path>%s</path>\n", path_name);
-  fprintf (file, "      <fn>%s:%d</fn>\n", file_name, tr->line);
+  fprintf (file, "      <path>%s</path>\n",
+      (path_name == NULL ? "" : path_name));
+  fprintf (file, "      <fn>%s:%d</fn>\n",
+      (file_name == NULL ? "" : file_name), tr->line);
   fprintf (file, "      <id>%s</id>\n", tr->tname);
   fprintf (file, "      <iteration>%d</iteration>\n", tr->iter);
+  fprintf (file, "      <duration>%d.%06d</duration>\n",
+      tr->duration < 0 ? -1 : tr->duration / US_PER_SEC,
+      tr->duration < 0 ? 0 : tr->duration % US_PER_SEC);
   fprintf (file, "      <description>");
   fprint_xml_esc (file, tr->tcname);
   fprintf (file, "</description>\n");
@@ -187,15 +200,14 @@
   fprintf (file, "</message>\n");
   fprintf (file, "    </test>\n");
 
-  if (slash != NULL) {
-    free (path_name);
-  }
+  free (path_name);
 }
 
 enum print_output
 get_env_printmode (void)
 {
   char *env = getenv ("CK_VERBOSITY");
+
   if (env == NULL)
     return CK_NORMAL;
   if (strcmp (env, "silent") == 0)
diff --git a/libs/gst/check/libcheck/check_print.h b/libs/gst/check/libcheck/check_print.h
index 18c0f62..f75274b 100644
--- a/libs/gst/check/libcheck/check_print.h
+++ b/libs/gst/check/libcheck/check_print.h
@@ -21,9 +21,11 @@
 #ifndef CHECK_PRINT_H
 #define CHECK_PRINT_H
 
-void tr_fprint (FILE *file, TestResult *tr, enum print_output print_mode);
-void tr_xmlprint (FILE *file, TestResult *tr, enum print_output print_mode);
-void srunner_fprint (FILE *file, SRunner *sr, enum print_output print_mode);
+/* escape XML special characters (" ' < > &) in str and print to file */
+void fprint_xml_esc (FILE * file, const char *str);
+void tr_fprint (FILE * file, TestResult * tr, enum print_output print_mode);
+void tr_xmlprint (FILE * file, TestResult * tr, enum print_output print_mode);
+void srunner_fprint (FILE * file, SRunner * sr, enum print_output print_mode);
 enum print_output get_env_printmode (void);
 
 
diff --git a/libs/gst/check/libcheck/check_run.c b/libs/gst/check/libcheck/check_run.c
index 0c7b815..c727052 100644
--- a/libs/gst/check/libcheck/check_run.c
+++ b/libs/gst/check/libcheck/check_run.c
@@ -18,22 +18,18 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <sys/types.h>
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
+#include <time.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdarg.h>
 #include <signal.h>
+#include <setjmp.h>
 
-#include "check.h"
+#include "internal-check.h"
 #include "check_error.h"
 #include "check_list.h"
 #include "check_impl.h"
@@ -56,35 +52,40 @@
   CK_NOFORK_FIXTURE
 };
 
+
 /* all functions are defined in the same order they are declared.
    functions that depend on forking are gathered all together.
    non-static functions are at the end of the file. */
 static void srunner_run_init (SRunner * sr, enum print_output print_mode);
 static void srunner_run_end (SRunner * sr, enum print_output print_mode);
-static void srunner_iterate_suites (SRunner * sr, enum print_output print_mode);
+static void srunner_iterate_suites (SRunner * sr,
+    const char *sname, const char *tcname, enum print_output print_mode);
 static void srunner_iterate_tcase_tfuns (SRunner * sr, TCase * tc);
 static void srunner_add_failure (SRunner * sr, TestResult * tf);
+static TestResult *srunner_run_setup (List * func_list,
+    enum fork_status fork_usage, const char *test_name, const char *setup_name);
 static int srunner_run_unchecked_setup (SRunner * sr, TCase * tc);
 static TestResult *tcase_run_checked_setup (SRunner * sr, TCase * tc);
-static void srunner_run_teardown (List * l);
-static void srunner_run_unchecked_teardown (TCase * tc);
+static void srunner_run_teardown (List * fixture_list,
+    enum fork_status fork_usage);
+static void srunner_run_unchecked_teardown (SRunner * sr, TCase * tc);
 static void tcase_run_checked_teardown (TCase * tc);
 static void srunner_run_tcase (SRunner * sr, TCase * tc);
 static TestResult *tcase_run_tfun_nofork (SRunner * sr, TCase * tc, TF * tf,
     int i);
 static TestResult *receive_result_info_nofork (const char *tcname,
-    const char *tname, int iter);
+    const char *tname, int iter, int duration);
 static void set_nofork_info (TestResult * tr);
 static char *pass_msg (void);
 
-#ifdef _POSIX_VERSION
+#if defined(HAVE_FORK) && HAVE_FORK==1
 static TestResult *tcase_run_tfun_fork (SRunner * sr, TCase * tc, TF * tf,
     int i);
 static TestResult *receive_result_info_fork (const char *tcname,
-    const char *tname, int iter, int status, int expected_signal,
-    unsigned char allowed_exit_value);
+    const char *tname, int iter,
+    int status, int expected_signal, signed char allowed_exit_value);
 static void set_fork_info (TestResult * tr, int status, int expected_signal,
-    unsigned char allowed_exit_value);
+    signed char allowed_exit_value);
 static char *signal_msg (int sig);
 static char *signal_error_msg (int signal_received, int signal_expected);
 static char *exit_msg (int exitstatus);
@@ -106,7 +107,7 @@
       break;
   }
 }
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_FORK */
 
 #define MSG_LEN 100
 
@@ -130,6 +131,7 @@
 
 static void
 srunner_iterate_suites (SRunner * sr,
+    const char *sname, const char *tcname,
     enum print_output CK_ATTRIBUTE_UNUSED print_mode)
 {
   List *slst;
@@ -138,15 +140,26 @@
 
   slst = sr->slst;
 
-  for (list_front (slst); !list_at_end (slst); list_advance (slst)) {
-    Suite *s = list_val (slst);
+  for (check_list_front (slst); !check_list_at_end (slst);
+      check_list_advance (slst)) {
+    Suite *s = (Suite *) check_list_val (slst);
+
+    if (((sname != NULL) && (strcmp (sname, s->name) != 0))
+        || ((tcname != NULL) && (!suite_tcase (s, tcname))))
+      continue;
 
     log_suite_start (sr, s);
 
     tcl = s->tclst;
 
-    for (list_front (tcl); !list_at_end (tcl); list_advance (tcl)) {
-      tc = list_val (tcl);
+    for (check_list_front (tcl); !check_list_at_end (tcl);
+        check_list_advance (tcl)) {
+      tc = (TCase *) check_list_val (tcl);
+
+      if ((tcname != NULL) && (strcmp (tcname, tc->name) != 0)) {
+        continue;
+      }
+
       srunner_run_tcase (sr, tc);
     }
 
@@ -163,28 +176,34 @@
 
   tfl = tc->tflst;
 
-  for (list_front (tfl); !list_at_end (tfl); list_advance (tfl)) {
+  for (check_list_front (tfl); !check_list_at_end (tfl);
+      check_list_advance (tfl)) {
     int i;
-    tfun = list_val (tfl);
+
+    tfun = (TF *) check_list_val (tfl);
 
     for (i = tfun->loop_start; i < tfun->loop_end; i++) {
       log_test_start (sr, tc, tfun);
       switch (srunner_fork_status (sr)) {
         case CK_FORK:
-#ifdef _POSIX_VERSION
+#if defined(HAVE_FORK) && HAVE_FORK==1
           tr = tcase_run_tfun_fork (sr, tc, tfun, i);
-#else /* _POSIX_VERSION */
+#else /* HAVE_FORK */
           eprintf ("This version does not support fork", __FILE__, __LINE__);
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_FORK */
           break;
         case CK_NOFORK:
           tr = tcase_run_tfun_nofork (sr, tc, tfun, i);
           break;
+        case CK_FORK_GETENV:
         default:
           eprintf ("Bad fork status in SRunner", __FILE__, __LINE__);
       }
-      srunner_add_failure (sr, tr);
-      log_test_end (sr, tr);
+
+      if (NULL != tr) {
+        srunner_add_failure (sr, tr);
+        log_test_end (sr, tr);
+      }
     }
   }
 }
@@ -192,7 +211,7 @@
 static void
 srunner_add_failure (SRunner * sr, TestResult * tr)
 {
-  list_add_end (sr->resultlst, tr);
+  check_list_add_end (sr->resultlst, tr);
   sr->stats->n_checked++;       /* count checks during setup, test, and teardown */
   if (tr->rtype == CK_FAILURE)
     sr->stats->n_failed++;
@@ -201,62 +220,30 @@
 
 }
 
-static int
-srunner_run_unchecked_setup (SRunner * sr, TCase * tc)
-{
-  TestResult *tr;
-  List *l;
-  Fixture *f;
-  int rval = 1;
-
-  set_fork_status (CK_NOFORK);
-
-  l = tc->unch_sflst;
-
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    send_ctx_info (CK_CTX_SETUP);
-    f = list_val (l);
-    f->fun ();
-
-    tr = receive_result_info_nofork (tc->name, "unchecked_setup", 0);
-
-    if (tr->rtype != CK_PASS) {
-      srunner_add_failure (sr, tr);
-      rval = 0;
-      break;
-    }
-    free (tr->file);
-    free (tr->msg);
-    free (tr);
-  }
-
-  set_fork_status (srunner_fork_status (sr));
-  return rval;
-}
-
 static TestResult *
-tcase_run_checked_setup (SRunner * sr, TCase * tc)
+srunner_run_setup (List * fixture_list, enum fork_status fork_usage,
+    const char *test_name, const char *setup_name)
 {
   TestResult *tr = NULL;
-  List *l;
-  Fixture *f;
-  enum fork_status fstat = srunner_fork_status (sr);
+  Fixture *setup_fixture;
 
-  l = tc->ch_sflst;
-  if (fstat == CK_FORK) {
+  if (fork_usage == CK_FORK) {
     send_ctx_info (CK_CTX_SETUP);
   }
 
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    if (fstat == CK_NOFORK) {
-      send_ctx_info (CK_CTX_SETUP);
-    }
-    f = list_val (l);
-    f->fun ();
+  for (check_list_front (fixture_list); !check_list_at_end (fixture_list);
+      check_list_advance (fixture_list)) {
+    setup_fixture = (Fixture *) check_list_val (fixture_list);
 
-    /* Stop the setup and return the failure if nofork mode. */
-    if (fstat == CK_NOFORK) {
-      tr = receive_result_info_nofork (tc->name, "checked_setup", 0);
+    if (fork_usage == CK_NOFORK) {
+      send_ctx_info (CK_CTX_SETUP);
+
+      if (0 == setjmp (error_jmp_buffer)) {
+        setup_fixture->fun ();
+      }
+
+      /* Stop the setup and return the failure in nofork mode. */
+      tr = receive_result_info_nofork (test_name, setup_name, 0, -1);
       if (tr->rtype != CK_PASS) {
         break;
       }
@@ -265,34 +252,75 @@
       free (tr->msg);
       free (tr);
       tr = NULL;
+    } else {
+      setup_fixture->fun ();
     }
   }
 
   return tr;
 }
 
-static void
-srunner_run_teardown (List * l)
+static int
+srunner_run_unchecked_setup (SRunner * sr, TCase * tc)
 {
-  Fixture *f;
+  TestResult *tr = NULL;
+  int rval = 1;
 
-  for (list_front (l); !list_at_end (l); list_advance (l)) {
-    f = list_val (l);
+  set_fork_status (CK_NOFORK);
+  tr = srunner_run_setup (tc->unch_sflst, CK_NOFORK, tc->name,
+      "unchecked_setup");
+  set_fork_status (srunner_fork_status (sr));
+
+  if (tr != NULL && tr->rtype != CK_PASS) {
+    srunner_add_failure (sr, tr);
+    rval = 0;
+  }
+
+  return rval;
+}
+
+static TestResult *
+tcase_run_checked_setup (SRunner * sr, TCase * tc)
+{
+  TestResult *tr = srunner_run_setup (tc->ch_sflst, srunner_fork_status (sr),
+      tc->name, "checked_setup");
+
+  return tr;
+}
+
+static void
+srunner_run_teardown (List * fixture_list, enum fork_status fork_usage)
+{
+  Fixture *fixture;
+
+  for (check_list_front (fixture_list); !check_list_at_end (fixture_list);
+      check_list_advance (fixture_list)) {
+    fixture = (Fixture *) check_list_val (fixture_list);
     send_ctx_info (CK_CTX_TEARDOWN);
-    f->fun ();
+
+    if (fork_usage == CK_NOFORK) {
+      if (0 == setjmp (error_jmp_buffer)) {
+        fixture->fun ();
+      } else {
+        /* Abort the remaining teardowns */
+        break;
+      }
+    } else {
+      fixture->fun ();
+    }
   }
 }
 
 static void
-srunner_run_unchecked_teardown (TCase * tc)
+srunner_run_unchecked_teardown (SRunner * sr, TCase * tc)
 {
-  srunner_run_teardown (tc->unch_tflst);
+  srunner_run_teardown (tc->unch_tflst, srunner_fork_status (sr));
 }
 
 static void
 tcase_run_checked_teardown (TCase * tc)
 {
-  srunner_run_teardown (tc->ch_tflst);
+  srunner_run_teardown (tc->ch_tflst, CK_NOFORK);
 }
 
 static void
@@ -300,7 +328,7 @@
 {
   if (srunner_run_unchecked_setup (sr, tc)) {
     srunner_iterate_tcase_tfuns (sr, tc);
-    srunner_run_unchecked_teardown (tc);
+    srunner_run_unchecked_teardown (sr, tc);
   }
 }
 
@@ -308,29 +336,40 @@
 tcase_run_tfun_nofork (SRunner * sr, TCase * tc, TF * tfun, int i)
 {
   TestResult *tr;
+  struct timespec ts_start = { 0, 0 }, ts_end = {
+  0, 0};
 
   tr = tcase_run_checked_setup (sr, tc);
   if (tr == NULL) {
-    tfun->fn (i);
+    clock_gettime (check_get_clockid (), &ts_start);
+    if (0 == setjmp (error_jmp_buffer)) {
+      tfun->fn (i);
+    }
+    clock_gettime (check_get_clockid (), &ts_end);
     tcase_run_checked_teardown (tc);
-    return receive_result_info_nofork (tc->name, tfun->name, i);
+    return receive_result_info_nofork (tc->name, tfun->name, i,
+        DIFF_IN_USEC (ts_start, ts_end));
   }
 
   return tr;
 }
 
 static TestResult *
-receive_result_info_nofork (const char *tcname, const char *tname, int iter)
+receive_result_info_nofork (const char *tcname,
+    const char *tname, int iter, int duration)
 {
   TestResult *tr;
 
   tr = receive_test_result (0);
-  if (tr == NULL)
+  if (tr == NULL) {
     eprintf ("Failed to receive test result", __FILE__, __LINE__);
-  tr->tcname = tcname;
-  tr->tname = tname;
-  tr->iter = iter;
-  set_nofork_info (tr);
+  } else {
+    tr->tcname = tcname;
+    tr->tname = tname;
+    tr->iter = iter;
+    tr->duration = duration;
+    set_nofork_info (tr);
+  }
 
   return tr;
 }
@@ -349,18 +388,23 @@
 static char *
 pass_msg (void)
 {
-  char *msg = emalloc (sizeof ("Passed"));
-  strcpy (msg, "Passed");
-  return msg;
+  return strdup ("Passed");
 }
 
-#ifdef _POSIX_VERSION
+#if defined(HAVE_FORK) && HAVE_FORK==1
 static TestResult *
 tcase_run_tfun_fork (SRunner * sr, TCase * tc, TF * tfun, int i)
 {
   pid_t pid_w;
   pid_t pid;
   int status = 0;
+  struct timespec ts_start = { 0, 0 }, ts_end = {
+  0, 0};
+
+  timer_t timerid;
+  struct itimerspec timer_spec;
+  TestResult *tr;
+
 
   pid = fork ();
   if (pid == -1)
@@ -368,19 +412,41 @@
   if (pid == 0) {
     setpgid (0, 0);
     group_pid = getpgrp ();
-    tcase_run_checked_setup (sr, tc);
+    tr = tcase_run_checked_setup (sr, tc);
+    free (tr);
+    clock_gettime (check_get_clockid (), &ts_start);
     tfun->fn (i);
+    clock_gettime (check_get_clockid (), &ts_end);
     tcase_run_checked_teardown (tc);
+    send_duration_info (DIFF_IN_USEC (ts_start, ts_end));
     exit (EXIT_SUCCESS);
   } else {
     group_pid = pid;
   }
 
   alarm_received = 0;
-  alarm (tc->timeout);
-  do {
-    pid_w = waitpid (pid, &status, 0);
-  } while (pid_w == -1);
+
+  if (timer_create (check_get_clockid (),
+          NULL /* fire SIGALRM if timer expires */ ,
+          &timerid) == 0) {
+    /* Set the timer to fire once */
+    timer_spec.it_value = tc->timeout;
+    timer_spec.it_interval.tv_sec = 0;
+    timer_spec.it_interval.tv_nsec = 0;
+    if (timer_settime (timerid, 0, &timer_spec, NULL) == 0) {
+      do {
+        pid_w = waitpid (pid, &status, 0);
+      }
+      while (pid_w == -1);
+    } else {
+      eprintf ("Error in call to timer_settime:", __FILE__, __LINE__);
+    }
+
+    /* If the timer has not fired, disable it */
+    timer_delete (timerid);
+  } else {
+    eprintf ("Error in call to timer_create:", __FILE__, __LINE__);
+  }
 
   killpg (pid, SIGKILL);        /* Kill remaining processes. */
 
@@ -391,28 +457,30 @@
 static TestResult *
 receive_result_info_fork (const char *tcname,
     const char *tname,
-    int iter, int status, int expected_signal, unsigned char allowed_exit_value)
+    int iter, int status, int expected_signal, signed char allowed_exit_value)
 {
   TestResult *tr;
 
   tr = receive_test_result (waserror (status, expected_signal));
-  if (tr == NULL)
+  if (tr == NULL) {
     eprintf ("Failed to receive test result", __FILE__, __LINE__);
-  tr->tcname = tcname;
-  tr->tname = tname;
-  tr->iter = iter;
-  set_fork_info (tr, status, expected_signal, allowed_exit_value);
+  } else {
+    tr->tcname = tcname;
+    tr->tname = tname;
+    tr->iter = iter;
+    set_fork_info (tr, status, expected_signal, allowed_exit_value);
+  }
 
   return tr;
 }
 
 static void
 set_fork_info (TestResult * tr, int status, int signal_expected,
-    unsigned char allowed_exit_value)
+    signed char allowed_exit_value)
 {
   int was_sig = WIFSIGNALED (status);
   int was_exit = WIFEXITED (status);
-  int exit_status = WEXITSTATUS (status);
+  signed char exit_status = WEXITSTATUS (status);
   int signal_received = WTERMSIG (status);
 
   if (was_sig) {
@@ -420,23 +488,38 @@
       if (alarm_received) {
         /* Got alarm instead of signal */
         tr->rtype = CK_ERROR;
+        if (tr->msg != NULL) {
+          free (tr->msg);
+        }
         tr->msg = signal_error_msg (signal_received, signal_expected);
       } else {
         tr->rtype = CK_PASS;
+        if (tr->msg != NULL) {
+          free (tr->msg);
+        }
         tr->msg = pass_msg ();
       }
     } else if (signal_expected != 0) {
       /* signal received, but not the expected one */
       tr->rtype = CK_ERROR;
+      if (tr->msg != NULL) {
+        free (tr->msg);
+      }
       tr->msg = signal_error_msg (signal_received, signal_expected);
     } else {
       /* signal received and none expected */
       tr->rtype = CK_ERROR;
+      if (tr->msg != NULL) {
+        free (tr->msg);
+      }
       tr->msg = signal_msg (signal_received);
     }
   } else if (signal_expected == 0) {
     if (was_exit && exit_status == allowed_exit_value) {
       tr->rtype = CK_PASS;
+      if (tr->msg != NULL) {
+        free (tr->msg);
+      }
       tr->msg = pass_msg ();
     } else if (was_exit && exit_status != allowed_exit_value) {
       if (tr->msg == NULL) {    /* early exit */
@@ -448,11 +531,11 @@
     }
   } else {                      /* a signal was expected and none raised */
     if (was_exit) {
+      if (tr->msg != NULL) {
+        free (tr->msg);
+      }
       tr->msg = exit_msg (exit_status);
-      if (exit_status == allowed_exit_value)
-        tr->rtype = CK_FAILURE; /* normal exit status */
-      else
-        tr->rtype = CK_FAILURE; /* early exit */
+      tr->rtype = CK_FAILURE;   /* normal exit status */
     }
   }
 }
@@ -460,7 +543,8 @@
 static char *
 signal_msg (int signal)
 {
-  char *msg = emalloc (MSG_LEN);        /* free'd by caller */
+  char *msg = (char *) emalloc (MSG_LEN);       /* free'd by caller */
+
   if (alarm_received) {
     snprintf (msg, MSG_LEN, "Test timeout expired");
   } else {
@@ -475,11 +559,13 @@
 {
   char *sig_r_str;
   char *sig_e_str;
-  char *msg = emalloc (MSG_LEN);        /* free'd by caller */
+  char *msg = (char *) emalloc (MSG_LEN);       /* free'd by caller */
+
   sig_r_str = strdup (strsignal (signal_received));
   sig_e_str = strdup (strsignal (signal_expected));
   if (alarm_received) {
-    snprintf (msg, MSG_LEN, "Test timeout expired, expected signal %d (%s)",
+    snprintf (msg, MSG_LEN,
+        "Test timeout expired, expected signal %d (%s)",
         signal_expected, sig_e_str);
   } else {
     snprintf (msg, MSG_LEN, "Received signal %d (%s), expected %d (%s)",
@@ -493,7 +579,8 @@
 static char *
 exit_msg (int exitval)
 {
-  char *msg = emalloc (MSG_LEN);        /* free'd by caller */
+  char *msg = (char *) emalloc (MSG_LEN);       /* free'd by caller */
+
   snprintf (msg, MSG_LEN, "Early exit with return value %d", exitval);
   return msg;
 }
@@ -509,24 +596,29 @@
   return ((was_sig && (signal_received != signal_expected)) ||
       (was_exit && exit_status != 0));
 }
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_FORK */
 
 enum fork_status
 srunner_fork_status (SRunner * sr)
 {
   if (sr->fstat == CK_FORK_GETENV) {
     char *env = getenv ("CK_FORK");
+
     if (env == NULL)
+#if defined(HAVE_FORK) && HAVE_FORK==1
       return CK_FORK;
+#else
+      return CK_NOFORK;
+#endif
     if (strcmp (env, "no") == 0)
       return CK_NOFORK;
     else {
-#ifdef _POSIX_VERSION
+#if defined(HAVE_FORK) && HAVE_FORK==1
       return CK_FORK;
-#else /* _POSIX_VERSION */
+#else /* HAVE_FORK */
       eprintf ("This version does not support fork", __FILE__, __LINE__);
       return CK_NOFORK;
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_FORK */
     }
   } else
     return sr->fstat;
@@ -535,16 +627,38 @@
 void
 srunner_set_fork_status (SRunner * sr, enum fork_status fstat)
 {
+#if !defined(HAVE_FORK) || HAVE_FORK==0
+  /* If fork() is unavailable, do not allow a fork mode to be set */
+  if (fstat != CK_NOFORK) {
+    eprintf ("This version does not support fork", __FILE__, __LINE__);
+  }
+#endif /* ! HAVE_FORK */
   sr->fstat = fstat;
 }
 
 void
 srunner_run_all (SRunner * sr, enum print_output print_mode)
 {
-#ifdef _POSIX_VERSION
+  srunner_run (sr, NULL,        /* All test suites.  */
+      NULL,                     /* All test cases.   */
+      print_mode);
+}
+
+void
+srunner_run (SRunner * sr, const char *sname, const char *tcname,
+    enum print_output print_mode)
+{
+#if defined(HAVE_SIGACTION) && defined(HAVE_FORK)
   struct sigaction old_action;
   struct sigaction new_action;
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_SIGACTION && HAVE_FORK */
+
+  /*  Get the selected test suite and test case from the
+     environment.  */
+  if (!tcname)
+    tcname = getenv ("CK_RUN_CASE");
+  if (!sname)
+    sname = getenv ("CK_RUN_SUITE");
 
   if (sr == NULL)
     return;
@@ -552,50 +666,54 @@
     eprintf ("Bad print_mode argument to srunner_run_all: %d",
         __FILE__, __LINE__, print_mode);
   }
-#ifdef _POSIX_VERSION
+#if defined(HAVE_SIGACTION) && defined(HAVE_FORK)
   memset (&new_action, 0, sizeof new_action);
   new_action.sa_handler = sig_handler;
   sigaction (SIGALRM, &new_action, &old_action);
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_SIGACTION && HAVE_FORK */
   srunner_run_init (sr, print_mode);
-  srunner_iterate_suites (sr, print_mode);
+  srunner_iterate_suites (sr, sname, tcname, print_mode);
   srunner_run_end (sr, print_mode);
-#ifdef _POSIX_VERSION
+#if defined(HAVE_SIGACTION) && defined(HAVE_FORK)
   sigaction (SIGALRM, &old_action, NULL);
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_SIGACTION && HAVE_FORK */
 }
 
 pid_t
 check_fork (void)
 {
-#ifdef _POSIX_VERSION
+#if defined(HAVE_FORK) && HAVE_FORK==1
   pid_t pid = fork ();
+
   /* Set the process to a process group to be able to kill it easily. */
-  setpgid (pid, group_pid);
+  if (pid >= 0) {
+    setpgid (pid, group_pid);
+  }
   return pid;
-#else /* _POSIX_VERSION */
+#else /* HAVE_FORK */
   eprintf ("This version does not support fork", __FILE__, __LINE__);
   return 0;
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_FORK */
 }
 
 void
 check_waitpid_and_exit (pid_t pid CK_ATTRIBUTE_UNUSED)
 {
-#ifdef _POSIX_VERSION
+#if defined(HAVE_FORK) && HAVE_FORK==1
   pid_t pid_w;
   int status;
 
   if (pid > 0) {
     do {
       pid_w = waitpid (pid, &status, 0);
-    } while (pid_w == -1);
+    }
+    while (pid_w == -1);
     if (waserror (status, 0)) {
       exit (EXIT_FAILURE);
     }
   }
   exit (EXIT_SUCCESS);
-#else /* _POSIX_VERSION */
+#else /* HAVE_FORK */
   eprintf ("This version does not support fork", __FILE__, __LINE__);
-#endif /* _POSIX_VERSION */
+#endif /* HAVE_FORK */
 }
diff --git a/libs/gst/check/libcheck/check_str.c b/libs/gst/check/libcheck/check_str.c
index e66073e..c1a18b7 100644
--- a/libs/gst/check/libcheck/check_str.c
+++ b/libs/gst/check/libcheck/check_str.c
@@ -18,12 +18,12 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#include "config.h"
+#include "libcompat.h"
 
 #include <stdio.h>
 #include <stdarg.h>
 
-#include "check.h"
+#include "internal-check.h"
 #include "check_list.h"
 #include "check_error.h"
 #include "check_impl.h"
@@ -79,11 +79,12 @@
 ck_strdup_printf (const char *fmt, ...)
 {
   /* Guess we need no more than 100 bytes. */
-  int n, size = 100;
+  int n;
+  size_t size = 100;
   char *p;
   va_list ap;
 
-  p = emalloc (size);
+  p = (char *) emalloc (size);
 
   while (1) {
     /* Try to print in the allocated space. */
@@ -91,16 +92,16 @@
     n = vsnprintf (p, size, fmt, ap);
     va_end (ap);
     /* If that worked, return the string. */
-    if (n > -1 && n < size)
+    if (n > -1 && n < (int) size)
       return p;
 
     /* Else try again with more space. */
     if (n > -1)                 /* C99 conform vsnprintf() */
-      size = n + 1;             /* precisely what is needed */
+      size = (size_t) n + 1;    /* precisely what is needed */
     else                        /* glibc 2.0 */
       size *= 2;                /* twice the old size */
 
-    p = erealloc (p, size);
+    p = (char *) erealloc (p, size);
   }
 }
 
@@ -108,6 +109,7 @@
 tr_type_str (TestResult * tr)
 {
   const char *str = NULL;
+
   if (tr->ctx == CK_CTX_TEST) {
     if (tr->rtype == CK_PASS)
       str = "P";
diff --git a/libs/gst/check/libcheck/check_str.h b/libs/gst/check/libcheck/check_str.h
index 9282a9a..bc70fb4 100644
--- a/libs/gst/check/libcheck/check_str.h
+++ b/libs/gst/check/libcheck/check_str.h
@@ -23,19 +23,19 @@
 
 /* Return a string representation of the given TestResult.  Return
    value has been malloc'd, and must be freed by the caller */
-char *tr_str (TestResult *tr);
+char *tr_str (TestResult * tr);
 
 /* Return a string representation of the given TestResult message
    without the test id or result type. This is suitable for separate
    formatting of the test and the message. Return value has been 
    malloc'd, and must be freed by the caller */
-char *tr_short_str (TestResult *tr);
+char *tr_short_str (TestResult * tr);
 
 /* Return a string representation of the given SRunner's run
    statistics (% passed, num run, passed, errors, failures). Return
    value has been malloc'd, and must be freed by the caller
-*/ 
-char *sr_stat_str (SRunner *sr);
+*/
+char *sr_stat_str (SRunner * sr);
 
 char *ck_strdup_printf (const char *fmt, ...);
 
diff --git a/libs/gst/check/libcheck/clock_gettime.c b/libs/gst/check/libcheck/clock_gettime.c
new file mode 100644
index 0000000..0baa1f5
--- /dev/null
+++ b/libs/gst/check/libcheck/clock_gettime.c
@@ -0,0 +1,64 @@
+#include "libcompat.h"
+
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#include <mach/mach_time.h>
+#include <unistd.h>
+#endif
+
+#define NANOSECONDS_PER_SECOND 1000000000
+
+
+
+int
+clock_gettime (clockid_t clk_id CK_ATTRIBUTE_UNUSED, struct timespec *ts)
+{
+
+#ifdef __MACH__
+  /* OS X does not have clock_gettime, use mach_absolute_time */
+
+  static mach_timebase_info_data_t sTimebaseInfo;
+  uint64_t rawTime;
+  uint64_t nanos;
+
+  rawTime = mach_absolute_time ();
+
+  /*
+   * OS X has a function to convert abs time to nano seconds: AbsoluteToNanoseconds
+   * However, the function may not be available as we may not have
+   * access to CoreServices. Because of this, we convert the abs time
+   * to nano seconds manually.
+   */
+
+  /*
+   * First grab the time base used on the system, if this is the first
+   * time we are being called. We can check if the value is uninitialized,
+   * as the denominator will be zero. 
+   */
+  if (sTimebaseInfo.denom == 0) {
+    (void) mach_timebase_info (&sTimebaseInfo);
+  }
+
+  /* 
+   * Do the conversion. We hope that the multiplication doesn't 
+   * overflow; the price you pay for working in fixed point.
+   */
+  nanos = rawTime * sTimebaseInfo.numer / sTimebaseInfo.denom;
+
+  /* 
+   * Fill in the timespec container 
+   */
+  ts->tv_sec = nanos / NANOSECONDS_PER_SECOND;
+  ts->tv_nsec = nanos - (ts->tv_sec * NANOSECONDS_PER_SECOND);
+#else
+  /* 
+   * As there is no function to fall back onto to get the current
+   * time, zero out the time so the caller will have a sane value. 
+   */
+  ts->tv_sec = 0;
+  ts->tv_nsec = 0;
+#endif
+
+  return 0;
+}
diff --git a/libs/gst/check/libcheck/libcompat.c b/libs/gst/check/libcheck/libcompat.c
new file mode 100644
index 0000000..f550d1d
--- /dev/null
+++ b/libs/gst/check/libcheck/libcompat.c
@@ -0,0 +1,15 @@
+#include "libcompat.h"
+
+/* silence warnings about an empty library */
+void
+ck_do_nothing (void)
+{
+  assert (0);
+
+  /*
+   * to silence warning about this function actually
+   * returning, but being marked as noreturn. assert()
+   * must be marked as a function that returns.
+   */
+  exit (1);
+}
diff --git a/libs/gst/check/libcheck/libcompat.h b/libs/gst/check/libcheck/libcompat.h
new file mode 100644
index 0000000..32f944c
--- /dev/null
+++ b/libs/gst/check/libcheck/libcompat.h
@@ -0,0 +1,176 @@
+#ifndef LIBCOMPAT_H
+#define LIBCOMPAT_H
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#define GCC_VERSION_AT_LEAST(major, minor) \
+((__GNUC__ > (major)) || \
+ (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
+#else
+#define GCC_VERSION_AT_LEAST(major, minor) 0
+#endif
+
+#if GCC_VERSION_AT_LEAST(2,95)
+#define CK_ATTRIBUTE_UNUSED __attribute__ ((unused))
+#else
+#define CK_ATTRIBUTE_UNUSED
+#endif /* GCC 2.95 */
+
+#if GCC_VERSION_AT_LEAST(2,5)
+#define CK_ATTRIBUTE_NORETURN __attribute__ ((noreturn))
+#else
+#define CK_ATTRIBUTE_NORETURN
+#endif /* GCC 2.5 */
+
+/*
+ * Used for MSVC to create the export attribute
+ * CK_DLL_EXP is defined during the compilation of the library
+ * on the command line.
+ */
+#ifndef CK_DLL_EXP
+#define CK_DLL_EXP
+#endif
+
+#if _MSC_VER
+#include <WinSock2.h>           /* struct timeval, API used in gettimeofday implementation */
+#include <io.h>                 /* read, write */
+#include <process.h>            /* getpid */
+#endif /* _MSC_VER */
+
+/* defines size_t */
+#include <sys/types.h>
+
+/* provides assert */
+#include <assert.h>
+
+/* defines FILE */
+#include <stdio.h>
+
+/* defines exit() */
+#include <stdlib.h>
+
+/* provides localtime and struct tm */
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif /* !HAVE_SYS_TIME_H */
+#include <time.h>
+
+/* declares fork(), _POSIX_VERSION.  according to Autoconf.info,
+   unistd.h defines _POSIX_VERSION if the system is POSIX-compliant,
+   so we will use this as a test for all things uniquely provided by
+   POSIX like sigaction() and fork() */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+/* declares pthread_create and friends */
+#ifdef HAVE_PTHREAD
+#include <pthread.h>
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+/* replacement functions for broken originals */
+#if !HAVE_DECL_ALARM
+CK_DLL_EXP unsigned int alarm (unsigned int seconds);
+#endif /* !HAVE_DECL_ALARM */
+
+#if !HAVE_GETPID && HAVE__GETPID
+#define getpid _getpid
+#endif /* !HAVE_GETPID && HAVE__GETPID */
+
+#if !HAVE_DECL_LOCALTIME_R
+#if !defined(localtime_r)
+CK_DLL_EXP struct tm *localtime_r (const time_t * clock, struct tm *result);
+#endif
+#endif /* !HAVE_DECL_LOCALTIME_R */
+
+#if !HAVE_DECL_STRDUP && !HAVE__STRDUP
+CK_DLL_EXP char *strdup (const char *str);
+#elif !HAVE_DECL_STRDUP && HAVE__STRDUP
+#define strdup _strdup
+#endif /* !HAVE_DECL_STRDUP && HAVE__STRDUP */
+
+#if !HAVE_DECL_STRSIGNAL
+CK_DLL_EXP const char *strsignal (int sig);
+#endif /* !HAVE_DECL_STRSIGNAL */
+
+/*
+ * On systems where clock_gettime() is not available, or
+ * on systems where some clocks may not be supported, the
+ * definition for CLOCK_MONOTONIC and CLOCK_REALTIME may not
+ * be available. These should define which type of clock
+ * clock_gettime() should use. We define it here if it is
+ * not defined simply so the reimplementation can ignore it.
+ *
+ * We set the values of these clocks to some (hopefully)
+ * invalid value, to avoid the case where we define a
+ * clock with a valid value, and unintentionally use
+ * an actual good clock by accident.
+ */
+#ifndef CLOCK_MONOTONIC
+#define CLOCK_MONOTONIC -1
+#endif
+#ifndef CLOCK_REALTIME
+#define CLOCK_REALTIME -1
+#endif
+
+#ifndef HAVE_LIBRT
+
+#ifdef STRUCT_TIMESPEC_DEFINITION_MISSING
+/*
+ * The following structure is defined in POSIX 1003.1 for times
+ * specified in seconds and nanoseconds. If it is not defined in
+ * time.g, then we need to define it here
+ */
+struct timespec
+{
+  time_t tv_sec;
+  long tv_nsec;
+};
+#endif /* STRUCT_TIMESPEC_DEFINITION_MISSING */
+
+#ifdef STRUCT_ITIMERSPEC_DEFINITION_MISSING
+/* 
+ * The following structure is defined in POSIX.1b for timer start values and intervals.
+ * If it is not defined in time.h, then we need to define it here.
+ */
+struct itimerspec
+{
+  struct timespec it_interval;
+  struct timespec it_value;
+};
+#endif /* STRUCT_ITIMERSPEC_DEFINITION_MISSING */
+
+/* 
+ * Do a simple forward declaration in case the struct is not defined.
+ * In the versions of timer_create in libcompat, sigevent is never
+ * used.
+ */
+struct sigevent;
+
+#ifndef HAVE_CLOCK_GETTIME
+CK_DLL_EXP int clock_gettime (clockid_t clk_id, struct timespec *ts);
+#endif
+CK_DLL_EXP int timer_create (clockid_t clockid, struct sigevent *sevp,
+    timer_t * timerid);
+CK_DLL_EXP int timer_settime (timer_t timerid, int flags,
+    const struct itimerspec *new_value, struct itimerspec *old_value);
+CK_DLL_EXP int timer_delete (timer_t timerid);
+#endif /* HAVE_LIBRT */
+
+/* silence warnings about an empty library */
+CK_DLL_EXP void
+ck_do_nothing (void)
+    CK_ATTRIBUTE_NORETURN;
+
+#endif /* !LIBCOMPAT_H */
diff --git a/libs/gst/check/libcheck/strsignal.c b/libs/gst/check/libcheck/strsignal.c
new file mode 100644
index 0000000..b79409b
--- /dev/null
+++ b/libs/gst/check/libcheck/strsignal.c
@@ -0,0 +1,10 @@
+#include "libcompat.h"
+
+const char *
+strsignal (int sig)
+{
+  static char signame[40];
+
+  sprintf (signame, "SIG #%d", sig);
+  return signame;
+}
diff --git a/libs/gst/check/libcheck/timer_create.c b/libs/gst/check/libcheck/timer_create.c
new file mode 100644
index 0000000..a701781
--- /dev/null
+++ b/libs/gst/check/libcheck/timer_create.c
@@ -0,0 +1,15 @@
+#include "libcompat.h"
+
+int
+timer_create (clockid_t clockid CK_ATTRIBUTE_UNUSED,
+    struct sigevent *sevp CK_ATTRIBUTE_UNUSED,
+    timer_t * timerid CK_ATTRIBUTE_UNUSED)
+{
+  /* 
+   * The create function does nothing. timer_settime will use
+   * alarm to set the timer, and timer_delete will stop the
+   * alarm
+   */
+
+  return 0;
+}
diff --git a/libs/gst/check/libcheck/timer_delete.c b/libs/gst/check/libcheck/timer_delete.c
new file mode 100644
index 0000000..cc3ae29
--- /dev/null
+++ b/libs/gst/check/libcheck/timer_delete.c
@@ -0,0 +1,33 @@
+#include "libcompat.h"
+
+int
+timer_delete (timer_t timerid CK_ATTRIBUTE_UNUSED)
+{
+#ifdef HAVE_SETITIMER
+  /*
+   * If the system does not have timer_settime() but does have
+   * setitimer() use that instead of alarm().
+   */
+  struct itimerval interval;
+
+  /*
+   * Setting values to '0' results in disabling the running timer.
+   */
+  interval.it_value.tv_sec = 0;
+  interval.it_value.tv_usec = 0;
+  interval.it_interval.tv_sec = 0;
+  interval.it_interval.tv_usec = 0;
+
+  return setitimer (ITIMER_REAL, &interval, NULL);
+#else
+  /*
+   * There is only one timer, that used by alarm.
+   * Setting alarm(0) will not set a new alarm, and
+   * will kill the previous timer.
+   */
+
+  alarm (0);
+
+  return 0;
+#endif
+}
diff --git a/libs/gst/check/libcheck/timer_settime.c b/libs/gst/check/libcheck/timer_settime.c
new file mode 100644
index 0000000..d09ba27
--- /dev/null
+++ b/libs/gst/check/libcheck/timer_settime.c
@@ -0,0 +1,37 @@
+#include "libcompat.h"
+
+int
+timer_settime (timer_t timerid CK_ATTRIBUTE_UNUSED,
+    int flags CK_ATTRIBUTE_UNUSED,
+    const struct itimerspec *new_value,
+    struct itimerspec *old_value CK_ATTRIBUTE_UNUSED)
+{
+#ifdef HAVE_SETITIMER
+  /*
+   * If the system does not have timer_settime() but does have
+   * setitimer() use that instead of alarm().
+   */
+  struct itimerval interval;
+
+  interval.it_value.tv_sec = new_value->it_value.tv_sec;
+  interval.it_value.tv_usec = new_value->it_value.tv_nsec / 1000;
+  interval.it_interval.tv_sec = new_value->it_interval.tv_sec;
+  interval.it_interval.tv_usec = new_value->it_interval.tv_nsec / 1000;
+
+  return setitimer (ITIMER_REAL, &interval, NULL);
+#else
+  int seconds = new_value->it_value.tv_sec;
+
+  /* 
+   * As the alarm() call has only second precision, if the caller
+   * specifies partial seconds, we round up to the nearest second.
+   */
+  if (new_value->it_value.tv_nsec > 0) {
+    seconds += 1;
+  }
+
+  alarm (seconds);
+
+  return 0;
+#endif
+}
diff --git a/libs/gst/controller/Makefile.in b/libs/gst/controller/Makefile.in
index 8a02328..52532c2 100644
--- a/libs/gst/controller/Makefile.in
+++ b/libs/gst/controller/Makefile.in
@@ -94,6 +94,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -111,7 +112,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -234,6 +235,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -339,6 +344,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/libs/gst/controller/gsttimedvaluecontrolsource.c b/libs/gst/controller/gsttimedvaluecontrolsource.c
index 0d0b8be..c4fc610 100644
--- a/libs/gst/controller/gsttimedvaluecontrolsource.c
+++ b/libs/gst/controller/gsttimedvaluecontrolsource.c
@@ -52,6 +52,17 @@
 G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GstTimedValueControlSource,
     gst_timed_value_control_source, GST_TYPE_CONTROL_SOURCE, _do_init);
 
+
+enum
+{
+  VALUE_CHANGED_SIGNAL,
+  VALUE_ADDED_SIGNAL,
+  VALUE_REMOVED_SIGNAL,
+  LAST_SIGNAL
+};
+
+static guint gst_timed_value_control_source_signals[LAST_SIGNAL] = { 0 };
+
 /*
  * gst_control_point_free:
  * @prop: the object to free
@@ -67,6 +78,29 @@
   g_slice_free (GstControlPoint, cp);
 }
 
+static gpointer
+gst_control_point_copy (GstControlPoint * boxed)
+{
+  return g_slice_dup (GstControlPoint, boxed);
+}
+
+GType
+gst_control_point_get_type (void)
+{
+  static volatile gsize type_id = 0;
+
+  if (g_once_init_enter (&type_id)) {
+    GType tmp =
+        g_boxed_type_register_static (g_intern_static_string
+        ("GstControlPoint"),
+        (GBoxedCopyFunc) gst_control_point_copy,
+        (GBoxedFreeFunc) gst_control_point_free);
+    g_once_init_leave (&type_id, tmp);
+  }
+
+  return type_id;
+}
+
 static void
 gst_timed_value_control_source_reset (GstTimedValueControlSource * self)
 {
@@ -138,9 +172,11 @@
     self, GstClockTime timestamp, const gdouble value)
 {
   GSequenceIter *iter;
+  GstControlPoint *cp;
+
+  g_mutex_lock (&self->lock);
 
   /* check if a control point for the timestamp already exists */
-
   /* iter contains the iter right *after* timestamp */
   if (G_LIKELY (self->values)) {
     iter =
@@ -152,8 +188,14 @@
 
       /* If the timestamp is the same just update the control point value */
       if (cp->timestamp == timestamp) {
+
         /* update control point */
         cp->value = value;
+        g_mutex_unlock (&self->lock);
+
+        g_signal_emit (self,
+            gst_timed_value_control_source_signals[VALUE_CHANGED_SIGNAL], 0,
+            cp);
         goto done;
       }
     }
@@ -163,9 +205,14 @@
   }
 
   /* sort new cp into the prop->values list */
-  g_sequence_insert_sorted (self->values, _make_new_cp (self, timestamp,
-          value), (GCompareDataFunc) gst_control_point_compare, NULL);
+  cp = _make_new_cp (self, timestamp, value);
+  g_sequence_insert_sorted (self->values, cp,
+      (GCompareDataFunc) gst_control_point_compare, NULL);
   self->nvalues++;
+  g_mutex_unlock (&self->lock);
+
+  g_signal_emit (self,
+      gst_timed_value_control_source_signals[VALUE_ADDED_SIGNAL], 0, cp);
 
 done:
   self->valid_cache = FALSE;
@@ -224,9 +271,7 @@
   g_return_val_if_fail (GST_IS_TIMED_VALUE_CONTROL_SOURCE (self), FALSE);
   g_return_val_if_fail (GST_CLOCK_TIME_IS_VALID (timestamp), FALSE);
 
-  g_mutex_lock (&self->lock);
   gst_timed_value_control_source_set_internal (self, timestamp, value);
-  g_mutex_unlock (&self->lock);
 
   return TRUE;
 }
@@ -257,10 +302,8 @@
       GST_WARNING ("GstTimedValued with invalid timestamp passed to %s",
           GST_FUNCTION);
     } else {
-      g_mutex_lock (&self->lock);
       gst_timed_value_control_source_set_internal (self, tv->timestamp,
           tv->value);
-      g_mutex_unlock (&self->lock);
       res = TRUE;
     }
   }
@@ -283,6 +326,7 @@
 {
   GSequenceIter *iter;
   gboolean res = FALSE;
+  GstControlPoint *cp = NULL;
 
   g_return_val_if_fail (GST_IS_TIMED_VALUE_CONTROL_SOURCE (self), FALSE);
   g_return_val_if_fail (GST_CLOCK_TIME_IS_VALID (timestamp), FALSE);
@@ -292,7 +336,6 @@
   if (G_LIKELY (self->values) && (iter =
           g_sequence_search (self->values, &timestamp,
               (GCompareDataFunc) gst_control_point_find, NULL))) {
-    GstControlPoint *cp;
 
     /* Iter contains the iter right after timestamp, i.e.
      * we need to get the previous one and check the timestamp
@@ -300,14 +343,24 @@
     iter = g_sequence_iter_prev (iter);
     cp = g_sequence_get (iter);
     if (cp->timestamp == timestamp) {
+      cp = g_slice_dup (GstControlPoint, cp);
       g_sequence_remove (iter);
       self->nvalues--;
       self->valid_cache = FALSE;
       res = TRUE;
+    } else {
+      cp = NULL;
     }
+
   }
   g_mutex_unlock (&self->lock);
 
+  if (cp) {
+    g_signal_emit (self,
+        gst_timed_value_control_source_signals[VALUE_REMOVED_SIGNAL], 0, cp);
+    g_slice_free (GstControlPoint, cp);
+  }
+
   return res;
 }
 
@@ -420,5 +473,53 @@
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   //GstControlSourceClass *csource_class = GST_CONTROL_SOURCE_CLASS (klass);
 
+  /**
+   * GstTimedValueControlSource::value-changed
+   * @self: The #GstTimedValueControlSource on which a #GstTimedValue has changed
+   * @timed_value: The #GstTimedValue where the value changed
+   *
+   * Emited right after the new value has been set on @timed_signals
+   *
+   * Since 1.6
+   */
+  gst_timed_value_control_source_signals[VALUE_CHANGED_SIGNAL] =
+      g_signal_new ("value-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST, 0, NULL,
+      NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1,
+      gst_control_point_get_type ());
+
+  /**
+   * GstTimedValueControlSource::value-added
+   * @self: The #GstTimedValueControlSource into which a #GstTimedValue has been
+   *        added
+   * @timed_value: The newly added #GstTimedValue
+   *
+   * Emited right after the new value has been added to @self
+   *
+   * Since 1.6
+   */
+  gst_timed_value_control_source_signals[VALUE_ADDED_SIGNAL] =
+      g_signal_new ("value-added", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST, 0, NULL,
+      NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1,
+      gst_control_point_get_type ());
+
+  /**
+   * GstTimedValueControlSource::value-removed
+   * @self: The #GstTimedValueControlSource from which a #GstTimedValue has been
+   *        removed
+   * @timed_value: The removed #GstTimedValue
+   *
+   * Emited when @timed_value is removed from @self
+   *
+   * Since 1.6
+   */
+  gst_timed_value_control_source_signals[VALUE_REMOVED_SIGNAL] =
+      g_signal_new ("value-removed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST, 0, NULL,
+      NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1,
+      gst_control_point_get_type ());
+
+
   gobject_class->finalize = gst_timed_value_control_source_finalize;
 }
diff --git a/libs/gst/controller/gsttimedvaluecontrolsource.h b/libs/gst/controller/gsttimedvaluecontrolsource.h
index aea2a44..cb92cd9 100644
--- a/libs/gst/controller/gsttimedvaluecontrolsource.h
+++ b/libs/gst/controller/gsttimedvaluecontrolsource.h
@@ -76,6 +76,8 @@
 
 };
 
+GType gst_control_point_get_type (void);
+
 /**
  * GstTimedValueControlSource:
  *
diff --git a/libs/gst/controller/gsttriggercontrolsource.c b/libs/gst/controller/gsttriggercontrolsource.c
index 64d99d4..c40525f 100644
--- a/libs/gst/controller/gsttriggercontrolsource.c
+++ b/libs/gst/controller/gsttriggercontrolsource.c
@@ -24,7 +24,7 @@
 
  /**
  * SECTION:gsttriggercontrolsource
- * @short_description: interpolation control source
+ * @short_description: trigger control source
  *
  * #GstTriggerControlSource is a #GstControlSource, that returns values from user-given
  * control points. It allows for a tolerance on the time-stamps.
diff --git a/libs/gst/helpers/Makefile.am b/libs/gst/helpers/Makefile.am
index 2816bc2..523b2df 100644
--- a/libs/gst/helpers/Makefile.am
+++ b/libs/gst/helpers/Makefile.am
@@ -1,3 +1,20 @@
+if ENABLE_BASH_COMPLETION
+bin_PROGRAMS = gst-completion-helper-@GST_API_VERSION@
+
+gst_completion_helper_@GST_API_VERSION@_SOURCES = gst-completion-helper.c
+gst_completion_helper_@GST_API_VERSION@_CFLAGS = $(GST_OBJ_CFLAGS)
+gst_completion_helper_@GST_API_VERSION@_LDADD = $(GST_OBJ_LIBS)
+
+bashhelpersdir = $(BASH_HELPERS_DIR)
+dist_bashhelpers_DATA = gst
+
+install-data-hook:
+	cd $(DESTDIR)$(bindir) && \
+	mv `echo "gst-completion-helper-" | sed '$(transform)'`@GST_API_VERSION@$(EXEEXT) \
+	$(DESTDIR)$(BASH_HELPERS_DIR)/gst-completion-helper-@GST_API_VERSION@$(EXEEXT)
+	chmod 755 $(DESTDIR)$(BASH_HELPERS_DIR)/gst-completion-helper-@GST_API_VERSION@$(EXEEXT)
+endif
+
 helpers_PROGRAMS = gst-plugin-scanner
 helpersdir=$(libexecdir)/gstreamer-$(GST_API_VERSION)
 
diff --git a/libs/gst/helpers/Makefile.in b/libs/gst/helpers/Makefile.in
index 67cb892..e9296a0 100644
--- a/libs/gst/helpers/Makefile.in
+++ b/libs/gst/helpers/Makefile.in
@@ -14,6 +14,7 @@
 
 @SET_MAKE@
 
+
 VPATH = @srcdir@
 am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
 am__make_running_with_option = \
@@ -79,10 +80,11 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+@ENABLE_BASH_COMPLETION_TRUE@bin_PROGRAMS = gst-completion-helper-@GST_API_VERSION@$(EXEEXT)
 helpers_PROGRAMS = gst-plugin-scanner$(EXEEXT)
 subdir = libs/gst/helpers
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
+	$(top_srcdir)/depcomp $(am__dist_bashhelpers_DATA_DIST)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
 	$(top_srcdir)/common/m4/as-auto-alt.m4 \
@@ -91,6 +93,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +111,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -125,17 +128,29 @@
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(helpersdir)"
-PROGRAMS = $(helpers_PROGRAMS)
-am_gst_plugin_scanner_OBJECTS =  \
-	gst_plugin_scanner-gst-plugin-scanner.$(OBJEXT)
-gst_plugin_scanner_OBJECTS = $(am_gst_plugin_scanner_OBJECTS)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(helpersdir)" \
+	"$(DESTDIR)$(bashhelpersdir)"
+PROGRAMS = $(bin_PROGRAMS) $(helpers_PROGRAMS)
+am__gst_completion_helper_@GST_API_VERSION@_SOURCES_DIST =  \
+	gst-completion-helper.c
+@ENABLE_BASH_COMPLETION_TRUE@am_gst_completion_helper_@GST_API_VERSION@_OBJECTS = gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.$(OBJEXT)
+gst_completion_helper_@GST_API_VERSION@_OBJECTS =  \
+	$(am_gst_completion_helper_@GST_API_VERSION@_OBJECTS)
 am__DEPENDENCIES_1 =
-gst_plugin_scanner_DEPENDENCIES = $(am__DEPENDENCIES_1)
+@ENABLE_BASH_COMPLETION_TRUE@gst_completion_helper_@GST_API_VERSION@_DEPENDENCIES =  \
+@ENABLE_BASH_COMPLETION_TRUE@	$(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
+gst_completion_helper_@GST_API_VERSION@_LINK = $(LIBTOOL) $(AM_V_lt) \
+	--tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+	$(CCLD) $(gst_completion_helper_@GST_API_VERSION@_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_gst_plugin_scanner_OBJECTS =  \
+	gst_plugin_scanner-gst-plugin-scanner.$(OBJEXT)
+gst_plugin_scanner_OBJECTS = $(am_gst_plugin_scanner_OBJECTS)
+gst_plugin_scanner_DEPENDENCIES = $(am__DEPENDENCIES_1)
 gst_plugin_scanner_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(gst_plugin_scanner_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -174,13 +189,45 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(gst_plugin_scanner_SOURCES)
-DIST_SOURCES = $(gst_plugin_scanner_SOURCES)
+SOURCES = $(gst_completion_helper_@GST_API_VERSION@_SOURCES) \
+	$(gst_plugin_scanner_SOURCES)
+DIST_SOURCES =  \
+	$(am__gst_completion_helper_@GST_API_VERSION@_SOURCES_DIST) \
+	$(gst_plugin_scanner_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__dist_bashhelpers_DATA_DIST = gst
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+DATA = $(dist_bashhelpers_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -211,6 +258,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -316,6 +367,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -477,6 +529,11 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+@ENABLE_BASH_COMPLETION_TRUE@gst_completion_helper_@GST_API_VERSION@_SOURCES = gst-completion-helper.c
+@ENABLE_BASH_COMPLETION_TRUE@gst_completion_helper_@GST_API_VERSION@_CFLAGS = $(GST_OBJ_CFLAGS)
+@ENABLE_BASH_COMPLETION_TRUE@gst_completion_helper_@GST_API_VERSION@_LDADD = $(GST_OBJ_LIBS)
+@ENABLE_BASH_COMPLETION_TRUE@bashhelpersdir = $(BASH_HELPERS_DIR)
+@ENABLE_BASH_COMPLETION_TRUE@dist_bashhelpers_DATA = gst
 helpersdir = $(libexecdir)/gstreamer-$(GST_API_VERSION)
 gst_plugin_scanner_SOURCES = gst-plugin-scanner.c
 gst_plugin_scanner_CFLAGS = $(GST_OBJ_CFLAGS)
@@ -519,6 +576,55 @@
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 install-helpersPROGRAMS: $(helpers_PROGRAMS)
 	@$(NORMAL_INSTALL)
 	@list='$(helpers_PROGRAMS)'; test -n "$(helpersdir)" || list=; \
@@ -569,6 +675,10 @@
 	echo " rm -f" $$list; \
 	rm -f $$list
 
+gst-completion-helper-@GST_API_VERSION@$(EXEEXT): $(gst_completion_helper_@GST_API_VERSION@_OBJECTS) $(gst_completion_helper_@GST_API_VERSION@_DEPENDENCIES) $(EXTRA_gst_completion_helper_@GST_API_VERSION@_DEPENDENCIES) 
+	@rm -f gst-completion-helper-@GST_API_VERSION@$(EXEEXT)
+	$(AM_V_CCLD)$(gst_completion_helper_@GST_API_VERSION@_LINK) $(gst_completion_helper_@GST_API_VERSION@_OBJECTS) $(gst_completion_helper_@GST_API_VERSION@_LDADD) $(LIBS)
+
 gst-plugin-scanner$(EXEEXT): $(gst_plugin_scanner_OBJECTS) $(gst_plugin_scanner_DEPENDENCIES) $(EXTRA_gst_plugin_scanner_DEPENDENCIES) 
 	@rm -f gst-plugin-scanner$(EXEEXT)
 	$(AM_V_CCLD)$(gst_plugin_scanner_LINK) $(gst_plugin_scanner_OBJECTS) $(gst_plugin_scanner_LDADD) $(LIBS)
@@ -579,6 +689,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst_plugin_scanner-gst-plugin-scanner.Po@am__quote@
 
 .c.o:
@@ -605,6 +716,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.o: gst-completion-helper.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_completion_helper_@GST_API_VERSION@_CFLAGS) $(CFLAGS) -MT gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.o -MD -MP -MF $(DEPDIR)/gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.Tpo -c -o gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.o `test -f 'gst-completion-helper.c' || echo '$(srcdir)/'`gst-completion-helper.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.Tpo $(DEPDIR)/gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gst-completion-helper.c' object='gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.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) $(gst_completion_helper_@GST_API_VERSION@_CFLAGS) $(CFLAGS) -c -o gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.o `test -f 'gst-completion-helper.c' || echo '$(srcdir)/'`gst-completion-helper.c
+
+gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.obj: gst-completion-helper.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_completion_helper_@GST_API_VERSION@_CFLAGS) $(CFLAGS) -MT gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.obj -MD -MP -MF $(DEPDIR)/gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.Tpo -c -o gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.obj `if test -f 'gst-completion-helper.c'; then $(CYGPATH_W) 'gst-completion-helper.c'; else $(CYGPATH_W) '$(srcdir)/gst-completion-helper.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.Tpo $(DEPDIR)/gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gst-completion-helper.c' object='gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.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) $(gst_completion_helper_@GST_API_VERSION@_CFLAGS) $(CFLAGS) -c -o gst_completion_helper_@GST_API_VERSION@-gst-completion-helper.obj `if test -f 'gst-completion-helper.c'; then $(CYGPATH_W) 'gst-completion-helper.c'; else $(CYGPATH_W) '$(srcdir)/gst-completion-helper.c'; fi`
+
 gst_plugin_scanner-gst-plugin-scanner.o: gst-plugin-scanner.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gst_plugin_scanner_CFLAGS) $(CFLAGS) -MT gst_plugin_scanner-gst-plugin-scanner.o -MD -MP -MF $(DEPDIR)/gst_plugin_scanner-gst-plugin-scanner.Tpo -c -o gst_plugin_scanner-gst-plugin-scanner.o `test -f 'gst-plugin-scanner.c' || echo '$(srcdir)/'`gst-plugin-scanner.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/gst_plugin_scanner-gst-plugin-scanner.Tpo $(DEPDIR)/gst_plugin_scanner-gst-plugin-scanner.Po
@@ -624,6 +749,27 @@
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-dist_bashhelpersDATA: $(dist_bashhelpers_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_bashhelpers_DATA)'; test -n "$(bashhelpersdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bashhelpersdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bashhelpersdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bashhelpersdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(bashhelpersdir)" || exit $$?; \
+	done
+
+uninstall-dist_bashhelpersDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_bashhelpers_DATA)'; test -n "$(bashhelpersdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(bashhelpersdir)'; $(am__uninstall_files_from_dir)
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -709,9 +855,9 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) $(DATA)
 installdirs:
-	for dir in "$(DESTDIR)$(helpersdir)"; do \
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(helpersdir)" "$(DESTDIR)$(bashhelpersdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -745,10 +891,11 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+@ENABLE_BASH_COMPLETION_FALSE@install-data-hook:
 clean: clean-am
 
-clean-am: clean-generic clean-helpersPROGRAMS clean-libtool \
-	mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-helpersPROGRAMS \
+	clean-libtool mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
@@ -768,13 +915,14 @@
 
 info-am:
 
-install-data-am: install-helpersPROGRAMS
-
+install-data-am: install-dist_bashhelpersDATA install-helpersPROGRAMS
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
 install-dvi: install-dvi-am
 
 install-dvi-am:
 
-install-exec-am:
+install-exec-am: install-binPROGRAMS
 
 install-html: install-html-am
 
@@ -814,25 +962,34 @@
 
 ps-am:
 
-uninstall-am: uninstall-helpersPROGRAMS
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-helpersPROGRAMS clean-libtool cscopelist-am ctags \
-	ctags-am distclean distclean-compile distclean-generic \
-	distclean-libtool distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-helpersPROGRAMS install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+uninstall-am: uninstall-binPROGRAMS uninstall-dist_bashhelpersDATA \
 	uninstall-helpersPROGRAMS
 
+.MAKE: install-am install-data-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-helpersPROGRAMS \
+	clean-libtool cscopelist-am ctags ctags-am distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-binPROGRAMS install-data \
+	install-data-am install-data-hook install-dist_bashhelpersDATA \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-helpersPROGRAMS install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-dist_bashhelpersDATA uninstall-helpersPROGRAMS
+
+
+@ENABLE_BASH_COMPLETION_TRUE@install-data-hook:
+@ENABLE_BASH_COMPLETION_TRUE@	cd $(DESTDIR)$(bindir) && \
+@ENABLE_BASH_COMPLETION_TRUE@	mv `echo "gst-completion-helper-" | sed '$(transform)'`@GST_API_VERSION@$(EXEEXT) \
+@ENABLE_BASH_COMPLETION_TRUE@	$(DESTDIR)$(BASH_HELPERS_DIR)/gst-completion-helper-@GST_API_VERSION@$(EXEEXT)
+@ENABLE_BASH_COMPLETION_TRUE@	chmod 755 $(DESTDIR)$(BASH_HELPERS_DIR)/gst-completion-helper-@GST_API_VERSION@$(EXEEXT)
 
 Android.mk: Makefile.am
 	androgenizer -:PROJECT gstreamer -:EXECUTABLE gst-plugin-scanner  -:TAGS eng debug \
diff --git a/libs/gst/helpers/gst b/libs/gst/helpers/gst
new file mode 100644
index 0000000..76275e6
--- /dev/null
+++ b/libs/gst/helpers/gst
@@ -0,0 +1,35 @@
+# GStreamer
+# Copyright (C) 2015 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+#
+# bash/zsh completion support for common gstreamer options
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+___gst_debug_level () { _mandatory__argument; }
+___gst_debug () { _mandatory__argument; }
+___gst_debug_color_mode () { _mandatory__argument; }
+___gst_plugin_path () { _mandatory__argument; }
+___gst_plugin_load () { _mandatory__argument; }
+
+_mandatory__argument ()
+{
+	if [[ "$prev" != "$command" ]]
+	then
+		COMPREPLY=( $(compgen -W "$(ges-launch-1.0 --help-all | grep -oh '[[:graph:]]*--[[:graph:]]*' | cut -d'=' -f1)" -- $cur) )
+	else
+		COMPREPLY=("$cur")
+	fi
+}
diff --git a/libs/gst/helpers/gst-completion-helper.c b/libs/gst/helpers/gst-completion-helper.c
new file mode 100644
index 0000000..e99b73b
--- /dev/null
+++ b/libs/gst/helpers/gst-completion-helper.c
@@ -0,0 +1,269 @@
+/* GStreamer
+ * Copyright (C) 2015 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+ *
+ * gst-completion-helper.c: tool to let other tools enjoy fast and powerful
+ * gstreamer-aware completion
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+
+static GList *
+get_pad_templates_info (GstElement * element, GstElementFactory * factory,
+    GstPadDirection direction)
+{
+  const GList *pads;
+  GstStaticPadTemplate *padtemplate;
+  GList *caps_list = NULL;
+
+  if (gst_element_factory_get_num_pad_templates (factory) == 0) {
+    g_print ("  none\n");
+    return NULL;
+  }
+
+  pads = gst_element_factory_get_static_pad_templates (factory);
+  while (pads) {
+    padtemplate = (GstStaticPadTemplate *) (pads->data);
+    pads = g_list_next (pads);
+
+    if (padtemplate->direction != direction)
+      continue;
+
+    if (padtemplate->static_caps.string) {
+      caps_list =
+          g_list_append (caps_list,
+          gst_static_caps_get (&padtemplate->static_caps));
+    }
+
+  }
+
+  return caps_list;
+}
+
+static GList *
+_get_pad_caps (const gchar * factory_name, GstPadDirection direction)
+{
+  GstElementFactory *factory = gst_element_factory_find (factory_name);
+  GstElement *element = gst_element_factory_make (factory_name, NULL);
+
+  if (!element)
+    return NULL;
+  if (!factory)
+    return NULL;
+  factory =
+      GST_ELEMENT_FACTORY (gst_plugin_feature_load (GST_PLUGIN_FEATURE
+          (factory)));
+  if (!factory)
+    return NULL;
+  return get_pad_templates_info (element, factory, direction);
+}
+
+static gboolean
+_are_linkable (GstPluginFeature * feature, GList * caps_list)
+{
+  gboolean print = FALSE;
+  GstElementFactory *factory = GST_ELEMENT_FACTORY (feature);
+
+  GList *tmp;
+  print = FALSE;
+  for (tmp = caps_list; tmp; tmp = tmp->next) {
+    if (gst_element_factory_can_sink_any_caps (factory, tmp->data)) {
+      print = TRUE;
+      break;
+    }
+  }
+
+  return print;
+}
+
+static gboolean
+_belongs_to_klass (GstElementFactory * factory, const gchar * klass)
+{
+  const gchar *factory_klass;
+
+
+  factory_klass =
+      gst_element_factory_get_metadata (factory, GST_ELEMENT_METADATA_KLASS);
+  if (strstr (factory_klass, klass))
+    return TRUE;
+  return FALSE;
+}
+
+static void
+_list_features (const gchar * compatible_with, const gchar * klass,
+    GstCaps * sinkcaps)
+{
+  GList *plugins, *orig_plugins;
+  GList *caps_list = NULL;
+
+  if (compatible_with) {
+    caps_list = _get_pad_caps (compatible_with, GST_PAD_SRC);
+  }
+
+  orig_plugins = plugins = gst_registry_get_plugin_list (gst_registry_get ());
+  while (plugins) {
+    GList *features, *orig_features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+    plugins = g_list_next (plugins);
+
+    if (GST_OBJECT_FLAG_IS_SET (plugin, GST_PLUGIN_FLAG_BLACKLISTED)) {
+      continue;
+    }
+
+    orig_features = features =
+        gst_registry_get_feature_list_by_plugin (gst_registry_get (),
+        gst_plugin_get_name (plugin));
+    while (features) {
+      GstPluginFeature *feature;
+
+      if (G_UNLIKELY (features->data == NULL))
+        goto next;
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_ELEMENT_FACTORY (feature)) {
+        gboolean print = TRUE;
+        if (caps_list)
+          print = _are_linkable (feature, caps_list);
+        if (print && klass)
+          print = _belongs_to_klass (GST_ELEMENT_FACTORY (feature), klass);
+        if (print && sinkcaps)
+          print =
+              gst_element_factory_can_sink_any_caps (GST_ELEMENT_FACTORY
+              (feature), sinkcaps);
+
+        if (print)
+          g_print ("%s ", gst_plugin_feature_get_name (feature));
+      }
+
+    next:
+      features = g_list_next (features);
+    }
+
+    gst_plugin_feature_list_free (orig_features);
+  }
+
+  g_list_free (caps_list);
+  g_print ("\n");
+  gst_plugin_list_free (orig_plugins);
+}
+
+static void
+_print_element_properties_info (GstElement * element)
+{
+  GParamSpec **property_specs;
+  guint num_properties, i;
+
+  property_specs = g_object_class_list_properties
+      (G_OBJECT_GET_CLASS (element), &num_properties);
+
+  for (i = 0; i < num_properties; i++) {
+    GParamSpec *param = property_specs[i];
+
+    if (param->flags & G_PARAM_WRITABLE) {
+      g_print ("%s= ", g_param_spec_get_name (param));
+    }
+  }
+
+  g_free (property_specs);
+}
+
+static void
+_list_element_properties (const gchar * factory_name)
+{
+  GstElement *element = gst_element_factory_make (factory_name, NULL);
+
+  _print_element_properties_info (element);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gboolean list_features = FALSE;
+  gchar *compatible_with = NULL;
+  gchar *element = NULL;
+  gchar *klass = NULL;
+  gchar *caps_str = NULL;
+  GstCaps *sinkcaps = NULL;
+  gint exit_code = EXIT_SUCCESS;
+
+  GOptionEntry options[] = {
+    {"list-features", 'l', 0, G_OPTION_ARG_NONE, &list_features,
+        "list all the available features", NULL},
+    {"compatible-with", '\0', 0, G_OPTION_ARG_STRING, &compatible_with,
+          "Only print the elements that could be queued after this feature name",
+        NULL},
+    {"element-properties", '\0', 0, G_OPTION_ARG_STRING, &element,
+        "The element to list properties on", NULL},
+    {"klass", '\0', 0, G_OPTION_ARG_STRING, &klass,
+        "Only print the elements belonging to that klass", NULL},
+    {"sinkcaps", '\0', 0, G_OPTION_ARG_STRING, &caps_str,
+        "Only print the elements that can sink these caps", NULL},
+    {NULL}
+  };
+
+  GOptionContext *ctx;
+  GError *err = NULL;
+
+  ctx = g_option_context_new ("PIPELINE-DESCRIPTION");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    if (err)
+      g_printerr ("Error initializing: %s\n", GST_STR_NULL (err->message));
+    else
+      g_printerr ("Error initializing: Unknown error!\n");
+    exit (1);
+  }
+  g_option_context_free (ctx);
+
+  if (caps_str) {
+    sinkcaps = gst_caps_from_string (caps_str);
+    if (!sinkcaps) {
+      exit_code = EXIT_FAILURE;
+      goto done;
+    }
+  }
+
+  if (compatible_with || klass || sinkcaps) {
+    _list_features (compatible_with, klass, sinkcaps);
+    goto done;
+  }
+
+  if (element) {
+    _list_element_properties (element);
+    goto done;
+  }
+
+  if (list_features) {
+    _list_features (NULL, NULL, NULL);
+    goto done;
+  }
+
+done:
+  if (sinkcaps)
+    gst_caps_unref (sinkcaps);
+  exit (exit_code);
+}
diff --git a/libs/gst/net/Makefile.am b/libs/gst/net/Makefile.am
index f022b92..0e61153 100644
--- a/libs/gst/net/Makefile.am
+++ b/libs/gst/net/Makefile.am
@@ -6,12 +6,14 @@
     gstnet.h \
     gstnetaddressmeta.h \
     gstnetclientclock.h \
+    gstnetcontrolmessagemeta.h \
     gstnettimepacket.h \
     gstnettimeprovider.h
 
 libgstnet_@GST_API_VERSION@_la_SOURCES = \
     gstnetaddressmeta.c \
     gstnetclientclock.c \
+    gstnetcontrolmessagemeta.c \
     gstnettimepacket.c \
     gstnettimeprovider.c
 
diff --git a/libs/gst/net/Makefile.in b/libs/gst/net/Makefile.in
index abc967e..8a2129b 100644
--- a/libs/gst/net/Makefile.in
+++ b/libs/gst/net/Makefile.in
@@ -94,6 +94,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -111,7 +112,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -165,6 +166,7 @@
 am_libgstnet_@GST_API_VERSION@_la_OBJECTS =  \
 	libgstnet_@GST_API_VERSION@_la-gstnetaddressmeta.lo \
 	libgstnet_@GST_API_VERSION@_la-gstnetclientclock.lo \
+	libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.lo \
 	libgstnet_@GST_API_VERSION@_la-gstnettimepacket.lo \
 	libgstnet_@GST_API_VERSION@_la-gstnettimeprovider.lo
 libgstnet_@GST_API_VERSION@_la_OBJECTS =  \
@@ -232,6 +234,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -337,6 +343,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -505,12 +512,14 @@
     gstnet.h \
     gstnetaddressmeta.h \
     gstnetclientclock.h \
+    gstnetcontrolmessagemeta.h \
     gstnettimepacket.h \
     gstnettimeprovider.h
 
 libgstnet_@GST_API_VERSION@_la_SOURCES = \
     gstnetaddressmeta.c \
     gstnetclientclock.c \
+    gstnetcontrolmessagemeta.c \
     gstnettimepacket.c \
     gstnettimeprovider.c
 
@@ -610,6 +619,7 @@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnetaddressmeta.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnetclientclock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnettimepacket.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnettimeprovider.Plo@am__quote@
 
@@ -651,6 +661,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) $(libgstnet_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstnet_@GST_API_VERSION@_la-gstnetclientclock.lo `test -f 'gstnetclientclock.c' || echo '$(srcdir)/'`gstnetclientclock.c
 
+libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.lo: gstnetcontrolmessagemeta.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) $(libgstnet_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.lo -MD -MP -MF $(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.Tpo -c -o libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.lo `test -f 'gstnetcontrolmessagemeta.c' || echo '$(srcdir)/'`gstnetcontrolmessagemeta.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.Tpo $(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstnetcontrolmessagemeta.c' object='libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.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) $(libgstnet_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstnet_@GST_API_VERSION@_la-gstnetcontrolmessagemeta.lo `test -f 'gstnetcontrolmessagemeta.c' || echo '$(srcdir)/'`gstnetcontrolmessagemeta.c
+
 libgstnet_@GST_API_VERSION@_la-gstnettimepacket.lo: gstnettimepacket.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) $(libgstnet_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstnet_@GST_API_VERSION@_la-gstnettimepacket.lo -MD -MP -MF $(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnettimepacket.Tpo -c -o libgstnet_@GST_API_VERSION@_la-gstnettimepacket.lo `test -f 'gstnettimepacket.c' || echo '$(srcdir)/'`gstnettimepacket.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnettimepacket.Tpo $(DEPDIR)/libgstnet_@GST_API_VERSION@_la-gstnettimepacket.Plo
diff --git a/libs/gst/net/gstnetclientclock.c b/libs/gst/net/gstnetclientclock.c
index dd1dafe..8801fb2 100644
--- a/libs/gst/net/gstnetclientclock.c
+++ b/libs/gst/net/gstnetclientclock.c
@@ -45,6 +45,10 @@
  *
  * A #GstNetClientClock is typically set on a #GstPipeline with 
  * gst_pipeline_use_clock().
+ *
+ * If you set a #GstBus on the clock via the "bus" object property, it will
+ * send @GST_MESSAGE_ELEMENT messages with an attached #GstStructure containing
+ * statistics about clock accuracy and network traffic.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -63,13 +67,21 @@
 #define DEFAULT_PORT            5637
 #define DEFAULT_TIMEOUT         GST_SECOND
 #define DEFAULT_ROUNDTRIP_LIMIT GST_SECOND
+/* Minimum timeout will be immediately (ie, as fast as one RTT), but no
+ * more often than 1/20th second (arbitrarily, to spread observations a little) */
+#define DEFAULT_MINIMUM_UPDATE_INTERVAL (GST_SECOND / 20)
+
+/* Maximum number of clock updates we can skip before updating */
+#define MAX_SKIPPED_UPDATES 5
 
 enum
 {
   PROP_0,
   PROP_ADDRESS,
   PROP_PORT,
-  PROP_ROUNDTRIP_LIMIT
+  PROP_ROUNDTRIP_LIMIT,
+  PROP_MINIMUM_UPDATE_INTERVAL,
+  PROP_BUS
 };
 
 #define GST_NET_CLIENT_CLOCK_GET_PRIVATE(obj)  \
@@ -86,9 +98,13 @@
   GstClockTime timeout_expiration;
   GstClockTime roundtrip_limit;
   GstClockTime rtt_avg;
+  GstClockTime minimum_update_interval;
+  guint skipped_updates;
 
   gchar *address;
   gint port;
+
+  GstBus *bus;
 };
 
 #define _do_init \
@@ -126,6 +142,10 @@
       g_param_spec_int ("port", "port",
           "The port on which the remote server is listening", 0, G_MAXUINT16,
           DEFAULT_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_BUS,
+      g_param_spec_object ("bus", "bus",
+          "A GstBus on which to send clock status information", GST_TYPE_BUS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
    * GstNetClientClock::round-trip-limit:
@@ -146,6 +166,12 @@
           "Maximum tolerable round-trip interval for packets, in nanoseconds "
           "(0 = no limit)", 0, G_MAXUINT64, DEFAULT_ROUNDTRIP_LIMIT,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_MINIMUM_UPDATE_INTERVAL,
+      g_param_spec_uint64 ("minimum-update-interval", "minimum update interval",
+          "Minimum polling interval for packets, in nanoseconds"
+          "(0 = no limit)", 0, G_MAXUINT64, DEFAULT_MINIMUM_UPDATE_INTERVAL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -166,6 +192,8 @@
   priv->servaddr = NULL;
   priv->rtt_avg = GST_CLOCK_TIME_NONE;
   priv->roundtrip_limit = DEFAULT_ROUNDTRIP_LIMIT;
+  priv->minimum_update_interval = DEFAULT_MINIMUM_UPDATE_INTERVAL;
+  priv->skipped_updates = 0;
 }
 
 static void
@@ -191,6 +219,11 @@
     self->priv->socket = NULL;
   }
 
+  if (self->priv->bus != NULL) {
+    gst_object_unref (self->priv->bus);
+    self->priv->bus = NULL;
+  }
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -202,16 +235,34 @@
 
   switch (prop_id) {
     case PROP_ADDRESS:
+      GST_OBJECT_LOCK (self);
       g_free (self->priv->address);
       self->priv->address = g_value_dup_string (value);
       if (self->priv->address == NULL)
         self->priv->address = g_strdup (DEFAULT_ADDRESS);
+      GST_OBJECT_UNLOCK (self);
       break;
     case PROP_PORT:
+      GST_OBJECT_LOCK (self);
       self->priv->port = g_value_get_int (value);
+      GST_OBJECT_UNLOCK (self);
       break;
     case PROP_ROUNDTRIP_LIMIT:
+      GST_OBJECT_LOCK (self);
       self->priv->roundtrip_limit = g_value_get_uint64 (value);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    case PROP_MINIMUM_UPDATE_INTERVAL:
+      GST_OBJECT_LOCK (self);
+      self->priv->minimum_update_interval = g_value_get_uint64 (value);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    case PROP_BUS:
+      GST_OBJECT_LOCK (self);
+      if (self->priv->bus)
+        gst_object_unref (self->priv->bus);
+      self->priv->bus = g_value_dup_object (value);
+      GST_OBJECT_UNLOCK (self);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -227,13 +278,27 @@
 
   switch (prop_id) {
     case PROP_ADDRESS:
+      GST_OBJECT_LOCK (self);
       g_value_set_string (value, self->priv->address);
+      GST_OBJECT_UNLOCK (self);
       break;
     case PROP_PORT:
       g_value_set_int (value, self->priv->port);
       break;
     case PROP_ROUNDTRIP_LIMIT:
+      GST_OBJECT_LOCK (self);
       g_value_set_uint64 (value, self->priv->roundtrip_limit);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    case PROP_MINIMUM_UPDATE_INTERVAL:
+      GST_OBJECT_LOCK (self);
+      g_value_set_uint64 (value, self->priv->minimum_update_interval);
+      GST_OBJECT_UNLOCK (self);
+      break;
+    case PROP_BUS:
+      GST_OBJECT_LOCK (self);
+      g_value_set_object (value, self->priv->bus);
+      GST_OBJECT_UNLOCK (self);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -246,11 +311,28 @@
     GstClockTime local_1, GstClockTime remote, GstClockTime local_2)
 {
   GstNetClientClockPrivate *priv = self->priv;
-  GstClockTime current_timeout;
+  GstClockTime current_timeout = 0;
   GstClockTime local_avg;
   gdouble r_squared;
   GstClock *clock;
-  GstClockTime rtt;
+  GstClockTime rtt, rtt_limit, min_update_interval;
+  GstBus *bus = NULL;
+  /* Use for discont tracking */
+  GstClockTime time_before = 0;
+  GstClockTime min_guess = 0;
+  GstClockTimeDiff time_discont = 0;
+  gboolean synched, now_synched;
+  GstClockTime internal_time, external_time, rate_num, rate_den;
+  GstClockTime orig_internal_time, orig_external_time, orig_rate_num,
+      orig_rate_den;
+  GstClockTime max_discont;
+
+  GST_OBJECT_LOCK (self);
+  rtt_limit = self->priv->roundtrip_limit;
+  min_update_interval = self->priv->minimum_update_interval;
+  if (self->priv->bus)
+    bus = gst_object_ref (self->priv->bus);
+  GST_OBJECT_UNLOCK (self);
 
   if (local_2 < local_1) {
     GST_LOG_OBJECT (self, "Dropping observation: receive time %" GST_TIME_FORMAT
@@ -261,11 +343,10 @@
 
   rtt = GST_CLOCK_DIFF (local_1, local_2);
 
-  if ((self->priv->roundtrip_limit > 0) && (rtt > self->priv->roundtrip_limit)) {
+  if ((rtt_limit > 0) && (rtt > rtt_limit)) {
     GST_LOG_OBJECT (self,
         "Dropping observation: RTT %" GST_TIME_FORMAT " > limit %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (rtt),
-        GST_TIME_ARGS (self->priv->roundtrip_limit));
+        GST_TIME_FORMAT, GST_TIME_ARGS (rtt), GST_TIME_ARGS (rtt_limit));
     goto bogus_observation;
   }
 
@@ -277,7 +358,7 @@
   else if (rtt < priv->rtt_avg) /* Shorter RTTs carry more weight than longer */
     priv->rtt_avg = (3 * priv->rtt_avg + rtt) / 4;
   else
-    priv->rtt_avg = (7 * priv->rtt_avg + rtt) / 8;
+    priv->rtt_avg = (15 * priv->rtt_avg + rtt) / 16;
 
   if (rtt > 2 * priv->rtt_avg) {
     GST_LOG_OBJECT (self,
@@ -294,21 +375,136 @@
 
   clock = GST_CLOCK_CAST (self);
 
-  if (gst_clock_add_observation (GST_CLOCK (self), local_avg, remote,
-          &r_squared)) {
-    /* ghetto formula - shorter timeout for bad correlations */
-    current_timeout = (1e-3 / (1 - MIN (r_squared, 0.99999))) * GST_SECOND;
-    current_timeout = MIN (current_timeout, gst_clock_get_timeout (clock));
-  } else {
-    current_timeout = 0;
+  /* Store what the clock produced as 'now' before this update */
+  gst_clock_get_calibration (GST_CLOCK (self), &orig_internal_time,
+      &orig_external_time, &orig_rate_num, &orig_rate_den);
+  internal_time = orig_internal_time;
+  external_time = orig_external_time;
+  rate_num = orig_rate_num;
+  rate_den = orig_rate_den;
+
+  min_guess =
+      gst_clock_adjust_with_calibration (GST_CLOCK (self), local_1,
+      internal_time, external_time, rate_num, rate_den);
+  time_before =
+      gst_clock_adjust_with_calibration (GST_CLOCK (self), local_2,
+      internal_time, external_time, rate_num, rate_den);
+
+  /* Maximum discontinuity, when we're synched with the master. Could make this a property,
+   * but this value seems to work fine */
+  max_discont = priv->rtt_avg / 4;
+
+  /* If the remote observation was within a max_discont window around our min/max estimates, we're synched */
+  synched =
+      (GST_CLOCK_DIFF (remote, min_guess) < (GstClockTimeDiff) (max_discont)
+      && GST_CLOCK_DIFF (time_before,
+          remote) < (GstClockTimeDiff) (max_discont));
+
+  if (gst_clock_add_observation_unapplied (GST_CLOCK (self), local_avg, remote,
+          &r_squared, &internal_time, &external_time, &rate_num, &rate_den)) {
+
+    /* Now compare the difference (discont) in the clock
+     * after this observation */
+    time_discont = GST_CLOCK_DIFF (time_before,
+        gst_clock_adjust_with_calibration (GST_CLOCK (self), local_2,
+            internal_time, external_time, rate_num, rate_den));
+
+    /* If we were in sync with the remote clock, clamp the allowed
+     * discontinuity to within quarter of one RTT. In sync means our send/receive estimates
+     * of remote time correctly windowed the actual remote time observation */
+    if (synched && ABS (time_discont) > max_discont) {
+      GstClockTimeDiff offset;
+      GST_DEBUG_OBJECT (clock,
+          "Too large a discont, clamping to 1/4 average RTT = %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (max_discont));
+      if (time_discont > 0) {   /* Too large a forward step - add a -ve offset */
+        offset = max_discont - time_discont;
+        if (-offset > external_time)
+          external_time = 0;
+        else
+          external_time += offset;
+      } else {                  /* Too large a backward step - add a +ve offset */
+        offset = -(max_discont + time_discont);
+        external_time += offset;
+      }
+
+      time_discont += offset;
+    }
+
+    /* Check if the new clock params would have made our observation within range */
+    now_synched =
+        (GST_CLOCK_DIFF (remote,
+            gst_clock_adjust_with_calibration (GST_CLOCK (self), local_1,
+                internal_time, external_time, rate_num,
+                rate_den)) < (GstClockTimeDiff) (max_discont))
+        && (GST_CLOCK_DIFF (gst_clock_adjust_with_calibration (GST_CLOCK (self),
+                local_2, internal_time, external_time, rate_num, rate_den),
+            remote) < (GstClockTimeDiff) (max_discont));
+
+    /* Only update the clock if we had synch or just gained it */
+    if (synched || now_synched || priv->skipped_updates > MAX_SKIPPED_UPDATES) {
+      gst_clock_set_calibration (GST_CLOCK (self), internal_time, external_time,
+          rate_num, rate_den);
+      /* ghetto formula - shorter timeout for bad correlations */
+      current_timeout = (1e-3 / (1 - MIN (r_squared, 0.99999))) * GST_SECOND;
+      current_timeout = MIN (current_timeout, gst_clock_get_timeout (clock));
+      priv->skipped_updates = 0;
+    } else {
+      /* Restore original calibration vars for the report, we're not changing the clock */
+      internal_time = orig_internal_time;
+      external_time = orig_external_time;
+      rate_num = orig_rate_num;
+      rate_den = orig_rate_den;
+      time_discont = 0;
+      priv->skipped_updates++;
+    }
+  }
+
+  /* Limit the polling to at most one per minimum_update_interval */
+  if (rtt < min_update_interval)
+    current_timeout = MAX (min_update_interval - rtt, current_timeout);
+
+  if (bus) {
+    GstStructure *s;
+    GstMessage *msg;
+
+    /* Output a stats message, whether we updated the clock or not */
+    s = gst_structure_new ("gst-netclock-statistics",
+        "synchronised", G_TYPE_BOOLEAN, synched,
+        "rtt", G_TYPE_UINT64, rtt,
+        "rtt-average", G_TYPE_UINT64, priv->rtt_avg,
+        "local", G_TYPE_UINT64, local_avg,
+        "remote", G_TYPE_UINT64, remote,
+        "discontinuity", G_TYPE_INT64, time_discont,
+        "remote-min-estimate", G_TYPE_UINT64, min_guess,
+        "remote-max-estimate", G_TYPE_UINT64, time_before,
+        "remote-min-error", G_TYPE_INT64, GST_CLOCK_DIFF (remote, min_guess),
+        "remote-max-error", G_TYPE_INT64, GST_CLOCK_DIFF (remote, time_before),
+        "request-send", G_TYPE_UINT64, local_1,
+        "request-receive", G_TYPE_UINT64, local_2,
+        "r-squared", G_TYPE_DOUBLE, r_squared,
+        "timeout", G_TYPE_UINT64, current_timeout,
+        "internal-time", G_TYPE_UINT64, internal_time,
+        "external-time", G_TYPE_UINT64, external_time,
+        "rate-num", G_TYPE_UINT64, rate_num,
+        "rate-den", G_TYPE_UINT64, rate_den,
+        "rate", G_TYPE_DOUBLE, (gdouble) (rate_num) / rate_den,
+        "local-clock-offset", G_TYPE_INT64, GST_CLOCK_DIFF (internal_time,
+            external_time), NULL);
+    msg = gst_message_new_element (GST_OBJECT (self), s);
+    gst_bus_post (bus, msg);
   }
 
   GST_INFO ("next timeout: %" GST_TIME_FORMAT, GST_TIME_ARGS (current_timeout));
   self->priv->timeout_expiration = gst_util_get_timestamp () + current_timeout;
 
+  if (bus)
+    gst_object_unref (bus);
   return;
 
 bogus_observation:
+  if (bus)
+    gst_object_unref (bus);
   /* Schedule a new packet again soon */
   self->priv->timeout_expiration = gst_util_get_timestamp () + (GST_SECOND / 4);
   return;
@@ -402,7 +598,6 @@
       }
     }
   }
-
   GST_INFO_OBJECT (self, "shutting down net client clock thread");
   return NULL;
 }
diff --git a/libs/gst/net/gstnetcontrolmessagemeta.c b/libs/gst/net/gstnetcontrolmessagemeta.c
new file mode 100644
index 0000000..fca39b5
--- /dev/null
+++ b/libs/gst/net/gstnetcontrolmessagemeta.c
@@ -0,0 +1,125 @@
+/* GStreamer
+ * Copyright (C) <2014> William Manley <will@williammanley.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:gstnetcontrolmessagemeta
+ * @short_description: Network Control Message Meta
+ *
+ * #GstNetControlMessageMeta can be used to store control messages (ancillary
+ * data) which was received with or is to be sent alongside the buffer data.
+ * When used with socket sinks and sources which understand this meta it allows
+ * sending and receiving ancillary data such as unix credentials (See
+ * #GUnixCredentialsMessage) and Unix file descriptions (See #GUnixFDMessage).
+ */
+
+#include <string.h>
+
+#include "gstnetcontrolmessagemeta.h"
+
+static gboolean
+net_control_message_meta_init (GstMeta * meta, gpointer params,
+    GstBuffer * buffer)
+{
+  GstNetControlMessageMeta *nmeta = (GstNetControlMessageMeta *) meta;
+
+  nmeta->message = NULL;
+
+  return TRUE;
+}
+
+static gboolean
+net_control_message_meta_transform (GstBuffer * transbuf, GstMeta * meta,
+    GstBuffer * buffer, GQuark type, gpointer data)
+{
+  GstNetControlMessageMeta *nmeta = (GstNetControlMessageMeta *) meta;
+
+  /* we always copy no matter what transform */
+  gst_buffer_add_net_control_message_meta (transbuf, nmeta->message);
+
+  return TRUE;
+}
+
+static void
+net_control_message_meta_free (GstMeta * meta, GstBuffer * buffer)
+{
+  GstNetControlMessageMeta *nmeta = (GstNetControlMessageMeta *) meta;
+
+  if (nmeta->message)
+    g_object_unref (nmeta->message);
+  nmeta->message = NULL;
+}
+
+GType
+gst_net_control_message_meta_api_get_type (void)
+{
+  static volatile GType type;
+  static const gchar *tags[] = { "origin", NULL };
+
+  if (g_once_init_enter (&type)) {
+    GType _type =
+        gst_meta_api_type_register ("GstNetControlMessageMetaAPI", tags);
+    g_once_init_leave (&type, _type);
+  }
+  return type;
+}
+
+const GstMetaInfo *
+gst_net_control_message_meta_get_info (void)
+{
+  static const GstMetaInfo *meta_info = NULL;
+
+  if (g_once_init_enter (&meta_info)) {
+    const GstMetaInfo *mi =
+        gst_meta_register (GST_NET_CONTROL_MESSAGE_META_API_TYPE,
+        "GstNetControlMessageMeta",
+        sizeof (GstNetControlMessageMeta),
+        net_control_message_meta_init,
+        net_control_message_meta_free,
+        net_control_message_meta_transform);
+    g_once_init_leave (&meta_info, mi);
+  }
+  return meta_info;
+}
+
+/**
+ * gst_buffer_add_net_control_message_meta:
+ * @buffer: a #GstBuffer
+ * @message: a @GSocketControlMessage to attach to @buffer
+ *
+ * Attaches @message as metadata in a #GstNetControlMessageMeta to @buffer.
+ *
+ * Returns: (transfer none): a #GstNetControlMessageMeta connected to @buffer
+ */
+GstNetControlMessageMeta *
+gst_buffer_add_net_control_message_meta (GstBuffer * buffer,
+    GSocketControlMessage * message)
+{
+  GstNetControlMessageMeta *meta;
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);
+  g_return_val_if_fail (G_IS_SOCKET_CONTROL_MESSAGE (message), NULL);
+
+  meta =
+      (GstNetControlMessageMeta *) gst_buffer_add_meta (buffer,
+      GST_NET_CONTROL_MESSAGE_META_INFO, NULL);
+
+  meta->message = g_object_ref (message);
+
+  return meta;
+}
diff --git a/libs/gst/net/gstnetcontrolmessagemeta.h b/libs/gst/net/gstnetcontrolmessagemeta.h
new file mode 100644
index 0000000..5e77bbe
--- /dev/null
+++ b/libs/gst/net/gstnetcontrolmessagemeta.h
@@ -0,0 +1,62 @@
+/* GStreamer
+ * Copyright (C) <2014> William Manley <will@williammanley.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_NET_CONTROL_MESSAGE_META_H__
+#define __GST_NET_CONTROL_MESSAGE_META_H__
+
+#include <gst/gst.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstNetControlMessageMeta GstNetControlMessageMeta;
+
+/**
+ * GstNetControlMessageMeta:
+ * @meta: the parent type
+ * @addr: a #GSocketControlMessage stored as metadata
+ *
+ * Buffer metadata for GSocket control messages, AKA ancillary data attached to
+ * data sent across a socket.
+ */
+struct _GstNetControlMessageMeta {
+  GstMeta       meta;
+
+  GSocketControlMessage *message;
+};
+
+GType gst_net_control_message_meta_api_get_type (void);
+#define GST_NET_CONTROL_MESSAGE_META_API_TYPE \
+  (gst_net_control_message_meta_api_get_type())
+
+#define gst_buffer_get_net_control_message_meta(b) ((GstNetControlMessageMeta*)\
+  gst_buffer_get_meta((b),GST_NET_CONTROL_MESSAGE_META_API_TYPE))
+
+/* implementation */
+const GstMetaInfo *gst_net_control_message_meta_get_info (void);
+#define GST_NET_CONTROL_MESSAGE_META_INFO \
+  (gst_net_control_message_meta_get_info())
+
+GstNetControlMessageMeta * gst_buffer_add_net_control_message_meta (
+    GstBuffer *buffer, GSocketControlMessage *addr);
+
+G_END_DECLS
+
+#endif /* __GST_NET_CONTROL_MESSAGE_META_H__ */
+
diff --git a/m4/Makefile.in b/m4/Makefile.in
index dabf986..5fda59e 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -153,6 +154,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -258,6 +263,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/m4/check-checks.m4 b/m4/check-checks.m4
index 349a1b5..16ba777 100644
--- a/m4/check-checks.m4
+++ b/m4/check-checks.m4
@@ -7,7 +7,7 @@
 
 CHECK_MAJOR_VERSION=0
 CHECK_MINOR_VERSION=9
-CHECK_MICRO_VERSION=8
+CHECK_MICRO_VERSION=14
 CHECK_VERSION=$CHECK_MAJOR_VERSION.$CHECK_MINOR_VERSION.$CHECK_MICRO_VERSION
 
 AC_SUBST(CHECK_MAJOR_VERSION)
@@ -20,6 +20,82 @@
 
 AC_CHECK_FUNCS([localtime_r])
 
+dnl Check for getpid() and _getpid()
+AC_CHECK_FUNCS([getpid _getpid])
+
+dnl Check for strdup() and _strdup()
+AC_CHECK_DECLS([strdup])
+AC_CHECK_FUNCS([_strdup])
+
+dnl Check for mkstemp
+AC_CHECK_FUNCS([mkstemp])
+
+dnl Check for fork
+AC_CHECK_FUNCS([fork], HAVE_FORK=1, HAVE_FORK=0)
+AC_SUBST(HAVE_FORK)
+
+dnl Check for alarm, localtime_r and strsignal
+dnl First check for time.h as it might be used by localtime_r
+AC_CHECK_HEADERS([time.h])
+AC_CHECK_DECLS([alarm, localtime_r, strsignal], [], [], [
+    AC_INCLUDES_DEFAULT
+#if HAVE_TIME_H
+#include <time.h>
+#endif /* HAVE_TIME_H */
+])
+AC_CHECK_FUNCS([alarm setitimer strsignal])
+AM_CONDITIONAL(HAVE_ALARM, test "x$ac_cv_func_alarm" = "xyes")
+AM_CONDITIONAL(HAVE_LOCALTIME_R, test "x$ac_cv_func_localtime_r" = "xyes")
+AM_CONDITIONAL(HAVE_STRSIGNAL, test "x$ac_cv_func_strsignal" = "xyes")
+
+dnl Check if struct timespec/itimerspec are defined in time.h. If not, we need
+dnl to define it in libs/gst/check/libcheck/libcompat.h. Note the optional
+dnl inclusion of pthread.h. On MinGW(-w64), the pthread.h file contains the
+dnl timespec/itimerspec definitions.
+AC_CHECK_MEMBERS([struct timespec.tv_sec, struct timespec.tv_nsec], [],
+  [AC_DEFINE_UNQUOTED(STRUCT_TIMESPEC_DEFINITION_MISSING, 1,
+    [Need to define the timespec structure])], [
+#include <time.h>
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+])
+AC_CHECK_MEMBERS([struct itimerspec.it_interval, struct itimerspec.it_value],
+  [], [AC_DEFINE_UNQUOTED(STRUCT_ITIMERSPEC_DEFINITION_MISSING, 1,
+    [Need to define the itimerspec structure])], [
+#include <time.h>
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+])
+
+dnl Check if types timer_t/clockid_t are defined. If not, we need to define
+dnl it in libs/gst/check/libcheck/ibcompat.h. Note the optional inclusion of
+dnl pthread.h. On MinGW(-w64), the pthread.h file contains the
+dnl timer_t/clockid_t definitions.
+AC_CHECK_TYPE(timer_t, [], [
+    AC_DEFINE([timer_t], [int], [timer_t])
+  ], [
+    AC_INCLUDES_DEFAULT
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+])
+AC_CHECK_TYPE(clockid_t, [], [
+    AC_DEFINE([clockid_t], [int], [clockid_t])
+  ], [
+    AC_INCLUDES_DEFAULT
+#if HAVE_PTHREAD
+#include <pthread.h>
+#endif /* HAVE_PTHREAD */
+])
+
+dnl Check for POSIX timer functions in librt
+AC_CHECK_LIB([rt], [timer_create, timer_settime, timer_delete])
+AM_CONDITIONAL(HAVE_TIMER_CREATE_SETTIME_DELETE, test "x$ac_cv_lib_rt_timer_create__timer_settime__timer_delete" = "xyes")
+
+dnl Allow for checking HAVE_CLOCK_GETTIME in automake files
+AM_CONDITIONAL(HAVE_CLOCK_GETTIME, test "x$ac_cv_func_clock_gettime" = "xyes")
 
 dnl Create _stdint.h in the top-level directory
 AX_CREATE_STDINT_H
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 93277d3..d88af6a 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -116,7 +117,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -197,6 +198,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -302,6 +307,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/pkgconfig/gstreamer-uninstalled.pc.in b/pkgconfig/gstreamer-uninstalled.pc.in
index ac1eeef..bf8bf42 100644
--- a/pkgconfig/gstreamer-uninstalled.pc.in
+++ b/pkgconfig/gstreamer-uninstalled.pc.in
@@ -7,6 +7,8 @@
 toolsdir=@abs_top_builddir@/tools
 pluginsdir=@abs_top_builddir@
 girdir=@abs_top_builddir@/gst
+completionsdir=@abs_top_builddir@/data/completions
+helpersdir=@abs_top_builddir@/libs/gst/helpers
 typelibdir=@abs_top_builddir@/gst
 
 Name: GStreamer Uninstalled
diff --git a/pkgconfig/gstreamer.pc.in b/pkgconfig/gstreamer.pc.in
index b949d6c..381c96d 100644
--- a/pkgconfig/gstreamer.pc.in
+++ b/pkgconfig/gstreamer.pc.in
@@ -7,6 +7,8 @@
 datarootdir=${prefix}/share
 datadir=${datarootdir}
 girdir=${datadir}/gir-1.0
+completionsdir=@BASH_COMPLETION_DIR@
+helpersdir=@BASH_HELPERS_DIR@
 typelibdir=${libdir}/girepository-1.0
 
 Name: GStreamer
@@ -15,4 +17,4 @@
 Requires: glib-2.0, gobject-2.0
 Requires.private: gmodule-no-export-2.0
 Libs: -L${libdir} -lgstreamer-@GST_API_VERSION@
-Cflags: -I${includedir}
+Cflags: -I${includedir} -I${libdir}/gstreamer-@GST_API_VERSION@/include
diff --git a/plugins/Makefile.in b/plugins/Makefile.in
index 72a07c9..cbc6506 100644
--- a/plugins/Makefile.in
+++ b/plugins/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -212,6 +213,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -317,6 +322,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/plugins/elements/Makefile.am b/plugins/elements/Makefile.am
index 3821b3c..ee3c9fb 100644
--- a/plugins/elements/Makefile.am
+++ b/plugins/elements/Makefile.am
@@ -4,6 +4,7 @@
 libgstcoreelements_la_DEPENDENCIES = $(top_builddir)/gst/libgstreamer-@GST_API_VERSION@.la
 libgstcoreelements_la_SOURCES =	\
 	gstcapsfilter.c		\
+	gstconcat.c		\
 	gstdownloadbuffer.c     \
 	gstelements.c		\
 	gstelements_private.c	\
@@ -23,6 +24,7 @@
 	gstsparsefile.c		\
 	gsttee.c		\
 	gsttypefindelement.c	\
+	gststreamiddemux.c	\
 	gstvalve.c
 
 libgstcoreelements_la_CFLAGS = $(GST_OBJ_CFLAGS)
@@ -34,6 +36,7 @@
 
 noinst_HEADERS =		\
 	gstcapsfilter.h		\
+	gstconcat.h		\
 	gstdownloadbuffer.h	\
 	gstelements_private.h	\
 	gstfakesink.h		\
@@ -52,6 +55,7 @@
 	gstsparsefile.h		\
 	gsttee.h		\
 	gsttypefindelement.h	\
+	gststreamiddemux.h	\
 	gstvalve.h
 
 EXTRA_DIST = gstfdsrc.c \
diff --git a/plugins/elements/Makefile.in b/plugins/elements/Makefile.in
index a7df076..b83d15f 100644
--- a/plugins/elements/Makefile.in
+++ b/plugins/elements/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -157,6 +158,7 @@
 am__DEPENDENCIES_1 =
 am_libgstcoreelements_la_OBJECTS =  \
 	libgstcoreelements_la-gstcapsfilter.lo \
+	libgstcoreelements_la-gstconcat.lo \
 	libgstcoreelements_la-gstdownloadbuffer.lo \
 	libgstcoreelements_la-gstelements.lo \
 	libgstcoreelements_la-gstelements_private.lo \
@@ -176,6 +178,7 @@
 	libgstcoreelements_la-gstsparsefile.lo \
 	libgstcoreelements_la-gsttee.lo \
 	libgstcoreelements_la-gsttypefindelement.lo \
+	libgstcoreelements_la-gststreamiddemux.lo \
 	libgstcoreelements_la-gstvalve.lo
 libgstcoreelements_la_OBJECTS = $(am_libgstcoreelements_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -258,6 +261,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -363,6 +370,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -528,6 +536,7 @@
 libgstcoreelements_la_DEPENDENCIES = $(top_builddir)/gst/libgstreamer-@GST_API_VERSION@.la
 libgstcoreelements_la_SOURCES = \
 	gstcapsfilter.c		\
+	gstconcat.c		\
 	gstdownloadbuffer.c     \
 	gstelements.c		\
 	gstelements_private.c	\
@@ -547,6 +556,7 @@
 	gstsparsefile.c		\
 	gsttee.c		\
 	gsttypefindelement.c	\
+	gststreamiddemux.c	\
 	gstvalve.c
 
 libgstcoreelements_la_CFLAGS = $(GST_OBJ_CFLAGS)
@@ -558,6 +568,7 @@
 libgstcoreelements_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 noinst_HEADERS = \
 	gstcapsfilter.h		\
+	gstconcat.h		\
 	gstdownloadbuffer.h	\
 	gstelements_private.h	\
 	gstfakesink.h		\
@@ -576,6 +587,7 @@
 	gstsparsefile.h		\
 	gsttee.h		\
 	gsttypefindelement.h	\
+	gststreamiddemux.h	\
 	gstvalve.h
 
 EXTRA_DIST = gstfdsrc.c \
@@ -662,6 +674,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstcapsfilter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstconcat.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstdownloadbuffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstelements.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstelements_private.Plo@am__quote@
@@ -679,6 +692,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstqueue.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstqueue2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstsparsefile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gststreamiddemux.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gsttee.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gsttypefindelement.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstcoreelements_la-gstvalve.Plo@am__quote@
@@ -714,6 +728,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 $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -c -o libgstcoreelements_la-gstcapsfilter.lo `test -f 'gstcapsfilter.c' || echo '$(srcdir)/'`gstcapsfilter.c
 
+libgstcoreelements_la-gstconcat.lo: gstconcat.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -MT libgstcoreelements_la-gstconcat.lo -MD -MP -MF $(DEPDIR)/libgstcoreelements_la-gstconcat.Tpo -c -o libgstcoreelements_la-gstconcat.lo `test -f 'gstconcat.c' || echo '$(srcdir)/'`gstconcat.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcoreelements_la-gstconcat.Tpo $(DEPDIR)/libgstcoreelements_la-gstconcat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstconcat.c' object='libgstcoreelements_la-gstconcat.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 $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -c -o libgstcoreelements_la-gstconcat.lo `test -f 'gstconcat.c' || echo '$(srcdir)/'`gstconcat.c
+
 libgstcoreelements_la-gstdownloadbuffer.lo: gstdownloadbuffer.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -MT libgstcoreelements_la-gstdownloadbuffer.lo -MD -MP -MF $(DEPDIR)/libgstcoreelements_la-gstdownloadbuffer.Tpo -c -o libgstcoreelements_la-gstdownloadbuffer.lo `test -f 'gstdownloadbuffer.c' || echo '$(srcdir)/'`gstdownloadbuffer.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcoreelements_la-gstdownloadbuffer.Tpo $(DEPDIR)/libgstcoreelements_la-gstdownloadbuffer.Plo
@@ -847,6 +868,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 $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -c -o libgstcoreelements_la-gsttypefindelement.lo `test -f 'gsttypefindelement.c' || echo '$(srcdir)/'`gsttypefindelement.c
 
+libgstcoreelements_la-gststreamiddemux.lo: gststreamiddemux.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -MT libgstcoreelements_la-gststreamiddemux.lo -MD -MP -MF $(DEPDIR)/libgstcoreelements_la-gststreamiddemux.Tpo -c -o libgstcoreelements_la-gststreamiddemux.lo `test -f 'gststreamiddemux.c' || echo '$(srcdir)/'`gststreamiddemux.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcoreelements_la-gststreamiddemux.Tpo $(DEPDIR)/libgstcoreelements_la-gststreamiddemux.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gststreamiddemux.c' object='libgstcoreelements_la-gststreamiddemux.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 $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -c -o libgstcoreelements_la-gststreamiddemux.lo `test -f 'gststreamiddemux.c' || echo '$(srcdir)/'`gststreamiddemux.c
+
 libgstcoreelements_la-gstvalve.lo: gstvalve.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstcoreelements_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstcoreelements_la_CFLAGS) $(CFLAGS) -MT libgstcoreelements_la-gstvalve.lo -MD -MP -MF $(DEPDIR)/libgstcoreelements_la-gstvalve.Tpo -c -o libgstcoreelements_la-gstvalve.lo `test -f 'gstvalve.c' || echo '$(srcdir)/'`gstvalve.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstcoreelements_la-gstvalve.Tpo $(DEPDIR)/libgstcoreelements_la-gstvalve.Plo
diff --git a/plugins/elements/gstcapsfilter.c b/plugins/elements/gstcapsfilter.c
index a499453..6c7ae0d 100644
--- a/plugins/elements/gstcapsfilter.c
+++ b/plugins/elements/gstcapsfilter.c
@@ -43,9 +43,11 @@
 enum
 {
   PROP_0,
-  PROP_FILTER_CAPS
+  PROP_FILTER_CAPS,
+  PROP_CAPS_CHANGE_MODE
 };
 
+#define DEFAULT_CAPS_CHANGE_MODE (GST_CAPS_FILTER_CAPS_CHANGE_MODE_IMMEDIATE)
 
 static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
@@ -61,6 +63,26 @@
 GST_DEBUG_CATEGORY_STATIC (gst_capsfilter_debug);
 #define GST_CAT_DEFAULT gst_capsfilter_debug
 
+/* TODO: Add a drop-buffers mode */
+#define GST_TYPE_CAPS_FILTER_CAPS_CHANGE_MODE (gst_caps_filter_caps_change_mode_get_type())
+static GType
+gst_caps_filter_caps_change_mode_get_type (void)
+{
+  static GType type = 0;
+  static const GEnumValue data[] = {
+    {GST_CAPS_FILTER_CAPS_CHANGE_MODE_IMMEDIATE,
+        "Only accept the current filter caps", "immediate"},
+    {GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED,
+        "Temporarily accept previous filter caps", "delayed"},
+    {0, NULL, NULL},
+  };
+
+  if (!type) {
+    type = g_enum_register_static ("GstCapsFilterCapsChangeMode", data);
+  }
+  return type;
+}
+
 #define _do_init \
     GST_DEBUG_CATEGORY_INIT (gst_capsfilter_debug, "capsfilter", 0, \
     "capsfilter element");
@@ -104,7 +126,15 @@
           _("Restrict the possible allowed capabilities (NULL means ANY). "
               "Setting this property takes a reference to the supplied GstCaps "
               "object."), GST_TYPE_CAPS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_CAPS_CHANGE_MODE,
+      g_param_spec_enum ("caps-change-mode", _("Caps Change Mode"),
+          _("Filter caps change behaviour"),
+          GST_TYPE_CAPS_FILTER_CAPS_CHANGE_MODE, DEFAULT_CAPS_CHANGE_MODE,
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   gstelement_class = GST_ELEMENT_CLASS (klass);
   gst_element_class_set_static_metadata (gstelement_class,
@@ -135,6 +165,7 @@
   gst_base_transform_set_gap_aware (trans, TRUE);
   gst_base_transform_set_prefer_passthrough (trans, FALSE);
   filter->filter_caps = gst_caps_new_any ();
+  filter->caps_change_mode = DEFAULT_CAPS_CHANGE_MODE;
 }
 
 static void
@@ -159,6 +190,17 @@
       GST_OBJECT_LOCK (capsfilter);
       old_caps = capsfilter->filter_caps;
       capsfilter->filter_caps = new_caps;
+      if (old_caps
+          && capsfilter->caps_change_mode ==
+          GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED) {
+        capsfilter->previous_caps =
+            g_list_prepend (capsfilter->previous_caps, gst_caps_ref (old_caps));
+      } else if (capsfilter->caps_change_mode !=
+          GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED) {
+        g_list_free_full (capsfilter->previous_caps,
+            (GDestroyNotify) gst_caps_unref);
+        capsfilter->previous_caps = NULL;
+      }
       GST_OBJECT_UNLOCK (capsfilter);
 
       gst_caps_unref (old_caps);
@@ -168,6 +210,9 @@
       gst_base_transform_reconfigure_sink (GST_BASE_TRANSFORM (object));
       break;
     }
+    case PROP_CAPS_CHANGE_MODE:
+      capsfilter->caps_change_mode = g_value_get_enum (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -186,6 +231,9 @@
       gst_value_set_caps (value, capsfilter->filter_caps);
       GST_OBJECT_UNLOCK (capsfilter);
       break;
+    case PROP_CAPS_CHANGE_MODE:
+      g_value_set_enum (value, capsfilter->caps_change_mode);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -210,11 +258,15 @@
 {
   GstCapsFilter *capsfilter = GST_CAPSFILTER (base);
   GstCaps *ret, *filter_caps, *tmp;
+  gboolean retried = FALSE;
+  GstCapsFilterCapsChangeMode caps_change_mode;
 
   GST_OBJECT_LOCK (capsfilter);
   filter_caps = gst_caps_ref (capsfilter->filter_caps);
+  caps_change_mode = capsfilter->caps_change_mode;
   GST_OBJECT_UNLOCK (capsfilter);
 
+retry:
   if (filter) {
     tmp =
         gst_caps_intersect_full (filter, filter_caps, GST_CAPS_INTERSECT_FIRST);
@@ -230,6 +282,26 @@
       filter_caps);
   GST_DEBUG_OBJECT (capsfilter, "intersect: %" GST_PTR_FORMAT, ret);
 
+  if (gst_caps_is_empty (ret)
+      && caps_change_mode ==
+      GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED && capsfilter->previous_caps
+      && !retried) {
+    GList *l;
+
+    GST_DEBUG_OBJECT (capsfilter,
+        "Current filter caps are not compatible, retry with previous");
+    GST_OBJECT_LOCK (capsfilter);
+    gst_caps_unref (filter_caps);
+    gst_caps_unref (ret);
+    filter_caps = gst_caps_new_empty ();
+    for (l = capsfilter->previous_caps; l; l = l->next) {
+      filter_caps = gst_caps_merge (filter_caps, gst_caps_ref (l->data));
+    }
+    GST_OBJECT_UNLOCK (capsfilter);
+    retried = TRUE;
+    goto retry;
+  }
+
   gst_caps_unref (filter_caps);
 
   return ret;
@@ -249,6 +321,25 @@
 
   ret = gst_caps_can_intersect (caps, filter_caps);
   GST_DEBUG_OBJECT (capsfilter, "can intersect: %d", ret);
+  if (!ret
+      && capsfilter->caps_change_mode ==
+      GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED) {
+    GList *l;
+
+    GST_OBJECT_LOCK (capsfilter);
+    for (l = capsfilter->previous_caps; l; l = l->next) {
+      ret = gst_caps_can_intersect (caps, l->data);
+      if (ret)
+        break;
+    }
+    GST_OBJECT_UNLOCK (capsfilter);
+
+    /* Tell upstream to reconfigure, it's still
+     * looking at old caps */
+    if (ret)
+      gst_base_transform_reconfigure_sink (base);
+  }
+
   if (ret) {
     /* if we can intersect, see if the other end also accepts */
     if (direction == GST_PAD_SRC)
@@ -380,6 +471,7 @@
 gst_capsfilter_sink_event (GstBaseTransform * trans, GstEvent * event)
 {
   GstCapsFilter *filter = GST_CAPSFILTER (trans);
+  gboolean ret;
 
   if (GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_STOP) {
     GList *l;
@@ -421,7 +513,39 @@
 done:
 
   GST_LOG_OBJECT (trans, "Forwarding %s event", GST_EVENT_TYPE_NAME (event));
-  return GST_BASE_TRANSFORM_CLASS (parent_class)->sink_event (trans, event);
+  ret =
+      GST_BASE_TRANSFORM_CLASS (parent_class)->sink_event (trans,
+      gst_event_ref (event));
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS
+      && filter->caps_change_mode == GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED) {
+    GList *l;
+    GstCaps *caps;
+
+    gst_event_parse_caps (event, &caps);
+
+    /* Remove all previous caps up to one that works.
+     * Note that this might keep some leftover caps if there
+     * are multiple compatible caps */
+    GST_OBJECT_LOCK (filter);
+    for (l = g_list_last (filter->previous_caps); l; l = l->prev) {
+      if (gst_caps_can_intersect (caps, l->data)) {
+        while (l->next) {
+          gst_caps_unref (l->next->data);
+          l = g_list_delete_link (l, l->next);
+        }
+        break;
+      }
+    }
+    if (!l && gst_caps_can_intersect (caps, filter->filter_caps)) {
+      g_list_free_full (filter->previous_caps, (GDestroyNotify) gst_caps_unref);
+      filter->previous_caps = NULL;
+    }
+    GST_OBJECT_UNLOCK (filter);
+  }
+  gst_event_unref (event);
+
+  return ret;
 }
 
 static gboolean
@@ -432,5 +556,10 @@
   g_list_free_full (filter->pending_events, (GDestroyNotify) gst_event_unref);
   filter->pending_events = NULL;
 
+  GST_OBJECT_LOCK (filter);
+  g_list_free_full (filter->previous_caps, (GDestroyNotify) gst_caps_unref);
+  filter->previous_caps = NULL;
+  GST_OBJECT_UNLOCK (filter);
+
   return TRUE;
 }
diff --git a/plugins/elements/gstcapsfilter.h b/plugins/elements/gstcapsfilter.h
index ab9ac1f..19f851d 100644
--- a/plugins/elements/gstcapsfilter.h
+++ b/plugins/elements/gstcapsfilter.h
@@ -44,6 +44,11 @@
 typedef struct _GstCapsFilter GstCapsFilter;
 typedef struct _GstCapsFilterClass GstCapsFilterClass;
 
+typedef enum {
+  GST_CAPS_FILTER_CAPS_CHANGE_MODE_IMMEDIATE,
+  GST_CAPS_FILTER_CAPS_CHANGE_MODE_DELAYED
+} GstCapsFilterCapsChangeMode;
+
 /**
  * GstCapsFilter:
  *
@@ -53,7 +58,10 @@
   GstBaseTransform trans;
 
   GstCaps *filter_caps;
+  GstCapsFilterCapsChangeMode caps_change_mode;
+
   GList *pending_events;
+  GList *previous_caps;
 };
 
 struct _GstCapsFilterClass {
diff --git a/plugins/elements/gstconcat.c b/plugins/elements/gstconcat.c
new file mode 100644
index 0000000..340a2d1
--- /dev/null
+++ b/plugins/elements/gstconcat.c
@@ -0,0 +1,703 @@
+/* GStreamer concat element
+ *
+ *  Copyright (c) 2014 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+/**
+ * SECTION:element-concat
+ * @see_also: #GstFunnel
+ *
+ * Concatenates streams together to one continous stream.
+ *
+ * All streams but the current one are blocked until the current one
+ * finished with %GST_EVENT_EOS. Then the next stream is enabled, while
+ * keeping the running time continous for %GST_FORMAT_TIME segments or
+ * keeping the segment continous for %GST_FORMAT_BYTES segments.
+ *
+ * Streams are switched in the order in which the sinkpads were requested.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch-1.0 concat name=c ! xvimagesink  videotestsrc num-buffers=100 ! c.   videotestsrc num-buffers=100 pattern=ball ! c.
+ * ]| Plays two video streams one after another.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstconcat.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_concat_debug);
+#define GST_CAT_DEFAULT gst_concat_debug
+
+G_GNUC_INTERNAL GType gst_concat_pad_get_type (void);
+
+#define GST_TYPE_CONCAT_PAD (gst_concat_pad_get_type())
+#define GST_CONCAT_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CONCAT_PAD, GstConcatPad))
+#define GST_CONCAT_PAD_CAST(obj) ((GstConcatPad *)(obj))
+#define GST_CONCAT_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_CONCAT_PAD, GstConcatPadClass))
+#define GST_IS_CONCAT_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CONCAT_PAD))
+#define GST_IS_CONCAT_PAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CONCAT_PAD))
+
+typedef struct _GstConcatPad GstConcatPad;
+typedef struct _GstConcatPadClass GstConcatPadClass;
+
+struct _GstConcatPad
+{
+  GstPad parent;
+
+  GstSegment segment;
+
+  /* Protected by the concat lock */
+  gboolean flushing;
+};
+
+struct _GstConcatPadClass
+{
+  GstPadClass parent;
+};
+
+G_DEFINE_TYPE (GstConcatPad, gst_concat_pad, GST_TYPE_PAD);
+
+static void
+gst_concat_pad_class_init (GstConcatPadClass * klass)
+{
+}
+
+static void
+gst_concat_pad_init (GstConcatPad * self)
+{
+  gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+  self->flushing = FALSE;
+}
+
+static GstStaticPadTemplate concat_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink_%u",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate concat_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+#define _do_init \
+  GST_DEBUG_CATEGORY_INIT (gst_concat_debug, "concat", 0, "concat element");
+#define gst_concat_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstConcat, gst_concat, GST_TYPE_ELEMENT, _do_init);
+
+static void gst_concat_dispose (GObject * object);
+static void gst_concat_finalize (GObject * object);
+
+static GstStateChangeReturn gst_concat_change_state (GstElement * element,
+    GstStateChange transition);
+static GstPad *gst_concat_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_concat_release_pad (GstElement * element, GstPad * pad);
+
+static GstFlowReturn gst_concat_sink_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
+static gboolean gst_concat_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_concat_sink_query (GstPad * pad, GstObject * parent,
+    GstQuery * query);
+
+static gboolean gst_concat_src_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_concat_src_query (GstPad * pad, GstObject * parent,
+    GstQuery * query);
+
+static gboolean gst_concat_switch_pad (GstConcat * self);
+
+static void
+gst_concat_class_init (GstConcatClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_concat_dispose);
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_concat_finalize);
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "Concat", "Generic", "Concatenate multiple streams",
+      "Sebastian Dröge <sebastian@centricular.com>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&concat_sink_template));
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&concat_src_template));
+
+  gstelement_class->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_concat_request_new_pad);
+  gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_concat_release_pad);
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_concat_change_state);
+}
+
+static void
+gst_concat_init (GstConcat * self)
+{
+  g_mutex_init (&self->lock);
+  g_cond_init (&self->cond);
+
+  self->srcpad = gst_pad_new_from_static_template (&concat_src_template, "src");
+  gst_pad_set_event_function (self->srcpad,
+      GST_DEBUG_FUNCPTR (gst_concat_src_event));
+  gst_pad_set_query_function (self->srcpad,
+      GST_DEBUG_FUNCPTR (gst_concat_src_query));
+  gst_pad_use_fixed_caps (self->srcpad);
+
+  gst_element_add_pad (GST_ELEMENT (self), self->srcpad);
+}
+
+static void
+gst_concat_dispose (GObject * object)
+{
+  GstConcat *self = GST_CONCAT (object);
+  GList *item;
+
+  gst_object_replace ((GstObject **) & self->current_sinkpad, NULL);
+
+restart:
+  for (item = GST_ELEMENT_PADS (object); item; item = g_list_next (item)) {
+    GstPad *pad = GST_PAD (item->data);
+
+    if (GST_PAD_IS_SINK (pad)) {
+      gst_element_release_request_pad (GST_ELEMENT (object), pad);
+      goto restart;
+    }
+  }
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_concat_finalize (GObject * object)
+{
+  GstConcat *self = GST_CONCAT (object);
+
+  g_mutex_clear (&self->lock);
+  g_cond_clear (&self->cond);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstPad *
+gst_concat_request_new_pad (GstElement * element, GstPadTemplate * templ,
+    const gchar * name, const GstCaps * caps)
+{
+  GstConcat *self = GST_CONCAT (element);
+  GstPad *sinkpad;
+  gchar *pad_name;
+
+  GST_DEBUG_OBJECT (element, "requesting pad");
+
+  g_mutex_lock (&self->lock);
+  pad_name = g_strdup_printf ("sink_%u", self->pad_count);
+  self->pad_count++;
+  g_mutex_unlock (&self->lock);
+
+  sinkpad = GST_PAD_CAST (g_object_new (GST_TYPE_CONCAT_PAD,
+          "name", pad_name, "direction", templ->direction, "template", templ,
+          NULL));
+  g_free (pad_name);
+
+  gst_pad_set_chain_function (sinkpad,
+      GST_DEBUG_FUNCPTR (gst_concat_sink_chain));
+  gst_pad_set_event_function (sinkpad,
+      GST_DEBUG_FUNCPTR (gst_concat_sink_event));
+  gst_pad_set_query_function (sinkpad,
+      GST_DEBUG_FUNCPTR (gst_concat_sink_query));
+  GST_OBJECT_FLAG_SET (sinkpad, GST_PAD_FLAG_PROXY_CAPS);
+  GST_OBJECT_FLAG_SET (sinkpad, GST_PAD_FLAG_PROXY_ALLOCATION);
+
+  gst_pad_set_active (sinkpad, TRUE);
+
+  g_mutex_lock (&self->lock);
+  self->sinkpads = g_list_prepend (self->sinkpads, gst_object_ref (sinkpad));
+  if (!self->current_sinkpad)
+    self->current_sinkpad = gst_object_ref (sinkpad);
+  g_mutex_unlock (&self->lock);
+
+  gst_element_add_pad (element, sinkpad);
+
+  return sinkpad;
+}
+
+static void
+gst_concat_release_pad (GstElement * element, GstPad * pad)
+{
+  GstConcat *self = GST_CONCAT (element);
+  GstConcatPad *spad = GST_CONCAT_PAD_CAST (pad);
+  GList *l;
+  gboolean current_pad_removed = FALSE;
+  gboolean eos = FALSE;
+
+  GST_DEBUG_OBJECT (self, "releasing pad");
+
+  g_mutex_lock (&self->lock);
+  spad->flushing = TRUE;
+  g_cond_broadcast (&self->cond);
+  g_mutex_unlock (&self->lock);
+
+  gst_pad_set_active (pad, FALSE);
+
+  /* Now the pad is definitely not running anymore */
+
+  g_mutex_lock (&self->lock);
+  if (self->current_sinkpad == GST_PAD_CAST (spad)) {
+    eos = ! !gst_concat_switch_pad (self);
+    current_pad_removed = TRUE;
+  }
+
+  for (l = self->sinkpads; l; l = l->next) {
+    if ((gpointer) spad == l->data) {
+      gst_object_unref (spad);
+      self->sinkpads = g_list_delete_link (self->sinkpads, l);
+      break;
+    }
+  }
+  g_mutex_unlock (&self->lock);
+
+  gst_element_remove_pad (GST_ELEMENT_CAST (self), pad);
+
+  if (GST_STATE (self) > GST_STATE_READY) {
+    if (current_pad_removed && !eos)
+      gst_element_post_message (GST_ELEMENT_CAST (self),
+          gst_message_new_duration_changed (GST_OBJECT_CAST (self)));
+
+    /* FIXME: Sending EOS from application thread */
+    if (eos)
+      gst_pad_push_event (self->srcpad, gst_event_new_eos ());
+  }
+}
+
+/* Returns FALSE if flushing
+ * Must be called from the pad's streaming thread
+ */
+static gboolean
+gst_concat_pad_wait (GstConcatPad * spad, GstConcat * self)
+{
+  g_mutex_lock (&self->lock);
+  if (spad->flushing) {
+    g_mutex_unlock (&self->lock);
+    GST_DEBUG_OBJECT (spad, "Flushing");
+    return FALSE;
+  }
+
+  while (spad != GST_CONCAT_PAD_CAST (self->current_sinkpad)) {
+    GST_TRACE_OBJECT (spad, "Not the current sinkpad - waiting");
+    g_cond_wait (&self->cond, &self->lock);
+    if (spad->flushing) {
+      g_mutex_unlock (&self->lock);
+      GST_DEBUG_OBJECT (spad, "Flushing");
+      return FALSE;
+    }
+  }
+  /* This pad can only become not the current sinkpad from
+   * a) This streaming thread (we hold the stream lock)
+   * b) Releasing the pad (takes the stream lock, see above)
+   *
+   * Unlocking here is thus safe and we can safely push
+   * serialized data to our srcpad
+   */
+  GST_DEBUG_OBJECT (spad, "Now the current sinkpad");
+  g_mutex_unlock (&self->lock);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_concat_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstFlowReturn ret;
+  GstConcat *self = GST_CONCAT (parent);
+  GstConcatPad *spad = GST_CONCAT_PAD (pad);
+
+  GST_LOG_OBJECT (pad, "received buffer %p", buffer);
+
+  if (!gst_concat_pad_wait (spad, self))
+    return GST_FLOW_FLUSHING;
+
+  if (self->last_stop == GST_CLOCK_TIME_NONE)
+    self->last_stop = spad->segment.start;
+
+  if (self->format == GST_FORMAT_TIME) {
+    GstClockTime start_time = GST_BUFFER_TIMESTAMP (buffer);
+    GstClockTime end_time = GST_CLOCK_TIME_NONE;
+
+    if (start_time != GST_CLOCK_TIME_NONE)
+      end_time = start_time;
+    if (GST_BUFFER_DURATION_IS_VALID (buffer))
+      end_time += GST_BUFFER_DURATION (buffer);
+
+    if (end_time != GST_CLOCK_TIME_NONE && end_time > self->last_stop)
+      self->last_stop = end_time;
+  } else {
+    self->last_stop += gst_buffer_get_size (buffer);
+  }
+
+  ret = gst_pad_push (self->srcpad, buffer);
+
+  GST_LOG_OBJECT (pad, "handled buffer %s", gst_flow_get_name (ret));
+
+  return ret;
+}
+
+/* Returns FALSE if no further pad, must be called with concat lock */
+static gboolean
+gst_concat_switch_pad (GstConcat * self)
+{
+  GList *l;
+  gboolean next;
+  GstSegment segment;
+  gint64 last_stop;
+
+  segment = GST_CONCAT_PAD (self->current_sinkpad)->segment;
+
+  last_stop = self->last_stop;
+  if (last_stop == GST_CLOCK_TIME_NONE)
+    last_stop = segment.stop;
+  if (last_stop == GST_CLOCK_TIME_NONE)
+    last_stop = segment.start;
+  g_assert (last_stop != GST_CLOCK_TIME_NONE);
+
+  if (last_stop > segment.stop)
+    last_stop = segment.stop;
+
+  if (segment.format == GST_FORMAT_TIME)
+    last_stop =
+        gst_segment_to_running_time (&segment, segment.format, last_stop);
+  else
+    last_stop += segment.start;
+
+  self->current_start_offset += last_stop;
+
+  for (l = self->sinkpads; l; l = l->next) {
+    if ((gpointer) self->current_sinkpad == l->data) {
+      l = l->prev;
+      GST_DEBUG_OBJECT (self,
+          "Switching from pad %" GST_PTR_FORMAT " to %" GST_PTR_FORMAT,
+          self->current_sinkpad, l ? l->data : NULL);
+      gst_object_unref (self->current_sinkpad);
+      self->current_sinkpad = l ? gst_object_ref (l->data) : NULL;
+      g_cond_broadcast (&self->cond);
+      break;
+    }
+  }
+
+  next = self->current_sinkpad != NULL;
+
+  self->last_stop = GST_CLOCK_TIME_NONE;
+
+  return next;
+}
+
+static gboolean
+gst_concat_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstConcat *self = GST_CONCAT (parent);
+  GstConcatPad *spad = GST_CONCAT_PAD_CAST (pad);
+  gboolean ret = TRUE;
+
+  GST_LOG_OBJECT (pad, "received event %" GST_PTR_FORMAT, event);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_STREAM_START:{
+      if (!gst_concat_pad_wait (spad, self)) {
+        ret = FALSE;
+        gst_event_unref (event);
+      } else {
+        ret = gst_pad_event_default (pad, parent, event);
+      }
+      break;
+    }
+    case GST_EVENT_SEGMENT:{
+      /* Drop segment event, we create our own one */
+      gst_event_copy_segment (event, &spad->segment);
+      gst_event_unref (event);
+
+      g_mutex_lock (&self->lock);
+      if (self->format == GST_FORMAT_UNDEFINED) {
+        if (spad->segment.format != GST_FORMAT_TIME
+            && spad->segment.format != GST_FORMAT_BYTES) {
+          g_mutex_unlock (&self->lock);
+          GST_ELEMENT_ERROR (self, CORE, FAILED, (NULL),
+              ("Can only operate in TIME or BYTES format"));
+          ret = FALSE;
+          break;
+        }
+        self->format = spad->segment.format;
+        GST_DEBUG_OBJECT (self, "Operating in %s format",
+            gst_format_get_name (self->format));
+        g_mutex_unlock (&self->lock);
+      } else if (self->format != spad->segment.format) {
+        g_mutex_unlock (&self->lock);
+        GST_ELEMENT_ERROR (self, CORE, FAILED, (NULL),
+            ("Operating in %s format but new pad has %s",
+                gst_format_get_name (self->format),
+                gst_format_get_name (spad->segment.format)));
+        ret = FALSE;
+      } else {
+        g_mutex_unlock (&self->lock);
+      }
+
+      if (!gst_concat_pad_wait (spad, self)) {
+        ret = FALSE;
+      } else {
+        GstSegment segment = spad->segment;
+
+        /* We know no duration */
+        segment.duration = -1;
+
+        /* Update segment values to be continous with last stream */
+        if (self->format == GST_FORMAT_TIME) {
+          segment.base += self->current_start_offset;
+        } else {
+          /* Shift start/stop byte position */
+          segment.start += self->current_start_offset;
+          if (segment.stop != -1)
+            segment.stop += self->current_start_offset;
+        }
+        gst_pad_push_event (self->srcpad, gst_event_new_segment (&segment));
+      }
+      break;
+    }
+    case GST_EVENT_EOS:{
+      gst_event_unref (event);
+      if (!gst_concat_pad_wait (spad, self)) {
+        ret = FALSE;
+      } else {
+        gboolean next;
+
+        g_mutex_lock (&self->lock);
+        next = gst_concat_switch_pad (self);
+        g_mutex_unlock (&self->lock);
+        ret = TRUE;
+
+        if (!next) {
+          gst_pad_push_event (self->srcpad, gst_event_new_eos ());
+        } else {
+          gst_element_post_message (GST_ELEMENT_CAST (self),
+              gst_message_new_duration_changed (GST_OBJECT_CAST (self)));
+        }
+      }
+      break;
+    }
+    case GST_EVENT_FLUSH_START:{
+      g_mutex_lock (&self->lock);
+      spad->flushing = TRUE;
+      g_cond_broadcast (&self->cond);
+      g_mutex_unlock (&self->lock);
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:{
+      gst_segment_init (&spad->segment, GST_FORMAT_UNDEFINED);
+      spad->flushing = FALSE;
+      break;
+    }
+    default:{
+      /* Wait for other serialized events before forwarding */
+      if (GST_EVENT_IS_SERIALIZED (event) && !gst_concat_pad_wait (spad, self)) {
+        gst_event_unref (event);
+        ret = FALSE;
+      } else {
+        ret = gst_pad_event_default (pad, parent, event);
+      }
+      break;
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_concat_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+  GstConcat *self = GST_CONCAT (parent);
+  GstConcatPad *spad = GST_CONCAT_PAD_CAST (pad);
+  gboolean ret = TRUE;
+
+  GST_LOG_OBJECT (pad, "received query %" GST_PTR_FORMAT, query);
+
+  switch (GST_QUERY_TYPE (query)) {
+    default:
+      /* Wait for other serialized queries before forwarding */
+      if (GST_QUERY_IS_SERIALIZED (query) && !gst_concat_pad_wait (spad, self)) {
+        ret = FALSE;
+      } else {
+        ret = gst_pad_query_default (pad, parent, query);
+      }
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_concat_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstConcat *self = GST_CONCAT (parent);
+  gboolean ret = TRUE;
+
+  GST_LOG_OBJECT (pad, "received event %" GST_PTR_FORMAT, event);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:{
+      GstPad *sinkpad = NULL;
+
+      g_mutex_lock (&self->lock);
+      if ((sinkpad = self->current_sinkpad))
+        gst_object_ref (sinkpad);
+      g_mutex_unlock (&self->lock);
+      if (sinkpad) {
+        ret = gst_pad_push_event (sinkpad, event);
+        gst_object_unref (sinkpad);
+      } else {
+        gst_event_unref (event);
+        ret = FALSE;
+      }
+      break;
+    }
+    case GST_EVENT_QOS:{
+      GstQOSType type;
+      GstClockTimeDiff diff;
+      GstClockTime timestamp;
+      gdouble proportion;
+
+      gst_event_parse_qos (event, &type, &proportion, &diff, &timestamp);
+      gst_event_unref (event);
+
+      if (timestamp != GST_CLOCK_TIME_NONE
+          && timestamp > self->current_start_offset) {
+        timestamp -= self->current_start_offset;
+        event = gst_event_new_qos (type, proportion, diff, timestamp);
+        ret = gst_pad_push_event (self->current_sinkpad, event);
+      } else {
+        ret = FALSE;
+      }
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_concat_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+  gboolean ret = TRUE;
+
+  GST_LOG_OBJECT (pad, "received query %" GST_PTR_FORMAT, query);
+
+  switch (GST_QUERY_TYPE (query)) {
+    default:
+      ret = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+
+  return ret;
+}
+
+static void
+reset_pad (const GValue * data, gpointer user_data)
+{
+  GstPad *pad = g_value_get_object (data);
+  GstConcatPad *spad = GST_CONCAT_PAD_CAST (pad);
+
+  gst_segment_init (&spad->segment, GST_FORMAT_UNDEFINED);
+  spad->flushing = FALSE;
+}
+
+static void
+unblock_pad (const GValue * data, gpointer user_data)
+{
+  GstPad *pad = g_value_get_object (data);
+  GstConcatPad *spad = GST_CONCAT_PAD_CAST (pad);
+
+  spad->flushing = TRUE;
+}
+
+static GstStateChangeReturn
+gst_concat_change_state (GstElement * element, GstStateChange transition)
+{
+  GstConcat *self = GST_CONCAT (element);
+  GstStateChangeReturn ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:{
+      self->format = GST_FORMAT_UNDEFINED;
+      self->current_start_offset = 0;
+      self->last_stop = GST_CLOCK_TIME_NONE;
+      break;
+    }
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      GstIterator *iter = gst_element_iterate_sink_pads (element);
+      GstIteratorResult res;
+
+      g_mutex_lock (&self->lock);
+      do {
+        res = gst_iterator_foreach (iter, unblock_pad, NULL);
+      } while (res == GST_ITERATOR_RESYNC);
+
+      gst_iterator_free (iter);
+      g_cond_broadcast (&self->cond);
+      g_mutex_unlock (&self->lock);
+
+      if (res == GST_ITERATOR_ERROR)
+        return GST_STATE_CHANGE_FAILURE;
+
+      break;
+    }
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      GstIterator *iter = gst_element_iterate_sink_pads (element);
+      GstIteratorResult res;
+
+      do {
+        res = gst_iterator_foreach (iter, reset_pad, NULL);
+      } while (res == GST_ITERATOR_RESYNC);
+
+      gst_iterator_free (iter);
+
+      if (res == GST_ITERATOR_ERROR)
+        return GST_STATE_CHANGE_FAILURE;
+
+      break;
+    }
+    default:
+      break;
+  }
+
+  return ret;
+}
diff --git a/plugins/elements/gstconcat.h b/plugins/elements/gstconcat.h
new file mode 100644
index 0000000..176e22a
--- /dev/null
+++ b/plugins/elements/gstconcat.h
@@ -0,0 +1,73 @@
+/* GStreamer concat element
+ *
+ *  Copyright (c) 2014 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef __GST_CONCAT_H__
+#define __GST_CONCAT_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_CONCAT (gst_concat_get_type())
+#define GST_CONCAT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CONCAT, GstConcat))
+#define GST_CONCAT_CAST(obj) ((GstConcat*)obj)
+#define GST_CONCAT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_CONCAT,GstConcatClass))
+#define GST_IS_CONCAT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CONCAT))
+#define GST_IS_CONCAT_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CONCAT))
+
+typedef struct _GstConcat GstConcat;
+typedef struct _GstConcatClass GstConcatClass;
+
+/**
+ * GstConcat:
+ *
+ * The private concat structure
+ */
+struct _GstConcat
+{
+  /*< private >*/
+  GstElement parent;
+
+  GMutex lock;
+  GCond cond;
+  GList *sinkpads; /* Last is earliest */
+  GstPad *current_sinkpad;
+  GstPad *srcpad;
+  guint pad_count;
+
+  /* Format we're operating in */
+  GstFormat format;
+  /* In format, running time or accumulated byte offset */
+  guint64 current_start_offset;
+  /* Between current pad's segment start and stop */
+  guint64 last_stop;
+};
+
+struct _GstConcatClass
+{
+  GstElementClass parent_class;
+};
+
+G_GNUC_INTERNAL GType gst_concat_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_CONCAT_H__ */
diff --git a/plugins/elements/gstdownloadbuffer.c b/plugins/elements/gstdownloadbuffer.c
index db3be22..e31633f 100644
--- a/plugins/elements/gstdownloadbuffer.c
+++ b/plugins/elements/gstdownloadbuffer.c
@@ -225,11 +225,13 @@
       g_param_spec_uint ("max-size-bytes", "Max. size (kB)",
           "Max. amount of data to buffer (bytes, 0=disable)",
           0, G_MAXUINT, DEFAULT_MAX_SIZE_BYTES,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_SIZE_TIME,
       g_param_spec_uint64 ("max-size-time", "Max. size (ns)",
           "Max. amount of data to buffer (in ns, 0=disable)", 0, G_MAXUINT64,
-          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_LOW_PERCENT,
       g_param_spec_int ("low-percent", "Low percent",
diff --git a/plugins/elements/gstelements.c b/plugins/elements/gstelements.c
index 93d3a9a..5c07855 100644
--- a/plugins/elements/gstelements.c
+++ b/plugins/elements/gstelements.c
@@ -28,6 +28,7 @@
 #include <gst/gst.h>
 
 #include "gstcapsfilter.h"
+#include "gstconcat.h"
 #include "gstdownloadbuffer.h"
 #include "gstfakesink.h"
 #include "gstfakesrc.h"
@@ -45,6 +46,7 @@
 #include "gsttee.h"
 #include "gsttypefindelement.h"
 #include "gstvalve.h"
+#include "gststreamiddemux.h"
 
 static gboolean
 plugin_init (GstPlugin * plugin)
@@ -52,6 +54,9 @@
   if (!gst_element_register (plugin, "capsfilter", GST_RANK_NONE,
           gst_capsfilter_get_type ()))
     return FALSE;
+  if (!gst_element_register (plugin, "concat", GST_RANK_NONE,
+          gst_concat_get_type ()))
+    return FALSE;
   if (!gst_element_register (plugin, "downloadbuffer", GST_RANK_NONE,
           gst_download_buffer_get_type ()))
     return FALSE;
@@ -105,6 +110,10 @@
           gst_valve_get_type ()))
     return FALSE;
 
+  if (!gst_element_register (plugin, "streamiddemux", GST_RANK_PRIMARY,
+          gst_streamid_demux_get_type ()))
+    return FALSE;
+
   return TRUE;
 }
 
diff --git a/plugins/elements/gstelements_private.c b/plugins/elements/gstelements_private.c
index 2364741..fe6d663 100644
--- a/plugins/elements/gstelements_private.c
+++ b/plugins/elements/gstelements_private.c
@@ -25,33 +25,55 @@
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
+#include <stdio.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+#include <errno.h>
+#include <string.h>
 #include <string.h>
 #include "gst/gst.h"
 #include "gstelements_private.h"
 
+#ifdef G_OS_WIN32
+#  define WIN32_LEAN_AND_MEAN   /* prevents from including too many things */
+#  include <windows.h>
+#  undef WIN32_LEAN_AND_MEAN
+#  ifndef EWOULDBLOCK
+#  define EWOULDBLOCK EAGAIN
+#  endif
+#endif /* G_OS_WIN32 */
+
+#define BUFFER_FLAG_SHIFT 4
+
+G_STATIC_ASSERT ((1 << BUFFER_FLAG_SHIFT) == GST_MINI_OBJECT_FLAG_LAST);
+
 /* Returns a newly allocated string describing the flags on this buffer */
 char *
 gst_buffer_get_flags_string (GstBuffer * buffer)
 {
-  static const char *const flag_list[] = {
-    "", "", "", "", "live", "decode-only", "discont", "resync", "corrupted",
-    "marker", "header", "gap", "droppable", "delta-unit", "tag-memory",
-    "FIXME"
+  static const char flag_strings[] =
+      "\000\000\000\000live\000decode-only\000discont\000resync\000corrupted\000"
+      "marker\000header\000gap\000droppable\000delta-unit\000tag-memory\000"
+      "FIXME";
+  static const guint8 flag_idx[] = { 0, 1, 2, 3, 4, 9, 21, 29, 36, 46, 53,
+    60, 64, 74, 85, 96
   };
   int i, max_bytes;
   char *flag_str, *end;
 
-  max_bytes = 1;                /* NUL */
-  for (i = 0; i < G_N_ELEMENTS (flag_list); i++) {
-    max_bytes += strlen (flag_list[i]) + 1;     /* string and space */
-  }
+  /* max size is all flag strings plus a space or terminator after each one */
+  max_bytes = sizeof (flag_strings);
   flag_str = g_malloc (max_bytes);
 
   end = flag_str;
   end[0] = '\0';
-  for (i = 0; i < G_N_ELEMENTS (flag_list); i++) {
+  for (i = BUFFER_FLAG_SHIFT; i < G_N_ELEMENTS (flag_idx); i++) {
     if (GST_MINI_OBJECT_CAST (buffer)->flags & (1 << i)) {
-      strcpy (end, flag_list[i]);
+      strcpy (end, flag_strings + flag_idx[i]);
       end += strlen (end);
       end[0] = ' ';
       end[1] = '\0';
@@ -61,3 +83,235 @@
 
   return flag_str;
 }
+
+/* Define our own iovec structure here, so that we can use it unconditionally
+ * in the code below and use almost the same code path for systems where
+ * writev() is supported and those were it's not supported */
+#ifndef HAVE_SYS_UIO_H
+struct iovec
+{
+  gpointer iov_base;
+  gsize iov_len;
+};
+#endif
+
+/* completely arbitrary thresholds */
+#define FDSINK_MAX_ALLOCA_SIZE (64 * 1024)      /* 64k */
+#define FDSINK_MAX_MALLOC_SIZE ( 8 * 1024 * 1024)       /*  8M */
+
+static gssize
+gst_writev (gint fd, const struct iovec *iov, gint iovcnt, gsize total_bytes)
+{
+  gssize written;
+
+#ifdef HAVE_SYS_UIO_H
+  if (TRUE) {
+    do {
+      written = writev (fd, iov, iovcnt);
+    } while (written < 0 && errno == EINTR);
+  } else
+#endif
+  {
+    gint i;
+
+    /* We merge the memories here because technically write()/writev() is
+     * supposed to be atomic, which it's not if we do multiple separate
+     * write() calls. It's very doubtful anyone cares though in our use
+     * cases, and it's not clear how that can be reconciled with the
+     * possibility of short writes, so in any case we might want to
+     * simplify this later or just remove it. */
+    if (total_bytes <= FDSINK_MAX_MALLOC_SIZE) {
+      gchar *mem, *p;
+
+      if (total_bytes <= FDSINK_MAX_ALLOCA_SIZE)
+        mem = g_alloca (total_bytes);
+      else
+        mem = g_malloc (total_bytes);
+
+      p = mem;
+      for (i = 0; i < iovcnt; ++i) {
+        memcpy (p, iov[i].iov_base, iov[i].iov_len);
+        p += iov[i].iov_len;
+      }
+
+      do {
+        written = write (fd, mem, total_bytes);
+      } while (written < 0 && errno == EINTR);
+
+      if (total_bytes > FDSINK_MAX_ALLOCA_SIZE)
+        g_free (mem);
+    } else {
+      gssize ret;
+
+      written = 0;
+      for (i = 0; i < iovcnt; ++i) {
+        do {
+          ret = write (fd, iov[i].iov_base, iov[i].iov_len);
+        } while (ret < 0 && errno == EINTR);
+        if (ret > 0)
+          written += ret;
+        if (ret != iov[i].iov_len)
+          break;
+      }
+    }
+  }
+
+  return written;
+}
+
+static gsize
+fill_vectors (struct iovec *vecs, GstMapInfo * maps, guint n, GstBuffer * buf)
+{
+  GstMemory *mem;
+  gsize size = 0;
+  guint i;
+
+  g_assert (gst_buffer_n_memory (buf) == n);
+
+  for (i = 0; i < n; ++i) {
+    mem = gst_buffer_peek_memory (buf, i);
+    if (gst_memory_map (mem, &maps[i], GST_MAP_READ)) {
+      vecs[i].iov_base = maps[i].data;
+      vecs[i].iov_len = maps[i].size;
+    } else {
+      GST_WARNING ("Failed to map memory %p for reading", mem);
+      vecs[i].iov_base = (void *) "";
+      vecs[i].iov_len = 0;
+    }
+    size += vecs[i].iov_len;
+  }
+
+  return size;
+}
+
+GstFlowReturn
+gst_writev_buffers (GstObject * sink, gint fd, GstPoll * fdset,
+    GstBuffer ** buffers, guint num_buffers, guint8 * mem_nums,
+    guint total_mem_num, guint64 * total_written, guint64 * cur_pos)
+{
+  struct iovec *vecs;
+  GstMapInfo *map_infos;
+  GstFlowReturn flow_ret;
+  gsize size = 0;
+  guint i, j;
+
+  GST_LOG_OBJECT (sink, "%u buffers, %u memories", num_buffers, total_mem_num);
+
+  vecs = g_newa (struct iovec, total_mem_num);
+  map_infos = g_newa (GstMapInfo, total_mem_num);
+
+  /* populate output vectors */
+  for (i = 0, j = 0; i < num_buffers; ++i) {
+    size += fill_vectors (&vecs[j], &map_infos[j], mem_nums[i], buffers[i]);
+    j += mem_nums[i];
+  }
+
+  /* now write it all out! */
+  {
+    gssize ret, left;
+    guint n_vecs = total_mem_num;
+
+    left = size;
+    do {
+#ifndef HAVE_WIN32
+      if (fdset != NULL) {
+        do {
+          GST_DEBUG_OBJECT (sink, "going into select, have %" G_GSSIZE_FORMAT
+              " bytes to write", left);
+          ret = gst_poll_wait (fdset, GST_CLOCK_TIME_NONE);
+        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+
+        if (ret == -1) {
+          if (errno == EBUSY)
+            goto stopped;
+          else
+            goto select_error;
+        }
+      }
+#endif
+
+      ret = gst_writev (fd, vecs, n_vecs, left);
+
+      if (ret > 0) {
+        if (total_written)
+          *total_written += ret;
+        if (cur_pos)
+          *cur_pos += ret;
+      }
+
+      if (ret == left)
+        break;
+
+      if (ret < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
+        /* do nothing, try again */
+      } else if (ret < 0) {
+        goto write_error;
+      } else if (ret < left) {
+        /* skip vectors that have been written in full */
+        while (ret >= vecs[0].iov_len) {
+          ret -= vecs[0].iov_len;
+          left -= vecs[0].iov_len;
+          ++vecs;
+          --n_vecs;
+        }
+        g_assert (n_vecs > 0);
+        /* skip partially written vector data */
+        if (ret > 0) {
+          vecs[0].iov_len -= ret;
+          vecs[0].iov_base = ((guint8 *) vecs[0].iov_base) + ret;
+          left -= ret;
+        }
+      }
+#ifdef HAVE_WIN32
+      /* do short sleep on windows where we don't use gst_poll(),
+       * to avoid excessive busy looping */
+      if (fdset != NULL)
+        g_usleep (1000);
+#endif
+
+    }
+    while (left > 0);
+  }
+
+  flow_ret = GST_FLOW_OK;
+
+out:
+
+  for (i = 0; i < total_mem_num; ++i)
+    gst_memory_unmap (map_infos[i].memory, &map_infos[i]);
+
+  return flow_ret;
+
+/* ERRORS */
+#ifndef HAVE_WIN32
+select_error:
+  {
+    GST_ELEMENT_ERROR (sink, RESOURCE, READ, (NULL),
+        ("select on file descriptor: %s", g_strerror (errno)));
+    GST_DEBUG_OBJECT (sink, "Error during select: %s", g_strerror (errno));
+    flow_ret = GST_FLOW_ERROR;
+    goto out;
+  }
+stopped:
+  {
+    GST_DEBUG_OBJECT (sink, "Select stopped");
+    flow_ret = GST_FLOW_FLUSHING;
+    goto out;
+  }
+#endif
+write_error:
+  {
+    switch (errno) {
+      case ENOSPC:
+        GST_ELEMENT_ERROR (sink, RESOURCE, NO_SPACE_LEFT, (NULL), (NULL));
+        break;
+      default:{
+        GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL),
+            ("Error while writing to file descriptor %d: %s",
+                fd, g_strerror (errno)));
+      }
+    }
+    flow_ret = GST_FLOW_ERROR;
+    goto out;
+  }
+}
diff --git a/plugins/elements/gstelements_private.h b/plugins/elements/gstelements_private.h
index 9ccae1b..469b3b8 100644
--- a/plugins/elements/gstelements_private.h
+++ b/plugins/elements/gstelements_private.h
@@ -30,6 +30,12 @@
 G_GNUC_INTERNAL
 char *    gst_buffer_get_flags_string                   (GstBuffer *buffer);
 
+G_GNUC_INTERNAL
+GstFlowReturn  gst_writev_buffers (GstObject * sink, gint fd, GstPoll * fdset,
+                                   GstBuffer ** buffers, guint num_buffers,
+                                   guint8 * mem_nums, guint total_mem_num,
+                                   guint64 * total_written, guint64 * cur_pos);
+
 G_END_DECLS
 
 #endif /* __GST_ELEMENTS_PRIVATE_H__ */
diff --git a/plugins/elements/gstfakesink.c b/plugins/elements/gstfakesink.c
index dde0fce..9eb74c6 100644
--- a/plugins/elements/gstfakesink.c
+++ b/plugins/elements/gstfakesink.c
@@ -168,10 +168,12 @@
   g_object_class_install_property (gobject_class, PROP_SILENT,
       g_param_spec_boolean ("silent", "Silent",
           "Don't produce last_message events", DEFAULT_SILENT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_DUMP,
       g_param_spec_boolean ("dump", "Dump", "Dump buffer contents to stdout",
-          DEFAULT_DUMP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_DUMP, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class,
       PROP_CAN_ACTIVATE_PUSH,
       g_param_spec_boolean ("can-activate-push", "Can activate push",
diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c
index 7b03cf5..62434bb 100644
--- a/plugins/elements/gstfakesrc.c
+++ b/plugins/elements/gstfakesrc.c
@@ -279,9 +279,10 @@
   g_object_class_install_property (gobject_class, PROP_SYNC,
       g_param_spec_boolean ("sync", "Sync", "Sync to the clock to the datarate",
           DEFAULT_SYNC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /*  FIXME 2.0: Remove unused pattern property. Not implemented */
   g_object_class_install_property (gobject_class, PROP_PATTERN,
-      g_param_spec_string ("pattern", "pattern", "pattern", DEFAULT_PATTERN,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+      g_param_spec_string ("pattern", "pattern", "Set the pattern (unused)",
+          DEFAULT_PATTERN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   pspec_last_message = g_param_spec_string ("last-message", "last-message",
       "The last status message", NULL,
       G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
@@ -555,7 +556,6 @@
       g_value_set_boolean (value, src->sync);
       break;
     case PROP_PATTERN:
-      g_value_set_string (value, src->pattern);
       break;
     case PROP_SILENT:
       g_value_set_boolean (value, src->silent);
diff --git a/plugins/elements/gstfakesrc.h b/plugins/elements/gstfakesrc.h
index e4acb9c..5190ee8 100644
--- a/plugins/elements/gstfakesrc.h
+++ b/plugins/elements/gstfakesrc.h
@@ -134,7 +134,6 @@
   guint		parentsize;
   guint		parentoffset;
   guint8	 pattern_byte;
-  gchar		*pattern;
   GList		*patternlist;
   gint		 datarate;
   gboolean	 sync;
diff --git a/plugins/elements/gstfdsink.c b/plugins/elements/gstfdsink.c
index d7b9e88..fb65ac6 100644
--- a/plugins/elements/gstfdsink.c
+++ b/plugins/elements/gstfdsink.c
@@ -58,6 +58,7 @@
 #include <string.h>
 
 #include "gstfdsink.h"
+#include "gstelements_private.h"
 
 #ifdef G_OS_WIN32
 #include <io.h>                 /* lseek, open, close, read */
@@ -107,6 +108,8 @@
 static gboolean gst_fd_sink_query (GstBaseSink * bsink, GstQuery * query);
 static GstFlowReturn gst_fd_sink_render (GstBaseSink * sink,
     GstBuffer * buffer);
+static GstFlowReturn gst_fd_sink_render_list (GstBaseSink * bsink,
+    GstBufferList * buffer_list);
 static gboolean gst_fd_sink_start (GstBaseSink * basesink);
 static gboolean gst_fd_sink_stop (GstBaseSink * basesink);
 static gboolean gst_fd_sink_unlock (GstBaseSink * basesink);
@@ -138,6 +141,7 @@
       gst_static_pad_template_get (&sinktemplate));
 
   gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_fd_sink_render);
+  gstbasesink_class->render_list = GST_DEBUG_FUNCPTR (gst_fd_sink_render_list);
   gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_fd_sink_start);
   gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_fd_sink_stop);
   gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_fd_sink_unlock);
@@ -228,107 +232,69 @@
 }
 
 static GstFlowReturn
-gst_fd_sink_render (GstBaseSink * sink, GstBuffer * buffer)
+gst_fd_sink_render_buffers (GstFdSink * sink, GstBuffer ** buffers,
+    guint num_buffers, guint8 * mem_nums, guint total_mems)
 {
-  GstFdSink *fdsink;
-  GstMapInfo info;
-  guint8 *ptr;
-  gsize left;
-  gint written;
+  return gst_writev_buffers (GST_OBJECT_CAST (sink), sink->fd, sink->fdset,
+      buffers, num_buffers, mem_nums, total_mems, &sink->bytes_written,
+      &sink->current_pos);
+}
 
-#ifndef HAVE_WIN32
-  gint retval;
-#endif
+static GstFlowReturn
+gst_fd_sink_render_list (GstBaseSink * bsink, GstBufferList * buffer_list)
+{
+  GstFlowReturn flow;
+  GstBuffer **buffers;
+  GstFdSink *sink;
+  guint8 *mem_nums;
+  guint total_mems;
+  guint i, num_buffers;
 
-  fdsink = GST_FD_SINK (sink);
+  sink = GST_FD_SINK_CAST (bsink);
 
-  g_return_val_if_fail (fdsink->fd >= 0, GST_FLOW_ERROR);
+  num_buffers = gst_buffer_list_length (buffer_list);
+  if (num_buffers == 0)
+    goto no_data;
 
-  gst_buffer_map (buffer, &info, GST_MAP_READ);
-
-  ptr = info.data;
-  left = info.size;
-
-again:
-#ifndef HAVE_WIN32
-  do {
-    GST_DEBUG_OBJECT (fdsink, "going into select, have %" G_GSIZE_FORMAT
-        " bytes to write", info.size);
-    retval = gst_poll_wait (fdsink->fdset, GST_CLOCK_TIME_NONE);
-  } while (retval == -1 && (errno == EINTR || errno == EAGAIN));
-
-  if (retval == -1) {
-    if (errno == EBUSY)
-      goto stopped;
-    else
-      goto select_error;
-  }
-#endif
-
-  GST_DEBUG_OBJECT (fdsink, "writing %" G_GSIZE_FORMAT " bytes to"
-      " file descriptor %d", info.size, fdsink->fd);
-
-  written = write (fdsink->fd, ptr, left);
-
-  /* check for errors */
-  if (G_UNLIKELY (written < 0)) {
-    /* try to write again on non-fatal errors */
-    if (errno == EAGAIN || errno == EINTR)
-      goto again;
-
-    /* else go to our error handler */
-    goto write_error;
+  /* extract buffers from list and count memories */
+  buffers = g_newa (GstBuffer *, num_buffers);
+  mem_nums = g_newa (guint8, num_buffers);
+  for (i = 0, total_mems = 0; i < num_buffers; ++i) {
+    buffers[i] = gst_buffer_list_get (buffer_list, i);
+    mem_nums[i] = gst_buffer_n_memory (buffers[i]);
+    total_mems += mem_nums[i];
   }
 
-  /* all is fine when we get here */
-  left -= written;
-  ptr += written;
-  fdsink->bytes_written += written;
-  fdsink->current_pos += written;
+  flow =
+      gst_fd_sink_render_buffers (sink, buffers, num_buffers, mem_nums,
+      total_mems);
 
-  GST_DEBUG_OBJECT (fdsink, "wrote %d bytes, %" G_GSIZE_FORMAT " left", written,
-      left);
+  return flow;
 
-  /* short write, select and try to write the remainder */
-  if (G_UNLIKELY (left > 0))
-    goto again;
-
-  gst_buffer_unmap (buffer, &info);
-
-  return GST_FLOW_OK;
-
-#ifndef HAVE_WIN32
-select_error:
+no_data:
   {
-    GST_ELEMENT_ERROR (fdsink, RESOURCE, READ, (NULL),
-        ("select on file descriptor: %s.", g_strerror (errno)));
-    GST_DEBUG_OBJECT (fdsink, "Error during select");
-    gst_buffer_unmap (buffer, &info);
-    return GST_FLOW_ERROR;
+    GST_LOG_OBJECT (sink, "empty buffer list");
+    return GST_FLOW_OK;
   }
-stopped:
-  {
-    GST_DEBUG_OBJECT (fdsink, "Select stopped");
-    gst_buffer_unmap (buffer, &info);
-    return GST_FLOW_FLUSHING;
-  }
-#endif
+}
 
-write_error:
-  {
-    switch (errno) {
-      case ENOSPC:
-        GST_ELEMENT_ERROR (fdsink, RESOURCE, NO_SPACE_LEFT, (NULL), (NULL));
-        break;
-      default:{
-        GST_ELEMENT_ERROR (fdsink, RESOURCE, WRITE, (NULL),
-            ("Error while writing to file descriptor %d: %s",
-                fdsink->fd, g_strerror (errno)));
-      }
-    }
-    gst_buffer_unmap (buffer, &info);
-    return GST_FLOW_ERROR;
-  }
+static GstFlowReturn
+gst_fd_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
+{
+  GstFlowReturn flow;
+  GstFdSink *sink;
+  guint8 n_mem;
+
+  sink = GST_FD_SINK_CAST (bsink);
+
+  n_mem = gst_buffer_n_memory (buffer);
+
+  if (n_mem > 0)
+    flow = gst_fd_sink_render_buffers (sink, &buffer, 1, &n_mem, n_mem);
+  else
+    flow = GST_FLOW_OK;
+
+  return flow;
 }
 
 static gboolean
diff --git a/plugins/elements/gstfdsink.h b/plugins/elements/gstfdsink.h
index 3d7ee31..66a2340 100644
--- a/plugins/elements/gstfdsink.h
+++ b/plugins/elements/gstfdsink.h
@@ -40,6 +40,7 @@
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FD_SINK))
 #define GST_IS_FD_SINK_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FD_SINK))
+#define GST_FD_SINK_CAST(obj) ((GstFdSink *)(obj))
 
 typedef struct _GstFdSink GstFdSink;
 typedef struct _GstFdSinkClass GstFdSinkClass;
diff --git a/plugins/elements/gstfdsrc.c b/plugins/elements/gstfdsrc.c
index 82b8344..8058328 100644
--- a/plugins/elements/gstfdsrc.c
+++ b/plugins/elements/gstfdsrc.c
@@ -645,12 +645,14 @@
   }
 
   if ((q = g_strstr_len (uri, -1, "?"))) {
-    gchar *sp;
+    gchar *sp, *end = NULL;
 
     GST_INFO_OBJECT (src, "found ?");
 
     if ((sp = g_strstr_len (q, -1, "size="))) {
-      if (sscanf (sp, "size=%" G_GUINT64_FORMAT, &size) != 1) {
+      sp += strlen ("size=");
+      size = g_ascii_strtoull (sp, &end, 10);
+      if ((size == 0 && errno == EINVAL) || size == G_MAXUINT64 || end == sp) {
         GST_INFO_OBJECT (src, "parsing size failed");
         size = -1;
       } else {
diff --git a/plugins/elements/gstfilesink.c b/plugins/elements/gstfilesink.c
index 470ad5e..c13cac7 100644
--- a/plugins/elements/gstfilesink.c
+++ b/plugins/elements/gstfilesink.c
@@ -68,6 +68,8 @@
 #include <unistd.h>
 #endif
 
+#include "gstelements_private.h"
+
 static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
@@ -164,6 +166,8 @@
 static gboolean gst_file_sink_event (GstBaseSink * sink, GstEvent * event);
 static GstFlowReturn gst_file_sink_render (GstBaseSink * sink,
     GstBuffer * buffer);
+static GstFlowReturn gst_file_sink_render_list (GstBaseSink * sink,
+    GstBufferList * list);
 
 static gboolean gst_file_sink_do_seek (GstFileSink * filesink,
     guint64 new_offset);
@@ -231,6 +235,8 @@
   gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_file_sink_stop);
   gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_file_sink_query);
   gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_file_sink_render);
+  gstbasesink_class->render_list =
+      GST_DEBUG_FUNCPTR (gst_file_sink_render_list);
   gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_file_sink_event);
 
   if (sizeof (off_t) < 8) {
@@ -647,45 +653,72 @@
 }
 
 static GstFlowReturn
+gst_file_sink_render_buffers (GstFileSink * sink, GstBuffer ** buffers,
+    guint num_buffers, guint8 * mem_nums, guint total_mems)
+{
+  GST_DEBUG_OBJECT (sink,
+      "writing %u buffers (%u memories) at position %" G_GUINT64_FORMAT,
+      num_buffers, total_mems, sink->current_pos);
+
+  return gst_writev_buffers (GST_OBJECT_CAST (sink), fileno (sink->file), NULL,
+      buffers, num_buffers, mem_nums, total_mems, NULL, &sink->current_pos);
+}
+
+static GstFlowReturn
+gst_file_sink_render_list (GstBaseSink * bsink, GstBufferList * buffer_list)
+{
+  GstFlowReturn flow;
+  GstBuffer **buffers;
+  GstFileSink *sink;
+  guint8 *mem_nums;
+  guint total_mems;
+  guint i, num_buffers;
+
+  sink = GST_FILE_SINK_CAST (bsink);
+
+  num_buffers = gst_buffer_list_length (buffer_list);
+  if (num_buffers == 0)
+    goto no_data;
+
+  /* extract buffers from list and count memories */
+  buffers = g_newa (GstBuffer *, num_buffers);
+  mem_nums = g_newa (guint8, num_buffers);
+  for (i = 0, total_mems = 0; i < num_buffers; ++i) {
+    buffers[i] = gst_buffer_list_get (buffer_list, i);
+    mem_nums[i] = gst_buffer_n_memory (buffers[i]);
+    total_mems += mem_nums[i];
+  }
+
+  flow =
+      gst_file_sink_render_buffers (sink, buffers, num_buffers, mem_nums,
+      total_mems);
+
+  return flow;
+
+no_data:
+  {
+    GST_LOG_OBJECT (sink, "empty buffer list");
+    return GST_FLOW_OK;
+  }
+}
+
+static GstFlowReturn
 gst_file_sink_render (GstBaseSink * sink, GstBuffer * buffer)
 {
   GstFileSink *filesink;
-  GstMapInfo info;
+  GstFlowReturn flow;
+  guint8 n_mem;
 
-  filesink = GST_FILE_SINK (sink);
+  filesink = GST_FILE_SINK_CAST (sink);
 
-  gst_buffer_map (buffer, &info, GST_MAP_READ);
+  n_mem = gst_buffer_n_memory (buffer);
 
-  GST_DEBUG_OBJECT (filesink,
-      "writing %" G_GSIZE_FORMAT " bytes at %" G_GUINT64_FORMAT,
-      info.size, filesink->current_pos);
+  if (n_mem > 0)
+    flow = gst_file_sink_render_buffers (filesink, &buffer, 1, &n_mem, n_mem);
+  else
+    flow = GST_FLOW_OK;
 
-  if (info.size > 0 && info.data != NULL) {
-    if (fwrite (info.data, info.size, 1, filesink->file) != 1)
-      goto handle_error;
-
-    filesink->current_pos += info.size;
-  }
-  gst_buffer_unmap (buffer, &info);
-
-  return GST_FLOW_OK;
-
-handle_error:
-  {
-    switch (errno) {
-      case ENOSPC:{
-        GST_ELEMENT_ERROR (filesink, RESOURCE, NO_SPACE_LEFT, (NULL), (NULL));
-        break;
-      }
-      default:{
-        GST_ELEMENT_ERROR (filesink, RESOURCE, WRITE,
-            (_("Error while writing to file \"%s\"."), filesink->filename),
-            ("%s", g_strerror (errno)));
-      }
-    }
-    gst_buffer_unmap (buffer, &info);
-    return GST_FLOW_ERROR;
-  }
+  return flow;
 }
 
 static gboolean
diff --git a/plugins/elements/gstfilesink.h b/plugins/elements/gstfilesink.h
index 72a9a47..33517ab 100644
--- a/plugins/elements/gstfilesink.h
+++ b/plugins/elements/gstfilesink.h
@@ -41,6 +41,7 @@
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FILE_SINK))
 #define GST_IS_FILE_SINK_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FILE_SINK))
+#define GST_FILE_SINK_CAST(obj) ((GstFileSink *)(obj))
 
 typedef struct _GstFileSink GstFileSink;
 typedef struct _GstFileSinkClass GstFileSinkClass;
diff --git a/plugins/elements/gstfilesrc.c b/plugins/elements/gstfilesrc.c
index 164e3a9..bfc67e3 100644
--- a/plugins/elements/gstfilesrc.c
+++ b/plugins/elements/gstfilesrc.c
@@ -75,7 +75,6 @@
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS_ANY);
 
-/* FIXME we should be using glib for this */
 #ifndef S_ISREG
 #define S_ISREG(mode) ((mode)&_S_IFREG)
 #endif
@@ -254,7 +253,7 @@
     GST_INFO ("uri      : %s", src->uri);
   }
   g_object_notify (G_OBJECT (src), "location");
-  /* FIXME 0.11: notify "uri" property once there is one */
+  /* FIXME 2.0: notify "uri" property once there is one */
 
   return TRUE;
 
diff --git a/plugins/elements/gstfunnel.c b/plugins/elements/gstfunnel.c
index 19de206..6c6af2b 100644
--- a/plugins/elements/gstfunnel.c
+++ b/plugins/elements/gstfunnel.c
@@ -210,7 +210,7 @@
   for (item = element->sinkpads; item != NULL; item = g_list_next (item)) {
     GstFunnelPad *sinkpad = GST_FUNNEL_PAD_CAST (item->data);
 
-    if (sinkpad->got_eos == FALSE) {
+    if (!sinkpad->got_eos) {
       return FALSE;
     }
   }
@@ -317,6 +317,15 @@
     GST_OBJECT_LOCK (funnel);
     fpad->got_eos = FALSE;
     GST_OBJECT_UNLOCK (funnel);
+  } else if (GST_EVENT_TYPE (event) == GST_EVENT_GAP) {
+    /* If no data is coming and we receive GAP event, need to forward sticky events. */
+    unlock = TRUE;
+    GST_PAD_STREAM_LOCK (funnel->srcpad);
+    GST_OBJECT_LOCK (funnel);
+    gst_object_replace ((GstObject **) & funnel->last_sinkpad,
+        GST_OBJECT (pad));
+    GST_OBJECT_UNLOCK (funnel);
+    gst_pad_sticky_events_foreach (pad, forward_events, funnel->srcpad);
   }
 
   if (forward)
diff --git a/plugins/elements/gstidentity.c b/plugins/elements/gstidentity.c
index dbc9494..8f564cf 100644
--- a/plugins/elements/gstidentity.c
+++ b/plugins/elements/gstidentity.c
@@ -299,7 +299,7 @@
   }
 
   if (identity->single_segment && (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT)) {
-    if (trans->have_segment == FALSE) {
+    if (!trans->have_segment) {
       GstEvent *news;
       GstSegment segment;
 
@@ -380,6 +380,7 @@
         /*
          * "imperfect-timestamp" bus message:
          * @identity:        the identity instance
+         * @delta:           the GST_CLOCK_DIFF to the prev timestamp
          * @prev-timestamp:  the previous buffer timestamp
          * @prev-duration:   the previous buffer duration
          * @prev-offset:     the previous buffer offset
@@ -396,6 +397,7 @@
         gst_element_post_message (GST_ELEMENT (identity),
             gst_message_new_element (GST_OBJECT (identity),
                 gst_structure_new ("imperfect-timestamp",
+                    "delta", G_TYPE_INT64, dt,
                     "prev-timestamp", G_TYPE_UINT64,
                     identity->prev_timestamp, "prev-duration", G_TYPE_UINT64,
                     identity->prev_duration, "prev-offset", G_TYPE_UINT64,
@@ -501,6 +503,7 @@
   GstFlowReturn ret = GST_FLOW_OK;
   GstIdentity *identity = GST_IDENTITY (trans);
   GstClockTime runtimestamp = G_GINT64_CONSTANT (0);
+  GstClockTime ts, duration;
   gsize size;
 
   size = gst_buffer_get_size (buf);
@@ -608,6 +611,14 @@
       gst_identity_update_last_message_for_buffer (identity, "dropping", buf,
           size);
     }
+
+    ts = GST_BUFFER_TIMESTAMP (buf);
+    if (GST_CLOCK_TIME_IS_VALID (ts)) {
+      duration = GST_BUFFER_DURATION (buf);
+      gst_pad_push_event (GST_BASE_TRANSFORM_SRC_PAD (identity),
+          gst_event_new_gap (ts, duration));
+    }
+
     /* return DROPPED to basetransform. */
     return GST_BASE_TRANSFORM_FLOW_DROPPED;
   }
diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c
index fb50802..e665fcd 100644
--- a/plugins/elements/gstinputselector.c
+++ b/plugins/elements/gstinputselector.c
@@ -333,10 +333,8 @@
 
   GST_OBJECT_LOCK (pad);
   if (pad->active) {
-    GstFormat format = pad->segment.format;
-
     ret =
-        gst_segment_to_running_time (&pad->segment, format,
+        gst_segment_to_running_time (&pad->segment, pad->segment.format,
         pad->segment.position);
   }
   GST_OBJECT_UNLOCK (pad);
@@ -403,15 +401,12 @@
 static void
 gst_selector_pad_free_cached_buffers (GstSelectorPad * selpad)
 {
-  GstSelectorPadCachedBuffer *cached_buffer;
-
   if (!selpad->cached_buffers)
     return;
 
   GST_DEBUG_OBJECT (selpad, "Freeing cached buffers");
-  while ((cached_buffer = g_queue_pop_head (selpad->cached_buffers)))
-    gst_selector_pad_free_cached_buffer (cached_buffer);
-  g_queue_free (selpad->cached_buffers);
+  g_queue_free_full (selpad->cached_buffers,
+      (GDestroyNotify) gst_selector_pad_free_cached_buffer);
   selpad->cached_buffers = NULL;
 }
 
@@ -439,6 +434,19 @@
   return it;
 }
 
+/* must be called with the SELECTOR_LOCK, will block while the pad is blocked 
+ * or return TRUE when flushing */
+static gboolean
+gst_input_selector_wait (GstInputSelector * self, GstSelectorPad * pad)
+{
+  while (!self->eos && self->blocked && !self->flushing && !pad->flushing) {
+    /* we can be unlocked here when we are shutting down (flushing) or when we
+     * get unblocked */
+    GST_INPUT_SELECTOR_WAIT (self);
+  }
+  return self->flushing;
+}
+
 static gboolean
 gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
@@ -458,6 +466,7 @@
   prev_active_sinkpad =
       sel->active_sinkpad ? gst_object_ref (sel->active_sinkpad) : NULL;
   active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+  gst_object_ref (active_sinkpad);
   GST_INPUT_SELECTOR_UNLOCK (sel);
 
   if (prev_active_sinkpad != active_sinkpad) {
@@ -468,6 +477,7 @@
   }
   if (prev_active_sinkpad)
     gst_object_unref (prev_active_sinkpad);
+  gst_object_unref (active_sinkpad);
 
   GST_INPUT_SELECTOR_LOCK (sel);
   active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
@@ -486,6 +496,7 @@
     case GST_EVENT_FLUSH_START:
       /* Unblock the pad if it's waiting */
       selpad->flushing = TRUE;
+      sel->eos = FALSE;
       GST_INPUT_SELECTOR_BROADCAST (sel);
       break;
     case GST_EVENT_FLUSH_STOP:
@@ -523,21 +534,17 @@
     case GST_EVENT_EOS:
       selpad->eos = TRUE;
 
-      if (forward) {
-        selpad->eos_sent = TRUE;
+      if (!forward) {
+        /* blocked until active the sind pad or flush */
+        gst_input_selector_wait (sel, selpad);
+        forward = TRUE;
       } else {
-        GstSelectorPad *active_selpad;
-
-        /* If the active sinkpad is in EOS state but EOS
-         * was not sent downstream this means that the pad
-         * got EOS before it was set as active pad and that
-         * the previously active pad got EOS after it was
-         * active
-         */
-        active_selpad = GST_SELECTOR_PAD (active_sinkpad);
-        forward = (active_selpad->eos && !active_selpad->eos_sent);
-        active_selpad->eos_sent = TRUE;
+        /* Notify all waiting pads about going EOS now */
+        sel->eos = TRUE;
+        GST_INPUT_SELECTOR_BROADCAST (sel);
       }
+
+      selpad->eos_sent = TRUE;
       GST_DEBUG_OBJECT (pad, "received EOS");
       break;
     case GST_EVENT_GAP:{
@@ -624,17 +631,23 @@
   return res;
 }
 
-/* must be called with the SELECTOR_LOCK, will block while the pad is blocked 
- * or return TRUE when flushing */
-static gboolean
-gst_input_selector_wait (GstInputSelector * self, GstSelectorPad * pad)
+static GstClockTime
+gst_input_selector_get_clipped_running_time (GstSegment * seg, GstBuffer * buf)
 {
-  while (self->blocked && !self->flushing && !pad->flushing) {
-    /* we can be unlocked here when we are shutting down (flushing) or when we
-     * get unblocked */
-    GST_INPUT_SELECTOR_WAIT (self);
+  GstClockTime running_time;
+
+  running_time = GST_BUFFER_PTS (buf);
+  /* If possible try to get the running time at the end of the buffer */
+  if (GST_BUFFER_DURATION_IS_VALID (buf))
+    running_time += GST_BUFFER_DURATION (buf);
+  /* Only use the segment to convert to running time if the segment is
+   * in TIME format, otherwise do our best to try to sync */
+  if (GST_CLOCK_TIME_IS_VALID (seg->stop)) {
+    if (running_time > seg->stop) {
+      running_time = seg->stop;
+    }
   }
-  return self->flushing;
+  return gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time);
 }
 
 /* must be called without the SELECTOR_LOCK, will wait until the running time
@@ -648,7 +661,7 @@
   GST_DEBUG_OBJECT (selpad, "entering wait for buffer %p", buf);
 
   /* If we have no valid timestamp we can't sync this buffer */
-  if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+  if (!GST_BUFFER_PTS_IS_VALID (buf)) {
     GST_DEBUG_OBJECT (selpad, "leaving wait for buffer with "
         "invalid timestamp");
     return FALSE;
@@ -683,19 +696,7 @@
       return FALSE;
     }
 
-    running_time = GST_BUFFER_TIMESTAMP (buf);
-    /* If possible try to get the running time at the end of the buffer */
-    if (GST_BUFFER_DURATION_IS_VALID (buf))
-      running_time += GST_BUFFER_DURATION (buf);
-    /* Only use the segment to convert to running time if the segment is
-     * in TIME format, otherwise do our best to try to sync */
-    if (GST_CLOCK_TIME_IS_VALID (seg->stop)) {
-      if (running_time > seg->stop) {
-        running_time = seg->stop;
-      }
-    }
-    running_time =
-        gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time);
+    running_time = gst_input_selector_get_clipped_running_time (seg, buf);
     /* If this is outside the segment don't sync */
     if (running_time == -1) {
       GST_DEBUG_OBJECT (selpad,
@@ -740,8 +741,9 @@
             GST_FORMAT_TIME, active_seg->position);
     }
 
-    if (selpad != active_selpad && !sel->flushing && !selpad->flushing &&
-        (sel->blocked || cur_running_time == -1
+    if (selpad != active_selpad && !sel->eos && !sel->flushing
+        && !selpad->flushing && (sel->blocked
+            || cur_running_time == GST_CLOCK_TIME_NONE
             || running_time >= cur_running_time)) {
       if (!sel->blocked) {
         GST_DEBUG_OBJECT (selpad,
@@ -799,11 +801,13 @@
 {
   GList *walk;
 
-  for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) {
+  if (gst_debug_category_get_threshold (input_selector_debug) < GST_LEVEL_DEBUG)
+    return;
+
+  for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = walk->next) {
     GstSelectorPad *selpad;
     GString *timestamps;
-    gchar *str;
-    int i;
+    GList *l;
 
     selpad = GST_SELECTOR_PAD_CAST (walk->data);
     if (!selpad->cached_buffers) {
@@ -812,16 +816,14 @@
     }
 
     timestamps = g_string_new ("Cached buffers timestamps:");
-    for (i = 0; i < selpad->cached_buffers->length; ++i) {
-      GstSelectorPadCachedBuffer *cached_buffer;
+    for (l = selpad->cached_buffers->head; l != NULL; l = l->next) {
+      GstSelectorPadCachedBuffer *cached_buffer = l->data;
 
-      cached_buffer = g_queue_peek_nth (selpad->cached_buffers, i);
       g_string_append_printf (timestamps, " %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (cached_buffer->buffer)));
+          GST_TIME_ARGS (GST_BUFFER_PTS (cached_buffer->buffer)));
     }
-    str = g_string_free (timestamps, FALSE);
-    GST_DEBUG_OBJECT (selpad, "%s", str);
-    g_free (str);
+    GST_DEBUG_OBJECT (selpad, "%s", timestamps->str);
+    g_string_free (timestamps, TRUE);
   }
 }
 #endif
@@ -891,7 +893,7 @@
       GSList *l;
 
       /* If we have no valid timestamp we can't sync this buffer */
-      if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) {
+      if (!GST_BUFFER_PTS_IS_VALID (buffer)) {
         maybe_remove = g_slist_append (maybe_remove, cached_buffer);
         queue_position = g_slist_length (maybe_remove);
         continue;
@@ -900,20 +902,7 @@
       /* the buffer is still valid if its duration is valid and the
        * timestamp + duration is >= time, or if its duration is invalid
        * and the timestamp is >= time */
-      running_time = GST_BUFFER_TIMESTAMP (buffer);
-      /* If possible try to get the running time at the end of the buffer */
-      if (GST_BUFFER_DURATION_IS_VALID (buffer))
-        running_time += GST_BUFFER_DURATION (buffer);
-      /* Only use the segment to convert to running time if the segment is
-       * in TIME format, otherwise do our best to try to sync */
-      if (GST_CLOCK_TIME_IS_VALID (seg->stop)) {
-        if (running_time > seg->stop) {
-          running_time = seg->stop;
-        }
-      }
-      running_time =
-          gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time);
-
+      running_time = gst_input_selector_get_clipped_running_time (seg, buffer);
       GST_DEBUG_OBJECT (selpad,
           "checking if buffer %p running time=%" GST_TIME_FORMAT
           " >= stream time=%" GST_TIME_FORMAT, buffer,
@@ -961,16 +950,20 @@
   GstPad *active_sinkpad;
   GstPad *prev_active_sinkpad = NULL;
   GstSelectorPad *selpad;
-  GstClockTime start_time;
 
   sel = GST_INPUT_SELECTOR (parent);
   selpad = GST_SELECTOR_PAD_CAST (pad);
 
   GST_DEBUG_OBJECT (selpad,
       "entering chain for buf %p with timestamp %" GST_TIME_FORMAT, buf,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+      GST_TIME_ARGS (GST_BUFFER_PTS (buf)));
 
   GST_INPUT_SELECTOR_LOCK (sel);
+  if (sel->eos) {
+    GST_INPUT_SELECTOR_UNLOCK (sel);
+    goto eos;
+  }
+
   /* wait or check for flushing */
   if (gst_input_selector_wait (sel, selpad)) {
     GST_INPUT_SELECTOR_UNLOCK (sel);
@@ -998,7 +991,7 @@
         saved_segment = selpad->segment;
 
         selpad->sending_cached_buffers = TRUE;
-        while (!sel->flushing && !selpad->flushing &&
+        while (!sel->eos && !sel->flushing && !selpad->flushing &&
             (cached_buffer = g_queue_pop_head (selpad->cached_buffers))) {
           GST_DEBUG_OBJECT (pad, "Cached buffers found, "
               "invoking chain for cached buffer %p", cached_buffer->buffer);
@@ -1037,9 +1030,15 @@
     active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
   }
 
+  if (sel->eos) {
+    GST_INPUT_SELECTOR_UNLOCK (sel);
+    goto eos;
+  }
+
   /* update the segment on the srcpad */
-  start_time = GST_BUFFER_TIMESTAMP (buf);
-  if (GST_CLOCK_TIME_IS_VALID (start_time)) {
+  if (GST_BUFFER_PTS_IS_VALID (buf)) {
+    GstClockTime start_time = GST_BUFFER_PTS (buf);
+
     GST_LOG_OBJECT (pad, "received start time %" GST_TIME_FORMAT,
         GST_TIME_ARGS (start_time));
     if (GST_BUFFER_DURATION_IS_VALID (buf))
@@ -1076,9 +1075,10 @@
     selpad->events_pending = FALSE;
   }
 
-  if (prev_active_sinkpad)
+  if (prev_active_sinkpad) {
     gst_object_unref (prev_active_sinkpad);
-  prev_active_sinkpad = NULL;
+    prev_active_sinkpad = NULL;
+  }
 
   if (selpad->discont) {
     buf = gst_buffer_make_writable (buf);
@@ -1090,7 +1090,7 @@
 
   /* forward */
   GST_LOG_OBJECT (pad, "Forwarding buffer %p with timestamp %" GST_TIME_FORMAT,
-      buf, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+      buf, GST_TIME_ARGS (GST_BUFFER_PTS (buf)));
 
   /* Only make the buffer read-only when necessary */
   if (sel->sync_streams && sel->cache_buffers)
@@ -1151,6 +1151,13 @@
     res = GST_FLOW_FLUSHING;
     goto done;
   }
+eos:
+  {
+    GST_DEBUG_OBJECT (pad, "We are eos, discard buffer %p", buf);
+    gst_buffer_unref (buf);
+    res = GST_FLOW_EOS;
+    goto done;
+  }
 }
 
 static void gst_input_selector_dispose (GObject * object);
@@ -1170,8 +1177,6 @@
 
 static gboolean gst_input_selector_event (GstPad * pad, GstObject * parent,
     GstEvent * event);
-static gboolean gst_input_selector_query (GstPad * pad, GstObject * parent,
-    GstQuery * query);
 static gint64 gst_input_selector_block (GstInputSelector * self);
 
 #define _do_init \
@@ -1201,7 +1206,8 @@
   g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
       g_param_spec_object ("active-pad", "Active pad",
           "The currently active sink pad", GST_TYPE_PAD,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   /**
    * GstInputSelector:sync-streams
@@ -1294,8 +1300,6 @@
   sel->srcpad = gst_pad_new ("src", GST_PAD_SRC);
   gst_pad_set_iterate_internal_links_function (sel->srcpad,
       GST_DEBUG_FUNCPTR (gst_selector_pad_iterate_linked_pads));
-  gst_pad_set_query_function (sel->srcpad,
-      GST_DEBUG_FUNCPTR (gst_input_selector_query));
   gst_pad_set_event_function (sel->srcpad,
       GST_DEBUG_FUNCPTR (gst_input_selector_event));
   GST_OBJECT_FLAG_SET (sel->srcpad, GST_PAD_FLAG_PROXY_CAPS);
@@ -1309,6 +1313,7 @@
   g_mutex_init (&sel->lock);
   g_cond_init (&sel->cond);
   sel->blocked = FALSE;
+  sel->eos = FALSE;
 
   /* lets give a change for downstream to do something on
    * active-pad change before we start pushing new buffers */
@@ -1377,6 +1382,11 @@
   GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT,
       self->active_sinkpad);
 
+  if (old != new && new && new->eos && !new->eos_sent) {
+    self->eos = TRUE;
+    GST_INPUT_SELECTOR_BROADCAST (self);
+  }
+
   return TRUE;
 }
 
@@ -1553,79 +1563,6 @@
   return result;
 }
 
-/* query on the srcpad. We override this function because by default it will
- * only forward the query to one random sinkpad */
-static gboolean
-gst_input_selector_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
-  gboolean res = FALSE;
-  GstInputSelector *sel;
-
-  sel = GST_INPUT_SELECTOR (parent);
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_LATENCY:
-    {
-      GList *walk;
-      GstClockTime resmin, resmax;
-      gboolean reslive;
-
-      resmin = 0;
-      resmax = -1;
-      reslive = FALSE;
-
-      /* perform the query on all sinkpads and combine the results. We take the
-       * max of min and the min of max for the result latency. */
-      GST_INPUT_SELECTOR_LOCK (sel);
-      for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk;
-          walk = g_list_next (walk)) {
-        GstPad *sinkpad = GST_PAD_CAST (walk->data);
-
-        if (gst_pad_peer_query (sinkpad, query)) {
-          GstClockTime min, max;
-          gboolean live;
-
-          /* one query succeeded, we succeed too */
-          res = TRUE;
-
-          gst_query_parse_latency (query, &live, &min, &max);
-
-          GST_DEBUG_OBJECT (sinkpad,
-              "peer latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
-              ", live %d", GST_TIME_ARGS (min), GST_TIME_ARGS (max), live);
-
-          if (live) {
-            if (min > resmin)
-              resmin = min;
-            if (resmax == -1)
-              resmax = max;
-            else if (max < resmax)
-              resmax = max;
-            if (reslive == FALSE)
-              reslive = live;
-          }
-        }
-      }
-      GST_INPUT_SELECTOR_UNLOCK (sel);
-      if (res) {
-        gst_query_set_latency (query, reslive, resmin, resmax);
-
-        GST_DEBUG_OBJECT (sel,
-            "total latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
-            ", live %d", GST_TIME_ARGS (resmin), GST_TIME_ARGS (resmax),
-            reslive);
-      }
-
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return res;
-}
-
 /* check if the pad is the active sinkpad */
 static inline gboolean
 gst_input_selector_is_active_sinkpad (GstInputSelector * sel, GstPad * pad)
@@ -1650,7 +1587,7 @@
 
   selpad->active = TRUE;
   active_sinkpad = sel->active_sinkpad;
-  if (sel->active_sinkpad == NULL) {
+  if (active_sinkpad == NULL) {
     GValue item = G_VALUE_INIT;
     GstIterator *iter = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (sel));
     GstIteratorResult ires;
@@ -1687,7 +1624,7 @@
 
   GST_INPUT_SELECTOR_LOCK (sel);
 
-  GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount);
+  GST_LOG_OBJECT (sel, "Creating new pad sink_%u", sel->padcount);
   name = g_strdup_printf ("sink_%u", sel->padcount++);
   sinkpad = g_object_new (GST_TYPE_SELECTOR_PAD,
       "name", name, "direction", templ->direction, "template", templ, NULL);
@@ -1771,6 +1708,7 @@
   switch (transition) {
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       GST_INPUT_SELECTOR_LOCK (self);
+      self->eos = FALSE;
       self->blocked = FALSE;
       self->flushing = FALSE;
       GST_INPUT_SELECTOR_UNLOCK (self);
@@ -1779,6 +1717,7 @@
       /* first unlock before we call the parent state change function, which
        * tries to acquire the stream lock when going to ready. */
       GST_INPUT_SELECTOR_LOCK (self);
+      self->eos = TRUE;
       self->blocked = FALSE;
       self->flushing = TRUE;
       GST_INPUT_SELECTOR_BROADCAST (self);
diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h
index 96c680f..d3abad9 100644
--- a/plugins/elements/gstinputselector.h
+++ b/plugins/elements/gstinputselector.h
@@ -66,8 +66,8 @@
   GstPad *srcpad;
 
   GstPad *active_sinkpad;
-  guint n_pads;
-  guint padcount;
+  guint n_pads;           /* number of pads */
+  guint padcount;         /* sequence number for pads */
   gboolean sync_streams;
   GstInputSelectorSyncMode sync_mode;
   gboolean cache_buffers;
@@ -77,6 +77,7 @@
   GMutex lock;
   GCond cond;
   gboolean blocked;
+  gboolean eos;
   gboolean flushing;
 };
 
diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c
index ad9b30d..37fa6f0 100644
--- a/plugins/elements/gstmultiqueue.c
+++ b/plugins/elements/gstmultiqueue.c
@@ -350,16 +350,19 @@
       g_param_spec_uint ("max-size-bytes", "Max. size (kB)",
           "Max. amount of data in the queue (bytes, 0=disable)",
           0, G_MAXUINT, DEFAULT_MAX_SIZE_BYTES,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_SIZE_BUFFERS,
       g_param_spec_uint ("max-size-buffers", "Max. size (buffers)",
           "Max. number of buffers in the queue (0=disable)", 0, G_MAXUINT,
           DEFAULT_MAX_SIZE_BUFFERS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_SIZE_TIME,
       g_param_spec_uint64 ("max-size-time", "Max. size (ns)",
           "Max. amount of data in the queue (in ns, 0=disable)", 0, G_MAXUINT64,
-          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_EXTRA_SIZE_BYTES,
       g_param_spec_uint ("extra-size-bytes", "Extra Size (kB)",
@@ -389,7 +392,8 @@
   g_object_class_install_property (gobject_class, PROP_USE_BUFFERING,
       g_param_spec_boolean ("use-buffering", "Use buffering",
           "Emit GST_MESSAGE_BUFFERING based on low-/high-percent thresholds",
-          DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   /**
    * GstMultiQueue:low-percent
    * 
@@ -1205,7 +1209,7 @@
 
 static GstFlowReturn
 gst_single_queue_push_one (GstMultiQueue * mq, GstSingleQueue * sq,
-    GstMiniObject * object)
+    GstMiniObject * object, gboolean * allow_drop)
 {
   GstFlowReturn result = sq->srcresult;
 
@@ -1222,11 +1226,17 @@
     /* Applying the buffer may have made the queue non-full again, unblock it if needed */
     gst_data_queue_limits_changed (sq->queue);
 
-    GST_DEBUG_OBJECT (mq,
-        "SingleQueue %d : Pushing buffer %p with ts %" GST_TIME_FORMAT,
-        sq->id, buffer, GST_TIME_ARGS (timestamp));
-
-    result = gst_pad_push (sq->srcpad, buffer);
+    if (G_UNLIKELY (*allow_drop)) {
+      GST_DEBUG_OBJECT (mq,
+          "SingleQueue %d : Dropping EOS buffer %p with ts %" GST_TIME_FORMAT,
+          sq->id, buffer, GST_TIME_ARGS (timestamp));
+      gst_buffer_unref (buffer);
+    } else {
+      GST_DEBUG_OBJECT (mq,
+          "SingleQueue %d : Pushing buffer %p with ts %" GST_TIME_FORMAT,
+          sq->id, buffer, GST_TIME_ARGS (timestamp));
+      result = gst_pad_push (sq->srcpad, buffer);
+    }
   } else if (GST_IS_EVENT (object)) {
     GstEvent *event;
 
@@ -1235,11 +1245,17 @@
     switch (GST_EVENT_TYPE (event)) {
       case GST_EVENT_EOS:
         result = GST_FLOW_EOS;
+        if (G_UNLIKELY (*allow_drop))
+          *allow_drop = FALSE;
         break;
       case GST_EVENT_SEGMENT:
         apply_segment (mq, sq, event, &sq->src_segment);
         /* Applying the segment may have made the queue non-full again, unblock it if needed */
         gst_data_queue_limits_changed (sq->queue);
+        if (G_UNLIKELY (*allow_drop)) {
+          result = GST_FLOW_OK;
+          *allow_drop = FALSE;
+        }
         break;
       case GST_EVENT_GAP:
         apply_gap (mq, sq, event, &sq->src_segment);
@@ -1250,18 +1266,32 @@
         break;
     }
 
-    GST_DEBUG_OBJECT (mq,
-        "SingleQueue %d : Pushing event %p of type %s",
-        sq->id, event, GST_EVENT_TYPE_NAME (event));
+    if (G_UNLIKELY (*allow_drop)) {
+      GST_DEBUG_OBJECT (mq,
+          "SingleQueue %d : Dropping EOS event %p of type %s",
+          sq->id, event, GST_EVENT_TYPE_NAME (event));
+      gst_event_unref (event);
+    } else {
+      GST_DEBUG_OBJECT (mq,
+          "SingleQueue %d : Pushing event %p of type %s",
+          sq->id, event, GST_EVENT_TYPE_NAME (event));
 
-    gst_pad_push_event (sq->srcpad, event);
+      gst_pad_push_event (sq->srcpad, event);
+    }
   } else if (GST_IS_QUERY (object)) {
     GstQuery *query;
     gboolean res;
 
     query = GST_QUERY_CAST (object);
 
-    res = gst_pad_peer_query (sq->srcpad, query);
+    if (G_UNLIKELY (*allow_drop)) {
+      GST_DEBUG_OBJECT (mq,
+          "SingleQueue %d : Dropping EOS query %p", sq->id, query);
+      gst_query_unref (query);
+      res = FALSE;
+    } else {
+      res = gst_pad_peer_query (sq->srcpad, query);
+    }
 
     GST_MULTI_QUEUE_MUTEX_LOCK (mq);
     sq->last_query = res;
@@ -1350,10 +1380,12 @@
   GstClockTime next_time;
   gboolean is_buffer;
   gboolean do_update_buffering = FALSE;
+  gboolean dropping = FALSE;
 
   sq = (GstSingleQueue *) gst_pad_get_element_private (pad);
   mq = sq->mqueue;
 
+next:
   GST_DEBUG_OBJECT (mq, "SingleQueue %d : trying to pop an object", sq->id);
 
   if (sq->flushing)
@@ -1381,8 +1413,8 @@
 
   /* If we're not-linked, we do some extra work because we might need to
    * wait before pushing. If we're linked but there's a gap in the IDs,
-   * or it's the first loop, or we just passed the previous highid, 
-   * we might need to wake some sleeping pad up, so there's extra work 
+   * or it's the first loop, or we just passed the previous highid,
+   * we might need to wake some sleeping pad up, so there's extra work
    * there too */
   GST_MULTI_QUEUE_MUTEX_LOCK (mq);
   if (sq->srcresult == GST_FLOW_NOT_LINKED
@@ -1481,7 +1513,7 @@
   GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
 
   /* Try to push out the new object */
-  result = gst_single_queue_push_one (mq, sq, object);
+  result = gst_single_queue_push_one (mq, sq, object, &dropping);
   object = NULL;
 
   /* Check if we pushed something already and if this is
@@ -1521,6 +1553,25 @@
 
   if (is_buffer)
     sq->pushed = TRUE;
+
+  /* now hold on a bit;
+   * can not simply throw this result to upstream, because
+   * that might already be onto another segment, so we have to make
+   * sure we are relaying the correct info wrt proper segment */
+  if (result == GST_FLOW_EOS && !dropping &&
+      sq->srcresult != GST_FLOW_NOT_LINKED) {
+    GST_DEBUG_OBJECT (mq, "starting EOS drop on sq %d", sq->id);
+    dropping = TRUE;
+    /* pretend we have not seen EOS yet for upstream's sake */
+    result = sq->srcresult;
+  } else if (dropping && gst_data_queue_is_empty (sq->queue)) {
+    /* queue empty, so stop dropping
+     * we can commit the result we have now,
+     * which is either OK after a segment, or EOS */
+    GST_DEBUG_OBJECT (mq, "committed EOS drop on sq %d", sq->id);
+    dropping = FALSE;
+    result = GST_FLOW_EOS;
+  }
   sq->srcresult = result;
   sq->last_oldid = newid;
 
@@ -1530,6 +1581,9 @@
   GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
   gst_multi_queue_post_buffering (mq);
 
+  if (dropping)
+    goto next;
+
   if (result != GST_FLOW_OK && result != GST_FLOW_NOT_LINKED
       && result != GST_FLOW_EOS)
     goto out_flushing;
@@ -1803,6 +1857,11 @@
     case GST_EVENT_SEGMENT:
       apply_segment (mq, sq, sref, &sq->sink_segment);
       gst_event_unref (sref);
+      /* a new segment allows us to accept more buffers if we got EOS
+       * from downstream */
+      GST_MULTI_QUEUE_MUTEX_LOCK (mq);
+      sq->srcresult = GST_FLOW_OK;
+      GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
       break;
     case GST_EVENT_GAP:
       apply_gap (mq, sq, sref, &sq->sink_segment);
@@ -2102,7 +2161,6 @@
   GList *tmp;
   GstDataQueueSize size;
   gboolean filled = TRUE;
-  gboolean all_not_linked = TRUE;
   gboolean empty_found = FALSE;
 
   gst_data_queue_get_level (sq->queue, &size);
@@ -2121,7 +2179,7 @@
     goto done;
   }
 
-  /* Search for empty or unlinked queues */
+  /* Search for empty queues */
   for (tmp = mq->queues; tmp; tmp = g_list_next (tmp)) {
     GstSingleQueue *oq = (GstSingleQueue *) tmp->data;
 
@@ -2133,7 +2191,6 @@
       continue;
     }
 
-    all_not_linked = FALSE;
     GST_LOG_OBJECT (mq, "Checking Queue %d", oq->id);
     if (gst_data_queue_is_empty (oq->queue)) {
       GST_LOG_OBJECT (mq, "Queue %d is empty", oq->id);
@@ -2142,16 +2199,9 @@
     }
   }
 
-  if (!mq->queues || !mq->queues->next)
-    all_not_linked = FALSE;
-
   /* if hard limits are not reached then we allow one more buffer in the full
-   * queue, but only if any of the other singelqueues are empty or all are
-   * not linked */
-  if (all_not_linked || empty_found) {
-    if (all_not_linked) {
-      GST_LOG_OBJECT (mq, "All other queues are not linked");
-    }
+   * queue, but only if any of the other singelqueues are empty */
+  if (empty_found) {
     if (IS_FILLED (sq, visible, size.visible)) {
       sq->max_size.visible = size.visible + 1;
       GST_DEBUG_OBJECT (mq,
diff --git a/plugins/elements/gstoutputselector.c b/plugins/elements/gstoutputselector.c
index 61e49a6..8ad870c 100644
--- a/plugins/elements/gstoutputselector.c
+++ b/plugins/elements/gstoutputselector.c
@@ -52,7 +52,7 @@
 gst_output_selector_pad_negotiation_mode_get_type (void)
 {
   static GType pad_negotiation_mode_type = 0;
-  static GEnumValue pad_negotiation_modes[] = {
+  static const GEnumValue pad_negotiation_modes[] = {
     {GST_OUTPUT_SELECTOR_PAD_NEGOTIATION_MODE_NONE, "None", "none"},
     {GST_OUTPUT_SELECTOR_PAD_NEGOTIATION_MODE_ALL, "All", "all"},
     {GST_OUTPUT_SELECTOR_PAD_NEGOTIATION_MODE_ACTIVE, "Active", "active"},
@@ -119,7 +119,8 @@
   g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
       g_param_spec_object ("active-pad", "Active pad",
           "Currently active src pad", GST_TYPE_PAD,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_RESEND_LATEST,
       g_param_spec_boolean ("resend-latest", "Resend latest buffer",
           "Resend latest buffer after a switch to a new pad", FALSE,
diff --git a/plugins/elements/gstqueue.c b/plugins/elements/gstqueue.c
index f3e9297..02055cd 100644
--- a/plugins/elements/gstqueue.c
+++ b/plugins/elements/gstqueue.c
@@ -195,6 +195,8 @@
 
 static GstFlowReturn gst_queue_chain (GstPad * pad, GstObject * parent,
     GstBuffer * buffer);
+static GstFlowReturn gst_queue_chain_list (GstPad * pad, GstObject * parent,
+    GstBufferList * buffer_list);
 static GstFlowReturn gst_queue_push_one (GstQueue * queue);
 static void gst_queue_loop (GstPad * pad);
 
@@ -326,35 +328,46 @@
       g_param_spec_uint ("max-size-bytes", "Max. size (kB)",
           "Max. amount of data in the queue (bytes, 0=disable)",
           0, G_MAXUINT, DEFAULT_MAX_SIZE_BYTES,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_SIZE_BUFFERS,
       g_param_spec_uint ("max-size-buffers", "Max. size (buffers)",
           "Max. number of buffers in the queue (0=disable)", 0, G_MAXUINT,
           DEFAULT_MAX_SIZE_BUFFERS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_SIZE_TIME,
       g_param_spec_uint64 ("max-size-time", "Max. size (ns)",
           "Max. amount of data in the queue (in ns, 0=disable)", 0, G_MAXUINT64,
-          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_MAX_SIZE_TIME,
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_MIN_THRESHOLD_BYTES,
       g_param_spec_uint ("min-threshold-bytes", "Min. threshold (kB)",
           "Min. amount of data in the queue to allow reading (bytes, 0=disable)",
-          0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          0, G_MAXUINT, 0,
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MIN_THRESHOLD_BUFFERS,
       g_param_spec_uint ("min-threshold-buffers", "Min. threshold (buffers)",
-          "Min. number of buffers in the queue to allow reading (0=disable)",
-          0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "Min. number of buffers in the queue to allow reading (0=disable)", 0,
+          G_MAXUINT, 0,
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MIN_THRESHOLD_TIME,
       g_param_spec_uint64 ("min-threshold-time", "Min. threshold (ns)",
           "Min. amount of data in the queue to allow reading (in ns, 0=disable)",
-          0, G_MAXUINT64, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          0, G_MAXUINT64, 0,
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_LEAKY,
       g_param_spec_enum ("leaky", "Leaky",
           "Where the queue leaks, if at all",
           GST_TYPE_QUEUE_LEAKY, GST_QUEUE_NO_LEAK,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   /**
    * GstQueue:silent
@@ -365,7 +378,8 @@
   g_object_class_install_property (gobject_class, PROP_SILENT,
       g_param_spec_boolean ("silent", "Silent",
           "Don't emit queue signals", FALSE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   /**
    * GstQueue:flush-on-eos
@@ -385,7 +399,8 @@
   g_object_class_install_property (gobject_class, PROP_FLUSH_ON_EOS,
       g_param_spec_boolean ("flush-on-eos", "Flush on EOS",
           "Discard all data in the queue when an EOS event is received", FALSE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   gobject_class->finalize = gst_queue_finalize;
 
@@ -404,6 +419,7 @@
   GST_DEBUG_REGISTER_FUNCPTR (gst_queue_handle_src_event);
   GST_DEBUG_REGISTER_FUNCPTR (gst_queue_handle_src_query);
   GST_DEBUG_REGISTER_FUNCPTR (gst_queue_chain);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_queue_chain_list);
 }
 
 static void
@@ -412,6 +428,7 @@
   queue->sinkpad = gst_pad_new_from_static_template (&sinktemplate, "sink");
 
   gst_pad_set_chain_function (queue->sinkpad, gst_queue_chain);
+  gst_pad_set_chain_list_function (queue->sinkpad, gst_queue_chain_list);
   gst_pad_set_activatemode_function (queue->sinkpad,
       gst_queue_sink_activate_mode);
   gst_pad_set_event_function (queue->sinkpad, gst_queue_handle_sink_event);
@@ -579,7 +596,7 @@
 /* take a buffer and update segment, updating the time level of the queue. */
 static void
 apply_buffer (GstQueue * queue, GstBuffer * buffer, GstSegment * segment,
-    gboolean with_duration, gboolean sink)
+    gboolean sink)
 {
   GstClockTime duration, timestamp;
 
@@ -592,7 +609,7 @@
     timestamp = segment->position;
 
   /* add duration */
-  if (with_duration && duration != GST_CLOCK_TIME_NONE)
+  if (duration != GST_CLOCK_TIME_NONE)
     timestamp += duration;
 
   GST_LOG_OBJECT (queue, "position updated to %" GST_TIME_FORMAT,
@@ -609,6 +626,53 @@
   update_time_level (queue);
 }
 
+static gboolean
+buffer_list_apply_time (GstBuffer ** buf, guint idx, gpointer user_data)
+{
+  GstClockTime *timestamp = user_data;
+
+  GST_TRACE ("buffer %u has ts %" GST_TIME_FORMAT
+      " duration %" GST_TIME_FORMAT, idx,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*buf)),
+      GST_TIME_ARGS (GST_BUFFER_DURATION (*buf)));
+
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (*buf))
+    *timestamp = GST_BUFFER_TIMESTAMP (*buf);
+
+  if (GST_BUFFER_DURATION_IS_VALID (*buf))
+    *timestamp += GST_BUFFER_DURATION (*buf);
+
+  GST_TRACE ("ts now %" GST_TIME_FORMAT, GST_TIME_ARGS (*timestamp));
+
+  return TRUE;
+}
+
+/* take a buffer list and update segment, updating the time level of the queue */
+static void
+apply_buffer_list (GstQueue * queue, GstBufferList * buffer_list,
+    GstSegment * segment, gboolean sink)
+{
+  GstClockTime timestamp;
+
+  /* if no timestamp is set, assume it's continuous with the previous time */
+  timestamp = segment->position;
+
+  gst_buffer_list_foreach (buffer_list, buffer_list_apply_time, &timestamp);
+
+  GST_DEBUG_OBJECT (queue, "position updated to %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp));
+
+  segment->position = timestamp;
+
+  if (sink)
+    queue->sink_tainted = TRUE;
+  else
+    queue->src_tainted = TRUE;
+
+  /* calc diff with other end */
+  update_time_level (queue);
+}
+
 static void
 gst_queue_locked_flush (GstQueue * queue, gboolean full)
 {
@@ -655,7 +719,41 @@
   /* add buffer to the statistics */
   queue->cur_level.buffers++;
   queue->cur_level.bytes += bsize;
-  apply_buffer (queue, buffer, &queue->sink_segment, TRUE, TRUE);
+  apply_buffer (queue, buffer, &queue->sink_segment, TRUE);
+
+  qitem = g_slice_new (GstQueueItem);
+  qitem->item = item;
+  qitem->is_query = FALSE;
+  qitem->size = bsize;
+  gst_queue_array_push_tail (queue->queue, qitem);
+  GST_QUEUE_SIGNAL_ADD (queue);
+}
+
+static gboolean
+buffer_list_calc_size (GstBuffer ** buf, guint idx, gpointer data)
+{
+  guint *p_size = data;
+  gsize buf_size;
+
+  buf_size = gst_buffer_get_size (*buf);
+  GST_TRACE ("buffer %u in has size %" G_GSIZE_FORMAT, idx, buf_size);
+  *p_size += buf_size;
+  return TRUE;
+}
+
+static inline void
+gst_queue_locked_enqueue_buffer_list (GstQueue * queue, gpointer item)
+{
+  GstQueueItem *qitem;
+  GstBufferList *buffer_list = GST_BUFFER_LIST_CAST (item);
+  gsize bsize = 0;
+
+  gst_buffer_list_foreach (buffer_list, buffer_list_calc_size, &bsize);
+
+  /* add buffer to the statistics */
+  queue->cur_level.buffers += gst_buffer_list_length (buffer_list);
+  queue->cur_level.bytes += bsize;
+  apply_buffer_list (queue, buffer_list, &queue->sink_segment, TRUE);
 
   qitem = g_slice_new (GstQueueItem);
   qitem->item = item;
@@ -733,12 +831,24 @@
 
     queue->cur_level.buffers--;
     queue->cur_level.bytes -= bufsize;
-    apply_buffer (queue, buffer, &queue->src_segment, TRUE, FALSE);
+    apply_buffer (queue, buffer, &queue->src_segment, FALSE);
 
     /* if the queue is empty now, update the other side */
     if (queue->cur_level.buffers == 0)
       queue->cur_level.time = 0;
+  } else if (GST_IS_BUFFER_LIST (item)) {
+    GstBufferList *buffer_list = GST_BUFFER_LIST_CAST (item);
 
+    GST_CAT_LOG_OBJECT (queue_dataflow, queue,
+        "retrieved buffer list %p from queue", buffer_list);
+
+    queue->cur_level.buffers -= gst_buffer_list_length (buffer_list);
+    queue->cur_level.bytes -= bufsize;
+    apply_buffer_list (queue, buffer_list, &queue->src_segment, FALSE);
+
+    /* if the queue is empty now, update the other side */
+    if (queue->cur_level.buffers == 0)
+      queue->cur_level.time = 0;
   } else if (GST_IS_EVENT (item)) {
     GstEvent *event = GST_EVENT_CAST (item);
 
@@ -1001,11 +1111,27 @@
   }
 }
 
+static gboolean
+discont_first_buffer (GstBuffer ** buffer, guint i, gpointer user_data)
+{
+  GstQueue *queue = user_data;
+  GstBuffer *subbuffer = gst_buffer_make_writable (*buffer);
+
+  if (subbuffer) {
+    *buffer = subbuffer;
+    GST_BUFFER_FLAG_SET (*buffer, GST_BUFFER_FLAG_DISCONT);
+  } else {
+    GST_DEBUG_OBJECT (queue, "Could not mark buffer as DISCONT");
+  }
+
+  return FALSE;
+}
+
 static GstFlowReturn
-gst_queue_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+gst_queue_chain_buffer_or_list (GstPad * pad, GstObject * parent,
+    GstMiniObject * obj, gboolean is_list)
 {
   GstQueue *queue;
-  GstClockTime duration, timestamp;
 
   queue = GST_QUEUE_CAST (parent);
 
@@ -1017,13 +1143,22 @@
   if (queue->unexpected)
     goto out_unexpected;
 
-  timestamp = GST_BUFFER_TIMESTAMP (buffer);
-  duration = GST_BUFFER_DURATION (buffer);
+  if (!is_list) {
+    GstClockTime duration, timestamp;
+    GstBuffer *buffer = GST_BUFFER_CAST (obj);
 
-  GST_CAT_LOG_OBJECT (queue_dataflow, queue, "received buffer %p of size %"
-      G_GSIZE_FORMAT ", time %" GST_TIME_FORMAT ", duration %"
-      GST_TIME_FORMAT, buffer, gst_buffer_get_size (buffer),
-      GST_TIME_ARGS (timestamp), GST_TIME_ARGS (duration));
+    timestamp = GST_BUFFER_TIMESTAMP (buffer);
+    duration = GST_BUFFER_DURATION (buffer);
+
+    GST_CAT_LOG_OBJECT (queue_dataflow, queue, "received buffer %p of size %"
+        G_GSIZE_FORMAT ", time %" GST_TIME_FORMAT ", duration %"
+        GST_TIME_FORMAT, buffer, gst_buffer_get_size (buffer),
+        GST_TIME_ARGS (timestamp), GST_TIME_ARGS (duration));
+  } else {
+    GST_CAT_LOG_OBJECT (queue_dataflow, queue,
+        "received buffer list %p with %u buffers", obj,
+        gst_buffer_list_length (GST_BUFFER_LIST_CAST (obj)));
+  }
 
   /* We make space available if we're "full" according to whatever
    * the user defined as "full". Note that this only applies to buffers.
@@ -1078,19 +1213,33 @@
   }
 
   if (queue->tail_needs_discont) {
-    GstBuffer *subbuffer = gst_buffer_make_writable (buffer);
+    if (!is_list) {
+      GstBuffer *buffer = GST_BUFFER_CAST (obj);
+      GstBuffer *subbuffer = gst_buffer_make_writable (buffer);
 
-    if (subbuffer) {
-      buffer = subbuffer;
-      GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+      if (subbuffer) {
+        buffer = subbuffer;
+        GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+      } else {
+        GST_DEBUG_OBJECT (queue, "Could not mark buffer as DISCONT");
+      }
+
+      obj = GST_MINI_OBJECT_CAST (buffer);
     } else {
-      GST_DEBUG_OBJECT (queue, "Could not mark buffer as DISCONT");
+      GstBufferList *buffer_list = GST_BUFFER_LIST_CAST (obj);
+
+      buffer_list = gst_buffer_list_make_writable (buffer_list);
+      gst_buffer_list_foreach (buffer_list, discont_first_buffer, queue);
+      obj = GST_MINI_OBJECT_CAST (buffer_list);
     }
     queue->tail_needs_discont = FALSE;
   }
 
   /* put buffer in queue now */
-  gst_queue_locked_enqueue_buffer (queue, buffer);
+  if (is_list)
+    gst_queue_locked_enqueue_buffer_list (queue, obj);
+  else
+    gst_queue_locked_enqueue_buffer (queue, obj);
   GST_QUEUE_MUTEX_UNLOCK (queue);
 
   return GST_FLOW_OK;
@@ -1100,7 +1249,7 @@
   {
     GST_QUEUE_MUTEX_UNLOCK (queue);
 
-    gst_buffer_unref (buffer);
+    gst_mini_object_unref (obj);
 
     return GST_FLOW_OK;
   }
@@ -1111,7 +1260,7 @@
     GST_CAT_LOG_OBJECT (queue_dataflow, queue,
         "exit because task paused, reason: %s", gst_flow_get_name (ret));
     GST_QUEUE_MUTEX_UNLOCK (queue);
-    gst_buffer_unref (buffer);
+    gst_mini_object_unref (obj);
 
     return ret;
   }
@@ -1120,7 +1269,7 @@
     GST_CAT_LOG_OBJECT (queue_dataflow, queue, "exit because we received EOS");
     GST_QUEUE_MUTEX_UNLOCK (queue);
 
-    gst_buffer_unref (buffer);
+    gst_mini_object_unref (obj);
 
     return GST_FLOW_EOS;
   }
@@ -1129,12 +1278,27 @@
     GST_CAT_LOG_OBJECT (queue_dataflow, queue, "exit because we received EOS");
     GST_QUEUE_MUTEX_UNLOCK (queue);
 
-    gst_buffer_unref (buffer);
+    gst_mini_object_unref (obj);
 
     return GST_FLOW_EOS;
   }
 }
 
+static GstFlowReturn
+gst_queue_chain_list (GstPad * pad, GstObject * parent,
+    GstBufferList * buffer_list)
+{
+  return gst_queue_chain_buffer_or_list (pad, parent,
+      GST_MINI_OBJECT_CAST (buffer_list), TRUE);
+}
+
+static GstFlowReturn
+gst_queue_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  return gst_queue_chain_buffer_or_list (pad, parent,
+      GST_MINI_OBJECT_CAST (buffer), FALSE);
+}
+
 /* dequeue an item from the queue an push it downstream. This functions returns
  * the result of the push. */
 static GstFlowReturn
@@ -1142,31 +1306,49 @@
 {
   GstFlowReturn result = queue->srcresult;
   GstMiniObject *data;
+  gboolean is_list;
 
   data = gst_queue_locked_dequeue (queue);
   if (data == NULL)
     goto no_item;
 
 next:
-  if (GST_IS_BUFFER (data)) {
-    GstBuffer *buffer;
+  is_list = GST_IS_BUFFER_LIST (data);
 
-    buffer = GST_BUFFER_CAST (data);
+  if (GST_IS_BUFFER (data) || is_list) {
+    if (!is_list) {
+      GstBuffer *buffer;
 
-    if (queue->head_needs_discont) {
-      GstBuffer *subbuffer = gst_buffer_make_writable (buffer);
+      buffer = GST_BUFFER_CAST (data);
 
-      if (subbuffer) {
-        buffer = subbuffer;
-        GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
-      } else {
-        GST_DEBUG_OBJECT (queue, "Could not mark buffer as DISCONT");
+      if (queue->head_needs_discont) {
+        GstBuffer *subbuffer = gst_buffer_make_writable (buffer);
+
+        if (subbuffer) {
+          buffer = subbuffer;
+          GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+        } else {
+          GST_DEBUG_OBJECT (queue, "Could not mark buffer as DISCONT");
+        }
+        queue->head_needs_discont = FALSE;
       }
-      queue->head_needs_discont = FALSE;
-    }
 
-    GST_QUEUE_MUTEX_UNLOCK (queue);
-    result = gst_pad_push (queue->srcpad, buffer);
+      GST_QUEUE_MUTEX_UNLOCK (queue);
+      result = gst_pad_push (queue->srcpad, buffer);
+    } else {
+      GstBufferList *buffer_list;
+
+      buffer_list = GST_BUFFER_LIST_CAST (data);
+
+      if (queue->head_needs_discont) {
+        buffer_list = gst_buffer_list_make_writable (buffer_list);
+        gst_buffer_list_foreach (buffer_list, discont_first_buffer, queue);
+        queue->head_needs_discont = FALSE;
+      }
+
+      GST_QUEUE_MUTEX_UNLOCK (queue);
+      result = gst_pad_push_list (queue->srcpad, buffer_list);
+    }
 
     /* need to check for srcresult here as well */
     GST_QUEUE_MUTEX_LOCK_CHECK (queue, out_flushing);
@@ -1182,6 +1364,10 @@
           GST_CAT_LOG_OBJECT (queue_dataflow, queue,
               "dropping EOS buffer %p", data);
           gst_buffer_unref (GST_BUFFER_CAST (data));
+        } else if (GST_IS_BUFFER_LIST (data)) {
+          GST_CAT_LOG_OBJECT (queue_dataflow, queue,
+              "dropping EOS buffer list %p", data);
+          gst_buffer_list_unref (GST_BUFFER_LIST_CAST (data));
         } else if (GST_IS_EVENT (data)) {
           GstEvent *event = GST_EVENT_CAST (data);
           GstEventType type = GST_EVENT_TYPE (event);
@@ -1313,10 +1499,13 @@
     gst_pad_pause_task (queue->srcpad);
     GST_CAT_LOG_OBJECT (queue_dataflow, queue,
         "pause task, reason:  %s", gst_flow_get_name (ret));
-    if (ret == GST_FLOW_FLUSHING)
+    if (ret == GST_FLOW_FLUSHING) {
       gst_queue_locked_flush (queue, FALSE);
-    else
+    } else {
       GST_QUEUE_SIGNAL_DEL (queue);
+      queue->last_query = FALSE;
+      g_cond_signal (&queue->query_handled);
+    }
     GST_QUEUE_MUTEX_UNLOCK (queue);
     /* let app know about us giving up if upstream is not expected to do so */
     /* EOS is already taken care of elsewhere */
@@ -1422,13 +1611,17 @@
        * limit, the best thing we can do is to return an infinite delay. In
        * reality a better estimate would be the byte/buffer rate but that is not
        * possible right now. */
-      if (queue->max_size.time > 0 && max != -1)
+      /* TODO: Use CONVERT query? */
+      if (queue->max_size.time > 0 && max != -1
+          && queue->leaky == GST_QUEUE_NO_LEAK)
         max += queue->max_size.time;
+      else if (queue->max_size.time > 0 && queue->leaky != GST_QUEUE_NO_LEAK)
+        max = MIN (queue->max_size.time, max);
       else
         max = -1;
 
       /* adjust for min-threshold */
-      if (queue->min_threshold.time > 0 && min != -1)
+      if (queue->min_threshold.time > 0)
         min += queue->min_threshold.time;
 
       gst_query_set_latency (query, live, min, max);
diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c
index e372388..7ac1e4e 100644
--- a/plugins/elements/gstqueue2.c
+++ b/plugins/elements/gstqueue2.c
@@ -310,21 +310,25 @@
       g_param_spec_uint ("max-size-bytes", "Max. size (kB)",
           "Max. amount of data in the queue (bytes, 0=disable)",
           0, G_MAXUINT, DEFAULT_MAX_SIZE_BYTES,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_SIZE_BUFFERS,
       g_param_spec_uint ("max-size-buffers", "Max. size (buffers)",
           "Max. number of buffers in the queue (0=disable)", 0, G_MAXUINT,
           DEFAULT_MAX_SIZE_BUFFERS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_SIZE_TIME,
       g_param_spec_uint64 ("max-size-time", "Max. size (ns)",
           "Max. amount of data in the queue (in ns, 0=disable)", 0, G_MAXUINT64,
-          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_USE_BUFFERING,
       g_param_spec_boolean ("use-buffering", "Use buffering",
           "Emit GST_MESSAGE_BUFFERING based on low-/high-percent thresholds",
-          DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_USE_RATE_ESTIMATE,
       g_param_spec_boolean ("use-rate-estimate", "Use Rate Estimate",
           "Estimate the bitrate of the stream to calculate time level",
@@ -2025,7 +2029,7 @@
 
     /* add buffer to the statistics */
     if (QUEUE_IS_USING_QUEUE (queue)) {
-      queue->cur_level.buffers++;
+      queue->cur_level.buffers += gst_buffer_list_length (buffer_list);
       queue->cur_level.bytes += size;
     }
     queue->bytes_in += size;
@@ -2218,7 +2222,7 @@
         "retrieved buffer list %p from queue", buffer_list);
 
     if (QUEUE_IS_USING_QUEUE (queue)) {
-      queue->cur_level.buffers--;
+      queue->cur_level.buffers -= gst_buffer_list_length (buffer_list);
       queue->cur_level.bytes -= size;
     }
     queue->bytes_out += size;
@@ -2808,6 +2812,13 @@
     GstFlowReturn ret = queue->srcresult;
 
     gst_pad_pause_task (queue->srcpad);
+    if (ret == GST_FLOW_FLUSHING) {
+      gst_queue2_locked_flush (queue, FALSE, FALSE);
+    } else {
+      GST_QUEUE2_SIGNAL_DEL (queue);
+      queue->last_query = FALSE;
+      g_cond_signal (&queue->query_handled);
+    }
     GST_QUEUE2_MUTEX_UNLOCK (queue);
     GST_CAT_LOG_OBJECT (queue_dataflow, queue,
         "pause task, reason:  %s", gst_flow_get_name (queue->srcresult));
diff --git a/plugins/elements/gststreamiddemux.c b/plugins/elements/gststreamiddemux.c
new file mode 100644
index 0000000..c9d99f1
--- /dev/null
+++ b/plugins/elements/gststreamiddemux.c
@@ -0,0 +1,402 @@
+/* GStreamer streamiddemux element
+ *
+ * Copyright 2013 LGE Corporation.
+ *  @author: Hoonhee Lee <hoonhee.lee@lge.com>
+ *  @author: Jeongseok Kim <jeongseok.kim@lge.com>
+ *  @author: Wonchul Lee <wonchul86.lee@lge.com>
+ *
+ * gststreamiddemux.c: Simple stream-id-demultiplexer element
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+/**
+ * SECTION:element-streamid-demux
+ * @see_also: #GstFunnel
+ *
+ * Direct input stream to one out of N output pads by stream-id.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gststreamiddemux.h"
+
+GST_DEBUG_CATEGORY_STATIC (streamid_demux_debug);
+#define GST_CAT_DEFAULT streamid_demux_debug
+
+enum
+{
+  PROP_0,
+  PROP_ACTIVE_PAD,
+  PROP_LAST
+};
+
+static GstStaticPadTemplate gst_streamid_demux_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gst_streamid_demux_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src_%u",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+#define _do_init \
+GST_DEBUG_CATEGORY_INIT (streamid_demux_debug, \
+        "streamiddemux", 0, "Streamid demuxer");
+#define gst_streamid_demux_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstStreamidDemux, gst_streamid_demux,
+    GST_TYPE_ELEMENT, _do_init);
+
+static void gst_streamid_demux_dispose (GObject * object);
+static void gst_streamid_demux_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static GstFlowReturn gst_streamid_demux_chain (GstPad * pad,
+    GstObject * parent, GstBuffer * buf);
+static gboolean gst_streamid_demux_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static GstStateChangeReturn gst_streamid_demux_change_state (GstElement *
+    element, GstStateChange transition);
+static GstPad *gst_streamid_demux_get_srcpad_by_stream_id (GstStreamidDemux *
+    demux, const gchar * stream_id);
+static gboolean gst_streamid_demux_srcpad_create (GstStreamidDemux * demux,
+    GstPad * pad, const gchar * stream_id);
+static void gst_streamid_demux_reset (GstStreamidDemux * demux);
+static void gst_streamid_demux_release_srcpad (const GValue * item,
+    GstStreamidDemux * demux);
+
+static void
+gst_streamid_demux_class_init (GstStreamidDemuxClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  gobject_class->get_property = gst_streamid_demux_get_property;
+  gobject_class->dispose = gst_streamid_demux_dispose;
+
+  g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
+      g_param_spec_object ("active-pad", "Active pad",
+          "The currently active src pad", GST_TYPE_PAD,
+          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_static_metadata (gstelement_class, "Streamid Demux",
+      "Generic", "1-to-N output stream by stream-id",
+      "HoonHee Lee <hoonhee.lee@lge.com>");
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_streamid_demux_sink_factory));
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&gst_streamid_demux_src_factory));
+
+  gstelement_class->change_state = gst_streamid_demux_change_state;
+}
+
+static void
+gst_streamid_demux_init (GstStreamidDemux * demux)
+{
+  demux->sinkpad =
+      gst_pad_new_from_static_template (&gst_streamid_demux_sink_factory,
+      "sink");
+  gst_pad_set_chain_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_streamid_demux_chain));
+  gst_pad_set_event_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_streamid_demux_event));
+
+  gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
+
+  /* srcpad management */
+  demux->active_srcpad = NULL;
+  demux->nb_srcpads = 0;
+
+  /* initialize hash table for srcpad */
+  demux->stream_id_pairs =
+      g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free,
+      (GDestroyNotify) gst_object_unref);
+}
+
+static void
+gst_streamid_demux_dispose (GObject * object)
+{
+  GstStreamidDemux *demux = GST_STREAMID_DEMUX (object);
+
+  gst_streamid_demux_reset (demux);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_streamid_demux_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstStreamidDemux *demux = GST_STREAMID_DEMUX (object);
+
+  switch (prop_id) {
+    case PROP_ACTIVE_PAD:
+      GST_OBJECT_LOCK (demux);
+      g_value_set_object (value, demux->active_srcpad);
+      GST_OBJECT_UNLOCK (demux);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+forward_sticky_events (GstPad * pad, GstEvent ** event, gpointer user_data)
+{
+  GstPad *srcpad = GST_PAD_CAST (user_data);
+
+  gst_pad_push_event (srcpad, gst_event_ref (*event));
+
+  return TRUE;
+}
+
+static gboolean
+gst_streamid_demux_srcpad_create (GstStreamidDemux * demux, GstPad * pad,
+    const gchar * stream_id)
+{
+  gchar *padname = NULL;
+  GstPad *srcpad = NULL;
+  GstPadTemplate *pad_tmpl = NULL;
+
+  padname = g_strdup_printf ("src_%u", demux->nb_srcpads++);
+  pad_tmpl = gst_static_pad_template_get (&gst_streamid_demux_src_factory);
+
+  GST_LOG_OBJECT (demux, "generating a srcpad:%s", padname);
+  srcpad = gst_pad_new_from_template (pad_tmpl, padname);
+  gst_object_unref (pad_tmpl);
+  g_free (padname);
+  g_return_val_if_fail (srcpad != NULL, FALSE);
+
+  demux->active_srcpad = srcpad;
+  g_hash_table_insert (demux->stream_id_pairs, g_strdup (stream_id),
+      gst_object_ref (srcpad));
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_streamid_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstFlowReturn res = GST_FLOW_OK;
+  GstStreamidDemux *demux = NULL;
+  GstPad *srcpad = NULL;
+
+  demux = GST_STREAMID_DEMUX (parent);
+
+  GST_LOG_OBJECT (demux, "pushing buffer to %" GST_PTR_FORMAT,
+      demux->active_srcpad);
+
+  GST_OBJECT_LOCK (demux);
+  if (demux->active_srcpad) {
+    srcpad = gst_object_ref (demux->active_srcpad);
+    GST_OBJECT_UNLOCK (demux);
+    res = gst_pad_push (srcpad, buf);
+    gst_object_unref (srcpad);
+  } else {
+    GST_OBJECT_UNLOCK (demux);
+    goto no_active_srcpad;
+  }
+
+  GST_LOG_OBJECT (demux, "handled buffer %s", gst_flow_get_name (res));
+  return res;
+
+/* ERROR */
+no_active_srcpad:
+  {
+    GST_WARNING_OBJECT (demux, "srcpad is not initialized");
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+}
+
+static GstPad *
+gst_streamid_demux_get_srcpad_by_stream_id (GstStreamidDemux * demux,
+    const gchar * stream_id)
+{
+  GstPad *srcpad = NULL;
+
+  GST_DEBUG_OBJECT (demux, "stream_id = %s", stream_id);
+  if (demux->stream_id_pairs == NULL || stream_id == NULL) {
+    goto done;
+  }
+
+  srcpad = g_hash_table_lookup (demux->stream_id_pairs, stream_id);
+
+  if (srcpad) {
+    GST_DEBUG_OBJECT (demux, "srcpad = %s:%s matched",
+        GST_DEBUG_PAD_NAME (srcpad));
+  }
+
+done:
+  return srcpad;
+}
+
+static gboolean
+gst_streamid_demux_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  gboolean res = TRUE;
+  GstStreamidDemux *demux;
+  const gchar *stream_id = NULL;
+  GstPad *active_srcpad = NULL;
+
+  demux = GST_STREAMID_DEMUX (parent);
+
+  GST_DEBUG_OBJECT (demux, "event = %s, sticky = %d",
+      GST_EVENT_TYPE_NAME (event), GST_EVENT_IS_STICKY (event));
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START) {
+    gst_event_parse_stream_start (event, &stream_id);
+    if (!stream_id)
+      goto no_stream_id;
+
+    GST_OBJECT_LOCK (demux);
+    active_srcpad =
+        gst_streamid_demux_get_srcpad_by_stream_id (demux, stream_id);
+    if (!active_srcpad) {
+      /* try to generate a srcpad */
+      if (gst_streamid_demux_srcpad_create (demux, pad, stream_id)) {
+        GST_OBJECT_UNLOCK (demux);
+
+        gst_pad_set_active (demux->active_srcpad, TRUE);
+        /* Forward sticky events to the new srcpad */
+        gst_pad_sticky_events_foreach (demux->sinkpad, forward_sticky_events,
+            demux->active_srcpad);
+        gst_element_add_pad (GST_ELEMENT_CAST (demux), demux->active_srcpad);
+      } else {
+        GST_OBJECT_UNLOCK (demux);
+        goto fail_create_srcpad;
+      }
+    } else if (demux->active_srcpad != active_srcpad) {
+      demux->active_srcpad = active_srcpad;
+      GST_OBJECT_UNLOCK (demux);
+
+      g_object_notify (G_OBJECT (demux), "active-pad");
+    } else
+      GST_OBJECT_UNLOCK (demux);
+  }
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_START
+      || GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_STOP
+      || GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
+    res = gst_pad_event_default (pad, parent, event);
+  } else if (demux->active_srcpad) {
+    GstPad *srcpad = NULL;
+    GST_OBJECT_LOCK (demux);
+    srcpad = gst_object_ref (demux->active_srcpad);
+    GST_OBJECT_UNLOCK (demux);
+    res = gst_pad_push_event (srcpad, event);
+    gst_object_unref (srcpad);
+  } else {
+    gst_event_unref (event);
+  }
+  return res;
+
+  /* ERRORS */
+no_stream_id:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
+        ("Error occurred trying to get stream-id to create a srcpad"),
+        ("no stream-id found at %s", GST_EVENT_TYPE_NAME (event)));
+
+    gst_event_unref (event);
+    return FALSE;
+  }
+
+fail_create_srcpad:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, FAILED,
+        ("Error occurred trying to create a srcpad"),
+        ("Failed to create a srcpad via stream-id:%s", stream_id));
+    gst_event_unref (event);
+    return FALSE;
+  }
+}
+
+static void
+gst_streamid_demux_release_srcpad (const GValue * item,
+    GstStreamidDemux * demux)
+{
+  GstPad *pad = g_value_get_object (item);
+
+  if (pad != NULL) {
+    gst_pad_set_active (pad, FALSE);
+    gst_element_remove_pad (GST_ELEMENT_CAST (demux), pad);
+  }
+}
+
+static void
+gst_streamid_demux_reset (GstStreamidDemux * demux)
+{
+  GstIterator *it = NULL;
+  GstIteratorResult itret = GST_ITERATOR_OK;
+
+  GST_OBJECT_LOCK (demux);
+  if (demux->active_srcpad != NULL)
+    demux->active_srcpad = NULL;
+
+  demux->nb_srcpads = 0;
+  GST_OBJECT_UNLOCK (demux);
+
+  if (demux->stream_id_pairs != NULL) {
+    g_hash_table_unref (demux->stream_id_pairs);
+    demux->stream_id_pairs = NULL;
+  }
+
+  it = gst_element_iterate_src_pads (GST_ELEMENT_CAST (demux));
+  while (itret == GST_ITERATOR_OK || itret == GST_ITERATOR_RESYNC) {
+    itret =
+        gst_iterator_foreach (it,
+        (GstIteratorForeachFunction) gst_streamid_demux_release_srcpad, demux);
+    if (itret == GST_ITERATOR_RESYNC)
+      gst_iterator_resync (it);
+  }
+  gst_iterator_free (it);
+}
+
+static GstStateChangeReturn
+gst_streamid_demux_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStreamidDemux *demux;
+  GstStateChangeReturn result;
+
+  demux = GST_STREAMID_DEMUX (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    default:
+      break;
+  }
+
+  result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_streamid_demux_reset (demux);
+      break;
+    default:
+      break;
+  }
+
+  return result;
+}
diff --git a/plugins/elements/gststreamiddemux.h b/plugins/elements/gststreamiddemux.h
new file mode 100644
index 0000000..ec5383b
--- /dev/null
+++ b/plugins/elements/gststreamiddemux.h
@@ -0,0 +1,66 @@
+/*
+ * GStreamer streamiddemux eleement
+ *
+ * Copyright 2013 LGE Corporation.
+ *  @author: Hoonhee Lee <hoonhee.lee@lge.com>
+ *  @author: Jeongseok Kim <jeongseok.kim@lge.com>
+ *  @author: Wonchul Lee <wonchul86.lee@lge.com>
+ *
+ * gststreamiddemux.h: Simple stream-id-demultiplexer element
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#ifndef __GST_STREAMID_DEMUX_H__
+#define __GST_STREAMID_DEMUX_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_STREAMID_DEMUX \
+  (gst_streamid_demux_get_type())
+#define GST_STREAMID_DEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_STREAMID_DEMUX, GstStreamidDemux))
+#define GST_STREAMID_DEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_STREAMID_DEMUX, GstStreamidDemuxClass))
+#define GST_IS_STREAMID_DEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_STREAMID_DEMUX))
+#define GST_IS_STREAMID_DEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_STREAMID_DEMUX))
+typedef struct _GstStreamidDemux GstStreamidDemux;
+typedef struct _GstStreamidDemuxClass GstStreamidDemuxClass;
+
+struct _GstStreamidDemux
+{
+  GstElement element;
+
+  GstPad *sinkpad;
+
+  guint nb_srcpads;
+  GstPad *active_srcpad;
+
+  /* This table contains srcpad and stream-id */
+  GHashTable *stream_id_pairs;
+};
+
+struct _GstStreamidDemuxClass
+{
+  GstElementClass parent_class;
+};
+
+G_GNUC_INTERNAL GType gst_streamid_demux_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_STREAMID_DEMUX_H__ */
diff --git a/plugins/elements/gsttypefindelement.c b/plugins/elements/gsttypefindelement.c
index 4c77b74..6ac9133 100644
--- a/plugins/elements/gsttypefindelement.c
+++ b/plugins/elements/gsttypefindelement.c
@@ -135,10 +135,6 @@
 static void gst_type_find_element_get_property (GObject * object,
     guint prop_id, GValue * value, GParamSpec * pspec);
 
-#if 0
-static const GstEventMask *gst_type_find_element_src_event_mask (GstPad * pad);
-#endif
-
 static gboolean gst_type_find_element_src_event (GstPad * pad,
     GstObject * parent, GstEvent * event);
 static gboolean gst_type_find_handle_src_query (GstPad * pad,
@@ -528,6 +524,7 @@
   GST_OBJECT_LOCK (typefind);
   if (typefind->caps)
     gst_caps_replace (&typefind->caps, NULL);
+  typefind->initial_offset = GST_BUFFER_OFFSET_NONE;
   GST_OBJECT_UNLOCK (typefind);
 
   typefind->mode = MODE_TYPEFIND;
@@ -563,6 +560,7 @@
   buffer = gst_adapter_take_buffer (typefind->adapter, avail);
   GST_BUFFER_PTS (buffer) = pts;
   GST_BUFFER_DTS (buffer) = dts;
+  GST_BUFFER_OFFSET (buffer) = typefind->initial_offset;
   GST_OBJECT_UNLOCK (typefind);
 
   if (!push_cached_buffers) {
@@ -843,6 +841,8 @@
     case MODE_TYPEFIND:
     {
       GST_OBJECT_LOCK (typefind);
+      if (typefind->initial_offset == GST_BUFFER_OFFSET_NONE)
+        typefind->initial_offset = GST_BUFFER_OFFSET (buffer);
       gst_adapter_push (typefind->adapter, buffer);
       GST_OBJECT_UNLOCK (typefind);
 
@@ -1179,10 +1179,12 @@
         typefind->offset = 0;
         res = TRUE;
       } else {
+        gst_segment_init (&typefind->segment, GST_FORMAT_UNDEFINED);
         res = gst_pad_stop_task (pad);
       }
       break;
     case GST_PAD_MODE_PUSH:
+      gst_segment_init (&typefind->segment, GST_FORMAT_UNDEFINED);
       if (active)
         start_typefinding (typefind);
       else
diff --git a/plugins/elements/gsttypefindelement.h b/plugins/elements/gsttypefindelement.h
index 3551ac5..bf92b4d 100644
--- a/plugins/elements/gsttypefindelement.h
+++ b/plugins/elements/gsttypefindelement.h
@@ -59,6 +59,8 @@
   GList *               cached_events;
   GstCaps *             force_caps;
 
+  guint64		initial_offset;
+  
   /* Only used when driving the pipeline */
   gboolean need_segment;
   gboolean need_stream_start;
diff --git a/plugins/elements/gstvalve.c b/plugins/elements/gstvalve.c
index 23ffa1c..6a37353 100644
--- a/plugins/elements/gstvalve.c
+++ b/plugins/elements/gstvalve.c
@@ -92,7 +92,8 @@
   g_object_class_install_property (gobject_class, PROP_DROP,
       g_param_spec_boolean ("drop", "Drop buffers and events",
           "Whether to drop buffers and events or let them through",
-          DEFAULT_DROP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          DEFAULT_DROP, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
+          G_PARAM_STATIC_STRINGS));
 
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&srctemplate));
diff --git a/po/af.gmo b/po/af.gmo
index 3858f3e..017b168 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index d8cf448..c64cbd2 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.9.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2005-12-05 11:45+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
@@ -939,6 +939,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -1020,6 +1026,9 @@
 msgid "writable"
 msgstr "titel"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr ""
 
diff --git a/po/az.gmo b/po/az.gmo
index be1da2d..aa32d81 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 17eae4d..6c34653 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.8.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2004-03-19 18:40+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
@@ -888,6 +888,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -966,6 +972,9 @@
 msgid "writable"
 msgstr ""
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr ""
 
diff --git a/po/be.gmo b/po/be.gmo
index fccaf26..db5a92f 100644
--- a/po/be.gmo
+++ b/po/be.gmo
Binary files differ
diff --git a/po/be.po b/po/be.po
index ec088a6..08cdacc 100644
--- a/po/be.po
+++ b/po/be.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.9.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2006-01-18 22:26+0200\n"
 "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
 "Language-Team: Belarusian <i18n@mova.org>\n"
@@ -896,6 +896,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -976,6 +982,9 @@
 msgid "writable"
 msgstr "загаловак"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr ""
 
diff --git a/po/bg.gmo b/po/bg.gmo
index 73d079c..41063e8 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index cfa4269..c67cc48 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2011-04-26 22:40+0300\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -931,6 +931,12 @@
 "Ограничаване на позволените възможности („NULL“ означава всякакви). "
 "Задаването на това свойство поема указател към подадения обект GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Не е указана временна папка"
 
@@ -1009,6 +1015,9 @@
 msgid "writable"
 msgstr "с права за запис"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "може да се контролира"
 
diff --git a/po/ca.gmo b/po/ca.gmo
index b089a3e..04e95b6 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 9fbc4a8..6b66492 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-11-04 19:41+0100\n"
 "Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -941,6 +941,12 @@
 "Restringeix les capacitats que es poden permetre (NUL vol dir QUALSEVOL). "
 "Establir aquesta propietat pren una referència a l'objecte GstCaps proveït."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "No s'ha especificat un directori temporal."
 
@@ -1019,6 +1025,9 @@
 msgid "writable"
 msgstr "escrivible"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "controlable"
 
diff --git a/po/cs.gmo b/po/cs.gmo
index 3c91c7e..5716b3d 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index c74f7c8..ba944e2 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-03-09 11:07+0100\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@@ -930,6 +930,12 @@
 "Omezit povolené schopnosti (NULL znamená VŠECHNY). Nastavení této vlastnosti "
 "přebírá odkaz na zadaný objekt GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Není určena složka pro dočasné soubory."
 
@@ -1008,6 +1014,9 @@
 msgid "writable"
 msgstr "lze zapisovat"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "lze ovládat"
 
diff --git a/po/da.gmo b/po/da.gmo
index 5088e5d..d13b0cd 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index cf3f987..2766a66 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-07-16 13:26+0200\n"
 "Last-Translator: Mogens Jaeger <mogensjaeger@gmail.com>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -928,6 +928,12 @@
 "Begræns den mulige tilladte kapabilitet (NUL betyder ALT). Sættes denne "
 "egenskab gives en reference til det leverede GstCaps objekt."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Der er ikke angivet en mappe til midlertidige filer."
 
@@ -1007,6 +1013,9 @@
 msgid "writable"
 msgstr "som kan skrives"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "kontrollerbar"
 
diff --git a/po/de.gmo b/po/de.gmo
index 211ad8f..a69a5d2 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 55637de..d403a6a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-05-22 20:48+0100\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -956,6 +956,12 @@
 "Beschränkt die möglichen Filterfähigkeiten (NULL bedeutet ALLE). Setzen "
 "dieser Eigenschaft referenziert ein hinzugefügtes GstCaps-Objekt."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Kein temporärer Ordner angegeben."
 
@@ -1034,6 +1040,9 @@
 msgid "writable"
 msgstr "schreibbar"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "regelbar"
 
diff --git a/po/el.gmo b/po/el.gmo
index 408f533..61bcc64 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index ed3ab8b..d1fb6d5 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-11-29 11:14+0200\n"
 "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -953,6 +953,12 @@
 "ρύθμιση αυτής της ιδιότητας απαιτεί μια αναφορά στο παρεχόμενο αντικείμενο "
 "GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Δεν ορίσθηκε προσωρινός κατάλογος (Temp)."
 
@@ -1031,6 +1037,9 @@
 msgid "writable"
 msgstr "εγγράψιμο"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "ελεγχόμενο"
 
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index b69e191..ef56b12 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 90421e9..2b4b4ac 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2004-04-26 10:36-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
@@ -941,6 +941,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -1022,6 +1028,9 @@
 msgid "writable"
 msgstr "title"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr ""
 
diff --git a/po/eo.gmo b/po/eo.gmo
index a13f795..97b18ae 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index da2a739..92e801f 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+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"
@@ -878,6 +878,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -956,6 +962,9 @@
 msgid "writable"
 msgstr "skribeble"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "regeble"
 
diff --git a/po/es.gmo b/po/es.gmo
index 98cee26..2a47f83 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 17125af..de3c883 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2011-10-02 15:45+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -944,6 +944,12 @@
 "Al establecer esta propiedad se obtiene una referencia del objeto GstCaps "
 "proporcionado."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "No se especificó un directorio temporal."
 
@@ -1022,6 +1028,9 @@
 msgid "writable"
 msgstr "escribible"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "controlable"
 
diff --git a/po/eu.gmo b/po/eu.gmo
index 8cb8408..67f6481 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 644fa56..2188471 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-03-25 13:10+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -942,6 +942,12 @@
 "Mugatu onar daitezkeen ahalmenak (NULLek EDOZER adierazten du). Propietate "
 "hori ezartzen bada, emandako GstCaps objektuaren erreferentzia hartzen du."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Ez da aldi baterako direktoriorik zehaztu."
 
@@ -1021,6 +1027,9 @@
 msgid "writable"
 msgstr "idatz daitekeena"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "kontrola daitekeena"
 
diff --git a/po/fi.gmo b/po/fi.gmo
index af7b6ed..0ccb048 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index e7d0595..fb6acc8 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-11-17 23:10+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -939,6 +939,12 @@
 "Rajoita mahdollisia sallittuja kykyjä (NULL tarkoittaa mitä tahansa). Tämän "
 "ominaisuuden asettaminen ottaa kahvan annettuun GstCaps-olioon."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Tilapäishakemistoa ei ole määritetty."
 
@@ -1017,6 +1023,9 @@
 msgid "writable"
 msgstr "kirjoitettavissa"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "ohjattavissa"
 
diff --git a/po/fr.gmo b/po/fr.gmo
index 603cb61..8d3c6d2 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index e22c708..ffae30b 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2012-12-05 19:31+0100\n"
 "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -935,6 +935,12 @@
 "définition de cette propriété nécessite une référence à l'objet GSTCaps "
 "fourni."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Aucun répertoire temporaire indiqué."
 
@@ -1013,6 +1019,9 @@
 msgid "writable"
 msgstr "accès en écriture"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "contrôlable"
 
diff --git a/po/gl.gmo b/po/gl.gmo
index c962a15..ddbbf68 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index e61a582..1271bcf 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2012-12-15 03:29+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -932,6 +932,12 @@
 "estabelecer esta propiedade obtense unha referencia do obxecto GstCaps "
 "fornecido."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Non se especificou un directorio temporal."
 
@@ -1010,6 +1016,9 @@
 msgid "writable"
 msgstr "escribíbel"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "controlábel"
 
diff --git a/po/gstreamer-1.0.pot b/po/gstreamer-1.0.pot
index 657975d..ae58ea2 100644
--- a/po/gstreamer-1.0.pot
+++ b/po/gstreamer-1.0.pot
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.4.5\n"
+"Project-Id-Version: gstreamer 1.5.0.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+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"
@@ -105,7 +105,7 @@
 msgid "Show GStreamer Options"
 msgstr ""
 
-#: gst/gst.c:872
+#: gst/gst.c:873
 msgid "Unknown option"
 msgstr ""
 
@@ -306,7 +306,7 @@
 msgid "No standard error message for domain %s and code %d."
 msgstr ""
 
-#: gst/gstpipeline.c:523
+#: gst/gstpipeline.c:524
 msgid "Selected clock cannot be used in pipeline."
 msgstr ""
 
@@ -1008,22 +1008,22 @@
 msgid ", "
 msgstr ""
 
-#: gst/gsturi.c:589
+#: gst/gsturi.c:674
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr ""
 
-#: gst/gsturi.c:764
+#: gst/gsturi.c:849
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr ""
 
-#: gst/gstutils.c:2355 tools/gst-launch.c:321
+#: gst/gstutils.c:2419 tools/gst-launch.c:324
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr ""
 
-#: gst/gstutils.c:2357 tools/gst-launch.c:323 tools/gst-launch.c:650
+#: gst/gstutils.c:2421 tools/gst-launch.c:326 tools/gst-launch.c:669
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -1107,126 +1107,134 @@
 msgid "empty pipeline not allowed"
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:2793
+#: libs/gst/base/gstbasesink.c:2792
 msgid "A lot of buffers are being dropped."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:3306
+#: libs/gst/base/gstbasesink.c:3319
 msgid "Internal data flow problem."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:3976
+#: libs/gst/base/gstbasesink.c:3995
 msgid "Internal data stream error."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:3986 libs/gst/base/gstbasesrc.c:2932
-#: libs/gst/base/gstbasesrc.c:2941 plugins/elements/gstdownloadbuffer.c:1322
-#: plugins/elements/gstqueue.c:858 plugins/elements/gstqueue.c:1325
-#: plugins/elements/gstqueue2.c:2349 plugins/elements/gstqueue2.c:2818
+#: libs/gst/base/gstbasesink.c:4005 libs/gst/base/gstbasesrc.c:2942
+#: libs/gst/base/gstbasesrc.c:2951 plugins/elements/gstdownloadbuffer.c:1324
+#: plugins/elements/gstqueue.c:968 plugins/elements/gstqueue.c:1514
+#: plugins/elements/gstqueue2.c:2353 plugins/elements/gstqueue2.c:2829
 msgid "Internal data flow error."
 msgstr ""
 
-#: libs/gst/base/gstbasesrc.c:2531
+#: libs/gst/base/gstbasesrc.c:2541
 msgid "Internal clock error."
 msgstr ""
 
-#: libs/gst/base/gstbasesrc.c:2559
+#: libs/gst/base/gstbasesrc.c:2569
 msgid "Failed to map buffer."
 msgstr ""
 
-#: plugins/elements/gstcapsfilter.c:103
+#: plugins/elements/gstcapsfilter.c:125
 msgid "Filter caps"
 msgstr ""
 
-#: plugins/elements/gstcapsfilter.c:104
+#: plugins/elements/gstcapsfilter.c:126
 msgid ""
 "Restrict the possible allowed capabilities (NULL means ANY). Setting this "
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:919 plugins/elements/gstqueue2.c:1532
+#: plugins/elements/gstcapsfilter.c:133
+msgid "Caps Change Mode"
+msgstr ""
+
+#: plugins/elements/gstcapsfilter.c:134
+msgid "Filter caps change behaviour"
+msgstr ""
+
+#: plugins/elements/gstdownloadbuffer.c:921 plugins/elements/gstqueue2.c:1536
 msgid "No Temp directory specified."
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:925 plugins/elements/gstqueue2.c:1538
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1542
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstfilesrc.c:519
-#: plugins/elements/gstqueue2.c:1546
+#: plugins/elements/gstdownloadbuffer.c:935 plugins/elements/gstfilesrc.c:518
+#: plugins/elements/gstqueue2.c:1550
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:1244 plugins/elements/gstqueue2.c:1952
+#: plugins/elements/gstdownloadbuffer.c:1246 plugins/elements/gstqueue2.c:1956
 msgid "Error while writing to download file."
 msgstr ""
 
-#: plugins/elements/gstfilesink.c:416
+#: plugins/elements/gstfilesink.c:422
 msgid "No file name specified for writing."
 msgstr ""
 
-#: plugins/elements/gstfilesink.c:422
+#: plugins/elements/gstfilesink.c:428
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr ""
 
-#: plugins/elements/gstfilesink.c:447
+#: plugins/elements/gstfilesink.c:453
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstfilesink.c:611
+#: plugins/elements/gstfilesink.c:617
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstfilesink.c:619 plugins/elements/gstfilesink.c:682
+#: plugins/elements/gstfilesink.c:625
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:507
+#: plugins/elements/gstfilesrc.c:506
 msgid "No file name specified for reading."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:528
+#: plugins/elements/gstfilesrc.c:527
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:534
+#: plugins/elements/gstfilesrc.c:533
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:540
+#: plugins/elements/gstfilesrc.c:539
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr ""
 
-#: plugins/elements/gstidentity.c:602
+#: plugins/elements/gstidentity.c:605
 msgid "Failed after iterations as requested."
 msgstr ""
 
-#: plugins/elements/gsttypefindelement.c:204
+#: plugins/elements/gsttypefindelement.c:200
 msgid "caps"
 msgstr ""
 
-#: plugins/elements/gsttypefindelement.c:205
+#: plugins/elements/gsttypefindelement.c:201
 msgid "detected capabilities in stream"
 msgstr ""
 
-#: plugins/elements/gsttypefindelement.c:208
+#: plugins/elements/gsttypefindelement.c:204
 msgid "minimum"
 msgstr ""
 
-#: plugins/elements/gsttypefindelement.c:213
+#: plugins/elements/gsttypefindelement.c:209
 msgid "force caps"
 msgstr ""
 
-#: plugins/elements/gsttypefindelement.c:214
+#: plugins/elements/gsttypefindelement.c:210
 msgid "force caps without doing a typefind"
 msgstr ""
 
@@ -1247,66 +1255,70 @@
 msgstr ""
 
 #: tools/gst-inspect.c:294
-msgid "controllable"
+msgid "deprecated"
 msgstr ""
 
 #: tools/gst-inspect.c:298
-msgid "changeable in NULL, READY, PAUSED or PLAYING state"
-msgstr ""
-
-#: tools/gst-inspect.c:300
-msgid "changeable only in NULL, READY or PAUSED state"
+msgid "controllable"
 msgstr ""
 
 #: tools/gst-inspect.c:302
+msgid "changeable in NULL, READY, PAUSED or PLAYING state"
+msgstr ""
+
+#: tools/gst-inspect.c:304
+msgid "changeable only in NULL, READY or PAUSED state"
+msgstr ""
+
+#: tools/gst-inspect.c:306
 msgid "changeable only in NULL or READY state"
 msgstr ""
 
-#: tools/gst-inspect.c:907
+#: tools/gst-inspect.c:910
 msgid "Blacklisted files:"
 msgstr ""
 
-#: tools/gst-inspect.c:919 tools/gst-inspect.c:1008
+#: tools/gst-inspect.c:922 tools/gst-inspect.c:1011
 msgid "Total count: "
 msgstr ""
 
-#: tools/gst-inspect.c:920
+#: tools/gst-inspect.c:923
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1009
+#: tools/gst-inspect.c:1012
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1012
+#: tools/gst-inspect.c:1015
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1017
+#: tools/gst-inspect.c:1020
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] ""
 msgstr[1] ""
 
-#: tools/gst-inspect.c:1452
+#: tools/gst-inspect.c:1456
 msgid "Print all elements"
 msgstr ""
 
-#: tools/gst-inspect.c:1454
+#: tools/gst-inspect.c:1458
 msgid "Print list of blacklisted files"
 msgstr ""
 
-#: tools/gst-inspect.c:1456
+#: tools/gst-inspect.c:1460
 msgid ""
 "Print a machine-parsable list of features the specified plugin or all "
 "plugins provide.\n"
@@ -1314,282 +1326,282 @@
 "automatic plugin installation mechanisms"
 msgstr ""
 
-#: tools/gst-inspect.c:1461
+#: tools/gst-inspect.c:1465
 msgid "List the plugin contents"
 msgstr ""
 
-#: tools/gst-inspect.c:1463
+#: tools/gst-inspect.c:1467
 msgid "Check if the specified element or plugin exists"
 msgstr ""
 
-#: tools/gst-inspect.c:1466
+#: tools/gst-inspect.c:1470
 msgid ""
 "When checking if an element or plugin exists, also check that its version is "
 "at least the version specified"
 msgstr ""
 
-#: tools/gst-inspect.c:1470
+#: tools/gst-inspect.c:1474
 msgid "Print supported URI schemes, with the elements that implement them"
 msgstr ""
 
-#: tools/gst-inspect.c:1613
+#: tools/gst-inspect.c:1617
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr ""
 
-#: tools/gst-inspect.c:1618
+#: tools/gst-inspect.c:1622
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr ""
 
-#: tools/gst-launch.c:248
+#: tools/gst-launch.c:251
 msgid "Index statistics"
 msgstr ""
 
-#: tools/gst-launch.c:531
+#: tools/gst-launch.c:550
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:535
+#: tools/gst-launch.c:554
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:539
+#: tools/gst-launch.c:558
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:543
+#: tools/gst-launch.c:562
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr ""
 
-#: tools/gst-launch.c:575
+#: tools/gst-launch.c:594
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:584
+#: tools/gst-launch.c:603
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:587
+#: tools/gst-launch.c:606
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:590
+#: tools/gst-launch.c:609
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:593
+#: tools/gst-launch.c:612
 msgid "FOUND TAG\n"
 msgstr ""
 
-#: tools/gst-launch.c:608
+#: tools/gst-launch.c:627
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:611
+#: tools/gst-launch.c:630
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr ""
 
-#: tools/gst-launch.c:614
+#: tools/gst-launch.c:633
 msgid "FOUND TOC\n"
 msgstr ""
 
-#: tools/gst-launch.c:631
+#: tools/gst-launch.c:650
 #, c-format
 msgid ""
 "INFO:\n"
 "%s\n"
 msgstr ""
 
-#: tools/gst-launch.c:648
+#: tools/gst-launch.c:667
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:683
+#: tools/gst-launch.c:702
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr ""
 
-#: tools/gst-launch.c:687
+#: tools/gst-launch.c:706
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr ""
 
-#: tools/gst-launch.c:699
+#: tools/gst-launch.c:718
 msgid "buffering..."
 msgstr ""
 
-#: tools/gst-launch.c:710
+#: tools/gst-launch.c:729
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:718
+#: tools/gst-launch.c:737
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:727
+#: tools/gst-launch.c:746
 msgid "Redistribute latency...\n"
 msgstr ""
 
-#: tools/gst-launch.c:738
+#: tools/gst-launch.c:757
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr ""
 
-#: tools/gst-launch.c:754
+#: tools/gst-launch.c:773
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:783
+#: tools/gst-launch.c:802
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:796
+#: tools/gst-launch.c:815
 #, c-format
 msgid "Missing element: %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:810
+#: tools/gst-launch.c:829
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr ""
 
-#: tools/gst-launch.c:897
+#: tools/gst-launch.c:919
 msgid "Output tags (also known as metadata)"
 msgstr ""
 
-#: tools/gst-launch.c:899
+#: tools/gst-launch.c:921
 msgid "Output TOC (chapters and editions)"
 msgstr ""
 
-#: tools/gst-launch.c:901
+#: tools/gst-launch.c:923
 msgid "Output status information and property notifications"
 msgstr ""
 
-#: tools/gst-launch.c:903
+#: tools/gst-launch.c:925
 msgid "Do not print any progress information"
 msgstr ""
 
-#: tools/gst-launch.c:905
+#: tools/gst-launch.c:927
 msgid "Output messages"
 msgstr ""
 
-#: tools/gst-launch.c:907
+#: tools/gst-launch.c:929
 msgid "Do not output status information of TYPE"
 msgstr ""
 
-#: tools/gst-launch.c:907
+#: tools/gst-launch.c:929
 msgid "TYPE1,TYPE2,..."
 msgstr ""
 
-#: tools/gst-launch.c:909
+#: tools/gst-launch.c:931
 msgid "Do not install a fault handler"
 msgstr ""
 
-#: tools/gst-launch.c:911
+#: tools/gst-launch.c:933
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr ""
 
-#: tools/gst-launch.c:914
+#: tools/gst-launch.c:936
 msgid "Gather and print index statistics"
 msgstr ""
 
-#: tools/gst-launch.c:977
+#: tools/gst-launch.c:999
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr ""
 
-#: tools/gst-launch.c:981
+#: tools/gst-launch.c:1003
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr ""
 
-#: tools/gst-launch.c:985
+#: tools/gst-launch.c:1007
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr ""
 
-#: tools/gst-launch.c:1001
+#: tools/gst-launch.c:1023
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1034 tools/gst-launch.c:1134
+#: tools/gst-launch.c:1056 tools/gst-launch.c:1156
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1039
+#: tools/gst-launch.c:1061
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1044
+#: tools/gst-launch.c:1066
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1048
+#: tools/gst-launch.c:1070
 msgid "Pipeline is PREROLLING ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1051 tools/gst-launch.c:1065
+#: tools/gst-launch.c:1073 tools/gst-launch.c:1087
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1058
+#: tools/gst-launch.c:1080
 msgid "Pipeline is PREROLLED ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1071
+#: tools/gst-launch.c:1093
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1078
+#: tools/gst-launch.c:1100
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr ""
 
-#: tools/gst-launch.c:1096
+#: tools/gst-launch.c:1118
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr ""
 
-#: tools/gst-launch.c:1100
+#: tools/gst-launch.c:1122
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr ""
 
-#: tools/gst-launch.c:1103
+#: tools/gst-launch.c:1125
 msgid "Waiting for EOS...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1110
+#: tools/gst-launch.c:1132
 msgid "EOS received - stopping pipeline...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1114
+#: tools/gst-launch.c:1136
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1119
+#: tools/gst-launch.c:1141
 msgid "An error happened while waiting for EOS\n"
 msgstr ""
 
-#: tools/gst-launch.c:1130
+#: tools/gst-launch.c:1152
 msgid "Execution ended after %"
 msgstr ""
 
-#: tools/gst-launch.c:1146
+#: tools/gst-launch.c:1168
 msgid "Setting pipeline to READY ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1158
+#: tools/gst-launch.c:1180
 msgid "Setting pipeline to NULL ...\n"
 msgstr ""
 
-#: tools/gst-launch.c:1162
+#: tools/gst-launch.c:1184
 msgid "Freeing pipeline ...\n"
 msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index c6599ff..c0d3fb6 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index f2bd8ef..edbc76f 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2012-05-25 16:47+0200\n"
 "Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -925,6 +925,12 @@
 "Ograniči dozvoljene mogućnosti (NULL znači ANY). Postavljanje ovog svojstva "
 "prosljeđuje referencu navedenom GstCaps objektu."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Nije naveden privremeni direktorij."
 
@@ -1003,6 +1009,9 @@
 msgid "writable"
 msgstr "zapisivo"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "upravljivo"
 
diff --git a/po/hu.gmo b/po/hu.gmo
index 2de743b..fc66d2e 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 8d4d690..3eb262a 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-05-23 21:08+0200\n"
 "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -927,6 +927,12 @@
 "Az engedélyezhető képességek korlátozása (a NULL, ANY-t jelent). Ezen "
 "tulajdonság beállítása a biztosított GstCaps objektumra hivatkozik."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Nincs megadva ideiglenes könyvtár."
 
@@ -1005,6 +1011,9 @@
 msgid "writable"
 msgstr "írható"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "vezérelhető"
 
diff --git a/po/id.gmo b/po/id.gmo
index 43eb251..1f1c9fe 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 73c784c..7848616 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-05-31 22:06+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -930,6 +930,12 @@
 "Larang kemampuan yang mungkin diizinkan (KOSONG berarti APAPUN). Pengaturan "
 "properti ini bersumber pada objek GstCaps yang disediakan."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Tak ada direktori Temp yang ditentukan."
 
@@ -1008,6 +1014,9 @@
 msgid "writable"
 msgstr "dapat ditulis"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "dapat dikendalikan"
 
diff --git a/po/it.gmo b/po/it.gmo
index a070490..0999071 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 08bd56a..ec11b7b 100644
--- a/po/it.po
+++ b/po/it.po
@@ -106,7 +106,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-10-25 10:03+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -1091,6 +1091,12 @@
 "Impostando questa proprietà si prende un riferimento all'oggetto GstCaps "
 "fornito."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Nessuna directory temporanea specificata."
 
@@ -1169,6 +1175,9 @@
 msgid "writable"
 msgstr "scrivibile"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "controllabile"
 
diff --git a/po/ja.gmo b/po/ja.gmo
index 9b68cad..6dec707 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 2131004..550fd93 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2013-08-20 14:56+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -894,6 +894,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -972,6 +978,9 @@
 msgid "writable"
 msgstr "書き込み可能"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "コントロール可能"
 
diff --git a/po/lt.gmo b/po/lt.gmo
index 2b9ccea..5e65ed0 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index aa7d3b3..00decb9 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-07-16 00:50+0300\n"
 "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -936,6 +936,12 @@
 "Riboti galimas leidžiamas galimybes (NULL – BET KOKIAS). Nustatant šią "
 "savybę nurodoma į pateiktą GstCaps objektą."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Nenurodytas laikinas katalogas."
 
@@ -1014,6 +1020,9 @@
 msgid "writable"
 msgstr "rašomas"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "valdomas"
 
diff --git a/po/nb.gmo b/po/nb.gmo
index 27c4f0e..b22cadf 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 8f5f167..eebee9a 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-10-24 21:36+0200\n"
 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
@@ -899,6 +899,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -978,6 +984,9 @@
 msgid "writable"
 msgstr "skrivbar"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "kontrollerbar"
 
diff --git a/po/nl.gmo b/po/nl.gmo
index 3cec84e..de82241 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index bd26311..13620cb 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-05-22 00:46+0200\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -940,6 +940,12 @@
 "instellen  van deze eigenschap vereist een referentie naar het gegeven "
 "GstCaps-object."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Geen tijdelijke map opgegeven."
 
@@ -1018,6 +1024,9 @@
 msgid "writable"
 msgstr "schrijfbaar"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "controleerbaar"
 
diff --git a/po/pl.gmo b/po/pl.gmo
index 68f8dfd..4033ad9 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 6f0e3d3..c62f209 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-05-22 18:22+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -932,6 +932,12 @@
 "Ograniczenie możliwych dozwolonych możliwości (NULL oznacza WSZYSTKIE). "
 "Ustawienie tej właściwości odwołuje się do przekazanego obiektu GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Nie podano katalogu tymczasowego."
 
@@ -1010,6 +1016,9 @@
 msgid "writable"
 msgstr "zapis"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "sterowanie"
 
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 2789c0a..ffcd037 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 a960d7e..78cfe3d 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -17,7 +17,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2013-12-29 18:20-0200\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
@@ -949,6 +949,12 @@
 "Restrinja as possíveis capacidades permitidas (NULL = ANY). Definindo essa "
 "propriedade é levada uma referência ao objeto GstCaps fornecido."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Nenhum diretório temporário especificado."
 
@@ -1027,6 +1033,9 @@
 msgid "writable"
 msgstr "gravável"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "controlável"
 
diff --git a/po/ro.gmo b/po/ro.gmo
index 0c413c8..37c25b5 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index c101532..c5cf68a 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-08-16 01:10+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -954,6 +954,12 @@
 "Restricționează capacitățile permise (NULL înseamnă ORICE). Definirea "
 "acestei proprietăți preia o referință către obiectul GstCaps furnizat."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Niciun director temporar specificat."
 
@@ -1032,6 +1038,9 @@
 msgid "writable"
 msgstr "se poate scrie"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "se poate controla"
 
diff --git a/po/ru.gmo b/po/ru.gmo
index 89b1c71..68396ed 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 5db8141..3e0fa94 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-05-22 20:12+0400\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@mx.ru>\n"
@@ -931,6 +931,12 @@
 "Ограничить разрешённые возможности (NULL равносильно ANY). Установка этого "
 "свойства увеличивает количество ссылок для предоставленного объекта GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Не задана временный (Temp) каталог."
 
@@ -1009,6 +1015,9 @@
 msgid "writable"
 msgstr "записываемый"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "контролируемый"
 
diff --git a/po/rw.gmo b/po/rw.gmo
index a93935e..2de84b1 100644
--- a/po/rw.gmo
+++ b/po/rw.gmo
Binary files differ
diff --git a/po/rw.po b/po/rw.po
index 8dd6b21..1f35584 100644
--- a/po/rw.po
+++ b/po/rw.po
@@ -15,7 +15,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.8\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2005-04-04 10:55-0700\n"
 "Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
 "Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
@@ -1093,6 +1093,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -1187,6 +1193,9 @@
 msgid "writable"
 msgstr "umutwe"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr ""
 
diff --git a/po/sk.gmo b/po/sk.gmo
index 767311f..5fee22b 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index ff0f8fc..6e26dda 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-01-30 10:24+0100\n"
 "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -932,6 +932,12 @@
 "Obmedziť možné povolené schopnosti (NULOVÉ znamená ĽUBOVOĽNÉ). Nastavenie "
 "tejto vlastnosti berie referenciu na zadaný objekt GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Nebol určený dočasný priečinok (Temp)."
 
@@ -1010,6 +1016,9 @@
 msgid "writable"
 msgstr "zapisovateľné"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "ovládateľné"
 
diff --git a/po/sl.gmo b/po/sl.gmo
index ff7118b..64fc242 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index b077de4..96bb647 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-04-09 22:38+0100\n"
 "Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -929,6 +929,12 @@
 "Omeji možne dovoljene zmožnosti (NULL pomeni ANY, vse). S tem naslavljate "
 "priloženi predmet GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Začasna mapa ni določena."
 
@@ -1007,6 +1013,9 @@
 msgid "writable"
 msgstr "zapisljivo"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "nadzorljivo"
 
diff --git a/po/sq.gmo b/po/sq.gmo
index bd688ad..7350076 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index a5dbd72..6e260b3 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.4\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2004-08-07 23:46+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <begraj@hotmail.com>\n"
@@ -947,6 +947,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -1028,6 +1034,9 @@
 msgid "writable"
 msgstr "titulli"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr ""
 
diff --git a/po/sr.gmo b/po/sr.gmo
index 6afec5a..7f08279 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index e1bc31b..9fb17ea 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-06-18 20:12+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
@@ -930,6 +930,12 @@
 "Умањује могуће допуштене могућности (НИШТА значи БИЛО КОЈА). Постављање овог "
 "својства поставља као орјентир придодати објекат Гст могућности."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Није наведен привремени директоријум."
 
@@ -1009,6 +1015,9 @@
 msgid "writable"
 msgstr "уписив"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "управљив"
 
diff --git a/po/sv.gmo b/po/sv.gmo
index c7e8410..78668e9 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 83e6acb..afbd372 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-07-11 02:52+0200\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -929,6 +929,12 @@
 "Begränsa de möjliga tillåtna förmågorna (NULL betyder ANY). Inställning av "
 "egenskapen tar en referens till det angivna GstCaps-objektet."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Ingen temporärkatalog angiven."
 
@@ -1007,6 +1013,9 @@
 msgid "writable"
 msgstr "skrivbar"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "kontrollerbar"
 
diff --git a/po/tr.gmo b/po/tr.gmo
index 7a92a66..6e4f8f7 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 463c379..622f1e3 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2004-04-03 03:14+0300\n"
 "Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -947,6 +947,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr ""
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr ""
 
@@ -1028,6 +1034,9 @@
 msgid "writable"
 msgstr "başlık"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr ""
 
diff --git a/po/uk.gmo b/po/uk.gmo
index 47d7d09..3f4308b 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index f160b4f..8cbae83 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-05-22 07:45+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -928,6 +928,12 @@
 "Обмежити допустимі можливості (NULL означає ANY). Встановлення цієї "
 "властивості призводить до посилання на поставлений об'єкт GstCaps."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Не вказано каталог тимчасових даних."
 
@@ -1006,6 +1012,9 @@
 msgid "writable"
 msgstr "запис"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "контроль"
 
diff --git a/po/vi.gmo b/po/vi.gmo
index e13aefa..e9656a8 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 1610026..47960b8 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-06-30 09:40+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -938,6 +938,12 @@
 "Đặt thuộc tính này thì chấp nhận tham chiếu đến đối tượng GstCaps đã cung "
 "cấp."
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "Chưa xác định thư mục tạm thời."
 
@@ -1016,6 +1022,9 @@
 msgid "writable"
 msgstr "được ghi"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "điều khiển được"
 
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 40b9ae1..434e27f 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 fd4f49e..ae8e159 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.25.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2010-02-02 18:58+0800\n"
 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -914,6 +914,12 @@
 "限制所允许的功能 (NULL 表示无限制)。此属性可以为所提供的 GstCaps 对象设置一个"
 "关联应用。"
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "未指定临时目录。"
 
@@ -993,6 +999,9 @@
 msgid "writable"
 msgstr "可写"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "可控制"
 
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 06d0288..56a5369 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index a07ad80..9ea67c3 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -27,7 +27,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:00+0100\n"
+"POT-Creation-Date: 2015-03-16 19:04+0100\n"
 "PO-Revision-Date: 2014-06-08 00:22+0800\n"
 "Last-Translator: Wen Liao <wen.cf83@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -923,6 +923,12 @@
 "property takes a reference to the supplied GstCaps object."
 msgstr "限制允許的capabilities (NULL表示不限制),打開該屬性將會參照GstCaps物件"
 
+msgid "Caps Change Mode"
+msgstr ""
+
+msgid "Filter caps change behaviour"
+msgstr ""
+
 msgid "No Temp directory specified."
 msgstr "未指定暫存目錄"
 
@@ -1002,6 +1008,9 @@
 msgid "writable"
 msgstr "可寫"
 
+msgid "deprecated"
+msgstr ""
+
 msgid "controllable"
 msgstr "可控制"
 
diff --git a/scripts/gst-uninstalled b/scripts/gst-uninstalled
index 8f9f799..7b2b911 100755
--- a/scripts/gst-uninstalled
+++ b/scripts/gst-uninstalled
@@ -101,7 +101,7 @@
 done
 
 # GStreamer plugins bad libraries
-for path in basecamerabinsrc codecparsers uridownloader egl gl insertbin interfaces mpegts video base
+for path in adaptivedemux basecamerabinsrc codecparsers uridownloader egl gl insertbin interfaces mpegts video base
 do
   LD_LIBRARY_PATH=$GST/gst-plugins-bad/gst-libs/gst/$path/.libs:$LD_LIBRARY_PATH
   DYLD_LIBRARY_PATH=$GST/gst-plugins-bad/gst-libs/gst/$path/.libs:$DYLD_LIBRARY_PATH
@@ -157,7 +157,6 @@
 :$GST/gst-plugins-bad/sys\
 :$GST/gst-libav/ext/\
 :$GST/gst-ffmpeg/ext/\
-:$GST/gnonlin/gnl/.libs\
 :$GST/gst-omx/omx/.libs\
 :$GST/clutter-gst/clutter-gst/.libs\
 :$GST/gstreamer-vaapi/gst/vaapi/.libs\
@@ -165,6 +164,7 @@
 :$GST/farsight2/gst\
 :$GST/farsight2/transmitters\
 :$GST/libnice/gst\
+:$GST/gst-rpicamsrc/src/.libs\
 ${GST_PLUGIN_PATH:+:$GST_PLUGIN_PATH}"
 
 # don't use any system-installed plug-ins at all
@@ -180,7 +180,7 @@
 # in the system-configured man paths from man.config
 # this still doesn't make it work for the uninstalled case, since man goes
 # look for a man directory "nearby" instead of the directory I'm telling it to
-export MANPATH=$GST/gstreamer/tools:$GST_PREFIX/share/man:$MANPATH
+export MANPATH=$GST/gstreamer/tools:$GST_PREFIX/share/man:$GST/gst-editing-services/docs/man/:$MANPATH
 if [ -z "$PYTHON" ]; then PYTHON="python"; fi
 pythonver=`$PYTHON -c "import sys; print (sys.version[:3])"`
 pythonsites=`$PYTHON -c "import site; print(':'.join(site.getsitepackages()))"`
@@ -208,6 +208,8 @@
 export PATH=$GST/gst-devtools/validate/tools:$PATH
 export PKG_CONFIG_PATH=$GST/gst-devtools/validate/pkgconfig:$PKG_CONFIG_PATH
 export GST_VALIDATE_SCENARIOS_PATH=$GST/gst-devtools/validate/data:$GST_VALIDATE_SCENARIOS_PATH
+export GST_VALIDATE_APPS_DIR=$GST_VALIDATE_APPS_DIR:$GST/gst-editing-services/tests/validate/
+export GST_VALIDATE_PLUGIN_PATH=$GST_VALIDATE_PLUGIN_PATH:$GST/gst-devtools/validate/gst/plugins/
 
 if [ -d "$GST/gst-libav" -a -d "$GST/gst-ffmpeg" ]; then
   echo
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 867ea2d..f3ab937 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -212,6 +213,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -317,6 +322,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/benchmarks/Makefile.in b/tests/benchmarks/Makefile.in
index fb5c6a0..8f59e3c 100644
--- a/tests/benchmarks/Makefile.in
+++ b/tests/benchmarks/Makefile.in
@@ -94,6 +94,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -111,7 +112,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -253,6 +254,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -358,6 +363,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index f188b1a..5e7e5ab 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -44,6 +44,12 @@
 endif
 endif
 
+if !GST_DISABLE_GST_DEBUG
+PRINTF_CHECKS = gst/gstprintf
+else
+PRINTF_CHECKS =
+endif
+
 LIBSABI_CHECKS = libs/libsabi
 
 if HAVE_CXX
@@ -75,6 +81,7 @@
 	gst/gstutils				\
 	generic/sinks				\
 	elements/capsfilter			\
+	elements/concat				\
 	elements/fakesink			\
 	elements/fakesrc			\
 	elements/fdsrc			  	\
@@ -88,6 +95,7 @@
 	elements/queue                          \
 	elements/queue2                         \
 	elements/valve                          \
+	elements/streamiddemux			\
 	libs/baseparse				\
 	libs/basesrc				\
 	libs/basesink				\
@@ -123,6 +131,7 @@
 	gst/gstparamspecs			\
 	gst/gstpipeline				\
 	gst/gstpoll     			\
+	$(PRINTF_CHECKS)			\
 	gst/gstsegment				\
 	gst/gstsystemclock			\
 	gst/gstclock				\
@@ -193,6 +202,10 @@
 
 gst_gstutils_LDADD = $(LDADD) $(GSL_LIBS) $(GMP_LIBS)
 
+gst_gstprintf_LDADD = \
+	$(top_builddir)/gst/printf/libgstprintf.la \
+	$(LDADD)
+
 elements_fdsrc_CFLAGS=$(GST_OBJ_CFLAGS) $(AM_CFLAGS) \
 	-DTESTFILE=\"$(top_srcdir)/configure.ac\"
 elements_filesrc_CFLAGS=$(GST_OBJ_CFLAGS) $(AM_CFLAGS) \
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index 09d3319..b341a13 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -93,14 +93,14 @@
 	gst/gstiterator$(EXEEXT) gst/gstmessage$(EXEEXT) \
 	gst/gstminiobject$(EXEEXT) gst/gstobject$(EXEEXT) \
 	gst/gstpad$(EXEEXT) gst/gstparamspecs$(EXEEXT) \
-	gst/gstpipeline$(EXEEXT) gst/gstpoll$(EXEEXT) \
+	gst/gstpipeline$(EXEEXT) gst/gstpoll$(EXEEXT) $(am__EXEEXT_3) \
 	gst/gstsegment$(EXEEXT) gst/gstsystemclock$(EXEEXT) \
 	gst/gstclock$(EXEEXT) gst/gststructure$(EXEEXT) \
 	gst/gsttag$(EXEEXT) gst/gsttagsetter$(EXEEXT) \
 	gst/gsttask$(EXEEXT) gst/gsttoc$(EXEEXT) \
 	gst/gsttocsetter$(EXEEXT) gst/gstvalue$(EXEEXT) \
-	generic/states$(EXEEXT) $(am__EXEEXT_3) $(am__EXEEXT_4) \
-	$(am__EXEEXT_5) libs/adapter$(EXEEXT) libs/bitreader$(EXEEXT) \
+	generic/states$(EXEEXT) $(am__EXEEXT_4) $(am__EXEEXT_5) \
+	$(am__EXEEXT_6) libs/adapter$(EXEEXT) libs/bitreader$(EXEEXT) \
 	libs/bytereader$(EXEEXT) libs/bytewriter$(EXEEXT) \
 	libs/bitreader-noinline$(EXEEXT) \
 	libs/bytereader-noinline$(EXEEXT) \
@@ -119,6 +119,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -136,7 +137,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -156,12 +157,13 @@
 @GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@am__EXEEXT_1 = gst/gstabi$(EXEEXT)
 @HAVE_CXX_TRUE@am__EXEEXT_2 = gst/gstcpp$(EXEEXT) \
 @HAVE_CXX_TRUE@	libs/gstlibscpp$(EXEEXT)
-@GST_DISABLE_PARSE_FALSE@am__EXEEXT_3 = pipelines/simple-launch-lines$(EXEEXT) \
+@GST_DISABLE_GST_DEBUG_FALSE@am__EXEEXT_3 = gst/gstprintf$(EXEEXT)
+@GST_DISABLE_PARSE_FALSE@am__EXEEXT_4 = pipelines/simple-launch-lines$(EXEEXT) \
 @GST_DISABLE_PARSE_FALSE@	pipelines/cleanup$(EXEEXT) \
 @GST_DISABLE_PARSE_FALSE@	pipelines/parse-launch$(EXEEXT)
-@GST_DISABLE_PARSE_TRUE@am__EXEEXT_3 =  \
+@GST_DISABLE_PARSE_TRUE@am__EXEEXT_4 =  \
 @GST_DISABLE_PARSE_TRUE@	pipelines/parse-disabled$(EXEEXT)
-@GST_DISABLE_REGISTRY_FALSE@am__EXEEXT_4 = gst/gst$(EXEEXT) \
+@GST_DISABLE_REGISTRY_FALSE@am__EXEEXT_5 = gst/gst$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	gst/gstbin$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	gst/gstchildproxy$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	gst/gstcontext$(EXEEXT) \
@@ -178,6 +180,7 @@
 @GST_DISABLE_REGISTRY_FALSE@	gst/gstutils$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	generic/sinks$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	elements/capsfilter$(EXEEXT) \
+@GST_DISABLE_REGISTRY_FALSE@	elements/concat$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	elements/fakesink$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	elements/fakesrc$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	elements/fdsrc$(EXEEXT) \
@@ -191,6 +194,7 @@
 @GST_DISABLE_REGISTRY_FALSE@	elements/queue$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	elements/queue2$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	elements/valve$(EXEEXT) \
+@GST_DISABLE_REGISTRY_FALSE@	elements/streamiddemux$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	libs/baseparse$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	libs/basesrc$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	libs/basesink$(EXEEXT) \
@@ -201,7 +205,7 @@
 @GST_DISABLE_REGISTRY_FALSE@	pipelines/seek$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	pipelines/stress$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@	pipelines/queue-error$(EXEEXT)
-am__EXEEXT_5 = libs/libsabi$(EXEEXT)
+am__EXEEXT_6 = libs/libsabi$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 elements_capsfilter_SOURCES = elements/capsfilter.c
 am__dirstamp = $(am__leading_dot)dirstamp
@@ -215,6 +219,12 @@
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
 am__v_lt_1 = 
+elements_concat_SOURCES = elements/concat.c
+elements_concat_OBJECTS = elements/concat.$(OBJEXT)
+elements_concat_LDADD = $(LDADD)
+elements_concat_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
+	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1)
 elements_fakesink_SOURCES = elements/fakesink.c
 elements_fakesink_OBJECTS = elements/fakesink.$(OBJEXT)
 elements_fakesink_LDADD = $(LDADD)
@@ -290,6 +300,12 @@
 elements_selector_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
 	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1)
+elements_streamiddemux_SOURCES = elements/streamiddemux.c
+elements_streamiddemux_OBJECTS = elements/streamiddemux.$(OBJEXT)
+elements_streamiddemux_LDADD = $(LDADD)
+elements_streamiddemux_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
+	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1)
 elements_tee_SOURCES = elements/tee.c
 elements_tee_OBJECTS = elements/tee.$(OBJEXT)
 elements_tee_LDADD = $(LDADD)
@@ -518,6 +534,14 @@
 gst_gstpreset_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
 	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1)
+gst_gstprintf_SOURCES = gst/gstprintf.c
+gst_gstprintf_OBJECTS = gst/gstprintf.$(OBJEXT)
+am__DEPENDENCIES_2 = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
+	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1)
+gst_gstprintf_DEPENDENCIES =  \
+	$(top_builddir)/gst/printf/libgstprintf.la \
+	$(am__DEPENDENCIES_2)
 gst_gstquery_SOURCES = gst/gstquery.c
 gst_gstquery_OBJECTS = gst/gstquery.$(OBJEXT)
 gst_gstquery_LDADD = $(LDADD)
@@ -586,9 +610,6 @@
 	$(am__DEPENDENCIES_1)
 gst_gstutils_SOURCES = gst/gstutils.c
 gst_gstutils_OBJECTS = gst/gstutils.$(OBJEXT)
-am__DEPENDENCIES_2 = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
-	$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
-	$(am__DEPENDENCIES_1)
 gst_gstutils_DEPENDENCIES = $(am__DEPENDENCIES_2) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 gst_gstvalue_SOURCES = gst/gstvalue.c
@@ -827,10 +848,45 @@
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD   " $@;
 am__v_CXXLD_1 = 
-SOURCES = elements/capsfilter.c elements/fakesink.c elements/fakesrc.c \
-	elements/fdsrc.c elements/filesink.c elements/filesrc.c \
-	elements/funnel.c elements/identity.c elements/multiqueue.c \
-	elements/queue.c elements/queue2.c elements/selector.c \
+SOURCES = elements/capsfilter.c elements/concat.c elements/fakesink.c \
+	elements/fakesrc.c elements/fdsrc.c elements/filesink.c \
+	elements/filesrc.c elements/funnel.c elements/identity.c \
+	elements/multiqueue.c elements/queue.c elements/queue2.c \
+	elements/selector.c elements/streamiddemux.c elements/tee.c \
+	elements/valve.c generic/sinks.c generic/states.c gst/gst.c \
+	gst/gstabi.c gst/gstatomicqueue.c gst/gstbin.c gst/gstbuffer.c \
+	gst/gstbufferlist.c gst/gstbufferpool.c gst/gstbus.c \
+	gst/gstcaps.c gst/gstcapsfeatures.c gst/gstchildproxy.c \
+	gst/gstclock.c gst/gstcontext.c gst/gstcontroller.c \
+	$(gst_gstcpp_SOURCES) gst/gstdatetime.c gst/gstdevice.c \
+	gst/gstelement.c gst/gstelementfactory.c gst/gstevent.c \
+	gst/gstghostpad.c gst/gstinfo.c gst/gstiterator.c \
+	gst/gstmemory.c gst/gstmessage.c gst/gstmeta.c \
+	gst/gstminiobject.c gst/gstobject.c gst/gstpad.c \
+	gst/gstparamspecs.c gst/gstpipeline.c gst/gstplugin.c \
+	gst/gstpoll.c gst/gstpreset.c gst/gstprintf.c gst/gstquery.c \
+	gst/gstregistry.c gst/gstsegment.c gst/gststructure.c \
+	gst/gstsystemclock.c gst/gsttag.c gst/gsttagsetter.c \
+	gst/gsttask.c gst/gsttoc.c gst/gsttocsetter.c gst/gsturi.c \
+	gst/gstutils.c gst/gstvalue.c libs/adapter.c libs/baseparse.c \
+	libs/basesink.c libs/basesrc.c libs/bitreader.c \
+	libs/bitreader-noinline.c libs/bytereader.c \
+	libs/bytereader-noinline.c libs/bytewriter.c \
+	libs/bytewriter-noinline.c libs/collectpads.c \
+	libs/controller.c libs/flowcombiner.c \
+	$(libs_gstlibscpp_SOURCES) libs/gstnetclientclock.c \
+	libs/gstnettimeprovider.c libs/gsttestclock.c libs/libsabi.c \
+	libs/queuearray.c libs/sparsefile.c libs/transform1.c \
+	libs/typefindhelper.c pipelines/cleanup.c \
+	pipelines/parse-disabled.c pipelines/parse-launch.c \
+	pipelines/queue-error.c pipelines/seek.c \
+	pipelines/simple-launch-lines.c pipelines/stress.c \
+	tools/gstinspect.c
+DIST_SOURCES = elements/capsfilter.c elements/concat.c \
+	elements/fakesink.c elements/fakesrc.c elements/fdsrc.c \
+	elements/filesink.c elements/filesrc.c elements/funnel.c \
+	elements/identity.c elements/multiqueue.c elements/queue.c \
+	elements/queue2.c elements/selector.c elements/streamiddemux.c \
 	elements/tee.c elements/valve.c generic/sinks.c \
 	generic/states.c gst/gst.c gst/gstabi.c gst/gstatomicqueue.c \
 	gst/gstbin.c gst/gstbuffer.c gst/gstbufferlist.c \
@@ -843,45 +899,13 @@
 	gst/gstmessage.c gst/gstmeta.c gst/gstminiobject.c \
 	gst/gstobject.c gst/gstpad.c gst/gstparamspecs.c \
 	gst/gstpipeline.c gst/gstplugin.c gst/gstpoll.c \
-	gst/gstpreset.c gst/gstquery.c gst/gstregistry.c \
-	gst/gstsegment.c gst/gststructure.c gst/gstsystemclock.c \
-	gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
-	gst/gsttocsetter.c gst/gsturi.c gst/gstutils.c gst/gstvalue.c \
-	libs/adapter.c libs/baseparse.c libs/basesink.c libs/basesrc.c \
-	libs/bitreader.c libs/bitreader-noinline.c libs/bytereader.c \
-	libs/bytereader-noinline.c libs/bytewriter.c \
-	libs/bytewriter-noinline.c libs/collectpads.c \
-	libs/controller.c libs/flowcombiner.c \
-	$(libs_gstlibscpp_SOURCES) libs/gstnetclientclock.c \
-	libs/gstnettimeprovider.c libs/gsttestclock.c libs/libsabi.c \
-	libs/queuearray.c libs/sparsefile.c libs/transform1.c \
-	libs/typefindhelper.c pipelines/cleanup.c \
-	pipelines/parse-disabled.c pipelines/parse-launch.c \
-	pipelines/queue-error.c pipelines/seek.c \
-	pipelines/simple-launch-lines.c pipelines/stress.c \
-	tools/gstinspect.c
-DIST_SOURCES = elements/capsfilter.c elements/fakesink.c \
-	elements/fakesrc.c elements/fdsrc.c elements/filesink.c \
-	elements/filesrc.c elements/funnel.c elements/identity.c \
-	elements/multiqueue.c elements/queue.c elements/queue2.c \
-	elements/selector.c elements/tee.c elements/valve.c \
-	generic/sinks.c generic/states.c gst/gst.c gst/gstabi.c \
-	gst/gstatomicqueue.c gst/gstbin.c gst/gstbuffer.c \
-	gst/gstbufferlist.c gst/gstbufferpool.c gst/gstbus.c \
-	gst/gstcaps.c gst/gstcapsfeatures.c gst/gstchildproxy.c \
-	gst/gstclock.c gst/gstcontext.c gst/gstcontroller.c \
-	$(gst_gstcpp_SOURCES) gst/gstdatetime.c gst/gstdevice.c \
-	gst/gstelement.c gst/gstelementfactory.c gst/gstevent.c \
-	gst/gstghostpad.c gst/gstinfo.c gst/gstiterator.c \
-	gst/gstmemory.c gst/gstmessage.c gst/gstmeta.c \
-	gst/gstminiobject.c gst/gstobject.c gst/gstpad.c \
-	gst/gstparamspecs.c gst/gstpipeline.c gst/gstplugin.c \
-	gst/gstpoll.c gst/gstpreset.c gst/gstquery.c gst/gstregistry.c \
-	gst/gstsegment.c gst/gststructure.c gst/gstsystemclock.c \
-	gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
-	gst/gsttocsetter.c gst/gsturi.c gst/gstutils.c gst/gstvalue.c \
-	libs/adapter.c libs/baseparse.c libs/basesink.c libs/basesrc.c \
-	libs/bitreader.c libs/bitreader-noinline.c libs/bytereader.c \
+	gst/gstpreset.c gst/gstprintf.c gst/gstquery.c \
+	gst/gstregistry.c gst/gstsegment.c gst/gststructure.c \
+	gst/gstsystemclock.c gst/gsttag.c gst/gsttagsetter.c \
+	gst/gsttask.c gst/gsttoc.c gst/gsttocsetter.c gst/gsturi.c \
+	gst/gstutils.c gst/gstvalue.c libs/adapter.c libs/baseparse.c \
+	libs/basesink.c libs/basesrc.c libs/bitreader.c \
+	libs/bitreader-noinline.c libs/bytereader.c \
 	libs/bytereader-noinline.c libs/bytewriter.c \
 	libs/bytewriter-noinline.c libs/collectpads.c \
 	libs/controller.c libs/flowcombiner.c \
@@ -1133,6 +1157,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -1238,6 +1266,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -1428,6 +1457,8 @@
 # Do not run the abi test in case any option which causes the API to change has
 # been used
 @GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@ABI_CHECKS = gst/gstabi
+@GST_DISABLE_GST_DEBUG_FALSE@PRINTF_CHECKS = gst/gstprintf
+@GST_DISABLE_GST_DEBUG_TRUE@PRINTF_CHECKS = 
 LIBSABI_CHECKS = libs/libsabi
 @HAVE_CXX_FALSE@CXX_CHECKS = 
 @HAVE_CXX_TRUE@CXX_CHECKS = gst/gstcpp libs/gstlibscpp
@@ -1449,6 +1480,7 @@
 @GST_DISABLE_REGISTRY_FALSE@	gst/gstutils				\
 @GST_DISABLE_REGISTRY_FALSE@	generic/sinks				\
 @GST_DISABLE_REGISTRY_FALSE@	elements/capsfilter			\
+@GST_DISABLE_REGISTRY_FALSE@	elements/concat				\
 @GST_DISABLE_REGISTRY_FALSE@	elements/fakesink			\
 @GST_DISABLE_REGISTRY_FALSE@	elements/fakesrc			\
 @GST_DISABLE_REGISTRY_FALSE@	elements/fdsrc			  	\
@@ -1462,6 +1494,7 @@
 @GST_DISABLE_REGISTRY_FALSE@	elements/queue                          \
 @GST_DISABLE_REGISTRY_FALSE@	elements/queue2                         \
 @GST_DISABLE_REGISTRY_FALSE@	elements/valve                          \
+@GST_DISABLE_REGISTRY_FALSE@	elements/streamiddemux			\
 @GST_DISABLE_REGISTRY_FALSE@	libs/baseparse				\
 @GST_DISABLE_REGISTRY_FALSE@	libs/basesrc				\
 @GST_DISABLE_REGISTRY_FALSE@	libs/basesink				\
@@ -1510,6 +1543,10 @@
 gst_gstcpp_SOURCES = gst/gstcpp.cc
 libs_gstlibscpp_SOURCES = libs/gstlibscpp.cc
 gst_gstutils_LDADD = $(LDADD) $(GSL_LIBS) $(GMP_LIBS)
+gst_gstprintf_LDADD = \
+	$(top_builddir)/gst/printf/libgstprintf.la \
+	$(LDADD)
+
 elements_fdsrc_CFLAGS = $(GST_OBJ_CFLAGS) $(AM_CFLAGS) \
 	-DTESTFILE=\"$(top_srcdir)/configure.ac\"
 
@@ -1629,6 +1666,12 @@
 elements/capsfilter$(EXEEXT): $(elements_capsfilter_OBJECTS) $(elements_capsfilter_DEPENDENCIES) $(EXTRA_elements_capsfilter_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/capsfilter$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_capsfilter_OBJECTS) $(elements_capsfilter_LDADD) $(LIBS)
+elements/concat.$(OBJEXT): elements/$(am__dirstamp) \
+	elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/concat$(EXEEXT): $(elements_concat_OBJECTS) $(elements_concat_DEPENDENCIES) $(EXTRA_elements_concat_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/concat$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(elements_concat_OBJECTS) $(elements_concat_LDADD) $(LIBS)
 elements/fakesink.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -1695,6 +1738,12 @@
 elements/selector$(EXEEXT): $(elements_selector_OBJECTS) $(elements_selector_DEPENDENCIES) $(EXTRA_elements_selector_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/selector$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_selector_OBJECTS) $(elements_selector_LDADD) $(LIBS)
+elements/streamiddemux.$(OBJEXT): elements/$(am__dirstamp) \
+	elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/streamiddemux$(EXEEXT): $(elements_streamiddemux_OBJECTS) $(elements_streamiddemux_DEPENDENCIES) $(EXTRA_elements_streamiddemux_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/streamiddemux$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(elements_streamiddemux_OBJECTS) $(elements_streamiddemux_LDADD) $(LIBS)
 elements/tee.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -1934,6 +1983,12 @@
 gst/gstpreset$(EXEEXT): $(gst_gstpreset_OBJECTS) $(gst_gstpreset_DEPENDENCIES) $(EXTRA_gst_gstpreset_DEPENDENCIES) gst/$(am__dirstamp)
 	@rm -f gst/gstpreset$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(gst_gstpreset_OBJECTS) $(gst_gstpreset_LDADD) $(LIBS)
+gst/gstprintf.$(OBJEXT): gst/$(am__dirstamp) \
+	gst/$(DEPDIR)/$(am__dirstamp)
+
+gst/gstprintf$(EXEEXT): $(gst_gstprintf_OBJECTS) $(gst_gstprintf_DEPENDENCIES) $(EXTRA_gst_gstprintf_DEPENDENCIES) gst/$(am__dirstamp)
+	@rm -f gst/gstprintf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(gst_gstprintf_OBJECTS) $(gst_gstprintf_LDADD) $(LIBS)
 gst/gstquery.$(OBJEXT): gst/$(am__dirstamp) \
 	gst/$(DEPDIR)/$(am__dirstamp)
 
@@ -2224,6 +2279,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/capsfilter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/concat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_fdsrc-fdsrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_filesrc-filesrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/fakesink.Po@am__quote@
@@ -2235,6 +2291,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/queue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/queue2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/selector.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/streamiddemux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/tee.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/valve.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@generic/$(DEPDIR)/sinks.Po@am__quote@
@@ -2273,6 +2330,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstplugin.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstpoll.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstpreset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstquery.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstregistry.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstsegment.Po@am__quote@
@@ -2759,6 +2817,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)
+gst/gstprintf.log: gst/gstprintf$(EXEEXT)
+	@p='gst/gstprintf$(EXEEXT)'; \
+	b='gst/gstprintf'; \
+	$(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)
 gst/gstsegment.log: gst/gstsegment$(EXEEXT)
 	@p='gst/gstsegment$(EXEEXT)'; \
 	b='gst/gstsegment'; \
@@ -2983,6 +3048,13 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/concat.log: elements/concat$(EXEEXT)
+	@p='elements/concat$(EXEEXT)'; \
+	b='elements/concat'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 elements/fakesink.log: elements/fakesink$(EXEEXT)
 	@p='elements/fakesink$(EXEEXT)'; \
 	b='elements/fakesink'; \
@@ -3074,6 +3146,13 @@
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/streamiddemux.log: elements/streamiddemux$(EXEEXT)
+	@p='elements/streamiddemux$(EXEEXT)'; \
+	b='elements/streamiddemux'; \
+	$(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/baseparse.log: libs/baseparse$(EXEEXT)
 	@p='libs/baseparse$(EXEEXT)'; \
 	b='libs/baseparse'; \
@@ -3480,7 +3559,8 @@
 
 # valgrind any given test by running make test.valgrind
 %.valgrind: %
-	@$(TESTS_ENVIRONMENT)					\
+	@valgrind_log=$(subst /,-,$*-valgrind.log);		\
+	$(TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=360					\
 	G_SLICE=always-malloc					\
 	$(LIBTOOL) --mode=execute				\
@@ -3489,12 +3569,12 @@
 	--tool=memcheck --leak-check=full --trace-children=yes	\
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
-	./$* 2>&1 | tee valgrind.log
-	@if grep "==" valgrind.log > /dev/null 2>&1; then	\
-	    rm valgrind.log;					\
+	./$* 2>&1 | tee $$valgrind_log ;			\
+	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	    rm $$valgrind_log;					\
 	    exit 1;						\
-	fi
-	@rm valgrind.log
+	fi ;							\
+	rm $$valgrind_log
 
 # valgrind any given test and generate suppressions for it
 %.valgrind.gen-suppressions: %
@@ -3581,19 +3661,13 @@
 # valgrind all tests
 valgrind: $(TESTS)
 	@echo "Valgrinding tests ..."
-	@failed=0;							\
+	@failed=0; valgrind_targets="";					\
 	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
-		$(MAKE) $$t.valgrind;					\
-		if test "$$?" -ne 0; then                               \
-			echo "Valgrind error for test $$t";		\
-			failed=`expr $$failed + 1`;			\
-			whicht="$$whicht $$t";				\
-		fi;							\
+	  valgrind_targets="$$valgrind_targets $$t.valgrind";		\
 	done;								\
-	if test "$$failed" -ne 0; then					\
-		echo "$$failed tests had leaks or errors under valgrind:";	\
-		echo "$$whicht";					\
-		false;							\
+	if ! $(MAKE) $$valgrind_targets ; then				\
+	  echo "Some tests had leaks or errors under valgrind";		\
+	  false;							\
 	fi
 
 # valgrind all tests until failure
@@ -3643,6 +3717,9 @@
 	  do echo Inspecting $$e;					\
 	     $(GST_INSPECT) $$e > /dev/null 2>&1; done
 
+# build all tests
+build-checks: $(TESTS)
+
 help:
 	@echo
 	@echo "make check                         -- run all checks"
@@ -3665,6 +3742,7 @@
 	@echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions"
 	@echo "                                               and save to suppressions.log"
 	@echo "make inspect                       -- inspect all plugin features"
+	@echo "make build-checks                  -- build all checks (but don't run them)"
 	@echo
 	@echo
 	@echo "Additionally, you can use the GST_CHECKS environment variable to"
diff --git a/tests/check/elements/capsfilter.c b/tests/check/elements/capsfilter.c
index 39bc6bd..008fee9 100644
--- a/tests/check/elements/capsfilter.c
+++ b/tests/check/elements/capsfilter.c
@@ -36,6 +36,16 @@
     GST_STATIC_CAPS (CAPS_TEMPLATE_STRING)
     );
 
+static GstStaticPadTemplate any_sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate any_srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
 static GList *events = NULL;
 
 static gboolean
@@ -325,6 +335,141 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_caps_change_mode_delayed)
+{
+  GstElement *filter;
+  GstPad *mysinkpad;
+  GstPad *mysrcpad;
+  GstSegment segment;
+  GstEvent *event;
+  GstCaps *caps;
+
+  filter = gst_check_setup_element ("capsfilter");
+  mysinkpad = gst_check_setup_sink_pad (filter, &any_sinktemplate);
+  gst_pad_set_event_function (mysinkpad, test_pad_eventfunc);
+  gst_pad_set_active (mysinkpad, TRUE);
+  mysrcpad = gst_check_setup_src_pad (filter, &any_srctemplate);
+  gst_pad_set_active (mysrcpad, TRUE);
+
+  g_object_set (filter, "caps-change-mode", 1, NULL);
+
+  fail_unless_equals_int (gst_element_set_state (filter, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* push the stream start */
+  fail_unless (gst_pad_push_event (mysrcpad,
+          gst_event_new_stream_start ("test-stream")));
+  fail_unless_equals_int (g_list_length (events), 1);
+  event = events->data;
+  fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_STREAM_START);
+  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
+  events = NULL;
+
+  /* push a caps */
+  caps = gst_caps_from_string ("audio/x-raw, "
+      "channels=(int)2, " "rate = (int)44100");
+  g_object_set (filter, "caps", caps, NULL);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
+  gst_caps_unref (caps);
+  fail_unless_equals_int (g_list_length (events), 1);
+  event = events->data;
+  fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_CAPS);
+  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
+  events = NULL;
+
+  /* push a segment */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+  fail_unless_equals_int (g_list_length (events), 1);
+  event = events->data;
+  fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT);
+  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
+  events = NULL;
+
+  /* push a buffer */
+  fail_unless_equals_int (gst_pad_push (mysrcpad,
+          gst_buffer_new_wrapped (g_malloc0 (1024), 1024)), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+  buffers = NULL;
+
+  /* Set new incompatible caps */
+  caps = gst_caps_from_string ("audio/x-raw, "
+      "channels=(int)2, " "rate = (int)48000");
+  g_object_set (filter, "caps", caps, NULL);
+
+  /* push a buffer without updating the caps */
+  fail_unless_equals_int (gst_pad_push (mysrcpad,
+          gst_buffer_new_wrapped (g_malloc0 (1024), 1024)), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+  buffers = NULL;
+
+  /* No caps event here, we're still at the old caps */
+  fail_unless (g_list_length (events) == 0);
+
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
+  gst_caps_unref (caps);
+  fail_unless_equals_int (g_list_length (events), 1);
+  event = events->data;
+  fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_CAPS);
+  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
+  events = NULL;
+
+  /* Push a new buffer, now we have the new caps */
+  fail_unless_equals_int (gst_pad_push (mysrcpad,
+          gst_buffer_new_wrapped (g_malloc0 (1024), 1024)), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+  buffers = NULL;
+
+  /* Set back old caps */
+  caps = gst_caps_from_string ("audio/x-raw, "
+      "channels=(int)2, " "rate = (int)44100");
+  g_object_set (filter, "caps", caps, NULL);
+  gst_caps_unref (caps);
+
+  /* push a buffer without updating the caps */
+  fail_unless_equals_int (gst_pad_push (mysrcpad,
+          gst_buffer_new_wrapped (g_malloc0 (1024), 1024)), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+  buffers = NULL;
+
+  /* Now set new caps again but the old caps are currently pushed */
+  caps = gst_caps_from_string ("audio/x-raw, "
+      "channels=(int)2, " "rate = (int)48000");
+  g_object_set (filter, "caps", caps, NULL);
+  gst_caps_unref (caps);
+  /* Race condition simulation here! */
+  caps = gst_caps_from_string ("audio/x-raw, "
+      "channels=(int)2, " "rate = (int)44100");
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
+  gst_caps_unref (caps);
+  fail_unless_equals_int (g_list_length (events), 1);
+  event = events->data;
+  fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_CAPS);
+  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
+  events = NULL;
+
+  fail_unless_equals_int (gst_pad_push (mysrcpad,
+          gst_buffer_new_wrapped (g_malloc0 (1024), 1024)), GST_FLOW_OK);
+  fail_unless_equals_int (g_list_length (buffers), 1);
+  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+  buffers = NULL;
+
+  /* cleanup */
+  GST_DEBUG ("cleanup");
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (filter);
+  gst_check_teardown_sink_pad (filter);
+  gst_check_teardown_element (filter);
+}
+
+GST_END_TEST;
+
 static Suite *
 capsfilter_suite (void)
 {
@@ -337,6 +482,7 @@
   tcase_add_test (tc_chain, test_caps_query);
   tcase_add_test (tc_chain, test_accept_caps_query);
   tcase_add_test (tc_chain, test_push_pending_events);
+  tcase_add_test (tc_chain, test_caps_change_mode_delayed);
 
   return s;
 }
diff --git a/tests/check/elements/concat.c b/tests/check/elements/concat.c
new file mode 100644
index 0000000..43054dc
--- /dev/null
+++ b/tests/check/elements/concat.c
@@ -0,0 +1,308 @@
+/* GStreamer unit tests for concat
+ *
+ * Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+*/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+
+#define N_BUFFERS 10
+static gboolean got_eos;
+static guint buffer_count;
+static GstSegment current_segment;
+static guint64 current_bytes;
+
+static GstFlowReturn
+output_chain_time (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstClockTime timestamp;
+  guint8 b;
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  fail_unless_equals_int64 (timestamp,
+      (buffer_count % N_BUFFERS) * 25 * GST_MSECOND);
+  timestamp =
+      gst_segment_to_stream_time (&current_segment, GST_FORMAT_TIME, timestamp);
+  fail_unless_equals_int64 (timestamp,
+      (buffer_count % N_BUFFERS) * 25 * GST_MSECOND);
+
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  timestamp =
+      gst_segment_to_running_time (&current_segment, GST_FORMAT_TIME,
+      timestamp);
+  fail_unless_equals_int64 (timestamp, buffer_count * 25 * GST_MSECOND);
+
+  gst_buffer_extract (buffer, 0, &b, 1);
+  fail_unless_equals_int (b, buffer_count % N_BUFFERS);
+
+  buffer_count++;
+  gst_buffer_unref (buffer);
+  return GST_FLOW_OK;
+}
+
+static gboolean
+output_event_time (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      gst_segment_init (&current_segment, GST_FORMAT_UNDEFINED);
+      break;
+    case GST_EVENT_SEGMENT:
+      gst_event_copy_segment (event, &current_segment);
+      break;
+    case GST_EVENT_EOS:
+      got_eos = TRUE;
+      break;
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+  return TRUE;
+}
+
+static gpointer
+push_buffers_time (gpointer data)
+{
+  GstSegment segment;
+  GstPad *pad = data;
+  gint i;
+  GstClockTime timestamp = 0;
+
+  gst_pad_send_event (pad, gst_event_new_stream_start ("test"));
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  gst_pad_send_event (pad, gst_event_new_segment (&segment));
+
+  for (i = 0; i < N_BUFFERS; i++) {
+    GstBuffer *buf = gst_buffer_new_and_alloc (1000);
+
+    gst_buffer_memset (buf, 0, i, 1);
+
+    GST_BUFFER_TIMESTAMP (buf) = timestamp;
+    timestamp += 25 * GST_MSECOND;
+    GST_BUFFER_DURATION (buf) = timestamp - GST_BUFFER_TIMESTAMP (buf);
+
+    fail_unless (gst_pad_chain (pad, buf) == GST_FLOW_OK);
+  }
+  gst_pad_send_event (pad, gst_event_new_eos ());
+
+  return NULL;
+}
+
+GST_START_TEST (test_concat_simple_time)
+{
+  GstElement *concat;
+  GstPad *sink1, *sink2, *sink3, *src, *output_sink;
+  GThread *thread1, *thread2, *thread3;
+
+  got_eos = FALSE;
+  buffer_count = 0;
+  gst_segment_init (&current_segment, GST_FORMAT_UNDEFINED);
+
+  concat = gst_element_factory_make ("concat", NULL);
+  fail_unless (concat != NULL);
+
+  sink1 = gst_element_get_request_pad (concat, "sink_%u");
+  fail_unless (sink1 != NULL);
+
+  sink2 = gst_element_get_request_pad (concat, "sink_%u");
+  fail_unless (sink2 != NULL);
+
+  sink3 = gst_element_get_request_pad (concat, "sink_%u");
+  fail_unless (sink3 != NULL);
+
+  src = gst_element_get_static_pad (concat, "src");
+  output_sink = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (output_sink != NULL);
+  fail_unless (gst_pad_link (src, output_sink) == GST_PAD_LINK_OK);
+
+  gst_pad_set_chain_function (output_sink, output_chain_time);
+  gst_pad_set_event_function (output_sink, output_event_time);
+
+  gst_pad_set_active (output_sink, TRUE);
+  fail_unless (gst_element_set_state (concat,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS);
+
+  thread1 = g_thread_new ("thread1", (GThreadFunc) push_buffers_time, sink1);
+  thread2 = g_thread_new ("thread2", (GThreadFunc) push_buffers_time, sink2);
+  thread3 = g_thread_new ("thread3", (GThreadFunc) push_buffers_time, sink3);
+
+  g_thread_join (thread1);
+  g_thread_join (thread2);
+  g_thread_join (thread3);
+
+  fail_unless (got_eos);
+  fail_unless_equals_int (buffer_count, 3 * N_BUFFERS);
+
+  gst_element_set_state (concat, GST_STATE_NULL);
+  gst_pad_unlink (src, output_sink);
+  gst_object_unref (src);
+  gst_element_release_request_pad (concat, sink1);
+  gst_object_unref (sink1);
+  gst_element_release_request_pad (concat, sink2);
+  gst_object_unref (sink2);
+  gst_element_release_request_pad (concat, sink3);
+  gst_object_unref (sink3);
+  gst_pad_set_active (output_sink, FALSE);
+  gst_object_unref (output_sink);
+  gst_object_unref (concat);
+}
+
+GST_END_TEST;
+
+static GstFlowReturn
+output_chain_bytes (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  guint8 b;
+
+  fail_unless (current_bytes >= current_segment.start);
+  fail_unless_equals_int64 (current_segment.start,
+      (buffer_count / N_BUFFERS) * 1000 * N_BUFFERS);
+
+  gst_buffer_extract (buffer, 0, &b, 1);
+  fail_unless_equals_int (b, buffer_count % N_BUFFERS);
+
+  current_bytes += gst_buffer_get_size (buffer), buffer_count++;
+  gst_buffer_unref (buffer);
+  return GST_FLOW_OK;
+}
+
+static gboolean
+output_event_bytes (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      gst_segment_init (&current_segment, GST_FORMAT_UNDEFINED);
+      break;
+    case GST_EVENT_SEGMENT:
+      gst_event_copy_segment (event, &current_segment);
+      break;
+    case GST_EVENT_EOS:
+      got_eos = TRUE;
+      break;
+    default:
+      break;
+  }
+
+  gst_event_unref (event);
+  return TRUE;
+}
+
+static gpointer
+push_buffers_bytes (gpointer data)
+{
+  GstSegment segment;
+  GstPad *pad = data;
+  gint i;
+
+  gst_pad_send_event (pad, gst_event_new_stream_start ("test"));
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  gst_pad_send_event (pad, gst_event_new_segment (&segment));
+
+  for (i = 0; i < N_BUFFERS; i++) {
+    GstBuffer *buf = gst_buffer_new_and_alloc (1000);
+    gst_buffer_memset (buf, 0, i, 1);
+
+    fail_unless (gst_pad_chain (pad, buf) == GST_FLOW_OK);
+  }
+  gst_pad_send_event (pad, gst_event_new_eos ());
+
+  return NULL;
+}
+
+GST_START_TEST (test_concat_simple_bytes)
+{
+  GstElement *concat;
+  GstPad *sink1, *sink2, *sink3, *src, *output_sink;
+  GThread *thread1, *thread2, *thread3;
+
+  got_eos = FALSE;
+  buffer_count = 0;
+  current_bytes = 0;
+  gst_segment_init (&current_segment, GST_FORMAT_UNDEFINED);
+
+  concat = gst_element_factory_make ("concat", NULL);
+  fail_unless (concat != NULL);
+
+  sink1 = gst_element_get_request_pad (concat, "sink_%u");
+  fail_unless (sink1 != NULL);
+
+  sink2 = gst_element_get_request_pad (concat, "sink_%u");
+  fail_unless (sink2 != NULL);
+
+  sink3 = gst_element_get_request_pad (concat, "sink_%u");
+  fail_unless (sink3 != NULL);
+
+  src = gst_element_get_static_pad (concat, "src");
+  output_sink = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (output_sink != NULL);
+  fail_unless (gst_pad_link (src, output_sink) == GST_PAD_LINK_OK);
+
+  gst_pad_set_chain_function (output_sink, output_chain_bytes);
+  gst_pad_set_event_function (output_sink, output_event_bytes);
+
+  gst_pad_set_active (output_sink, TRUE);
+  fail_unless (gst_element_set_state (concat,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS);
+
+  thread1 = g_thread_new ("thread1", (GThreadFunc) push_buffers_bytes, sink1);
+  thread2 = g_thread_new ("thread2", (GThreadFunc) push_buffers_bytes, sink2);
+  thread3 = g_thread_new ("thread3", (GThreadFunc) push_buffers_bytes, sink3);
+
+  g_thread_join (thread1);
+  g_thread_join (thread2);
+  g_thread_join (thread3);
+
+  fail_unless (got_eos);
+  fail_unless_equals_int (buffer_count, 3 * N_BUFFERS);
+  fail_unless_equals_int64 (current_bytes, 3 * N_BUFFERS * 1000);
+
+  gst_element_set_state (concat, GST_STATE_NULL);
+  gst_pad_unlink (src, output_sink);
+  gst_object_unref (src);
+  gst_element_release_request_pad (concat, sink1);
+  gst_object_unref (sink1);
+  gst_element_release_request_pad (concat, sink2);
+  gst_object_unref (sink2);
+  gst_element_release_request_pad (concat, sink3);
+  gst_object_unref (sink3);
+  gst_pad_set_active (output_sink, FALSE);
+  gst_object_unref (output_sink);
+  gst_object_unref (concat);
+}
+
+GST_END_TEST;
+
+static Suite *
+concat_suite (void)
+{
+  Suite *s = suite_create ("concat");
+  TCase *tc_chain;
+
+  tc_chain = tcase_create ("concat");
+  tcase_add_test (tc_chain, test_concat_simple_time);
+  tcase_add_test (tc_chain, test_concat_simple_bytes);
+  suite_add_tcase (s, tc_chain);
+
+  return s;
+}
+
+GST_CHECK_MAIN (concat);
diff --git a/tests/check/elements/fdsrc.c b/tests/check/elements/fdsrc.c
index 12e9d10..ffe6194 100644
--- a/tests/check/elements/fdsrc.c
+++ b/tests/check/elements/fdsrc.c
@@ -24,6 +24,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <errno.h>
 
 #include <gst/check/gstcheck.h>
 
@@ -87,9 +88,19 @@
           GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
       "could not set to playing");
 
+#if defined (G_OS_UNIX) && defined (O_NONBLOCK)
+  {
+    int flags;
+
+    flags = fcntl (pipe_fd[1], F_GETFL, 0);
+    fcntl (pipe_fd[1], F_SETFL, flags | O_NONBLOCK);
+  }
+#endif
+
   memset (data, 0, 4096);
   while (!have_eos) {
-    fail_if (write (pipe_fd[1], data, 4096) < 0);
+    int ret = write (pipe_fd[1], data, 4096);
+    fail_if (ret < 0 && errno != EAGAIN);
     g_usleep (100);
   }
 
diff --git a/tests/check/elements/funnel.c b/tests/check/elements/funnel.c
index e5fe75f..313dd48 100644
--- a/tests/check/elements/funnel.c
+++ b/tests/check/elements/funnel.c
@@ -243,6 +243,135 @@
 
 GST_END_TEST;
 
+guint nb_stream_start_event = 0;
+guint nb_caps_event = 0;
+guint nb_segment_event = 0;
+guint nb_gap_event = 0;
+
+static GstPadProbeReturn
+event_counter (GstObject * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
+
+  fail_unless (event != NULL);
+  fail_unless (GST_IS_EVENT (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_STREAM_START:
+      ++nb_stream_start_event;
+      break;
+    case GST_EVENT_CAPS:
+      ++nb_caps_event;
+      break;
+    case GST_EVENT_SEGMENT:
+      ++nb_segment_event;
+      break;
+    case GST_EVENT_GAP:
+      ++nb_gap_event;
+      break;
+    default:
+      break;
+  }
+
+  return GST_PAD_PROBE_OK;
+}
+
+/*
+ * Push GAP events into funnel to forward sticky events.
+ * Funnel element shoud also treat GAP events likes buffers.
+ * For example, funnel can be used for internal subtitle with streamiddemux. 
+ *  +--------------------------------------------------------------------------+
+ *  | playbin                               +--------------------------------+ |
+ *  | +--------------+  +----------------+  | +------------+     playsink    | |
+ *  | | uridecodebin |  | input-selector |  | | video-sink |                 | |
+ *  | |              |  +----------------+  | +------------+                 | |
+ *  | |              |                      |                                | |
+ *  | |              |  +----------------+  | +------------+                 | |
+ *  | |              |  | input-selector |  | | audio-sink |                 | |
+ *  | |              |  +----------------+  | +------------+                 | |
+ *  | |              |                      |                                | |
+ *  | |              |  +----------------+  | +---------------+ +----------+ | |
+ *  | |              |  | funnel         |  | | streamiddemux | | appsink0 | | |
+ *  | +--------------+  +----------------+  | +---------------+ +----------+ | |
+ *  |                                       |                   +----------+ | |
+ *  |                                       |                   | appsinkn | | |
+ *  |                                       |                   +----------+ | |
+ *  |                                       +--------------------------------+ |
+ *  +--------------------------------------------------------------------------+
+ * If no data was received in funnel and then sticky events can be pending continuously. 
+ * And streamiddemux only receive gap events continuously. 
+ * Thus, pipeline can not be constructed completely.
+ * For support it, need to handle GAP events likes buffers.
+ */
+GST_START_TEST (test_funnel_gap_event)
+{
+  struct TestData td;
+  guint probe = 0;
+
+  setup_test_objects (&td, chain_ok);
+
+  nb_stream_start_event = 0;
+  nb_caps_event = 0;
+  nb_segment_event = 0;
+  nb_gap_event = 0;
+  bufcount = 0;
+
+  probe = gst_pad_add_probe (td.mysink, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+      (GstPadProbeCallback) event_counter, NULL, NULL);
+
+  /* push a gap event to srcpad1 to push sticky events */
+  fail_unless (gst_pad_push_event (td.mysrc1, gst_event_new_gap (0,
+              GST_SECOND)));
+
+  fail_unless (nb_stream_start_event == 1);
+  fail_unless (nb_caps_event == 1);
+  fail_unless (nb_segment_event == 1);
+  fail_unless (nb_gap_event == 1);
+
+  /* push a gap event to srcpad2 to push sticky events */
+  fail_unless (gst_pad_push_event (td.mysrc2, gst_event_new_gap (0,
+              GST_SECOND)));
+
+  fail_unless (nb_stream_start_event == 2);
+  fail_unless (nb_caps_event == 2);
+  fail_unless (nb_segment_event == 2);
+  fail_unless (nb_gap_event == 2);
+
+  /* push a gap event to srcpad2 */
+  fail_unless (gst_pad_push_event (td.mysrc2, gst_event_new_gap (0,
+              GST_SECOND)));
+
+  fail_unless (nb_stream_start_event == 2);
+  fail_unless (nb_caps_event == 2);
+  fail_unless (nb_segment_event == 2);
+  fail_unless (nb_gap_event == 3);
+
+  /* push a gap event to srcpad1 */
+  fail_unless (gst_pad_push_event (td.mysrc1, gst_event_new_gap (0,
+              GST_SECOND)));
+
+  fail_unless (nb_stream_start_event == 3);
+  fail_unless (nb_caps_event == 3);
+  fail_unless (nb_segment_event == 3);
+  fail_unless (nb_gap_event == 4);
+
+  /* push buffer */
+  fail_unless (gst_pad_push (td.mysrc1, gst_buffer_new ()) == GST_FLOW_OK);
+  fail_unless (gst_pad_push (td.mysrc2, gst_buffer_new ()) == GST_FLOW_OK);
+
+  fail_unless (nb_stream_start_event == 4);
+  fail_unless (nb_caps_event == 4);
+  fail_unless (nb_segment_event == 4);
+  fail_unless (nb_gap_event == 4);
+  fail_unless (bufcount == 2);
+
+  gst_pad_remove_probe (td.mysink, probe);
+
+  release_test_objects (&td);
+}
+
+GST_END_TEST;
+
 static Suite *
 funnel_suite (void)
 {
@@ -252,6 +381,7 @@
   tc_chain = tcase_create ("funnel simple");
   tcase_add_test (tc_chain, test_funnel_simple);
   tcase_add_test (tc_chain, test_funnel_eos);
+  tcase_add_test (tc_chain, test_funnel_gap_event);
   suite_add_tcase (s, tc_chain);
 
   return s;
diff --git a/tests/check/elements/queue.c b/tests/check/elements/queue.c
index 9a2ebcf..1e9e9ca 100644
--- a/tests/check/elements/queue.c
+++ b/tests/check/elements/queue.c
@@ -894,6 +894,200 @@
 
 GST_END_TEST;
 
+static gpointer
+push_event_thread_func (gpointer data)
+{
+  GstEvent *event;
+
+  event = GST_EVENT (data);
+
+  GST_DEBUG ("pushing event %p on pad %p", event, mysrcpad);
+  gst_pad_push_event (mysrcpad, event);
+
+  return NULL;
+}
+
+GST_START_TEST (test_state_change_when_flushing)
+{
+  GstEvent *event;
+  GThread *thread;
+
+  mysinkpad = gst_check_setup_sink_pad (queue, &sinktemplate);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  fail_unless (gst_element_set_state (queue, GST_STATE_PAUSED) ==
+      GST_STATE_CHANGE_SUCCESS);
+
+  event = gst_event_new_flush_start ();
+  gst_pad_push_event (mysrcpad, event);
+
+  event = gst_event_new_flush_stop (TRUE);
+  thread = g_thread_new ("send event", push_event_thread_func, event);
+
+  GST_DEBUG ("changing state to READY");
+  fail_unless (gst_element_set_state (queue, GST_STATE_READY) ==
+      GST_STATE_CHANGE_SUCCESS);
+  GST_DEBUG ("state changed");
+
+  g_thread_join (thread);
+
+  fail_unless (gst_element_set_state (queue, GST_STATE_NULL) ==
+      GST_STATE_CHANGE_SUCCESS);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_time_level_buffer_list)
+{
+  GstBuffer *buffer = NULL;
+  GstBufferList *buffer_list = NULL;
+  GstClockTime time;
+  guint buffers;
+  GstSegment segment;
+
+  g_signal_connect (queue, "overrun",
+      G_CALLBACK (queue_overrun_link_and_activate), NULL);
+  g_object_set (G_OBJECT (queue), "max-size-buffers", 11, NULL);
+  g_object_set (G_OBJECT (queue), "max-size-time",
+      G_GUINT64_CONSTANT (7000) * GST_MSECOND, NULL);
+
+  GST_DEBUG ("starting");
+
+  block_src ();
+
+  UNDERRUN_LOCK ();
+  fail_unless (gst_element_set_state (queue,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+  UNDERRUN_WAIT ();
+  UNDERRUN_UNLOCK ();
+
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  gst_pad_push_event (mysrcpad, gst_event_new_stream_start ("test"));
+  gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment));
+
+  /* push buffer without duration */
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 1000 * GST_MSECOND;
+  /* pushing gives away my reference */
+  gst_pad_push (mysrcpad, buffer);
+
+  /* level should be 1 seconds because buffer has no duration and starts at 1
+   * SECOND (sparse stream). */
+  g_object_get (G_OBJECT (queue), "current-level-time", &time, NULL);
+  fail_unless_equals_uint64 (time, 1000 * GST_MSECOND);
+  g_object_get (G_OBJECT (queue), "current-level-buffers", &buffers, NULL);
+  fail_unless_equals_int (buffers, 1);
+
+  /* second push should set the level to 2 second */
+  buffer_list = gst_buffer_list_new ();
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 1500 * GST_MSECOND;
+  gst_buffer_list_add (buffer_list, buffer);
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 2000 * GST_MSECOND;
+  gst_buffer_list_add (buffer_list, buffer);
+  gst_pad_push_list (mysrcpad, buffer_list);
+
+  g_object_get (G_OBJECT (queue), "current-level-time", &time, NULL);
+  fail_unless_equals_uint64 (time, 2000 * GST_MSECOND);
+  g_object_get (G_OBJECT (queue), "current-level-buffers", &buffers, NULL);
+  fail_unless_equals_int (buffers, 3);
+
+  /* third push should set the level to 4 seconds, the 1 second diff with the
+   * previous buffer (without duration) and the 1 second duration of this
+   * buffer. */
+  buffer_list = gst_buffer_list_new ();
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 3000 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 500 * GST_MSECOND;
+  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
+  gst_buffer_list_add (buffer_list, buffer);
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 3500 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 500 * GST_MSECOND;
+  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
+  gst_buffer_list_add (buffer_list, buffer);
+  gst_pad_push_list (mysrcpad, buffer_list);
+
+  g_object_get (G_OBJECT (queue), "current-level-time", &time, NULL);
+  fail_unless_equals_uint64 (time, 4000 * GST_MSECOND);
+  g_object_get (G_OBJECT (queue), "current-level-buffers", &buffers, NULL);
+  fail_unless_equals_int (buffers, 5);
+
+  /* fourth push should set the level to 6 seconds, the 2 second diff with the
+   * previous buffer, same duration. */
+  buffer_list = gst_buffer_list_new ();
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 5000 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 1000 * GST_MSECOND;
+  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
+  gst_buffer_list_add (buffer_list, buffer);
+  gst_pad_push_list (mysrcpad, buffer_list);
+
+  g_object_get (G_OBJECT (queue), "current-level-time", &time, NULL);
+  fail_unless_equals_uint64 (time, 6000 * GST_MSECOND);
+  g_object_get (G_OBJECT (queue), "current-level-buffers", &buffers, NULL);
+  fail_unless_equals_int (buffers, 6);
+
+  /* fifth push should not adjust the level, the timestamp and duration are the
+   * same, meaning the previous buffer did not really have a duration. */
+  buffer_list = gst_buffer_list_new ();
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 5000 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+  gst_buffer_list_add (buffer_list, buffer);
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 5250 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+  gst_buffer_list_add (buffer_list, buffer);
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 5500 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+  gst_buffer_list_add (buffer_list, buffer);
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 5750 * GST_MSECOND;
+  GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND;
+  gst_buffer_list_add (buffer_list, buffer);
+  gst_pad_push_list (mysrcpad, buffer_list);
+
+  g_object_get (G_OBJECT (queue), "current-level-time", &time, NULL);
+  fail_unless_equals_uint64 (time, 6000 * GST_MSECOND);
+  g_object_get (G_OBJECT (queue), "current-level-buffers", &buffers, NULL);
+  fail_unless_equals_int (buffers, 10);
+
+  /* sixth push should adjust the level with 1 second, we now know the
+   * previous buffer actually had a duration of 2 SECONDS */
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 7000 * GST_MSECOND;
+  gst_pad_push (mysrcpad, buffer);
+
+  g_object_get (G_OBJECT (queue), "current-level-time", &time, NULL);
+  fail_unless_equals_uint64 (time, 7000 * GST_MSECOND);
+  g_object_get (G_OBJECT (queue), "current-level-buffers", &buffers, NULL);
+  fail_unless_equals_int (buffers, 11);
+
+  /* eighth push should cause overrun */
+  fail_unless (overrun_count == 0);
+  buffer_list = gst_buffer_list_new ();
+  buffer = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (buffer) = 8000 * GST_MSECOND;
+  /* the next call to gst_pad_push will emit the overrun signal. The signal
+   * handler queue_overrun_link_and_activate() (above) increases overrun_count,
+   * activates and links mysinkpad. The queue task then dequeues a buffer and
+   * gst_pad_push() will return. */
+  gst_buffer_list_add (buffer_list, buffer);
+  gst_pad_push_list (mysrcpad, buffer_list);
+
+  fail_unless (overrun_count == 1);
+
+  GST_DEBUG ("stopping");
+  fail_unless (gst_element_set_state (queue,
+          GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+}
+
+GST_END_TEST;
+
 static Suite *
 queue_suite (void)
 {
@@ -909,10 +1103,12 @@
   tcase_add_test (tc_chain, test_time_level);
   tcase_add_test (tc_chain, test_time_level_task_not_started);
   tcase_add_test (tc_chain, test_queries_while_flushing);
+  tcase_add_test (tc_chain, test_state_change_when_flushing);
 #if 0
   tcase_add_test (tc_chain, test_newsegment);
 #endif
   tcase_add_test (tc_chain, test_sticky_not_linked);
+  tcase_add_test (tc_chain, test_time_level_buffer_list);
 
   return s;
 }
diff --git a/tests/check/elements/streamiddemux.c b/tests/check/elements/streamiddemux.c
new file mode 100644
index 0000000..8c10bce
--- /dev/null
+++ b/tests/check/elements/streamiddemux.c
@@ -0,0 +1,514 @@
+/* GStreamer unit tests for the streamiddemux
+ *
+ * Copyright 2013 LGE Corporation.
+ *  @author: Hoonhee Lee <hoonhee.lee@lge.com>
+ *  @author: Jeongseok Kim <jeongseok.kim@lge.com>
+ *  @author: Wonchul Lee <wonchul86.lee@lge.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <stdlib.h>
+
+#define NUM_SUBSTREAMS 100
+#define NUM_BUFFER 1000
+
+static GstPad *active_srcpad;
+
+struct TestData
+{
+  GstElement *demux;
+  GstPad *mysrc, *mysink[NUM_SUBSTREAMS];
+  GstPad *demuxsink, *demuxsrc[NUM_SUBSTREAMS];
+  gint srcpad_cnt;
+  GstCaps *mycaps;
+  GstCaps *caps[NUM_SUBSTREAMS];
+  GstSegment segment[NUM_SUBSTREAMS];
+  gchar *stream_ids[NUM_SUBSTREAMS];
+};
+
+static void
+set_active_srcpad (struct TestData *td)
+{
+  if (active_srcpad)
+    gst_object_unref (active_srcpad);
+
+  g_object_get (td->demux, "active-pad", &active_srcpad, NULL);
+}
+
+static void
+release_test_objects (struct TestData *td)
+{
+  fail_unless (gst_element_set_state (td->demux, GST_STATE_NULL) ==
+      GST_STATE_CHANGE_SUCCESS);
+
+  gst_object_unref (td->demuxsink);
+
+  gst_caps_unref (td->mycaps);
+
+  if (active_srcpad)
+    gst_object_unref (active_srcpad);
+
+  gst_object_unref (td->demux);
+}
+
+static void
+src_pad_added_cb (GstElement * demux, GstPad * pad, struct TestData *td)
+{
+  if (td->srcpad_cnt < NUM_SUBSTREAMS) {
+    td->demuxsrc[td->srcpad_cnt] = pad;
+    fail_unless (gst_pad_link (pad,
+            td->mysink[td->srcpad_cnt++]) == GST_PAD_LINK_OK);
+  }
+}
+
+static void
+setup_test_objects (struct TestData *td)
+{
+  td->mycaps = gst_caps_new_empty_simple ("test/test");
+  td->srcpad_cnt = 0;
+
+  td->demux = gst_element_factory_make ("streamiddemux", NULL);
+  fail_unless (td->demux != NULL);
+  g_signal_connect (td->demux, "pad-added", G_CALLBACK (src_pad_added_cb), td);
+  td->demuxsink = gst_element_get_static_pad (td->demux, "sink");
+  fail_unless (td->demuxsink != NULL);
+
+  fail_unless (gst_element_set_state (td->demux, GST_STATE_PLAYING) ==
+      GST_STATE_CHANGE_SUCCESS);
+}
+
+static GstFlowReturn
+chain_ok (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstPad *peer_pad = NULL;
+  gchar *pad_stream_id, *active_srcpad_stream_id;
+
+  peer_pad = gst_pad_get_peer (active_srcpad);
+  pad_stream_id = gst_pad_get_stream_id (pad);
+  active_srcpad_stream_id = gst_pad_get_stream_id (active_srcpad);
+  fail_unless (pad == peer_pad);
+  fail_unless (g_strcmp0 (pad_stream_id, active_srcpad_stream_id) == 0);
+
+  g_free (pad_stream_id);
+  g_free (active_srcpad_stream_id);
+  gst_object_unref (peer_pad);
+  gst_buffer_unref (buffer);
+
+  return GST_FLOW_OK;
+}
+
+GST_START_TEST (test_simple_create_destroy)
+{
+  GstElement *demux;
+
+  demux = gst_element_factory_make ("streamiddemux", NULL);
+  gst_object_unref (demux);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_streamiddemux_with_stream_start)
+{
+  struct TestData td;
+
+  setup_test_objects (&td);
+
+  GST_DEBUG ("Creating mysink");
+  td.mysink[0] = gst_pad_new ("mysink0", GST_PAD_SINK);
+  gst_pad_set_active (td.mysink[0], TRUE);
+
+  GST_DEBUG ("Creating mysrc");
+  td.mysrc = gst_pad_new ("mysrc", GST_PAD_SRC);
+  fail_unless (GST_PAD_LINK_SUCCESSFUL (gst_pad_link (td.mysrc, td.demuxsink)));
+  gst_pad_set_active (td.mysrc, TRUE);
+
+  GST_DEBUG ("Pushing stream-start event");
+  fail_unless (gst_pad_push_event (td.mysrc,
+          gst_event_new_stream_start ("test0")));
+
+  g_object_get (td.demux, "active-pad", &active_srcpad, NULL);
+  fail_unless (active_srcpad != NULL, "Failed to generate a srcpad");
+  fail_unless (td.srcpad_cnt == 1, "pad-added signal has not emmited");
+
+  GST_DEBUG ("Releasing mysink and mysrc");
+  gst_pad_set_active (td.mysink[0], FALSE);
+  gst_pad_set_active (td.mysrc, FALSE);
+
+  gst_object_unref (td.mysink[0]);
+  gst_object_unref (td.mysrc);
+
+  GST_DEBUG ("Releasing streamiddemux");
+  release_test_objects (&td);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_streamiddemux_without_stream_start)
+{
+  struct TestData td;
+  GstSegment segment;
+
+  setup_test_objects (&td);
+
+  GST_DEBUG ("Creating mysink");
+  td.mysink[0] = gst_pad_new ("mysink0", GST_PAD_SINK);
+  gst_pad_set_active (td.mysink[0], TRUE);
+
+  GST_DEBUG ("Creating mysrc");
+  td.mysrc = gst_pad_new ("mysrc", GST_PAD_SRC);
+  fail_unless (GST_PAD_LINK_SUCCESSFUL (gst_pad_link (td.mysrc, td.demuxsink)));
+  gst_pad_set_active (td.mysrc, TRUE);
+
+  GST_DEBUG ("Pushing caps and segment event without stream-start");
+  fail_unless (gst_pad_push_event (td.mysrc, gst_event_new_caps (td.mycaps)));
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  fail_unless (gst_pad_push_event (td.mysrc, gst_event_new_segment (&segment)));
+
+  g_object_get (td.demux, "active-pad", &active_srcpad, NULL);
+  fail_unless (active_srcpad == NULL, "srcpad has created unexpectedly");
+  fail_unless (td.srcpad_cnt == 0, "pad-added signal is emmited unexpectedly");
+
+  GST_DEBUG ("Releasing mysink and mysrc");
+  gst_pad_set_active (td.mysink[0], FALSE);
+  gst_pad_set_active (td.mysrc, FALSE);
+
+  gst_object_unref (td.mysink[0]);
+  gst_object_unref (td.mysrc);
+
+  GST_DEBUG ("Releasing streamiddemux");
+  release_test_objects (&td);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_streamiddemux_simple)
+{
+  struct TestData td;
+
+  setup_test_objects (&td);
+
+  GST_DEBUG ("Creating mysink");
+  td.mysink[0] = gst_pad_new ("mysink0", GST_PAD_SINK);
+  td.mysink[0]->chaindata = &td;
+  gst_pad_set_chain_function (td.mysink[0], chain_ok);
+  gst_pad_set_active (td.mysink[0], TRUE);
+
+  td.mysink[1] = gst_pad_new ("mysink1", GST_PAD_SINK);
+  td.mysink[1]->chaindata = &td;
+  gst_pad_set_chain_function (td.mysink[1], chain_ok);
+  gst_pad_set_active (td.mysink[1], TRUE);
+
+  GST_DEBUG ("Creating mysrc");
+  td.mysrc = gst_pad_new ("mysrc", GST_PAD_SRC);
+  fail_unless (GST_PAD_LINK_SUCCESSFUL (gst_pad_link (td.mysrc, td.demuxsink)));
+  gst_pad_set_active (td.mysrc, TRUE);
+
+  GST_DEBUG ("Pushing stream-start, caps and segment event");
+  gst_check_setup_events_with_stream_id (td.mysrc, td.demux, td.mycaps,
+      GST_FORMAT_BYTES, "test0");
+  set_active_srcpad (&td);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+
+  gst_check_setup_events_with_stream_id (td.mysrc, td.demux, td.mycaps,
+      GST_FORMAT_BYTES, "test1");
+  set_active_srcpad (&td);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+
+  GST_DEBUG ("Pushing buffer");
+  fail_unless (gst_pad_push_event (td.mysrc,
+          gst_event_new_stream_start ("test0")));
+  set_active_srcpad (&td);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+
+  fail_unless (gst_pad_push_event (td.mysrc,
+          gst_event_new_stream_start ("test1")));
+  set_active_srcpad (&td);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+
+  GST_DEBUG ("Releasing mysink and mysrc");
+  gst_pad_set_active (td.mysink[0], FALSE);
+  gst_pad_set_active (td.mysink[1], FALSE);
+  gst_pad_set_active (td.mysrc, FALSE);
+
+  gst_object_unref (td.mysink[0]);
+  gst_object_unref (td.mysink[1]);
+  gst_object_unref (td.mysrc);
+
+  GST_DEBUG ("Releasing streamiddemux");
+  release_test_objects (&td);
+}
+
+GST_END_TEST;
+
+GList *expected[NUM_SUBSTREAMS];
+
+static gboolean
+sink_event_func (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GList **expected = GST_PAD_ELEMENT_PRIVATE (pad);
+  GstEvent *exp;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:{
+      GstCaps *recvcaps, *expectcaps;
+
+      *expected = g_list_first (*expected);
+      exp = GST_EVENT ((*expected)->data);
+
+      gst_event_parse_caps (event, &recvcaps);
+      gst_event_parse_caps (exp, &expectcaps);
+
+      fail_unless (gst_caps_is_equal (recvcaps, expectcaps));
+      break;
+    }
+    case GST_EVENT_SEGMENT:{
+      const GstSegment *recvseg, *expectseg;
+
+      *expected = g_list_last (*expected);
+      exp = GST_EVENT ((*expected)->data);
+
+      gst_event_parse_segment (event, &recvseg);
+      gst_event_parse_segment (exp, &expectseg);
+
+      fail_unless_equals_uint64 (recvseg->position, expectseg->position);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return gst_pad_event_default (pad, parent, event);
+}
+
+GST_START_TEST (test_streamiddemux_num_buffers)
+{
+  struct TestData td;
+  gint buffer_cnt = 0;
+  gint stream_cnt = 0;
+  GstEvent *event;
+
+  setup_test_objects (&td);
+
+  GST_DEBUG ("Creating mysink");
+  for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt) {
+    gchar *name;
+    name = g_strdup_printf ("mysink%d", stream_cnt);
+    td.mysink[stream_cnt] = gst_pad_new (name, GST_PAD_SINK);
+    g_free (name);
+    gst_pad_set_chain_function (td.mysink[stream_cnt], chain_ok);
+    gst_pad_set_event_function (td.mysink[stream_cnt], sink_event_func);
+    gst_pad_set_active (td.mysink[stream_cnt], TRUE);
+    GST_PAD_ELEMENT_PRIVATE (td.mysink[stream_cnt]) = &expected[stream_cnt];
+  }
+
+  GST_DEBUG ("Creating mysrc");
+  td.mysrc = gst_pad_new ("mysrc", GST_PAD_SRC);
+  fail_unless (GST_PAD_LINK_SUCCESSFUL (gst_pad_link (td.mysrc, td.demuxsink)));
+  gst_pad_set_active (td.mysrc, TRUE);
+
+  GST_DEBUG ("Creating caps");
+  for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt) {
+    gchar *caps_name;
+    caps_name = g_strdup_printf ("test/test%d", stream_cnt);
+    td.caps[stream_cnt] = gst_caps_new_empty_simple (caps_name);
+
+    g_free (caps_name);
+  }
+
+  GST_DEBUG ("Creating segment");
+  for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt) {
+    gst_segment_init (&td.segment[stream_cnt], GST_FORMAT_BYTES);
+    td.segment[stream_cnt].position = stream_cnt * GST_SECOND;
+  }
+
+  GST_DEBUG ("Pushing stream-start, caps and segment event");
+  for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt) {
+    gchar *name;
+    name = g_strdup_printf ("test%d", stream_cnt);
+
+    fail_unless (gst_pad_push_event (td.mysrc,
+            gst_event_new_stream_start (name)));
+
+    event = gst_event_new_caps (td.caps[stream_cnt]);
+    expected[stream_cnt] =
+        g_list_append (expected[stream_cnt], gst_event_ref (event));
+    fail_unless (gst_pad_push_event (td.mysrc, event));
+
+    event = gst_event_new_segment (&td.segment[stream_cnt]);
+    expected[stream_cnt] =
+        g_list_append (expected[stream_cnt], gst_event_ref (event));
+    fail_unless (gst_pad_push_event (td.mysrc, event));
+
+    g_free (name);
+    set_active_srcpad (&td);
+
+    fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+  }
+
+  GST_DEBUG ("Pushing buffers to random srcpad");
+  for (buffer_cnt = 0; buffer_cnt < NUM_BUFFER; ++buffer_cnt) {
+    gchar *name;
+    gint active_stream = rand () % NUM_SUBSTREAMS;
+    name = g_strdup_printf ("test%d", active_stream);
+
+    fail_unless (gst_pad_push_event (td.mysrc,
+            gst_event_new_stream_start (name)));
+    fail_unless (gst_pad_push_event (td.mysrc,
+            gst_event_new_caps (td.caps[active_stream])));
+    fail_unless (gst_pad_push_event (td.mysrc,
+            gst_event_new_segment (&td.segment[active_stream])));
+
+    g_free (name);
+    set_active_srcpad (&td);
+
+    fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+  }
+
+  for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt)
+    gst_caps_unref (td.caps[stream_cnt]);
+
+  GST_DEBUG ("Releasing mysink and mysrc");
+  for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt) {
+    gst_pad_set_active (td.mysink[stream_cnt], FALSE);
+  }
+  gst_pad_set_active (td.mysrc, FALSE);
+
+  for (stream_cnt = 0; stream_cnt < NUM_SUBSTREAMS; ++stream_cnt) {
+    gst_object_unref (td.mysink[stream_cnt]);
+  }
+  gst_object_unref (td.mysrc);
+
+  GST_DEBUG ("Releasing streamiddemux");
+  release_test_objects (&td);
+}
+
+GST_END_TEST;
+
+guint num_eos = 0;
+guint num_flush_start = 0;
+guint num_flush_stop = 0;
+
+static gboolean
+event_func (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_STREAM_START:
+      ++num_flush_start;
+      break;
+    case GST_EVENT_FLUSH_STOP:
+      ++num_flush_stop;
+      break;
+    case GST_EVENT_EOS:
+      ++num_eos;
+      break;
+    default:
+      break;
+  }
+
+  return gst_pad_event_default (pad, parent, event);
+}
+
+GST_START_TEST (test_streamiddemux_eos)
+{
+  struct TestData td;
+
+  setup_test_objects (&td);
+
+  num_eos = 0;
+
+  GST_DEBUG ("Creating mysink");
+  td.mysink[0] = gst_pad_new ("mysink0", GST_PAD_SINK);
+  gst_pad_set_chain_function (td.mysink[0], chain_ok);
+  gst_pad_set_event_function (td.mysink[0], event_func);
+  gst_pad_set_active (td.mysink[0], TRUE);
+
+  td.mysink[1] = gst_pad_new ("mysink1", GST_PAD_SINK);
+  gst_pad_set_chain_function (td.mysink[1], chain_ok);
+  gst_pad_set_event_function (td.mysink[1], event_func);
+  gst_pad_set_active (td.mysink[1], TRUE);
+
+  GST_DEBUG ("Creating mysrc");
+  td.mysrc = gst_pad_new ("mysrc", GST_PAD_SRC);
+  fail_unless (GST_PAD_LINK_SUCCESSFUL (gst_pad_link (td.mysrc, td.demuxsink)));
+  gst_pad_set_active (td.mysrc, TRUE);
+
+  GST_DEBUG ("Pushing stream-start, caps and segment event");
+  gst_check_setup_events_with_stream_id (td.mysrc, td.demux, td.mycaps,
+      GST_FORMAT_BYTES, "test0");
+  set_active_srcpad (&td);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+
+  gst_check_setup_events_with_stream_id (td.mysrc, td.demux, td.mycaps,
+      GST_FORMAT_BYTES, "test1");
+  set_active_srcpad (&td);
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_OK);
+
+  GST_DEBUG ("Pushing flush event");
+  fail_unless (gst_pad_push_event (td.mysrc, gst_event_new_flush_start ()));
+  fail_unless (num_flush_start == 2,
+      "Failed to send flush-start event to all pads internally linked");
+  fail_unless (gst_pad_push_event (td.mysrc, gst_event_new_flush_stop (TRUE)));
+  fail_unless (num_flush_stop == 2,
+      "Failed to send flush-stop event to all pads internally linked");
+
+  GST_DEBUG ("Pushing eos event");
+  fail_unless (gst_pad_push_event (td.mysrc, gst_event_new_eos ()));
+  fail_unless (num_eos == 2,
+      "Failed to send eos event to all pads internally linked");
+
+  fail_unless (gst_pad_push (td.mysrc, gst_buffer_new ()) == GST_FLOW_EOS);
+
+  GST_DEBUG ("Releasing mysink and mysrc");
+  gst_pad_set_active (td.mysink[0], FALSE);
+  gst_pad_set_active (td.mysink[1], FALSE);
+  gst_pad_set_active (td.mysrc, FALSE);
+
+  gst_object_unref (td.mysink[0]);
+  gst_object_unref (td.mysink[1]);
+  gst_object_unref (td.mysrc);
+
+  GST_DEBUG ("Releasing streamiddemux");
+  release_test_objects (&td);
+}
+
+GST_END_TEST;
+
+static Suite *
+streamiddemux_suite (void)
+{
+  Suite *s = suite_create ("streamiddemux");
+  TCase *tc_chain;
+
+  tc_chain = tcase_create ("streamiddemux simple");
+  tcase_add_test (tc_chain, test_simple_create_destroy);
+  tcase_add_test (tc_chain, test_streamiddemux_with_stream_start);
+  tcase_add_test (tc_chain, test_streamiddemux_without_stream_start);
+  tcase_add_test (tc_chain, test_streamiddemux_simple);
+  tcase_add_test (tc_chain, test_streamiddemux_num_buffers);
+  tcase_add_test (tc_chain, test_streamiddemux_eos);
+  suite_add_tcase (s, tc_chain);
+
+  return s;
+}
+
+GST_CHECK_MAIN (streamiddemux);
diff --git a/tests/check/gst/gstbin.c b/tests/check/gst/gstbin.c
index 58c91ea..409e273 100644
--- a/tests/check/gst/gstbin.c
+++ b/tests/check/gst/gstbin.c
@@ -201,6 +201,7 @@
   gst_pad_set_active (pad2, FALSE);
   gst_check_teardown_src_pad (sink1);
   gst_check_teardown_src_pad (sink2);
+  gst_object_unref (bus);
   gst_object_unref (pipeline);
 }
 
@@ -259,6 +260,7 @@
   gst_pad_set_active (pad2, FALSE);
   gst_check_teardown_src_pad (sink1);
   gst_check_teardown_src_pad (sink2);
+  gst_object_unref (bus);
   gst_object_unref (pipeline);
 }
 
diff --git a/tests/check/gst/gstbuffer.c b/tests/check/gst/gstbuffer.c
index e52175f..70cb191 100644
--- a/tests/check/gst/gstbuffer.c
+++ b/tests/check/gst/gstbuffer.c
@@ -340,6 +340,8 @@
 
   /* NOTE that data is refcounted */
   fail_unless (info.size == sinfo.size);
+  /* GstBuffer was copied but the underlying GstMemory should be the same */
+  fail_unless (info.data == sinfo.data);
 
   gst_buffer_unmap (copy, &sinfo);
   gst_buffer_unmap (buffer, &info);
@@ -408,6 +410,37 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_copy_deep)
+{
+  GstBuffer *buffer, *copy;
+  GstMapInfo info, sinfo;
+
+  buffer = gst_buffer_new_and_alloc (4);
+  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
+
+  copy = gst_buffer_copy_deep (buffer);
+  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
+  ASSERT_BUFFER_REFCOUNT (copy, "copy", 1);
+  /* buffers are copied and must point to different memory */
+  fail_if (buffer == copy);
+
+  fail_unless (gst_buffer_map (buffer, &info, GST_MAP_READ));
+  fail_unless (gst_buffer_map (copy, &sinfo, GST_MAP_READ));
+
+  /* NOTE that data is refcounted */
+  fail_unless (info.size == sinfo.size);
+  /* copy_deep() forces new GstMemory to be used */
+  fail_unless (info.data != sinfo.data);
+
+  gst_buffer_unmap (copy, &sinfo);
+  gst_buffer_unmap (buffer, &info);
+
+  gst_buffer_unref (copy);
+  gst_buffer_unref (buffer);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_try_new_and_alloc)
 {
   GstBuffer *buf;
@@ -871,6 +904,7 @@
   tcase_add_test (tc_chain, test_metadata_writable);
   tcase_add_test (tc_chain, test_memcmp);
   tcase_add_test (tc_chain, test_copy);
+  tcase_add_test (tc_chain, test_copy_deep);
   tcase_add_test (tc_chain, test_try_new_and_alloc);
   tcase_add_test (tc_chain, test_size);
   tcase_add_test (tc_chain, test_resize);
diff --git a/tests/check/gst/gstbufferpool.c b/tests/check/gst/gstbufferpool.c
index 7dcf1bf..8dd265a 100644
--- a/tests/check/gst/gstbufferpool.c
+++ b/tests/check/gst/gstbufferpool.c
@@ -179,7 +179,6 @@
   GstBufferPool *pool = gst_buffer_pool_new ();
   GstStructure *config = gst_buffer_pool_get_config (pool);
   GstCaps *caps = gst_caps_new_empty_simple ("test/data");
-  GstBuffer *buffer = NULL;
 
   /* unconfigured pool cannot be activated */
   fail_if (gst_buffer_pool_set_active (pool, TRUE));
@@ -192,26 +191,11 @@
   config = gst_buffer_pool_get_config (pool);
   fail_unless (gst_buffer_pool_set_config (pool, config));
 
-  /* setting a different config should deactivate the pool */
+  /* setting a different config on active pool should fail */
   config = gst_buffer_pool_get_config (pool);
   gst_buffer_pool_config_set_params (config, caps, 12, 10, 0);
-  fail_unless (gst_buffer_pool_set_config (pool, config));
-  fail_if (gst_buffer_pool_is_active (pool));
-
-  /* though it should fail if there is outstanding buffers */
-  gst_buffer_pool_set_active (pool, TRUE);
-  gst_buffer_pool_acquire_buffer (pool, &buffer, NULL);
-  fail_if (buffer == NULL);
-  config = gst_buffer_pool_get_config (pool);
-  gst_buffer_pool_config_set_params (config, caps, 10, 10, 0);
   fail_if (gst_buffer_pool_set_config (pool, config));
-
-  /* and work when last buffer is back */
-  config = gst_buffer_pool_get_config (pool);
-  gst_buffer_pool_config_set_params (config, caps, 10, 10, 0);
-  gst_buffer_unref (buffer);
-  fail_unless (gst_buffer_pool_set_config (pool, config));
-  fail_unless (gst_buffer_pool_set_active (pool, TRUE));
+  fail_unless (gst_buffer_pool_is_active (pool));
 
   gst_buffer_pool_set_active (pool, FALSE);
   gst_object_unref (pool);
@@ -228,8 +212,8 @@
 
   fail_unless (gst_buffer_pool_config_validate_params (config, caps, 5, 4, 0));
   fail_unless (gst_buffer_pool_config_validate_params (config, caps, 5, 2, 0));
+  fail_unless (gst_buffer_pool_config_validate_params (config, caps, 4, 4, 0));
   fail_if (gst_buffer_pool_config_validate_params (config, caps, 5, 6, 0));
-  fail_if (gst_buffer_pool_config_validate_params (config, caps, 4, 4, 0));
 
   gst_caps_unref (caps);
   caps = gst_caps_new_empty_simple ("test/data2");
diff --git a/tests/check/gst/gstbus.c b/tests/check/gst/gstbus.c
index 5eaa7f1..f0308c6 100644
--- a/tests/check/gst/gstbus.c
+++ b/tests/check/gst/gstbus.c
@@ -188,7 +188,7 @@
   fail_unless_equals_int (num_eos, 10);
   fail_unless_equals_int (num_app, 10);
 
-  g_source_remove (id);
+  fail_unless (gst_bus_remove_watch (test_bus));
   g_main_loop_unref (main_loop);
 
   gst_object_unref ((GstObject *) test_bus);
@@ -286,6 +286,31 @@
 
 GST_END_TEST;
 
+static gboolean
+dummy_bus_func (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  return TRUE;
+}
+
+GST_START_TEST (test_remove_watch)
+{
+  test_bus = gst_bus_new ();
+
+  /* removing a non-existing watch should fail */
+  fail_if (gst_bus_remove_watch (test_bus));
+
+  gst_bus_add_watch (test_bus, dummy_bus_func, NULL);
+
+  fail_unless (gst_bus_remove_watch (test_bus));
+
+  /* now it should fail to remove the watch again */
+  fail_if (gst_bus_remove_watch (test_bus));
+
+  gst_object_unref (test_bus);
+}
+
+GST_END_TEST;
+
 static gint messages_seen;
 
 static void
@@ -704,6 +729,86 @@
 
 GST_END_TEST;
 
+static GstBusSyncReply
+test_async_sync_handler (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GArray *timestamps = user_data;
+  gint64 ts = g_get_monotonic_time () * 1000;   /* microsecs -> nanosecs */
+
+  g_array_append_val (timestamps, ts);
+  GST_INFO ("[msg %p] %" GST_PTR_FORMAT, msg, msg);
+
+  return GST_BUS_ASYNC;
+}
+
+static gpointer
+post_10_app_messages_thread (gpointer data)
+{
+  THREAD_START ();
+  send_10_app_messages ();
+  return NULL;
+}
+
+/* Test GST_BUS_ASYNC actually causes the thread posting the message to
+ * block until the message has been freed. We spawn a thread to post ten
+ * messages. We install a bus sync handler to get the timestamp of each
+ * message as it is being posted, and to return GST_BUS_ASYNC. In the main
+ * thread we sleep a bit after we pop off a message and before we free it.
+ * The posting thread should be blocked while the main thread sleeps, so
+ * we expect the interval as the messages are posted to be roughly the same
+ * as the sleep time in the main thread. g_usleep() is not super-precise, so
+ * we allow for some slack there, we just want to check that the posting
+ * thread was blocked at all really. */
+GST_START_TEST (test_async_message)
+{
+  GArray *timestamps;
+  guint i;
+
+  MAIN_INIT ();
+
+  timestamps = g_array_sized_new (FALSE, FALSE, sizeof (gint64), 10);
+
+  test_bus = gst_bus_new ();
+
+  gst_bus_set_sync_handler (test_bus, test_async_sync_handler, timestamps,
+      NULL);
+
+  MAIN_START_THREAD_FUNCTIONS (1, post_10_app_messages_thread, NULL);
+
+  MAIN_SYNCHRONIZE ();
+
+  for (i = 0; i < 10; i++) {
+    GstMessage *msg;
+
+    GST_LOG ("(%d) waiting for message..", i);
+    msg = gst_bus_timed_pop (test_bus, GST_CLOCK_TIME_NONE);
+    GST_LOG ("(%d) got message, sleeping a bit", i);
+    g_usleep (60 * GST_MSECOND / (GST_SECOND / G_USEC_PER_SEC));
+    GST_LOG ("(%d) about to free message", i);
+    gst_message_unref (msg);
+  }
+
+  for (i = 1; i < 10; i++) {
+    gint64 prev_ts = g_array_index (timestamps, gint64, i - 1);
+    gint64 ts = g_array_index (timestamps, gint64, i);
+    gint64 diff = ts - prev_ts;
+
+    fail_unless (prev_ts < ts);
+    fail_unless (diff >= 20 * GST_MSECOND, "interval between messages being "
+        "posted was just %" G_GINT64_FORMAT "ms", diff / GST_MSECOND);
+  }
+
+  fail_if (gst_bus_have_pending (test_bus), "unexpected messages on bus");
+
+  MAIN_STOP_THREADS ();
+
+  gst_object_unref (test_bus);
+
+  g_array_unref (timestamps);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_bus_suite (void)
 {
@@ -718,11 +823,13 @@
   tcase_add_test (tc_chain, test_watch_with_poll);
   tcase_add_test (tc_chain, test_watch_with_custom_context);
   tcase_add_test (tc_chain, test_add_watch_with_custom_context);
+  tcase_add_test (tc_chain, test_remove_watch);
   tcase_add_test (tc_chain, test_timed_pop);
   tcase_add_test (tc_chain, test_timed_pop_thread);
   tcase_add_test (tc_chain, test_timed_pop_filtered);
   tcase_add_test (tc_chain, test_timed_pop_filtered_with_timeout);
   tcase_add_test (tc_chain, test_custom_main_context);
+  tcase_add_test (tc_chain, test_async_message);
   return s;
 }
 
diff --git a/tests/check/gst/gstcaps.c b/tests/check/gst/gstcaps.c
index e529406..6645361 100644
--- a/tests/check/gst/gstcaps.c
+++ b/tests/check/gst/gstcaps.c
@@ -1122,6 +1122,7 @@
   gst_caps_features_add (f1, "memory:VASurface");
 
   fail_unless (gst_caps_features_is_equal (f1, gst_caps_get_features (c1, 0)));
+  fail_if (gst_caps_can_intersect (c1, c2));
 
   f2 = gst_caps_get_features (c2, 0);
   fail_unless (gst_caps_features_is_equal
@@ -1160,6 +1161,131 @@
 }
 
 GST_END_TEST;
+
+static gboolean
+foreach_append_function (GstCapsFeatures * features, GstStructure * structure,
+    gpointer user_data)
+{
+  GstCaps *caps = user_data;
+
+  gst_caps_append_structure_full (caps, gst_structure_copy (structure),
+      features ? gst_caps_features_copy (features) : NULL);
+
+  return TRUE;
+}
+
+GST_START_TEST (test_foreach)
+{
+  GstCaps *caps, *caps2;
+
+  caps =
+      gst_caps_from_string
+      ("video/x-raw, format=I420; video/x-raw(foo:bar); video/x-h264");
+  caps2 = gst_caps_new_empty ();
+  fail_unless (gst_caps_foreach (caps, foreach_append_function, caps2));
+  fail_unless (gst_caps_is_strictly_equal (caps, caps2));
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+
+  caps = gst_caps_new_empty ();
+  caps2 = gst_caps_new_empty ();
+  fail_unless (gst_caps_foreach (caps, foreach_append_function, caps2));
+  fail_unless (gst_caps_is_strictly_equal (caps, caps2));
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+}
+
+GST_END_TEST;
+
+static gboolean
+map_function (GstCapsFeatures * features, GstStructure * structure,
+    gpointer user_data)
+{
+  /* Remove caps features if there are any, otherwise add some dummy */
+  if (gst_caps_features_contains (features, "foo:bar")) {
+    gst_caps_features_remove (features, "foo:bar");
+  } else {
+    gst_caps_features_add (features, "foo:bar");
+    gst_caps_features_remove (features, GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY);
+  }
+
+  /* Set some dummy integer in the structure */
+  gst_structure_set (structure, "foo", G_TYPE_INT, 123, NULL);
+
+  return TRUE;
+}
+
+GST_START_TEST (test_map_in_place)
+{
+  GstCaps *caps, *caps2;
+
+  caps =
+      gst_caps_from_string
+      ("video/x-raw, format=I420; video/x-raw(foo:bar); video/x-h264");
+  caps2 =
+      gst_caps_from_string
+      ("video/x-raw(foo:bar), foo=(int)123, format=I420; video/x-raw, foo=(int)123; video/x-h264(foo:bar), foo=(int)123");
+  fail_unless (gst_caps_map_in_place (caps, map_function, NULL));
+  fail_unless (gst_caps_is_strictly_equal (caps, caps2));
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+
+  caps = gst_caps_new_empty ();
+  caps2 = gst_caps_new_empty ();
+  fail_unless (gst_caps_map_in_place (caps, map_function, NULL));
+  fail_unless (gst_caps_is_strictly_equal (caps, caps2));
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+}
+
+GST_END_TEST;
+
+static gboolean
+filter_map_function (GstCapsFeatures * features, GstStructure * structure,
+    gpointer user_data)
+{
+  if (!gst_structure_has_name (structure, "video/x-raw"))
+    return FALSE;
+
+  if (!gst_caps_features_contains (features, "foo:bar"))
+    return FALSE;
+
+  /* Set some dummy integer in the structure */
+  gst_structure_set (structure, "foo", G_TYPE_INT, 123, NULL);
+
+  return TRUE;
+}
+
+GST_START_TEST (test_filter_and_map_in_place)
+{
+  GstCaps *caps, *caps2;
+
+  caps =
+      gst_caps_from_string
+      ("video/x-raw, format=I420; video/x-raw(foo:bar); video/x-h264");
+  caps2 = gst_caps_from_string ("video/x-raw(foo:bar), foo=(int)123");
+  gst_caps_filter_and_map_in_place (caps, filter_map_function, NULL);
+  fail_unless (gst_caps_is_strictly_equal (caps, caps2));
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+
+  caps = gst_caps_from_string ("video/x-raw, format=I420; video/x-h264");
+  caps2 = gst_caps_new_empty ();
+  gst_caps_filter_and_map_in_place (caps, filter_map_function, NULL);
+  fail_unless (gst_caps_is_strictly_equal (caps, caps2));
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+
+  caps = gst_caps_new_empty ();
+  caps2 = gst_caps_new_empty ();
+  gst_caps_filter_and_map_in_place (caps, filter_map_function, NULL);
+  fail_unless (gst_caps_is_strictly_equal (caps, caps2));
+  gst_caps_unref (caps);
+  gst_caps_unref (caps2);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_caps_suite (void)
 {
@@ -1189,6 +1315,9 @@
   tcase_add_test (tc_chain, test_broken);
   tcase_add_test (tc_chain, test_features);
   tcase_add_test (tc_chain, test_special_caps);
+  tcase_add_test (tc_chain, test_foreach);
+  tcase_add_test (tc_chain, test_map_in_place);
+  tcase_add_test (tc_chain, test_filter_and_map_in_place);
 
   return s;
 }
diff --git a/tests/check/gst/gstclock.c b/tests/check/gst/gstclock.c
index a394cf8..ab0fbd0 100644
--- a/tests/check/gst/gstclock.c
+++ b/tests/check/gst/gstclock.c
@@ -17,6 +17,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/* Include the non-public linear regression function */
+#include "../../gst/gstclock-linreg.c"
 #include <gst/check/gstcheck.h>
 
 typedef struct
@@ -109,6 +111,202 @@
 
 GST_END_TEST;
 
+GstClockTime times1[] = {
+  257116899087539, 0, 120632754291904, 0,
+  257117935914250, 0, 120633825367344, 0,
+  257119448289434, 0, 120635306141271, 0,
+  257120493671524, 0, 120636384357825, 0,
+  257121550784861, 0, 120637417438878, 0,
+  257123042669403, 0, 120638895344150, 0,
+  257124089184865, 0, 120639971729651, 0,
+  257125545836474, 0, 120641406788243, 0,
+  257127030618490, 0, 120642885914220, 0,
+  257128033712770, 0, 120643888843907, 0,
+  257129081768074, 0, 120644981892002, 0,
+  257130145383845, 0, 120646016376867, 0,
+  257131532530200, 0, 120647389850987, 0,
+  257132578136034, 0, 120648472767247, 0,
+  257134102475722, 0, 120649953785315, 0,
+  257135142994788, 0, 120651028858556, 0,
+  257136585079868, 0, 120652441303624, 0,
+  257137618260656, 0, 120653491627112, 0,
+  257139108694546, 0, 120654963978184, 0,
+  257140644022048, 0, 120656500233068, 0,
+  257141685671825, 0, 120657578510655, 0,
+  257142741238288, 0, 120658610889805, 0,
+  257144243633074, 0, 120660093098060, 0,
+  257145287962271, 0, 120661172901525, 0,
+  257146740596716, 0, 120662591572179, 0,
+  257147757607150, 0, 120663622822179, 0,
+  257149263992401, 0, 120665135578527, 0,
+  257150303719290, 0, 120666176166905, 0,
+  257151355569906, 0, 120667217304601, 0,
+  257152430578406, 0, 120668326099768, 0,
+  257153490501095, 0, 120669360554111, 0,
+  257154512360784, 0, 120670365497960, 0,
+  257155530610577, 0, 120671399006259, 0,
+  257156562091659, 0, 120672432728185, 0,
+  257157945388742, 0, 120673800312414, 0,
+  257159287547073, 0, 120675142444983, 0,
+  257160324912880, 0, 120676215076817, 0,
+  257345408328042, 0, 120861261738196, 0,
+  257346412270919, 0, 120862265613926, 0,
+  257347420532284, 0, 120863278644933, 0,
+  257348431187638, 0, 120864284412754, 0,
+  257349439018028, 0, 120865293110265, 0,
+  257351796217938, 0, 120867651111973, 0,
+  257352803038092, 0, 120868659107578, 0,
+  257354152688899, 0, 120870008594883, 0,
+  257355157088906, 0, 120871011097327, 0,
+  257356162439182, 0, 120872016346348, 0,
+  257357167872040, 0, 120873021656407, 0,
+  257358182440058, 0, 120874048633945, 0,
+  257359198881356, 0, 120875052265538, 0,
+  257100756525466, 0, 120616619282139, 0,
+  257101789337770, 0, 120617655475988, 0,
+  257102816323472, 0, 120618674000157, 0,
+  257103822485250, 0, 120619679005039, 0,
+  257104840760423, 0, 120620710743321, 0,
+  257105859459496, 0, 120621715351476, 0,
+  257106886662470, 0, 120622764942539, 0,
+  257108387497864, 0, 120624244221106, 0,
+  257109428859191, 0, 120625321461096, 0,
+  257110485892785, 0, 120626356892003, 0,
+  257111869872141, 0, 120627726459874, 0,
+  257112915903774, 0, 120628813190830, 0,
+  257114329982208, 0, 120630187061682, 0,
+  257115376666026, 0, 120631271992101, 0
+};
+
+
+GstClockTime times2[] = {
+  291678579009762, 0, 162107345029507, 0,
+  291679770464405, 0, 162108597684538, 0,
+  291680972924370, 0, 162109745816863, 0,
+  291682278949629, 0, 162111000577605, 0,
+  291683590706117, 0, 162112357724822, 0,
+  291684792322541, 0, 162113613156950, 0,
+  291685931362506, 0, 162114760556854, 0,
+  291687132156589, 0, 162115909238493, 0,
+  291688265012060, 0, 162117120603240, 0,
+  291689372183047, 0, 162118126279508, 0,
+  291705506022294, 0, 162134329373992, 0,
+  291667914301004, 0, 162096795553658, 0,
+  291668119537668, 0, 162096949051905, 0,
+  291668274671455, 0, 162097049238371, 0,
+  291668429435600, 0, 162097256356719, 0,
+  291668586128535, 0, 162097355689763, 0,
+  291668741306233, 0, 162097565678460, 0,
+  291668893789203, 0, 162097661044916, 0,
+  291669100256555, 0, 162097865694145, 0,
+  291669216417563, 0, 162098069214693, 0,
+  291669836394620, 0, 162098677275530, 0,
+  291669990447821, 0, 162098792601263, 0,
+  291670149426086, 0, 162098916899184, 0,
+  291670300232152, 0, 162099114225621, 0,
+  291670411261917, 0, 162099236784112, 0,
+  291670598483507, 0, 162099402158751, 0,
+  291671716582687, 0, 162100558744122, 0,
+  291672600759788, 0, 162101499326359, 0,
+  291673919988307, 0, 162102751981384, 0,
+  291675174441643, 0, 162104005551939, 0,
+  291676271562197, 0, 162105105252898, 0,
+  291677376345374, 0, 162106195737516, 0
+};
+
+GstClockTime times3[] = {
+  291881924291688, 0, 162223997578228, 0,
+  291883318122262, 0, 162224167198360, 0,
+  291884786394838, 0, 162224335172501, 0,
+  291886004374386, 0, 162224503695531, 0,
+  291887224353285, 0, 162224673560021, 0,
+  291888472403367, 0, 162224843760361, 0,
+  291889727977561, 0, 162225014479362, 0,
+  291890989982306, 0, 162225174554558, 0,
+  291892247875763, 0, 162225339753039, 0,
+  291893502163547, 0, 162225673230987, 0,
+  291894711382216, 0, 162225829494101, 0,
+  291895961021506, 0, 162225964530832, 0,
+  291897251690854, 0, 162226127287981, 0,
+  291898508630785, 0, 162226303710406, 0,
+  291899740172868, 0, 162226472478047, 0,
+  291900998878873, 0, 162226637402085, 0,
+  291902334919875, 0, 162226797873245, 0,
+  291903572196610, 0, 162226964352963, 0,
+  291904727342699, 0, 162227125312525, 0,
+  291906071189108, 0, 162228361337153, 0,
+  291907308146005, 0, 162229560625638, 0,
+  291908351925126, 0, 162230604986650, 0,
+  291909396411423, 0, 162231653690543, 0,
+  291910453965348, 0, 162232698550995, 0,
+  291912096870744, 0, 162233475264947, 0,
+  291913234148395, 0, 162233606516855, 0,
+  291915448096576, 0, 162233921145559, 0,
+  291916707748827, 0, 162234047154298, 0,
+  291918737451070, 0, 162234370837425, 0,
+  291919896016205, 0, 162234705504337, 0,
+  291921098663980, 0, 162234872320397, 0,
+  291922315691409, 0, 162235031023366, 0
+};
+
+struct test_entry
+{
+  gint n;
+  GstClockTime *v;
+  GstClockTime expect_internal;
+  GstClockTime expect_external;
+  guint64 expect_num;
+  guint64 expect_denom;
+} times[] = {
+  {
+  32, times1, 257154512360784, 120670380469753, 4052622913376634109,
+        4052799313904261962}, {
+  64, times1, 257359198881356, 120875054227405, 2011895759027682422,
+        2012014931360215503}, {
+  32, times2, 291705506022294, 162134297192792, 2319535707505209857,
+        2321009753483354451}, {
+  32, times3, 291922315691409, 162234934150296, 1370930728180888261,
+        4392719527011673456}
+};
+
+GST_START_TEST (test_regression)
+{
+  GstClockTime m_num, m_den, internal, external;
+  gdouble r_squared, rate, expect_rate;
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (times); i++) {
+    fail_unless (_priv_gst_do_linear_regression (times[i].v, times[i].n,
+            &m_num, &m_den, &external, &internal, &r_squared));
+
+    GST_LOG ("xbase %" G_GUINT64_FORMAT " ybase %" G_GUINT64_FORMAT " rate = %"
+        G_GUINT64_FORMAT " / %" G_GUINT64_FORMAT " = %.10f r_squared %f\n",
+        internal, external, m_num, m_den, (gdouble) (m_num) / (m_den),
+        r_squared);
+
+    /* Require high correlation */
+    fail_unless (r_squared >= 0.9);
+
+    fail_unless (internal == times[i].expect_internal,
+        "Regression params %d fail. internal %" G_GUINT64_FORMAT
+        " != expected %" G_GUINT64_FORMAT, i, internal,
+        times[i].expect_internal);
+    /* Rate must be within 1% tolerance */
+    expect_rate = ((gdouble) (times[i].expect_num) / times[i].expect_denom);
+    rate = ((gdouble) (m_num) / m_den);
+    fail_unless ((expect_rate - rate) >= -0.1 && (expect_rate - rate) <= 0.1,
+        "Regression params %d fail. Rate out of range. Expected %f, got %f",
+        i, expect_rate, rate);
+    fail_unless (external >= times[i].expect_external * 0.99 &&
+        external <= times[i].expect_external * 1.01,
+        "Regression params %d fail. external %" G_GUINT64_FORMAT
+        " != expected %" G_GUINT64_FORMAT, i, external,
+        times[i].expect_external);
+  }
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_clock_suite (void)
 {
@@ -117,6 +315,7 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_set_master_refcount);
+  tcase_add_test (tc_chain, test_regression);
 
   return s;
 }
diff --git a/tests/check/gst/gstelement.c b/tests/check/gst/gstelement.c
index faa95a5..8732611 100644
--- a/tests/check/gst/gstelement.c
+++ b/tests/check/gst/gstelement.c
@@ -50,40 +50,6 @@
 
 GST_END_TEST;
 
-
-GST_START_TEST (test_add_remove_readd_pad)
-{
-  GstElement *e;
-  GstPad *p;
-
-  /* getting an existing element class is cheating, but easier */
-  e = gst_element_factory_make ("fakesrc", "source");
-
-  /* create a new floating pad with refcount 1 */
-  p = gst_pad_new ("source", GST_PAD_SRC);
-
-  gst_object_ref (p);
-
-  /* simulate a real scenario where the pad is activated before added */
-  fail_unless (gst_pad_set_active (p, TRUE));
-  gst_element_add_pad (e, p);
-
-  /* now remove and deactivate it */
-  fail_unless (gst_pad_set_active (p, FALSE));
-  gst_element_remove_pad (e, p);
-
-  /* should be able to reuse the same pad */
-  fail_unless (gst_pad_set_active (p, TRUE));
-  fail_unless (gst_element_add_pad (e, p));
-
-  /* clean up our own reference */
-  gst_object_unref (p);
-  gst_object_unref (e);
-}
-
-GST_END_TEST;
-
-
 GST_START_TEST (test_add_pad_unref_element)
 {
   GstElement *e;
@@ -389,7 +355,6 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_add_remove_pad);
-  tcase_add_test (tc_chain, test_add_remove_readd_pad);
   tcase_add_test (tc_chain, test_add_pad_unref_element);
   tcase_add_test (tc_chain, test_error_no_bus);
   tcase_add_test (tc_chain, test_link);
diff --git a/tests/check/gst/gstinfo.c b/tests/check/gst/gstinfo.c
index cd9b018..595b908 100644
--- a/tests/check/gst/gstinfo.c
+++ b/tests/check/gst/gstinfo.c
@@ -332,6 +332,23 @@
 GST_END_TEST;
 #endif
 
+GST_START_TEST (info_fourcc)
+{
+  gchar *res;
+  const gchar *cmp;
+
+  cmp = "abcd";
+  res = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (0x64636261));
+  fail_unless_equals_string (res, cmp);
+  g_free (res);
+
+  cmp = ".bcd";
+  res = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (0x646362a9));
+  fail_unless_equals_string (res, cmp);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_info_suite (void)
 {
@@ -341,6 +358,7 @@
   tcase_set_timeout (tc_chain, 30);
 
   suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, info_fourcc);
 #ifndef GST_DISABLE_GST_DEBUG
   tcase_add_test (tc_chain, info_segment_format_printf_extension);
   tcase_add_test (tc_chain, info_ptr_format_printf_extension);
diff --git a/tests/check/gst/gstobject.c b/tests/check/gst/gstobject.c
index 96f6bcf..d02e357 100644
--- a/tests/check/gst/gstobject.c
+++ b/tests/check/gst/gstobject.c
@@ -355,10 +355,15 @@
   fail_if (parent != NULL, "GstFakeObject has parent");
   /* try to set a NULL parent, this should give a warning */
   ASSERT_CRITICAL (result = gst_object_set_parent (object1, NULL));
-  fail_if (result == TRUE, "GstFakeObject accepted NULL parent");
+  fail_if (result, "GstFakeObject accepted NULL parent");
   /* try to set itself as parent, we expect a warning here */
   ASSERT_CRITICAL (result = gst_object_set_parent (object1, object1));
-  fail_if (result == TRUE, "GstFakeObject accepted itself as parent");
+  fail_if (result, "GstFakeObject accepted itself as parent");
+
+  /* _has_parent always returns FALSE if there is no parent */
+  fail_if (gst_object_has_parent (object1, NULL));
+  fail_if (gst_object_has_parent (NULL, object1));
+  fail_if (gst_object_has_parent (object1, object1));
 
   /* should still be floating */
   fail_unless (g_object_is_floating (object1),
@@ -373,10 +378,12 @@
   fail_unless (g_object_is_floating (object1),
       "GstFakeObject instance is not floating");
 
+  result = gst_object_has_parent (object1, object2);
+  fail_if (result, "GstFakeObject has a parent");
+
   /* try to set other object as parent */
   result = gst_object_set_parent (object1, object2);
-  fail_if (result == FALSE,
-      "GstFakeObject could not accept other object as parent");
+  fail_unless (result, "GstFakeObject could not accept other object as parent");
 
   /* should not be floating anymore */
   fail_if (g_object_is_floating (object1),
@@ -386,12 +393,20 @@
       "GstFakeObject instance is not floating");
 
   /* check the parent */
-  parent = gst_object_get_parent (object1);
-  fail_if (parent != object2, "GstFakeObject has wrong parent");
-  gst_object_unref (parent);
+  fail_unless (gst_object_has_parent (object1, object2));
+
+  /* any other combination is invalid */
+  fail_if (gst_object_has_parent (object2, object1));
+  fail_if (gst_object_has_parent (object1, NULL));
+  fail_if (gst_object_has_parent (object2, NULL));
+  fail_if (gst_object_has_parent (NULL, object1));
+  fail_if (gst_object_has_parent (NULL, object2));
+  fail_if (gst_object_has_parent (object1, object1));
+  fail_if (gst_object_has_parent (object2, object2));
+
   /* try to set other object as parent again */
   result = gst_object_set_parent (object1, object2);
-  fail_if (result == TRUE, "GstFakeObject could set parent twice");
+  fail_if (result, "GstFakeObject could set parent twice");
 
   /* ref before unparenting */
   gst_object_ref (object1);
@@ -430,8 +445,7 @@
 
   /* try to set other object as parent */
   result = gst_object_set_parent (object1, object2);
-  fail_if (result == FALSE,
-      "GstFakeObject could not accept other object as parent");
+  fail_unless (result, "GstFakeObject could not accept other object as parent");
 
   /* clear parent of object */
   gst_object_unparent (object1);
@@ -461,25 +475,56 @@
 
   /* try to set other object as parent */
   result = gst_object_set_parent (object1, object3);
-  fail_if (result == FALSE,
-      "GstFakeObject could not accept other object as parent");
+  fail_unless (result, "GstFakeObject could not accept other object as parent");
   result = gst_object_set_parent (object2, object3);
-  fail_if (result == FALSE,
-      "GstFakeObject could not accept other object as parent");
+  fail_unless (result, "GstFakeObject could not accept other object as parent");
   result = gst_object_set_parent (object3, object4);
-  fail_if (result == FALSE,
-      "GstFakeObject could not accept other object as parent");
+  fail_unless (result, "GstFakeObject could not accept other object as parent");
 
+  /* Hierarchy:
+   *  object4
+   *   `- object3
+   *       |- object2
+   *       `- object1
+   */
+
+  /* An object isn't its own parent, but it is its own ancestor */
+  fail_if (gst_object_has_parent (object1, object1));
   fail_unless (gst_object_has_ancestor (object1, object1));
-  fail_if (gst_object_has_ancestor (object1, object2));
-  fail_unless (gst_object_has_ancestor (object1, object3));
-  fail_unless (gst_object_has_ancestor (object1, object4));
-  fail_if (gst_object_has_ancestor (object3, object1));
-  fail_if (gst_object_has_ancestor (object4, object1));
-  fail_unless (gst_object_has_ancestor (object3, object4));
-  fail_if (gst_object_has_ancestor (object4, object3));
+
+  fail_if (gst_object_has_parent (object4, object4));
   fail_unless (gst_object_has_ancestor (object4, object4));
 
+  /* direct parents */
+  fail_unless (gst_object_has_parent (object1, object3));
+  fail_unless (gst_object_has_ancestor (object1, object3));
+
+  fail_unless (gst_object_has_parent (object2, object3));
+  fail_unless (gst_object_has_ancestor (object2, object3));
+
+  fail_unless (gst_object_has_parent (object3, object4));
+  fail_unless (gst_object_has_ancestor (object3, object4));
+
+  /* grandparents */
+  fail_if (gst_object_has_parent (object1, object4));
+  fail_unless (gst_object_has_ancestor (object1, object4));
+
+  fail_if (gst_object_has_parent (object2, object4));
+  fail_unless (gst_object_has_ancestor (object2, object4));
+
+  /* not ancestors */
+  fail_if (gst_object_has_parent (object1, object2));
+  fail_if (gst_object_has_ancestor (object1, object2));
+
+  fail_if (gst_object_has_parent (object3, object1));
+  fail_if (gst_object_has_ancestor (object3, object1));
+
+  fail_if (gst_object_has_parent (object4, object1));
+  fail_if (gst_object_has_ancestor (object4, object1));
+
+  fail_if (gst_object_has_parent (object4, object3));
+  fail_if (gst_object_has_ancestor (object4, object3));
+
   /* unparent everything */
   gst_object_unparent (object3);
   gst_object_unparent (object2);
diff --git a/tests/check/gst/gstpad.c b/tests/check/gst/gstpad.c
index cf4586d..625fec0 100644
--- a/tests/check/gst/gstpad.c
+++ b/tests/check/gst/gstpad.c
@@ -1976,6 +1976,82 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_flush_stop_inactive)
+{
+  GstPad *sinkpad, *srcpad;
+
+  sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+  fail_unless (sinkpad != NULL);
+
+  /* new pads are inactive and flushing */
+  fail_if (GST_PAD_IS_ACTIVE (sinkpad));
+  fail_unless (GST_PAD_IS_FLUSHING (sinkpad));
+
+  /* this should fail, pad is inactive */
+  fail_if (gst_pad_send_event (sinkpad, gst_event_new_flush_stop (FALSE)));
+
+  /* nothing should have changed */
+  fail_if (GST_PAD_IS_ACTIVE (sinkpad));
+  fail_unless (GST_PAD_IS_FLUSHING (sinkpad));
+
+  gst_pad_set_active (sinkpad, TRUE);
+
+  /* pad is now active an not flushing anymore */
+  fail_unless (GST_PAD_IS_ACTIVE (sinkpad));
+  fail_if (GST_PAD_IS_FLUSHING (sinkpad));
+
+  /* do flush, does not deactivate the pad */
+  fail_unless (gst_pad_send_event (sinkpad, gst_event_new_flush_start ()));
+  fail_unless (GST_PAD_IS_ACTIVE (sinkpad));
+  fail_unless (GST_PAD_IS_FLUSHING (sinkpad));
+
+  fail_unless (gst_pad_send_event (sinkpad, gst_event_new_flush_stop (FALSE)));
+  fail_unless (GST_PAD_IS_ACTIVE (sinkpad));
+  fail_if (GST_PAD_IS_FLUSHING (sinkpad));
+
+  gst_pad_set_active (sinkpad, FALSE);
+  fail_if (GST_PAD_IS_ACTIVE (sinkpad));
+  fail_unless (GST_PAD_IS_FLUSHING (sinkpad));
+
+  gst_object_unref (sinkpad);
+
+  /* we should not be able to push on an inactive srcpad */
+  srcpad = gst_pad_new ("src", GST_PAD_SRC);
+  fail_unless (srcpad != NULL);
+
+  fail_if (GST_PAD_IS_ACTIVE (srcpad));
+  fail_unless (GST_PAD_IS_FLUSHING (srcpad));
+
+  fail_if (gst_pad_push_event (srcpad, gst_event_new_flush_stop (FALSE)));
+
+  /* should still be inactive and flushing */
+  fail_if (GST_PAD_IS_ACTIVE (srcpad));
+  fail_unless (GST_PAD_IS_FLUSHING (srcpad));
+
+  gst_pad_set_active (srcpad, TRUE);
+
+  /* pad is now active an not flushing anymore */
+  fail_unless (GST_PAD_IS_ACTIVE (srcpad));
+  fail_if (GST_PAD_IS_FLUSHING (srcpad));
+
+  /* do flush, does not deactivate the pad */
+  fail_if (gst_pad_push_event (srcpad, gst_event_new_flush_start ()));
+  fail_unless (GST_PAD_IS_ACTIVE (srcpad));
+  fail_unless (GST_PAD_IS_FLUSHING (srcpad));
+
+  fail_if (gst_pad_push_event (srcpad, gst_event_new_flush_stop (FALSE)));
+  fail_unless (GST_PAD_IS_ACTIVE (srcpad));
+  fail_if (GST_PAD_IS_FLUSHING (srcpad));
+
+  gst_pad_set_active (srcpad, FALSE);
+  fail_if (GST_PAD_IS_ACTIVE (srcpad));
+  fail_unless (GST_PAD_IS_FLUSHING (srcpad));
+
+  gst_object_unref (srcpad);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_pad_suite (void)
 {
@@ -2021,6 +2097,7 @@
   tcase_add_test (tc_chain, test_sticky_events);
   tcase_add_test (tc_chain, test_last_flow_return_push);
   tcase_add_test (tc_chain, test_last_flow_return_pull);
+  tcase_add_test (tc_chain, test_flush_stop_inactive);
 
   return s;
 }
diff --git a/tests/check/gst/gstpipeline.c b/tests/check/gst/gstpipeline.c
index e1b4670..d186bc7 100644
--- a/tests/check/gst/gstpipeline.c
+++ b/tests/check/gst/gstpipeline.c
@@ -574,6 +574,89 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_pipeline_reset_start_time)
+{
+  GstElement *pipeline, *fakesrc, *fakesink;
+  GstState state;
+  GstClock *clock;
+  GstClockID id;
+  gint64 position;
+
+  pipeline = gst_element_factory_make ("pipeline", "pipeline");
+  fakesrc = gst_element_factory_make ("fakesrc", "fakesrc");
+  fakesink = gst_element_factory_make ("fakesink", "fakesink");
+
+  g_object_set (fakesrc, "do-timestamp", TRUE, "format", GST_FORMAT_TIME, NULL);
+
+  fail_unless (pipeline && fakesrc && fakesink);
+
+  gst_bin_add_many (GST_BIN (pipeline), fakesrc, fakesink, NULL);
+  gst_element_link (fakesrc, fakesink);
+
+  fail_unless (gst_element_get_start_time (fakesink) == 0);
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING),
+      GST_STATE_CHANGE_ASYNC);
+  fail_unless_equals_int (gst_element_get_state (pipeline, &state, NULL, -1),
+      GST_STATE_CHANGE_SUCCESS);
+  fail_unless_equals_int (state, GST_STATE_PLAYING);
+
+  /* We just started and never paused, start time must be 0 */
+  fail_unless (gst_element_get_start_time (fakesink) == 0);
+
+  clock = gst_pipeline_get_clock (GST_PIPELINE (pipeline));
+  fail_unless (clock != NULL);
+  id = gst_clock_new_single_shot_id (clock,
+      gst_element_get_base_time (pipeline) + 55 * GST_MSECOND);
+  gst_clock_id_wait (id, NULL);
+  gst_clock_id_unref (id);
+  gst_object_unref (clock);
+
+  /* We waited 50ms, so the position should be now >= 50ms */
+  fail_unless (gst_element_query_position (fakesink, GST_FORMAT_TIME,
+          &position));
+  fail_unless (position >= 50 * GST_MSECOND);
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_ASYNC);
+  fail_unless_equals_int (gst_element_get_state (pipeline, &state, NULL, -1),
+      GST_STATE_CHANGE_SUCCESS);
+  fail_unless_equals_int (state, GST_STATE_PAUSED);
+
+  /* And now after pausing the start time should be bigger than the last
+   * position */
+  fail_unless (gst_element_get_start_time (fakesink) >= 50 * GST_MSECOND);
+  fail_unless (gst_element_query_position (fakesink, GST_FORMAT_TIME,
+          &position));
+  fail_unless (position >= 50 * GST_MSECOND);
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_READY),
+      GST_STATE_CHANGE_SUCCESS);
+
+  /* When going back to ready the start time should be reset everywhere */
+  fail_unless (gst_element_get_start_time (fakesink) == 0);
+
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PAUSED),
+      GST_STATE_CHANGE_ASYNC);
+  fail_unless_equals_int (gst_element_get_state (pipeline, &state, NULL, -1),
+      GST_STATE_CHANGE_SUCCESS);
+  fail_unless_equals_int (state, GST_STATE_PAUSED);
+
+  /* And the start time should still be set to 0 when we go to paused for the
+   * first time. Same goes for the position */
+  fail_unless (gst_element_query_position (fakesink, GST_FORMAT_TIME,
+          &position));
+  fail_unless (position < 50 * GST_MSECOND);
+
+  fail_unless (gst_element_get_start_time (fakesink) == 0);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_pipeline_suite (void)
 {
@@ -591,6 +674,7 @@
   tcase_add_test (tc_chain, test_base_time);
   tcase_add_test (tc_chain, test_concurrent_create);
   tcase_add_test (tc_chain, test_pipeline_in_pipeline);
+  tcase_add_test (tc_chain, test_pipeline_reset_start_time);
 
   return s;
 }
diff --git a/tests/check/gst/gstprintf.c b/tests/check/gst/gstprintf.c
new file mode 100644
index 0000000..724de35
--- /dev/null
+++ b/tests/check/gst/gstprintf.c
@@ -0,0 +1,135 @@
+/* GStreamer unit tests for the custom printf
+ * Copyright (C) 2015 Tim-Philipp Müller <tim centricular com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+
+#include <string.h>
+
+#ifdef GST_DISABLE_GST_DEBUG
+#error "Something wrong with the build system setup"
+#endif
+
+#include "gst/printf/printf.h"
+/*
+#include "gst/printf/printf-extension.h"
+*/
+
+static char *
+test_printf (const char *format, ...)
+{
+  va_list varargs;
+  char *str = NULL;
+  int len;
+
+  va_start (varargs, format);
+  len = __gst_vasprintf (&str, format, varargs);
+  va_end (varargs);
+
+  if (len <= 0)
+    return NULL;
+
+  GST_INFO ("[%s]", str);
+  return str;
+}
+
+GST_START_TEST (printf_I32_I64)
+{
+  guint64 v64 = 0xf1e2d3c4b5a6978f;
+  guint32 v32 = 0xf1e2d3cf;
+  guint vu = 0xf1e2d3cf;
+  gchar *str;
+
+  /* standard int/uint */
+  str = test_printf ("x = %x", vu);
+  fail_unless_equals_string (str, "x = f1e2d3cf");
+  g_free (str);
+  str = test_printf ("u = %u", vu);
+  fail_unless_equals_string (str, "u = 4058174415");
+  g_free (str);
+  str = test_printf ("d = %d", vu);
+  fail_unless_equals_string (str, "d = -236792881");
+  g_free (str);
+
+  /* 32 bit GLib */
+  str = test_printf ("32-bit x value = %" G_GINT32_MODIFIER "x", v32);
+  fail_unless_equals_string (str, "32-bit x value = f1e2d3cf");
+  g_free (str);
+  str = test_printf ("32-bit u value = %" G_GUINT32_FORMAT, v32);
+  fail_unless_equals_string (str, "32-bit u value = 4058174415");
+  g_free (str);
+  str = test_printf ("32-bit d value = %" G_GINT32_FORMAT, v32);
+  fail_unless_equals_string (str, "32-bit d value = -236792881");
+  g_free (str);
+
+  /* 64 bit Glib */
+  str = test_printf ("64-bit x value = %" G_GINT64_MODIFIER "x", v64);
+  fail_unless_equals_string (str, "64-bit x value = f1e2d3c4b5a6978f");
+  g_free (str);
+  str = test_printf ("64-bit u value = %" G_GUINT64_FORMAT, v64);
+  fail_unless_equals_string (str, "64-bit u value = 17429726349691885455");
+  g_free (str);
+  str = test_printf ("64-bit d value = %" G_GINT64_FORMAT, v64);
+  fail_unless_equals_string (str, "64-bit d value = -1017017724017666161");
+  g_free (str);
+
+  /* 32 bit Windows */
+  str = test_printf ("I32x value = %I32x", v32);
+  fail_unless_equals_string (str, "I32x value = f1e2d3cf");
+  g_free (str);
+  str = test_printf ("I32u value = %I32u", v32);
+  fail_unless_equals_string (str, "I32u value = 4058174415");
+  g_free (str);
+  str = test_printf ("I32d value = %I32d", v32);
+  fail_unless_equals_string (str, "I32d value = -236792881");
+  g_free (str);
+
+  /* needs testing first */
+#if 0
+#ifdef G_OS_WIN32
+  /* 64 bit Windows */
+  str = test_printf ("I64x value = %I64x", v64);
+  fail_unless_equals_string (str, "I64x value = f1e2d3c4b5a6978f");
+  g_free (str);
+  str = test_printf ("I64u value = %I64u", v64);
+  fail_unless_equals_string (str, "I64u value = 17429726349691885455");
+  g_free (str);
+  str = test_printf ("I64d value = %I64d", v64);
+  fail_unless_equals_string (str, "I64d value = -1017017724017666161");
+  g_free (str);
+#endif
+#endif
+}
+
+GST_END_TEST;
+
+static Suite *
+gst_printf_suite (void)
+{
+  Suite *s = suite_create ("GstPrintf");
+  TCase *tc_chain = tcase_create ("gstprintf");
+
+  tcase_set_timeout (tc_chain, 30);
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, printf_I32_I64);
+
+  return s;
+}
+
+GST_CHECK_MAIN (gst_printf);
diff --git a/tests/check/gst/gststructure.c b/tests/check/gst/gststructure.c
index d1fb801..18c58f6 100644
--- a/tests/check/gst/gststructure.c
+++ b/tests/check/gst/gststructure.c
@@ -242,6 +242,48 @@
 
 GST_END_TEST;
 
+/* Added to make sure taglists are properly serialized/deserialized after bug
+ * https://bugzilla.gnome.org/show_bug.cgi?id=733131 */
+GST_START_TEST (test_to_from_string_tag_event)
+{
+  GstEvent *tagevent;
+  GstTagList *taglist;
+  GstStructure *st1, *st2;
+  gchar *str;
+
+  /* empty taglist */
+  taglist = gst_tag_list_new_empty ();
+  tagevent = gst_event_new_tag (taglist);
+
+  st1 = (GstStructure *) gst_event_get_structure (tagevent);
+  str = gst_structure_to_string (st1);
+  fail_unless (str != NULL);
+
+  st2 = gst_structure_new_from_string (str);
+  fail_unless (st2 != NULL);
+  fail_unless (gst_structure_is_equal (st1, st2));
+  gst_event_unref (tagevent);
+  gst_structure_free (st2);
+  g_free (str);
+
+  /* taglist with data */
+  taglist = gst_tag_list_new ("title", "TEST TITLE", NULL);
+  tagevent = gst_event_new_tag (taglist);
+
+  st1 = (GstStructure *) gst_event_get_structure (tagevent);
+  str = gst_structure_to_string (st1);
+  fail_unless (str != NULL);
+
+  st2 = gst_structure_new_from_string (str);
+  fail_unless (st2 != NULL);
+  fail_unless (gst_structure_is_equal (st1, st2));
+  gst_event_unref (tagevent);
+  gst_structure_free (st2);
+  g_free (str);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_complete_structure)
 {
   GstStructure *structure;
@@ -626,6 +668,87 @@
 
 GST_END_TEST;
 
+static gboolean
+foreach_func (GQuark field_id, const GValue * value, gpointer user_data)
+{
+  gint *sum = user_data;
+  gint v = 0;
+
+  if (G_VALUE_HOLDS_INT (value))
+    v = g_value_get_int (value);
+  *sum += v;
+
+  return TRUE;
+}
+
+GST_START_TEST (test_foreach)
+{
+  GstStructure *s;
+  gint sum = 0;
+
+  s = gst_structure_new ("foo/bar", "baz", G_TYPE_INT, 1, "bla", G_TYPE_INT, 3,
+      NULL);
+  fail_unless (gst_structure_foreach (s, foreach_func, &sum));
+  fail_unless_equals_int (sum, 4);
+  gst_structure_free (s);
+
+}
+
+GST_END_TEST;
+
+static gboolean
+map_func (GQuark field_id, GValue * value, gpointer user_data)
+{
+  if (G_VALUE_HOLDS_INT (value))
+    g_value_set_int (value, 123);
+
+  return TRUE;
+}
+
+GST_START_TEST (test_map_in_place)
+{
+  GstStructure *s, *s2;
+
+  s = gst_structure_new ("foo/bar", "baz", G_TYPE_INT, 1, "bla", G_TYPE_INT, 3,
+      NULL);
+  s2 = gst_structure_new ("foo/bar", "baz", G_TYPE_INT, 123, "bla", G_TYPE_INT,
+      123, NULL);
+  fail_unless (gst_structure_map_in_place (s, map_func, NULL));
+  fail_unless (gst_structure_is_equal (s, s2));
+  gst_structure_free (s);
+  gst_structure_free (s2);
+
+}
+
+GST_END_TEST;
+
+static gboolean
+filter_map_func (GQuark field_id, GValue * value, gpointer user_data)
+{
+  if (strcmp (g_quark_to_string (field_id), "bla") == 0)
+    return FALSE;
+
+  if (G_VALUE_HOLDS_INT (value))
+    g_value_set_int (value, 2);
+
+  return TRUE;
+}
+
+GST_START_TEST (test_filter_and_map_in_place)
+{
+  GstStructure *s, *s2;
+
+  s = gst_structure_new ("foo/bar", "baz", G_TYPE_INT, 1, "bla", G_TYPE_INT, 3,
+      NULL);
+  s2 = gst_structure_new ("foo/bar", "baz", G_TYPE_INT, 2, NULL);
+  gst_structure_filter_and_map_in_place (s, filter_map_func, NULL);
+  fail_unless (gst_structure_is_equal (s, s2));
+  gst_structure_free (s);
+  gst_structure_free (s2);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_structure_suite (void)
 {
@@ -638,6 +761,7 @@
   tcase_add_test (tc_chain, test_from_string);
   tcase_add_test (tc_chain, test_to_string);
   tcase_add_test (tc_chain, test_to_from_string);
+  tcase_add_test (tc_chain, test_to_from_string_tag_event);
   tcase_add_test (tc_chain, test_string_properties);
   tcase_add_test (tc_chain, test_complete_structure);
   tcase_add_test (tc_chain, test_structure_new);
@@ -647,6 +771,9 @@
   tcase_add_test (tc_chain, test_structure_nested);
   tcase_add_test (tc_chain, test_structure_nested_from_and_to_string);
   tcase_add_test (tc_chain, test_vararg_getters);
+  tcase_add_test (tc_chain, test_foreach);
+  tcase_add_test (tc_chain, test_map_in_place);
+  tcase_add_test (tc_chain, test_filter_and_map_in_place);
   return s;
 }
 
diff --git a/tests/check/gst/gsttag.c b/tests/check/gst/gsttag.c
index fe770a0..7a5e5ca 100644
--- a/tests/check/gst/gsttag.c
+++ b/tests/check/gst/gsttag.c
@@ -608,6 +608,25 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_empty_taglist_serialization)
+{
+  GstTagList *taglist, *taglist2;
+  gchar *str;
+
+  taglist = gst_tag_list_new_empty ();
+  str = gst_tag_list_to_string (taglist);
+  taglist2 = gst_tag_list_new_from_string (str);
+  fail_if (taglist2 == NULL);
+  fail_unless (gst_tag_list_is_equal (taglist, taglist2));
+
+  gst_tag_list_unref (taglist);
+  gst_tag_list_unref (taglist2);
+  g_free (str);
+}
+
+GST_END_TEST;
+
+
 static Suite *
 gst_tag_suite (void)
 {
@@ -628,6 +647,7 @@
   tcase_add_test (tc_chain, test_equal);
   tcase_add_test (tc_chain, test_writability);
   tcase_add_test (tc_chain, test_serialization);
+  tcase_add_test (tc_chain, test_empty_taglist_serialization);
 
   return s;
 }
diff --git a/tests/check/gst/gsturi.c b/tests/check/gst/gsturi.c
index 1d53265..3d80098 100644
--- a/tests/check/gst/gsturi.c
+++ b/tests/check/gst/gsturi.c
@@ -164,6 +164,790 @@
 
 GST_END_TEST;
 
+/* Taken from the GNet unit test and extended with other URIs:
+ * https://git.gnome.org/browse/archive/gnet/plain/tests/check/gnet/gneturi.c
+ */
+struct QueryValue
+{
+  const gchar *key;
+  const gchar *value;
+};
+
+struct URITest
+{
+  const gchar *str;
+  struct
+  {
+    const gchar *scheme;
+    const gchar *userinfo;
+    const gchar *host;
+    gint port;
+    const gchar *path;
+    /* needs to be updated if more than 10 */
+    struct QueryValue query[10];
+    const gchar *fragment;
+  } uri;
+};
+
+static const struct URITest tests[] = {
+  /* VALID URIS.  PARSING AND PRINTING OF THESE SHOULD NOT CHANGE */
+
+  /* scheme/path */
+  {"scheme:",
+      {"scheme", NULL, NULL, GST_URI_NO_PORT, NULL, {{NULL, NULL}}, NULL}},
+
+  {"scheme:path",
+      {"scheme", NULL, NULL, GST_URI_NO_PORT, "path", {{NULL, NULL}}, NULL}},
+
+  {"path",
+      {NULL, NULL, NULL, GST_URI_NO_PORT, "path", {{NULL, NULL}}, NULL}},
+
+  {"/path",
+      {NULL, NULL, NULL, GST_URI_NO_PORT, "/path", {{NULL, NULL}}, NULL}},
+
+  /* hostname/port */
+  {"scheme://hostname/path",
+        {"scheme", NULL, "hostname", GST_URI_NO_PORT, "/path", {{NULL, NULL}},
+          NULL}},
+
+  {"scheme://hostname:123/path",
+      {"scheme", NULL, "hostname", 123, "/path", {{NULL, NULL}}, NULL}},
+
+  /* ipv6 hostname/port */
+  {"scheme://[01:23:45:67:89:ab:cd:ef]/path",
+        {"scheme", NULL, "01:23:45:67:89:ab:cd:ef", GST_URI_NO_PORT, "/path",
+          {{NULL, NULL}}, NULL}},
+
+  {"scheme://[01:23:45:67:89:ab:cd:ef]:123/path",
+        {"scheme", NULL, "01:23:45:67:89:ab:cd:ef", 123, "/path", {{NULL,
+                  NULL}}, NULL}},
+
+  /* query/fragment */
+  {"path?query",
+        {NULL, NULL, NULL, GST_URI_NO_PORT, "path", {{"query", NULL}, {NULL,
+                  NULL}}, NULL}},
+  {"path?query=value",
+        {NULL, NULL, NULL, GST_URI_NO_PORT, "path", {{"query", "value"}, {NULL,
+                  NULL}}, NULL}},
+
+  {"path?query#fragment",
+        {NULL, NULL, NULL, GST_URI_NO_PORT, "path", {{"query", NULL}, {NULL,
+                  NULL}}, "fragment"}},
+
+  {"path?query=value#fragment",
+        {NULL, NULL, NULL, GST_URI_NO_PORT, "path", {{"query", "value"}, {NULL,
+                  NULL}}, "fragment"}},
+
+  {"scheme:path?query#fragment",
+        {"scheme", NULL, NULL, GST_URI_NO_PORT, "path", {{"query", NULL}, {NULL,
+                  NULL}}, "fragment"}},
+
+  /* full */
+  {"scheme://hostname:123/path?query#fragment",
+        {"scheme", NULL, "hostname", 123, "/path", {{"query", NULL}, {NULL,
+                  NULL}}, "fragment"}},
+
+  {"scheme://hostname:123/path?query=value#fragment",
+        {"scheme", NULL, "hostname", 123, "/path", {{"query", "value"}, {NULL,
+                  NULL}}, "fragment"}},
+
+  {"scheme://hostname:123?query",
+        {"scheme", NULL, "hostname", 123, NULL, {{"query", NULL}, {NULL,
+                  NULL}}, NULL}},
+
+  {"scheme://hostname:123?query=value",
+        {"scheme", NULL, "hostname", 123, NULL, {{"query", "value"}, {NULL,
+                  NULL}}, NULL}},
+
+  {"scheme://hostname:123?query#fragment",
+        {"scheme", NULL, "hostname", 123, NULL, {{"query", NULL}, {NULL,
+                  NULL}}, "fragment"}},
+
+  {"scheme://hostname:123?query=value#fragment",
+        {"scheme", NULL, "hostname", 123, NULL, {{"query", "value"}, {NULL,
+                  NULL}}, "fragment"}},
+
+  /* user/pass */
+  {"scheme://userinfo@hostname",
+        {"scheme", "userinfo", "hostname", GST_URI_NO_PORT, NULL, {{NULL,
+                  NULL}}, NULL}},
+
+  {"scheme://userinfo@hostname:123/path?query#fragment",
+        {"scheme", "userinfo", "hostname", 123, "/path", {{"query", NULL},
+              {NULL, NULL}}, "fragment"}},
+
+  {"scheme://user:pass@hostname",
+        {"scheme", "user:pass", "hostname", GST_URI_NO_PORT, NULL, {{NULL,
+                  NULL}}, NULL}},
+
+  {"scheme://user:pass@hostname:123/path?query#fragment",
+        {"scheme", "user:pass", "hostname", 123, "/path", {{"query", NULL},
+              {NULL, NULL}}, "fragment"}},
+
+  /* FUNNY URIS.  PARSING AND PRINTING OF THESE MAY CHANGE */
+
+  {"scheme:hostname:123/path?query#fragment",
+        {"scheme", NULL, NULL, GST_URI_NO_PORT, "hostname:123/path", {{"query",
+                  NULL}, {NULL, NULL}}, "fragment"}},
+
+  {"scheme://:pass@hostname:123/path?query#fragment",
+        {"scheme", ":pass", "hostname", 123, "/path", {{"query", NULL}, {NULL,
+                  NULL}}, "fragment"}},
+
+  /* Skip initial white space */
+  {" \f\n\r\t\vscheme:",
+      {"scheme", NULL, NULL, GST_URI_NO_PORT, NULL, {{NULL, NULL}}, NULL}},
+
+  {" \f\n\r\t\vpath",
+      {NULL, NULL, NULL, GST_URI_NO_PORT, "path", {{NULL, NULL}}, NULL}},
+
+  /* file URI */
+  {"file://host/home/joe/foo.txt",
+        {"file", NULL, "host", GST_URI_NO_PORT, "/home/joe/foo.txt", {{NULL,
+                  NULL}}, NULL}},
+  {"file:///home/joe/foo.txt",
+        {"file", NULL, NULL, GST_URI_NO_PORT, "/home/joe/foo.txt", {{NULL,
+                  NULL}}, NULL}},
+};
+
+static const gchar *unparsable_uri_tests[] = {
+  /* Path not started correctly */
+  "scheme://hostname:123path?query#fragment",
+
+  /* Brackets that don't close */
+  "scheme://[01:23:45:67:89:ab:cd:ef:123/path",
+
+  /* IPv6 hostname without brackets */
+  "scheme://01:23:45:67:89:ab:cd:ef:123/path",
+};
+
+GST_START_TEST (test_url_parsing)
+{
+  GstUri *uri;
+  GList *list;
+  gchar *tmp_str;
+  guint i, j;
+
+  for (i = 0; i < G_N_ELEMENTS (tests); i++) {
+    GST_DEBUG ("Testing URI '%s'", tests[i].str);
+
+    uri = gst_uri_from_string (tests[i].str);
+    fail_unless (uri != NULL);
+    fail_unless_equals_string (gst_uri_get_scheme (uri), tests[i].uri.scheme);
+    fail_unless_equals_string (gst_uri_get_userinfo (uri),
+        tests[i].uri.userinfo);
+    fail_unless_equals_string (gst_uri_get_host (uri), tests[i].uri.host);
+    fail_unless_equals_int (gst_uri_get_port (uri), tests[i].uri.port);
+    tmp_str = gst_uri_get_path (uri);
+    fail_unless_equals_string (tmp_str, tests[i].uri.path);
+    g_free (tmp_str);
+
+    for (j = 0; j < 10; j++) {
+      if (!tests[i].uri.query[j].key)
+        break;
+
+      if (tests[i].uri.query[j].value) {
+        fail_unless_equals_string (gst_uri_get_query_value (uri,
+                tests[i].uri.query[j].key), tests[i].uri.query[j].value);
+      } else {
+        fail_unless (gst_uri_query_has_key (uri, tests[i].uri.query[j].key));
+      }
+    }
+    list = gst_uri_get_query_keys (uri);
+    fail_unless_equals_int (j, g_list_length (list));
+    g_list_free (list);
+    gst_uri_unref (uri);
+  }
+
+  for (i = 0; i < G_N_ELEMENTS (unparsable_uri_tests); i++) {
+    GST_DEBUG ("Testing unparsable URI '%s'", unparsable_uri_tests[i]);
+
+    uri = gst_uri_from_string (unparsable_uri_tests[i]);
+    fail_unless (uri == NULL);
+  }
+}
+
+GST_END_TEST;
+
+static const struct URITest url_presenting_tests[] = {
+  /* check all URI elements present */
+  {.uri = {"scheme", "user:pass", "host", 1234, "/path/to/dir",
+          {{"query", NULL}, {"key", "value"}}, "fragment"},
+      .str =
+      "scheme://user:pass@host:1234/path/to/dir?query&key=value#fragment"},
+
+  /* IPv6 literal should render in square brackets */
+  {.uri = {"scheme", "user:pass", "12:34:56:78:9a:bc:de:f0", 1234,
+          "/path/to/dir", {{"query", "value"}}, "fragment"},
+      .str =
+      "scheme://user:pass@[12:34:56:78:9a:bc:de:f0]:1234/path/to/dir?query=value#fragment"},
+};
+
+GST_START_TEST (test_url_presenting)
+{
+  GstUri *uri;
+  gchar *result;
+  guint i, j;
+
+  for (i = 0; i < G_N_ELEMENTS (url_presenting_tests); i++) {
+    uri = gst_uri_new (url_presenting_tests[i].uri.scheme,
+        url_presenting_tests[i].uri.userinfo,
+        url_presenting_tests[i].uri.host,
+        url_presenting_tests[i].uri.port,
+        url_presenting_tests[i].uri.path,
+        NULL, url_presenting_tests[i].uri.fragment);
+    fail_unless (uri != NULL);
+    for (j = 0; j < 10; j++) {
+      if (!url_presenting_tests[i].uri.query[j].key)
+        break;
+
+      fail_unless (gst_uri_set_query_value (uri,
+              url_presenting_tests[i].uri.query[j].key,
+              url_presenting_tests[i].uri.query[j].value));
+    }
+
+    result = gst_uri_to_string (uri);
+    fail_unless_equals_string (result, url_presenting_tests[i].str);
+    g_free (result);
+    gst_uri_unref (uri);
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_url_normalization)
+{
+  GstUri *url;
+  gchar *tmp_str;
+
+  url =
+      gst_uri_from_string
+      ("ScHeMe://User:P%61ss@HOST.%63om:1234/path/./from/../to%7d/item%2dobj?qu%65ry=something#fr%61gment");
+  fail_unless (gst_uri_normalize (url));
+  fail_unless_equals_string (gst_uri_get_scheme (url), "scheme");
+  fail_unless_equals_string (gst_uri_get_userinfo (url), "User:Pass");
+  fail_unless_equals_string (gst_uri_get_host (url), "host.com");
+  tmp_str = gst_uri_get_path (url);
+  fail_unless_equals_string (tmp_str, "/path/to}/item-obj");
+  g_free (tmp_str);
+  fail_unless (gst_uri_query_has_key (url, "query"));
+  fail_unless_equals_string (gst_uri_get_query_value (url, "query"),
+      "something");
+  fail_unless_equals_string (gst_uri_get_fragment (url), "fragment");
+  gst_uri_unref (url);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_url_joining)
+{
+  GstUri *base, *rel, *joined;
+  gchar *l;
+
+  base =
+      gst_uri_from_string
+      ("http://example.com/path/to/dir/filename.html#fragment");
+
+  /* test change of fragment only */
+  rel = gst_uri_from_string ("#new_frag");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/dir/filename.html#new_frag");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test addition of new query string */
+  rel = gst_uri_from_string ("?key=val");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/dir/filename.html?key=val");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test new base filename */
+  rel = gst_uri_from_string ("new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/dir/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test relative file same directory */
+  rel = gst_uri_from_string ("./new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/dir/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test relative file parent directory */
+  rel = gst_uri_from_string ("../new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l, "http://example.com/path/to/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test relative file grandparent directory */
+  rel = gst_uri_from_string ("../../new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l, "http://example.com/path/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test relative file root directory */
+  rel = gst_uri_from_string ("../../../new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l, "http://example.com/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test relative file beyond root directory */
+  rel = gst_uri_from_string ("../../../../new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l, "http://example.com/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test add subdirectory */
+  rel = gst_uri_from_string ("subdir/new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/dir/subdir/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test change directory */
+  rel = gst_uri_from_string ("../subdir/new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/subdir/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  gst_uri_unref (base);
+
+  /* change base for path ending in directory */
+  base = gst_uri_from_string ("http://example.com/path/to/dir/");
+
+  /* test adding file to directory */
+  rel = gst_uri_from_string ("new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/dir/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test adding file to directory using relative path */
+  rel = gst_uri_from_string ("./new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l,
+      "http://example.com/path/to/dir/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test filename in parent directory */
+  rel = gst_uri_from_string ("../new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l, "http://example.com/path/to/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  /* test replace with absolute */
+  rel = gst_uri_from_string ("https://ssl.example.com/new_filename.xml");
+  joined = gst_uri_join (base, rel);
+  l = gst_uri_to_string (joined);
+  fail_unless_equals_string (l, "https://ssl.example.com/new_filename.xml");
+  g_free (l);
+  gst_uri_unref (joined);
+  gst_uri_unref (rel);
+
+  gst_uri_unref (base);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_url_equality)
+{
+  GstUri *url1, *url2;
+
+  url1 =
+      gst_uri_from_string
+      ("ScHeMe://User:Pass@HOST.com:1234/path/./from/../to%7d/item%2dobj?query=something#fragment");
+
+  /* equal */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:1234/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (gst_uri_equal (url1, url2));
+  fail_unless (gst_uri_equal (url2, url1));
+  gst_uri_unref (url2);
+
+  /* different fragment */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:1234/path/to%7D/item-obj?query=something#different-fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different query */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:1234/path/to%7D/item-obj?query=different-something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different path */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:1234/path/to%7D/different-item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different port */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:4321/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different host */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@different-host.com:1234/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different userinfo */
+  url2 =
+      gst_uri_from_string
+      ("scheme://Different-User:Pass@host.com:1234/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different scheme */
+  url2 =
+      gst_uri_from_string
+      ("different+scheme://User:Pass@host.com:1234/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different (no scheme) */
+  url2 =
+      gst_uri_from_string
+      ("//User:Pass@host.com:1234/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different (no userinfo) */
+  url2 =
+      gst_uri_from_string
+      ("scheme://host.com:1234/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different (no host) */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@:1234/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different (no port) */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com/path/to%7D/item-obj?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different (no path) */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:1234?query=something#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different (no query) */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:1234/path/to%7D/item-obj#fragment");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* different (no fragment) */
+  url2 =
+      gst_uri_from_string
+      ("scheme://User:Pass@host.com:1234/path/to%7D/item-obj?query=something");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  /* compare two NULL uris */
+  fail_unless (gst_uri_equal (NULL, NULL));
+
+  /* compare same object */
+  fail_unless (gst_uri_equal (url1, url1));
+
+  /* compare one NULL and one non-NULL uri */
+  fail_unless (!gst_uri_equal (url1, NULL));
+  fail_unless (!gst_uri_equal (NULL, url1));
+
+  gst_uri_unref (url1);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_url_constructors)
+{
+  GstUri *url1, *url2;
+  gchar *tmp_str;
+  GHashTable *tmp_table;
+
+  url1 =
+      gst_uri_new ("scheme", "userinfo", "hostname", 1234, "/path/to/file",
+      "query", "fragment");
+  fail_unless_equals_string (gst_uri_get_scheme (url1), "scheme");
+  fail_unless_equals_string (gst_uri_get_userinfo (url1), "userinfo");
+  fail_unless_equals_string (gst_uri_get_host (url1), "hostname");
+  fail_unless (gst_uri_get_port (url1) == 1234);
+  tmp_str = gst_uri_get_path (url1);
+  fail_unless_equals_string (tmp_str, "/path/to/file");
+  g_free (tmp_str);
+  tmp_table = gst_uri_get_query_table (url1);
+  fail_unless (g_hash_table_size (tmp_table) == 1);
+  fail_unless (g_hash_table_contains (tmp_table, "query"));
+  fail_unless (g_hash_table_lookup (tmp_table, "query") == NULL);
+  g_hash_table_unref (tmp_table);
+  fail_unless_equals_string (gst_uri_get_fragment (url1), "fragment");
+  tmp_str = gst_uri_to_string (url1);
+  fail_unless_equals_string (tmp_str,
+      "scheme://userinfo@hostname:1234/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  url2 =
+      gst_uri_new_with_base (url1, NULL, NULL, NULL, GST_URI_NO_PORT,
+      "new_file", NULL, NULL);
+  fail_unless_equals_string (gst_uri_get_scheme (url2), "scheme");
+  fail_unless_equals_string (gst_uri_get_userinfo (url2), "userinfo");
+  fail_unless_equals_string (gst_uri_get_host (url2), "hostname");
+  fail_unless (gst_uri_get_port (url2) == 1234);
+  tmp_str = gst_uri_get_path (url2);
+  fail_unless_equals_string (tmp_str, "/path/to/new_file");
+  g_free (tmp_str);
+  fail_unless (gst_uri_get_query_table (url2) == NULL);
+  fail_unless (gst_uri_get_fragment (url2) == NULL);
+  tmp_str = gst_uri_to_string (url2);
+  fail_unless_equals_string (tmp_str,
+      "scheme://userinfo@hostname:1234/path/to/new_file");
+  g_free (tmp_str);
+  gst_uri_unref (url2);
+
+  url2 = gst_uri_from_string_with_base (url1, "/a/new/path/to/file");
+  fail_unless_equals_string (gst_uri_get_scheme (url2), "scheme");
+  fail_unless_equals_string (gst_uri_get_userinfo (url2), "userinfo");
+  fail_unless_equals_string (gst_uri_get_host (url2), "hostname");
+  fail_unless (gst_uri_get_port (url2) == 1234);
+  tmp_str = gst_uri_get_path (url2);
+  fail_unless_equals_string (tmp_str, "/a/new/path/to/file");
+  g_free (tmp_str);
+  fail_unless (gst_uri_get_query_table (url2) == NULL);
+  fail_unless (gst_uri_get_fragment (url2) == NULL);
+  tmp_str = gst_uri_to_string (url2);
+  fail_unless_equals_string (tmp_str,
+      "scheme://userinfo@hostname:1234/a/new/path/to/file");
+  g_free (tmp_str);
+  gst_uri_unref (url2);
+
+  url2 = gst_uri_copy (url1);
+  fail_unless (gst_uri_equal (url1, url2));
+  gst_uri_set_query_value (url2, "key", "value");
+  fail_unless (!gst_uri_equal (url1, url2));
+  gst_uri_unref (url2);
+
+  gst_uri_unref (url1);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_url_get_set)
+{
+  GstUri *url;
+  gchar *tmp_str;
+  GList *tmp_list;
+
+  url = gst_uri_from_string ("scheme://hostname/path/to/file?query#fragment");
+
+  fail_unless (gst_uri_set_scheme (url, "new+scheme"));
+  fail_unless_equals_string (gst_uri_get_scheme (url), "new+scheme");
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "new+scheme://hostname/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (gst_uri_set_scheme (url, NULL));
+  fail_unless (gst_uri_get_scheme (url) == NULL);
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str, "//hostname/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_set_scheme (NULL, "fail"));
+  fail_unless (gst_uri_set_scheme (NULL, NULL));
+
+  fail_unless (gst_uri_set_userinfo (url, "username:password"));
+  fail_unless_equals_string (gst_uri_get_userinfo (url), "username:password");
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//username:password@hostname/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (gst_uri_set_userinfo (url, NULL));
+  fail_unless (gst_uri_get_userinfo (url) == NULL);
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str, "//hostname/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_set_userinfo (NULL, "fail"));
+  fail_unless (gst_uri_set_userinfo (NULL, NULL));
+
+  fail_unless (gst_uri_set_host (url, NULL));
+  fail_unless (gst_uri_get_host (url) == NULL);
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str, "/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (gst_uri_set_host (url, "example.com"));
+  fail_unless_equals_string (gst_uri_get_host (url), "example.com");
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_set_host (NULL, "fail"));
+  fail_unless (gst_uri_set_host (NULL, NULL));
+
+  fail_unless (gst_uri_set_port (url, 12345));
+  fail_unless (gst_uri_get_port (url) == 12345);
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com:12345/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (gst_uri_set_port (url, GST_URI_NO_PORT));
+  fail_unless (gst_uri_get_port (url) == GST_URI_NO_PORT);
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_set_port (NULL, 1234));
+  fail_unless (gst_uri_set_port (NULL, GST_URI_NO_PORT));
+
+  fail_unless (gst_uri_append_path_segment (url, "here"));
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/here?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_append_path_segment (NULL, "fail"));
+  fail_unless (gst_uri_append_path_segment (NULL, NULL));
+
+  fail_unless (gst_uri_append_path (url, "../there"));
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/here/../there?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_append_path (NULL, "fail"));
+  fail_unless (gst_uri_append_path (NULL, NULL));
+
+  gst_uri_normalize (url);
+
+  tmp_list = gst_uri_get_path_segments (url);
+  fail_unless (tmp_list != NULL);
+  tmp_list = g_list_append (tmp_list, g_strdup ("segment"));
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/there?query#fragment");
+  g_free (tmp_str);
+  fail_unless (gst_uri_set_path_segments (url, tmp_list));
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/there/segment?query#fragment");
+  g_free (tmp_str);
+
+  tmp_list = g_list_append (NULL, g_strdup ("test"));
+  fail_unless (!gst_uri_set_path_segments (NULL, tmp_list));
+  fail_unless (gst_uri_set_path_segments (NULL, NULL));
+
+  fail_unless (gst_uri_set_query_value (url, "key", "value"));
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/there/segment?query&key=value#fragment");
+  g_free (tmp_str);
+
+  fail_unless (gst_uri_set_query_value (url, "key", NULL));
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/there/segment?query&key#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_set_query_value (NULL, "key", "value"));
+
+  fail_unless (gst_uri_remove_query_key (url, "key"));
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/there/segment?query#fragment");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_remove_query_key (url, "key"));
+  fail_unless (!gst_uri_remove_query_key (NULL, "key"));
+
+  fail_unless (gst_uri_set_fragment (url, NULL));
+  fail_unless (gst_uri_get_fragment (url) == NULL);
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/there/segment?query");
+  g_free (tmp_str);
+
+  fail_unless (gst_uri_set_fragment (url, "tag"));
+  fail_unless_equals_string (gst_uri_get_fragment (url), "tag");
+  tmp_str = gst_uri_to_string (url);
+  fail_unless_equals_string (tmp_str,
+      "//example.com/path/to/file/there/segment?query#tag");
+  g_free (tmp_str);
+
+  fail_unless (!gst_uri_set_fragment (NULL, "can't set if no URI"));
+  fail_unless (gst_uri_set_fragment (NULL, NULL));
+
+  gst_uri_unref (url);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_uri_suite (void)
 {
@@ -180,6 +964,13 @@
 #ifdef G_OS_WIN32
   tcase_add_test (tc_chain, test_win32_uri);
 #endif
+  tcase_add_test (tc_chain, test_url_parsing);
+  tcase_add_test (tc_chain, test_url_presenting);
+  tcase_add_test (tc_chain, test_url_normalization);
+  tcase_add_test (tc_chain, test_url_joining);
+  tcase_add_test (tc_chain, test_url_equality);
+  tcase_add_test (tc_chain, test_url_constructors);
+  tcase_add_test (tc_chain, test_url_get_set);
 
   return s;
 }
diff --git a/tests/check/gst/gstutils.c b/tests/check/gst/gstutils.c
index b1daf39..8ee6be0 100644
--- a/tests/check/gst/gstutils.c
+++ b/tests/check/gst/gstutils.c
@@ -1304,6 +1304,239 @@
 }
 
 GST_END_TEST;
+
+static void
+count_request_pad (const GValue * item, gpointer user_data)
+{
+  GstPad *pad = GST_PAD (g_value_get_object (item));
+  guint *count = (guint *) user_data;
+
+  if (GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (pad)) == GST_PAD_REQUEST)
+    (*count)++;
+}
+
+static guint
+request_pads (GstElement * element)
+{
+  GstIterator *iter;
+  guint pads = 0;
+
+  iter = gst_element_iterate_pads (element);
+  fail_unless (gst_iterator_foreach (iter, count_request_pad, &pads) ==
+      GST_ITERATOR_DONE);
+  gst_iterator_free (iter);
+
+  return pads;
+}
+
+static GstPadLinkReturn
+refuse_to_link (GstPad * pad, GstObject * parent, GstPad * peer)
+{
+  return GST_PAD_LINK_REFUSED;
+}
+
+typedef struct _GstFakeReqSink GstFakeReqSink;
+typedef struct _GstFakeReqSinkClass GstFakeReqSinkClass;
+
+struct _GstFakeReqSink
+{
+  GstElement element;
+};
+
+struct _GstFakeReqSinkClass
+{
+  GstElementClass parent_class;
+};
+
+G_GNUC_INTERNAL GType gst_fakereqsink_get_type (void);
+
+static GstStaticPadTemplate fakereqsink_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink_%u",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS_ANY);
+
+G_DEFINE_TYPE (GstFakeReqSink, gst_fakereqsink, GST_TYPE_ELEMENT);
+
+static GstPad *
+gst_fakereqsink_request_new_pad (GstElement * element, GstPadTemplate * templ,
+    const gchar * name, const GstCaps * caps)
+{
+  GstPad *pad;
+  pad = gst_pad_new_from_static_template (&fakereqsink_sink_template, name);
+  gst_pad_set_link_function (pad, refuse_to_link);
+  gst_element_add_pad (GST_ELEMENT_CAST (element), pad);
+  return pad;
+}
+
+static void
+gst_fakereqsink_release_pad (GstElement * element, GstPad * pad)
+{
+  gst_pad_set_active (pad, FALSE);
+  gst_element_remove_pad (element, pad);
+}
+
+static void
+gst_fakereqsink_class_init (GstFakeReqSinkClass * klass)
+{
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "Fake Request Source", "Source", "Push empty buffers from request pads",
+      "Sebastian Rasmussen <sebras@hotmail.com>");
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&fakereqsink_sink_template));
+
+  gstelement_class->request_new_pad = gst_fakereqsink_request_new_pad;
+  gstelement_class->release_pad = gst_fakereqsink_release_pad;
+}
+
+static void
+gst_fakereqsink_init (GstFakeReqSink * fakereqsink)
+{
+}
+
+static void
+test_link (const gchar * expectation, const gchar * srcname,
+    const gchar * srcpad, const gchar * srcstate, const gchar * sinkname,
+    const gchar * sinkpad, const gchar * sinkstate)
+{
+  GstElement *src, *sink, *othersrc, *othersink;
+  guint src_pads, sink_pads;
+
+  if (g_strcmp0 (srcname, "requestsrc") == 0)
+    src = gst_element_factory_make ("tee", NULL);
+  else if (g_strcmp0 (srcname, "requestsink") == 0)
+    src = gst_element_factory_make ("funnel", NULL);
+  else if (g_strcmp0 (srcname, "staticsrc") == 0)
+    src = gst_element_factory_make ("fakesrc", NULL);
+  else if (g_strcmp0 (srcname, "staticsink") == 0)
+    src = gst_element_factory_make ("fakesink", NULL);
+  else
+    g_assert_not_reached ();
+
+  if (g_strcmp0 (sinkname, "requestsink") == 0)
+    sink = gst_element_factory_make ("funnel", NULL);
+  else if (g_strcmp0 (sinkname, "requestsrc") == 0)
+    sink = gst_element_factory_make ("tee", NULL);
+  else if (g_strcmp0 (sinkname, "staticsink") == 0)
+    sink = gst_element_factory_make ("fakesink", NULL);
+  else if (g_strcmp0 (sinkname, "staticsrc") == 0)
+    sink = gst_element_factory_make ("fakesrc", NULL);
+  else if (g_strcmp0 (sinkname, "fakerequestsink") == 0)
+    sink = gst_element_factory_make ("fakereqsink", NULL);
+  else
+    g_assert_not_reached ();
+
+  othersrc = gst_element_factory_make ("fakesrc", NULL);
+  othersink = gst_element_factory_make ("fakesink", NULL);
+
+  if (g_strcmp0 (srcstate, "linked") == 0)
+    fail_unless (gst_element_link_pads (src, srcpad, othersink, NULL));
+  if (g_strcmp0 (sinkstate, "linked") == 0)
+    fail_unless (gst_element_link_pads (othersrc, NULL, sink, sinkpad));
+  if (g_strcmp0 (srcstate, "unlinkable") == 0) {
+    GstPad *pad = gst_element_get_static_pad (src, srcpad ? srcpad : "src");
+    gst_pad_set_link_function (pad, refuse_to_link);
+    gst_object_unref (pad);
+  }
+  if (g_strcmp0 (sinkstate, "unlinkable") == 0) {
+    GstPad *pad = gst_element_get_static_pad (sink, sinkpad ? sinkpad : "sink");
+    gst_pad_set_link_function (pad, refuse_to_link);
+    gst_object_unref (pad);
+  }
+
+  src_pads = request_pads (src);
+  sink_pads = request_pads (sink);
+  if (g_strcmp0 (expectation, "OK") == 0) {
+    fail_unless (gst_element_link_pads (src, srcpad, sink, sinkpad));
+    if (g_str_has_prefix (srcname, "request")) {
+      fail_unless_equals_int (request_pads (src), src_pads + 1);
+    } else {
+      fail_unless_equals_int (request_pads (src), src_pads);
+    }
+    if (g_str_has_prefix (sinkname, "request")) {
+      fail_unless_equals_int (request_pads (sink), sink_pads + 1);
+    } else {
+      fail_unless_equals_int (request_pads (sink), sink_pads);
+    }
+  } else {
+    fail_if (gst_element_link_pads (src, srcpad, sink, sinkpad));
+    fail_unless_equals_int (request_pads (src), src_pads);
+    fail_unless_equals_int (request_pads (sink), sink_pads);
+  }
+
+  gst_object_unref (othersrc);
+  gst_object_unref (othersink);
+
+  gst_object_unref (src);
+  gst_object_unref (sink);
+}
+
+GST_START_TEST (test_element_link)
+{
+  /* Successful cases */
+
+  gst_element_register (NULL, "fakereqsink", GST_RANK_NONE,
+      gst_fakereqsink_get_type ());
+
+  test_link ("OK", "staticsrc", "src", "", "staticsink", "sink", "");
+  test_link ("OK", "staticsrc", "src", "", "requestsink", "sink_0", "");
+  test_link ("OK", "staticsrc", "src", "", "staticsink", NULL, "");
+  test_link ("OK", "staticsrc", "src", "", "requestsink", NULL, "");
+  test_link ("OK", "requestsrc", "src_0", "", "staticsink", "sink", "");
+  test_link ("OK", "requestsrc", "src_0", "", "requestsink", "sink_0", "");
+  test_link ("OK", "requestsrc", "src_0", "", "staticsink", NULL, "");
+  test_link ("OK", "requestsrc", "src_0", "", "requestsink", NULL, "");
+  test_link ("OK", "staticsrc", NULL, "", "staticsink", "sink", "");
+  test_link ("OK", "staticsrc", NULL, "", "requestsink", "sink_0", "");
+  test_link ("OK", "staticsrc", NULL, "", "staticsink", NULL, "");
+  test_link ("OK", "staticsrc", NULL, "", "requestsink", NULL, "");
+  test_link ("OK", "requestsrc", NULL, "", "staticsink", "sink", "");
+  test_link ("OK", "requestsrc", NULL, "", "requestsink", "sink_0", "");
+  test_link ("OK", "requestsrc", NULL, "", "staticsink", NULL, "");
+  test_link ("OK", "requestsrc", NULL, "", "requestsink", NULL, "");
+
+  /* Failure cases */
+
+  test_link ("NOK", "staticsrc", "missing", "", "staticsink", "sink", "");
+  test_link ("NOK", "staticsink", "sink", "", "staticsink", "sink", "");
+  test_link ("NOK", "staticsrc", "src", "linked", "staticsink", "sink", "");
+  test_link ("NOK", "staticsrc", "src", "", "staticsink", "missing", "");
+  test_link ("NOK", "staticsrc", "src", "", "staticsrc", "src", "");
+  test_link ("NOK", "staticsrc", "src", "", "staticsink", "sink", "linked");
+  test_link ("NOK", "staticsrc", "src", "", "staticsink", "sink", "unlinkable");
+  test_link ("NOK", "staticsrc", NULL, "", "staticsink", "sink", "unlinkable");
+  test_link ("NOK", "staticsrc", NULL, "", "staticsink", NULL, "unlinkable");
+  test_link ("NOK", "requestsrc", "missing", "", "staticsink", "sink", "");
+  test_link ("NOK", "requestsink", "sink_0", "", "staticsink", "sink", "");
+  test_link ("NOK", "requestsrc", "src_0", "linked", "staticsink", "sink", "");
+  test_link ("NOK", "requestsrc", "src_0", "", "staticsink", "missing", "");
+  test_link ("NOK", "requestsrc", "src_0", "", "staticsrc", "src", "");
+  test_link ("NOK", "requestsrc", "src_0", "", "staticsink", "sink", "linked");
+  test_link ("NOK", "requestsrc", "src_0", "", "staticsink", "sink",
+      "unlinkable");
+  test_link ("NOK", "requestsrc", NULL, "", "staticsink", "sink", "unlinkable");
+  test_link ("NOK", "requestsrc", NULL, "", "staticsink", NULL, "unlinkable");
+  test_link ("NOK", "staticsrc", "missing", "", "requestsink", "sink_0", "");
+  test_link ("NOK", "staticsink", "sink", "", "requestsink", "sink_0", "");
+  test_link ("NOK", "staticsrc", "src", "linked", "requestsink", "sink_0", "");
+  test_link ("NOK", "staticsrc", "src", "", "requestsink", "missing", "");
+  test_link ("NOK", "staticsrc", "src", "", "requestsrc", "src_0", "");
+  test_link ("NOK", "staticsrc", "src", "", "requestsink", "sink_0", "linked");
+  test_link ("NOK", "staticsrc", "src", "unlinkable", "requestsink",
+      "sink_0", "");
+  test_link ("NOK", "staticsrc", NULL, "unlinkable", "requestsink",
+      "sink_0", "");
+  test_link ("NOK", "staticsrc", NULL, "unlinkable", "requestsink", NULL, "");
+  test_link ("NOK", "requestsrc", "src_0", "", "staticsink", NULL,
+      "unlinkable");
+  test_link ("NOK", "requestsrc", NULL, "", "fakerequestsink", NULL, "");
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_utils_suite (void)
 {
@@ -1331,6 +1564,7 @@
   tcase_add_test (tc_chain, test_parse_bin_from_description);
 #endif
   tcase_add_test (tc_chain, test_element_found_tags);
+  tcase_add_test (tc_chain, test_element_link);
   tcase_add_test (tc_chain, test_element_unlink);
   tcase_add_test (tc_chain, test_set_value_from_string);
   tcase_add_test (tc_chain, test_binary_search);
diff --git a/tests/check/libs/adapter.c b/tests/check/libs/adapter.c
index a99c8e0..5794aa8 100644
--- a/tests/check/libs/adapter.c
+++ b/tests/check/libs/adapter.c
@@ -807,6 +807,53 @@
 
 GST_END_TEST;
 
+/* Fill a buffer with a sequence of 32 bit ints and read them back out
+ * using take_buffer, checking that they're still in the right order */
+GST_START_TEST (test_take_buffer_list)
+{
+  GstAdapter *adapter;
+  int i = 0;
+
+  adapter = create_and_fill_adapter ();
+  while (gst_adapter_available (adapter) >= sizeof (guint32)) {
+    GstBufferList *buffer_list;
+    GstBuffer *buf;
+    gsize left;
+    GstMapInfo info;
+    guint8 *ptr;
+    guint n, num;
+
+    buffer_list = gst_adapter_take_buffer_list (adapter, sizeof (guint32) * 5);
+    fail_unless (buffer_list != NULL);
+    num = gst_buffer_list_length (buffer_list);
+    fail_unless (num > 0);
+
+    for (n = 0; n < num; ++n) {
+      buf = gst_buffer_list_get (buffer_list, n);
+
+      fail_unless (gst_buffer_map (buf, &info, GST_MAP_READ));
+
+      ptr = info.data;
+      left = info.size;
+
+      while (left > 0) {
+        fail_unless (GST_READ_UINT32_LE (ptr) == i);
+        i++;
+        ptr += sizeof (guint32);
+        left -= sizeof (guint32);
+      }
+      gst_buffer_unmap (buf, &info);
+    }
+    gst_buffer_list_unref (buffer_list);
+  }
+  fail_unless (gst_adapter_available (adapter) == 0,
+      "Data was left in the adapter");
+
+  g_object_unref (adapter);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_merge)
 {
   GstAdapter *adapter;
@@ -916,6 +963,7 @@
   tcase_add_test (tc_chain, test_timestamp);
   tcase_add_test (tc_chain, test_scan);
   tcase_add_test (tc_chain, test_take_list);
+  tcase_add_test (tc_chain, test_take_buffer_list);
   tcase_add_test (tc_chain, test_merge);
   tcase_add_test (tc_chain, test_take_buffer_fast);
 
diff --git a/tests/check/libs/bytereader.c b/tests/check/libs/bytereader.c
index ecb3ddb..fd4f95d 100644
--- a/tests/check/libs/bytereader.c
+++ b/tests/check/libs/bytereader.c
@@ -467,7 +467,17 @@
 GST_END_TEST;
 
 #define do_scan(r,m,p,o,s,x) \
-    fail_unless_equals_int (gst_byte_reader_masked_scan_uint32 (r,m,p,o,s), x);
+G_STMT_START {								\
+    fail_unless_equals_int (gst_byte_reader_masked_scan_uint32 (r,m,p,o,s), x); \
+    if (x != -1) { \
+      guint32 v, res_v; \
+      const guint8 *rdata = NULL; \
+      fail_unless (gst_byte_reader_peek_data (r, x + 4, &rdata)); \
+      res_v = GST_READ_UINT32_BE (rdata + x); \
+      fail_unless_equals_int (gst_byte_reader_masked_scan_uint32_peek (r,m,p,o,s,&v), x); \
+      fail_unless_equals_int (v, res_v); \
+    } \
+} G_STMT_END;
 
 GST_START_TEST (test_scan)
 {
@@ -686,6 +696,88 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_sub_reader)
+{
+  const guint8 memdata[] = {
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
+  };
+  GstByteReader reader = GST_BYTE_READER_INIT (memdata, sizeof (memdata));
+  GstByteReader sub;
+  const guint8 *data = NULL, *sub_data = NULL;
+  guint16 v = 0;
+
+  /* init sub reader */
+  fail_if (gst_byte_reader_peek_sub_reader (&reader, &sub, 17));
+  fail_unless (gst_byte_reader_peek_sub_reader (&reader, &sub, 16));
+  fail_unless_equals_int (gst_byte_reader_get_remaining (&sub), 16);
+  fail_unless (gst_byte_reader_peek_data (&reader, 16, &data));
+  fail_unless (gst_byte_reader_peek_data (&sub, 16, &sub_data));
+  fail_unless (memcmp (data, sub_data, 16) == 0);
+
+  fail_unless_equals_int (gst_byte_reader_get_remaining (&reader), 16);
+  fail_unless (gst_byte_reader_skip (&reader, 3));
+  fail_if (gst_byte_reader_peek_sub_reader (&reader, &sub, 14));
+  fail_unless (gst_byte_reader_peek_sub_reader (&reader, &sub, 13));
+  fail_unless_equals_int (gst_byte_reader_get_remaining (&sub), 13);
+  fail_unless (gst_byte_reader_peek_data (&reader, 13, &data));
+  fail_unless (gst_byte_reader_peek_data (&sub, 13, &sub_data));
+  fail_unless (memcmp (data, sub_data, 13) == 0);
+  fail_unless (memcmp (memdata + 3, sub_data, 13) == 0);
+
+  fail_unless_equals_int (gst_byte_reader_get_remaining (&reader), 13);
+  fail_unless (gst_byte_reader_peek_sub_reader (&reader, &sub, 3));
+  fail_unless_equals_int (gst_byte_reader_get_remaining (&sub), 3);
+  fail_if (gst_byte_reader_peek_data (&sub, 10, &sub_data));
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x0304);
+  fail_if (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (gst_byte_reader_get_remaining (&sub), 1);
+
+  fail_unless (gst_byte_reader_get_uint16_be (&reader, &v));
+  fail_unless_equals_int (v, 0x0304);
+  fail_unless (gst_byte_reader_get_uint16_be (&reader, &v));
+  fail_unless_equals_int (v, 0x0506);
+  fail_unless_equals_int (gst_byte_reader_get_remaining (&reader), 9);
+
+  /* get sub reader */
+  gst_byte_reader_init (&reader, memdata, sizeof (memdata));
+  fail_if (gst_byte_reader_get_sub_reader (&reader, &sub, 17));
+  fail_unless (gst_byte_reader_get_sub_reader (&reader, &sub, 16));
+  fail_if (gst_byte_reader_get_sub_reader (&reader, &sub, 1));
+  fail_unless (gst_byte_reader_get_sub_reader (&reader, &sub, 0));
+
+  gst_byte_reader_init (&reader, memdata, sizeof (memdata));
+  fail_unless (gst_byte_reader_get_sub_reader (&reader, &sub, 2));
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x0001);
+  fail_if (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless (gst_byte_reader_get_sub_reader (&reader, &sub, 3));
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x0203);
+  fail_if (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (gst_byte_reader_get_uint8_unchecked (&sub), 0x04);
+  fail_unless (gst_byte_reader_get_sub_reader (&reader, &sub, 9));
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x0506);
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x0708);
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x090a);
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x0b0c);
+  fail_if (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (gst_byte_reader_get_uint8_unchecked (&sub), 0x0d);
+  fail_if (gst_byte_reader_get_sub_reader (&reader, &sub, 3));
+  fail_unless (gst_byte_reader_get_sub_reader (&reader, &sub, 2));
+  fail_unless (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_unless_equals_int (v, 0x0e0f);
+  fail_if (gst_byte_reader_get_uint16_be (&sub, &v));
+  fail_if (gst_byte_reader_get_uint16_be (&reader, &v));
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_byte_reader_suite (void)
 {
@@ -705,6 +797,7 @@
   tcase_add_test (tc_chain, test_scan);
   tcase_add_test (tc_chain, test_string_funcs);
   tcase_add_test (tc_chain, test_dup_string);
+  tcase_add_test (tc_chain, test_sub_reader);
 
   return s;
 }
diff --git a/tests/check/libs/flowcombiner.c b/tests/check/libs/flowcombiner.c
index 372a7fc..6c634c1 100644
--- a/tests/check/libs/flowcombiner.c
+++ b/tests/check/libs/flowcombiner.c
@@ -152,6 +152,86 @@
 }
 
 GST_END_TEST;
+
+GST_START_TEST (test_clear)
+{
+  GstFlowCombiner *combiner;
+  GstPad *pad;
+  GstPad *peer;
+  GstSegment segment;
+  GstFlowReturn ret;
+
+  combiner = gst_flow_combiner_new ();
+
+  /* add a pad and make it return _FLUSHING */
+  pad = gst_pad_new ("src1", GST_PAD_SRC);
+  peer = gst_pad_new ("sink1", GST_PAD_SINK);
+  gst_pad_set_chain_function (peer, _sink_chain);
+  gst_pad_link (pad, peer);
+  gst_pad_set_active (peer, TRUE);
+  gst_pad_set_active (pad, TRUE);
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  gst_pad_push_event (pad, gst_event_new_stream_start ("test1"));
+  gst_pad_push_event (pad, gst_event_new_segment (&segment));
+  gst_flow_combiner_add_pad (combiner, pad);
+  sink_flowret = GST_FLOW_FLUSHING;
+  fail_unless_equals_int (gst_pad_push (pad, gst_buffer_new ()),
+      GST_FLOW_FLUSHING);
+
+  /* the combined flow is _FLUSHING */
+  ret = gst_flow_combiner_update_flow (combiner, GST_FLOW_FLUSHING);
+  fail_unless_equals_int (ret, GST_FLOW_FLUSHING);
+  gst_object_unref (pad);
+  gst_object_unref (peer);
+
+  /* add one more pad and make it return _OK */
+  pad = gst_pad_new ("src2", GST_PAD_SRC);
+  peer = gst_pad_new ("sink2", GST_PAD_SINK);
+  gst_pad_set_chain_function (peer, _sink_chain);
+  gst_pad_link (pad, peer);
+  gst_pad_set_active (peer, TRUE);
+  gst_pad_set_active (pad, TRUE);
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  gst_pad_push_event (pad, gst_event_new_stream_start ("test2"));
+  gst_pad_push_event (pad, gst_event_new_segment (&segment));
+  gst_flow_combiner_add_pad (combiner, pad);
+  sink_flowret = GST_FLOW_OK;
+  fail_unless_equals_int (gst_pad_push (pad, gst_buffer_new ()), GST_FLOW_OK);
+
+  /* the combined flow is _FLUSHING because of the first pad */
+  ret = gst_flow_combiner_update_flow (combiner, GST_FLOW_OK);
+  fail_unless_equals_int (ret, GST_FLOW_FLUSHING);
+  gst_object_unref (pad);
+  gst_object_unref (peer);
+
+  /* clear the combiner */
+  gst_flow_combiner_clear (combiner);
+
+  /* add a pad and make it return _OK */
+  pad = gst_pad_new ("src3", GST_PAD_SRC);
+  peer = gst_pad_new ("sink3", GST_PAD_SINK);
+  gst_pad_set_chain_function (peer, _sink_chain);
+  gst_pad_link (pad, peer);
+  gst_pad_set_active (peer, TRUE);
+  gst_pad_set_active (pad, TRUE);
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  gst_pad_push_event (pad, gst_event_new_stream_start ("test3"));
+  gst_pad_push_event (pad, gst_event_new_segment (&segment));
+  gst_flow_combiner_add_pad (combiner, pad);
+  sink_flowret = GST_FLOW_OK;
+  fail_unless_equals_int (gst_pad_push (pad, gst_buffer_new ()), GST_FLOW_OK);
+
+  /* the combined flow is _OK since the other pads have been removed */
+  ret = gst_flow_combiner_update_flow (combiner, GST_FLOW_OK);
+  fail_unless_equals_int (ret, GST_FLOW_OK);
+  gst_object_unref (pad);
+  gst_object_unref (peer);
+
+  gst_flow_combiner_free (combiner);
+}
+
+GST_END_TEST;
+
 static Suite *
 flow_combiner_suite (void)
 {
@@ -160,6 +240,7 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_combined_flows);
+  tcase_add_test (tc_chain, test_clear);
 
   return s;
 }
diff --git a/tests/check/pipelines/parse-launch.c b/tests/check/pipelines/parse-launch.c
index 8b6a6bc..78a2ba4 100644
--- a/tests/check/pipelines/parse-launch.c
+++ b/tests/check/pipelines/parse-launch.c
@@ -467,6 +467,7 @@
     fail_if (peer_elem == NULL, "Could not retrieve peer %s", peer);
 
     sinkpad = gst_element_get_static_pad (peer_elem, "sink");
+    gst_object_unref (peer_elem);
     fail_if (sinkpad == NULL, "Peer element did not have a 'sink' pad");
 
     fail_unless (peerpad == sinkpad,
diff --git a/tests/check/pipelines/queue-error.c b/tests/check/pipelines/queue-error.c
index 81e9d25..a8408bd 100644
--- a/tests/check/pipelines/queue-error.c
+++ b/tests/check/pipelines/queue-error.c
@@ -80,7 +80,7 @@
   fail_unless (state_ret != GST_STATE_CHANGE_FAILURE);
 
   msg = gst_bus_poll (bus, GST_MESSAGE_ERROR | GST_MESSAGE_EOS, 5 * GST_SECOND);
-  fail_unless (msg != NULL, "timeout waiting for error or eos message");;
+  fail_unless (msg != NULL, "timeout waiting for error or eos message");
 
   gst_message_unref (msg);
   gst_object_unref (bus);
diff --git a/tests/check/tools/gstinspect.c b/tests/check/tools/gstinspect.c
index 1d3d8cc..72e23a4 100644
--- a/tests/check/tools/gstinspect.c
+++ b/tests/check/tools/gstinspect.c
@@ -17,7 +17,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-/* FIXME 0.11: suppress warnings for deprecated API such as GValueArray
+/* FIXME 2.0: suppress warnings for deprecated API such as GValueArray
  * with newer GLib versions (>= 2.31.0) */
 #define GLIB_DISABLE_DEPRECATION_WARNINGS
 
@@ -32,56 +32,82 @@
 
 GST_START_TEST (test_exists)
 {
-  gchar **argv;
+#define ARGV_LEN (G_N_ELEMENTS (argv) - 1)
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists foo", " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 1);
-  g_strfreev (argv);
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists", "foo", NULL };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists bin", " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 0);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists", "bin", NULL };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=" VERSION " "
-      "bin", " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 0);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 0);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=" VERSION, "bin", NULL
+    };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=1.0 bin", " ",
-      -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 0);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 0);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=1.0", "bin", NULL
+    };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=1.0.0 bin",
-      " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 0);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 0);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=1.0.0", "bin", NULL
+    };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=2.0 bin",
-      " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 1);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 0);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=1.2.0", "bin", NULL
+    };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=2.0.0 bin",
-      " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 1);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 0);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=2.0", "bin", NULL
+    };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=1.44 bin",
-      " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 1);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=2.0.0", "bin", NULL
+    };
 
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=1.60.4 bin",
-      " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 1);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=1.44", "bin", NULL
+    };
 
-  /* check for plugin should fail like this */
-  argv = g_strsplit ("gst-inspect-1.0 --exists --atleast-version=1.0 "
-      "coreelements", " ", -1);
-  fail_unless_equals_int (gst_inspect_main (g_strv_length (argv), argv), 1);
-  g_strfreev (argv);
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+  }
+  {
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=1.60.4", "bin", NULL
+    };
+
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+  }
+  {
+    /* check for plugin should fail like this */
+    const gchar *argv[] = { "gst-inspect-1.0", "--exists",
+      "--atleast-version=1.0", "coreelements", NULL
+    };
+
+    fail_unless_equals_int (gst_inspect_main (ARGV_LEN, (gchar **) argv), 1);
+  }
 }
 
 GST_END_TEST;
diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am
index 7454b5c..fce72a1 100644
--- a/tests/examples/Makefile.am
+++ b/tests/examples/Makefile.am
@@ -17,8 +17,10 @@
 	manual     \
 	memory   \
 	metadata   \
+	netclock \
 	queue      \
 	stepping \
+	streamiddemux \
 	streams \
 	typefind
 
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index f351470..9a59d14 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -94,6 +94,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -111,7 +112,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -218,6 +219,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -323,6 +328,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
@@ -496,8 +502,10 @@
 	manual     \
 	memory   \
 	metadata   \
+	netclock \
 	queue      \
 	stepping \
+	streamiddemux \
 	streams \
 	typefind
 
diff --git a/tests/examples/adapter/Makefile.in b/tests/examples/adapter/Makefile.in
index 6995a53..50a5451 100644
--- a/tests/examples/adapter/Makefile.in
+++ b/tests/examples/adapter/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -209,6 +210,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -314,6 +319,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/controller/Makefile.in b/tests/examples/controller/Makefile.in
index e7db527..9e36b95 100644
--- a/tests/examples/controller/Makefile.in
+++ b/tests/examples/controller/Makefile.in
@@ -92,6 +92,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -109,7 +110,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -218,6 +219,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -323,6 +328,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/controller/audio-example.c b/tests/examples/controller/audio-example.c
index 6494498..f57731f 100644
--- a/tests/examples/controller/audio-example.c
+++ b/tests/examples/controller/audio-example.c
@@ -4,7 +4,7 @@
  * Builds a pipeline with [ audiotestsource ! autoaudiosink ] and sweeps
  * frequency and volume.
  *
- * Needs gst-plugin-base + gst-plugins-good installed.
+ * Needs gst-plugins-base + gst-plugins-good installed.
  */
 
 #include <gst/gst.h>
diff --git a/tests/examples/controller/text-color-example.c b/tests/examples/controller/text-color-example.c
index 00b3c9f..c9e1119 100644
--- a/tests/examples/controller/text-color-example.c
+++ b/tests/examples/controller/text-color-example.c
@@ -4,7 +4,7 @@
  * Builds a pipeline with [videotestsrc ! textoverlay ! ximagesink] and
  * modulates color, text and text pos.
  *
- * Needs gst-plugin-base installed.
+ * Needs gst-plugins-base installed.
  */
 
 #include <gst/gst.h>
diff --git a/tests/examples/helloworld/Makefile.in b/tests/examples/helloworld/Makefile.in
index 726d551..7176122 100644
--- a/tests/examples/helloworld/Makefile.in
+++ b/tests/examples/helloworld/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/launch/Makefile.in b/tests/examples/launch/Makefile.in
index ee53fa1..95a5210 100644
--- a/tests/examples/launch/Makefile.in
+++ b/tests/examples/launch/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -209,6 +210,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -314,6 +319,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/launch/mp3parselaunch.c b/tests/examples/launch/mp3parselaunch.c
index cc00a07..e77c1bd 100644
--- a/tests/examples/launch/mp3parselaunch.c
+++ b/tests/examples/launch/mp3parselaunch.c
@@ -72,6 +72,7 @@
 
   filesrc = gst_bin_get_by_name (GST_BIN (bin), "my_filesrc");
   g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+  gst_object_unref (filesrc);
 
   /* start playing */
   gst_element_set_state (bin, GST_STATE_PLAYING);
diff --git a/tests/examples/manual/Makefile.in b/tests/examples/manual/Makefile.in
index 9c25b72..ba7233d 100644
--- a/tests/examples/manual/Makefile.in
+++ b/tests/examples/manual/Makefile.in
@@ -96,6 +96,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -113,7 +114,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -568,6 +569,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -673,6 +678,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/manual/norebuffer.c b/tests/examples/manual/norebuffer.c
index 67db10f..e9d4423 100644
--- a/tests/examples/manual/norebuffer.c
+++ b/tests/examples/manual/norebuffer.c
@@ -66,7 +66,7 @@
 
   if (percent < 100) {
     /* buffering busy */
-    if (is_buffering == FALSE) {
+    if (!is_buffering) {
       is_buffering = TRUE;
       if (target_state == GST_STATE_PLAYING) {
         /* we were not buffering but PLAYING, PAUSE  the pipeline. */
@@ -81,7 +81,7 @@
 {
   GstElement *pipeline = user_data;
 
-  if (is_buffering == FALSE)
+  if (!is_buffering)
     gst_element_set_state (pipeline, target_state);
   else
     g_timeout_add (500, buffer_timeout, pipeline);
diff --git a/tests/examples/memory/Makefile.in b/tests/examples/memory/Makefile.in
index 3d27df7..bdbfaf9 100644
--- a/tests/examples/memory/Makefile.in
+++ b/tests/examples/memory/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -210,6 +211,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -315,6 +320,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/metadata/Makefile.in b/tests/examples/metadata/Makefile.in
index 61a9698..953c539 100644
--- a/tests/examples/metadata/Makefile.in
+++ b/tests/examples/metadata/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/netclock/Makefile.am b/tests/examples/netclock/Makefile.am
new file mode 100644
index 0000000..9506997
--- /dev/null
+++ b/tests/examples/netclock/Makefile.am
@@ -0,0 +1,11 @@
+noinst_PROGRAMS = netclock-server netclock-client
+
+netclock_server_LDADD = \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(GST_OBJ_LIBS)
+netclock_server_CFLAGS = $(GST_OBJ_CFLAGS)
+
+netclock_client_LDADD = \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(GST_OBJ_LIBS)
+netclock_client_CFLAGS = $(GST_OBJ_CFLAGS)
diff --git a/tests/examples/netclock/Makefile.in b/tests/examples/netclock/Makefile.in
new file mode 100644
index 0000000..c048855
--- /dev/null
+++ b/tests/examples/netclock/Makefile.in
@@ -0,0 +1,830 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+noinst_PROGRAMS = netclock-server$(EXEEXT) netclock-client$(EXEEXT)
+subdir = tests/examples/netclock
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-docbook.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-doc.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-parser.m4 \
+	$(top_srcdir)/common/m4/gst-platform.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+netclock_client_SOURCES = netclock-client.c
+netclock_client_OBJECTS = netclock_client-netclock-client.$(OBJEXT)
+am__DEPENDENCIES_1 =
+netclock_client_DEPENDENCIES =  \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+netclock_client_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(netclock_client_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+netclock_server_SOURCES = netclock-server.c
+netclock_server_OBJECTS = netclock_server-netclock-server.$(OBJEXT)
+netclock_server_DEPENDENCIES =  \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1)
+netclock_server_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(netclock_server_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = netclock-client.c netclock-server.c
+DIST_SOURCES = netclock-client.c netclock-server.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
+BISON_PATH = @BISON_PATH@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_MAJOR_VERSION = @CHECK_MAJOR_VERSION@
+CHECK_MICRO_VERSION = @CHECK_MICRO_VERSION@
+CHECK_MINOR_VERSION = @CHECK_MINOR_VERSION@
+CHECK_VERSION = @CHECK_VERSION@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIR = @DATADIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SUBUNIT = @ENABLE_SUBUNIT@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLEX_PATH = @FLEX_PATH@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GSL_LIBS = @GSL_LIBS@
+GST_AGE = @GST_AGE@
+GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
+GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_ALL_LIBS = @GST_ALL_LIBS@
+GST_API_VERSION = @GST_API_VERSION@
+GST_CURRENT = @GST_CURRENT@
+GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
+GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
+GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
+GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
+GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
+GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
+GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
+GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
+GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
+GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_OBJ_CFLAGS = @GST_OBJ_CFLAGS@
+GST_OBJ_CXXFLAGS = @GST_OBJ_CXXFLAGS@
+GST_OBJ_LIBS = @GST_OBJ_LIBS@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PLUGIN_LIBTOOLFLAGS = @GST_PLUGIN_LIBTOOLFLAGS@
+GST_PLUGIN_SCANNER_INSTALLED = @GST_PLUGIN_SCANNER_INSTALLED@
+GST_REGISTRY_DOC_TYPES = @GST_REGISTRY_DOC_TYPES@
+GST_REVISION = @GST_REVISION@
+GST_VERSION_MAJOR = @GST_VERSION_MAJOR@
+GST_VERSION_MICRO = @GST_VERSION_MICRO@
+GST_VERSION_MINOR = @GST_VERSION_MINOR@
+GST_VERSION_NANO = @GST_VERSION_NANO@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
+HAVE_DVIPS = @HAVE_DVIPS@
+HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
+HAVE_GMP = @HAVE_GMP@
+HAVE_GSL = @HAVE_GSL@
+HAVE_JADETEX = @HAVE_JADETEX@
+HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
+HAVE_PNMTOPS = @HAVE_PNMTOPS@
+HAVE_PS2PDF = @HAVE_PS2PDF@
+HAVE_XMLLINT = @HAVE_XMLLINT@
+HAVE_XSLTPROC = @HAVE_XSLTPROC@
+HOST_CPU = @HOST_CPU@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDIR = @LIBDIR@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL_PATH = @PERL_PATH@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PRINTF_CFLAGS = @PRINTF_CFLAGS@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+netclock_server_LDADD = \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(GST_OBJ_LIBS)
+
+netclock_server_CFLAGS = $(GST_OBJ_CFLAGS)
+netclock_client_LDADD = \
+	$(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
+	$(GST_OBJ_LIBS)
+
+netclock_client_CFLAGS = $(GST_OBJ_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/netclock/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/netclock/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+netclock-client$(EXEEXT): $(netclock_client_OBJECTS) $(netclock_client_DEPENDENCIES) $(EXTRA_netclock_client_DEPENDENCIES) 
+	@rm -f netclock-client$(EXEEXT)
+	$(AM_V_CCLD)$(netclock_client_LINK) $(netclock_client_OBJECTS) $(netclock_client_LDADD) $(LIBS)
+
+netclock-server$(EXEEXT): $(netclock_server_OBJECTS) $(netclock_server_DEPENDENCIES) $(EXTRA_netclock_server_DEPENDENCIES) 
+	@rm -f netclock-server$(EXEEXT)
+	$(AM_V_CCLD)$(netclock_server_LINK) $(netclock_server_OBJECTS) $(netclock_server_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netclock_client-netclock-client.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netclock_server-netclock-server.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+netclock_client-netclock-client.o: netclock-client.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_client_CFLAGS) $(CFLAGS) -MT netclock_client-netclock-client.o -MD -MP -MF $(DEPDIR)/netclock_client-netclock-client.Tpo -c -o netclock_client-netclock-client.o `test -f 'netclock-client.c' || echo '$(srcdir)/'`netclock-client.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/netclock_client-netclock-client.Tpo $(DEPDIR)/netclock_client-netclock-client.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netclock-client.c' object='netclock_client-netclock-client.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) $(netclock_client_CFLAGS) $(CFLAGS) -c -o netclock_client-netclock-client.o `test -f 'netclock-client.c' || echo '$(srcdir)/'`netclock-client.c
+
+netclock_client-netclock-client.obj: netclock-client.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_client_CFLAGS) $(CFLAGS) -MT netclock_client-netclock-client.obj -MD -MP -MF $(DEPDIR)/netclock_client-netclock-client.Tpo -c -o netclock_client-netclock-client.obj `if test -f 'netclock-client.c'; then $(CYGPATH_W) 'netclock-client.c'; else $(CYGPATH_W) '$(srcdir)/netclock-client.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/netclock_client-netclock-client.Tpo $(DEPDIR)/netclock_client-netclock-client.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netclock-client.c' object='netclock_client-netclock-client.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) $(netclock_client_CFLAGS) $(CFLAGS) -c -o netclock_client-netclock-client.obj `if test -f 'netclock-client.c'; then $(CYGPATH_W) 'netclock-client.c'; else $(CYGPATH_W) '$(srcdir)/netclock-client.c'; fi`
+
+netclock_server-netclock-server.o: netclock-server.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_server_CFLAGS) $(CFLAGS) -MT netclock_server-netclock-server.o -MD -MP -MF $(DEPDIR)/netclock_server-netclock-server.Tpo -c -o netclock_server-netclock-server.o `test -f 'netclock-server.c' || echo '$(srcdir)/'`netclock-server.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/netclock_server-netclock-server.Tpo $(DEPDIR)/netclock_server-netclock-server.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netclock-server.c' object='netclock_server-netclock-server.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) $(netclock_server_CFLAGS) $(CFLAGS) -c -o netclock_server-netclock-server.o `test -f 'netclock-server.c' || echo '$(srcdir)/'`netclock-server.c
+
+netclock_server-netclock-server.obj: netclock-server.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(netclock_server_CFLAGS) $(CFLAGS) -MT netclock_server-netclock-server.obj -MD -MP -MF $(DEPDIR)/netclock_server-netclock-server.Tpo -c -o netclock_server-netclock-server.obj `if test -f 'netclock-server.c'; then $(CYGPATH_W) 'netclock-server.c'; else $(CYGPATH_W) '$(srcdir)/netclock-server.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/netclock_server-netclock-server.Tpo $(DEPDIR)/netclock_server-netclock-server.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='netclock-server.c' object='netclock_server-netclock-server.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) $(netclock_server_CFLAGS) $(CFLAGS) -c -o netclock_server-netclock-server.obj `if test -f 'netclock-server.c'; then $(CYGPATH_W) 'netclock-server.c'; else $(CYGPATH_W) '$(srcdir)/netclock-server.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-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
+
+
+# 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/tests/examples/netclock/netclock-client.c b/tests/examples/netclock/netclock-client.c
new file mode 100644
index 0000000..2082297
--- /dev/null
+++ b/tests/examples/netclock/netclock-client.c
@@ -0,0 +1,59 @@
+#include <stdlib.h>
+#include <gst/gst.h>
+#include <gst/net/gstnetclientclock.h>
+
+static gboolean
+handle_bus_message (GstBus * bus, GstMessage * message, GstClock * client_clock)
+{
+  if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ELEMENT) {
+    const GstStructure *s = gst_message_get_structure (message);
+    gchar *str;
+
+    if (s == NULL)
+      return TRUE;
+    str = gst_structure_to_string (s);
+    g_print ("%s\n", str);
+    g_free (str);
+  }
+  return TRUE;
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GMainLoop *loop;
+  gchar *host;
+  guint16 port;
+  GstClock *client_clock;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  if (argc < 3) {
+    g_print ("Usage: netclock-client <host> <port>\n");
+    return 1;
+  }
+
+  host = argv[1];
+  port = atoi (argv[2]);
+
+  client_clock = gst_net_client_clock_new (NULL, host, port, 0);
+  if (client_clock == NULL) {
+    g_printerr ("Failed to create network clock client\n");
+    return 1;
+  }
+
+  bus = gst_bus_new ();
+  gst_bus_add_watch (bus, (GstBusFunc) handle_bus_message, client_clock);
+  g_object_set (G_OBJECT (client_clock), "bus", bus, NULL);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  g_main_loop_run (loop);
+
+  /* cleanup */
+  g_main_loop_unref (loop);
+  g_object_unref (client_clock);
+
+  return 0;
+}
diff --git a/tests/examples/netclock/netclock-server.c b/tests/examples/netclock/netclock-server.c
new file mode 100644
index 0000000..46513e2
--- /dev/null
+++ b/tests/examples/netclock/netclock-server.c
@@ -0,0 +1,59 @@
+/* GStreamer
+ * Copyright (C) 2014 Jan Schmidt <jan@centricular.com>
+ *
+ * netclock-server.c: Publish a network clock provider
+ *
+ * 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 <stdlib.h>
+#include <gst/gst.h>
+#include <gst/net/gstnettimeprovider.h>
+
+gint
+main (gint argc, gchar * argv[])
+{
+  GMainLoop *loop;
+  GstClock *clock;
+  GstNetTimeProvider *net_clock;
+  int clock_port = 0;
+
+  gst_init (&argc, &argv);
+
+  if (argc > 1) {
+    clock_port = atoi (argv[1]);
+  }
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  clock = gst_system_clock_obtain ();
+  net_clock = gst_net_time_provider_new (clock, NULL, clock_port);
+  gst_object_unref (clock);
+
+  g_object_get (net_clock, "port", &clock_port, NULL);
+
+  g_print ("Published network clock on port %u\n", clock_port);
+
+  g_main_loop_run (loop);
+
+  /* cleanup */
+  g_main_loop_unref (loop);
+
+  return 0;
+}
diff --git a/tests/examples/queue/Makefile.in b/tests/examples/queue/Makefile.in
index b736d69..8ba3beb 100644
--- a/tests/examples/queue/Makefile.in
+++ b/tests/examples/queue/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/stepping/Makefile.in b/tests/examples/stepping/Makefile.in
index 139a0e6..504160a 100644
--- a/tests/examples/stepping/Makefile.in
+++ b/tests/examples/stepping/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/streamiddemux/Makefile.am b/tests/examples/streamiddemux/Makefile.am
new file mode 100644
index 0000000..e182d29
--- /dev/null
+++ b/tests/examples/streamiddemux/Makefile.am
@@ -0,0 +1,6 @@
+noinst_PROGRAMS = streamiddemux-stream
+
+streamiddemux_stream_SOURCES = streamiddemux-stream.c
+streamiddemux_stream_LDADD = $(GST_OBJ_LIBS)
+streamiddemux_stream_CFLAGS = $(GST_OBJ_CFLAGS)
+
diff --git a/tests/examples/streamiddemux/Makefile.in b/tests/examples/streamiddemux/Makefile.in
new file mode 100644
index 0000000..031dab6
--- /dev/null
+++ b/tests/examples/streamiddemux/Makefile.in
@@ -0,0 +1,794 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+noinst_PROGRAMS = streamiddemux-stream$(EXEEXT)
+subdir = tests/examples/streamiddemux
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+	$(top_srcdir)/common/m4/as-auto-alt.m4 \
+	$(top_srcdir)/common/m4/as-compiler-flag.m4 \
+	$(top_srcdir)/common/m4/as-docbook.m4 \
+	$(top_srcdir)/common/m4/as-libtool.m4 \
+	$(top_srcdir)/common/m4/as-version.m4 \
+	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/gst-arch.m4 \
+	$(top_srcdir)/common/m4/gst-args.m4 \
+	$(top_srcdir)/common/m4/gst-check.m4 \
+	$(top_srcdir)/common/m4/gst-doc.m4 \
+	$(top_srcdir)/common/m4/gst-error.m4 \
+	$(top_srcdir)/common/m4/gst-feature.m4 \
+	$(top_srcdir)/common/m4/gst-function.m4 \
+	$(top_srcdir)/common/m4/gst-gettext.m4 \
+	$(top_srcdir)/common/m4/gst-glib2.m4 \
+	$(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+	$(top_srcdir)/common/m4/gst-parser.m4 \
+	$(top_srcdir)/common/m4/gst-platform.m4 \
+	$(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+	$(top_srcdir)/common/m4/gst-plugindir.m4 \
+	$(top_srcdir)/common/m4/gst.m4 \
+	$(top_srcdir)/common/m4/gtk-doc.m4 \
+	$(top_srcdir)/common/m4/introspection.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
+	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
+	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_streamiddemux_stream_OBJECTS =  \
+	streamiddemux_stream-streamiddemux-stream.$(OBJEXT)
+streamiddemux_stream_OBJECTS = $(am_streamiddemux_stream_OBJECTS)
+am__DEPENDENCIES_1 =
+streamiddemux_stream_DEPENDENCIES = $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+streamiddemux_stream_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(streamiddemux_stream_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(streamiddemux_stream_SOURCES)
+DIST_SOURCES = $(streamiddemux_stream_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
+BISON_PATH = @BISON_PATH@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_MAJOR_VERSION = @CHECK_MAJOR_VERSION@
+CHECK_MICRO_VERSION = @CHECK_MICRO_VERSION@
+CHECK_MINOR_VERSION = @CHECK_MINOR_VERSION@
+CHECK_VERSION = @CHECK_VERSION@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIR = @DATADIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SUBUNIT = @ENABLE_SUBUNIT@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+EXEEXT = @EXEEXT@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLEX_PATH = @FLEX_PATH@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GMP_LIBS = @GMP_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GSL_LIBS = @GSL_LIBS@
+GST_AGE = @GST_AGE@
+GST_ALL_CFLAGS = @GST_ALL_CFLAGS@
+GST_ALL_CXXFLAGS = @GST_ALL_CXXFLAGS@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_ALL_LIBS = @GST_ALL_LIBS@
+GST_API_VERSION = @GST_API_VERSION@
+GST_CURRENT = @GST_CURRENT@
+GST_DISABLE_ALLOC_TRACE_DEFINE = @GST_DISABLE_ALLOC_TRACE_DEFINE@
+GST_DISABLE_GST_DEBUG_DEFINE = @GST_DISABLE_GST_DEBUG_DEFINE@
+GST_DISABLE_OPTION_PARSING_DEFINE = @GST_DISABLE_OPTION_PARSING_DEFINE@
+GST_DISABLE_PARSE_DEFINE = @GST_DISABLE_PARSE_DEFINE@
+GST_DISABLE_PLUGIN_DEFINE = @GST_DISABLE_PLUGIN_DEFINE@
+GST_DISABLE_REGISTRY_DEFINE = @GST_DISABLE_REGISTRY_DEFINE@
+GST_DISABLE_TRACE_DEFINE = @GST_DISABLE_TRACE_DEFINE@
+GST_HAVE_MONOTONIC_CLOCK_DEFINE = @GST_HAVE_MONOTONIC_CLOCK_DEFINE@
+GST_HAVE_POSIX_TIMERS_DEFINE = @GST_HAVE_POSIX_TIMERS_DEFINE@
+GST_HAVE_UNALIGNED_ACCESS_DEFINE = @GST_HAVE_UNALIGNED_ACCESS_DEFINE@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_OBJ_CFLAGS = @GST_OBJ_CFLAGS@
+GST_OBJ_CXXFLAGS = @GST_OBJ_CXXFLAGS@
+GST_OBJ_LIBS = @GST_OBJ_LIBS@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PLUGIN_LIBTOOLFLAGS = @GST_PLUGIN_LIBTOOLFLAGS@
+GST_PLUGIN_SCANNER_INSTALLED = @GST_PLUGIN_SCANNER_INSTALLED@
+GST_REGISTRY_DOC_TYPES = @GST_REGISTRY_DOC_TYPES@
+GST_REVISION = @GST_REVISION@
+GST_VERSION_MAJOR = @GST_VERSION_MAJOR@
+GST_VERSION_MICRO = @GST_VERSION_MICRO@
+GST_VERSION_MINOR = @GST_VERSION_MINOR@
+GST_VERSION_NANO = @GST_VERSION_NANO@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
+HAVE_DVIPS = @HAVE_DVIPS@
+HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
+HAVE_GMP = @HAVE_GMP@
+HAVE_GSL = @HAVE_GSL@
+HAVE_JADETEX = @HAVE_JADETEX@
+HAVE_PNGTOPNM = @HAVE_PNGTOPNM@
+HAVE_PNMTOPS = @HAVE_PNMTOPS@
+HAVE_PS2PDF = @HAVE_PS2PDF@
+HAVE_XMLLINT = @HAVE_XMLLINT@
+HAVE_XSLTPROC = @HAVE_XSLTPROC@
+HOST_CPU = @HOST_CPU@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDIR = @LIBDIR@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL_PATH = @PERL_PATH@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PRINTF_CFLAGS = @PRINTF_CFLAGS@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VERSION = @VERSION@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WIN32_LIBS = @WIN32_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+streamiddemux_stream_SOURCES = streamiddemux-stream.c
+streamiddemux_stream_LDADD = $(GST_OBJ_LIBS)
+streamiddemux_stream_CFLAGS = $(GST_OBJ_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/streamiddemux/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu tests/examples/streamiddemux/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+streamiddemux-stream$(EXEEXT): $(streamiddemux_stream_OBJECTS) $(streamiddemux_stream_DEPENDENCIES) $(EXTRA_streamiddemux_stream_DEPENDENCIES) 
+	@rm -f streamiddemux-stream$(EXEEXT)
+	$(AM_V_CCLD)$(streamiddemux_stream_LINK) $(streamiddemux_stream_OBJECTS) $(streamiddemux_stream_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/streamiddemux_stream-streamiddemux-stream.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+streamiddemux_stream-streamiddemux-stream.o: streamiddemux-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(streamiddemux_stream_CFLAGS) $(CFLAGS) -MT streamiddemux_stream-streamiddemux-stream.o -MD -MP -MF $(DEPDIR)/streamiddemux_stream-streamiddemux-stream.Tpo -c -o streamiddemux_stream-streamiddemux-stream.o `test -f 'streamiddemux-stream.c' || echo '$(srcdir)/'`streamiddemux-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/streamiddemux_stream-streamiddemux-stream.Tpo $(DEPDIR)/streamiddemux_stream-streamiddemux-stream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='streamiddemux-stream.c' object='streamiddemux_stream-streamiddemux-stream.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) $(streamiddemux_stream_CFLAGS) $(CFLAGS) -c -o streamiddemux_stream-streamiddemux-stream.o `test -f 'streamiddemux-stream.c' || echo '$(srcdir)/'`streamiddemux-stream.c
+
+streamiddemux_stream-streamiddemux-stream.obj: streamiddemux-stream.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(streamiddemux_stream_CFLAGS) $(CFLAGS) -MT streamiddemux_stream-streamiddemux-stream.obj -MD -MP -MF $(DEPDIR)/streamiddemux_stream-streamiddemux-stream.Tpo -c -o streamiddemux_stream-streamiddemux-stream.obj `if test -f 'streamiddemux-stream.c'; then $(CYGPATH_W) 'streamiddemux-stream.c'; else $(CYGPATH_W) '$(srcdir)/streamiddemux-stream.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/streamiddemux_stream-streamiddemux-stream.Tpo $(DEPDIR)/streamiddemux_stream-streamiddemux-stream.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='streamiddemux-stream.c' object='streamiddemux_stream-streamiddemux-stream.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) $(streamiddemux_stream_CFLAGS) $(CFLAGS) -c -o streamiddemux_stream-streamiddemux-stream.obj `if test -f 'streamiddemux-stream.c'; then $(CYGPATH_W) 'streamiddemux-stream.c'; else $(CYGPATH_W) '$(srcdir)/streamiddemux-stream.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-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
+
+
+# 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/tests/examples/streamiddemux/streamiddemux-stream.c b/tests/examples/streamiddemux/streamiddemux-stream.c
new file mode 100644
index 0000000..1ef128b
--- /dev/null
+++ b/tests/examples/streamiddemux/streamiddemux-stream.c
@@ -0,0 +1,241 @@
+#include <gst/gst.h>
+
+#define NUM_STREAM 13
+
+typedef struct _App App;
+
+struct _App
+{
+  GstElement *pipeline;
+  GstElement *audiotestsrc[NUM_STREAM];
+  GstElement *audioconvert[NUM_STREAM];
+  GstElement *capsfilter[NUM_STREAM];
+  GstElement *vorbisenc[NUM_STREAM];
+  GstElement *oggmux[NUM_STREAM];
+  GstElement *funnel;
+  GstElement *demux;
+  GstElement *stream_synchronizer;
+  GstElement *queue[NUM_STREAM];
+  GstElement *filesink[NUM_STREAM];
+
+  gboolean pad_blocked[NUM_STREAM];
+  GstPad *queue_srcpad[NUM_STREAM];
+  gulong blocked_id[NUM_STREAM];
+};
+
+App s_app;
+
+gint pad_added_cnt = 0;
+
+static gboolean
+bus_call (GstBus * bus, GstMessage * msg, gpointer data)
+{
+  GMainLoop *loop = (GMainLoop *) data;
+
+  switch (GST_MESSAGE_TYPE (msg)) {
+    case GST_MESSAGE_EOS:{
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_ERROR:{
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+static void
+set_blocked (App * app, gboolean blocked)
+{
+  gint i = 0;
+
+  for (i = 0; i < NUM_STREAM; i++) {
+    gst_pad_remove_probe (app->queue_srcpad[i], app->blocked_id[i]);
+  }
+}
+
+static void
+sink_do_reconfigure (App * app)
+{
+  gint i = 0;
+  GstPad *filesink_sinkpad[NUM_STREAM];
+  GstPad *sync_sinkpad[NUM_STREAM];
+  GstPad *sync_srcpad[NUM_STREAM];
+  GstIterator *it;
+  GValue item = G_VALUE_INIT;
+
+  for (i = 0; i < NUM_STREAM; i++) {
+    sync_sinkpad[i] =
+        gst_element_get_request_pad (app->stream_synchronizer, "sink_%u");
+    it = gst_pad_iterate_internal_links (sync_sinkpad[i]);
+    g_assert (it);
+    gst_iterator_next (it, &item);
+    sync_srcpad[i] = g_value_dup_object (&item);
+    g_value_unset (&item);
+
+    filesink_sinkpad[i] = gst_element_get_static_pad (app->filesink[i], "sink");
+
+    gst_pad_link_full (app->queue_srcpad[i], sync_sinkpad[i],
+        GST_PAD_LINK_CHECK_NOTHING);
+    gst_pad_link_full (sync_srcpad[i], filesink_sinkpad[i],
+        GST_PAD_LINK_CHECK_NOTHING);
+  }
+  gst_iterator_free (it);
+
+}
+
+static GstPadProbeReturn
+blocked_cb (GstPad * blockedpad, GstPadProbeInfo * info, gpointer user_data)
+{
+  App *app = user_data;
+  gint i = 0;
+  gboolean all_pads_blocked = TRUE;
+
+  for (i = 0; i < NUM_STREAM; i++) {
+    if (blockedpad == app->queue_srcpad[i])
+      app->pad_blocked[i] = TRUE;
+  }
+
+  for (i = 0; i < NUM_STREAM; i++) {
+    if (app->queue_srcpad[i] == FALSE) {
+      all_pads_blocked = FALSE;
+      break;
+    }
+  }
+
+  if (all_pads_blocked == TRUE) {
+    sink_do_reconfigure (app);
+    set_blocked (app, FALSE);
+  }
+
+  return GST_PAD_PROBE_OK;
+}
+
+static void
+src_pad_added_cb (GstElement * demux, GstPad * pad, App * app)
+{
+  GstPad *queue_sinkpad[NUM_STREAM];
+
+  queue_sinkpad[pad_added_cnt] =
+      gst_element_get_static_pad (app->queue[pad_added_cnt], "sink");
+  gst_pad_link_full (pad, queue_sinkpad[pad_added_cnt],
+      GST_PAD_LINK_CHECK_NOTHING);
+
+  app->queue_srcpad[pad_added_cnt] =
+      gst_element_get_static_pad (app->queue[pad_added_cnt], "src");
+  app->blocked_id[pad_added_cnt] =
+      gst_pad_add_probe (app->queue_srcpad[pad_added_cnt],
+      GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, blocked_cb, app, NULL);
+
+  pad_added_cnt++;
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  App *app = &s_app;
+
+  GMainLoop *loop = NULL;
+  GstBus *bus;
+  guint bus_watch_id;
+
+  GstPad *funnel_sinkpad[NUM_STREAM];
+  GstPad *funnel_srcpad;
+  GstPad *demux_sinkpad;
+  GstPad *oggmux_srcpad[NUM_STREAM];
+
+  guint stream_cnt = 0;
+  GstCaps *caps;
+
+  gst_init (&argc, &argv);
+
+  app->pipeline = gst_pipeline_new ("pipeline");
+
+  for (stream_cnt = 0; stream_cnt < NUM_STREAM; stream_cnt++) {
+    app->audiotestsrc[stream_cnt] =
+        gst_element_factory_make ("audiotestsrc", NULL);
+    app->audioconvert[stream_cnt] =
+        gst_element_factory_make ("audioconvert", NULL);
+    app->capsfilter[stream_cnt] = gst_element_factory_make ("capsfilter", NULL);
+    app->vorbisenc[stream_cnt] = gst_element_factory_make ("vorbisenc", NULL);
+    app->oggmux[stream_cnt] = gst_element_factory_make ("oggmux", NULL);
+  }
+
+  app->funnel = gst_element_factory_make ("funnel", NULL);
+  app->demux = gst_element_factory_make ("streamiddemux", NULL);
+  app->stream_synchronizer =
+      gst_element_factory_make ("streamsynchronizer", NULL);
+
+  caps = gst_caps_from_string ("audio/x-raw,channels=1;");
+
+  stream_cnt = 0;
+
+  for (stream_cnt = 0; stream_cnt < NUM_STREAM; stream_cnt++) {
+    app->queue[stream_cnt] = gst_element_factory_make ("queue", NULL);
+    app->filesink[stream_cnt] = gst_element_factory_make ("filesink", NULL);
+
+    g_object_set (app->audiotestsrc[stream_cnt], "wave", stream_cnt,
+        "num-buffers", 2000, NULL);
+    g_object_set (app->capsfilter[stream_cnt], "caps", caps, NULL);
+    g_object_set (app->filesink[stream_cnt], "location",
+        g_strdup_printf ("filesink_%d.ogg", stream_cnt), NULL);
+  }
+
+  stream_cnt = 0;
+
+  g_signal_connect (app->demux, "pad-added", G_CALLBACK (src_pad_added_cb),
+      app);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  bus = gst_element_get_bus (app->pipeline);
+  bus_watch_id = gst_bus_add_watch (bus, bus_call, loop);
+  g_object_unref (bus);
+
+  for (stream_cnt = 0; stream_cnt < NUM_STREAM; stream_cnt++) {
+    gst_bin_add_many (GST_BIN (app->pipeline), app->audiotestsrc[stream_cnt],
+        app->audioconvert[stream_cnt], app->capsfilter[stream_cnt],
+        app->vorbisenc[stream_cnt], app->oggmux[stream_cnt],
+        app->queue[stream_cnt], app->filesink[stream_cnt], NULL);
+    if (stream_cnt == 0) {
+      gst_bin_add_many (GST_BIN (app->pipeline), app->funnel, app->demux,
+          app->stream_synchronizer, NULL);
+    }
+  }
+
+  stream_cnt = 0;
+
+  for (stream_cnt = 0; stream_cnt < NUM_STREAM; stream_cnt++) {
+    gst_element_link_many (app->audiotestsrc[stream_cnt],
+        app->audioconvert[stream_cnt], app->capsfilter[stream_cnt],
+        app->vorbisenc[stream_cnt], app->oggmux[stream_cnt], NULL);
+  }
+
+  stream_cnt = 0;
+
+  for (stream_cnt = 0; stream_cnt < NUM_STREAM; stream_cnt++) {
+    funnel_sinkpad[stream_cnt] =
+        gst_element_get_request_pad (app->funnel, "sink_%u");
+    oggmux_srcpad[stream_cnt] =
+        gst_element_get_static_pad (app->oggmux[stream_cnt], "src");
+    gst_pad_link (oggmux_srcpad[stream_cnt], funnel_sinkpad[stream_cnt]);
+  }
+
+  funnel_srcpad = gst_element_get_static_pad (app->funnel, "src");
+
+  demux_sinkpad = gst_element_get_static_pad (app->demux, "sink");
+  gst_pad_link (funnel_srcpad, demux_sinkpad);
+
+  gst_element_set_state (app->pipeline, GST_STATE_PLAYING);
+  g_main_loop_run (loop);
+
+  gst_element_set_state (app->pipeline, GST_STATE_NULL);
+  g_object_unref (app->pipeline);
+  g_source_remove (bus_watch_id);
+  g_main_loop_unref (loop);
+
+  return 0;
+}
diff --git a/tests/examples/streams/Makefile.in b/tests/examples/streams/Makefile.in
index 1ba1acb..0ed1683 100644
--- a/tests/examples/streams/Makefile.in
+++ b/tests/examples/streams/Makefile.in
@@ -92,6 +92,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -109,7 +110,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -217,6 +218,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -322,6 +327,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/examples/typefind/Makefile.in b/tests/examples/typefind/Makefile.in
index f979f9a..8909f27 100644
--- a/tests/examples/typefind/Makefile.in
+++ b/tests/examples/typefind/Makefile.in
@@ -91,6 +91,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -108,7 +109,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -208,6 +209,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -313,6 +318,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tests/misc/Makefile.in b/tests/misc/Makefile.in
index 63318a4..d242e28 100644
--- a/tests/misc/Makefile.in
+++ b/tests/misc/Makefile.in
@@ -88,6 +88,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -105,7 +106,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -153,6 +154,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -258,6 +263,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index b68e4ee..eeb12e9 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -96,6 +96,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -113,7 +114,7 @@
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
-	$(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/common/m4/pkg.m4 \
 	$(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
 	$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
 	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lib-ld.m4 \
@@ -273,6 +274,10 @@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_DIR = @BASH_COMPLETION_DIR@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+BASH_HELPERS_DIR = @BASH_HELPERS_DIR@
 BISON_PATH = @BISON_PATH@
 CAT_ENTRY_END = @CAT_ENTRY_END@
 CAT_ENTRY_START = @CAT_ENTRY_START@
@@ -378,6 +383,7 @@
 HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@
 HAVE_DVIPS = @HAVE_DVIPS@
 HAVE_EPSTOPDF = @HAVE_EPSTOPDF@
+HAVE_FORK = @HAVE_FORK@
 HAVE_GMP = @HAVE_GMP@
 HAVE_GSL = @HAVE_GSL@
 HAVE_JADETEX = @HAVE_JADETEX@
diff --git a/tools/gst-indent b/tools/gst-indent
index 9309ed3..e75338b 100755
--- a/tools/gst-indent
+++ b/tools/gst-indent
@@ -23,6 +23,9 @@
       ;;
 esac
 
+# Run twice. GNU indent isn't idempotent
+# when run once
+for i in 1 2; do
 $INDENT \
   --braces-on-if-line \
   --case-brace-indentation0 \
@@ -37,4 +40,5 @@
   --tab-size8 \
   --indent-level2 \
   --leave-preprocessor-space \
-  $*
+  $* || exit $?
+done
diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c
index f97eb2a..141c7bd 100644
--- a/tools/gst-inspect.c
+++ b/tools/gst-inspect.c
@@ -25,7 +25,7 @@
 #  include "config.h"
 #endif
 
-/* FIXME 0.11: suppress warnings for deprecated API such as GValueArray
+/* FIXME 2.0: suppress warnings for deprecated API such as GValueArray
  * with newer GLib versions (>= 2.31.0) */
 #define GLIB_DISABLE_DEPRECATION_WARNINGS
 
@@ -245,9 +245,9 @@
 #define KNOWN_PARAM_FLAGS \
   (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY | \
   G_PARAM_LAX_VALIDATION |  G_PARAM_STATIC_STRINGS | \
-  G_PARAM_READABLE | G_PARAM_WRITABLE | GST_PARAM_CONTROLLABLE | \
-  GST_PARAM_MUTABLE_PLAYING | GST_PARAM_MUTABLE_PAUSED | \
-  GST_PARAM_MUTABLE_READY)
+  G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_DEPRECATED | \
+  GST_PARAM_CONTROLLABLE | GST_PARAM_MUTABLE_PLAYING | \
+  GST_PARAM_MUTABLE_PAUSED | GST_PARAM_MUTABLE_READY)
 
 static void
 print_element_properties_info (GstElement * element)
@@ -290,6 +290,10 @@
       g_print ("%s%s", (first_flag) ? "" : ", ", _("writable"));
       first_flag = FALSE;
     }
+    if (param->flags & G_PARAM_DEPRECATED) {
+      g_print ("%s%s", (first_flag) ? "" : ", ", _("deprecated"));
+      first_flag = FALSE;
+    }
     if (param->flags & GST_PARAM_CONTROLLABLE) {
       g_print (", %s", _("controllable"));
       first_flag = FALSE;
@@ -705,34 +709,14 @@
 
     name = gst_pad_get_name (pad);
     if (gst_pad_get_direction (pad) == GST_PAD_SRC)
-      g_print ("  SRC: '%s'", name);
+      n_print ("  SRC: '%s'\n", name);
     else if (gst_pad_get_direction (pad) == GST_PAD_SINK)
-      g_print ("  SINK: '%s'", name);
+      n_print ("  SINK: '%s'\n", name);
     else
-      g_print ("  UNKNOWN!!!: '%s'", name);
+      n_print ("  UNKNOWN!!!: '%s'\n", name);
 
     g_free (name);
 
-    g_print ("\n");
-
-    n_print ("    Implementation:\n");
-    if (pad->chainfunc)
-      n_print ("      Has chainfunc(): %s\n",
-          GST_DEBUG_FUNCPTR_NAME (pad->chainfunc));
-    if (pad->getrangefunc)
-      n_print ("      Has getrangefunc(): %s\n",
-          GST_DEBUG_FUNCPTR_NAME (pad->getrangefunc));
-    if (pad->eventfunc != gst_pad_event_default)
-      n_print ("      Has custom eventfunc(): %s\n",
-          GST_DEBUG_FUNCPTR_NAME (pad->eventfunc));
-    if (pad->queryfunc != gst_pad_query_default)
-      n_print ("      Has custom queryfunc(): %s\n",
-          GST_DEBUG_FUNCPTR_NAME (pad->queryfunc));
-
-    if (pad->iterintlinkfunc != gst_pad_iterate_internal_links_default)
-      n_print ("      Has custom iterintlinkfunc(): %s\n",
-          GST_DEBUG_FUNCPTR_NAME (pad->iterintlinkfunc));
-
     if (pad->padtemplate)
       n_print ("    Pad Template: '%s'\n", pad->padtemplate->name_template);
 
@@ -899,6 +883,25 @@
 }
 
 static void
+print_preset_list (GstElement * element)
+{
+  gchar **presets, **preset;
+
+  if (!GST_IS_PRESET (element))
+    return;
+
+  presets = gst_preset_get_preset_names (GST_PRESET (element));
+  if (presets && *presets) {
+    n_print ("\n");
+    n_print ("Presets:\n");
+    for (preset = presets; *preset; preset++) {
+      n_print ("  \"%s\"\n", *preset);
+    }
+    g_strfreev (presets);
+  }
+}
+
+static void
 print_blacklist (void)
 {
   GList *plugins, *cur;
@@ -1277,6 +1280,7 @@
   print_element_properties_info (element);
   print_signal_info (element);
   print_children_info (element);
+  print_preset_list (element);
 
   gst_object_unref (element);
   gst_object_unref (factory);
diff --git a/tools/gst-launch.c b/tools/gst-launch.c
index a644c0e..59f5fff 100644
--- a/tools/gst-launch.c
+++ b/tools/gst-launch.c
@@ -35,6 +35,9 @@
 #ifdef G_OS_UNIX
 #include <glib-unix.h>
 #include <sys/wait.h>
+#elif defined (G_OS_WIN32)
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
 #endif
 #include <locale.h>             /* for LC_ALL */
 #include "tools.h"
@@ -461,11 +464,14 @@
   g_list_foreach (subentries, print_toc_entry, GUINT_TO_POINTER (indent));
 }
 
-#ifdef G_OS_UNIX
+#if defined(G_OS_UNIX) || defined(G_OS_WIN32)
 static guint signal_watch_id;
+#if defined(G_OS_WIN32)
+static GstElement *intr_pipeline;
+#endif
 #endif
 
-#ifdef G_OS_UNIX
+#if defined(G_OS_UNIX) || defined(G_OS_WIN32)
 /* As the interrupt handler is dispatched from GMainContext as a GSourceFunc
  * handler, we can react to this by posting a message. */
 static gboolean
@@ -486,6 +492,15 @@
   return FALSE;
 }
 
+#if defined(G_OS_WIN32)         /* G_OS_UNIX */
+static BOOL WINAPI
+w32_intr_handler (DWORD dwCtrlType)
+{
+  intr_handler ((gpointer) intr_pipeline);
+  intr_pipeline = NULL;
+  return TRUE;
+}
+#endif /* G_OS_WIN32 */
 #endif /* G_OS_UNIX */
 
 /* returns ELR_ERROR if there was an error
@@ -506,6 +521,10 @@
 #ifdef G_OS_UNIX
   signal_watch_id =
       g_unix_signal_add (SIGINT, (GSourceFunc) intr_handler, pipeline);
+#elif defined(G_OS_WIN32)
+  intr_pipeline = NULL;
+  if (SetConsoleCtrlHandler (w32_intr_handler, TRUE))
+    intr_pipeline = pipeline;
 #endif
 
   while (TRUE) {
@@ -713,7 +732,7 @@
             goto exit;
         } else {
           /* buffering busy */
-          if (buffering == FALSE && target_state == GST_STATE_PLAYING) {
+          if (!buffering && target_state == GST_STATE_PLAYING) {
             /* we were not buffering but PLAYING, PAUSE  the pipeline. */
             PRINT (_("Buffering, setting pipeline to PAUSED ...\n"));
             gst_element_set_state (pipeline, GST_STATE_PAUSED);
@@ -831,6 +850,9 @@
 #ifdef G_OS_UNIX
     if (signal_watch_id > 0)
       g_source_remove (signal_watch_id);
+#elif defined(G_OS_WIN32)
+    intr_pipeline = NULL;
+    SetConsoleCtrlHandler (w32_intr_handler, FALSE);
 #endif
     return res;
   }
diff --git a/win32/common/config.h b/win32/common/config.h
index 87eb488..6833ff5 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -56,13 +56,13 @@
 #define GST_LICENSE "LGPL"
 
 /* package name in plugins */
-#define GST_PACKAGE_NAME "GStreamer source release"
+#define GST_PACKAGE_NAME "GStreamer git"
 
 /* package origin */
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2014-12-18"
+#define GST_PACKAGE_RELEASE_DATETIME "2015-03-12T12:48Z"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -70,6 +70,9 @@
 /* location of the installed gst-plugin-scanner */
 #define GST_PLUGIN_SCANNER_INSTALLED LIBDIR "\\gst-plugin-scanner"
 
+/* Define to 1 if you have the `alarm' function. */
+#undef HAVE_ALARM
+
 /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
    CoreFoundation framework. */
 #undef HAVE_CFLOCALECOPYCURRENT
@@ -81,9 +84,15 @@
 /* Define to 1 if you have the `clock_gettime' function. */
 #undef HAVE_CLOCK_GETTIME
 
+/* Define if the target CPU is AARCH64 */
+#undef HAVE_CPU_AARCH64
+
 /* Define if the target CPU is an Alpha */
 #undef HAVE_CPU_ALPHA
 
+/* Define if the target CPU is an ARC */
+#undef HAVE_CPU_ARC
+
 /* Define if the target CPU is an ARM */
 #undef HAVE_CPU_ARM
 
@@ -127,6 +136,22 @@
    */
 #undef HAVE_DCGETTEXT
 
+/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ALARM
+
+/* Define to 1 if you have the declaration of `localtime_r', and to 0 if you
+   don't. */
+#undef HAVE_DECL_LOCALTIME_R
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+   */
+#undef HAVE_DECL_STRDUP
+
+/* Define to 1 if you have the declaration of `strsignal', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRSIGNAL
+
 /* Defined if we have dladdr () */
 #undef HAVE_DLADDR
 
@@ -136,6 +161,9 @@
 /* Define to 1 if you have the `fgetpos' function. */
 #define HAVE_FGETPOS 1
 
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
 /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
 #undef HAVE_FSEEKO
 
@@ -154,6 +182,9 @@
 /* Define to 1 if you have the `getpagesize' function. */
 #undef HAVE_GETPAGESIZE
 
+/* Define to 1 if you have the `getpid' function. */
+#undef HAVE_GETPID
+
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
@@ -179,6 +210,9 @@
    declares uintmax_t. */
 #undef HAVE_INTTYPES_H_WITH_UINTMAX
 
+/* Define to 1 if you have the `rt' library (-lrt). */
+#undef HAVE_LIBRT
+
 /* Define to 1 if you have the `localtime_r' function. */
 #undef HAVE_LOCALTIME_R
 
@@ -230,12 +264,18 @@
 /* Have PTHREAD_PRIO_INHERIT. */
 #undef HAVE_PTHREAD_PRIO_INHERIT
 
+/* Have function pthread_setname_np(const char*) */
+#undef HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID
+
 /* Define to 1 if the system has the type `ptrdiff_t'. */
 #undef HAVE_PTRDIFF_T
 
 /* Define if RDTSC is available */
 #undef HAVE_RDTSC
 
+/* Define to 1 if you have the `setitimer' function. */
+#undef HAVE_SETITIMER
+
 /* Define to 1 if you have the `sigaction' function. */
 #undef HAVE_SIGACTION
 
@@ -252,12 +292,30 @@
 /* Define to 1 if you have the <stdlib.h> header file. */
 #define HAVE_STDLIB_H 1
 
+/* Define to 1 if you have the `strcasestr' function. */
+#undef HAVE_STRCASESTR
+
 /* Define to 1 if you have the <strings.h> header file. */
 #undef HAVE_STRINGS_H
 
 /* Define to 1 if you have the <string.h> header file. */
 #define HAVE_STRING_H 1
 
+/* Define to 1 if you have the `strsignal' function. */
+#undef HAVE_STRSIGNAL
+
+/* Define to 1 if `it_interval' is a member of `struct itimerspec'. */
+#undef HAVE_STRUCT_ITIMERSPEC_IT_INTERVAL
+
+/* Define to 1 if `it_value' is a member of `struct itimerspec'. */
+#undef HAVE_STRUCT_ITIMERSPEC_IT_VALUE
+
+/* Define to 1 if `tv_nsec' is a member of `struct timespec'. */
+#undef HAVE_STRUCT_TIMESPEC_TV_NSEC
+
+/* Define to 1 if `tv_sec' is a member of `struct timespec'. */
+#undef HAVE_STRUCT_TIMESPEC_TV_SEC
+
 /* Define to 1 if you have the <sys/param.h> header file. */
 #undef HAVE_SYS_PARAM_H
 
@@ -282,12 +340,18 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #define HAVE_SYS_TYPES_H 1
 
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
 /* Define to 1 if you have the <sys/utsname.h> header file. */
 #undef HAVE_SYS_UTSNAME_H
 
 /* Define to 1 if you have the <sys/wait.h> header file. */
 #undef HAVE_SYS_WAIT_H
 
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
 /* Have tm_gmtoff field in struct tm */
 #undef HAVE_TM_GMTOFF
 
@@ -318,6 +382,12 @@
 /* Define to 1 if you have the <winsock2.h> header file. */
 #define HAVE_WINSOCK2_H 1
 
+/* Define to 1 if you have the `_getpid' function. */
+#undef HAVE__GETPID
+
+/* Define to 1 if you have the `_strdup' function. */
+#undef HAVE__STRDUP
+
 /* the host CPU */
 #define HOST_CPU "i686"
 
@@ -354,7 +424,7 @@
 #define PACKAGE_NAME "GStreamer"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer 1.4.5"
+#define PACKAGE_STRING "GStreamer 1.5.0.1"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gstreamer"
@@ -363,7 +433,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.4.5"
+#define PACKAGE_VERSION "1.5.0.1"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -394,6 +464,12 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Need to define the itimerspec structure */
+#undef STRUCT_ITIMERSPEC_DEFINITION_MISSING
+
+/* Need to define the timespec structure */
+#undef STRUCT_TIMESPEC_DEFINITION_MISSING
+
 /* the target CPU */
 #undef TARGET_CPU
 
@@ -401,7 +477,7 @@
 #undef USE_POISONING
 
 /* Version number of package */
-#define VERSION "1.4.5"
+#define VERSION "1.5.0.1"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
@@ -432,9 +508,15 @@
 /* We need at least WinXP SP2 for __stat64 */
 #undef __MSVCRT_VERSION__
 
+/* clockid_t */
+#undef clockid_t
+
 /* Define to the widest signed integer type if <stdint.h> and <inttypes.h> do
    not define. */
 #undef intmax_t
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
 #undef size_t
+
+/* timer_t */
+#undef timer_t
diff --git a/win32/common/gstconfig.h b/win32/common/gstconfig.h
index 2c3e12f..d893411 100644
--- a/win32/common/gstconfig.h
+++ b/win32/common/gstconfig.h
@@ -125,14 +125,6 @@
    refcounting */
 #define GST_HAVE_GLIB_2_8 1
 
-/***** Deal with XML stuff, we have to handle both loadsave and registry *****/
-
-#if (! (defined(GST_DISABLE_LOADSAVE) && defined(GST_DISABLE_REGISTRY)) )
-# include <libxml/parser.h>
-#else
-# define GST_DISABLE_LOADSAVE_REGISTRY
-#endif
-
 /**
  * GST_EXPORT:
  *
diff --git a/win32/common/gstenumtypes.c b/win32/common/gstenumtypes.c
index 0527074..ebba963 100644
--- a/win32/common/gstenumtypes.c
+++ b/win32/common/gstenumtypes.c
@@ -310,7 +310,11 @@
         "GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS", "non-default-params"},
     {C_FLAGS (GST_DEBUG_GRAPH_SHOW_STATES), "GST_DEBUG_GRAPH_SHOW_STATES",
         "states"},
+    {C_FLAGS (GST_DEBUG_GRAPH_SHOW_FULL_PARAMS),
+        "GST_DEBUG_GRAPH_SHOW_FULL_PARAMS", "full-params"},
     {C_FLAGS (GST_DEBUG_GRAPH_SHOW_ALL), "GST_DEBUG_GRAPH_SHOW_ALL", "all"},
+    {C_FLAGS (GST_DEBUG_GRAPH_SHOW_VERBOSE), "GST_DEBUG_GRAPH_SHOW_VERBOSE",
+        "verbose"},
     {0, NULL, NULL}
   };
 
@@ -1586,6 +1590,7 @@
     {C_FLAGS (GST_SEEK_FLAG_ACCURATE), "GST_SEEK_FLAG_ACCURATE", "accurate"},
     {C_FLAGS (GST_SEEK_FLAG_KEY_UNIT), "GST_SEEK_FLAG_KEY_UNIT", "key-unit"},
     {C_FLAGS (GST_SEEK_FLAG_SEGMENT), "GST_SEEK_FLAG_SEGMENT", "segment"},
+    {C_FLAGS (GST_SEEK_FLAG_TRICKMODE), "GST_SEEK_FLAG_TRICKMODE", "trickmode"},
     {C_FLAGS (GST_SEEK_FLAG_SKIP), "GST_SEEK_FLAG_SKIP", "skip"},
     {C_FLAGS (GST_SEEK_FLAG_SNAP_BEFORE), "GST_SEEK_FLAG_SNAP_BEFORE",
         "snap-before"},
@@ -1593,6 +1598,10 @@
         "snap-after"},
     {C_FLAGS (GST_SEEK_FLAG_SNAP_NEAREST), "GST_SEEK_FLAG_SNAP_NEAREST",
         "snap-nearest"},
+    {C_FLAGS (GST_SEEK_FLAG_TRICKMODE_KEY_UNITS),
+        "GST_SEEK_FLAG_TRICKMODE_KEY_UNITS", "trickmode-key-units"},
+    {C_FLAGS (GST_SEEK_FLAG_TRICKMODE_NO_AUDIO),
+        "GST_SEEK_FLAG_TRICKMODE_NO_AUDIO", "trickmode-no-audio"},
     {0, NULL, NULL}
   };
 
@@ -1611,8 +1620,14 @@
   static const GFlagsValue values[] = {
     {C_FLAGS (GST_SEGMENT_FLAG_NONE), "GST_SEGMENT_FLAG_NONE", "none"},
     {C_FLAGS (GST_SEGMENT_FLAG_RESET), "GST_SEGMENT_FLAG_RESET", "reset"},
+    {C_FLAGS (GST_SEGMENT_FLAG_TRICKMODE), "GST_SEGMENT_FLAG_TRICKMODE",
+        "trickmode"},
     {C_FLAGS (GST_SEGMENT_FLAG_SKIP), "GST_SEGMENT_FLAG_SKIP", "skip"},
     {C_FLAGS (GST_SEGMENT_FLAG_SEGMENT), "GST_SEGMENT_FLAG_SEGMENT", "segment"},
+    {C_FLAGS (GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS),
+        "GST_SEGMENT_FLAG_TRICKMODE_KEY_UNITS", "trickmode-key-units"},
+    {C_FLAGS (GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO),
+        "GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO", "trickmode-no-audio"},
     {0, NULL, NULL}
   };
 
diff --git a/win32/common/gstversion.h b/win32/common/gstversion.h
index b7e8f3e..a595e27 100644
--- a/win32/common/gstversion.h
+++ b/win32/common/gstversion.h
@@ -51,20 +51,20 @@
  *
  * The minor version of GStreamer at compile time:
  */
-#define GST_VERSION_MINOR (4)
+#define GST_VERSION_MINOR (5)
 /**
  * GST_VERSION_MICRO:
  *
  * The micro version of GStreamer at compile time:
  */
-#define GST_VERSION_MICRO (5)
+#define GST_VERSION_MICRO (0)
 /**
  * GST_VERSION_NANO:
  *
  * The nano version of GStreamer at compile time:
  * Actual releases have 0, GIT versions have 1, prerelease versions have 2-...
  */
-#define GST_VERSION_NANO (0)
+#define GST_VERSION_NANO (1)
 
 /**
  * GST_CHECK_VERSION:
diff --git a/win32/common/libgstbase.def b/win32/common/libgstbase.def
index 2713a09..1767f67 100644
--- a/win32/common/libgstbase.def
+++ b/win32/common/libgstbase.def
@@ -18,6 +18,7 @@
 	gst_adapter_take
 	gst_adapter_take_buffer
 	gst_adapter_take_buffer_fast
+	gst_adapter_take_buffer_list
 	gst_adapter_take_list
 	gst_adapter_unmap
 	gst_base_parse_add_index_entry
@@ -142,6 +143,7 @@
 	gst_byte_reader_get_remaining
 	gst_byte_reader_get_size
 	gst_byte_reader_get_string_utf8
+	gst_byte_reader_get_sub_reader
 	gst_byte_reader_get_uint16_be
 	gst_byte_reader_get_uint16_le
 	gst_byte_reader_get_uint24_be
@@ -153,6 +155,7 @@
 	gst_byte_reader_get_uint8
 	gst_byte_reader_init
 	gst_byte_reader_masked_scan_uint32
+	gst_byte_reader_masked_scan_uint32_peek
 	gst_byte_reader_new
 	gst_byte_reader_peek_data
 	gst_byte_reader_peek_float32_be
@@ -169,6 +172,7 @@
 	gst_byte_reader_peek_int64_le
 	gst_byte_reader_peek_int8
 	gst_byte_reader_peek_string_utf8
+	gst_byte_reader_peek_sub_reader
 	gst_byte_reader_peek_uint16_be
 	gst_byte_reader_peek_uint16_le
 	gst_byte_reader_peek_uint24_be
@@ -263,11 +267,14 @@
 	gst_data_queue_push_force
 	gst_data_queue_set_flushing
 	gst_flow_combiner_add_pad
+	gst_flow_combiner_clear
 	gst_flow_combiner_free
 	gst_flow_combiner_get_type
 	gst_flow_combiner_new
 	gst_flow_combiner_remove_pad
+	gst_flow_combiner_reset
 	gst_flow_combiner_update_flow
+	gst_flow_combiner_update_pad_flow
 	gst_push_src_get_type
 	gst_queue_array_drop_element
 	gst_queue_array_find
diff --git a/win32/common/libgstcontroller.def b/win32/common/libgstcontroller.def
index 92d5abb..b7dd634 100644
--- a/win32/common/libgstcontroller.def
+++ b/win32/common/libgstcontroller.def
@@ -1,6 +1,7 @@
 EXPORTS
 	gst_argb_control_binding_get_type
 	gst_argb_control_binding_new
+	gst_control_point_get_type
 	gst_direct_control_binding_get_type
 	gst_direct_control_binding_new
 	gst_interpolation_control_source_get_type
diff --git a/win32/common/libgstnet.def b/win32/common/libgstnet.def
index 4478bcb..8e3f327 100644
--- a/win32/common/libgstnet.def
+++ b/win32/common/libgstnet.def
@@ -1,9 +1,12 @@
 EXPORTS
 	gst_buffer_add_net_address_meta
+	gst_buffer_add_net_control_message_meta
 	gst_net_address_meta_api_get_type
 	gst_net_address_meta_get_info
 	gst_net_client_clock_get_type
 	gst_net_client_clock_new
+	gst_net_control_message_meta_api_get_type
+	gst_net_control_message_meta_get_info
 	gst_net_time_packet_copy
 	gst_net_time_packet_free
 	gst_net_time_packet_get_type
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index 2fda6b6..22acb9d 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -109,11 +109,13 @@
 	gst_bin_recalculate_latency
 	gst_bin_remove
 	gst_bin_remove_many
+	gst_bin_sync_children_states
 	gst_bitmask_get_type
 	gst_buffer_add_meta
 	gst_buffer_append
 	gst_buffer_append_memory
 	gst_buffer_append_region
+	gst_buffer_copy_deep
 	gst_buffer_copy_flags_get_type
 	gst_buffer_copy_into
 	gst_buffer_copy_region
@@ -206,6 +208,7 @@
 	gst_bus_pop_filtered
 	gst_bus_post
 	gst_bus_remove_signal_watch
+	gst_bus_remove_watch
 	gst_bus_set_flushing
 	gst_bus_set_sync_handler
 	gst_bus_sync_reply_get_type
@@ -240,8 +243,10 @@
 	gst_caps_features_remove_id
 	gst_caps_features_set_parent_refcount
 	gst_caps_features_to_string
+	gst_caps_filter_and_map_in_place
 	gst_caps_fixate
 	gst_caps_flags_get_type
+	gst_caps_foreach
 	gst_caps_from_string
 	gst_caps_get_features
 	gst_caps_get_size
@@ -260,6 +265,7 @@
 	gst_caps_is_subset
 	gst_caps_is_subset_structure
 	gst_caps_is_subset_structure_full
+	gst_caps_map_in_place
 	gst_caps_merge
 	gst_caps_merge_structure
 	gst_caps_merge_structure_full
@@ -294,7 +300,9 @@
 	gst_child_proxy_set_property
 	gst_child_proxy_set_valist
 	gst_clock_add_observation
+	gst_clock_add_observation_unapplied
 	gst_clock_adjust_unlocked
+	gst_clock_adjust_with_calibration
 	gst_clock_entry_type_get_type
 	gst_clock_flags_get_type
 	gst_clock_get_calibration
@@ -371,6 +379,7 @@
 	gst_date_time_to_iso8601_string
 	gst_date_time_unref
 	gst_debug_add_log_function
+	gst_debug_bin_to_dot_data
 	gst_debug_bin_to_dot_file
 	gst_debug_bin_to_dot_file_with_ts
 	gst_debug_category_free
@@ -769,6 +778,7 @@
 	gst_object_get_value_array
 	gst_object_has_active_control_bindings
 	gst_object_has_ancestor
+	gst_object_has_parent
 	gst_object_ref
 	gst_object_ref_sink
 	gst_object_remove_control_binding
@@ -970,6 +980,7 @@
 	gst_preset_get_preset_names
 	gst_preset_get_property_names
 	gst_preset_get_type
+	gst_preset_is_editable
 	gst_preset_load_preset
 	gst_preset_rename_preset
 	gst_preset_save_preset
@@ -1135,6 +1146,7 @@
 	gst_structure_can_intersect
 	gst_structure_change_type_get_type
 	gst_structure_copy
+	gst_structure_filter_and_map_in_place
 	gst_structure_fixate
 	gst_structure_fixate_field
 	gst_structure_fixate_field_boolean
@@ -1345,20 +1357,60 @@
 	gst_type_find_suggest
 	gst_type_find_suggest_simple
 	gst_update_registry
+	gst_uri_append_path
+	gst_uri_append_path_segment
 	gst_uri_construct
+	gst_uri_equal
 	gst_uri_error_get_type
 	gst_uri_error_quark
+	gst_uri_from_string
+	gst_uri_from_string_with_base
+	gst_uri_get_fragment
+	gst_uri_get_host
 	gst_uri_get_location
+	gst_uri_get_path
+	gst_uri_get_path_segments
+	gst_uri_get_path_string
+	gst_uri_get_port
 	gst_uri_get_protocol
+	gst_uri_get_query_keys
+	gst_uri_get_query_string
+	gst_uri_get_query_table
+	gst_uri_get_query_value
+	gst_uri_get_scheme
+	gst_uri_get_type
+	gst_uri_get_userinfo
 	gst_uri_handler_get_protocols
 	gst_uri_handler_get_type
 	gst_uri_handler_get_uri
 	gst_uri_handler_get_uri_type
 	gst_uri_handler_set_uri
 	gst_uri_has_protocol
+	gst_uri_is_normalized
 	gst_uri_is_valid
+	gst_uri_is_writable
+	gst_uri_join
+	gst_uri_join_strings
+	gst_uri_make_writable
+	gst_uri_new
+	gst_uri_new_with_base
+	gst_uri_normalize
 	gst_uri_protocol_is_supported
 	gst_uri_protocol_is_valid
+	gst_uri_query_has_key
+	gst_uri_remove_query_key
+	gst_uri_set_fragment
+	gst_uri_set_host
+	gst_uri_set_path
+	gst_uri_set_path_segments
+	gst_uri_set_path_string
+	gst_uri_set_port
+	gst_uri_set_query_string
+	gst_uri_set_query_table
+	gst_uri_set_query_value
+	gst_uri_set_scheme
+	gst_uri_set_userinfo
+	gst_uri_to_string
 	gst_uri_type_get_type
 	gst_util_array_binary_search
 	gst_util_double_to_fraction