Imported Upstream version 1.3.90
diff --git a/ChangeLog b/ChangeLog
index c17b25c..4ccde0b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,391 @@
-=== release 1.3.3 ===
+=== release 1.3.90 ===
 
-2014-06-22  Sebastian Dröge <slomo@coaxion.net>
+2014-06-28 10:45:18 +0200  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.3.90
+
+2014-06-28 10:41:48 +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
+
+2014-06-27 10:44:32 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstdevicemonitor.c:
+	* tests/check/gst/gstdevice.c:
+	  devicemonitor: don't fail when started without any filters
+	  Just show all devices then.
+
+2014-06-27 10:44:01 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gstdeviceproviderfactory.c:
+	  deviceproviderfactory: handle NULL classes argument and match any
+
+2014-06-26 21:00:40 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/gst/.gitignore:
+	* tests/check/gst/gstdevice.c:
+	  device: Add unit tests
+
+2014-06-26 17:22:25 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/gstdevicemonitor.c:
+	* gst/gstdeviceprovider.c:
+	* gst/gstdeviceproviderfactory.c:
+	* gst/gstmessage.c:
+	  devicemonitor: Improve documentation
+
+2014-06-26 17:13:12 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstdevicemonitor.c:
+	* gst/gstdevicemonitor.h:
+	* gst/gstdeviceprovider.c:
+	* gst/gstdeviceproviderfactory.c:
+	* gst/gstdeviceproviderfactory.h:
+	* win32/common/libgstreamer.def:
+	  devicemonitor: Make it possible to add multiple filters
+	  Each filter will include a GstCaps and a set of classes to match
+
+2014-06-26 16:31:51 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/gstdevice.c:
+	  device: Add pre-conditions
+
+2014-06-26 15:08:46 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* docs/gst/gstreamer-docs.sgml:
+	* docs/gst/gstreamer-sections.txt:
+	* gst/Makefile.am:
+	* gst/gst.h:
+	* gst/gstdevicemonitor.c:
+	* gst/gstdevicemonitor.h:
+	* gst/gstglobaldevicemonitor.c:
+	* gst/gstglobaldevicemonitor.h:
+	* win32/common/libgstreamer.def:
+	  GstDeviceMonitor: Rename from GstGlobalDeviceMonitor
+
+2014-06-26 14:28:09 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* docs/gst/gstreamer-docs.sgml:
+	* docs/gst/gstreamer-sections.txt:
+	* docs/plugins/gstreamer-plugins.hierarchy:
+	* gst/Makefile.am:
+	* gst/gst.h:
+	* gst/gst_private.h:
+	* gst/gstdevice.c:
+	* gst/gstdevicemonitor.c:
+	* gst/gstdevicemonitor.h:
+	* gst/gstdevicemonitorfactory.c:
+	* gst/gstdevicemonitorfactory.h:
+	* gst/gstdeviceprovider.c:
+	* gst/gstdeviceprovider.h:
+	* gst/gstdeviceproviderfactory.c:
+	* gst/gstdeviceproviderfactory.h:
+	* gst/gstglobaldevicemonitor.c:
+	* gst/gstglobaldevicemonitor.h:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* gst/gstregistry.c:
+	* gst/gstregistrybinary.c:
+	* gst/gstregistrychunks.c:
+	* gst/gstregistrychunks.h:
+	* tools/gst-inspect.c:
+	* win32/common/libgstreamer.def:
+	  DeviceProvider: Rename from DeviceMonitor
+
+2014-06-26 19:31:33 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstdataqueue.c:
+	* libs/gst/base/gstdataqueue.h:
+	  dataqueue: Hide from bindings
+	  Other languages have their own data structures that are more convenient to
+	  use.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731303
+
+2014-06-26 19:30:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* libs/gst/base/gstqueuearray.c:
+	* libs/gst/base/gstqueuearray.h:
+	  queuearray: Hide from bindings
+	  Other languages have their own data structures that are more convenient to use.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731350
+
+2014-05-28 10:14:45 +0100  Philip Withnall <philip.withnall@collabora.co.uk>
+
+	* gst/gstminiobject.c:
+	  miniobject: Add missing (nullable) annotations
+	  gst_mini_object_replace() can take NULL mini-objects.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=730873
+
+2014-06-26 19:02:06 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/gstmessage.c:
+	  message: Application and element messages should not have NULL structures
+	  It does not make sense for them.
+
+2014-06-11 16:19:01 -0700  Evan Nemerson <evan@nemerson.com>
+
+	* gst/gstbufferpool.c:
+	* gst/gstelement.c:
+	* gst/gstinfo.h:
+	* gst/gstmessage.c:
+	* gst/gstobject.c:
+	* gst/gstpad.c:
+	* gst/gstpad.h:
+	* gst/gstplugin.h:
+	* gst/gstpreset.c:
+	* gst/gsttaglist.c:
+	  introspection: add some missing allow-none annotations to in params
+	  https://bugzilla.gnome.org/show_bug.cgi?id=730957
+
+2014-06-11 16:06:19 -0700  Evan Nemerson <evan@nemerson.com>
+
+	* gst/gstbuffer.c:
+	* gst/gstbuffer.h:
+	* gst/gstbufferlist.h:
+	* gst/gstcaps.h:
+	* gst/gstevent.h:
+	* gst/gstmessage.h:
+	* gst/gstobject.c:
+	* gst/gstpreset.c:
+	* gst/gstquery.h:
+	* gst/gsttoc.c:
+	* gst/gstvalue.c:
+	  introspection: add nullability annotations to out and inout params
+	  https://bugzilla.gnome.org/show_bug.cgi?id=730957
+
+2014-06-11 15:21:34 -0700  Evan Nemerson <evan@nemerson.com>
+
+	* gst/gstallocator.c:
+	* gst/gstatomicqueue.c:
+	* gst/gstbin.c:
+	* gst/gstbuffer.c:
+	* gst/gstbufferlist.c:
+	* gst/gstbus.c:
+	* gst/gstcapsfeatures.c:
+	* gst/gstchildproxy.c:
+	* gst/gstclock.c:
+	* gst/gstcontrolbinding.c:
+	* gst/gstdatetime.c:
+	* gst/gstdevicemonitorfactory.c:
+	* gst/gstelement.c:
+	* gst/gstelement.h:
+	* gst/gstelementfactory.c:
+	* gst/gstformat.c:
+	* gst/gstghostpad.c:
+	* gst/gstmemory.c:
+	* gst/gstmeta.c:
+	* gst/gstminiobject.c:
+	* gst/gstobject.c:
+	* gst/gstpad.c:
+	* gst/gstpad.h:
+	* gst/gstplugin.c:
+	* gst/gstpluginfeature.c:
+	* gst/gstpluginfeature.h:
+	* gst/gstpoll.c:
+	* gst/gstpreset.c:
+	* gst/gstregistry.c:
+	* gst/gstsample.c:
+	* gst/gststructure.c:
+	* gst/gsttaglist.c:
+	* gst/gsttagsetter.c:
+	* gst/gsttaskpool.c:
+	* gst/gsttoc.c:
+	* gst/gsttocsetter.c:
+	* gst/gsttypefind.c:
+	* gst/gsttypefindfactory.c:
+	* gst/gsturi.c:
+	* gst/gstutils.c:
+	* gst/gstvalue.c:
+	  introspection: add missing (nullable) annotations to return values
+	  Support for (nullable) was added to G-I at the same time as nullable
+	  return values.  Previous versions of G-I will not mark return values as
+	  nullable, even when an (allow-none) annotation is present, so it is
+	  not necessary to add (allow-none) annotations for compatibility with
+	  older versions of G-I.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=730957
+
+2014-06-11 17:15:39 -0700  Evan Nemerson <evan@nemerson.com>
+
+	* libs/gst/base/gstadapter.c:
+	* libs/gst/base/gstcollectpads.c:
+	* libs/gst/base/gstcollectpads.h:
+	  base: assorted introspection fixes and additions
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731542
+
+2014-06-11 17:12:20 -0700  Evan Nemerson <evan@nemerson.com>
+
+	* libs/gst/base/gstadapter.c:
+	* libs/gst/base/gstbasesink.c:
+	* libs/gst/base/gstcollectpads.c:
+	* libs/gst/base/gstindex.c:
+	* libs/gst/base/gsttypefindhelper.c:
+	  base: add (nullable) annotations to return values
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731542
+
+2014-06-26 14:08:03 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/gst/gstbufferlist.c:
+	  tests: add another buffer list test case
+
+2014-06-26 13:24:08 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/gst/gstbufferlist.c:
+	  tests: port and re-enable buffer list tests
+	  And remove some which don't apply any more.
+
+2014-06-26 11:58:04 +0300  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* tests/check/gst/gstcaps.c:
+	  tests: enhance the gstcaps test_features to also test gst_caps_set_features()
+	  Compliments my previous patch for gst_caps_set_features, which would
+	  previously assert and leak the old GstCapsFeatures if the caps already
+	  had a GstCapsFeatures and you were trying to replace it with a new one.
+
+2014-06-26 11:16:34 +0300  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst/gstcaps.c:
+	  caps: unset the parent refcount of the old features before freeing them in gst_caps_set_features()
+	  Otherwise gst_caps_features_free() asserts and the features structure is leaked
+
+2014-06-16 19:30:06 -0300  Thiago Santos <ts.santos@sisa.samsung.com>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: avoid returning _OK for _NOT_LINKED
+	  When the parser receives non-aligned packets it can push a buffer
+	  and get a not-linked return while still leaving some data still to
+	  be parsed. This remaining data will not form a complete frame and
+	  the subclass likely returns _OK and baseparse would take that
+	  as the return, while it the element is actually not-linked.
+	  This patch fixes this by storing the last flow-return from a push
+	  and using that if a parsing operation doesn't result in data being
+	  flushed or skipped.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731474
+
+2014-06-25 11:40:57 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* plugins/elements/gstelements_private.c:
+	  elements: fix copyright and remove gtk-doc chunk
+	  Trivial as it may be, this code was mostly copied from
+	  somewhere else. The gtk-doc chunk is not needed, since
+	  it's not public API.
+
+2014-06-02 22:07:52 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* plugins/elements/gstfilesrc.c:
+	  filesrc: Ignore seek error on non-seekable files
+	  This make it works with FIFOs.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731176
+
+2014-06-22 19:36:14 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* configure.ac:
-	  releasing 1.3.3
+	  Back to development
+
+=== release 1.3.3 ===
+
+2014-06-22 18:07:42 +0200  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.3.3
+
+2014-06-22 17:15:40 +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
 
 2014-06-22 14:23:03 +0200  Sebastian Dröge <sebastian@centricular.com>
 
diff --git a/NEWS b/NEWS
index 234351d..92e141b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-This is GStreamer 1.3.3
+This is GStreamer 1.3.90
 
 Changes since 1.2:
 
@@ -129,7 +129,7 @@
      with downstream via caps.
    ∘ Lots of fixes for coverity warnings all over the place.
    ∘ Negotiation related performance improvements.
-   ∘ 500+ fixed bug reports, and many other bug fixes and other
+   ∘ 800+ fixed bug reports, and many other bug fixes and other
      improvements everywhere that had no bug report.
 
 Things to look out for:
@@ -137,6 +137,9 @@
    element.
  • The mfcdec element was removed and replaced by v4l2videodec.
  • osxvideosink is only available in OS X 10.6 or newer.
- • The GstDeviceMonitor API will likely change slightly before the
-   1.4.0 release.
-
+ • 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/RELEASE b/RELEASE
index 0bcf059..abdf83a 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,22 +1,28 @@
 
-Release notes for GStreamer 1.3.3
+Release notes for GStreamer 1.3.90
 
 
-The GStreamer team is pleased to announce the third release of the unstable
-1.3 release series. The 1.3 release series is adding new features on top of
-the 1.0 and 1.2 series and is part of the API and ABI-stable 1.x release
-series of the GStreamer multimedia framework. The unstable 1.3 release series
-will lead to the stable 1.4 release series in the next weeks, and newly added
-API can still change until that point.
+The GStreamer team is pleased to announce the first release candidate 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.
 
 
-This is hopefully the last 1.3 development release and will be followed by
-the first 1.4.0 release candidate (1.3.90) in 1-2 weeks. Which then hopefully
-is followed by 1.4.0 soonish in early July.
+This release candidate will hopefully shortly be followed by the stable 1.4.0
+release if no bigger regressions or bigger issues are detected, and enough
+testing of the release candidate happened. The new API that was added during
+the 1.3 release series is not expected to change anymore at this point.
 
 
-Binaries for Android, iOS, Mac OS X and Windows will be provided separately
-during the unstable 1.3 release series.
+Binaries for Android, iOS, Mac OS X and Windows are provided together with this
+release.
+
+
+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.
+
 
 
 This module, gstreamer, only contains core functionality.
@@ -42,25 +48,12 @@
 
 Bugs fixed in this release
      
+      * 730873 : miniobject: Add missing (nullable) annotations
+      * 730957 : Missing nullability annotations
+      * 731303 : dataqueue: add bindings-friendly gst_data_queue_new_full()
+      * 731350 : Add gst_queue_array_new variant which takes a GDestroyNotify
+      * 731542 : base: introspection fixes
       * 732007 : Rename GstGlobalDeviceMonitor
-      * 703021 : Missing Gst.VERSION_MAJOR, Gst.VERSION_MINOR
-      * 709224 : audio/videodecoder: Not returning GST_FLOW_EOS when after segment
-      * 710268 : basetransform: cannot answer GST_QUERY_ALLOCATION if its src has ANY caps
-      * 727746 : Factor buffer flags-to-string code
-      * 729440 : docs: DeviceMonitor missing in generated doc
-      * 729701 : baseparse: rate parameter from segment event could not pass to downstream
-      * 730718 : POTFILES.in is out of date
-      * 730982 : Minor annotation fixes
-      * 731302 : gst_data_queue_new documentation is misleading
-      * 731349 : queuearray: doesn't expand with initial size of 1, resulting in invalid memory access
-      * 731355 : GstFlowCombiner not introspection-friendly
-      * 731442 : bytereader: optimize _scan_for_start_code() using pointer access
-      * 731541 : minor introspection fixes
-      * 731704 : gst_caps_is_any() returns FALSE or flag value, not TRUE or FALSE
-      * 731716 : funnel: fix eos handling and unit test case
-      * 731756 : gstvalue: Speed up gst_value_intersect/_subtract
-      * 731892 : gstvalue: Avoid expensive g_type_check_value_holds calls when dealing with fundamental GType
-      * 727611 : bufferpool: Add _set_flushing() and new (active,flushing) state
 
 ==== Download ====
 
@@ -97,18 +90,11 @@
         
 Contributors to this release
     
-      * Edward Hervey
       * Evan Nemerson
-      * Nicolas Dufresne
+      * George Kiagiadakis
       * Olivier Crête
       * Philip Withnall
-      * Piotr Drąg
       * Sebastian Dröge
-      * Srimanta Panda
-      * Sungho Bae
       * Thiago Santos
       * Tim-Philipp Müller
-      * Vincent Penquerc'h
-      * Wim Taymans
-      * zhouming
  
\ No newline at end of file
diff --git a/config.guess b/config.guess
index b79252d..1f5c50c 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2013 Free Software Foundation, Inc.
+#   Copyright 1992-2014 Free Software Foundation, Inc.
 
-timestamp='2013-06-10'
+timestamp='2014-03-23'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2013 Free Software Foundation, Inc.
+Copyright 1992-2014 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -149,7 +149,7 @@
 	LIBC=gnu
 	#endif
 	EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
 	;;
 esac
 
@@ -826,7 +826,7 @@
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
-    i*:MSYS*:*)
+    *:MSYS*:*)
 	echo ${UNAME_MACHINE}-pc-msys
 	exit ;;
     i*:windows32*:*)
@@ -969,10 +969,10 @@
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
-    or1k:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+    openrisc*:Linux:*:*)
+	echo or1k-unknown-linux-${LIBC}
 	exit ;;
-    or32:Linux:*:*)
+    or32:Linux:*:* | or1k*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     padre:Linux:*:*)
@@ -1260,16 +1260,26 @@
 	if test "$UNAME_PROCESSOR" = unknown ; then
 	    UNAME_PROCESSOR=powerpc
 	fi
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-	    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		case $UNAME_PROCESSOR in
-		    i386) UNAME_PROCESSOR=x86_64 ;;
-		    powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		esac
+	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		    grep IS_64BIT_ARCH >/dev/null
+		then
+		    case $UNAME_PROCESSOR in
+			i386) UNAME_PROCESSOR=x86_64 ;;
+			powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		    esac
+		fi
 	    fi
+	elif test "$UNAME_PROCESSOR" = i386 ; then
+	    # Avoid executing cc on OS X 10.9, as it ships with a stub
+	    # that puts up a graphical alert prompting to install
+	    # developer tools.  Any system running Mac OS X 10.7 or
+	    # later (Darwin 11 and later) is required to have a 64-bit
+	    # processor. This is not true of the ARM version of Darwin
+	    # that Apple uses in portable devices.
+	    UNAME_PROCESSOR=x86_64
 	fi
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit ;;
@@ -1361,154 +1371,6 @@
 	exit ;;
 esac
 
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-	"4"
-#else
-	""
-#endif
-	); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-	{ echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    c34*)
-	echo c34-convex-bsd
-	exit ;;
-    c38*)
-	echo c38-convex-bsd
-	exit ;;
-    c4*)
-	echo c4-convex-bsd
-	exit ;;
-    esac
-fi
-
 cat >&2 <<EOF
 $0: unable to guess system type
 
diff --git a/config.sub b/config.sub
index 9633db7..d654d03 100755
--- a/config.sub
+++ b/config.sub
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2013 Free Software Foundation, Inc.
+#   Copyright 1992-2014 Free Software Foundation, Inc.
 
-timestamp='2013-08-10'
+timestamp='2014-05-01'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2013 Free Software Foundation, Inc.
+Copyright 1992-2014 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -265,6 +265,7 @@
 	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| k1om \
 	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
@@ -282,8 +283,10 @@
 	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa32r6 | mipsisa32r6el \
 	| mipsisa64 | mipsisa64el \
 	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64r6 | mipsisa64r6el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipsr5900 | mipsr5900el \
@@ -295,8 +298,7 @@
 	| nds32 | nds32le | nds32be \
 	| nios | nios2 | nios2eb | nios2el \
 	| ns16k | ns32k \
-	| open8 \
-	| or1k | or32 \
+	| open8 | or1k | or1knd | or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
@@ -324,7 +326,7 @@
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -381,6 +383,7 @@
 	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| k1om-* \
 	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
@@ -400,8 +403,10 @@
 	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa32r6-* | mipsisa32r6el-* \
 	| mipsisa64-* | mipsisa64el-* \
 	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64r6-* | mipsisa64r6el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 	| mipsr5900-* | mipsr5900el-* \
@@ -413,6 +418,7 @@
 	| nios-* | nios2-* | nios2eb-* | nios2el-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
 	| open8-* \
+	| or1k*-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
@@ -1374,7 +1380,7 @@
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1592,9 +1598,6 @@
 	mips*-*)
 		os=-elf
 		;;
-	or1k-*)
-		os=-elf
-		;;
 	or32-*)
 		os=-coff
 		;;
diff --git a/configure b/configure
index 422ee75..2659fc4 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.3.3.
+# Generated by GNU Autoconf 2.69 for GStreamer 1.3.90.
 #
 # 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.3.3'
-PACKAGE_STRING='GStreamer 1.3.3'
+PACKAGE_VERSION='1.3.90'
+PACKAGE_STRING='GStreamer 1.3.90'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -1638,7 +1638,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.3.3 to adapt to many kinds of systems.
+\`configure' configures GStreamer 1.3.90 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1709,7 +1709,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer 1.3.3:";;
+     short | recursive ) echo "Configuration of GStreamer 1.3.90:";;
    esac
   cat <<\_ACEOF
 
@@ -1891,7 +1891,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer configure 1.3.3
+GStreamer configure 1.3.90
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2664,7 +2664,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.3.3, which was
+It was created by GStreamer $as_me 1.3.90, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3645,7 +3645,7 @@
 
 # Define the identity of the package.
  PACKAGE='gstreamer'
- VERSION='1.3.3'
+ VERSION='1.3.90'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3856,9 +3856,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.3.3 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.3.3 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.3.3 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.3.90 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.3.90 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.3.90 | cut -d'.' -f3)
 
 
 
@@ -3869,7 +3869,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.3.3 | cut -d'.' -f4)
+  NANO=$(echo 1.3.90 | 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 +8527,10 @@
 done
 
 
-  GST_CURRENT=303
+  GST_CURRENT=390
   GST_REVISION=0
-  GST_AGE=303
-  GST_LIBVERSION=303:0:303
+  GST_AGE=390
+  GST_LIBVERSION=390:0:390
 
 
 
@@ -27564,7 +27564,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.3.3, which was
+This file was extended by GStreamer $as_me 1.3.90, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -27630,7 +27630,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.3.3
+GStreamer config.status 1.3.90
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 3c457aa..217f252 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.3.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
+AC_INIT([GStreamer],[1.3.90],[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, 303, 0, 303)
+AS_LIBTOOL(GST, 390, 0, 390)
 
 dnl *** autotools stuff ****
 
diff --git a/docs/gst/gstreamer-docs.sgml b/docs/gst/gstreamer-docs.sgml
index c3b38fb..3a2c7af 100644
--- a/docs/gst/gstreamer-docs.sgml
+++ b/docs/gst/gstreamer-docs.sgml
@@ -117,10 +117,10 @@
 
   <chapter id="gstreamer-device-probing">
     <title>GStreamer Device Discovery and Device Probing</title>
-    <xi:include href="xml/gstdevice.xml" />
     <xi:include href="xml/gstdevicemonitor.xml" />
-    <xi:include href="xml/gstdevicemonitorfactory.xml" />
-    <xi:include href="xml/gstglobaldevicemonitor.xml" />
+    <xi:include href="xml/gstdevice.xml" />
+    <xi:include href="xml/gstdeviceprovider.xml" />
+    <xi:include href="xml/gstdeviceproviderfactory.xml" />
   </chapter>
 
   <chapter id="gstreamer-support">
diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt
index 60f84fe..c5d5bb9 100644
--- a/docs/gst/gstreamer-sections.txt
+++ b/docs/gst/gstreamer-sections.txt
@@ -3353,27 +3353,78 @@
 </SECTION>
 
 <SECTION>
+<FILE>gstdeviceprovider</FILE>
+<TITLE>GstDeviceProvider</TITLE>
+GstDeviceProvider
+GstDeviceProviderClass
+gst_device_provider_can_monitor
+gst_device_provider_class_add_metadata
+gst_device_provider_class_add_static_metadata
+gst_device_provider_class_get_metadata
+gst_device_provider_class_set_metadata
+gst_device_provider_class_set_static_metadata
+gst_device_provider_device_add
+gst_device_provider_device_remove
+gst_device_provider_get_bus
+gst_device_provider_get_devices
+gst_device_provider_get_factory
+gst_device_provider_register
+gst_device_provider_start
+gst_device_provider_stop
+
+<SUBSECTION Standard>
+GstDevicePrivate
+GST_DEVICE_PROVIDER
+GST_DEVICE_PROVIDER_CAST
+GST_DEVICE_PROVIDER_CLASS
+GST_DEVICE_PROVIDER_GET_CLASS
+GST_IS_DEVICE_PROVIDER
+GST_IS_DEVICE_PROVIDER_CLASS
+GST_TYPE_DEVICE_PROVIDER
+gst_device_provider_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstdeviceproviderfactory</FILE>
+<TITLE>GstDeviceProviderFactory</TITLE>
+GstDeviceProviderFactory
+GstDeviceProviderFactoryClass
+gst_device_provider_factory_find
+gst_device_provider_factory_get
+gst_device_provider_factory_get_by_name
+gst_device_provider_factory_get_device_provider_type
+gst_device_provider_factory_get_metadata
+gst_device_provider_factory_get_metadata_keys
+gst_device_provider_factory_has_classes
+gst_device_provider_factory_has_classesv
+gst_device_provider_factory_list_get_device_providers
+
+<SUBSECTION Standard>
+GstDeviceProviderPrivate
+GST_DEVICE_PROVIDER_FACTORY
+GST_DEVICE_PROVIDER_FACTORY_CAST
+GST_DEVICE_PROVIDER_FACTORY_CLASS
+GST_TYPE_DEVICE_PROVIDER_FACTORY
+GST_IS_DEVICE_PROVIDER_FACTORY
+GST_IS_DEVICE_PROVIDER_FACTORY_CLASS
+gst_device_provider_factory_get_type
+</SECTION>
+
+<SECTION>
 <FILE>gstdevicemonitor</FILE>
 <TITLE>GstDeviceMonitor</TITLE>
 GstDeviceMonitor
 GstDeviceMonitorClass
-gst_device_monitor_can_monitor
-gst_device_monitor_class_add_metadata
-gst_device_monitor_class_add_static_metadata
-gst_device_monitor_class_get_metadata
-gst_device_monitor_class_set_metadata
-gst_device_monitor_class_set_static_metadata
-gst_device_monitor_device_add
-gst_device_monitor_device_remove
+gst_device_monitor_new
 gst_device_monitor_get_bus
-gst_device_monitor_get_devices
-gst_device_monitor_get_factory
-gst_device_monitor_register
+gst_device_monitor_add_filter
+gst_device_monitor_remove_filter
 gst_device_monitor_start
 gst_device_monitor_stop
+gst_device_monitor_get_devices
 
 <SUBSECTION Standard>
-GstDevicePrivate
+GstDeviceMonitorPrivate
 GST_DEVICE_MONITOR
 GST_DEVICE_MONITOR_CAST
 GST_DEVICE_MONITOR_CLASS
@@ -3384,56 +3435,3 @@
 gst_device_monitor_get_type
 </SECTION>
 
-<SECTION>
-<FILE>gstdevicemonitorfactory</FILE>
-<TITLE>GstDeviceMonitorFactory</TITLE>
-GstDeviceMonitorFactory
-GstDeviceMonitorFactoryClass
-gst_device_monitor_factory_find
-gst_device_monitor_factory_get
-gst_device_monitor_factory_get_by_name
-gst_device_monitor_factory_get_device_monitor_type
-gst_device_monitor_factory_get_metadata
-gst_device_monitor_factory_get_metadata_keys
-gst_device_monitor_factory_has_classes
-gst_device_monitor_factory_has_classesv
-gst_device_monitor_factory_list_get_device_monitors
-
-<SUBSECTION Standard>
-GstDeviceMonitorPrivate
-GST_DEVICE_MONITOR_FACTORY
-GST_DEVICE_MONITOR_FACTORY_CAST
-GST_DEVICE_MONITOR_FACTORY_CLASS
-GST_TYPE_DEVICE_MONITOR_FACTORY
-GST_IS_DEVICE_MONITOR_FACTORY
-GST_IS_DEVICE_MONITOR_FACTORY_CLASS
-gst_device_monitor_factory_get_type
-</SECTION>
-
-<SECTION>
-<FILE>gstglobaldevicemonitor</FILE>
-<TITLE>GstGlobalDeviceMonitor</TITLE>
-GstGlobalDeviceMonitor
-GstGlobalDeviceMonitorClass
-gst_global_device_monitor_get_bus
-gst_global_device_monitor_get_caps_filter
-gst_global_device_monitor_get_classes_filter
-gst_global_device_monitor_get_devices
-gst_global_device_monitor_new
-gst_global_device_monitor_set_caps_filter
-gst_global_device_monitor_set_classes_filter
-gst_global_device_monitor_start
-gst_global_device_monitor_stop
-
-<SUBSECTION Standard>
-GstGlobalDeviceMonitorPrivate
-GST_GLOBAL_DEVICE_MONITOR
-GST_GLOBAL_DEVICE_MONITOR_CAST
-GST_GLOBAL_DEVICE_MONITOR_CLASS
-GST_GLOBAL_DEVICE_MONITOR_GET_CLASS
-GST_IS_GLOBAL_DEVICE_MONITOR
-GST_IS_GLOBAL_DEVICE_MONITOR_CLASS
-GST_TYPE_GLOBAL_DEVICE_MONITOR
-gst_global_device_monitor_get_type
-</SECTION>
-
diff --git a/docs/gst/html/GstAllocator.html b/docs/gst/html/GstAllocator.html
index 83fb747..42eaea1 100644
--- a/docs/gst/html/GstAllocator.html
+++ b/docs/gst/html/GstAllocator.html
@@ -204,10 +204,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.4.9.2.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="GstAllocator.html" title="GstAllocator"><span class="type">GstAllocator</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when the allocator with <em class="parameter"><code>name</code></em>
-was not
-registered. Use <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a> to release the allocator after usage. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a <a class="link" href="GstAllocator.html" title="GstAllocator"><span class="type">GstAllocator</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when
+the allocator with <em class="parameter"><code>name</code></em>
+was not registered. Use <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a>
+to release the allocator after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstBin.html b/docs/gst/html/GstBin.html
index 95a7660..89ce7dd 100644
--- a/docs/gst/html/GstBin.html
+++ b/docs/gst/html/GstBin.html
@@ -583,8 +583,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.5.8"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> with the given name, or <a href="http://library.gnome.org/devel/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>
+<p> the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> with the given
+name, or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -622,8 +623,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.6.9"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> with the given name, or <a href="http://library.gnome.org/devel/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>
+<p> the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> with the given
+name, or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -690,8 +692,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.8.7"></a><h4>Returns</h4>
-<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>, or <a href="http://library.gnome.org/devel/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>
+<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>,
+or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -719,8 +722,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.9.7"></a><h4>Returns</h4>
-<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>, or <a href="http://library.gnome.org/devel/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>
+<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>,
+or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -748,8 +752,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.10.7"></a><h4>Returns</h4>
-<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>, or <a href="http://library.gnome.org/devel/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>
+<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>,
+or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -780,8 +785,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.11.8"></a><h4>Returns</h4>
-<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>, or <a href="http://library.gnome.org/devel/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>
+<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>,
+or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -809,8 +815,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.12.7"></a><h4>Returns</h4>
-<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>, or <a href="http://library.gnome.org/devel/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>
+<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>,
+or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -848,9 +855,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.13.7"></a><h4>Returns</h4>
-<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> for all elements
-in the bin implementing the given interface, or <a href="http://library.gnome.org/devel/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>
+<p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>
+for all elements in the bin implementing the given interface,
+or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -996,8 +1004,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.6.11.17.6"></a><h4>Returns</h4>
-<p> unlinked pad of the given direction, <a href="http://library.gnome.org/devel/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>
+<p> unlinked pad of the given
+direction, <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstBuffer.html b/docs/gst/html/GstBuffer.html
index d26800c..8e49fdf 100644
--- a/docs/gst/html/GstBuffer.html
+++ b/docs/gst/html/GstBuffer.html
@@ -1101,9 +1101,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.7.8.19.9"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the memory couldn't
-be allocated. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a new <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
+the memory couldn't be allocated. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1319,12 +1319,12 @@
 <tr>
 <td class="parameter_name"><p>offset</p></td>
 <td class="parameter_description"><p> a pointer to the offset. </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>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>maxsize</p></td>
 <td class="parameter_description"><p> a pointer to the maxsize. </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>
+<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>
@@ -1420,12 +1420,12 @@
 <tr>
 <td class="parameter_name"><p>offset</p></td>
 <td class="parameter_description"><p> a pointer to the offset. </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>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>maxsize</p></td>
 <td class="parameter_description"><p> a pointer to the maxsize. </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>
+<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>
@@ -2954,9 +2954,9 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>obuf</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> to be
-replaced. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a pointer to
+a <a class="link" href="GstBuffer.html" title="GstBuffer"><span class="type">GstBuffer</span></a> to be replaced. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>nbuf</p></td>
@@ -3109,9 +3109,10 @@
 <div class="refsect3">
 <a name="id-1.3.7.8.66.6"></a><h4>Returns</h4>
 <p> the metadata for <em class="parameter"><code>api</code></em>
-on <em class="parameter"><code>buffer</code></em>
+on
+<em class="parameter"><code>buffer</code></em>
 . </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -3236,9 +3237,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.7.8.69.7"></a><h4>Returns</h4>
-<p> The next <a class="link" href="gstreamer-GstMeta.html#GstMeta" title="struct GstMeta"><span class="type">GstMeta</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there are
-no more items. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p> The next <a class="link" href="gstreamer-GstMeta.html#GstMeta" title="struct GstMeta"><span class="type">GstMeta</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+when there are no more items. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -3273,8 +3274,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>meta</p></td>
-<td class="parameter_description"><p>a pointer to a <a class="link" href="gstreamer-GstMeta.html#GstMeta" title="struct GstMeta"><span class="type">GstMeta</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a pointer to a <a class="link" href="gstreamer-GstMeta.html#GstMeta" title="struct GstMeta"><span class="type">GstMeta</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>user_data</p></td>
diff --git a/docs/gst/html/GstBufferList.html b/docs/gst/html/GstBufferList.html
index 771f012..754b495 100644
--- a/docs/gst/html/GstBufferList.html
+++ b/docs/gst/html/GstBufferList.html
@@ -541,8 +541,8 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>buffer</p></td>
-<td class="parameter_description"><p>pointer the buffer</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> pointer the buffer. </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>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>idx</p></td>
@@ -652,10 +652,10 @@
 <a name="id-1.3.8.8.15.6"></a><h4>Returns</h4>
 <p> the buffer at <em class="parameter"><code>idx</code></em>
 in <em class="parameter"><code>group</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there
-is no buffer. The buffer remains valid as long as <em class="parameter"><code>list</code></em>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there is no buffer. The buffer remains valid as
+long as <em class="parameter"><code>list</code></em>
 is valid. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/GstBufferPool.html b/docs/gst/html/GstBufferPool.html
index fd3b588..8a51ba6 100644
--- a/docs/gst/html/GstBufferPool.html
+++ b/docs/gst/html/GstBufferPool.html
@@ -560,13 +560,13 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>allocator</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstAllocator.html" title="GstAllocator"><span class="type">GstAllocator</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a <a class="link" href="GstAllocator.html" title="GstAllocator"><span class="type">GstAllocator</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>params</p></td>
-<td class="parameter_description"><p><a class="link" href="GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a></p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> <a class="link" href="GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
diff --git a/docs/gst/html/GstBus.html b/docs/gst/html/GstBus.html
index 0a011a7..30f825e 100644
--- a/docs/gst/html/GstBus.html
+++ b/docs/gst/html/GstBus.html
@@ -533,10 +533,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.7.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> that is on the bus, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
-bus is empty.</p>
+<p> the <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> that is on the
+bus, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the bus is empty.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -562,11 +562,12 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.8.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> that is on the bus, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
-bus is empty. 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 usage.</p>
+<p> the <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> that is on the
+bus, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the bus is empty. 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
+usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -609,14 +610,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.9.6"></a><h4>Returns</h4>
-<p> the next <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> matching <em class="parameter"><code>type</code></em>
-that is on
-the bus, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the bus is empty or there is no message matching
+<p> the next <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> matching
 <em class="parameter"><code>type</code></em>
-. 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 usage.</p>
+that is on the bus, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the bus is empty or there
+is no message matching <em class="parameter"><code>type</code></em>
+. 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 usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -655,12 +656,12 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.10.7"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> that is on the bus after the
-specified timeout or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the bus is empty after the timeout expired.
-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 usage.</p>
+<p> the <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> that is on the
+bus after the specified timeout or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the bus is empty
+after the timeout expired.  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 usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -708,13 +709,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.11.7"></a><h4>Returns</h4>
-<p> a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> matching the filter in <em class="parameter"><code>types</code></em>
-,
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no matching message was found on the bus until the timeout
-expired. 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 usage.</p>
+<p> a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> matching the
+filter in <em class="parameter"><code>types</code></em>
+, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no matching message was found on
+the bus until the timeout expired. 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
+usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1273,10 +1275,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.10.10.24.11"></a><h4>Returns</h4>
-<p> the message that was received, or <a href="http://library.gnome.org/devel/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 usage. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the message that was received,
+or <a href="http://library.gnome.org/devel/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
+usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/GstCaps.html b/docs/gst/html/GstCaps.html
index f349c68..3305b5d 100644
--- a/docs/gst/html/GstCaps.html
+++ b/docs/gst/html/GstCaps.html
@@ -2290,9 +2290,9 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>old_caps</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> to be
-replaced. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a pointer
+to a <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> to be replaced. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>new_caps</p></td>
diff --git a/docs/gst/html/GstCapsFeatures.html b/docs/gst/html/GstCapsFeatures.html
index a4d59eb..abe0f17 100644
--- a/docs/gst/html/GstCapsFeatures.html
+++ b/docs/gst/html/GstCapsFeatures.html
@@ -545,9 +545,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.12.8.12.7"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a> or <a href="http://library.gnome.org/devel/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="GstCapsFeatures.html#gst-caps-features-free" title="gst_caps_features_free ()"><code class="function">gst_caps_features_free()</code></a> after use. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a new <a class="link" href="GstCapsFeatures.html" title="GstCapsFeatures"><span class="type">GstCapsFeatures</span></a> or
+<a href="http://library.gnome.org/devel/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="GstCapsFeatures.html#gst-caps-features-free" title="gst_caps_features_free ()"><code class="function">gst_caps_features_free()</code></a> after use. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 <p class="since">Since 1.2</p>
 </div>
diff --git a/docs/gst/html/GstChildProxy.html b/docs/gst/html/GstChildProxy.html
index 9401406..1c0d65c 100644
--- a/docs/gst/html/GstChildProxy.html
+++ b/docs/gst/html/GstChildProxy.html
@@ -283,10 +283,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.14.11.3.7"></a><h4>Returns</h4>
-<p> the child object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not found. Unref
-after usage.</p>
+<p> the child object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
+not found. Unref after usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -320,10 +320,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.14.11.4.6"></a><h4>Returns</h4>
-<p> the child object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not found (index
-too high). Unref after usage.</p>
+<p> the child object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
+not found (index too high). Unref after usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstClock.html b/docs/gst/html/GstClock.html
index 7d32742..1a5cb3d 100644
--- a/docs/gst/html/GstClock.html
+++ b/docs/gst/html/GstClock.html
@@ -1144,10 +1144,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.15.9.27.6"></a><h4>Returns</h4>
-<p> a master <a class="link" href="GstClock.html" title="GstClock"><span class="type">GstClock</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when this clock is
-not slaved to a master clock. Unref after usage.</p>
+<p> a master <a class="link" href="GstClock.html" title="GstClock"><span class="type">GstClock</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+when this clock is not slaved to a master clock. Unref after
+usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstControlBinding.html b/docs/gst/html/GstControlBinding.html
index 785c237..30d58dd 100644
--- a/docs/gst/html/GstControlBinding.html
+++ b/docs/gst/html/GstControlBinding.html
@@ -239,9 +239,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.18.9.3.6"></a><h4>Returns</h4>
-<p> the GValue of the property at the given time, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
-property isn't controlled.</p>
-<p></p>
+<p> the GValue of the property at the given time,
+or <a href="http://library.gnome.org/devel/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">[nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstDateTime.html b/docs/gst/html/GstDateTime.html
index 587cddf..9d700b3 100644
--- a/docs/gst/html/GstDateTime.html
+++ b/docs/gst/html/GstDateTime.html
@@ -1163,8 +1163,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.20.8.27.7"></a><h4>Returns</h4>
-<p> a newly created <a class="link" href="GstDateTime.html" title="GstDateTime"><span class="type">GstDateTime</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a newly created <a class="link" href="GstDateTime.html" title="GstDateTime"><span class="type">GstDateTime</span></a>,
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1192,10 +1193,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.20.8.28.6"></a><h4>Returns</h4>
-<p> a newly allocated string formatted according to ISO 8601 and
-only including the datetime fields that are valid, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case
-there was an error. The string should be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>.</p>
-<p></p>
+<p> a newly allocated string formatted according
+to ISO 8601 and only including the datetime fields that are
+valid, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case there was an error. The string should
+be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1222,8 +1224,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.20.8.29.7"></a><h4>Returns</h4>
-<p> a newly created <a class="link" href="GstDateTime.html" title="GstDateTime"><span class="type">GstDateTime</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a newly created <a class="link" href="GstDateTime.html" title="GstDateTime"><span class="type">GstDateTime</span></a>,
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1250,8 +1253,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.20.8.30.7"></a><h4>Returns</h4>
-<p> a newly created <a href="http://library.gnome.org/devel/glib/unstable/glib-GDateTime.html#GDateTime"><span class="type">GDateTime</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a newly created <a href="http://library.gnome.org/devel/glib/unstable/glib-GDateTime.html#GDateTime"><span class="type">GDateTime</span></a>, or
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/GstDeviceMonitorFactory.html b/docs/gst/html/GstDeviceMonitorFactory.html
deleted file mode 100644
index 98745b4..0000000
--- a/docs/gst/html/GstDeviceMonitorFactory.html
+++ /dev/null
@@ -1,507 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer 1.0 Core Reference Manual: GstDeviceMonitorFactory</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="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
-<link rel="prev" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">
-<link rel="next" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">
-<meta name="generator" content="GTK-Doc V1.20 (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="10"><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="#GstDeviceMonitorFactory.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
-                  <a href="#GstDeviceMonitorFactory.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="gstreamer-device-probing.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gstreamer-GstDeviceMonitor.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gstreamer-GstGlobalDeviceMonitor.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="GstDeviceMonitorFactory"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="GstDeviceMonitorFactory.top_of_page"></a>GstDeviceMonitorFactory</span></h2>
-<p>GstDeviceMonitorFactory — Create GstDeviceMonitors from a factory</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="returnvalue">GstDeviceMonitorFactory</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-find" title="gst_device_monitor_factory_find ()">gst_device_monitor_factory_find</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="returnvalue">GstDeviceMonitor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get" title="gst_device_monitor_factory_get ()">gst_device_monitor_factory_get</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="returnvalue">GstDeviceMonitor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-by-name" title="gst_device_monitor_factory_get_by_name ()">gst_device_monitor_factory_get_by_name</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-device-monitor-type" title="gst_device_monitor_factory_get_device_monitor_type ()">gst_device_monitor_factory_get_device_monitor_type</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata" title="gst_device_monitor_factory_get_metadata ()">gst_device_monitor_factory_get_metadata</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata-keys" title="gst_device_monitor_factory_get_metadata_keys ()">gst_device_monitor_factory_get_metadata_keys</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classes" title="gst_device_monitor_factory_has_classes ()">gst_device_monitor_factory_has_classes</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classesv" title="gst_device_monitor_factory_has_classesv ()">gst_device_monitor_factory_has_classesv</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-list-get-device-monitors" title="gst_device_monitor_factory_list_get_device_monitors ()">gst_device_monitor_factory_list_get_device_monitors</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.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="GstDeviceMonitorFactory.html#GstDeviceMonitorFactory-struct" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="GstDeviceMonitorFactory.html#GstDeviceMonitorFactoryClass" title="GstDeviceMonitorFactoryClass">GstDeviceMonitorFactoryClass</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a class="link" href="GstObject.html" title="GstObject">GstObject</a>
-            <span class="lineart">╰──</span> <a class="link" href="GstPluginFeature.html" title="GstPluginFeature">GstPluginFeature</a>
-                <span class="lineart">╰──</span> GstDeviceMonitorFactory
-</pre>
-</div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;gst/gst.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.description"></a><h2>Description</h2>
-<p><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> is used to create instances of device monitors. A
-GstDeviceMonitorfactory can be added to a <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> as it is also a
-<a class="link" href="GstPluginFeature.html" title="GstPluginFeature"><span class="type">GstPluginFeature</span></a>.</p>
-<p>Use the <a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-find" title="gst_device_monitor_factory_find ()"><code class="function">gst_device_monitor_factory_find()</code></a> and <code class="function">gst_device_monitor_factory_create()</code>
-functions to create device monitor instances or use <code class="function">gst_device_monitor_factory_make()</code> as a
-convenient shortcut.</p>
-</div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-find"></a><h3>gst_device_monitor_factory_find ()</h3>
-<pre class="programlisting"><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="returnvalue">GstDeviceMonitorFactory</span></a> *
-gst_device_monitor_factory_find (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
-<p>Search for an device monitor factory of the given name. Refs the returned
-device monitor factory; caller is responsible for unreffing.</p>
-<div class="refsect3">
-<a name="id-1.4.4.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>name of factory to find</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.2.6"></a><h4>Returns</h4>
-<p> <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> if found, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-get"></a><h3>gst_device_monitor_factory_get ()</h3>
-<pre class="programlisting"><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="returnvalue">GstDeviceMonitor</span></a> *
-gst_device_monitor_factory_get (<em class="parameter"><code><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> *factory</code></em>);</pre>
-<p>Returns the device monitor of the type defined by the given device
-monitorfactory.</p>
-<div class="refsect3">
-<a name="id-1.4.4.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>factory</p></td>
-<td class="parameter_description"><p>factory to instantiate</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.3.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
-device monitor couldn't be created. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-get-by-name"></a><h3>gst_device_monitor_factory_get_by_name ()</h3>
-<pre class="programlisting"><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="returnvalue">GstDeviceMonitor</span></a> *
-gst_device_monitor_factory_get_by_name
-                               (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factoryname</code></em>);</pre>
-<p>Returns the device monitor of the type defined by the given device
-monitor factory.</p>
-<div class="refsect3">
-<a name="id-1.4.4.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>factoryname</p></td>
-<td class="parameter_description"><p>a named factory to instantiate</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.4.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if unable to
-create device monitor. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-get-device-monitor-type"></a><h3>gst_device_monitor_factory_get_device_monitor_type ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
-gst_device_monitor_factory_get_device_monitor_type
-                               (<em class="parameter"><code><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> *factory</code></em>);</pre>
-<p>Get the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for device monitors managed by this factory. The type can
-only be retrieved if the device monitor factory is loaded, which can be
-assured with <a class="link" href="GstPluginFeature.html#gst-plugin-feature-load" title="gst_plugin_feature_load ()"><code class="function">gst_plugin_feature_load()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.4.4.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>factory</p></td>
-<td class="parameter_description"><p>factory to get managed <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> from</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.5.6"></a><h4>Returns</h4>
-<p> the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for device monitors managed by this factory or 0 if
-the factory is not loaded.</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-get-metadata"></a><h3>gst_device_monitor_factory_get_metadata ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_device_monitor_factory_get_metadata
-                               (<em class="parameter"><code><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> *factory</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);</pre>
-<p>Get the metadata on <em class="parameter"><code>factory</code></em>
- with <em class="parameter"><code>key</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.4.4.8.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>factory</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>a key</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.6.6"></a><h4>Returns</h4>
-<p> the metadata with <em class="parameter"><code>key</code></em>
-on <em class="parameter"><code>factory</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there was no
-metadata with the given <em class="parameter"><code>key</code></em>
-.</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-get-metadata-keys"></a><h3>gst_device_monitor_factory_get_metadata_keys ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **
-gst_device_monitor_factory_get_metadata_keys
-                               (<em class="parameter"><code><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> *factory</code></em>);</pre>
-<p>Get the available keys for the metadata on <em class="parameter"><code>factory</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.4.4.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>factory</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.7.6"></a><h4>Returns</h4>
-<p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of key strings, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there is no
-metadata. Free with <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</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>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-has-classes"></a><h3>gst_device_monitor_factory_has_classes ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_device_monitor_factory_has_classes
-                               (<em class="parameter"><code><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> *factory</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classes</code></em>);</pre>
-<p>Check if <em class="parameter"><code>factory</code></em>
- matches all of the given <em class="parameter"><code>classes</code></em>
-</p>
-<div class="refsect3">
-<a name="id-1.4.4.8.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>factory</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>classes</p></td>
-<td class="parameter_description"><p>a "/" separate list of klasses to match, only match if all classes
-are matched</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.8.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>factory</code></em>
-matches.</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-has-classesv"></a><h3>gst_device_monitor_factory_has_classesv ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_device_monitor_factory_has_classesv
-                               (<em class="parameter"><code><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> *factory</code></em>,
-                                <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **classes</code></em>);</pre>
-<p>Check if <em class="parameter"><code>factory</code></em>
- matches all of the given classes</p>
-<div class="refsect3">
-<a name="id-1.4.4.8.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>factory</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>classes</p></td>
-<td class="parameter_description"><p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array of
-klasses to match, only match if all classes are matched. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.9.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>factory</code></em>
-matches.</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-factory-list-get-device-monitors"></a><h3>gst_device_monitor_factory_list_get_device_monitors ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
-gst_device_monitor_factory_list_get_device_monitors
-                               (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classes</code></em>,
-                                <em class="parameter"><code><a class="link" href="GstPluginFeature.html#GstRank" title="enum GstRank"><span class="type">GstRank</span></a> minrank</code></em>);</pre>
-<p>Get a list of factories that match all of the given <em class="parameter"><code>classes</code></em>
-. Only
-device monitors with a rank greater or equal to <em class="parameter"><code>minrank</code></em>
- will be
-returned.  The list of factories is returned by decreasing rank.</p>
-<div class="refsect3">
-<a name="id-1.4.4.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>classes</p></td>
-<td class="parameter_description"><p>a "/" separate list of klasses to match, only match if all classes
-are matched</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>minrank</p></td>
-<td class="parameter_description"><p>Minimum rank</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.4.8.10.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
-<a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> device monitors. Use <a class="link" href="GstPluginFeature.html#gst-plugin-feature-list-free" title="gst_plugin_feature_list_free ()"><code class="function">gst_plugin_feature_list_free()</code></a> after
-usage. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DeviceMonitorFactory]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstDeviceMonitorFactory-struct"></a><h3>GstDeviceMonitorFactory</h3>
-<pre class="programlisting">typedef struct _GstDeviceMonitorFactory GstDeviceMonitorFactory;</pre>
-<p>The opaque <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> data structure.</p>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstDeviceMonitorFactoryClass"></a><h3>GstDeviceMonitorFactoryClass</h3>
-<pre class="programlisting">typedef struct _GstDeviceMonitorFactoryClass GstDeviceMonitorFactoryClass;</pre>
-<p>The opaque <a class="link" href="GstDeviceMonitorFactory.html#GstDeviceMonitorFactoryClass" title="GstDeviceMonitorFactoryClass"><span class="type">GstDeviceMonitorFactoryClass</span></a> data structure.</p>
-<p class="since">Since 1.4</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="GstDeviceMonitorFactory.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a>, <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a>, <a class="link" href="GstPluginFeature.html" title="GstPluginFeature"><span class="type">GstPluginFeature</span></a>, <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a>.</p>
-</div>
-</div>
-<div class="footer">
-<hr>
-          Generated by GTK-Doc V1.20</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/gst/html/GstDeviceProviderFactory.html b/docs/gst/html/GstDeviceProviderFactory.html
new file mode 100644
index 0000000..b6a66f8
--- /dev/null
+++ b/docs/gst/html/GstDeviceProviderFactory.html
@@ -0,0 +1,498 @@
+<!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: GstDeviceProviderFactory</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="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
+<link rel="prev" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">
+<link rel="next" href="gstreamer-support.html" title="GStreamer Core Support">
+<meta name="generator" content="GTK-Doc V1.20 (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="10"><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="#GstDeviceProviderFactory.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
+                  <a href="#GstDeviceProviderFactory.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gstreamer-device-probing.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gstreamer-GstDeviceProvider.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gstreamer-support.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="GstDeviceProviderFactory"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GstDeviceProviderFactory.top_of_page"></a>GstDeviceProviderFactory</span></h2>
+<p>GstDeviceProviderFactory — Create GstDeviceProviders from a factory</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="returnvalue">GstDeviceProviderFactory</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-find" title="gst_device_provider_factory_find ()">gst_device_provider_factory_find</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="returnvalue">GstDeviceProvider</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get" title="gst_device_provider_factory_get ()">gst_device_provider_factory_get</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="returnvalue">GstDeviceProvider</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-by-name" title="gst_device_provider_factory_get_by_name ()">gst_device_provider_factory_get_by_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-device-provider-type" title="gst_device_provider_factory_get_device_provider_type ()">gst_device_provider_factory_get_device_provider_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata" title="gst_device_provider_factory_get_metadata ()">gst_device_provider_factory_get_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata-keys" title="gst_device_provider_factory_get_metadata_keys ()">gst_device_provider_factory_get_metadata_keys</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-has-classes" title="gst_device_provider_factory_has_classes ()">gst_device_provider_factory_has_classes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-has-classesv" title="gst_device_provider_factory_has_classesv ()">gst_device_provider_factory_has_classesv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-list-get-device-providers" title="gst_device_provider_factory_list_get_device_providers ()">gst_device_provider_factory_list_get_device_providers</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.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="GstDeviceProviderFactory.html#GstDeviceProviderFactory-struct" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="GstDeviceProviderFactory.html#GstDeviceProviderFactoryClass" title="GstDeviceProviderFactoryClass">GstDeviceProviderFactoryClass</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a class="link" href="GstObject.html" title="GstObject">GstObject</a>
+            <span class="lineart">╰──</span> <a class="link" href="GstPluginFeature.html" title="GstPluginFeature">GstPluginFeature</a>
+                <span class="lineart">╰──</span> GstDeviceProviderFactory
+</pre>
+</div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/gst.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.description"></a><h2>Description</h2>
+<p><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> is used to create instances of device providers. A
+GstDeviceProviderfactory can be added to a <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> as it is also a
+<a class="link" href="GstPluginFeature.html" title="GstPluginFeature"><span class="type">GstPluginFeature</span></a>.</p>
+<p>Use the <a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-find" title="gst_device_provider_factory_find ()"><code class="function">gst_device_provider_factory_find()</code></a> and
+<code class="function">gst_device_provider_factory_create()</code> functions to create device
+provider instances or use <code class="function">gst_device_provider_factory_make()</code> as a
+convenient shortcut.</p>
+</div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-device-provider-factory-find"></a><h3>gst_device_provider_factory_find ()</h3>
+<pre class="programlisting"><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="returnvalue">GstDeviceProviderFactory</span></a> *
+gst_device_provider_factory_find (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Search for an device provider factory of the given name. Refs the returned
+device provider factory; caller is responsible for unreffing.</p>
+<div class="refsect3">
+<a name="id-1.4.5.8.2.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>name of factory to find</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.2.6"></a><h4>Returns</h4>
+<p> <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> if
+found, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-get"></a><h3>gst_device_provider_factory_get ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="returnvalue">GstDeviceProvider</span></a> *
+gst_device_provider_factory_get (<em class="parameter"><code><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> *factory</code></em>);</pre>
+<p>Returns the device provider of the type defined by the given device
+providerfactory.</p>
+<div class="refsect3">
+<a name="id-1.4.5.8.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>factory</p></td>
+<td class="parameter_description"><p>factory to instantiate</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.3.6"></a><h4>Returns</h4>
+<p> the <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+if the device provider couldn't be created. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-get-by-name"></a><h3>gst_device_provider_factory_get_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="returnvalue">GstDeviceProvider</span></a> *
+gst_device_provider_factory_get_by_name
+                               (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factoryname</code></em>);</pre>
+<p>Returns the device provider of the type defined by the given device
+provider factory.</p>
+<div class="refsect3">
+<a name="id-1.4.5.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>factoryname</p></td>
+<td class="parameter_description"><p>a named factory to instantiate</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.4.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+if unable to create device provider. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-get-device-provider-type"></a><h3>gst_device_provider_factory_get_device_provider_type ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
+gst_device_provider_factory_get_device_provider_type
+                               (<em class="parameter"><code><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> *factory</code></em>);</pre>
+<p>Get the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for device providers managed by this factory. The type can
+only be retrieved if the device provider factory is loaded, which can be
+assured with <a class="link" href="GstPluginFeature.html#gst-plugin-feature-load" title="gst_plugin_feature_load ()"><code class="function">gst_plugin_feature_load()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.4.5.8.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>factory</p></td>
+<td class="parameter_description"><p>factory to get managed <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> from</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.5.6"></a><h4>Returns</h4>
+<p> the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for device providers managed by this factory or 0 if
+the factory is not loaded.</p>
+<p></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-get-metadata"></a><h3>gst_device_provider_factory_get_metadata ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_device_provider_factory_get_metadata
+                               (<em class="parameter"><code><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> *factory</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);</pre>
+<p>Get the metadata on <em class="parameter"><code>factory</code></em>
+ with <em class="parameter"><code>key</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.4.5.8.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>factory</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>a key</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.6.6"></a><h4>Returns</h4>
+<p> the metadata with <em class="parameter"><code>key</code></em>
+on <em class="parameter"><code>factory</code></em>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+when there was no metadata with the given <em class="parameter"><code>key</code></em>
+. </p>
+<p><span class="annotation">[nullable]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-get-metadata-keys"></a><h3>gst_device_provider_factory_get_metadata_keys ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> **
+gst_device_provider_factory_get_metadata_keys
+                               (<em class="parameter"><code><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> *factory</code></em>);</pre>
+<p>Get the available keys for the metadata on <em class="parameter"><code>factory</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.4.5.8.7.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>factory</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.7.6"></a><h4>Returns</h4>
+<p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of key strings, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there is no
+metadata. Free with <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</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>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][nullable]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-has-classes"></a><h3>gst_device_provider_factory_has_classes ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_device_provider_factory_has_classes
+                               (<em class="parameter"><code><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> *factory</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classes</code></em>);</pre>
+<p>Check if <em class="parameter"><code>factory</code></em>
+ matches all of the given <em class="parameter"><code>classes</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.4.5.8.8.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>factory</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>classes</p></td>
+<td class="parameter_description"><p> a "/" separate list of klasses to match, only match
+if all classes are matched. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.8.6"></a><h4>Returns</h4>
+<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>factory</code></em>
+matches or if <em class="parameter"><code>classes</code></em>
+is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+<p></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-has-classesv"></a><h3>gst_device_provider_factory_has_classesv ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_device_provider_factory_has_classesv
+                               (<em class="parameter"><code><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> *factory</code></em>,
+                                <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **classes</code></em>);</pre>
+<p>Check if <em class="parameter"><code>factory</code></em>
+ matches all of the given classes</p>
+<div class="refsect3">
+<a name="id-1.4.5.8.9.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>factory</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>classes</p></td>
+<td class="parameter_description"><p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> terminated array
+of klasses to match, only match if all classes are matched. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<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.4.5.8.9.6"></a><h4>Returns</h4>
+<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>factory</code></em>
+matches.</p>
+<p></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-factory-list-get-device-providers"></a><h3>gst_device_provider_factory_list_get_device_providers ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_device_provider_factory_list_get_device_providers
+                               (<em class="parameter"><code><a class="link" href="GstPluginFeature.html#GstRank" title="enum GstRank"><span class="type">GstRank</span></a> minrank</code></em>);</pre>
+<p>Get a list of factories with a rank greater or equal to <em class="parameter"><code>minrank</code></em>
+.
+The list of factories is returned by decreasing rank.</p>
+<div class="refsect3">
+<a name="id-1.4.5.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>minrank</p></td>
+<td class="parameter_description"><p>Minimum rank</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.5.8.10.6"></a><h4>Returns</h4>
+<p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> device providers. Use
+<a class="link" href="GstPluginFeature.html#gst-plugin-feature-list-free" title="gst_plugin_feature_list_free ()"><code class="function">gst_plugin_feature_list_free()</code></a> after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.DeviceProviderFactory]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstDeviceProviderFactory-struct"></a><h3>GstDeviceProviderFactory</h3>
+<pre class="programlisting">typedef struct _GstDeviceProviderFactory GstDeviceProviderFactory;</pre>
+<p>The opaque <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> data structure.</p>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDeviceProviderFactoryClass"></a><h3>GstDeviceProviderFactoryClass</h3>
+<pre class="programlisting">typedef struct _GstDeviceProviderFactoryClass GstDeviceProviderFactoryClass;</pre>
+<p>The opaque <a class="link" href="GstDeviceProviderFactory.html#GstDeviceProviderFactoryClass" title="GstDeviceProviderFactoryClass"><span class="type">GstDeviceProviderFactoryClass</span></a> data structure.</p>
+<p class="since">Since 1.4</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GstDeviceProviderFactory.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a>, <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a>, <a class="link" href="GstPluginFeature.html" title="GstPluginFeature"><span class="type">GstPluginFeature</span></a>, <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a>.</p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/gst/html/GstElement.html b/docs/gst/html/GstElement.html
index f6f3e32..2a148b4 100644
--- a/docs/gst/html/GstElement.html
+++ b/docs/gst/html/GstElement.html
@@ -1466,9 +1466,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.21.10.24.7"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a> with the given name, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-if none was found. No unreferencing is necessary. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p> the <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a> with the
+given name, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none was found. No unreferencing is
+necessary. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1816,9 +1817,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.21.10.32.7"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> to which a link can be made, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-if one cannot be found. <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</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>
+<p> the <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> to which a link
+can be made, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if one cannot be found. <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1857,9 +1859,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.21.10.33.6"></a><h4>Returns</h4>
-<p> a compatible <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none
-was found. No unreferencing is necessary. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p> a compatible <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a>,
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none was found. No unreferencing is necessary. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1897,9 +1899,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.21.10.34.7"></a><h4>Returns</h4>
-<p> requested <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> if found, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
-Release 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>
+<p> requested <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> if found,
+otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.  Release after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1935,10 +1937,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.21.10.35.6"></a><h4>Returns</h4>
-<p> the requested <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> if found, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
-unref after usage.</p>
+<p> the requested <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> if
+found, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.  unref after usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1989,9 +1991,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.21.10.36.7"></a><h4>Returns</h4>
-<p> requested <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> if found, otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
-Release 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>
+<p> requested <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> if found,
+otherwise <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.  Release after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -2976,8 +2978,9 @@
 <div class="refsect3">
 <a name="id-1.3.21.10.62.6"></a><h4>Returns</h4>
 <p> the name of <em class="parameter"><code>elem</code></em>
-. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage. MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>
+after usage. MT safe. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -3131,10 +3134,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.21.10.67.7"></a><h4>Returns</h4>
-<p> the GstClock provided by the element or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-if no clock could be provided.  Unref after usage.</p>
+<p> the GstClock provided by the
+element or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no clock could be provided.  Unref after usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstElementFactory.html b/docs/gst/html/GstElementFactory.html
index 1b2576e..ddb0383 100644
--- a/docs/gst/html/GstElementFactory.html
+++ b/docs/gst/html/GstElementFactory.html
@@ -436,8 +436,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.22.8.3.6"></a><h4>Returns</h4>
-<p> <a class="link" href="GstElementFactory.html" title="GstElementFactory"><span class="type">GstElementFactory</span></a> if found, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> <a class="link" href="GstElementFactory.html" title="GstElementFactory"><span class="type">GstElementFactory</span></a> if found,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -505,10 +506,10 @@
 <a name="id-1.3.22.8.5.6"></a><h4>Returns</h4>
 <p> the metadata with <em class="parameter"><code>key</code></em>
 on <em class="parameter"><code>factory</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there was no
-metadata with the given <em class="parameter"><code>key</code></em>
-.</p>
-<p></p>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+when there was no metadata with the given <em class="parameter"><code>key</code></em>
+. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -537,7 +538,7 @@
 <a name="id-1.3.22.8.6.6"></a><h4>Returns</h4>
 <p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of key strings, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there is no
 metadata. Free with <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</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>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></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> utf8][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -698,9 +699,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.22.8.11.6"></a><h4>Returns</h4>
-<p> new <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the element couldn't
-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>
+<p> new <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+if the element couldn't 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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -738,8 +739,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.22.8.12.6"></a><h4>Returns</h4>
-<p> new <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if unable to create element. </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>
+<p> new <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+if unable to create element. </p>
+<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstEvent.html b/docs/gst/html/GstEvent.html
index caaead4..8f53e02 100644
--- a/docs/gst/html/GstEvent.html
+++ b/docs/gst/html/GstEvent.html
@@ -1036,9 +1036,9 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>old_event</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a>
-to be replaced. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a
+pointer to a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> to be replaced. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>new_event</p></td>
@@ -1103,9 +1103,9 @@
 </colgroup>
 <tbody><tr>
 <td class="parameter_name"><p>old_event</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a>
-to be stolen. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a
+pointer to a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> to be stolen. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr></tbody>
 </table></div>
 </div>
@@ -1140,9 +1140,9 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>old_event</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a>
-to be stolen. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a
+pointer to a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> to be stolen. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>new_event</p></td>
diff --git a/docs/gst/html/GstGhostPad.html b/docs/gst/html/GstGhostPad.html
index 3ba1110..c1c9ea7 100644
--- a/docs/gst/html/GstGhostPad.html
+++ b/docs/gst/html/GstGhostPad.html
@@ -241,8 +241,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.26.9.2.7"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error. </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>
+<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error. </p>
+<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -279,8 +280,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.26.9.3.7"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -324,8 +326,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.26.9.4.7"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -363,8 +366,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.26.9.5.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -431,9 +435,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.26.9.7.6"></a><h4>Returns</h4>
-<p> the target <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the ghostpad
-has no target set. Unref target pad 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>
+<p> the target <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, can be
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the ghostpad has no target set. Unref target pad after
+usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -592,9 +597,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.26.9.11.7"></a><h4>Returns</h4>
-<p> the target <a class="link" href="GstGhostPad.html#GstProxyPad"><span class="type">GstProxyPad</span></a>, can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
-Unref target pad 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>
+<p> the target <a class="link" href="GstGhostPad.html#GstProxyPad"><span class="type">GstProxyPad</span></a>, can
+be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.  Unref target pad after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -631,9 +636,8 @@
 <div class="refsect3">
 <a name="id-1.3.26.9.12.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>pad</code></em>
-has no parent. Unref each
-returned pad with <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a>.</p>
-<p></p>
+has no parent. Unref each returned pad with <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a>. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstMemory.html b/docs/gst/html/GstMemory.html
index 3dbe344..6fc7e5f 100644
--- a/docs/gst/html/GstMemory.html
+++ b/docs/gst/html/GstMemory.html
@@ -1105,10 +1105,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.28.8.27.7"></a><h4>Returns</h4>
-<p> a <a class="link" href="GstMemory.html" title="GstMemory"><span class="type">GstMemory</span></a> object mapped with <em class="parameter"><code>flags</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when
-a mapping is not possible. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a <a class="link" href="GstMemory.html" title="GstMemory"><span class="type">GstMemory</span></a> object mapped
+with <em class="parameter"><code>flags</code></em>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when a mapping is not possible. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstMessage.html b/docs/gst/html/GstMessage.html
index 5c7da8e..637c1f0 100644
--- a/docs/gst/html/GstMessage.html
+++ b/docs/gst/html/GstMessage.html
@@ -1277,9 +1277,9 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>old_message</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a>
-to be replaced. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a
+pointer to a <a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> to be replaced. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>new_message</p></td>
@@ -2516,8 +2516,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>structure</p></td>
-<td class="parameter_description"><p> The structure for the message. The message
-will take ownership of the structure. </p></td>
+<td class="parameter_description"><p> The structure for the
+message. The message will take ownership of the structure. </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>
@@ -2561,9 +2561,9 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>structure</p></td>
-<td class="parameter_description"><p> the structure for the message. The message
-will take ownership of the structure. </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>
+<td class="parameter_description"><p> the structure for the
+message. The message will take ownership of the structure. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -4200,7 +4200,7 @@
 gst_message_new_device_added (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
                               <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
 <p>Creates a new device-added message. The device-added message is produced by
-<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> or a <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a>. They announce the appearance
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> or a <span class="type">GstlDeviceMonitor</span>. They announce the appearance
 of monitored devices.</p>
 <div class="refsect3">
 <a name="id-1.3.29.8.85.5"></a><h4>Parameters</h4>
@@ -4238,7 +4238,7 @@
 gst_message_new_device_removed (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *src</code></em>,
                                 <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
 <p>Creates a new device-removed message. The device-removed message is produced
-by <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> or a <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a>. They announce the
+by <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> or a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a>. They announce the
 disappearance of monitored devices.</p>
 <div class="refsect3">
 <a name="id-1.3.29.8.86.5"></a><h4>Parameters</h4>
@@ -4276,7 +4276,7 @@
 gst_message_parse_device_added (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
                                 <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> **device</code></em>);</pre>
 <p>Parses a device-added message. The device-added message is produced by
-<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> or a <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a>. It announces the appearance
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> or a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a>. It announces the appearance
 of monitored devices.</p>
 <div class="refsect3">
 <a name="id-1.3.29.8.87.5"></a><h4>Parameters</h4>
@@ -4310,7 +4310,7 @@
 gst_message_parse_device_removed (<em class="parameter"><code><a class="link" href="GstMessage.html" title="GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
                                   <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> **device</code></em>);</pre>
 <p>Parses a device-removed message. The device-removed message is produced by
-<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> or a <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a>. It announces the
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> or a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a>. It announces the
 disappearance of monitored devices.</p>
 <div class="refsect3">
 <a name="id-1.3.29.8.88.5"></a><h4>Parameters</h4>
@@ -4682,7 +4682,7 @@
 <td class="enum_member_name"><p><a name="GST-MESSAGE-DEVICE-ADDED:CAPS"></a>GST_MESSAGE_DEVICE_ADDED</p></td>
 <td class="enum_member_description">
 <p>Message indicating a <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> was added to
-    a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> (Since 1.4)</p>
+    a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> (Since 1.4)</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -4690,7 +4690,7 @@
 <td class="enum_member_name"><p><a name="GST-MESSAGE-DEVICE-REMOVED:CAPS"></a>GST_MESSAGE_DEVICE_REMOVED</p></td>
 <td class="enum_member_description">
 <p>Message indicating a <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> was removed
-    from a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> (Since 1.4)</p>
+    from a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> (Since 1.4)</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
diff --git a/docs/gst/html/GstObject.html b/docs/gst/html/GstObject.html
index d3dc706..e04f559 100644
--- a/docs/gst/html/GstObject.html
+++ b/docs/gst/html/GstObject.html
@@ -804,8 +804,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>new name of object</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> new name of object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -849,10 +849,11 @@
 <div class="refsect3">
 <a name="id-1.3.32.10.15.7"></a><h4>Returns</h4>
 <p> the name of <em class="parameter"><code>object</code></em>
-. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.</p>
+. <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>
+after usage.</p>
 <p>MT safe. This function grabs and releases <em class="parameter"><code>object</code></em>
 's LOCK. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -925,11 +926,12 @@
 <div class="refsect3">
 <a name="id-1.3.32.10.17.6"></a><h4>Returns</h4>
 <p> parent of <em class="parameter"><code>object</code></em>
-, this can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>object</code></em>
+, this can be
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>object</code></em>
 has no parent. unref after usage.</p>
 <p>MT safe. Grabs and releases <em class="parameter"><code>object</code></em>
 's LOCK. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1253,14 +1255,14 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>oldobj</p></td>
-<td class="parameter_description"><p> pointer to a place of a <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> to
-replace. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a place of
+a <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> to replace. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>newobj</p></td>
 <td class="parameter_description"><p> a new <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</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>
+<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>
 </tbody>
 </table></div>
@@ -1551,10 +1553,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.32.10.34.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="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
-the property is not controlled. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<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="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the property is not controlled. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1630,9 +1632,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.32.10.36.6"></a><h4>Returns</h4>
-<p> the GValue of the property at the given time, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
-property isn't controlled.</p>
-<p></p>
+<p> the GValue of the property at the given time,
+or <a href="http://library.gnome.org/devel/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">[nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstPad.html b/docs/gst/html/GstPad.html
index 15425b1..a7ffb8b 100644
--- a/docs/gst/html/GstPad.html
+++ b/docs/gst/html/GstPad.html
@@ -1701,6 +1701,11 @@
 </tr></tbody>
 </table></div>
 </div>
+<div class="refsect3">
+<a name="id-1.3.33.10.11.7"></a><h4>Returns</h4>
+<p> the parent. </p>
+<p><span class="annotation">[nullable]</span></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1728,10 +1733,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.12.6"></a><h4>Returns</h4>
-<p> the parent of the pad. The caller has a
-reference on the parent, so unref when you're finished with it.</p>
+<p> the parent of the pad. The
+caller has a reference on the parent, so unref when you're finished
+with it.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1758,10 +1764,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.13.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a> from which this pad was
-instantiated, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this pad has no template. Unref 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>
+<p> the <a class="link" href="GstPadTemplate.html" title="GstPadTemplate"><span class="type">GstPadTemplate</span></a> from which
+this pad was instantiated, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if this pad has no
+template. Unref after usage. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1981,11 +1987,12 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.19.7"></a><h4>Returns</h4>
-<p> the allowed <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> of the pad link. Unref the
-caps when you no longer need it. This function returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when <em class="parameter"><code>pad</code></em>
+<p> the allowed <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> of the
+pad link. Unref the caps when you no longer need it. This
+function returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when <em class="parameter"><code>pad</code></em>
 has no peer.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -2171,12 +2178,13 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.25.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> of type <em class="parameter"><code>event_type</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when no
-event of <em class="parameter"><code>event_type</code></em>
-was on <em class="parameter"><code>pad</code></em>
+<p> a <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a> of type
+<em class="parameter"><code>event_type</code></em>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when no event of <em class="parameter"><code>event_type</code></em>
+was on
+<em class="parameter"><code>pad</code></em>
 . Unref 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>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -2211,8 +2219,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>event</p></td>
-<td class="parameter_description"><p>a sticky <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a>.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a sticky <a class="link" href="GstEvent.html" title="GstEvent"><span class="type">GstEvent</span></a>. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>user_data</p></td>
@@ -2713,8 +2721,8 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>the name of the new pad.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the name of the new 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>
 <tr>
 <td class="parameter_name"><p>direction</p></td>
@@ -2726,9 +2734,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.49.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error.</p>
+<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error.</p>
 <p>MT safe. </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>
+<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -2757,16 +2766,17 @@
 </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_annotations"> </td>
+<td class="parameter_description"><p> the name of the element. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.50.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error. </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>
+<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error. </p>
+<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -2803,8 +2813,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.51.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error. </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>
+<p> a new <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error. </p>
+<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -2913,12 +2924,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </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>buffer</p></td>
@@ -3041,12 +3052,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </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>list</p></td>
@@ -3293,12 +3304,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </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>offset</p></td>
@@ -3425,12 +3436,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </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>event</p></td>
@@ -3552,12 +3563,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </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>peer</p></td>
@@ -3671,12 +3682,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -5144,12 +5155,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </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>query</p></td>
@@ -5263,12 +5274,12 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>parent</p></td>
-<td class="parameter_description"><p>the parent of <em class="parameter"><code>pad</code></em>
-. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a> flag is set,
-<em class="parameter"><code>parent</code></em>
-is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid during the
-execution of this function.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> the parent of <em class="parameter"><code>pad</code></em>
+. If the <a class="link" href="GstPad.html#GST-PAD-FLAG-NEED-PARENT:CAPS"><span class="type">GST_PAD_FLAG_NEED_PARENT</span></a>
+flag is set, <em class="parameter"><code>parent</code></em>
+is guaranteed to be not-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and remain valid
+during the execution of this function. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -5308,10 +5319,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.108.8"></a><h4>Returns</h4>
-<p> a new <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when the
-pad does not have an iterator function configured. Use
-<a class="link" href="gstreamer-GstIterator.html#gst-iterator-free" title="gst_iterator_free ()"><code class="function">gst_iterator_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>
+<p> a new <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when the pad does not have an iterator function
+configured. Use <a class="link" href="gstreamer-GstIterator.html#gst-iterator-free" title="gst_iterator_free ()"><code class="function">gst_iterator_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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -5352,9 +5363,8 @@
 <div class="refsect3">
 <a name="id-1.3.33.10.109.7"></a><h4>Returns</h4>
 <p> a <a class="link" href="gstreamer-GstIterator.html#GstIterator" title="struct GstIterator"><span class="type">GstIterator</span></a> of <a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>pad</code></em>
-has no parent. Unref each
-returned pad with <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a>.</p>
-<p></p>
+has no parent. Unref each returned pad with <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a>. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -5647,10 +5657,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.33.10.115.8"></a><h4>Returns</h4>
-<p> a newly-allocated copy of the stream-id for <em class="parameter"><code>pad</code></em>
-, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> the returned string when no longer needed.</p>
-<p></p>
+<p> a newly-allocated copy of the stream-id for
+<em class="parameter"><code>pad</code></em>
+, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.  <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> the returned string when no longer
+needed. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 <p class="since">Since 1.2</p>
 </div>
@@ -7939,10 +7950,10 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> <em class="structfield"><code><a name="GstPadProbeInfo.data"></a>data</code></em>;</p></td>
-<td class="struct_member_description"><p>type specific data, check the <em class="parameter"><code>type</code></em>
-field to know the datatype.
-This field can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
-<td class="struct_member_annotations"> </td>
+<td class="struct_member_description"><p> type specific data, check the <em class="parameter"><code>type</code></em>
+field to know the
+datatype.  This field can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p></td>
+<td class="struct_member_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="struct_member_name"><p><span class="type">guint64</span> <em class="structfield"><code><a name="GstPadProbeInfo.offset"></a>offset</code></em>;</p></td>
diff --git a/docs/gst/html/GstPlugin.html b/docs/gst/html/GstPlugin.html
index 8ad19b2..d48dc25 100644
--- a/docs/gst/html/GstPlugin.html
+++ b/docs/gst/html/GstPlugin.html
@@ -800,8 +800,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.38.8.17.8"></a><h4>Returns</h4>
-<p> the date string of the plugin, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not available.</p>
-<p></p>
+<p> the date string of the plugin, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not
+available. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -855,8 +856,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.38.8.19.6"></a><h4>Returns</h4>
-<p> The cached data as a <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p> The cached data as a
+<a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1474,12 +1476,13 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GstPluginDesc.release-datetime"></a>release_datetime</code></em>;</p></td>
-<td class="struct_member_description"><p>date time string in ISO 8601 format (or rather, a
-subset thereof), or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Allowed are the following formats:
-"YYYY-MM-DD" and "YYY-MM-DDTHH:MMZ" (with 'T' a separator and 'Z'
-indicating UTC/Zulu time). This field should be set via the
-GST_PACKAGE_RELEASE_DATETIME preprocessor macro.</p></td>
-<td class="struct_member_annotations"> </td>
+<td class="struct_member_description"><p> date time string in ISO 8601
+format (or rather, a subset thereof), or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Allowed are the
+following formats: "YYYY-MM-DD" and "YYY-MM-DDTHH:MMZ" (with
+'T' a separator and 'Z' indicating UTC/Zulu time). This field
+should be set via the <code class="literal">GST_PACKAGE_RELEASE_DATETIME</code>
+preprocessor macro. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
diff --git a/docs/gst/html/GstPluginFeature.html b/docs/gst/html/GstPluginFeature.html
index 24e655d..d371e5e 100644
--- a/docs/gst/html/GstPluginFeature.html
+++ b/docs/gst/html/GstPluginFeature.html
@@ -167,7 +167,7 @@
             <span class="lineart">╰──</span> GstPluginFeature
                 <span class="lineart">├──</span> <a class="link" href="GstElementFactory.html" title="GstElementFactory">GstElementFactory</a>
                 <span class="lineart">├──</span> <a class="link" href="GstTypeFindFactory.html" title="GstTypeFindFactory">GstTypeFindFactory</a>
-                <span class="lineart">╰──</span> <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
+                <span class="lineart">╰──</span> <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
 </pre>
 </div>
 <div class="refsect1">
@@ -332,7 +332,7 @@
 <a name="id-1.3.39.8.6.6"></a><h4>Returns</h4>
 <p> the name of <em class="parameter"><code>feature</code></em>
 . MT safe. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -358,9 +358,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.39.8.7.6"></a><h4>Returns</h4>
-<p> the plugin that provides this feature, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
-Unref with <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a> when no longer needed. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the plugin that provides this
+feature, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.  Unref with <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a> when no
+longer needed. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -386,9 +387,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.39.8.8.6"></a><h4>Returns</h4>
-<p> the name of the plugin that provides this feature, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
-the feature is not associated with a plugin.</p>
-<p></p>
+<p> the name of the plugin that provides this
+feature, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the feature is not associated with a
+plugin. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 <p class="since">Since 1.2</p>
 </div>
@@ -441,8 +443,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.39.8.9.9"></a><h4>Returns</h4>
-<p> a reference to the loaded feature, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a reference to the loaded
+feature, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on error. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstPreset.html b/docs/gst/html/GstPreset.html
index e86a58c..52bdfbc 100644
--- a/docs/gst/html/GstPreset.html
+++ b/docs/gst/html/GstPreset.html
@@ -420,8 +420,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>new value</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> new value. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -524,8 +524,9 @@
 application.</p>
 <div class="refsect3">
 <a name="id-1.3.41.8.11.5"></a><h4>Returns</h4>
-<p> the directory or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, don't free or modify the string</p>
-<p></p>
+<p> the directory or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, don't free or modify
+the string. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/GstQuery.html b/docs/gst/html/GstQuery.html
index feee4a6..d49a113 100644
--- a/docs/gst/html/GstQuery.html
+++ b/docs/gst/html/GstQuery.html
@@ -1260,9 +1260,9 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>old_query</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a <a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a>
-to be replaced. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a pointer to a
+<a class="link" href="GstQuery.html" title="GstQuery"><span class="type">GstQuery</span></a> to be replaced. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>new_query</p></td>
diff --git a/docs/gst/html/GstRegistry.html b/docs/gst/html/GstRegistry.html
index e21d466..c3a3819 100644
--- a/docs/gst/html/GstRegistry.html
+++ b/docs/gst/html/GstRegistry.html
@@ -658,10 +658,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.43.9.11.6"></a><h4>Returns</h4>
-<p> the plugin with the given name or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
-plugin was not found. <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a> after usage.</p>
+<p> the plugin with the given name
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the plugin was not found. <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a> after
+usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -701,10 +702,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.43.9.12.6"></a><h4>Returns</h4>
-<p> the pluginfeature with the given name and type
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the plugin was not found. <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a> after usage.</p>
+<p> the pluginfeature with the
+given name and type or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the plugin was not
+found. <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</code></a> after usage.</p>
 <p>MT safe. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -875,9 +877,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.43.9.17.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> if found, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not.
-<a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</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>
+<p> the <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> if found, or
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not.  <a class="link" href="GstObject.html#gst-object-unref" title="gst_object_unref ()"><code class="function">gst_object_unref()</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>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstSample.html b/docs/gst/html/GstSample.html
index 1439c5b..faf4644 100644
--- a/docs/gst/html/GstSample.html
+++ b/docs/gst/html/GstSample.html
@@ -161,12 +161,12 @@
 <div class="refsect3">
 <a name="id-1.3.13.8.2.6"></a><h4>Returns</h4>
 <p> the buffer of <em class="parameter"><code>sample</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there
-is no buffer. The buffer remains valid as long as <em class="parameter"><code>sample</code></em>
-is valid.
-If you need to hold on to it for longer than that, take a ref to
-the buffer with <a class="link" href="GstBuffer.html#gst-buffer-ref" title="gst_buffer_ref ()"><code class="function">gst_buffer_ref()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+when there is no buffer. The buffer remains valid as long as
+<em class="parameter"><code>sample</code></em>
+is valid.  If you need to hold on to it for longer than
+that, take a ref to the buffer with <a class="link" href="GstBuffer.html#gst-buffer-ref" title="gst_buffer_ref ()"><code class="function">gst_buffer_ref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -194,12 +194,12 @@
 <div class="refsect3">
 <a name="id-1.3.13.8.3.6"></a><h4>Returns</h4>
 <p> the caps of <em class="parameter"><code>sample</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there
-is no caps. The caps remain valid as long as <em class="parameter"><code>sample</code></em>
-is valid.
-If you need to hold on to the caps for longer than that, take a ref to
-the caps with <a class="link" href="GstCaps.html#gst-caps-ref" title="gst_caps_ref ()"><code class="function">gst_caps_ref()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+when there is no caps. The caps remain valid as long as <em class="parameter"><code>sample</code></em>
+is
+valid.  If you need to hold on to the caps for longer than that,
+take a ref to the caps with <a class="link" href="GstCaps.html#gst-caps-ref" title="gst_caps_ref ()"><code class="function">gst_caps_ref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstStructure.html b/docs/gst/html/GstStructure.html
index 93d0934..adabea3 100644
--- a/docs/gst/html/GstStructure.html
+++ b/docs/gst/html/GstStructure.html
@@ -941,9 +941,10 @@
 </div>
 <div class="refsect3">
 <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> or <a href="http://library.gnome.org/devel/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>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> or <a href="http://library.gnome.org/devel/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>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 <p class="since">Since 1.2</p>
 </div>
@@ -2573,9 +2574,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.45.8.51.7"></a><h4>Returns</h4>
-<p> a pointer to the string or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when the field did not exist
-or did not contain a string.</p>
-<p></p>
+<p> a pointer to the string or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when the
+field did not exist or did not contain a string. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -3033,9 +3034,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.45.8.61.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="http://library.gnome.org/devel/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>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a new <a class="link" href="GstStructure.html" title="GstStructure"><span class="type">GstStructure</span></a> or <a href="http://library.gnome.org/devel/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>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstTagList.html b/docs/gst/html/GstTagList.html
index 9ee85ee..5f648f5 100644
--- a/docs/gst/html/GstTagList.html
+++ b/docs/gst/html/GstTagList.html
@@ -1480,8 +1480,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.47.8.17.6"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error.</p>
-<p></p>
+<p> a new <a class="link" href="GstTagList.html" title="GstTagList"><span class="type">GstTagList</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an
+error. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1577,9 +1578,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.47.8.21.6"></a><h4>Returns</h4>
-<p> a newly-allocated string, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error. The
-string must be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when no longer needed.</p>
-<p></p>
+<p> a newly-allocated string, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of
+an error. The string must be freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when no longer
+needed. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1856,13 +1858,13 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>list1</p></td>
-<td class="parameter_description"><p>first list to merge</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> first list to merge. </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>list2</p></td>
-<td class="parameter_description"><p>second list to merge</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> second list to merge. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>mode</p></td>
@@ -1875,7 +1877,7 @@
 <div class="refsect3">
 <a name="id-1.3.47.8.30.7"></a><h4>Returns</h4>
 <p> the new list. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -2295,9 +2297,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.47.8.41.6"></a><h4>Returns</h4>
-<p> The GValue for the specified entry or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the
-tag wasn't available or the tag doesn't have as many entries. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p> The GValue for the specified
+entry or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the tag wasn't available or the tag
+doesn't have as many entries. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstTagSetter.html b/docs/gst/html/GstTagSetter.html
index 16181dd..dbba0dd 100644
--- a/docs/gst/html/GstTagSetter.html
+++ b/docs/gst/html/GstTagSetter.html
@@ -525,9 +525,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.48.9.9.7"></a><h4>Returns</h4>
-<p> a current snapshot of the taglist used in the
-setter or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is used. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p> a current snapshot of the
+taglist used in the setter or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if none is used. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstTaskPool.html b/docs/gst/html/GstTaskPool.html
index 9756e54..82cd57e 100644
--- a/docs/gst/html/GstTaskPool.html
+++ b/docs/gst/html/GstTaskPool.html
@@ -241,11 +241,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.50.8.5.6"></a><h4>Returns</h4>
-<p> a pointer that should be used for the
-gst_task_pool_join function. This pointer can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, you must
-check <em class="parameter"><code>error</code></em>
+<p> a pointer that should be used
+for the gst_task_pool_join function. This pointer can be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, you
+must check <em class="parameter"><code>error</code></em>
 to detect errors. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/GstToc.html b/docs/gst/html/GstToc.html
index 5ca256b..6585653 100644
--- a/docs/gst/html/GstToc.html
+++ b/docs/gst/html/GstToc.html
@@ -438,9 +438,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.51.9.5.6"></a><h4>Returns</h4>
-<p> newly allocated <a class="link" href="GstToc.html" title="GstToc"><span class="type">GstToc</span></a> in case of success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise;
-free it when done with <a class="link" href="GstToc.html#gst-toc-unref" title="gst_toc_unref()"><code class="function">gst_toc_unref()</code></a>.</p>
-<p></p>
+<p> newly allocated <a class="link" href="GstToc.html" title="GstToc"><span class="type">GstToc</span></a> in case of success,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise; free it when done with <a class="link" href="GstToc.html#gst-toc-unref" title="gst_toc_unref()"><code class="function">gst_toc_unref()</code></a>. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -712,9 +712,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.51.9.17.6"></a><h4>Returns</h4>
-<p> newly allocated <a class="link" href="GstToc.html#GstTocEntry"><span class="type">GstTocEntry</span></a> in case of success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise;
-free it when done with <a class="link" href="GstToc.html#gst-toc-entry-unref" title="gst_toc_entry_unref()"><code class="function">gst_toc_entry_unref()</code></a>.</p>
-<p></p>
+<p> newly allocated <a class="link" href="GstToc.html#GstTocEntry"><span class="type">GstTocEntry</span></a> in case of
+success, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise; free it when done with
+<a class="link" href="GstToc.html#gst-toc-entry-unref" title="gst_toc_entry_unref()"><code class="function">gst_toc_entry_unref()</code></a>. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -756,10 +757,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.51.9.19.6"></a><h4>Returns</h4>
-<p> <a class="link" href="GstToc.html#GstTocEntry"><span class="type">GstTocEntry</span></a> with specified <em class="parameter"><code>uid</code></em>
+<p> <a class="link" href="GstToc.html#GstTocEntry"><span class="type">GstTocEntry</span></a> with specified
+<em class="parameter"><code>uid</code></em>
 from the <em class="parameter"><code>toc</code></em>
 , or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not found. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -938,13 +940,15 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>start</p></td>
-<td class="parameter_description"><p> the storage for the start value, leave <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not need. </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>
+<td class="parameter_description"><p> the storage for the start value, leave
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not need. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>stop</p></td>
-<td class="parameter_description"><p> the storage for the stop value, leave <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not need. </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>
+<td class="parameter_description"><p> the storage for the stop value, leave
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not need. </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>
diff --git a/docs/gst/html/GstTypeFindFactory.html b/docs/gst/html/GstTypeFindFactory.html
index 48d636a..fe55760 100644
--- a/docs/gst/html/GstTypeFindFactory.html
+++ b/docs/gst/html/GstTypeFindFactory.html
@@ -251,9 +251,8 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.54.8.3.6"></a><h4>Returns</h4>
-<p> a
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of extensions associated with this factory. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p>
+<p>    a <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>-terminated array of extensions associated with this factory. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/api-index-full.html b/docs/gst/html/api-index-full.html
index f7bb4a7..87b350a 100644
--- a/docs/gst/html/api-index-full.html
+++ b/docs/gst/html/api-index-full.html
@@ -1789,11 +1789,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file-with-ts" title="gst_debug_bin_to_dot_file_with_ts ()">gst_debug_bin_to_dot_file_with_ts</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-WITH-TS:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()">GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS</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-WITH-TS:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()">GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS</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-with-ts" title="gst_debug_bin_to_dot_file_with_ts ()">gst_debug_bin_to_dot_file_with_ts</a>, function in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
 </dt>
 <dd></dd>
 <dt>
@@ -1981,11 +1981,19 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstDeviceMonitorFactory.html#GstDeviceMonitorFactory-struct" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>, struct in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider">GstDeviceProvider</a>, struct in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstDeviceMonitorFactory.html#GstDeviceMonitorFactoryClass" title="GstDeviceMonitorFactoryClass">GstDeviceMonitorFactoryClass</a>, struct in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass">GstDeviceProviderClass</a>, struct in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#GstDeviceProviderFactory-struct" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>, struct in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#GstDeviceProviderFactoryClass" title="GstDeviceProviderFactoryClass">GstDeviceProviderFactoryClass</a>, struct in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
 </dt>
 <dd></dd>
 <dt>
@@ -2009,71 +2017,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-can-monitor" title="gst_device_monitor_can_monitor ()">gst_device_monitor_can_monitor</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-add-metadata" title="gst_device_monitor_class_add_metadata ()">gst_device_monitor_class_add_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-add-static-metadata" title="gst_device_monitor_class_add_static_metadata ()">gst_device_monitor_class_add_static_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-get-metadata" title="gst_device_monitor_class_get_metadata ()">gst_device_monitor_class_get_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-set-metadata" title="gst_device_monitor_class_set_metadata ()">gst_device_monitor_class_set_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-set-static-metadata" title="gst_device_monitor_class_set_static_metadata ()">gst_device_monitor_class_set_static_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-device-add" title="gst_device_monitor_device_add ()">gst_device_monitor_device_add</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-device-remove" title="gst_device_monitor_device_remove ()">gst_device_monitor_device_remove</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-find" title="gst_device_monitor_factory_find ()">gst_device_monitor_factory_find</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get" title="gst_device_monitor_factory_get ()">gst_device_monitor_factory_get</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-by-name" title="gst_device_monitor_factory_get_by_name ()">gst_device_monitor_factory_get_by_name</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-device-monitor-type" title="gst_device_monitor_factory_get_device_monitor_type ()">gst_device_monitor_factory_get_device_monitor_type</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata" title="gst_device_monitor_factory_get_metadata ()">gst_device_monitor_factory_get_metadata</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata-keys" title="gst_device_monitor_factory_get_metadata_keys ()">gst_device_monitor_factory_get_metadata_keys</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classes" title="gst_device_monitor_factory_has_classes ()">gst_device_monitor_factory_has_classes</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classesv" title="gst_device_monitor_factory_has_classesv ()">gst_device_monitor_factory_has_classesv</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="GstDeviceMonitorFactory.html#gst-device-monitor-factory-list-get-device-monitors" title="gst_device_monitor_factory_list_get_device_monitors ()">gst_device_monitor_factory_list_get_device_monitors</a>, function in <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
+<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-add-filter" title="gst_device_monitor_add_filter ()">gst_device_monitor_add_filter</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
 </dt>
 <dd></dd>
 <dt>
@@ -2085,11 +2029,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-factory" title="gst_device_monitor_get_factory ()">gst_device_monitor_get_factory</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
+<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-new" title="gst_device_monitor_new ()">gst_device_monitor_new</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-register" title="gst_device_monitor_register ()">gst_device_monitor_register</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
+<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-remove-filter" title="gst_device_monitor_remove_filter ()">gst_device_monitor_remove_filter</a>, function in <a class="link" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">GstDeviceMonitor</a>
 </dt>
 <dd></dd>
 <dt>
@@ -2101,6 +2045,98 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-can-monitor" title="gst_device_provider_can_monitor ()">gst_device_provider_can_monitor</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-add-metadata" title="gst_device_provider_class_add_metadata ()">gst_device_provider_class_add_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-add-static-metadata" title="gst_device_provider_class_add_static_metadata ()">gst_device_provider_class_add_static_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-get-metadata" title="gst_device_provider_class_get_metadata ()">gst_device_provider_class_get_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-set-metadata" title="gst_device_provider_class_set_metadata ()">gst_device_provider_class_set_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-set-static-metadata" title="gst_device_provider_class_set_static_metadata ()">gst_device_provider_class_set_static_metadata</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-device-add" title="gst_device_provider_device_add ()">gst_device_provider_device_add</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-device-remove" title="gst_device_provider_device_remove ()">gst_device_provider_device_remove</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-find" title="gst_device_provider_factory_find ()">gst_device_provider_factory_find</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get" title="gst_device_provider_factory_get ()">gst_device_provider_factory_get</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-by-name" title="gst_device_provider_factory_get_by_name ()">gst_device_provider_factory_get_by_name</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-device-provider-type" title="gst_device_provider_factory_get_device_provider_type ()">gst_device_provider_factory_get_device_provider_type</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata" title="gst_device_provider_factory_get_metadata ()">gst_device_provider_factory_get_metadata</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata-keys" title="gst_device_provider_factory_get_metadata_keys ()">gst_device_provider_factory_get_metadata_keys</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-has-classes" title="gst_device_provider_factory_has_classes ()">gst_device_provider_factory_has_classes</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-has-classesv" title="gst_device_provider_factory_has_classesv ()">gst_device_provider_factory_has_classesv</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GstDeviceProviderFactory.html#gst-device-provider-factory-list-get-device-providers" title="gst_device_provider_factory_list_get_device_providers ()">gst_device_provider_factory_list_get_device_providers</a>, function in <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-get-bus" title="gst_device_provider_get_bus ()">gst_device_provider_get_bus</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-get-devices" title="gst_device_provider_get_devices ()">gst_device_provider_get_devices</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-get-factory" title="gst_device_provider_get_factory ()">gst_device_provider_get_factory</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-register" title="gst_device_provider_register ()">gst_device_provider_register</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-start" title="gst_device_provider_start ()">gst_device_provider_start</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-stop" title="gst_device_provider_stop ()">gst_device_provider_stop</a>, function in <a class="link" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">GstDeviceProvider</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gstreamer-GstDevice.html#gst-device-reconfigure-element" title="gst_device_reconfigure_element ()">gst_device_reconfigure_element</a>, function in <a class="link" href="gstreamer-GstDevice.html" title="GstDevice">GstDevice</a>
 </dt>
 <dd></dd>
@@ -3120,50 +3156,6 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>, struct in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitorClass" title="struct GstGlobalDeviceMonitorClass">GstGlobalDeviceMonitorClass</a>, struct in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-bus" title="gst_global_device_monitor_get_bus ()">gst_global_device_monitor_get_bus</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-caps-filter" title="gst_global_device_monitor_get_caps_filter ()">gst_global_device_monitor_get_caps_filter</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-classes-filter" title="gst_global_device_monitor_get_classes_filter ()">gst_global_device_monitor_get_classes_filter</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-devices" title="gst_global_device_monitor_get_devices ()">gst_global_device_monitor_get_devices</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-new" title="gst_global_device_monitor_new ()">gst_global_device_monitor_new</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-caps-filter" title="gst_global_device_monitor_set_caps_filter ()">gst_global_device_monitor_set_caps_filter</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-classes-filter" title="gst_global_device_monitor_set_classes_filter ()">gst_global_device_monitor_set_classes_filter</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-start" title="gst_global_device_monitor_start ()">gst_global_device_monitor_start</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-stop" title="gst_global_device_monitor_stop ()">gst_global_device_monitor_stop</a>, function in <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a>
-</dt>
-<dd></dd>
-<dt>
 <a class="link" href="gstreamer-GstUtils.html#gst-guint64-to-gdouble" title="gst_guint64_to_gdouble()">gst_guint64_to_gdouble</a>, macro in <a class="link" href="gstreamer-GstUtils.html" title="GstUtils">GstUtils</a>
 </dt>
 <dd></dd>
@@ -4530,15 +4522,11 @@
 </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>
-</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>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#GST-PAD-IS-BLOCKED:CAPS" title="GST_PAD_IS_BLOCKED()">GST_PAD_IS_BLOCKED</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>
@@ -4546,7 +4534,7 @@
 </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-BLOCKED:CAPS" title="GST_PAD_IS_BLOCKED()">GST_PAD_IS_BLOCKED</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
@@ -4554,6 +4542,10 @@
 </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>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstPad.html#GST-PAD-IS-EOS:CAPS" title="GST_PAD_IS_EOS()">GST_PAD_IS_EOS</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
@@ -4566,11 +4558,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#gst-pad-is-linked" title="gst_pad_is_linked ()">gst_pad_is_linked</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#GST-PAD-IS-LINKED:CAPS" title="GST_PAD_IS_LINKED()">GST_PAD_IS_LINKED</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstPad.html#GST-PAD-IS-LINKED:CAPS" title="GST_PAD_IS_LINKED()">GST_PAD_IS_LINKED</a>, macro in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
+<a class="link" href="GstPad.html#gst-pad-is-linked" title="gst_pad_is_linked ()">gst_pad_is_linked</a>, function in <a class="link" href="GstPad.html" title="GstPad">GstPad</a>
 </dt>
 <dd></dd>
 <dt>
@@ -5398,11 +5390,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstPoll.html#gst-poll-fd-init" title="gst_poll_fd_init ()">gst_poll_fd_init</a>, function in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
+<a class="link" href="gstreamer-GstPoll.html#GST-POLL-FD-INIT:CAPS" title="GST_POLL_FD_INIT">GST_POLL_FD_INIT</a>, macro in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gstreamer-GstPoll.html#GST-POLL-FD-INIT:CAPS" title="GST_POLL_FD_INIT">GST_POLL_FD_INIT</a>, macro in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
+<a class="link" href="gstreamer-GstPoll.html#gst-poll-fd-init" title="gst_poll_fd_init ()">gst_poll_fd_init</a>, function in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
 </dt>
 <dd></dd>
 <dt>
@@ -6277,11 +6269,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstElement.html#GST-STATE:CAPS" title="GST_STATE()">GST_STATE</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+<a class="link" href="GstElement.html#GstState" title="enum GstState">GstState</a>, enum in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="GstElement.html#GstState" title="enum GstState">GstState</a>, enum in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+<a class="link" href="GstElement.html#GST-STATE:CAPS" title="GST_STATE()">GST_STATE</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
 </dt>
 <dd></dd>
 <dt>
diff --git a/docs/gst/html/gstreamer-1.0.devhelp2 b/docs/gst/html/gstreamer-1.0.devhelp2
index 04523e3..5e1b79f 100644
--- a/docs/gst/html/gstreamer-1.0.devhelp2
+++ b/docs/gst/html/gstreamer-1.0.devhelp2
@@ -65,10 +65,10 @@
       <sub name="GstVersion" link="gstreamer-GstVersion.html"/>
     </sub>
     <sub name="GStreamer Device Discovery and Device Probing" link="gstreamer-device-probing.html">
-      <sub name="GstDevice" link="gstreamer-GstDevice.html"/>
       <sub name="GstDeviceMonitor" link="gstreamer-GstDeviceMonitor.html"/>
-      <sub name="GstDeviceMonitorFactory" link="GstDeviceMonitorFactory.html"/>
-      <sub name="GstGlobalDeviceMonitor" link="gstreamer-GstGlobalDeviceMonitor.html"/>
+      <sub name="GstDevice" link="gstreamer-GstDevice.html"/>
+      <sub name="GstDeviceProvider" link="gstreamer-GstDeviceProvider.html"/>
+      <sub name="GstDeviceProviderFactory" link="GstDeviceProviderFactory.html"/>
     </sub>
     <sub name="GStreamer Core Support" link="gstreamer-support.html">
       <sub name="GstInfo" link="gstreamer-GstInfo.html"/>
@@ -2023,6 +2023,15 @@
     <keyword type="macro" name="GST_VERSION_MICRO" link="gstreamer-GstVersion.html#GST-VERSION-MICRO:CAPS"/>
     <keyword type="macro" name="GST_VERSION_NANO" link="gstreamer-GstVersion.html#GST-VERSION-NANO:CAPS"/>
     <keyword type="macro" name="GST_CHECK_VERSION()" link="gstreamer-GstVersion.html#GST-CHECK-VERSION:CAPS"/>
+    <keyword type="function" name="gst_device_monitor_new ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-new" since="1.4"/>
+    <keyword type="function" name="gst_device_monitor_get_bus ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-bus" since="1.4"/>
+    <keyword type="function" name="gst_device_monitor_add_filter ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-add-filter" since="1.4"/>
+    <keyword type="function" name="gst_device_monitor_remove_filter ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-remove-filter" since="1.4"/>
+    <keyword type="function" name="gst_device_monitor_start ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-start" since="1.4"/>
+    <keyword type="function" name="gst_device_monitor_stop ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-stop" since="1.4"/>
+    <keyword type="function" name="gst_device_monitor_get_devices ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-devices" since="1.4"/>
+    <keyword type="struct" name="struct GstDeviceMonitor" link="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" since="1.4"/>
+    <keyword type="struct" name="struct GstDeviceMonitorClass" link="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" since="1.4"/>
     <keyword type="function" name="gst_device_create_element ()" link="gstreamer-GstDevice.html#gst-device-create-element" since="1.4"/>
     <keyword type="function" name="gst_device_get_caps ()" link="gstreamer-GstDevice.html#gst-device-get-caps" since="1.4"/>
     <keyword type="function" name="gst_device_get_display_name ()" link="gstreamer-GstDevice.html#gst-device-get-display-name" since="1.4"/>
@@ -2031,44 +2040,33 @@
     <keyword type="function" name="gst_device_reconfigure_element ()" link="gstreamer-GstDevice.html#gst-device-reconfigure-element" since="1.4"/>
     <keyword type="struct" name="struct GstDevice" link="gstreamer-GstDevice.html#GstDevice" since="1.4"/>
     <keyword type="struct" name="struct GstDeviceClass" link="gstreamer-GstDevice.html#GstDeviceClass" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_can_monitor ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-can-monitor"/>
-    <keyword type="function" name="gst_device_monitor_class_add_metadata ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-add-metadata"/>
-    <keyword type="function" name="gst_device_monitor_class_add_static_metadata ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-add-static-metadata" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_class_get_metadata ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-get-metadata" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_class_set_metadata ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-set-metadata" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_class_set_static_metadata ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-set-static-metadata" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_device_add ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-device-add" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_device_remove ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-device-remove" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_get_bus ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-bus" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_get_devices ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-devices" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_get_factory ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-factory" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_register ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-register" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_start ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-start" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_stop ()" link="gstreamer-GstDeviceMonitor.html#gst-device-monitor-stop" since="1.4"/>
-    <keyword type="struct" name="struct GstDeviceMonitor" link="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" since="1.4"/>
-    <keyword type="struct" name="struct GstDeviceMonitorClass" link="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_find ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-find" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_get ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_get_by_name ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-by-name" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_get_device_monitor_type ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-device-monitor-type" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_get_metadata ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_get_metadata_keys ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata-keys" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_has_classes ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classes" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_has_classesv ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classesv" since="1.4"/>
-    <keyword type="function" name="gst_device_monitor_factory_list_get_device_monitors ()" link="GstDeviceMonitorFactory.html#gst-device-monitor-factory-list-get-device-monitors" since="1.4"/>
-    <keyword type="struct" name="GstDeviceMonitorFactory" link="GstDeviceMonitorFactory.html#GstDeviceMonitorFactory-struct"/>
-    <keyword type="struct" name="GstDeviceMonitorFactoryClass" link="GstDeviceMonitorFactory.html#GstDeviceMonitorFactoryClass" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_get_bus ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-bus" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_get_caps_filter ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-caps-filter" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_get_classes_filter ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-classes-filter" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_get_devices ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-devices" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_new ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-new" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_set_caps_filter ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-caps-filter" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_set_classes_filter ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-classes-filter" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_start ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-start" since="1.4"/>
-    <keyword type="function" name="gst_global_device_monitor_stop ()" link="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-stop" since="1.4"/>
-    <keyword type="struct" name="struct GstGlobalDeviceMonitor" link="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" since="1.4"/>
-    <keyword type="struct" name="struct GstGlobalDeviceMonitorClass" link="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitorClass" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_can_monitor ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-can-monitor"/>
+    <keyword type="function" name="gst_device_provider_class_add_metadata ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-class-add-metadata"/>
+    <keyword type="function" name="gst_device_provider_class_add_static_metadata ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-class-add-static-metadata" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_class_get_metadata ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-class-get-metadata" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_class_set_metadata ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-class-set-metadata" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_class_set_static_metadata ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-class-set-static-metadata" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_device_add ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-device-add" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_device_remove ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-device-remove" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_get_bus ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-get-bus" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_get_devices ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-get-devices" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_get_factory ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-get-factory" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_register ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-register" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_start ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-start" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_stop ()" link="gstreamer-GstDeviceProvider.html#gst-device-provider-stop" since="1.4"/>
+    <keyword type="struct" name="struct GstDeviceProvider" link="gstreamer-GstDeviceProvider.html#GstDeviceProvider" since="1.4"/>
+    <keyword type="struct" name="struct GstDeviceProviderClass" link="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_find ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-find" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_get ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-get" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_get_by_name ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-get-by-name" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_get_device_provider_type ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-get-device-provider-type" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_get_metadata ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_get_metadata_keys ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata-keys" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_has_classes ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-has-classes" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_has_classesv ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-has-classesv" since="1.4"/>
+    <keyword type="function" name="gst_device_provider_factory_list_get_device_providers ()" link="GstDeviceProviderFactory.html#gst-device-provider-factory-list-get-device-providers" since="1.4"/>
+    <keyword type="struct" name="GstDeviceProviderFactory" link="GstDeviceProviderFactory.html#GstDeviceProviderFactory-struct"/>
+    <keyword type="struct" name="GstDeviceProviderFactoryClass" link="GstDeviceProviderFactory.html#GstDeviceProviderFactoryClass" since="1.4"/>
     <keyword type="macro" name="GST_STR_NULL()" link="gstreamer-GstInfo.html#GST-STR-NULL:CAPS"/>
     <keyword type="macro" name="GST_DEBUG_PAD_NAME()" link="gstreamer-GstInfo.html#GST-DEBUG-PAD-NAME:CAPS"/>
     <keyword type="macro" name="GST_FUNCTION" link="gstreamer-GstInfo.html#GST-FUNCTION:CAPS"/>
diff --git a/docs/gst/html/gstreamer-GstAtomicQueue.html b/docs/gst/html/gstreamer-GstAtomicQueue.html
index 5226a8f..872ce88 100644
--- a/docs/gst/html/gstreamer-GstAtomicQueue.html
+++ b/docs/gst/html/gstreamer-GstAtomicQueue.html
@@ -258,9 +258,9 @@
 <div class="refsect3">
 <a name="id-1.3.5.8.6.6"></a><h4>Returns</h4>
 <p> the head element of <em class="parameter"><code>queue</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when
-the queue is empty. </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>
+or
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when the queue is empty. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/gstreamer-GstDevice.html b/docs/gst/html/gstreamer-GstDevice.html
index a212aed..4cc7a12 100644
--- a/docs/gst/html/gstreamer-GstDevice.html
+++ b/docs/gst/html/gstreamer-GstDevice.html
@@ -6,8 +6,8 @@
 <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="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
-<link rel="prev" href="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
-<link rel="next" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">
+<link rel="prev" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">
+<link rel="next" href="gstreamer-GstDeviceProvider.html" title="GstDeviceProvider">
 <meta name="generator" content="GTK-Doc V1.20 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -20,8 +20,8 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gstreamer-device-probing.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gstreamer-device-probing.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gstreamer-GstDeviceMonitor.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gstreamer-GstDeviceMonitor.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gstreamer-GstDeviceProvider.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gstreamer-GstDevice"></a><div class="titlepage"></div>
@@ -125,8 +125,8 @@
 <p><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> are objects representing a device, they contain
 relevant metadata about the device, such as its class and the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a>
 representing the media types it can produce or handle.</p>
-<p><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> are created by <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> objects which can be
-aggregated by <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> objects.</p>
+<p><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> are created by <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> objects which can be
+aggregated by <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> objects.</p>
 </div>
 <div class="refsect1">
 <a name="gstreamer-GstDevice.functions_details"></a><h2>Functions</h2>
@@ -138,7 +138,7 @@
 <p>Creates the element with all of the required paramaters set to use
 this device.</p>
 <div class="refsect3">
-<a name="id-1.4.2.8.2.5"></a><h4>Parameters</h4>
+<a name="id-1.4.3.8.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -161,7 +161,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.2.8.2.6"></a><h4>Returns</h4>
+<a name="id-1.4.3.8.2.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> configured to use this device. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -174,7 +174,7 @@
 gst_device_get_caps (<em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
 <p>Getter for the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> that this device supports.</p>
 <div class="refsect3">
-<a name="id-1.4.2.8.3.5"></a><h4>Parameters</h4>
+<a name="id-1.4.3.8.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -189,7 +189,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.2.8.3.6"></a><h4>Returns</h4>
+<a name="id-1.4.3.8.3.6"></a><h4>Returns</h4>
 <p> The <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> supported by this device. Unref with
 <a class="link" href="GstCaps.html#gst-caps-unref" title="gst_caps_unref ()"><code class="function">gst_caps_unref()</code></a> when done.</p>
 <p></p>
@@ -203,7 +203,7 @@
 gst_device_get_display_name (<em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
 <p>Gets the user-friendly name of the device.</p>
 <div class="refsect3">
-<a name="id-1.4.2.8.4.5"></a><h4>Parameters</h4>
+<a name="id-1.4.3.8.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -218,7 +218,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.2.8.4.6"></a><h4>Returns</h4>
+<a name="id-1.4.3.8.4.6"></a><h4>Returns</h4>
 <p> The device name. Free with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after use.</p>
 <p></p>
 </div>
@@ -233,7 +233,7 @@
 <p>Check if <em class="parameter"><code>device</code></em>
  matches all of the given classes</p>
 <div class="refsect3">
-<a name="id-1.4.2.8.5.5"></a><h4>Parameters</h4>
+<a name="id-1.4.3.8.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -256,7 +256,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.2.8.5.6"></a><h4>Returns</h4>
+<a name="id-1.4.3.8.5.6"></a><h4>Returns</h4>
 <p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>device</code></em>
 matches.</p>
 <p></p>
@@ -272,7 +272,7 @@
 <p>Check if <em class="parameter"><code>factory</code></em>
  matches all of the given classes</p>
 <div class="refsect3">
-<a name="id-1.4.2.8.6.5"></a><h4>Parameters</h4>
+<a name="id-1.4.3.8.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -295,7 +295,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.2.8.6.6"></a><h4>Returns</h4>
+<a name="id-1.4.3.8.6.6"></a><h4>Returns</h4>
 <p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>device</code></em>
 matches.</p>
 <p></p>
@@ -314,7 +314,7 @@
 <p>Note: This should only be implemented for elements can change their
 device in the PLAYING state.</p>
 <div class="refsect3">
-<a name="id-1.4.2.8.7.6"></a><h4>Parameters</h4>
+<a name="id-1.4.3.8.7.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -336,7 +336,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.2.8.7.7"></a><h4>Returns</h4>
+<a name="id-1.4.3.8.7.7"></a><h4>Returns</h4>
 <p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the element could be reconfigured to use this device,
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p></p>
@@ -354,7 +354,7 @@
 </pre>
 <p>A device object.</p>
 <div class="refsect3">
-<a name="id-1.4.2.9.2.5"></a><h4>Members</h4>
+<a name="id-1.4.3.9.2.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -382,7 +382,7 @@
 </pre>
 <p>The class structure for a <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> object.</p>
 <div class="refsect3">
-<a name="id-1.4.2.9.3.5"></a><h4>Members</h4>
+<a name="id-1.4.3.9.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -416,7 +416,7 @@
 </div>
 <div class="refsect1">
 <a name="gstreamer-GstDevice.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p>
+<p><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/gst/html/gstreamer-GstDeviceMonitor.html b/docs/gst/html/gstreamer-GstDeviceMonitor.html
index eff937b..cdb9369 100644
--- a/docs/gst/html/gstreamer-GstDeviceMonitor.html
+++ b/docs/gst/html/gstreamer-GstDeviceMonitor.html
@@ -6,8 +6,8 @@
 <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="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
-<link rel="prev" href="gstreamer-GstDevice.html" title="GstDevice">
-<link rel="next" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">
+<link rel="prev" href="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
+<link rel="next" href="gstreamer-GstDevice.html" title="GstDevice">
 <meta name="generator" content="GTK-Doc V1.20 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -20,8 +20,8 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="gstreamer-device-probing.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gstreamer-GstDevice.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GstDeviceMonitorFactory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gstreamer-device-probing.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gstreamer-GstDevice.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gstreamer-GstDeviceMonitor"></a><div class="titlepage"></div>
@@ -42,65 +42,10 @@
 <tbody>
 <tr>
 <td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="returnvalue">GstDeviceMonitor</span></a> *
 </td>
 <td class="function_name">
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-can-monitor" title="gst_device_monitor_can_monitor ()">gst_device_monitor_can_monitor</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-GstDeviceMonitor.html#gst-device-monitor-class-add-metadata" title="gst_device_monitor_class_add_metadata ()">gst_device_monitor_class_add_metadata</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-GstDeviceMonitor.html#gst-device-monitor-class-add-static-metadata" title="gst_device_monitor_class_add_static_metadata ()">gst_device_monitor_class_add_static_metadata</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-get-metadata" title="gst_device_monitor_class_get_metadata ()">gst_device_monitor_class_get_metadata</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-GstDeviceMonitor.html#gst-device-monitor-class-set-metadata" title="gst_device_monitor_class_set_metadata ()">gst_device_monitor_class_set_metadata</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-GstDeviceMonitor.html#gst-device-monitor-class-set-static-metadata" title="gst_device_monitor_class_set_static_metadata ()">gst_device_monitor_class_set_static_metadata</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-GstDeviceMonitor.html#gst-device-monitor-device-add" title="gst_device_monitor_device_add ()">gst_device_monitor_device_add</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-GstDeviceMonitor.html#gst-device-monitor-device-remove" title="gst_device_monitor_device_remove ()">gst_device_monitor_device_remove</a> <span class="c_punctuation">()</span>
+<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-new" title="gst_device_monitor_new ()">gst_device_monitor_new</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -113,18 +58,10 @@
 </tr>
 <tr>
 <td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-devices" title="gst_device_monitor_get_devices ()">gst_device_monitor_get_devices</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="returnvalue">GstDeviceMonitorFactory</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-factory" title="gst_device_monitor_get_factory ()">gst_device_monitor_get_factory</a> <span class="c_punctuation">()</span>
+<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-add-filter" title="gst_device_monitor_add_filter ()">gst_device_monitor_add_filter</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -132,7 +69,7 @@
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-register" title="gst_device_monitor_register ()">gst_device_monitor_register</a> <span class="c_punctuation">()</span>
+<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-remove-filter" title="gst_device_monitor_remove_filter ()">gst_device_monitor_remove_filter</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -151,6 +88,14 @@
 <a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-stop" title="gst_device_monitor_stop ()">gst_device_monitor_stop</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-devices" title="gst_device_monitor_get_devices ()">gst_device_monitor_get_devices</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -185,347 +130,129 @@
 </div>
 <div class="refsect1">
 <a name="gstreamer-GstDeviceMonitor.description"></a><h2>Description</h2>
-<p>A <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> subclass is provided by a plugin that handles devices
-if there is a way to programatically list connected devices. It can also
-optionally provide updates to the list of connected devices.</p>
-<p>Each <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> subclass is a singleton, a plugin should
-normally provide a single subclass for all devices.</p>
-<p>Applications would normally use a <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> to monitor devices
-from all revelant monitors.</p>
+<p>Applications should create a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> when they want
+to probe, list and monitor devices of a specific type. The
+<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> will create the appropriate
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> objects and manage them. It will then post
+messages on its <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> for devices that have been added and
+removed.</p>
+<p>The device monitor will monitor all devices matching the filters that
+the application has set.</p>
+<p>The basic use pattern of a device monitor is as follows:</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
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46</pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static</span> gboolean
+<span class="function">my_bus_func</span> <span class="gtkdoc opt">(</span>GstBus <span class="gtkdoc opt">*</span> bus<span class="gtkdoc opt">,</span> GstMessage <span class="gtkdoc opt">*</span> message<span class="gtkdoc opt">,</span> gpointer user_data<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+   GstDevice <span class="gtkdoc opt">*</span>device<span class="gtkdoc opt">;</span>
+   gchar name<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/GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">)) {</span>
+     <span class="keyword">case</span> GST_MESSAGE_DEVICE_ADDED<span class="gtkdoc opt">:</span>
+       <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-parse-device-added">gst_message_parse_device_added</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">, &amp;</span>device<span class="gtkdoc opt">);</span>
+       name <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstDevice.html#gst-device-get-display-name">gst_device_get_display_name</a></span> <span class="gtkdoc opt">(</span>device<span class="gtkdoc opt">);</span>
+       <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Device added: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> name<span class="gtkdoc opt">);</span>
+       <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span> <span class="gtkdoc opt">(</span>name<span class="gtkdoc opt">);</span>
+       <span class="keyword">break</span><span class="gtkdoc opt">;</span>
+     <span class="keyword">case</span> GST_MESSAGE_DEVICE_REMOVED<span class="gtkdoc opt">:</span>
+       <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-parse-device-removed">gst_message_parse_device_removed</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">, &amp;</span>device<span class="gtkdoc opt">);</span>
+       name <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstDevice.html#gst-device-get-display-name">gst_device_get_display_name</a></span> <span class="gtkdoc opt">(</span>device<span class="gtkdoc opt">);</span>
+       <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;Device removed: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> name<span class="gtkdoc opt">);</span>
+       <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span> <span class="gtkdoc opt">(</span>name<span class="gtkdoc opt">);</span>
+       <span class="keyword">break</span><span class="gtkdoc opt">;</span>
+     <span class="keyword">default</span><span class="gtkdoc opt">:</span>
+       <span class="keyword">break</span><span class="gtkdoc opt">;</span>
+   <span class="gtkdoc opt">}</span>
+
+   <span class="keyword">return</span> G_SOURCE_CONTINUE<span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span>
+
+GstDeviceMonitor <span class="gtkdoc opt">*</span>
+<span class="function">setup_raw_video_source_device_monitor</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">void</span><span class="gtkdoc opt">) {</span>
+   GstDeviceMonitor <span class="gtkdoc opt">*</span>monitor<span class="gtkdoc opt">;</span>
+   GstBus <span class="gtkdoc opt">*</span>bus<span class="gtkdoc opt">;</span>
+   GstCaps <span class="gtkdoc opt">*</span>caps<span class="gtkdoc opt">;</span>
+
+   monitor <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstDeviceMonitor.html#gst-device-monitor-new">gst_device_monitor_new</a></span> <span class="gtkdoc opt">();</span>
+
+   bus <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-bus">gst_device_monitor_get_bus</a></span> <span class="gtkdoc opt">(</span>monitor<span class="gtkdoc opt">);</span>
+   <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html#gst-bus-add-watch">gst_bus_add_watch</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">,</span> my_bus_func<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/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">);</span>
+
+   caps <span class="gtkdoc opt">=</span> <span class="function">gst_caps_new_simple_empty</span> <span class="gtkdoc opt">(</span><span class="string">&quot;video/x-raw&quot;</span><span class="gtkdoc opt">);</span>
+   <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstDeviceMonitor.html#gst-device-monitor-add-filter">gst_device_monitor_add_filter</a></span> <span class="gtkdoc opt">(</span>monitor<span class="gtkdoc opt">,</span> <span class="string">&quot;Video/Source&quot;</span><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-unref">gst_caps_unref</a></span> <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/gstreamer-GstDeviceMonitor.html#gst-device-monitor-start">gst_device_monitor_start</a></span> <span class="gtkdoc opt">(</span>monitor<span class="gtkdoc opt">);</span>
+
+   <span class="keyword">return</span> monitor<span class="gtkdoc opt">;</span>
+<span class="gtkdoc opt">}</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gstreamer-GstDeviceMonitor.functions_details"></a><h2>Functions</h2>
 <div class="refsect2">
-<a name="gst-device-monitor-can-monitor"></a><h3>gst_device_monitor_can_monitor ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_device_monitor_can_monitor (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>If this function returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, then the device monitor can monitor if
-devices are added or removed. Otherwise, it can only do static probing.</p>
+<a name="gst-device-monitor-new"></a><h3>gst_device_monitor_new ()</h3>
+<pre class="programlisting"><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="returnvalue">GstDeviceMonitor</span></a> *
+gst_device_monitor_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Create a new <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p>
 <div class="refsect3">
-<a name="id-1.4.3.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.3.8.2.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> support monitoring, <a href="http://library.gnome.org/devel/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-device-monitor-class-add-metadata"></a><h3>gst_device_monitor_class_add_metadata ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_device_monitor_class_add_metadata (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a> *klass</code></em>,
-                                       <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
-                                       <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
-<p>Set <em class="parameter"><code>key</code></em>
- with <em class="parameter"><code>value</code></em>
- as metadata in <em class="parameter"><code>klass</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.4.3.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>klass</p></td>
-<td class="parameter_description"><p>class to set metadata for</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the key to set</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>the value to set</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-class-add-static-metadata"></a><h3>gst_device_monitor_class_add_static_metadata ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_device_monitor_class_add_static_metadata
-                               (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a> *klass</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
-<p>Set <em class="parameter"><code>key</code></em>
- with <em class="parameter"><code>value</code></em>
- as metadata in <em class="parameter"><code>klass</code></em>
-.</p>
-<p>Same as <a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-add-metadata" title="gst_device_monitor_class_add_metadata ()"><code class="function">gst_device_monitor_class_add_metadata()</code></a>, but <em class="parameter"><code>value</code></em>
- must be a static string
-or an inlined string, as it will not be copied. (GStreamer plugins will
-be made resident once loaded, so this function can be used even from
-dynamically loaded plugins.)</p>
-<div class="refsect3">
-<a name="id-1.4.3.8.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>klass</p></td>
-<td class="parameter_description"><p>class to set metadata for</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the key to set</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>value</p></td>
-<td class="parameter_description"><p>the value to set</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-class-get-metadata"></a><h3>gst_device_monitor_class_get_metadata ()</h3>
-<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_device_monitor_class_get_metadata (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a> *klass</code></em>,
-                                       <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);</pre>
-<p>Get metadata with <em class="parameter"><code>key</code></em>
- in <em class="parameter"><code>klass</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.4.3.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>klass</p></td>
-<td class="parameter_description"><p>class to get metadata for</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>key</p></td>
-<td class="parameter_description"><p>the key to get</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.3.8.5.6"></a><h4>Returns</h4>
-<p> the metadata for <em class="parameter"><code>key</code></em>
-.</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-class-set-metadata"></a><h3>gst_device_monitor_class_set_metadata ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_device_monitor_class_set_metadata (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a> *klass</code></em>,
-                                       <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *longname</code></em>,
-                                       <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classification</code></em>,
-                                       <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
-                                       <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *author</code></em>);</pre>
-<p>Sets the detailed information for a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a>.</p>
-<div class="note">This function is for use in _class_init functions only.</div>
-<div class="refsect3">
-<a name="id-1.4.3.8.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>klass</p></td>
-<td class="parameter_description"><p>class to set metadata for</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>longname</p></td>
-<td class="parameter_description"><p>The long English name of the device monitor. E.g. "File Sink"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>classification</p></td>
-<td class="parameter_description"><p>String describing the type of device monitor, as an unordered list
-separated with slashes ('/'). See draft-klass.txt of the design docs
-for more details and common types. E.g: "Sink/File"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>description</p></td>
-<td class="parameter_description"><p>Sentence describing the purpose of the device monitor.
-E.g: "Write stream to a file"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>author</p></td>
-<td class="parameter_description"><p>Name and contact details of the author(s). Use \n to separate
-multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-class-set-static-metadata"></a><h3>gst_device_monitor_class_set_static_metadata ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_device_monitor_class_set_static_metadata
-                               (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a> *klass</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *longname</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classification</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *author</code></em>);</pre>
-<p>Sets the detailed information for a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a>.</p>
-<div class="note">This function is for use in _class_init functions only.</div>
-<p>Same as <a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-set-metadata" title="gst_device_monitor_class_set_metadata ()"><code class="function">gst_device_monitor_class_set_metadata()</code></a>, but <em class="parameter"><code>longname</code></em>
-, <em class="parameter"><code>classification</code></em>
-,
-<em class="parameter"><code>description</code></em>
-, and <em class="parameter"><code>author</code></em>
- must be static strings or inlined strings, as
-they will not be copied. (GStreamer plugins will be made resident once
-loaded, so this function can be used even from dynamically loaded plugins.)</p>
-<div class="refsect3">
-<a name="id-1.4.3.8.7.7"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>klass</p></td>
-<td class="parameter_description"><p>class to set metadata for</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>longname</p></td>
-<td class="parameter_description"><p>The long English name of the element. E.g. "File Sink"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>classification</p></td>
-<td class="parameter_description"><p>String describing the type of element, as an unordered list
-separated with slashes ('/'). See draft-klass.txt of the design docs
-for more details and common types. E.g: "Sink/File"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>description</p></td>
-<td class="parameter_description"><p>Sentence describing the purpose of the element.
-E.g: "Write stream to a file"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>author</p></td>
-<td class="parameter_description"><p>Name and contact details of the author(s). Use \n to separate
-multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-device-add"></a><h3>gst_device_monitor_device_add ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_device_monitor_device_add (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>,
-                               <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
-<p>Posts a message on the monitor's <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> to inform applications that
-a new device has been added.</p>
-<p>This is for use by subclasses.</p>
-<div class="refsect3">
-<a name="id-1.4.3.8.8.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>monitor</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p> a <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> that has been added. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-device-remove"></a><h3>gst_device_monitor_device_remove ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_device_monitor_device_remove (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>,
-                                  <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
-<p>Posts a message on the monitor's <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> to inform applications that
-a device has been removed.</p>
-<p>This is for use by subclasses.</p>
-<div class="refsect3">
-<a name="id-1.4.3.8.9.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>monitor</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>device</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> that has been removed</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
+<a name="id-1.4.2.8.2.5"></a><h4>Returns</h4>
+<p> a new device monitor. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
 <p class="since">Since 1.4</p>
 </div>
@@ -536,7 +263,7 @@
 gst_device_monitor_get_bus (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>);</pre>
 <p>Gets the <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> of this <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p>
 <div class="refsect3">
-<a name="id-1.4.3.8.10.5"></a><h4>Parameters</h4>
+<a name="id-1.4.2.8.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -545,13 +272,13 @@
 </colgroup>
 <tbody><tr>
 <td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.3.8.10.6"></a><h4>Returns</h4>
+<a name="id-1.4.2.8.3.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</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>
@@ -559,77 +286,16 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-device-monitor-get-devices"></a><h3>gst_device_monitor_get_devices ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
-gst_device_monitor_get_devices (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Gets a list of devices that this monitor understands. This may actually
-probe the hardware if the monitor is not currently started.</p>
+<a name="gst-device-monitor-add-filter"></a><h3>gst_device_monitor_add_filter ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_device_monitor_add_filter (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>,
+                               <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classes</code></em>,
+                               <em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+<p>Adds a filter for which <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> will be monitored, any device that matches
+all classes and the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> will be returned.</p>
+<p>Filters must be added before the <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> is started.</p>
 <div class="refsect3">
-<a name="id-1.4.3.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>monitor</p></td>
-<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.3.8.11.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
-<a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstDevice]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-get-factory"></a><h3>gst_device_monitor_get_factory ()</h3>
-<pre class="programlisting"><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="returnvalue">GstDeviceMonitorFactory</span></a> *
-gst_device_monitor_get_factory (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Retrieves the factory that was used to create this device monitor.</p>
-<div class="refsect3">
-<a name="id-1.4.3.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>monitor</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> to request the device monitor factory of.</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.3.8.12.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> used for creating this
-device monitor. no refcounting is needed. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-device-monitor-register"></a><h3>gst_device_monitor_register ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_device_monitor_register (<em class="parameter"><code><a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> *plugin</code></em>,
-                             <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
-                             <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> rank</code></em>,
-                             <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>);</pre>
-<p>Create a new device monitorfactory capable of instantiating objects of the
-<em class="parameter"><code>type</code></em>
- and add the factory to <em class="parameter"><code>plugin</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.4.3.8.13.5"></a><h4>Parameters</h4>
+<a name="id-1.4.2.8.4.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -638,32 +304,64 @@
 </colgroup>
 <tbody>
 <tr>
-<td class="parameter_name"><p>plugin</p></td>
-<td class="parameter_description"><p> <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> to register the device monitor with, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for
-a static device monitor. </p></td>
+<td class="parameter_name"><p>monitor</p></td>
+<td class="parameter_description"><p>a device monitor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>classes</p></td>
+<td class="parameter_description"><p>device classes to use as filter or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for any class</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>caps</p></td>
+<td class="parameter_description"><p> the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> to filter or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for ANY. </p></td>
 <td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.2.8.4.7"></a><h4>Returns</h4>
+<p> The id of the new filter or <code class="literal">0</code> if no provider matched the filter's
+classes.</p>
+<p></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-monitor-remove-filter"></a><h3>gst_device_monitor_remove_filter ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_device_monitor_remove_filter (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>,
+                                  <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> filter_id</code></em>);</pre>
+<p>Removes a filter from the <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> using the id that was returned
+by <a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-add-filter" title="gst_device_monitor_add_filter ()"><code class="function">gst_device_monitor_add_filter()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.4.2.8.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
 <tr>
-<td class="parameter_name"><p>name</p></td>
-<td class="parameter_description"><p>name of device monitors of this type</p></td>
+<td class="parameter_name"><p>monitor</p></td>
+<td class="parameter_description"><p>a device monitor</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
-<td class="parameter_name"><p>rank</p></td>
-<td class="parameter_description"><p>rank of device monitor (higher rank means more importance when autoplugging)</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>type</p></td>
-<td class="parameter_description"><p>GType of device monitor to register</p></td>
+<td class="parameter_name"><p>filter_id</p></td>
+<td class="parameter_description"><p>the id of the filter</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.3.8.13.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, if the registering succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on error</p>
+<a name="id-1.4.2.8.5.6"></a><h4>Returns</h4>
+<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> of the filter id was valid, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</p>
 <p></p>
 </div>
 <p class="since">Since 1.4</p>
@@ -673,15 +371,11 @@
 <a name="gst-device-monitor-start"></a><h3>gst_device_monitor_start ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_device_monitor_start (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Starts monitoring the devices. This will cause <span class="type">GST_MESSAGE_DEVICE</span> messages
-to be posted on the monitor's bus when devices are added or removed from
-the system.</p>
-<p>Since the <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> is a singleton,
-<a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-start" title="gst_device_monitor_start ()"><code class="function">gst_device_monitor_start()</code></a> may already have been called by another
-user of the object, <a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-stop" title="gst_device_monitor_stop ()"><code class="function">gst_device_monitor_stop()</code></a> needs to be called the same
-number of times.</p>
+<p>Starts monitoring the devices, one this has succeeded, the
+<a class="link" href="GstMessage.html#GST-MESSAGE-DEVICE-ADDED:CAPS"><code class="literal">GST_MESSAGE_DEVICE_ADDED</code></a> and <a class="link" href="GstMessage.html#GST-MESSAGE-DEVICE-REMOVED:CAPS"><code class="literal">GST_MESSAGE_DEVICE_REMOVED</code></a> messages
+will be emitted on the bus when the list of devices changes.</p>
 <div class="refsect3">
-<a name="id-1.4.3.8.14.6"></a><h4>Parameters</h4>
+<a name="id-1.4.2.8.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -696,7 +390,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.4.3.8.14.7"></a><h4>Returns</h4>
+<a name="id-1.4.2.8.6.6"></a><h4>Returns</h4>
 <p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device monitoring could be started</p>
 <p></p>
 </div>
@@ -707,11 +401,9 @@
 <a name="gst-device-monitor-stop"></a><h3>gst_device_monitor_stop ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_device_monitor_stop (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Decreases the use-count by one. If the use count reaches zero, this
-<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> will stop monitoring the devices. This needs to be
-called the same number of times that <a class="link" href="gstreamer-GstDeviceMonitor.html#gst-device-monitor-start" title="gst_device_monitor_start ()"><code class="function">gst_device_monitor_start()</code></a> was called.</p>
+<p>Stops monitoring the devices.</p>
 <div class="refsect3">
-<a name="id-1.4.3.8.15.5"></a><h4>Parameters</h4>
+<a name="id-1.4.2.8.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -720,46 +412,66 @@
 </colgroup>
 <tbody><tr>
 <td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
+<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr></tbody>
 </table></div>
 </div>
 <p class="since">Since 1.4</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-monitor-get-devices"></a><h3>gst_device_monitor_get_devices ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_device_monitor_get_devices (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> *monitor</code></em>);</pre>
+<p>Gets a list of devices from all of the relevant monitors. This may actually
+probe the hardware if the monitor is not currently started.</p>
+<div class="refsect3">
+<a name="id-1.4.2.8.8.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>monitor</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.2.8.8.6"></a><h4>Returns</h4>
+<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+<a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstDevice]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gstreamer-GstDeviceMonitor.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstDeviceMonitor"></a><h3>struct GstDeviceMonitor</h3>
 <pre class="programlisting">struct GstDeviceMonitor {
-  GstObject         parent;
-
-  /* Protected by the Object lock */
-  GList *devices;
+  GstObject                parent;
 };
 </pre>
-<p>The structure of the base <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p>
+<p>Opaque device monitor object structure.</p>
 <div class="refsect3">
-<a name="id-1.4.3.9.2.5"></a><h4>Members</h4>
+<a name="id-1.4.2.9.2.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
 <col width="200px" class="struct_members_annotations">
 </colgroup>
-<tbody>
-<tr>
+<tbody><tr>
 <td class="struct_member_name"><p><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> <em class="structfield"><code><a name="GstDeviceMonitor.parent"></a>parent</code></em>;</p></td>
-<td class="struct_member_description"><p>The parent <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a></p></td>
+<td class="struct_member_description"><p>the parent <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> structure</p></td>
 <td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *<em class="structfield"><code><a name="GstDeviceMonitor.devices"></a>devices</code></em>;</p></td>
-<td class="struct_member_description"><p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of the <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> objects</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-</tbody>
+</tr></tbody>
 </table></div>
 </div>
 <p class="since">Since 1.4</p>
@@ -768,56 +480,23 @@
 <div class="refsect2">
 <a name="GstDeviceMonitorClass"></a><h3>struct GstDeviceMonitorClass</h3>
 <pre class="programlisting">struct GstDeviceMonitorClass {
-  GstObjectClass    parent_class;
-
-  GstDeviceMonitorFactory     *factory;
-
-  GList*      (*probe) (GstDeviceMonitor * monitor);
-
-  gboolean    (*start) (GstDeviceMonitor * monitor);
-  void        (*stop)  (GstDeviceMonitor * monitor);
+  GstObjectClass           parent_class;
 };
 </pre>
-<p>The structure of the base <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass" title="struct GstDeviceMonitorClass"><span class="type">GstDeviceMonitorClass</span></a></p>
+<p>Opaque device monitor class structure.</p>
 <div class="refsect3">
-<a name="id-1.4.3.9.3.5"></a><h4>Members</h4>
+<a name="id-1.4.2.9.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
 <col class="struct_members_description">
 <col width="200px" class="struct_members_annotations">
 </colgroup>
-<tbody>
-<tr>
+<tbody><tr>
 <td class="struct_member_name"><p><a class="link" href="GstObject.html#GstObjectClass" title="struct GstObjectClass"><span class="type">GstObjectClass</span></a> <em class="structfield"><code><a name="GstDeviceMonitorClass.parent-class"></a>parent_class</code></em>;</p></td>
 <td class="struct_member_description"><p>the parent <a class="link" href="GstObject.html#GstObjectClass" title="struct GstObjectClass"><span class="type">GstObjectClass</span></a> structure</p></td>
 <td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> *<em class="structfield"><code><a name="GstDeviceMonitorClass.factory"></a>factory</code></em>;</p></td>
-<td class="struct_member_description"><p>a pointer to the <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory"><span class="type">GstDeviceMonitorFactory</span></a> that creates this
-monitor</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><em class="structfield"><code><a name="GstDeviceMonitorClass.probe"></a>probe</code></em> ()</p></td>
-<td class="struct_member_description"><p>Returns a list of devices that are currently available.
-This should never block.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><em class="structfield"><code><a name="GstDeviceMonitorClass.start"></a>start</code></em> ()</p></td>
-<td class="struct_member_description"><p>Starts monitoring for new devices. Only subclasses that can know
-that devices have been added or remove need to implement this method.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-<tr>
-<td class="struct_member_name"><p><em class="structfield"><code><a name="GstDeviceMonitorClass.stop"></a>stop</code></em> ()</p></td>
-<td class="struct_member_description"><p>Stops monitoring for new devices. Only subclasses that implement
-the <code class="function">start()</code> method need to implement this method.</p></td>
-<td class="struct_member_annotations"> </td>
-</tr>
-</tbody>
+</tr></tbody>
 </table></div>
 </div>
 <p class="since">Since 1.4</p>
@@ -825,7 +504,7 @@
 </div>
 <div class="refsect1">
 <a name="gstreamer-GstDeviceMonitor.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>, <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a></p>
+<p><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>, <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/gst/html/gstreamer-GstDeviceProvider.html b/docs/gst/html/gstreamer-GstDeviceProvider.html
new file mode 100644
index 0000000..ec8033c
--- /dev/null
+++ b/docs/gst/html/gstreamer-GstDeviceProvider.html
@@ -0,0 +1,817 @@
+<!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: GstDeviceProvider</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="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
+<link rel="prev" href="gstreamer-GstDevice.html" title="GstDevice">
+<link rel="next" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">
+<meta name="generator" content="GTK-Doc V1.20 (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="10"><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-GstDeviceProvider.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
+                  <a href="#gstreamer-GstDeviceProvider.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="gstreamer-device-probing.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gstreamer-GstDevice.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GstDeviceProviderFactory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gstreamer-GstDeviceProvider"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gstreamer-GstDeviceProvider.top_of_page"></a>GstDeviceProvider</span></h2>
+<p>GstDeviceProvider — A device provider</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-can-monitor" title="gst_device_provider_can_monitor ()">gst_device_provider_can_monitor</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-GstDeviceProvider.html#gst-device-provider-class-add-metadata" title="gst_device_provider_class_add_metadata ()">gst_device_provider_class_add_metadata</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-GstDeviceProvider.html#gst-device-provider-class-add-static-metadata" title="gst_device_provider_class_add_static_metadata ()">gst_device_provider_class_add_static_metadata</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-get-metadata" title="gst_device_provider_class_get_metadata ()">gst_device_provider_class_get_metadata</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-GstDeviceProvider.html#gst-device-provider-class-set-metadata" title="gst_device_provider_class_set_metadata ()">gst_device_provider_class_set_metadata</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-GstDeviceProvider.html#gst-device-provider-class-set-static-metadata" title="gst_device_provider_class_set_static_metadata ()">gst_device_provider_class_set_static_metadata</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-GstDeviceProvider.html#gst-device-provider-device-add" title="gst_device_provider_device_add ()">gst_device_provider_device_add</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-GstDeviceProvider.html#gst-device-provider-device-remove" title="gst_device_provider_device_remove ()">gst_device_provider_device_remove</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstBus.html" title="GstBus"><span class="returnvalue">GstBus</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-get-bus" title="gst_device_provider_get_bus ()">gst_device_provider_get_bus</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-get-devices" title="gst_device_provider_get_devices ()">gst_device_provider_get_devices</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="returnvalue">GstDeviceProviderFactory</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-get-factory" title="gst_device_provider_get_factory ()">gst_device_provider_get_factory</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-register" title="gst_device_provider_register ()">gst_device_provider_register</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-start" title="gst_device_provider_start ()">gst_device_provider_start</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-GstDeviceProvider.html#gst-device-provider-stop" title="gst_device_provider_stop ()">gst_device_provider_stop</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider">GstDeviceProvider</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass">GstDeviceProviderClass</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">
+</pre>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/gst.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.description"></a><h2>Description</h2>
+<p>A <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> subclass is provided by a plugin that handles devices
+if there is a way to programatically list connected devices. It can also
+optionally provide updates to the list of connected devices.</p>
+<p>Each <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> subclass is a singleton, a plugin should
+normally provide a single subclass for all devices.</p>
+<p>Applications would normally use a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> to monitor devices
+from all relevant providers.</p>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-device-provider-can-monitor"></a><h3>gst_device_provider_can_monitor ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_device_provider_can_monitor (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-class-add-metadata"></a><h3>gst_device_provider_class_add_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_device_provider_class_add_metadata
+                               (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a> *klass</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>Set <em class="parameter"><code>key</code></em>
+ with <em class="parameter"><code>value</code></em>
+ as metadata in <em class="parameter"><code>klass</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.3.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>klass</p></td>
+<td class="parameter_description"><p>class to set metadata for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>the key to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>the value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-class-add-static-metadata"></a><h3>gst_device_provider_class_add_static_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_device_provider_class_add_static_metadata
+                               (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a> *klass</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>Set <em class="parameter"><code>key</code></em>
+ with <em class="parameter"><code>value</code></em>
+ as metadata in <em class="parameter"><code>klass</code></em>
+.</p>
+<p>Same as <a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-add-metadata" title="gst_device_provider_class_add_metadata ()"><code class="function">gst_device_provider_class_add_metadata()</code></a>, but <em class="parameter"><code>value</code></em>
+ must be a static string
+or an inlined string, as it will not be copied. (GStreamer plugins will
+be made resident once loaded, so this function can be used even from
+dynamically loaded plugins.)</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.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>klass</p></td>
+<td class="parameter_description"><p>class to set metadata for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>the key to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p>the value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-class-get-metadata"></a><h3>gst_device_provider_class_get_metadata ()</h3>
+<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_device_provider_class_get_metadata
+                               (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a> *klass</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *key</code></em>);</pre>
+<p>Get metadata with <em class="parameter"><code>key</code></em>
+ in <em class="parameter"><code>klass</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.5.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>klass</p></td>
+<td class="parameter_description"><p>class to get metadata for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key</p></td>
+<td class="parameter_description"><p>the key to get</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.4.8.5.6"></a><h4>Returns</h4>
+<p> the metadata for <em class="parameter"><code>key</code></em>
+.</p>
+<p></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-class-set-metadata"></a><h3>gst_device_provider_class_set_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_device_provider_class_set_metadata
+                               (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a> *klass</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *longname</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classification</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *author</code></em>);</pre>
+<p>Sets the detailed information for a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a>.</p>
+<div class="note">This function is for use in _class_init functions only.</div>
+<div class="refsect3">
+<a name="id-1.4.4.8.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>klass</p></td>
+<td class="parameter_description"><p>class to set metadata for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>longname</p></td>
+<td class="parameter_description"><p>The long English name of the device provider. E.g. "File Sink"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>classification</p></td>
+<td class="parameter_description"><p>String describing the type of device provider, as an
+unordered list separated with slashes ('/'). See draft-klass.txt of the
+design docs
+for more details and common types. E.g: "Sink/File"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>description</p></td>
+<td class="parameter_description"><p>Sentence describing the purpose of the device provider.
+E.g: "Write stream to a file"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>author</p></td>
+<td class="parameter_description"><p>Name and contact details of the author(s). Use \n to separate
+multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-class-set-static-metadata"></a><h3>gst_device_provider_class_set_static_metadata ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_device_provider_class_set_static_metadata
+                               (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a> *klass</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *longname</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classification</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *description</code></em>,
+                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *author</code></em>);</pre>
+<p>Sets the detailed information for a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a>.</p>
+<div class="note">This function is for use in _class_init functions only.</div>
+<p>Same as <a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-class-set-metadata" title="gst_device_provider_class_set_metadata ()"><code class="function">gst_device_provider_class_set_metadata()</code></a>, but <em class="parameter"><code>longname</code></em>
+, <em class="parameter"><code>classification</code></em>
+,
+<em class="parameter"><code>description</code></em>
+, and <em class="parameter"><code>author</code></em>
+ must be static strings or inlined strings, as
+they will not be copied. (GStreamer plugins will be made resident once
+loaded, so this function can be used even from dynamically loaded plugins.)</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.7.7"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>klass</p></td>
+<td class="parameter_description"><p>class to set metadata for</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>longname</p></td>
+<td class="parameter_description"><p>The long English name of the element. E.g. "File Sink"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>classification</p></td>
+<td class="parameter_description"><p>String describing the type of element, as an unordered list
+separated with slashes ('/'). See draft-klass.txt of the design docs
+for more details and common types. E.g: "Sink/File"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>description</p></td>
+<td class="parameter_description"><p>Sentence describing the purpose of the element.
+E.g: "Write stream to a file"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>author</p></td>
+<td class="parameter_description"><p>Name and contact details of the author(s). Use \n to separate
+multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-device-add"></a><h3>gst_device_provider_device_add ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_device_provider_device_add (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>,
+                                <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
+<p>Posts a message on the provider's <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> to inform applications that
+a new device has been added.</p>
+<p>This is for use by subclasses.</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.8.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>provider</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>device</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> that has been added. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-device-remove"></a><h3>gst_device_provider_device_remove ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_device_provider_device_remove (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>,
+                                   <em class="parameter"><code><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> *device</code></em>);</pre>
+<p>Posts a message on the provider's <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> to inform applications that
+a device has been removed.</p>
+<p>This is for use by subclasses.</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.9.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>provider</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>device</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> that has been removed</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-get-bus"></a><h3>gst_device_provider_get_bus ()</h3>
+<pre class="programlisting"><a class="link" href="GstBus.html" title="GstBus"><span class="returnvalue">GstBus</span></a> *
+gst_device_provider_get_bus (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>);</pre>
+<p>Gets the <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> of this <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p>
+<div class="refsect3">
+<a name="id-1.4.4.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>provider</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.4.8.10.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-get-devices"></a><h3>gst_device_provider_get_devices ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_device_provider_get_devices (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>);</pre>
+<p>Gets a list of devices that this provider understands. This may actually
+probe the hardware if the provider is not currently started.</p>
+<div class="refsect3">
+<a name="id-1.4.4.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>provider</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.4.8.11.6"></a><h4>Returns</h4>
+<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+<a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstDevice]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-get-factory"></a><h3>gst_device_provider_get_factory ()</h3>
+<pre class="programlisting"><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="returnvalue">GstDeviceProviderFactory</span></a> *
+gst_device_provider_get_factory (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>);</pre>
+<p>Retrieves the factory that was used to create this device provider.</p>
+<div class="refsect3">
+<a name="id-1.4.4.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>provider</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> to request the device provider factory of.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.4.8.12.6"></a><h4>Returns</h4>
+<p> the <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> used for
+creating this device provider. no refcounting is needed. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-register"></a><h3>gst_device_provider_register ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_device_provider_register (<em class="parameter"><code><a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> *plugin</code></em>,
+                              <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+                              <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> rank</code></em>,
+                              <em class="parameter"><code><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> type</code></em>);</pre>
+<p>Create a new device providerfactory capable of instantiating objects of the
+<em class="parameter"><code>type</code></em>
+ and add the factory to <em class="parameter"><code>plugin</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.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>plugin</p></td>
+<td class="parameter_description"><p> <a class="link" href="GstPlugin.html" title="GstPlugin"><span class="type">GstPlugin</span></a> to register the device provider with, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for
+a static device provider. </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>name</p></td>
+<td class="parameter_description"><p>name of device providers of this type</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rank</p></td>
+<td class="parameter_description"><p>rank of device provider (higher rank means more importance when autoplugging)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>type</p></td>
+<td class="parameter_description"><p>GType of device provider to register</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.4.8.13.6"></a><h4>Returns</h4>
+<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, if the registering succeeded, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on error</p>
+<p></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-start"></a><h3>gst_device_provider_start ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_device_provider_start (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>);</pre>
+<p>Starts providering the devices. This will cause <span class="type">GST_MESSAGE_DEVICE</span> messages
+to be posted on the provider's bus when devices are added or removed from
+the system.</p>
+<p>Since the <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> is a singleton,
+<a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-start" title="gst_device_provider_start ()"><code class="function">gst_device_provider_start()</code></a> may already have been called by another
+user of the object, <a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-stop" title="gst_device_provider_stop ()"><code class="function">gst_device_provider_stop()</code></a> needs to be called the same
+number of times.</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.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>provider</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.4.4.8.14.7"></a><h4>Returns</h4>
+<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device providering could be started</p>
+<p></p>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-device-provider-stop"></a><h3>gst_device_provider_stop ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_device_provider_stop (<em class="parameter"><code><a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> *provider</code></em>);</pre>
+<p>Decreases the use-count by one. If the use count reaches zero, this
+<a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a> will stop providering the devices. This needs to be
+called the same number of times that <a class="link" href="gstreamer-GstDeviceProvider.html#gst-device-provider-start" title="gst_device_provider_start ()"><code class="function">gst_device_provider_start()</code></a> was called.</p>
+<div class="refsect3">
+<a name="id-1.4.4.8.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>provider</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstDeviceProvider"></a><h3>struct GstDeviceProvider</h3>
+<pre class="programlisting">struct GstDeviceProvider {
+  GstObject         parent;
+
+  /* Protected by the Object lock */
+  GList *devices;
+};
+</pre>
+<p>The structure of the base <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProvider" title="struct GstDeviceProvider"><span class="type">GstDeviceProvider</span></a></p>
+<div class="refsect3">
+<a name="id-1.4.4.9.2.5"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> <em class="structfield"><code><a name="GstDeviceProvider.parent"></a>parent</code></em>;</p></td>
+<td class="struct_member_description"><p>The parent <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *<em class="structfield"><code><a name="GstDeviceProvider.devices"></a>devices</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of the <a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a> objects</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstDeviceProviderClass"></a><h3>struct GstDeviceProviderClass</h3>
+<pre class="programlisting">struct GstDeviceProviderClass {
+  GstObjectClass    parent_class;
+
+  GstDeviceProviderFactory     *factory;
+
+  GList*      (*probe) (GstDeviceProvider * provider);
+
+  gboolean    (*start) (GstDeviceProvider * provider);
+  void        (*stop)  (GstDeviceProvider * provider);
+};
+</pre>
+<p>The structure of the base <a class="link" href="gstreamer-GstDeviceProvider.html#GstDeviceProviderClass" title="struct GstDeviceProviderClass"><span class="type">GstDeviceProviderClass</span></a></p>
+<div class="refsect3">
+<a name="id-1.4.4.9.3.5"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstObject.html#GstObjectClass" title="struct GstObjectClass"><span class="type">GstObjectClass</span></a> <em class="structfield"><code><a name="GstDeviceProviderClass.parent-class"></a>parent_class</code></em>;</p></td>
+<td class="struct_member_description"><p>the parent <a class="link" href="GstObject.html#GstObjectClass" title="struct GstObjectClass"><span class="type">GstObjectClass</span></a> structure</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> *<em class="structfield"><code><a name="GstDeviceProviderClass.factory"></a>factory</code></em>;</p></td>
+<td class="struct_member_description"><p>a pointer to the <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory"><span class="type">GstDeviceProviderFactory</span></a> that creates this
+provider</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstDeviceProviderClass.probe"></a>probe</code></em> ()</p></td>
+<td class="struct_member_description"><p>Returns a list of devices that are currently available.
+This should never block.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstDeviceProviderClass.start"></a>start</code></em> ()</p></td>
+<td class="struct_member_description"><p>Starts monitoring for new devices. Only subclasses that can know
+that devices have been added or remove need to implement this method.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstDeviceProviderClass.stop"></a>stop</code></em> ()</p></td>
+<td class="struct_member_description"><p>Stops monitoring for new devices. Only subclasses that implement
+the <code class="function">start()</code> method need to implement this method.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since 1.4</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gstreamer-GstDeviceProvider.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>, <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.20</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/gst/html/gstreamer-GstFormat.html b/docs/gst/html/gstreamer-GstFormat.html
index 29b6001..b7c5508 100644
--- a/docs/gst/html/gstreamer-GstFormat.html
+++ b/docs/gst/html/gstreamer-GstFormat.html
@@ -164,9 +164,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.25.8.2.6"></a><h4>Returns</h4>
-<p> a reference to the static name of the format or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
-the format is unknown.</p>
-<p></p>
+<p> a reference to the static name of the format
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the format is unknown. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -323,9 +323,10 @@
 <div class="refsect3">
 <a name="id-1.3.25.8.7.6"></a><h4>Returns</h4>
 <p> The <a class="link" href="gstreamer-GstFormat.html#GstFormatDefinition" title="struct GstFormatDefinition"><span class="type">GstFormatDefinition</span></a> for <em class="parameter"><code>format</code></em>
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure.</p>
-<p>MT safe.</p>
-<p></p>
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+on failure.</p>
+<p>MT safe. </p>
+<p><span class="annotation">[nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/gstreamer-GstGlobalDeviceMonitor.html b/docs/gst/html/gstreamer-GstGlobalDeviceMonitor.html
deleted file mode 100644
index 4647794..0000000
--- a/docs/gst/html/gstreamer-GstGlobalDeviceMonitor.html
+++ /dev/null
@@ -1,468 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer 1.0 Core Reference Manual: GstGlobalDeviceMonitor</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="gstreamer-device-probing.html" title="GStreamer Device Discovery and Device Probing">
-<link rel="prev" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">
-<link rel="next" href="gstreamer-support.html" title="GStreamer Core Support">
-<meta name="generator" content="GTK-Doc V1.20 (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="10"><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-GstGlobalDeviceMonitor.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 
-                  <a href="#gstreamer-GstGlobalDeviceMonitor.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
-</td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
-<td><a accesskey="u" href="gstreamer-device-probing.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GstDeviceMonitorFactory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gstreamer-support.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="refentry">
-<a name="gstreamer-GstGlobalDeviceMonitor"></a><div class="titlepage"></div>
-<div class="refnamediv"><table width="100%"><tr>
-<td valign="top">
-<h2><span class="refentrytitle"><a name="gstreamer-GstGlobalDeviceMonitor.top_of_page"></a>GstGlobalDeviceMonitor</span></h2>
-<p>GstGlobalDeviceMonitor — A global device monitor and prober</p>
-</td>
-<td class="gallery_image" valign="top" align="right"></td>
-</tr></table></div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="functions_return">
-<col class="functions_name">
-</colgroup>
-<tbody>
-<tr>
-<td class="function_type">
-<a class="link" href="GstBus.html" title="GstBus"><span class="returnvalue">GstBus</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-bus" title="gst_global_device_monitor_get_bus ()">gst_global_device_monitor_get_bus</a> <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">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-caps-filter" title="gst_global_device_monitor_get_caps_filter ()">gst_global_device_monitor_get_caps_filter</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-classes-filter" title="gst_global_device_monitor_get_classes_filter ()">gst_global_device_monitor_get_classes_filter</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-devices" title="gst_global_device_monitor_get_devices ()">gst_global_device_monitor_get_devices</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="returnvalue">GstGlobalDeviceMonitor</span></a> *
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-new" title="gst_global_device_monitor_new ()">gst_global_device_monitor_new</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-caps-filter" title="gst_global_device_monitor_set_caps_filter ()">gst_global_device_monitor_set_caps_filter</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-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-classes-filter" title="gst_global_device_monitor_set_classes_filter ()">gst_global_device_monitor_set_classes_filter</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-start" title="gst_global_device_monitor_start ()">gst_global_device_monitor_start</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-GstGlobalDeviceMonitor.html#gst-global-device-monitor-stop" title="gst_global_device_monitor_stop ()">gst_global_device_monitor_stop</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor">GstGlobalDeviceMonitor</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitorClass" title="struct GstGlobalDeviceMonitorClass">GstGlobalDeviceMonitorClass</a></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">
-</pre>
-</div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.includes"></a><h2>Includes</h2>
-<pre class="synopsis">#include &lt;gst/gst.h&gt;
-</pre>
-</div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.description"></a><h2>Description</h2>
-<p>Applications should create a <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> when they want
-to probe, list and monitor devices of a specific type. The
-<a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> will create the appropriate
-<a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a> objects and manage them. It will then post
-messages on its <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> for devices that have been added and
-removed.</p>
-</div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.functions_details"></a><h2>Functions</h2>
-<div class="refsect2">
-<a name="gst-global-device-monitor-get-bus"></a><h3>gst_global_device_monitor_get_bus ()</h3>
-<pre class="programlisting"><a class="link" href="GstBus.html" title="GstBus"><span class="returnvalue">GstBus</span></a> *
-gst_global_device_monitor_get_bus (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Gets the <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a> of this <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a></p>
-<div class="refsect3">
-<a name="id-1.4.5.8.2.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.5.8.2.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="GstBus.html" title="GstBus"><span class="type">GstBus</span></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-get-caps-filter"></a><h3>gst_global_device_monitor_get_caps_filter ()</h3>
-<pre class="programlisting"><a class="link" href="GstCaps.html" title="GstCaps"><span class="returnvalue">GstCaps</span></a> *
-gst_global_device_monitor_get_caps_filter
-                               (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Get the <a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> filter set by <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-caps-filter" title="gst_global_device_monitor_set_caps_filter ()"><code class="function">gst_global_device_monitor_set_caps_filter()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.4.5.8.3.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>a global device monitor</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.5.8.3.6"></a><h4>Returns</h4>
-<p> the filter caps that are active (or ANY 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>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-get-classes-filter"></a><h3>gst_global_device_monitor_get_classes_filter ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_global_device_monitor_get_classes_filter
-                               (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Return the type (device classes) filter active for device filtering.</p>
-<div class="refsect3">
-<a name="id-1.4.5.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>monitor</p></td>
-<td class="parameter_description"><p>the global device monitor</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.5.8.4.6"></a><h4>Returns</h4>
-<p> string of device classes that are being filtered.</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-get-devices"></a><h3>gst_global_device_monitor_get_devices ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
-gst_global_device_monitor_get_devices (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Gets a list of devices from all of the relevant monitors. This may actually
-probe the hardware if the global monitor is not currently started.</p>
-<div class="refsect3">
-<a name="id-1.4.5.8.5.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.5.8.5.6"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
-<a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstDevice]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-new"></a><h3>gst_global_device_monitor_new ()</h3>
-<pre class="programlisting"><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="returnvalue">GstGlobalDeviceMonitor</span></a> *
-gst_global_device_monitor_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
-<p>Create a new <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a></p>
-<div class="refsect3">
-<a name="id-1.4.5.8.6.5"></a><h4>Returns</h4>
-<p> a new global device monitor. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-set-caps-filter"></a><h3>gst_global_device_monitor_set_caps_filter ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_global_device_monitor_set_caps_filter
-                               (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>,
-                                <em class="parameter"><code><a class="link" href="GstCaps.html" title="GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
-<p>Set caps to use as filter for devices. By default ANY caps are used,
-meaning no caps filter is active.</p>
-<div class="refsect3">
-<a name="id-1.4.5.8.7.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>the global device monitor</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>caps</p></td>
-<td class="parameter_description"><p>caps to filter</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-set-classes-filter"></a><h3>gst_global_device_monitor_set_classes_filter ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_global_device_monitor_set_classes_filter
-                               (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>,
-                                <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *classes</code></em>);</pre>
-<p>Filter devices monitored by device class, e.g. in case you are only
-interested in a certain type of device like audio devices or
-video sources.</p>
-<div class="refsect3">
-<a name="id-1.4.5.8.8.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody>
-<tr>
-<td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>the global device monitor</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>classes</p></td>
-<td class="parameter_description"><p>device classes to use as filter</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-start"></a><h3>gst_global_device_monitor_start ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_global_device_monitor_start (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Starts monitoring the devices, one this has succeeded, the
-<a class="link" href="GstMessage.html#GST-MESSAGE-DEVICE-ADDED:CAPS"><code class="literal">GST_MESSAGE_DEVICE_ADDED</code></a> and <a class="link" href="GstMessage.html#GST-MESSAGE-DEVICE-REMOVED:CAPS"><code class="literal">GST_MESSAGE_DEVICE_REMOVED</code></a> messages
-will be emitted on the bus when the list of devices changes.</p>
-<div class="refsect3">
-<a name="id-1.4.5.8.9.5"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="parameters_name">
-<col class="parameters_description">
-<col width="200px" class="parameters_annotations">
-</colgroup>
-<tbody><tr>
-<td class="parameter_name"><p>monitor</p></td>
-<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.4.5.8.9.6"></a><h4>Returns</h4>
-<p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the device monitoring could be started</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-global-device-monitor-stop"></a><h3>gst_global_device_monitor_stop ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_global_device_monitor_stop (<em class="parameter"><code><a class="link" href="gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor" title="struct GstGlobalDeviceMonitor"><span class="type">GstGlobalDeviceMonitor</span></a> *monitor</code></em>);</pre>
-<p>Stops monitoring the devices.</p>
-<div class="refsect3">
-<a name="id-1.4.5.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>monitor</p></td>
-<td class="parameter_description"><p>A <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GstGlobalDeviceMonitor"></a><h3>struct GstGlobalDeviceMonitor</h3>
-<pre class="programlisting">struct GstGlobalDeviceMonitor {
-  GstObject                parent;
-};
-</pre>
-<p>Opaque global device monitor object structure.</p>
-<div class="refsect3">
-<a name="id-1.4.5.9.2.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="struct_members_name">
-<col class="struct_members_description">
-<col width="200px" class="struct_members_annotations">
-</colgroup>
-<tbody><tr>
-<td class="struct_member_name"><p><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> <em class="structfield"><code><a name="GstGlobalDeviceMonitor.parent"></a>parent</code></em>;</p></td>
-<td class="struct_member_description"><p>the parent <a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> structure</p></td>
-<td class="struct_member_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstGlobalDeviceMonitorClass"></a><h3>struct GstGlobalDeviceMonitorClass</h3>
-<pre class="programlisting">struct GstGlobalDeviceMonitorClass {
-  GstObjectClass           parent_class;
-};
-</pre>
-<p>Opaque global device monitor class structure.</p>
-<div class="refsect3">
-<a name="id-1.4.5.9.3.5"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="300px" class="struct_members_name">
-<col class="struct_members_description">
-<col width="200px" class="struct_members_annotations">
-</colgroup>
-<tbody><tr>
-<td class="struct_member_name"><p><a class="link" href="GstObject.html#GstObjectClass" title="struct GstObjectClass"><span class="type">GstObjectClass</span></a> <em class="structfield"><code><a name="GstGlobalDeviceMonitorClass.parent-class"></a>parent_class</code></em>;</p></td>
-<td class="struct_member_description"><p>the parent <a class="link" href="GstObject.html#GstObjectClass" title="struct GstObjectClass"><span class="type">GstObjectClass</span></a> structure</p></td>
-<td class="struct_member_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-</div>
-<div class="refsect1">
-<a name="gstreamer-GstGlobalDeviceMonitor.see-also"></a><h2>See Also</h2>
-<p><a class="link" href="gstreamer-GstDevice.html#GstDevice" title="struct GstDevice"><span class="type">GstDevice</span></a>, <a class="link" href="gstreamer-GstDeviceMonitor.html#GstDeviceMonitor" title="struct GstDeviceMonitor"><span class="type">GstDeviceMonitor</span></a></p>
-</div>
-</div>
-<div class="footer">
-<hr>
-          Generated by GTK-Doc V1.20</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/gst/html/gstreamer-GstInfo.html b/docs/gst/html/gstreamer-GstInfo.html
index 870d8cf..69a5724 100644
--- a/docs/gst/html/gstreamer-GstInfo.html
+++ b/docs/gst/html/gstreamer-GstInfo.html
@@ -731,8 +731,8 @@
 </colgroup>
 <tbody><tr>
 <td class="parameter_name"><p>str</p></td>
-<td class="parameter_description"><p>The string to check.</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> The string to check. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr></tbody>
 </table></div>
 </div>
diff --git a/docs/gst/html/gstreamer-GstMeta.html b/docs/gst/html/gstreamer-GstMeta.html
index 08771dd..cdd40e0 100644
--- a/docs/gst/html/gstreamer-GstMeta.html
+++ b/docs/gst/html/gstreamer-GstMeta.html
@@ -674,9 +674,9 @@
 <div class="refsect3">
 <a name="id-1.3.30.8.15.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gstreamer-GstMeta.html#GstMetaInfo" title="struct GstMetaInfo"><span class="type">GstMetaInfo</span></a> with <em class="parameter"><code>impl</code></em>
-, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when no such
-metainfo exists. </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>
+, or
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when no such metainfo exists. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/gstreamer-GstMiniObject.html b/docs/gst/html/gstreamer-GstMiniObject.html
index c0dc9dd..ce411db 100644
--- a/docs/gst/html/gstreamer-GstMiniObject.html
+++ b/docs/gst/html/gstreamer-GstMiniObject.html
@@ -1110,8 +1110,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.31.8.27.6"></a><h4>Returns</h4>
-<p> The user data pointer set, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
+<p> The user data pointer set, or
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1148,8 +1149,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.31.8.28.6"></a><h4>Returns</h4>
-<p> The user data pointer set, or <a href="http://library.gnome.org/devel/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>
+<p> The user data pointer set, or
+<a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1177,14 +1179,14 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>olddata</p></td>
-<td class="parameter_description"><p> pointer to a pointer to a mini-object to
-be replaced. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p> pointer to a pointer to a
+mini-object to be replaced. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for input and for returning results. Default is transfer full."><span class="acronym">inout</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>newdata</p></td>
-<td class="parameter_description"><p>pointer to new mini-object</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> pointer to new mini-object. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
diff --git a/docs/gst/html/gstreamer-GstParse.html b/docs/gst/html/gstreamer-GstParse.html
index 82dc026..2e3e55b 100644
--- a/docs/gst/html/gstreamer-GstParse.html
+++ b/docs/gst/html/gstreamer-GstParse.html
@@ -419,9 +419,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.36.9.7.6"></a><h4>Returns</h4>
-<p> a newly-created bin,
-or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error occurred. </p>
-<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> Gst.Bin]</span></p>
+<p> a
+newly-created bin, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error occurred. </p>
+<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>][<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> Gst.Bin][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/gstreamer-GstPoll.html b/docs/gst/html/gstreamer-GstPoll.html
index 6d7981d..0695c6d 100644
--- a/docs/gst/html/gstreamer-GstPoll.html
+++ b/docs/gst/html/gstreamer-GstPoll.html
@@ -645,9 +645,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.40.8.12.7"></a><h4>Returns</h4>
-<p> a new <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error.
-Free with <a class="link" href="gstreamer-GstPoll.html#gst-poll-free" title="gst_poll_free ()"><code class="function">gst_poll_free()</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>
+<p> a new <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error.  Free with <a class="link" href="gstreamer-GstPoll.html#gst-poll-free" title="gst_poll_free ()"><code class="function">gst_poll_free()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -662,9 +662,9 @@
 <p>Free-function: gst_poll_free</p>
 <div class="refsect3">
 <a name="id-1.3.40.8.13.7"></a><h4>Returns</h4>
-<p> a new <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in case of an error.
-Free with <a class="link" href="gstreamer-GstPoll.html#gst-poll-free" title="gst_poll_free ()"><code class="function">gst_poll_free()</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>
+<p> a new <a class="link" href="gstreamer-GstPoll.html#GstPoll" title="GstPoll"><span class="type">GstPoll</span></a>, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> in
+case of an error.  Free with <a class="link" href="gstreamer-GstPoll.html#gst-poll-free" title="gst_poll_free ()"><code class="function">gst_poll_free()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/gstreamer-GstTocSetter.html b/docs/gst/html/gstreamer-GstTocSetter.html
index ba9eb04..2e02eda 100644
--- a/docs/gst/html/gstreamer-GstTocSetter.html
+++ b/docs/gst/html/gstreamer-GstTocSetter.html
@@ -167,9 +167,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.52.8.3.6"></a><h4>Returns</h4>
-<p> TOC set, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Unref with <a class="link" href="GstToc.html#gst-toc-unref" title="gst_toc_unref()"><code class="function">gst_toc_unref()</code></a>
-when no longer needed. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> TOC set, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. Unref with
+<a class="link" href="GstToc.html#gst-toc-unref" title="gst_toc_unref()"><code class="function">gst_toc_unref()</code></a> when no longer needed. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/gstreamer-GstTypeFind.html b/docs/gst/html/gstreamer-GstTypeFind.html
index 4a6d6d1..eecb363 100644
--- a/docs/gst/html/gstreamer-GstTypeFind.html
+++ b/docs/gst/html/gstreamer-GstTypeFind.html
@@ -192,9 +192,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.53.8.3.6"></a><h4>Returns</h4>
-<p> the requested data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-if that data is not available. </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>
+<p> the
+requested data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if that data is not available. </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][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/gstreamer-GstUriHandler.html b/docs/gst/html/gstreamer-GstUriHandler.html
index 2dd0b09..45524b4 100644
--- a/docs/gst/html/gstreamer-GstUriHandler.html
+++ b/docs/gst/html/gstreamer-GstUriHandler.html
@@ -600,11 +600,13 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.55.9.14.6"></a><h4>Returns</h4>
-<p> the supported protocols.
-Returns <a href="http://library.gnome.org/devel/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 implemented properly, or the <em class="parameter"><code>handler</code></em>
-doesn't support any protocols. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span></p>
+<p> the
+supported protocols.  Returns <a href="http://library.gnome.org/devel/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
+implemented properly, or the <em class="parameter"><code>handler</code></em>
+doesn't support any
+protocols. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -630,11 +632,12 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.55.9.15.6"></a><h4>Returns</h4>
-<p> the URI currently handled by the <em class="parameter"><code>handler</code></em>
-.
-Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there are no URI currently handled. The
-returned string must be freed with <a href="http://library.gnome.org/devel/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>
+<p> the URI currently handled by
+the <em class="parameter"><code>handler</code></em>
+.  Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there are no URI currently
+handled. The returned string must be freed with <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/gst/html/gstreamer-GstUtils.html b/docs/gst/html/gstreamer-GstUtils.html
index cf6545f..000a253 100644
--- a/docs/gst/html/gstreamer-GstUtils.html
+++ b/docs/gst/html/gstreamer-GstUtils.html
@@ -2963,8 +2963,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.3.56.8.78.8"></a><h4>Returns</h4>
-<p> The address of the found element or <a href="http://library.gnome.org/devel/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>]</span></p>
+<p> The address of the found
+element or <a href="http://library.gnome.org/devel/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>][nullable]</span></p>
 </div>
 </div>
 </div>
diff --git a/docs/gst/html/gstreamer-GstValue.html b/docs/gst/html/gstreamer-GstValue.html
index beabfd8..7ed2d08 100644
--- a/docs/gst/html/gstreamer-GstValue.html
+++ b/docs/gst/html/gstreamer-GstValue.html
@@ -2931,7 +2931,7 @@
 <a name="id-1.3.57.8.77.7"></a><h4>Returns</h4>
 <p> the serialization for <em class="parameter"><code>value</code></em>
 or <a href="http://library.gnome.org/devel/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>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -3165,10 +3165,11 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>dest</p></td>
-<td class="parameter_description"><p> the destination value for the result if the
-subtraction is not empty. May be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, in which case the resulting set
-will not be computed, which can give a fair speedup. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Out parameter, where caller must allocate storage."><span class="acronym">out caller-allocates</span></acronym>]</span></td>
+<td class="parameter_description"><p> the destination value
+for the result if the subtraction is not empty. May be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>,
+in which case the resulting set will not be computed, which can
+give a fair speedup. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Out parameter, where caller must allocate storage."><span class="acronym">out caller-allocates</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>minuend</p></td>
@@ -3250,9 +3251,10 @@
 <tbody>
 <tr>
 <td class="parameter_name"><p>dest</p></td>
-<td class="parameter_description"><p> a uninitialized <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> that will hold the calculated
-intersection value. May be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the resulting set if not needed. </p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym title="Out parameter, where caller must allocate storage."><span class="acronym">out caller-allocates</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+<td class="parameter_description"><p>  a uninitialized <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> that will hold the calculated
+intersection value. May be <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the resulting set if not
+needed. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Out parameter, where caller must allocate storage."><span class="acronym">out caller-allocates</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>value1</p></td>
diff --git a/docs/gst/html/gstreamer-GstVersion.html b/docs/gst/html/gstreamer-GstVersion.html
index 6d0d122..b7fa1bd 100644
--- a/docs/gst/html/gstreamer-GstVersion.html
+++ b/docs/gst/html/gstreamer-GstVersion.html
@@ -104,7 +104,7 @@
 <hr>
 <div class="refsect2">
 <a name="GST-VERSION-MICRO:CAPS"></a><h3>GST_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_VERSION_MICRO (3)
+<pre class="programlisting">#define GST_VERSION_MICRO (90)
 </pre>
 <p>The micro version of GStreamer at compile time:</p>
 </div>
diff --git a/docs/gst/html/gstreamer-device-probing.html b/docs/gst/html/gstreamer-device-probing.html
index e17f19f..3fb1e83 100644
--- a/docs/gst/html/gstreamer-device-probing.html
+++ b/docs/gst/html/gstreamer-device-probing.html
@@ -7,7 +7,7 @@
 <link rel="home" href="index.html" title="GStreamer 1.0 Core Reference Manual">
 <link rel="up" href="index.html" title="GStreamer 1.0 Core Reference Manual">
 <link rel="prev" href="gstreamer-GstVersion.html" title="GstVersion">
-<link rel="next" href="gstreamer-GstDevice.html" title="GstDevice">
+<link rel="next" href="gstreamer-GstDeviceMonitor.html" title="GstDeviceMonitor">
 <meta name="generator" content="GTK-Doc V1.20 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -17,23 +17,23 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
 <td><a accesskey="p" href="gstreamer-GstVersion.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gstreamer-GstDevice.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gstreamer-GstDeviceMonitor.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h1 class="title">
 <a name="gstreamer-device-probing"></a>GStreamer Device Discovery and Device Probing</h1></div></div></div>
 <div class="toc"><dl class="toc">
 <dt>
-<span class="refentrytitle"><a href="gstreamer-GstDevice.html">GstDevice</a></span><span class="refpurpose"> — Object representing a device</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gstreamer-GstDeviceMonitor.html">GstDeviceMonitor</a></span><span class="refpurpose"> — A device monitor and prober</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstDeviceMonitorFactory.html">GstDeviceMonitorFactory</a></span><span class="refpurpose"> — Create GstDeviceMonitors from a factory</span>
+<span class="refentrytitle"><a href="gstreamer-GstDevice.html">GstDevice</a></span><span class="refpurpose"> — Object representing a device</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gstreamer-GstGlobalDeviceMonitor.html">GstGlobalDeviceMonitor</a></span><span class="refpurpose"> — A global device monitor and prober</span>
+<span class="refentrytitle"><a href="gstreamer-GstDeviceProvider.html">GstDeviceProvider</a></span><span class="refpurpose"> — A device provider</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstDeviceProviderFactory.html">GstDeviceProviderFactory</a></span><span class="refpurpose"> — Create GstDeviceProviders from a factory</span>
 </dt>
 </dl></div>
 </div>
diff --git a/docs/gst/html/gstreamer-hierarchy.html b/docs/gst/html/gstreamer-hierarchy.html
index bf059b8..a3edae0 100644
--- a/docs/gst/html/gstreamer-hierarchy.html
+++ b/docs/gst/html/gstreamer-hierarchy.html
@@ -34,7 +34,7 @@
             <span class="lineart">├──</span> <a class="link" href="GstPluginFeature.html" title="GstPluginFeature">GstPluginFeature</a>
             <span class="lineart">│</span>   <span class="lineart">├──</span> <a class="link" href="GstElementFactory.html" title="GstElementFactory">GstElementFactory</a>
             <span class="lineart">│</span>   <span class="lineart">├──</span> <a class="link" href="GstTypeFindFactory.html" title="GstTypeFindFactory">GstTypeFindFactory</a>
-            <span class="lineart">│</span>   <span class="lineart">╰──</span> <a class="link" href="GstDeviceMonitorFactory.html" title="GstDeviceMonitorFactory">GstDeviceMonitorFactory</a>
+            <span class="lineart">│</span>   <span class="lineart">╰──</span> <a class="link" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">GstDeviceProviderFactory</a>
             <span class="lineart">├──</span> <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
             <span class="lineart">│</span>   <span class="lineart">╰──</span> <a class="link" href="GstBin.html" title="GstBin">GstBin</a>
             <span class="lineart">│</span>       <span class="lineart">╰──</span> <a class="link" href="GstPipeline.html" title="GstPipeline">GstPipeline</a>
diff --git a/docs/gst/html/gstreamer-support.html b/docs/gst/html/gstreamer-support.html
index 8a16b85..10e9cff 100644
--- a/docs/gst/html/gstreamer-support.html
+++ b/docs/gst/html/gstreamer-support.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="index.html" title="GStreamer 1.0 Core Reference Manual">
-<link rel="prev" href="gstreamer-GstGlobalDeviceMonitor.html" title="GstGlobalDeviceMonitor">
+<link rel="prev" href="GstDeviceProviderFactory.html" title="GstDeviceProviderFactory">
 <link rel="next" href="gstreamer-GstInfo.html" title="GstInfo">
 <meta name="generator" content="GTK-Doc V1.20 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -16,7 +16,7 @@
 <td width="100%" align="left" class="shortcuts"></td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
-<td><a accesskey="p" href="gstreamer-GstGlobalDeviceMonitor.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="GstDeviceProviderFactory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gstreamer-GstInfo.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="chapter">
diff --git a/docs/gst/html/index.html b/docs/gst/html/index.html
index 7005ffe..ca88beb 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.3.3)
+      for GStreamer Core 1.0 (1.3.90)
       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>
@@ -223,16 +223,16 @@
 <dt><span class="chapter"><a href="gstreamer-device-probing.html">GStreamer Device Discovery and Device Probing</a></span></dt>
 <dd><dl>
 <dt>
-<span class="refentrytitle"><a href="gstreamer-GstDevice.html">GstDevice</a></span><span class="refpurpose"> — Object representing a device</span>
-</dt>
-<dt>
 <span class="refentrytitle"><a href="gstreamer-GstDeviceMonitor.html">GstDeviceMonitor</a></span><span class="refpurpose"> — A device monitor and prober</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstDeviceMonitorFactory.html">GstDeviceMonitorFactory</a></span><span class="refpurpose"> — Create GstDeviceMonitors from a factory</span>
+<span class="refentrytitle"><a href="gstreamer-GstDevice.html">GstDevice</a></span><span class="refpurpose"> — Object representing a device</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gstreamer-GstGlobalDeviceMonitor.html">GstGlobalDeviceMonitor</a></span><span class="refpurpose"> — A global device monitor and prober</span>
+<span class="refentrytitle"><a href="gstreamer-GstDeviceProvider.html">GstDeviceProvider</a></span><span class="refpurpose"> — A device provider</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="GstDeviceProviderFactory.html">GstDeviceProviderFactory</a></span><span class="refpurpose"> — Create GstDeviceProviders from a factory</span>
 </dt>
 </dl></dd>
 <dt><span class="chapter"><a href="gstreamer-support.html">GStreamer Core Support</a></span></dt>
diff --git a/docs/gst/html/index.sgml b/docs/gst/html/index.sgml
index 938a309..e900fea 100644
--- a/docs/gst/html/index.sgml
+++ b/docs/gst/html/index.sgml
@@ -2465,6 +2465,24 @@
 <ANCHOR id="GST-VERSION-NANO:CAPS" href="gstreamer-1.0/gstreamer-GstVersion.html#GST-VERSION-NANO:CAPS">
 <ANCHOR id="GST-CHECK-VERSION:CAPS" href="gstreamer-1.0/gstreamer-GstVersion.html#GST-CHECK-VERSION:CAPS">
 <ANCHOR id="gstreamer-GstVersion.other_details" href="gstreamer-1.0/gstreamer-GstVersion.html#gstreamer-GstVersion.other_details">
+<ANCHOR id="gstreamer-GstDeviceMonitor" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html">
+<ANCHOR id="gstreamer-GstDeviceMonitor.functions" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.functions">
+<ANCHOR id="gstreamer-GstDeviceMonitor.other" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.other">
+<ANCHOR id="gstreamer-GstDeviceMonitor.object-hierarchy" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.object-hierarchy">
+<ANCHOR id="gstreamer-GstDeviceMonitor.includes" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.includes">
+<ANCHOR id="gstreamer-GstDeviceMonitor.description" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.description">
+<ANCHOR id="gstreamer-GstDeviceMonitor.functions_details" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.functions_details">
+<ANCHOR id="gst-device-monitor-new" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-new">
+<ANCHOR id="gst-device-monitor-get-bus" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-bus">
+<ANCHOR id="gst-device-monitor-add-filter" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-add-filter">
+<ANCHOR id="gst-device-monitor-remove-filter" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-remove-filter">
+<ANCHOR id="gst-device-monitor-start" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-start">
+<ANCHOR id="gst-device-monitor-stop" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-stop">
+<ANCHOR id="gst-device-monitor-get-devices" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-devices">
+<ANCHOR id="gstreamer-GstDeviceMonitor.other_details" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.other_details">
+<ANCHOR id="GstDeviceMonitor" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#GstDeviceMonitor">
+<ANCHOR id="GstDeviceMonitorClass" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass">
+<ANCHOR id="gstreamer-GstDeviceMonitor.see-also" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.see-also">
 <ANCHOR id="gstreamer-GstDevice" href="gstreamer-1.0/gstreamer-GstDevice.html">
 <ANCHOR id="gstreamer-GstDevice.functions" href="gstreamer-1.0/gstreamer-GstDevice.html#gstreamer-GstDevice.functions">
 <ANCHOR id="gstreamer-GstDevice.other" href="gstreamer-1.0/gstreamer-GstDevice.html#gstreamer-GstDevice.other">
@@ -2482,71 +2500,51 @@
 <ANCHOR id="GstDevice" href="gstreamer-1.0/gstreamer-GstDevice.html#GstDevice">
 <ANCHOR id="GstDeviceClass" href="gstreamer-1.0/gstreamer-GstDevice.html#GstDeviceClass">
 <ANCHOR id="gstreamer-GstDevice.see-also" href="gstreamer-1.0/gstreamer-GstDevice.html#gstreamer-GstDevice.see-also">
-<ANCHOR id="gstreamer-GstDeviceMonitor" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html">
-<ANCHOR id="gstreamer-GstDeviceMonitor.functions" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.functions">
-<ANCHOR id="gstreamer-GstDeviceMonitor.other" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.other">
-<ANCHOR id="gstreamer-GstDeviceMonitor.object-hierarchy" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.object-hierarchy">
-<ANCHOR id="gstreamer-GstDeviceMonitor.includes" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.includes">
-<ANCHOR id="gstreamer-GstDeviceMonitor.description" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.description">
-<ANCHOR id="gstreamer-GstDeviceMonitor.functions_details" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.functions_details">
-<ANCHOR id="gst-device-monitor-can-monitor" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-can-monitor">
-<ANCHOR id="gst-device-monitor-class-add-metadata" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-add-metadata">
-<ANCHOR id="gst-device-monitor-class-add-static-metadata" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-add-static-metadata">
-<ANCHOR id="gst-device-monitor-class-get-metadata" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-get-metadata">
-<ANCHOR id="gst-device-monitor-class-set-metadata" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-set-metadata">
-<ANCHOR id="gst-device-monitor-class-set-static-metadata" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-class-set-static-metadata">
-<ANCHOR id="gst-device-monitor-device-add" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-device-add">
-<ANCHOR id="gst-device-monitor-device-remove" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-device-remove">
-<ANCHOR id="gst-device-monitor-get-bus" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-bus">
-<ANCHOR id="gst-device-monitor-get-devices" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-devices">
-<ANCHOR id="gst-device-monitor-get-factory" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-get-factory">
-<ANCHOR id="gst-device-monitor-register" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-register">
-<ANCHOR id="gst-device-monitor-start" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-start">
-<ANCHOR id="gst-device-monitor-stop" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gst-device-monitor-stop">
-<ANCHOR id="gstreamer-GstDeviceMonitor.other_details" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.other_details">
-<ANCHOR id="GstDeviceMonitor" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#GstDeviceMonitor">
-<ANCHOR id="GstDeviceMonitorClass" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#GstDeviceMonitorClass">
-<ANCHOR id="gstreamer-GstDeviceMonitor.see-also" href="gstreamer-1.0/gstreamer-GstDeviceMonitor.html#gstreamer-GstDeviceMonitor.see-also">
-<ANCHOR id="GstDeviceMonitorFactory" href="gstreamer-1.0/GstDeviceMonitorFactory.html">
-<ANCHOR id="GstDeviceMonitorFactory.functions" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.functions">
-<ANCHOR id="GstDeviceMonitorFactory.other" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.other">
-<ANCHOR id="GstDeviceMonitorFactory.object-hierarchy" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.object-hierarchy">
-<ANCHOR id="GstDeviceMonitorFactory.includes" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.includes">
-<ANCHOR id="GstDeviceMonitorFactory.description" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.description">
-<ANCHOR id="GstDeviceMonitorFactory.functions_details" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.functions_details">
-<ANCHOR id="gst-device-monitor-factory-find" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-find">
-<ANCHOR id="gst-device-monitor-factory-get" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-get">
-<ANCHOR id="gst-device-monitor-factory-get-by-name" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-by-name">
-<ANCHOR id="gst-device-monitor-factory-get-device-monitor-type" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-device-monitor-type">
-<ANCHOR id="gst-device-monitor-factory-get-metadata" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata">
-<ANCHOR id="gst-device-monitor-factory-get-metadata-keys" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-get-metadata-keys">
-<ANCHOR id="gst-device-monitor-factory-has-classes" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classes">
-<ANCHOR id="gst-device-monitor-factory-has-classesv" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-has-classesv">
-<ANCHOR id="gst-device-monitor-factory-list-get-device-monitors" href="gstreamer-1.0/GstDeviceMonitorFactory.html#gst-device-monitor-factory-list-get-device-monitors">
-<ANCHOR id="GstDeviceMonitorFactory.other_details" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.other_details">
-<ANCHOR id="GstDeviceMonitorFactory-struct" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory-struct">
-<ANCHOR id="GstDeviceMonitorFactoryClass" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactoryClass">
-<ANCHOR id="GstDeviceMonitorFactory.see-also" href="gstreamer-1.0/GstDeviceMonitorFactory.html#GstDeviceMonitorFactory.see-also">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.functions" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.functions">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.other" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.other">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.object-hierarchy" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.object-hierarchy">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.includes" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.includes">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.description" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.description">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.functions_details" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.functions_details">
-<ANCHOR id="gst-global-device-monitor-get-bus" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-bus">
-<ANCHOR id="gst-global-device-monitor-get-caps-filter" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-caps-filter">
-<ANCHOR id="gst-global-device-monitor-get-classes-filter" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-classes-filter">
-<ANCHOR id="gst-global-device-monitor-get-devices" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-get-devices">
-<ANCHOR id="gst-global-device-monitor-new" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-new">
-<ANCHOR id="gst-global-device-monitor-set-caps-filter" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-caps-filter">
-<ANCHOR id="gst-global-device-monitor-set-classes-filter" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-set-classes-filter">
-<ANCHOR id="gst-global-device-monitor-start" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-start">
-<ANCHOR id="gst-global-device-monitor-stop" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gst-global-device-monitor-stop">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.other_details" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.other_details">
-<ANCHOR id="GstGlobalDeviceMonitor" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitor">
-<ANCHOR id="GstGlobalDeviceMonitorClass" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#GstGlobalDeviceMonitorClass">
-<ANCHOR id="gstreamer-GstGlobalDeviceMonitor.see-also" href="gstreamer-1.0/gstreamer-GstGlobalDeviceMonitor.html#gstreamer-GstGlobalDeviceMonitor.see-also">
+<ANCHOR id="gstreamer-GstDeviceProvider" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html">
+<ANCHOR id="gstreamer-GstDeviceProvider.functions" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.functions">
+<ANCHOR id="gstreamer-GstDeviceProvider.other" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.other">
+<ANCHOR id="gstreamer-GstDeviceProvider.object-hierarchy" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.object-hierarchy">
+<ANCHOR id="gstreamer-GstDeviceProvider.includes" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.includes">
+<ANCHOR id="gstreamer-GstDeviceProvider.description" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.description">
+<ANCHOR id="gstreamer-GstDeviceProvider.functions_details" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.functions_details">
+<ANCHOR id="gst-device-provider-can-monitor" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-can-monitor">
+<ANCHOR id="gst-device-provider-class-add-metadata" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-class-add-metadata">
+<ANCHOR id="gst-device-provider-class-add-static-metadata" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-class-add-static-metadata">
+<ANCHOR id="gst-device-provider-class-get-metadata" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-class-get-metadata">
+<ANCHOR id="gst-device-provider-class-set-metadata" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-class-set-metadata">
+<ANCHOR id="gst-device-provider-class-set-static-metadata" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-class-set-static-metadata">
+<ANCHOR id="gst-device-provider-device-add" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-device-add">
+<ANCHOR id="gst-device-provider-device-remove" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-device-remove">
+<ANCHOR id="gst-device-provider-get-bus" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-get-bus">
+<ANCHOR id="gst-device-provider-get-devices" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-get-devices">
+<ANCHOR id="gst-device-provider-get-factory" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-get-factory">
+<ANCHOR id="gst-device-provider-register" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-register">
+<ANCHOR id="gst-device-provider-start" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-start">
+<ANCHOR id="gst-device-provider-stop" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gst-device-provider-stop">
+<ANCHOR id="gstreamer-GstDeviceProvider.other_details" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.other_details">
+<ANCHOR id="GstDeviceProvider" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#GstDeviceProvider">
+<ANCHOR id="GstDeviceProviderClass" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#GstDeviceProviderClass">
+<ANCHOR id="gstreamer-GstDeviceProvider.see-also" href="gstreamer-1.0/gstreamer-GstDeviceProvider.html#gstreamer-GstDeviceProvider.see-also">
+<ANCHOR id="GstDeviceProviderFactory" href="gstreamer-1.0/GstDeviceProviderFactory.html">
+<ANCHOR id="GstDeviceProviderFactory.functions" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.functions">
+<ANCHOR id="GstDeviceProviderFactory.other" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.other">
+<ANCHOR id="GstDeviceProviderFactory.object-hierarchy" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.object-hierarchy">
+<ANCHOR id="GstDeviceProviderFactory.includes" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.includes">
+<ANCHOR id="GstDeviceProviderFactory.description" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.description">
+<ANCHOR id="GstDeviceProviderFactory.functions_details" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.functions_details">
+<ANCHOR id="gst-device-provider-factory-find" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-find">
+<ANCHOR id="gst-device-provider-factory-get" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-get">
+<ANCHOR id="gst-device-provider-factory-get-by-name" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-get-by-name">
+<ANCHOR id="gst-device-provider-factory-get-device-provider-type" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-get-device-provider-type">
+<ANCHOR id="gst-device-provider-factory-get-metadata" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata">
+<ANCHOR id="gst-device-provider-factory-get-metadata-keys" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-get-metadata-keys">
+<ANCHOR id="gst-device-provider-factory-has-classes" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-has-classes">
+<ANCHOR id="gst-device-provider-factory-has-classesv" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-has-classesv">
+<ANCHOR id="gst-device-provider-factory-list-get-device-providers" href="gstreamer-1.0/GstDeviceProviderFactory.html#gst-device-provider-factory-list-get-device-providers">
+<ANCHOR id="GstDeviceProviderFactory.other_details" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.other_details">
+<ANCHOR id="GstDeviceProviderFactory-struct" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory-struct">
+<ANCHOR id="GstDeviceProviderFactoryClass" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactoryClass">
+<ANCHOR id="GstDeviceProviderFactory.see-also" href="gstreamer-1.0/GstDeviceProviderFactory.html#GstDeviceProviderFactory.see-also">
 <ANCHOR id="gstreamer-GstInfo" href="gstreamer-1.0/gstreamer-GstInfo.html">
 <ANCHOR id="gstreamer-GstInfo.functions" href="gstreamer-1.0/gstreamer-GstInfo.html#gstreamer-GstInfo.functions">
 <ANCHOR id="gstreamer-GstInfo.other" href="gstreamer-1.0/gstreamer-GstInfo.html#gstreamer-GstInfo.other">
diff --git a/docs/libs/html/GstAdapter.html b/docs/libs/html/GstAdapter.html
index ec95464..59df4de 100644
--- a/docs/libs/html/GstAdapter.html
+++ b/docs/libs/html/GstAdapter.html
@@ -453,7 +453,7 @@
 <a name="id-1.2.4.8.8.5.8"></a><h4>Returns</h4>
 <p>    a pointer to the first <em class="parameter"><code>size</code></em>
 bytes of data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. </p>
-<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=size][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8]</span></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][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -714,7 +714,7 @@
 <a name="id-1.2.4.8.8.12.8"></a><h4>Returns</h4>
 <p>    oven-fresh hot data, or <a href="http://library.gnome.org/devel/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="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=nbytes][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=nbytes][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> guint8][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -762,12 +762,12 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.13.9"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em>
-of
-the adapter, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>nbytes</code></em>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> containing the first
+<em class="parameter"><code>nbytes</code></em>
+of the adapter, or <a href="http://library.gnome.org/devel/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.
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> when no longer needed. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -818,12 +818,12 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.14.10"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em>
-of
-the adapter, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if <em class="parameter"><code>nbytes</code></em>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> containing the first
+<em class="parameter"><code>nbytes</code></em>
+of the adapter, or <a href="http://library.gnome.org/devel/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.
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> when no longer needed. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 <p class="since">Since 1.2</p>
 </div>
@@ -865,12 +865,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.8.8.15.7"></a><h4>Returns</h4>
-<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of buffers
-containing the first <em class="parameter"><code>nbytes</code></em>
+<p> a <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
+buffers containing the first <em class="parameter"><code>nbytes</code></em>
 of the adapter, or <a href="http://library.gnome.org/devel/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="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.Buffer][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+bytes are not available. </p>
+<p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> Gst.Buffer][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -1206,8 +1205,8 @@
 </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>
+<td class="parameter_description"><p> pointer to uint32 to return matching data. </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>
diff --git a/docs/libs/html/GstBaseSink.html b/docs/libs/html/GstBaseSink.html
index d8ed1a6..1ef778a 100644
--- a/docs/libs/html/GstBaseSink.html
+++ b/docs/libs/html/GstBaseSink.html
@@ -1234,10 +1234,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.5.9.20.8"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a>. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html#gst-sample-unref"><code class="function">gst_sample_unref()</code></a> after usage.
-This function returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when no buffer has arrived in the sink yet
-or when the sink is not in PAUSED or PLAYING. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a>. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html#gst-sample-unref"><code class="function">gst_sample_unref()</code></a> after
+usage.  This function returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when no buffer has arrived in the
+sink yet or when the sink is not in PAUSED or PLAYING. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
diff --git a/docs/libs/html/GstCollectPads.html b/docs/libs/html/GstCollectPads.html
index b6bdea9..7f97307 100644
--- a/docs/libs/html/GstCollectPads.html
+++ b/docs/libs/html/GstCollectPads.html
@@ -1049,9 +1049,9 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>destroy_notify</p></td>
-<td class="parameter_description"><p>function to be called before the returned <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a>
-structure is freed</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> function to be called before the returned
+<a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> structure is freed. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid until first called."><span class="acronym">scope async</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>lock</p></td>
@@ -1063,9 +1063,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.12.8.18.11"></a><h4>Returns</h4>
-<p> a new <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> to identify the new pad. Or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-if wrong parameters are supplied.</p>
-<p></p>
+<p> a new <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> to identify the
+new pad. Or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if wrong parameters are supplied. </p>
+<p><span class="annotation">[nullable][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
@@ -1985,8 +1985,9 @@
 </colgroup>
 <tbody><tr>
 <td class="struct_member_name"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> *<em class="structfield"><code><a name="GstCollectPads-struct.data"></a>data</code></em>;</p></td>
-<td class="struct_member_description"><p><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> managed by this <a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a>.</p></td>
-<td class="struct_member_annotations"> </td>
+<td class="struct_member_description"><p> <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> managed
+by this <a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a>. </p></td>
+<td class="struct_member_annotations"><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstBase.CollectData]</span></td>
 </tr></tbody>
 </table></div>
 </div>
diff --git a/docs/libs/html/annotation-glossary.html b/docs/libs/html/annotation-glossary.html
index b8fb2a1..38502b6 100644
--- a/docs/libs/html/annotation-glossary.html
+++ b/docs/libs/html/annotation-glossary.html
@@ -53,6 +53,8 @@
 <dt><span class="glossterm"><a name="annotation-glossterm-out%20caller-allocates"></a>out caller-allocates</span></dt>
 <dd class="glossdef"><p>Out parameter, where caller must allocate storage.</p></dd>
 <a name="glsS"></a><h3 class="title">S</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20async"></a>scope async</span></dt>
+<dd class="glossdef"><p>The callback is valid until first called.</p></dd>
 <dt><span class="glossterm"><a name="annotation-glossterm-scope%20call"></a>scope call</span></dt>
 <dd class="glossdef"><p>The callback is valid only during the call to the method.</p></dd>
 <a name="glsT"></a><h3 class="title">T</h3>
diff --git a/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html b/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html
index af1cf7e..4407349 100644
--- a/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html
+++ b/docs/libs/html/gstreamer-libs-GstTypeFindHelper.html
@@ -141,9 +141,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.14.7.2.7"></a><h4>Returns</h4>
-<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data stream.
-Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> matches the data stream. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data
+stream.  Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> matches the data stream. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -193,10 +193,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.14.7.3.8"></a><h4>Returns</h4>
-<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-if no type could be found. The caller should free the caps returned
-with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data,
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no type could be found. The caller should free the caps
+returned with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -236,11 +236,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.14.7.4.8"></a><h4>Returns</h4>
-<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to <em class="parameter"><code>extension</code></em>
-, or
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no type could be found. The caller should free the caps
-returned with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to
+<em class="parameter"><code>extension</code></em>
+, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no type could be found. The caller should free
+the caps returned with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -299,10 +299,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.14.7.5.8"></a><h4>Returns</h4>
-<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-if no type could be found. The caller should free the caps returned
-with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data,
+or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no type could be found. The caller should free the caps
+returned with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 <hr>
@@ -438,9 +438,9 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.4.14.7.7.8"></a><h4>Returns</h4>
-<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data stream.
-Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> matches the data stream. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+<p> the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> corresponding to the data
+stream.  Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> matches the data stream. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][nullable]</span></p>
 </div>
 </div>
 </div>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index cd3556a..58f29c0 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.3.3)
+      for GStreamer Library 1.0 (1.3.90)
       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>
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index 70354d7..b5b3c04 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -824,6 +824,7 @@
 <ANCHOR id="annotation-glossterm-in" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-in">
 <ANCHOR id="annotation-glossterm-out" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-out">
 <ANCHOR id="annotation-glossterm-out caller-allocates" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-out caller-allocates">
+<ANCHOR id="annotation-glossterm-scope async" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-scope async">
 <ANCHOR id="annotation-glossterm-scope call" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-scope call">
 <ANCHOR id="annotation-glossterm-transfer container" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer container">
 <ANCHOR id="annotation-glossterm-transfer floating" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer floating">
diff --git a/docs/plugins/gstreamer-plugins.hierarchy b/docs/plugins/gstreamer-plugins.hierarchy
index 9195eb1..c65606e 100644
--- a/docs/plugins/gstreamer-plugins.hierarchy
+++ b/docs/plugins/gstreamer-plugins.hierarchy
@@ -36,7 +36,7 @@
       GstPadTemplate
       GstPlugin
       GstPluginFeature
-        GstDeviceMonitorFactory
+        GstDeviceProviderFactory
         GstElementFactory
         GstTypeFindFactory
       GstRegistry
diff --git a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
index 834c3f3..498f137 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.3.3</td>
+<td>1.3.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index ead4d8e..b7d72d1 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.3.3)
+      for GStreamer Core Plugins 1.0 (1.3.90)
       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 8f8ef79..d151b96 100644
--- a/docs/plugins/inspect/plugin-coreelements.xml
+++ b/docs/plugins/inspect/plugin-coreelements.xml
@@ -3,7 +3,7 @@
   <description>GStreamer core elements</description>
   <filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
   <basename>libgstcoreelements.so</basename>
-  <version>1.3.3</version>
+  <version>1.3.90</version>
   <license>LGPL</license>
   <source>gstreamer</source>
   <package>GStreamer source release</package>
diff --git a/gst/Makefile.am b/gst/Makefile.am
index 86d226e..2e2a79c 100644
--- a/gst/Makefile.am
+++ b/gst/Makefile.am
@@ -72,15 +72,15 @@
 	gstdatetime.c		\
 	gstdebugutils.c		\
 	gstdevice.c		\
-	gstdevicemonitor.c	\
-	gstdevicemonitorfactory.c \
+	gstdeviceprovider.c	\
+	gstdeviceproviderfactory.c \
 	gstelement.c		\
 	gstelementfactory.c	\
 	gsterror.c		\
 	gstevent.c		\
 	gstformat.c		\
 	gstghostpad.c		\
-	gstglobaldevicemonitor.c \
+	gstdevicemonitor.c 	\
 	gstinfo.c		\
 	gstiterator.c		\
 	gstatomicqueue.c	\
@@ -177,14 +177,14 @@
 	gstelement.h		\
 	gstelementmetadata.h	\
 	gstdevice.h		\
-	gstdevicemonitor.h	\
-	gstdevicemonitorfactory.h \
+	gstdeviceprovider.h	\
+	gstdeviceproviderfactory.h \
 	gstelementfactory.h	\
 	gsterror.h		\
 	gstevent.h		\
 	gstformat.h		\
 	gstghostpad.h		\
-	gstglobaldevicemonitor.h \
+	gstdevicemonitor.h 	\
 	gstinfo.h		\
 	gstiterator.h		\
 	gstatomicqueue.h	\
diff --git a/gst/Makefile.in b/gst/Makefile.in
index eb59429..85f129d 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -175,9 +175,9 @@
 	gstbufferpool.c gstbus.c gstcaps.c gstcapsfeatures.c \
 	gstchildproxy.c gstclock.c gstcontext.c gstcontrolbinding.c \
 	gstcontrolsource.c gstdatetime.c gstdebugutils.c gstdevice.c \
-	gstdevicemonitor.c gstdevicemonitorfactory.c gstelement.c \
+	gstdeviceprovider.c gstdeviceproviderfactory.c gstelement.c \
 	gstelementfactory.c gsterror.c gstevent.c gstformat.c \
-	gstghostpad.c gstglobaldevicemonitor.c gstinfo.c gstiterator.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 \
@@ -208,15 +208,15 @@
 	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-gstdevicemonitorfactory.lo \
+	libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.lo \
+	libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstelement.lo \
 	libgstreamer_@GST_API_VERSION@_la-gstelementfactory.lo \
 	libgstreamer_@GST_API_VERSION@_la-gsterror.lo \
 	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-gstglobaldevicemonitor.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 \
@@ -701,15 +701,15 @@
 	gstdatetime.c		\
 	gstdebugutils.c		\
 	gstdevice.c		\
-	gstdevicemonitor.c	\
-	gstdevicemonitorfactory.c \
+	gstdeviceprovider.c	\
+	gstdeviceproviderfactory.c \
 	gstelement.c		\
 	gstelementfactory.c	\
 	gsterror.c		\
 	gstevent.c		\
 	gstformat.c		\
 	gstghostpad.c		\
-	gstglobaldevicemonitor.c \
+	gstdevicemonitor.c 	\
 	gstinfo.c		\
 	gstiterator.c		\
 	gstatomicqueue.c	\
@@ -808,14 +808,14 @@
 	gstelement.h		\
 	gstelementmetadata.h	\
 	gstdevice.h		\
-	gstdevicemonitor.h	\
-	gstdevicemonitorfactory.h \
+	gstdeviceprovider.h	\
+	gstdeviceproviderfactory.h \
 	gstelementfactory.h	\
 	gsterror.h		\
 	gstevent.h		\
 	gstformat.h		\
 	gstghostpad.h		\
-	gstglobaldevicemonitor.h \
+	gstdevicemonitor.h 	\
 	gstinfo.h		\
 	gstiterator.h		\
 	gstatomicqueue.h	\
@@ -988,7 +988,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdebugutils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevice.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitor.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitorfactory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstelement.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstelementfactory.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstenumtypes.Plo@am__quote@
@@ -996,7 +997,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstevent.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstformat.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstghostpad.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstglobaldevicemonitor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstinfo.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstiterator.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstmemory.Plo@am__quote@
@@ -1186,19 +1186,19 @@
 @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@
+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
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstdeviceprovider.c' object='libgstreamer_@GST_API_VERSION@_la-gstdeviceprovider.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
+@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-gstdeviceprovider.lo `test -f 'gstdeviceprovider.c' || echo '$(srcdir)/'`gstdeviceprovider.c
 
-libgstreamer_@GST_API_VERSION@_la-gstdevicemonitorfactory.lo: gstdevicemonitorfactory.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-gstdevicemonitorfactory.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitorfactory.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstdevicemonitorfactory.lo `test -f 'gstdevicemonitorfactory.c' || echo '$(srcdir)/'`gstdevicemonitorfactory.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitorfactory.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdevicemonitorfactory.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstdevicemonitorfactory.c' object='libgstreamer_@GST_API_VERSION@_la-gstdevicemonitorfactory.lo' libtool=yes @AMDEPBACKSLASH@
+libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.lo: gstdeviceproviderfactory.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-gstdeviceproviderfactory.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.lo `test -f 'gstdeviceproviderfactory.c' || echo '$(srcdir)/'`gstdeviceproviderfactory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstdeviceproviderfactory.c' object='libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.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-gstdevicemonitorfactory.lo `test -f 'gstdevicemonitorfactory.c' || echo '$(srcdir)/'`gstdevicemonitorfactory.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstreamer_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstreamer_@GST_API_VERSION@_la-gstdeviceproviderfactory.lo `test -f 'gstdeviceproviderfactory.c' || echo '$(srcdir)/'`gstdeviceproviderfactory.c
 
 libgstreamer_@GST_API_VERSION@_la-gstelement.lo: gstelement.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-gstelement.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstelement.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstelement.lo `test -f 'gstelement.c' || echo '$(srcdir)/'`gstelement.c
@@ -1242,12 +1242,12 @@
 @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-gstglobaldevicemonitor.lo: gstglobaldevicemonitor.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-gstglobaldevicemonitor.lo -MD -MP -MF $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstglobaldevicemonitor.Tpo -c -o libgstreamer_@GST_API_VERSION@_la-gstglobaldevicemonitor.lo `test -f 'gstglobaldevicemonitor.c' || echo '$(srcdir)/'`gstglobaldevicemonitor.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstglobaldevicemonitor.Tpo $(DEPDIR)/libgstreamer_@GST_API_VERSION@_la-gstglobaldevicemonitor.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstglobaldevicemonitor.c' object='libgstreamer_@GST_API_VERSION@_la-gstglobaldevicemonitor.lo' libtool=yes @AMDEPBACKSLASH@
+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-gstglobaldevicemonitor.lo `test -f 'gstglobaldevicemonitor.c' || echo '$(srcdir)/'`gstglobaldevicemonitor.c
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(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
diff --git a/gst/gst.h b/gst/gst.h
index 9b20ba1..6532809 100644
--- a/gst/gst.h
+++ b/gst/gst.h
@@ -43,13 +43,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/gstglobaldevicemonitor.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 e85d5c5..b25707c 100644
--- a/gst/gst_private.h
+++ b/gst/gst_private.h
@@ -54,8 +54,8 @@
 /* for GstElement */
 #include "gstelement.h"
 
-/* for GstDeviceMonitor */
-#include "gstdevicemonitor.h"
+/* for GstDeviceProvider */
+#include "gstdeviceprovider.h"
 
 /* for GstToc */
 #include "gsttoc.h"
@@ -399,19 +399,19 @@
   gpointer _gst_reserved[GST_PADDING];
 };
 
-struct _GstDeviceMonitorFactory {
+struct _GstDeviceProviderFactory {
   GstPluginFeature           feature;
   /* <private> */
 
   GType                      type;              /* unique GType the device factory or 0 if not loaded */
 
-  volatile GstDeviceMonitor *monitor;
+  volatile GstDeviceProvider *provider;
   gpointer                   metadata;
 
   gpointer _gst_reserved[GST_PADDING];
 };
 
-struct _GstDeviceMonitorFactoryClass {
+struct _GstDeviceProviderFactoryClass {
   GstPluginFeatureClass         parent;
   /* <private> */
 
diff --git a/gst/gstallocator.c b/gst/gstallocator.c
index cbcb1e4..c6763e1 100644
--- a/gst/gstallocator.c
+++ b/gst/gstallocator.c
@@ -221,8 +221,9 @@
  * Find a previously registered allocator with @name. When @name is %NULL, the
  * default allocator will be returned.
  *
- * Returns: (transfer full): a #GstAllocator or %NULL when the allocator with @name was not
- * registered. Use gst_object_unref() to release the allocator after usage.
+ * Returns: (transfer full) (nullable): a #GstAllocator or %NULL when
+ * the allocator with @name was not registered. Use gst_object_unref()
+ * to release the allocator after usage.
  */
 GstAllocator *
 gst_allocator_find (const gchar * name)
diff --git a/gst/gstatomicqueue.c b/gst/gstatomicqueue.c
index 72ad2e3..a80089c 100644
--- a/gst/gstatomicqueue.c
+++ b/gst/gstatomicqueue.c
@@ -214,8 +214,8 @@
  *
  * Peek the head element of the queue without removing it from the queue.
  *
- * Returns: (transfer none): the head element of @queue or %NULL when
- * the queue is empty.
+ * Returns: (transfer none) (nullable): the head element of @queue or
+ * %NULL when the queue is empty.
  */
 gpointer
 gst_atomic_queue_peek (GstAtomicQueue * queue)
diff --git a/gst/gstbin.c b/gst/gstbin.c
index 77bbc3e..634b6e4 100644
--- a/gst/gstbin.c
+++ b/gst/gstbin.c
@@ -1633,7 +1633,8 @@
  *
  * MT safe.  Caller owns returned value.
  *
- * Returns: (transfer full): a #GstIterator of #GstElement, or %NULL
+ * Returns: (transfer full) (nullable): a #GstIterator of #GstElement,
+ * or %NULL
  */
 GstIterator *
 gst_bin_iterate_elements (GstBin * bin)
@@ -1673,7 +1674,8 @@
  *
  * MT safe.  Caller owns returned value.
  *
- * Returns: (transfer full): a #GstIterator of #GstElement, or %NULL
+ * Returns: (transfer full) (nullable): a #GstIterator of #GstElement,
+ * or %NULL
  */
 GstIterator *
 gst_bin_iterate_recurse (GstBin * bin)
@@ -1730,7 +1732,8 @@
  *
  * MT safe.  Caller owns returned value.
  *
- * Returns: (transfer full): a #GstIterator of #GstElement, or %NULL
+ * Returns: (transfer full) (nullable): a #GstIterator of #GstElement,
+ * or %NULL
  */
 GstIterator *
 gst_bin_iterate_sinks (GstBin * bin)
@@ -1790,7 +1793,8 @@
  *
  * MT safe.  Caller owns returned value.
  *
- * Returns: (transfer full): a #GstIterator of #GstElement, or %NULL
+ * Returns: (transfer full) (nullable): a #GstIterator of #GstElement,
+ * or %NULL
  */
 GstIterator *
 gst_bin_iterate_sources (GstBin * bin)
@@ -2166,7 +2170,8 @@
  *
  * MT safe.  Caller owns returned value.
  *
- * Returns: (transfer full): a #GstIterator of #GstElement, or %NULL
+ * Returns: (transfer full) (nullable): a #GstIterator of #GstElement,
+ * or %NULL
  */
 GstIterator *
 gst_bin_iterate_sorted (GstBin * bin)
@@ -4126,7 +4131,8 @@
  *
  * MT safe.  Caller owns returned reference.
  *
- * Returns: (transfer full): the #GstElement with the given name, or %NULL
+ * Returns: (transfer full) (nullable): the #GstElement with the given
+ * name, or %NULL
  */
 GstElement *
 gst_bin_get_by_name (GstBin * bin, const gchar * name)
@@ -4169,7 +4175,8 @@
  *
  * MT safe.  Caller owns returned reference.
  *
- * Returns: (transfer full): the #GstElement with the given name, or %NULL
+ * Returns: (transfer full) (nullable): the #GstElement with the given
+ * name, or %NULL
  */
 GstElement *
 gst_bin_get_by_name_recurse_up (GstBin * bin, const gchar * name)
@@ -4269,8 +4276,9 @@
  *
  * MT safe.  Caller owns returned value.
  *
- * Returns: (transfer full): a #GstIterator of #GstElement for all elements
- *          in the bin implementing the given interface, or %NULL
+ * Returns: (transfer full) (nullable): a #GstIterator of #GstElement
+ *     for all elements in the bin implementing the given interface,
+ *     or %NULL
  */
 GstIterator *
 gst_bin_iterate_all_by_interface (GstBin * bin, GType iface)
diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c
index 8aef1c2..24efc56 100644
--- a/gst/gstbuffer.c
+++ b/gst/gstbuffer.c
@@ -650,8 +650,8 @@
  *
  * MT safe.
  *
- * Returns: (transfer full): a new #GstBuffer, or %NULL if the memory couldn't
- *     be allocated.
+ * Returns: (transfer full) (nullable): a new #GstBuffer, or %NULL if
+ *     the memory couldn't be allocated.
  */
 GstBuffer *
 gst_buffer_new_allocate (GstAllocator * allocator, gsize size,
@@ -1235,8 +1235,8 @@
 /**
  * gst_buffer_get_sizes:
  * @buffer: a #GstBuffer.
- * @offset: (out): a pointer to the offset
- * @maxsize: (out): a pointer to the maxsize
+ * @offset: (out) (allow-none): a pointer to the offset
+ * @maxsize: (out) (allow-none): a pointer to the maxsize
  *
  * Get the total size of the memory blocks in @b.
  *
@@ -1273,8 +1273,8 @@
  * @buffer: a #GstBuffer.
  * @idx: an index
  * @length: a length
- * @offset: (out): a pointer to the offset
- * @maxsize: (out): a pointer to the maxsize
+ * @offset: (out) (allow-none): a pointer to the offset
+ * @maxsize: (out) (allow-none): a pointer to the maxsize
  *
  * Get the total size of @length memory blocks stating from @idx in @buffer.
  *
@@ -1934,7 +1934,8 @@
  * Get the metadata for @api on buffer. When there is no such
  * metadata, %NULL is returned.
  *
- * Returns: (transfer none): the metadata for @api on @buffer.
+ * Returns: (transfer none) (nullable): the metadata for @api on
+ * @buffer.
  */
 GstMeta *
 gst_buffer_get_meta (GstBuffer * buffer, GType api)
@@ -2063,8 +2064,8 @@
  *
  * @state will be updated with an opaque state pointer
  *
- * Returns: (transfer none): The next #GstMeta or %NULL when there are
- * no more items.
+ * Returns: (transfer none) (nullable): The next #GstMeta or %NULL
+ * when there are no more items.
  */
 GstMeta *
 gst_buffer_iterate_meta (GstBuffer * buffer, gpointer * state)
diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h
index 0ebf142..643db7d 100644
--- a/gst/gstbuffer.h
+++ b/gst/gstbuffer.h
@@ -457,8 +457,8 @@
 
 /**
  * gst_buffer_replace:
- * @obuf: (inout) (transfer full): pointer to a pointer to a #GstBuffer to be
- *     replaced.
+ * @obuf: (inout) (transfer full) (nullable): pointer to a pointer to
+ *     a #GstBuffer to be replaced.
  * @nbuf: (transfer none) (allow-none): pointer to a #GstBuffer that will
  *     replace the buffer pointed to by @obuf.
  *
@@ -496,7 +496,7 @@
 /**
  * GstBufferForeachMetaFunc:
  * @buffer: a #GstBuffer
- * @meta: a pointer to a #GstMeta
+ * @meta: (out) (nullable): a pointer to a #GstMeta
  * @user_data: user data passed to gst_buffer_foreach_meta()
  *
  * A function that will be called from gst_buffer_foreach_meta(). The @meta
diff --git a/gst/gstbufferlist.c b/gst/gstbufferlist.c
index dca866c..7b8558c 100644
--- a/gst/gstbufferlist.c
+++ b/gst/gstbufferlist.c
@@ -227,8 +227,9 @@
  *
  * Get the buffer at @idx.
  *
- * Returns: (transfer none): the buffer at @idx in @group or %NULL when there
- *     is no buffer. The buffer remains valid as long as @list is valid.
+ * Returns: (transfer none) (nullable): the buffer at @idx in @group
+ *     or %NULL when there is no buffer. The buffer remains valid as
+ *     long as @list is valid.
  */
 GstBuffer *
 gst_buffer_list_get (GstBufferList * list, guint idx)
diff --git a/gst/gstbufferlist.h b/gst/gstbufferlist.h
index df8c455..e5ddb08 100644
--- a/gst/gstbufferlist.h
+++ b/gst/gstbufferlist.h
@@ -38,7 +38,7 @@
 
 /**
  * GstBufferListFunc:
- * @buffer: pointer the buffer
+ * @buffer: (out) (nullable): pointer the buffer
  * @idx: the index of @buffer
  * @user_data: user data passed to gst_buffer_list_foreach()
  *
diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c
index 6c14ce4..92f6648 100644
--- a/gst/gstbufferpool.c
+++ b/gst/gstbufferpool.c
@@ -823,8 +823,8 @@
 /**
  * gst_buffer_pool_config_set_allocator:
  * @config: a #GstBufferPool configuration
- * @allocator: a #GstAllocator
- * @params: #GstAllocationParams
+ * @allocator: (allow-none): a #GstAllocator
+ * @params: (allow-none): #GstAllocationParams
  *
  * Set the @allocator and @params on @config.
  *
diff --git a/gst/gstbus.c b/gst/gstbus.c
index 69cf6b9..0d784e1 100644
--- a/gst/gstbus.c
+++ b/gst/gstbus.c
@@ -467,10 +467,11 @@
  * @timeout is #GST_CLOCK_TIME_NONE, this function will block forever until a
  * matching message was posted on the bus.
  *
- * Returns: (transfer full): a #GstMessage matching the filter in @types,
- *     or %NULL if no matching message was found on the bus until the timeout
- *     expired. The message is taken from the bus and needs to be unreffed
- *     with gst_message_unref() after usage.
+ * Returns: (transfer full) (nullable): a #GstMessage matching the
+ *     filter in @types, or %NULL if no matching message was found on
+ *     the bus until the timeout expired. The message is taken from
+ *     the bus and needs to be unreffed with gst_message_unref() after
+ *     usage.
  *
  * MT safe.
  */
@@ -568,10 +569,10 @@
  * #GST_CLOCK_TIME_NONE, this function will block forever until a message was
  * posted on the bus.
  *
- * Returns: (transfer full): the #GstMessage that is on the bus after the
- *     specified timeout or %NULL if the bus is empty after the timeout expired.
- * The message is taken from the bus and needs to be unreffed with
- * gst_message_unref() after usage.
+ * Returns: (transfer full) (nullable): the #GstMessage that is on the
+ *     bus after the specified timeout or %NULL if the bus is empty
+ *     after the timeout expired.  The message is taken from the bus
+ *     and needs to be unreffed with gst_message_unref() after usage.
  *
  * MT safe.
  */
@@ -594,10 +595,10 @@
  * the bus, all messages will be discarded. It is not possible to use message
  * enums beyond #GST_MESSAGE_EXTENDED in the @events mask.
  *
- * Returns: (transfer full): the next #GstMessage matching @type that is on
- *     the bus, or %NULL if the bus is empty or there is no message matching
- *     @type. The message is taken from the bus and needs to be unreffed with
- *     gst_message_unref() after usage.
+ * Returns: (transfer full) (nullable): the next #GstMessage matching
+ *     @type that is on the bus, or %NULL if the bus is empty or there
+ *     is no message matching @type. The message is taken from the bus
+ *     and needs to be unreffed with gst_message_unref() after usage.
  *
  * MT safe.
  */
@@ -616,9 +617,10 @@
  *
  * Get a message from the bus.
  *
- * Returns: (transfer full): the #GstMessage that is on the bus, or %NULL if the
- *     bus is empty. The message is taken from the bus and needs to be unreffed
- *     with gst_message_unref() after usage.
+ * Returns: (transfer full) (nullable): the #GstMessage that is on the
+ *     bus, or %NULL if the bus is empty. The message is taken from
+ *     the bus and needs to be unreffed with gst_message_unref() after
+ *     usage.
  *
  * MT safe.
  */
@@ -638,8 +640,8 @@
  * on the bus' message queue. A reference is returned, and needs to be unreffed
  * by the caller.
  *
- * Returns: (transfer full): the #GstMessage that is on the bus, or %NULL if the
- *     bus is empty.
+ * Returns: (transfer full) (nullable): the #GstMessage that is on the
+ *     bus, or %NULL if the bus is empty.
  *
  * MT safe.
  */
@@ -1054,9 +1056,10 @@
  * better handled by setting up an asynchronous bus watch and doing things
  * from there.
  *
- * Returns: (transfer full): the message that was received, or %NULL if the
- *     poll timed out. The message is taken from the bus and needs to be
- *     unreffed with gst_message_unref() after usage.
+ * Returns: (transfer full) (nullable): the message that was received,
+ *     or %NULL if the poll timed out. The message is taken from the
+ *     bus and needs to be unreffed with gst_message_unref() after
+ *     usage.
  */
 GstMessage *
 gst_bus_poll (GstBus * bus, GstMessageType events, GstClockTime timeout)
diff --git a/gst/gstcaps.c b/gst/gstcaps.c
index 4525ead..51f7ae4 100644
--- a/gst/gstcaps.c
+++ b/gst/gstcaps.c
@@ -901,8 +901,10 @@
   if (features)
     gst_caps_features_set_parent_refcount (features, &GST_CAPS_REFCOUNT (caps));
 
-  if (old)
+  if (old) {
+    gst_caps_features_set_parent_refcount (old, NULL);
     gst_caps_features_free (old);
+  }
 }
 
 /**
diff --git a/gst/gstcaps.h b/gst/gstcaps.h
index e29da34..2acf84c 100644
--- a/gst/gstcaps.h
+++ b/gst/gstcaps.h
@@ -288,8 +288,8 @@
 
 /**
  * gst_caps_replace:
- * @old_caps: (inout) (transfer full): pointer to a pointer to a #GstCaps to be
- *     replaced.
+ * @old_caps: (inout) (transfer full) (nullable): pointer to a pointer
+ *     to a #GstCaps to be replaced.
  * @new_caps: (transfer none) (allow-none): pointer to a #GstCaps that will
  *     replace the caps pointed to by @ocaps.
  *
diff --git a/gst/gstcapsfeatures.c b/gst/gstcapsfeatures.c
index e1e8f90..dade216 100644
--- a/gst/gstcapsfeatures.c
+++ b/gst/gstcapsfeatures.c
@@ -471,8 +471,9 @@
  *
  * Free-function: gst_caps_features_free
  *
- * Returns: (transfer full): a new #GstCapsFeatures or %NULL when the string could
- *     not be parsed. Free with gst_caps_features_free() after use.
+ * Returns: (transfer full) (nullable): a new #GstCapsFeatures or
+ *     %NULL when the string could not be parsed. Free with
+ *     gst_caps_features_free() after use.
  *
  * Since: 1.2
  */
diff --git a/gst/gstchildproxy.c b/gst/gstchildproxy.c
index a83356a..f2a2595 100644
--- a/gst/gstchildproxy.c
+++ b/gst/gstchildproxy.c
@@ -108,8 +108,8 @@
  * together with gst_object_get_name(). If the interface is to be used with
  * #GObjects, this methods needs to be overridden.
  *
- * Returns: (transfer full): the child object or %NULL if not found. Unref
- *     after usage.
+ * Returns: (transfer full) (nullable): the child object or %NULL if
+ *     not found. Unref after usage.
  *
  * MT safe.
  */
@@ -129,8 +129,8 @@
  *
  * Fetches a child by its number.
  *
- * Returns: (transfer full): the child object or %NULL if not found (index
- *     too high). Unref after usage.
+ * Returns: (transfer full) (nullable): the child object or %NULL if
+ *     not found (index too high). Unref after usage.
  *
  * MT safe.
  */
diff --git a/gst/gstclock.c b/gst/gstclock.c
index 9f5b6fd..d413dff 100644
--- a/gst/gstclock.c
+++ b/gst/gstclock.c
@@ -1204,8 +1204,9 @@
  * Get the master clock that @clock is slaved to or %NULL when the clock is
  * not slaved to any master clock.
  *
- * Returns: (transfer full): a master #GstClock or %NULL when this clock is
- *     not slaved to a master clock. Unref after usage.
+ * Returns: (transfer full) (nullable): a master #GstClock or %NULL
+ *     when this clock is not slaved to a master clock. Unref after
+ *     usage.
  *
  * MT safe.
  */
diff --git a/gst/gstcontrolbinding.c b/gst/gstcontrolbinding.c
index 4981c89..9e02a47 100644
--- a/gst/gstcontrolbinding.c
+++ b/gst/gstcontrolbinding.c
@@ -259,8 +259,8 @@
  *
  * Gets the value for the given controlled property at the requested time.
  *
- * Returns: the GValue of the property at the given time, or %NULL if the
- * property isn't controlled.
+ * Returns: (nullable): the GValue of the property at the given time,
+ * or %NULL if the property isn't controlled.
  */
 GValue *
 gst_control_binding_get_value (GstControlBinding * binding,
diff --git a/gst/gstdatetime.c b/gst/gstdatetime.c
index d21cca4..8c0eda5 100644
--- a/gst/gstdatetime.c
+++ b/gst/gstdatetime.c
@@ -76,7 +76,8 @@
  *
  * Free-function: gst_date_time_unref
  *
- * Returns: (transfer full): a newly created #GstDateTime, or %NULL on error
+ * Returns: (transfer full) (nullable): a newly created #GstDateTime,
+ * or %NULL on error
  */
 GstDateTime *
 gst_date_time_new_from_g_date_time (GDateTime * dt)
@@ -104,7 +105,8 @@
  *
  * Free-function: g_date_time_unref
  *
- * Returns: (transfer full): a newly created #GDateTime, or %NULL on error
+ * Returns: (transfer full) (nullable): a newly created #GDateTime, or
+ * %NULL on error
  */
 GDateTime *
 gst_date_time_to_g_date_time (GstDateTime * datetime)
@@ -725,9 +727,10 @@
  * are (for example): 2012, 2012-06, 2012-06-23, 2012-06-23T23:30Z,
  * 2012-06-23T23:30+0100, 2012-06-23T23:30:59Z, 2012-06-23T23:30:59+0100
  *
- * Returns: a newly allocated string formatted according to ISO 8601 and
- *     only including the datetime fields that are valid, or %NULL in case
- *     there was an error. The string should be freed with g_free().
+ * Returns: (nullable): a newly allocated string formatted according
+ *     to ISO 8601 and only including the datetime fields that are
+ *     valid, or %NULL in case there was an error. The string should
+ *     be freed with g_free().
  */
 gchar *
 gst_date_time_to_iso8601_string (GstDateTime * datetime)
@@ -749,7 +752,8 @@
  *
  * Free-function: gst_date_time_unref
  *
- * Returns: (transfer full): a newly created #GstDateTime, or %NULL on error
+ * Returns: (transfer full) (nullable): a newly created #GstDateTime,
+ * or %NULL on error
  */
 GstDateTime *
 gst_date_time_new_from_iso8601_string (const gchar * string)
diff --git a/gst/gstdevice.c b/gst/gstdevice.c
index 9119ba9..08404bb 100644
--- a/gst/gstdevice.c
+++ b/gst/gstdevice.c
@@ -22,13 +22,13 @@
 /**
  * SECTION:gstdevice
  * @short_description: Object representing a device
- * @see_also: #GstDeviceMonitor
+ * @see_also: #GstDeviceProvider
  *
  * #GstDevice are objects representing a device, they contain
  * relevant metadata about the device, such as its class and the #GstCaps
  * representing the media types it can produce or handle.
  *
- * #GstDevice are created by #GstDeviceMonitor objects which can be
+ * #GstDevice are created by #GstDeviceProvider objects which can be
  * aggregated by #GstGlobalDeviceMonitor objects.
  *
  * Since: 1.4
@@ -190,6 +190,8 @@
 {
   GstDeviceClass *klass = GST_DEVICE_GET_CLASS (device);
 
+  g_return_val_if_fail (GST_IS_DEVICE (device), NULL);
+
   if (klass->create_element)
     return klass->create_element (device, name);
   else
@@ -210,6 +212,8 @@
 GstCaps *
 gst_device_get_caps (GstDevice * device)
 {
+  g_return_val_if_fail (GST_IS_DEVICE (device), NULL);
+
   if (device->priv->caps)
     return gst_caps_ref (device->priv->caps);
   else
@@ -229,6 +233,8 @@
 gchar *
 gst_device_get_display_name (GstDevice * device)
 {
+  g_return_val_if_fail (GST_IS_DEVICE (device), NULL);
+
   return
       g_strdup (device->priv->display_name ? device->priv->display_name : "");
 }
@@ -239,7 +245,7 @@
  *
  * Gets the "class" of a device. This is a "/" separated list of
  * classes that represent this device. They are a subset of the
- * classes of the #GstDeviceMonitor that produced this device.
+ * classes of the #GstDeviceProvider that produced this device.
  *
  * Returns: The device class. Free with g_free() after use.
  *
@@ -248,6 +254,8 @@
 gchar *
 gst_device_get_device_class (GstDevice * device)
 {
+  g_return_val_if_fail (GST_IS_DEVICE (device), NULL);
+
   if (device->priv->device_class != NULL)
     return g_strdup (device->priv->device_class);
   else
@@ -276,6 +284,8 @@
 {
   GstDeviceClass *klass = GST_DEVICE_GET_CLASS (device);
 
+  g_return_val_if_fail (GST_IS_DEVICE (device), FALSE);
+
   if (klass->reconfigure_element)
     return klass->reconfigure_element (device, element);
   else
@@ -299,6 +309,8 @@
 {
   g_return_val_if_fail (GST_IS_DEVICE (device), FALSE);
 
+  if (!classes)
+    return TRUE;
 
   for (; classes[0]; classes++) {
     const gchar *found;
@@ -340,6 +352,11 @@
   gchar **classesv;
   gboolean res;
 
+  g_return_val_if_fail (GST_IS_DEVICE (device), FALSE);
+
+  if (!classes)
+    return TRUE;
+
   classesv = g_strsplit (classes, "/", 0);
 
   res = gst_device_has_classesv (device, classesv);
diff --git a/gst/gstdevicemonitor.c b/gst/gstdevicemonitor.c
index 6fabe11..e193661 100644
--- a/gst/gstdevicemonitor.c
+++ b/gst/gstdevicemonitor.c
@@ -1,7 +1,7 @@
 /* GStreamer
- * Copyright (C) 2012 Olivier Crete <olivier.crete@collabora.com>
+ * Copyright (C) 2013 Olivier Crete <olivier.crete@collabora.com>
  *
- * gstdevicemonitor.c: Device probing and monitoring
+ * gstdevicemonitor.c: device monitor
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -22,321 +22,228 @@
 /**
  * SECTION:gstdevicemonitor
  * @short_description: A device monitor and prober
- * @see_also: #GstDevice, #GstGlobalDeviceMonitor
+ * @see_also: #GstDevice, #GstDeviceProvider
  *
- * A #GstDeviceMonitor subclass is provided by a plugin that handles devices
- * if there is a way to programatically list connected devices. It can also
- * optionally provide updates to the list of connected devices.
+ * Applications should create a #GstDeviceMonitor when they want
+ * to probe, list and monitor devices of a specific type. The
+ * #GstDeviceMonitor will create the appropriate
+ * #GstDeviceProvider objects and manage them. It will then post
+ * messages on its #GstBus for devices that have been added and
+ * removed.
  *
- * Each #GstDeviceMonitor subclass is a singleton, a plugin should
- * normally provide a single subclass for all devices.
+ * The device monitor will monitor all devices matching the filters that
+ * the application has set.
  *
- * Applications would normally use a #GstGlobalDeviceMonitor to monitor devices
- * from all revelant monitors.
+ *
+ * The basic use pattern of a device monitor is as follows:
+ * |[
+ *   static gboolean
+ *   my_bus_func (GstBus * bus, GstMessage * message, gpointer user_data)
+ *   {
+ *      GstDevice *device;
+ *      gchar name;
+ *
+ *      switch (GST_MESSAGE_TYPE (message)) {
+ *        case GST_MESSAGE_DEVICE_ADDED:
+ *          gst_message_parse_device_added (message, &device);
+ *          name = gst_device_get_display_name (device);
+ *          g_print("Device added: %s\n", name);
+ *          g_free (name);
+ *          break;
+ *        case GST_MESSAGE_DEVICE_REMOVED:
+ *          gst_message_parse_device_removed (message, &device);
+ *          name = gst_device_get_display_name (device);
+ *          g_print("Device removed: %s\n", name);
+ *          g_free (name);
+ *          break;
+ *        default:
+ *          break;
+ *      }
+ *
+ *      return G_SOURCE_CONTINUE;
+ *   }
+ *
+ *   GstDeviceMonitor *
+ *   setup_raw_video_source_device_monitor (void) {
+ *      GstDeviceMonitor *monitor;
+ *      GstBus *bus;
+ *      GstCaps *caps;
+ *
+ *      monitor = gst_device_monitor_new ();
+ *
+ *      bus = gst_device_monitor_get_bus (monitor);
+ *      gst_bus_add_watch (bus, my_bus_func, NULL);
+ *      gst_object_unref (bus);
+ *
+ *      caps = gst_caps_new_simple_empty ("video/x-raw");
+ *      gst_device_monitor_add_filter (monitor, "Video/Source", caps);
+ *      gst_caps_unref (caps);
+ *
+ *      gst_device_monitor_start (monitor);
+ *
+ *      return monitor;
+ *   }
+ * ]|
  *
  * Since: 1.4
  */
 
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
 #include "gst_private.h"
-
 #include "gstdevicemonitor.h"
 
-#include "gstelementmetadata.h"
-#include "gstquark.h"
-
 struct _GstDeviceMonitorPrivate
 {
+  gboolean started;
+
   GstBus *bus;
 
-  GMutex start_lock;
+  GPtrArray *providers;
+  guint cookie;
 
-  gboolean started_count;
+  GPtrArray *filters;
+
+  guint last_id;
 };
 
-/* this is used in gstelementfactory.c:gst_element_register() */
-GQuark __gst_devicemonitorclass_factory = 0;
 
-static void gst_device_monitor_class_init (GstDeviceMonitorClass * klass);
-static void gst_device_monitor_init (GstDeviceMonitor * element);
-static void gst_device_monitor_base_class_init (gpointer g_class);
-static void gst_device_monitor_base_class_finalize (gpointer g_class);
+G_DEFINE_TYPE (GstDeviceMonitor, gst_device_monitor, GST_TYPE_OBJECT);
+
 static void gst_device_monitor_dispose (GObject * object);
-static void gst_device_monitor_finalize (GObject * object);
 
-static gpointer gst_device_monitor_parent_class = NULL;
-
-GType
-gst_device_monitor_get_type (void)
+struct DeviceFilter
 {
-  static volatile gsize gst_device_monitor_type = 0;
+  guint id;
 
-  if (g_once_init_enter (&gst_device_monitor_type)) {
-    GType _type;
-    static const GTypeInfo element_info = {
-      sizeof (GstDeviceMonitorClass),
-      gst_device_monitor_base_class_init,
-      gst_device_monitor_base_class_finalize,
-      (GClassInitFunc) gst_device_monitor_class_init,
-      NULL,
-      NULL,
-      sizeof (GstDeviceMonitor),
-      0,
-      (GInstanceInitFunc) gst_device_monitor_init,
-      NULL
-    };
-
-    _type = g_type_register_static (GST_TYPE_OBJECT, "GstDeviceMonitor",
-        &element_info, G_TYPE_FLAG_ABSTRACT);
-
-    __gst_devicemonitorclass_factory =
-        g_quark_from_static_string ("GST_DEVICEMONITORCLASS_FACTORY");
-    g_once_init_leave (&gst_device_monitor_type, _type);
-  }
-  return gst_device_monitor_type;
-}
+  gchar **classesv;
+  GstCaps *caps;
+};
 
 static void
-gst_device_monitor_base_class_init (gpointer g_class)
+device_filter_free (struct DeviceFilter *filter)
 {
-  GstDeviceMonitorClass *klass = GST_DEVICE_MONITOR_CLASS (g_class);
+  g_strfreev (filter->classesv);
+  gst_caps_unref (filter->caps);
 
-  /* Copy the element details here so elements can inherit the
-   * details from their base class and classes only need to set
-   * the details in class_init instead of base_init */
-  klass->metadata =
-      klass->metadata ? gst_structure_copy (klass->metadata) :
-      gst_structure_new_empty ("metadata");
-
-  klass->factory = g_type_get_qdata (G_TYPE_FROM_CLASS (klass),
-      __gst_devicemonitorclass_factory);
-}
-
-static void
-gst_device_monitor_base_class_finalize (gpointer g_class)
-{
-  GstDeviceMonitorClass *klass = GST_DEVICE_MONITOR_CLASS (g_class);
-
-  gst_structure_free (klass->metadata);
+  g_slice_free (struct DeviceFilter, filter);
 }
 
 static void
 gst_device_monitor_class_init (GstDeviceMonitorClass * klass)
 {
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-
-  gst_device_monitor_parent_class = g_type_class_peek_parent (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   g_type_class_add_private (klass, sizeof (GstDeviceMonitorPrivate));
 
-  gobject_class->dispose = gst_device_monitor_dispose;
-  gobject_class->finalize = gst_device_monitor_finalize;
+  object_class->dispose = gst_device_monitor_dispose;
 }
 
 static void
-gst_device_monitor_init (GstDeviceMonitor * monitor)
+bus_sync_message (GstBus * bus, GstMessage * message,
+    GstDeviceMonitor * monitor)
 {
-  monitor->priv = G_TYPE_INSTANCE_GET_PRIVATE (monitor,
-      GST_TYPE_DEVICE_MONITOR, GstDeviceMonitorPrivate);
+  GstMessageType type = GST_MESSAGE_TYPE (message);
 
-  g_mutex_init (&monitor->priv->start_lock);
+  if (type == GST_MESSAGE_DEVICE_ADDED || type == GST_MESSAGE_DEVICE_REMOVED) {
+    gboolean matches;
+    GstDevice *device;
 
-  monitor->priv->bus = gst_bus_new ();
-  gst_bus_set_flushing (monitor->priv->bus, TRUE);
+    if (type == GST_MESSAGE_DEVICE_ADDED)
+      gst_message_parse_device_added (message, &device);
+    else
+      gst_message_parse_device_removed (message, &device);
+
+    GST_OBJECT_LOCK (monitor);
+    if (monitor->priv->filters->len) {
+      guint i;
+
+      for (i = 0; i < monitor->priv->filters->len; i++) {
+        struct DeviceFilter *filter =
+            g_ptr_array_index (monitor->priv->filters, i);
+        GstCaps *caps;
+
+        caps = gst_device_get_caps (device);
+        matches = gst_caps_can_intersect (filter->caps, caps) &&
+            gst_device_has_classesv (device, filter->classesv);
+        gst_caps_unref (caps);
+        if (matches)
+          break;
+      }
+    } else {
+      matches = TRUE;
+    }
+    GST_OBJECT_UNLOCK (monitor);
+
+    gst_object_unref (device);
+
+    if (matches)
+      gst_bus_post (monitor->priv->bus, gst_message_ref (message));
+  }
 }
 
 
 static void
+gst_device_monitor_init (GstDeviceMonitor * self)
+{
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+      GST_TYPE_DEVICE_MONITOR, GstDeviceMonitorPrivate);
+
+  self->priv->bus = gst_bus_new ();
+  gst_bus_set_flushing (self->priv->bus, TRUE);
+
+  self->priv->providers = g_ptr_array_new ();
+  self->priv->filters = g_ptr_array_new_with_free_func (
+      (GDestroyNotify) device_filter_free);
+
+  self->priv->last_id = 1;
+}
+
+
+static void
+gst_device_monitor_remove (GstDeviceMonitor * self, guint i)
+{
+  GstDeviceProvider *provider = g_ptr_array_index (self->priv->providers, i);
+  GstBus *bus;
+
+  g_ptr_array_remove_index_fast (self->priv->providers, i);
+
+  bus = gst_device_provider_get_bus (provider);
+  g_signal_handlers_disconnect_by_func (bus, bus_sync_message, self);
+  gst_object_unref (bus);
+
+  gst_object_unref (provider);
+}
+
+static void
 gst_device_monitor_dispose (GObject * object)
 {
-  GstDeviceMonitor *monitor = GST_DEVICE_MONITOR (object);
+  GstDeviceMonitor *self = GST_DEVICE_MONITOR (object);
 
-  gst_object_replace ((GstObject **) & monitor->priv->bus, NULL);
+  g_return_if_fail (self->priv->started == FALSE);
 
-  GST_OBJECT_LOCK (monitor);
-  g_list_free_full (monitor->devices, (GDestroyNotify) gst_object_unparent);
-  monitor->devices = NULL;
-  GST_OBJECT_UNLOCK (monitor);
+  if (self->priv->providers) {
+    while (self->priv->providers->len)
+      gst_device_monitor_remove (self, self->priv->providers->len - 1);
+    g_ptr_array_unref (self->priv->providers);
+    self->priv->providers = NULL;
+  }
+
+  g_clear_pointer (&self->priv->filters, (GDestroyNotify) g_ptr_array_unref);
+
+  gst_object_replace ((GstObject **) & self->priv->bus, NULL);
 
   G_OBJECT_CLASS (gst_device_monitor_parent_class)->dispose (object);
 }
 
-static void
-gst_device_monitor_finalize (GObject * object)
-{
-  GstDeviceMonitor *monitor = GST_DEVICE_MONITOR (object);
-
-  g_mutex_clear (&monitor->priv->start_lock);
-
-  G_OBJECT_CLASS (gst_device_monitor_parent_class)->finalize (object);
-}
-
-/**
- * gst_device_monitor_class_add_metadata:
- * @klass: class to set metadata for
- * @key: the key to set
- * @value: the value to set
- *
- * Set @key with @value as metadata in @klass.
- */
-void
-gst_device_monitor_class_add_metadata (GstDeviceMonitorClass * klass,
-    const gchar * key, const gchar * value)
-{
-  g_return_if_fail (GST_IS_DEVICE_MONITOR_CLASS (klass));
-  g_return_if_fail (key != NULL);
-  g_return_if_fail (value != NULL);
-
-  gst_structure_set ((GstStructure *) klass->metadata,
-      key, G_TYPE_STRING, value, NULL);
-}
-
-/**
- * gst_device_monitor_class_add_static_metadata:
- * @klass: class to set metadata for
- * @key: the key to set
- * @value: the value to set
- *
- * Set @key with @value as metadata in @klass.
- *
- * Same as gst_device_monitor_class_add_metadata(), but @value must be a static string
- * or an inlined string, as it will not be copied. (GStreamer plugins will
- * be made resident once loaded, so this function can be used even from
- * dynamically loaded plugins.)
- *
- * Since: 1.4
- */
-void
-gst_device_monitor_class_add_static_metadata (GstDeviceMonitorClass * klass,
-    const gchar * key, const gchar * value)
-{
-  GValue val = G_VALUE_INIT;
-
-  g_return_if_fail (GST_IS_DEVICE_MONITOR_CLASS (klass));
-  g_return_if_fail (key != NULL);
-  g_return_if_fail (value != NULL);
-
-  g_value_init (&val, G_TYPE_STRING);
-  g_value_set_static_string (&val, value);
-  gst_structure_take_value ((GstStructure *) klass->metadata, key, &val);
-}
-
-/**
- * gst_device_monitor_class_set_metadata:
- * @klass: class to set metadata for
- * @longname: The long English name of the device monitor. E.g. "File Sink"
- * @classification: String describing the type of device monitor, as an unordered list
- * separated with slashes ('/'). See draft-klass.txt of the design docs
- * for more details and common types. E.g: "Sink/File"
- * @description: Sentence describing the purpose of the device monitor.
- * E.g: "Write stream to a file"
- * @author: Name and contact details of the author(s). Use \n to separate
- * multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"
- *
- * Sets the detailed information for a #GstDeviceMonitorClass.
- * <note>This function is for use in _class_init functions only.</note>
- *
- * Since: 1.4
- */
-void
-gst_device_monitor_class_set_metadata (GstDeviceMonitorClass * klass,
-    const gchar * longname, const gchar * classification,
-    const gchar * description, const gchar * author)
-{
-  g_return_if_fail (GST_IS_DEVICE_MONITOR_CLASS (klass));
-  g_return_if_fail (longname != NULL && *longname != '\0');
-  g_return_if_fail (classification != NULL && *classification != '\0');
-  g_return_if_fail (description != NULL && *description != '\0');
-  g_return_if_fail (author != NULL && *author != '\0');
-
-  gst_structure_id_set ((GstStructure *) klass->metadata,
-      GST_QUARK (ELEMENT_METADATA_LONGNAME), G_TYPE_STRING, longname,
-      GST_QUARK (ELEMENT_METADATA_KLASS), G_TYPE_STRING, classification,
-      GST_QUARK (ELEMENT_METADATA_DESCRIPTION), G_TYPE_STRING, description,
-      GST_QUARK (ELEMENT_METADATA_AUTHOR), G_TYPE_STRING, author, NULL);
-}
-
-/**
- * gst_device_monitor_class_set_static_metadata:
- * @klass: class to set metadata for
- * @longname: The long English name of the element. E.g. "File Sink"
- * @classification: String describing the type of element, as an unordered list
- * separated with slashes ('/'). See draft-klass.txt of the design docs
- * for more details and common types. E.g: "Sink/File"
- * @description: Sentence describing the purpose of the element.
- * E.g: "Write stream to a file"
- * @author: Name and contact details of the author(s). Use \n to separate
- * multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"
- *
- * Sets the detailed information for a #GstDeviceMonitorClass.
- * <note>This function is for use in _class_init functions only.</note>
- *
- * Same as gst_device_monitor_class_set_metadata(), but @longname, @classification,
- * @description, and @author must be static strings or inlined strings, as
- * they will not be copied. (GStreamer plugins will be made resident once
- * loaded, so this function can be used even from dynamically loaded plugins.)
- *
- * Since: 1.4
- */
-void
-gst_device_monitor_class_set_static_metadata (GstDeviceMonitorClass * klass,
-    const gchar * longname, const gchar * classification,
-    const gchar * description, const gchar * author)
-{
-  GstStructure *s = (GstStructure *) klass->metadata;
-  GValue val = G_VALUE_INIT;
-
-  g_return_if_fail (GST_IS_DEVICE_MONITOR_CLASS (klass));
-  g_return_if_fail (longname != NULL && *longname != '\0');
-  g_return_if_fail (classification != NULL && *classification != '\0');
-  g_return_if_fail (description != NULL && *description != '\0');
-  g_return_if_fail (author != NULL && *author != '\0');
-
-  g_value_init (&val, G_TYPE_STRING);
-
-  g_value_set_static_string (&val, longname);
-  gst_structure_id_set_value (s, GST_QUARK (ELEMENT_METADATA_LONGNAME), &val);
-
-  g_value_set_static_string (&val, classification);
-  gst_structure_id_set_value (s, GST_QUARK (ELEMENT_METADATA_KLASS), &val);
-
-  g_value_set_static_string (&val, description);
-  gst_structure_id_set_value (s, GST_QUARK (ELEMENT_METADATA_DESCRIPTION),
-      &val);
-
-  g_value_set_static_string (&val, author);
-  gst_structure_id_take_value (s, GST_QUARK (ELEMENT_METADATA_AUTHOR), &val);
-}
-
-/**
- * gst_device_monitor_class_get_metadata:
- * @klass: class to get metadata for
- * @key: the key to get
- *
- * Get metadata with @key in @klass.
- *
- * Returns: the metadata for @key.
- *
- * Since: 1.4
- */
-const gchar *
-gst_device_monitor_class_get_metadata (GstDeviceMonitorClass * klass,
-    const gchar * key)
-{
-  g_return_val_if_fail (GST_IS_DEVICE_MONITOR_CLASS (klass), NULL);
-  g_return_val_if_fail (key != NULL, NULL);
-
-  return gst_structure_get_string ((GstStructure *) klass->metadata, key);
-}
-
 /**
  * gst_device_monitor_get_devices:
- * @monitor: A #GstDeviceMonitor
+ * @monitor: A #GstDeviceProvider
  *
- * Gets a list of devices that this monitor understands. This may actually
+ * Gets a list of devices from all of the relevant monitors. This may actually
  * probe the hardware if the monitor is not currently started.
  *
  * Returns: (transfer full) (element-type GstDevice): a #GList of
@@ -348,26 +255,71 @@
 GList *
 gst_device_monitor_get_devices (GstDeviceMonitor * monitor)
 {
-  GstDeviceMonitorClass *klass;
   GList *devices = NULL;
-  gboolean started;
-  GList *item;
+  guint i;
+  guint cookie;
 
   g_return_val_if_fail (GST_IS_DEVICE_MONITOR (monitor), NULL);
-  klass = GST_DEVICE_MONITOR_GET_CLASS (monitor);
 
-  g_mutex_lock (&monitor->priv->start_lock);
-  started = (monitor->priv->started_count > 0);
+  GST_OBJECT_LOCK (monitor);
 
-  if (started) {
-    GST_OBJECT_LOCK (monitor);
-    for (item = monitor->devices; item; item = item->next)
-      devices = g_list_prepend (devices, gst_object_ref (item->data));
+  if (monitor->priv->filters->len == 0) {
     GST_OBJECT_UNLOCK (monitor);
-  } else if (klass->probe)
-    devices = klass->probe (monitor);
+    GST_WARNING_OBJECT (monitor, "No filters have been set");
+    return FALSE;
+  }
 
-  g_mutex_unlock (&monitor->priv->start_lock);
+  if (monitor->priv->providers->len == 0) {
+    GST_OBJECT_UNLOCK (monitor);
+    GST_WARNING_OBJECT (monitor, "No providers match the current filters");
+    return FALSE;
+  }
+
+again:
+
+  g_list_free_full (devices, gst_object_unref);
+  devices = NULL;
+
+  cookie = monitor->priv->cookie;
+
+  for (i = 0; i < monitor->priv->providers->len; i++) {
+    GList *tmpdev;
+    GstDeviceProvider *provider =
+        gst_object_ref (g_ptr_array_index (monitor->priv->providers, i));
+    GList *item;
+
+    GST_OBJECT_UNLOCK (monitor);
+
+    tmpdev = gst_device_provider_get_devices (provider);
+
+    GST_OBJECT_LOCK (monitor);
+
+    for (item = tmpdev; item; item = item->next) {
+      GstDevice *dev = GST_DEVICE (item->data);
+      GstCaps *caps = gst_device_get_caps (dev);
+      guint j;
+
+      for (j = 0; j < monitor->priv->filters->len; j++) {
+        struct DeviceFilter *filter =
+            g_ptr_array_index (monitor->priv->filters, j);
+        if (gst_caps_can_intersect (filter->caps, caps) &&
+            gst_device_has_classesv (dev, filter->classesv)) {
+          devices = g_list_prepend (devices, gst_object_ref (dev));
+          break;
+        }
+      }
+      gst_caps_unref (caps);
+    }
+
+    g_list_free_full (tmpdev, gst_object_unref);
+    gst_object_unref (provider);
+
+
+    if (monitor->priv->cookie != cookie)
+      goto again;
+  }
+
+  GST_OBJECT_UNLOCK (monitor);
 
   return devices;
 }
@@ -376,14 +328,9 @@
  * gst_device_monitor_start:
  * @monitor: A #GstDeviceMonitor
  *
- * Starts monitoring the devices. This will cause #GST_MESSAGE_DEVICE messages
- * to be posted on the monitor's bus when devices are added or removed from
- * the system.
- *
- * Since the #GstDeviceMonitor is a singleton,
- * gst_device_monitor_start() may already have been called by another
- * user of the object, gst_device_monitor_stop() needs to be called the same
- * number of times.
+ * Starts monitoring the devices, one this has succeeded, the
+ * %GST_MESSAGE_DEVICE_ADDED and %GST_MESSAGE_DEVICE_REMOVED messages
+ * will be emitted on the bus when the list of devices changes.
  *
  * Returns: %TRUE if the device monitoring could be started
  *
@@ -393,118 +340,262 @@
 gboolean
 gst_device_monitor_start (GstDeviceMonitor * monitor)
 {
-  GstDeviceMonitorClass *klass;
-  gboolean ret = FALSE;
+  guint i;
 
   g_return_val_if_fail (GST_IS_DEVICE_MONITOR (monitor), FALSE);
-  klass = GST_DEVICE_MONITOR_GET_CLASS (monitor);
 
-  g_mutex_lock (&monitor->priv->start_lock);
+  GST_OBJECT_LOCK (monitor);
 
-  if (monitor->priv->started_count > 0) {
-    ret = TRUE;
-    goto started;
+  if (monitor->priv->filters->len == 0) {
+    GST_OBJECT_UNLOCK (monitor);
+    GST_WARNING_OBJECT (monitor, "No filters have been set, will expose all "
+        "devices found");
+    gst_device_monitor_add_filter (monitor, NULL, NULL);
+    GST_OBJECT_LOCK (monitor);
   }
 
-  if (klass->start)
-    ret = klass->start (monitor);
-
-  if (ret) {
-    monitor->priv->started_count++;
-    gst_bus_set_flushing (monitor->priv->bus, FALSE);
+  if (monitor->priv->providers->len == 0) {
+    GST_OBJECT_UNLOCK (monitor);
+    GST_WARNING_OBJECT (monitor, "No providers match the current filters");
+    return FALSE;
   }
 
-started:
+  gst_bus_set_flushing (monitor->priv->bus, FALSE);
 
-  g_mutex_unlock (&monitor->priv->start_lock);
+  for (i = 0; i < monitor->priv->providers->len; i++) {
+    GstDeviceProvider *provider =
+        g_ptr_array_index (monitor->priv->providers, i);
 
-  return ret;
+    if (gst_device_provider_can_monitor (provider)) {
+      if (!gst_device_provider_start (provider)) {
+        gst_bus_set_flushing (monitor->priv->bus, TRUE);
+
+        for (; i != 0; i--)
+          gst_device_provider_stop (g_ptr_array_index (monitor->priv->providers,
+                  i - 1));
+
+        GST_OBJECT_UNLOCK (monitor);
+        return FALSE;
+      }
+    }
+  }
+
+  monitor->priv->started = TRUE;
+  GST_OBJECT_UNLOCK (monitor);
+
+  return TRUE;
 }
 
 /**
  * gst_device_monitor_stop:
- * @monitor: A #GstDeviceMonitor
+ * @monitor: A #GstDeviceProvider
  *
- * Decreases the use-count by one. If the use count reaches zero, this
- * #GstDeviceMonitor will stop monitoring the devices. This needs to be
- * called the same number of times that gst_device_monitor_start() was called.
+ * Stops monitoring the devices.
  *
  * Since: 1.4
  */
-
 void
 gst_device_monitor_stop (GstDeviceMonitor * monitor)
 {
-  GstDeviceMonitorClass *klass;
+  guint i;
 
   g_return_if_fail (GST_IS_DEVICE_MONITOR (monitor));
-  klass = GST_DEVICE_MONITOR_GET_CLASS (monitor);
 
-  g_mutex_lock (&monitor->priv->start_lock);
+  gst_bus_set_flushing (monitor->priv->bus, TRUE);
 
-  if (monitor->priv->started_count == 1) {
-    gst_bus_set_flushing (monitor->priv->bus, TRUE);
-    if (klass->stop)
-      klass->stop (monitor);
-    GST_OBJECT_LOCK (monitor);
-    g_list_free_full (monitor->devices, (GDestroyNotify) gst_object_unparent);
-    monitor->devices = NULL;
-    GST_OBJECT_UNLOCK (monitor);
-  } else if (monitor->priv->started_count < 1) {
-    g_critical ("Trying to stop a GstDeviceMonitor %s which is already stopped",
-        GST_OBJECT_NAME (monitor));
+  GST_OBJECT_LOCK (monitor);
+  for (i = 0; i < monitor->priv->providers->len; i++) {
+    GstDeviceProvider *provider =
+        g_ptr_array_index (monitor->priv->providers, i);
+
+    if (gst_device_provider_can_monitor (provider))
+      gst_device_provider_stop (provider);
   }
+  monitor->priv->started = FALSE;
+  GST_OBJECT_UNLOCK (monitor);
 
-  monitor->priv->started_count--;
-  g_mutex_unlock (&monitor->priv->start_lock);
 }
 
-
 /**
- * gst_device_monitor_get_factory:
- * @monitor: a #GstDeviceMonitor to request the device monitor factory of.
+ * gst_device_monitor_add_filter:
+ * @monitor: a device monitor
+ * @classes: device classes to use as filter or %NULL for any class
+ * @caps: (allow-none): the #GstCaps to filter or %NULL for ANY
  *
- * Retrieves the factory that was used to create this device monitor.
+ * Adds a filter for which #GstDevice will be monitored, any device that matches
+ * all classes and the #GstCaps will be returned.
  *
- * Returns: (transfer none): the #GstDeviceMonitorFactory used for creating this
- *     device monitor. no refcounting is needed.
+ * Filters must be added before the #GstDeviceMonitor is started.
+ *
+ * Returns: The id of the new filter or %0 if no provider matched the filter's
+ *  classes.
  *
  * Since: 1.4
  */
-GstDeviceMonitorFactory *
-gst_device_monitor_get_factory (GstDeviceMonitor * monitor)
+guint
+gst_device_monitor_add_filter (GstDeviceMonitor * monitor,
+    const gchar * classes, GstCaps * caps)
 {
-  g_return_val_if_fail (GST_IS_DEVICE_MONITOR (monitor), NULL);
+  GList *factories = NULL;
+  struct DeviceFilter *filter;
+  guint id = 0;
+  gboolean matched = FALSE;
 
-  return GST_DEVICE_MONITOR_GET_CLASS (monitor)->factory;
+  g_return_val_if_fail (GST_IS_DEVICE_MONITOR (monitor), 0);
+  g_return_val_if_fail (!monitor->priv->started, 0);
+
+  GST_OBJECT_LOCK (monitor);
+
+  filter = g_slice_new0 (struct DeviceFilter);
+  filter->id = monitor->priv->last_id++;
+  if (caps)
+    filter->caps = gst_caps_ref (caps);
+  else
+    filter->caps = gst_caps_new_any ();
+  if (classes)
+    filter->classesv = g_strsplit (classes, "/", 0);
+
+  factories = gst_device_provider_factory_list_get_device_providers (1);
+
+  while (factories) {
+    GstDeviceProviderFactory *factory = factories->data;
+
+
+    if (gst_device_provider_factory_has_classesv (factory, filter->classesv)) {
+      GstDeviceProvider *provider;
+
+      provider = gst_device_provider_factory_get (factory);
+
+      if (provider) {
+        guint i;
+
+        for (i = 0; i < monitor->priv->providers->len; i++) {
+          if (g_ptr_array_index (monitor->priv->providers, i) == provider) {
+            gst_object_unref (provider);
+            provider = NULL;
+            matched = TRUE;
+            break;
+          }
+        }
+      }
+
+      if (provider) {
+        GstBus *bus = gst_device_provider_get_bus (provider);
+
+        matched = TRUE;
+        gst_bus_enable_sync_message_emission (bus);
+        g_signal_connect (bus, "sync-message",
+            G_CALLBACK (bus_sync_message), monitor);
+        gst_object_unref (bus);
+        g_ptr_array_add (monitor->priv->providers, provider);
+        monitor->priv->cookie++;
+      }
+    }
+
+    factories = g_list_remove (factories, factory);
+    gst_object_unref (factory);
+  }
+
+  /* Ensure there is no leak here */
+  g_assert (factories == NULL);
+
+  if (matched) {
+    id = filter->id;
+    g_ptr_array_add (monitor->priv->filters, filter);
+  } else {
+    device_filter_free (filter);
+  }
+
+  GST_OBJECT_UNLOCK (monitor);
+
+  return id;
 }
 
 /**
- * gst_device_monitor_can_monitor:
- * @monitor: a #GstDeviceMonitor
+ * gst_device_monitor_remove_filter:
+ * @monitor: a device monitor
+ * @filter_id: the id of the filter
  *
- * If this function returns %TRUE, then the device monitor can monitor if
- * devices are added or removed. Otherwise, it can only do static probing.
+ * Removes a filter from the #GstDeviceMonitor using the id that was returned
+ * by gst_device_monitor_add_filter().
  *
- * Returns: %TRUE if the #GstDeviceMonitor support monitoring, %FALSE otherwise
+ * Returns: %TRUE of the filter id was valid, %FALSE otherwise
+ *
+ * Since: 1.4
  */
 gboolean
-gst_device_monitor_can_monitor (GstDeviceMonitor * monitor)
+gst_device_monitor_remove_filter (GstDeviceMonitor * monitor, guint filter_id)
 {
-  GstDeviceMonitorClass *klass;
+  guint i, j;
+  gboolean removed = FALSE;
 
   g_return_val_if_fail (GST_IS_DEVICE_MONITOR (monitor), FALSE);
-  klass = GST_DEVICE_MONITOR_GET_CLASS (monitor);
+  g_return_val_if_fail (!monitor->priv->started, FALSE);
+  g_return_val_if_fail (filter_id > 0, FALSE);
 
-  if (klass->start)
-    return TRUE;
-  else
-    return FALSE;
+  GST_OBJECT_LOCK (monitor);
+  for (i = 0; i < monitor->priv->filters->len; i++) {
+    struct DeviceFilter *filter = g_ptr_array_index (monitor->priv->filters, i);
+
+    if (filter->id == filter_id) {
+      g_ptr_array_remove_index (monitor->priv->filters, i);
+      removed = TRUE;
+      break;
+    }
+  }
+
+  if (removed) {
+    for (i = 0; i < monitor->priv->providers->len; i++) {
+      GstDeviceProvider *provider =
+          g_ptr_array_index (monitor->priv->providers, i);
+      GstDeviceProviderFactory *factory =
+          gst_device_provider_get_factory (provider);
+      gboolean valid = FALSE;
+
+      for (j = 0; j < monitor->priv->filters->len; j++) {
+        struct DeviceFilter *filter =
+            g_ptr_array_index (monitor->priv->filters, j);
+
+        if (gst_device_provider_factory_has_classesv (factory,
+                filter->classesv)) {
+          valid = TRUE;
+          break;
+        }
+      }
+
+      if (!valid) {
+        monitor->priv->cookie++;
+        gst_device_monitor_remove (monitor, i);
+        i--;
+      }
+    }
+  }
+
+  GST_OBJECT_UNLOCK (monitor);
+
+  return removed;
+}
+
+
+
+/**
+ * gst_device_monitor_new:
+ *
+ * Create a new #GstDeviceMonitor
+ *
+ * Returns: (transfer full): a new device monitor.
+ *
+ * Since: 1.4
+ */
+GstDeviceMonitor *
+gst_device_monitor_new (void)
+{
+  return g_object_new (GST_TYPE_DEVICE_MONITOR, NULL);
 }
 
 /**
  * gst_device_monitor_get_bus:
- * @monitor: a #GstDeviceMonitor
+ * @monitor: a #GstDeviceProvider
  *
  * Gets the #GstBus of this #GstDeviceMonitor
  *
@@ -519,69 +610,3 @@
 
   return gst_object_ref (monitor->priv->bus);
 }
-
-/**
- * gst_device_monitor_device_add:
- * @monitor: a #GstDeviceMonitor
- * @device: (transfer full): a #GstDevice that has been added
- *
- * Posts a message on the monitor's #GstBus to inform applications that
- * a new device has been added.
- *
- * This is for use by subclasses.
- *
- * Since: 1.4
- */
-void
-gst_device_monitor_device_add (GstDeviceMonitor * monitor, GstDevice * device)
-{
-  GstMessage *message;
-
-  if (!gst_object_set_parent (GST_OBJECT (device), GST_OBJECT (monitor))) {
-    GST_WARNING_OBJECT (monitor, "Could not parent device %p to monitor,"
-        " it already has a parent", device);
-    return;
-  }
-
-  GST_OBJECT_LOCK (monitor);
-  monitor->devices = g_list_prepend (monitor->devices, gst_object_ref (device));
-  GST_OBJECT_UNLOCK (monitor);
-
-  message = gst_message_new_device_added (GST_OBJECT (monitor), device);
-  gst_bus_post (monitor->priv->bus, message);
-  gst_object_unref (device);
-}
-
-
-/**
- * gst_device_monitor_device_remove:
- * @monitor: a #GstDeviceMonitor
- * @device: a #GstDevice that has been removed
- *
- * Posts a message on the monitor's #GstBus to inform applications that
- * a device has been removed.
- *
- * This is for use by subclasses.
- *
- * Since: 1.4
- */
-void
-gst_device_monitor_device_remove (GstDeviceMonitor * monitor,
-    GstDevice * device)
-{
-  GstMessage *message;
-  GList *item;
-
-  GST_OBJECT_LOCK (monitor);
-  item = g_list_find (monitor->devices, device);
-  if (item) {
-    monitor->devices = g_list_delete_link (monitor->devices, item);
-  }
-  GST_OBJECT_UNLOCK (monitor);
-
-  message = gst_message_new_device_removed (GST_OBJECT (monitor), device);
-  g_signal_emit_by_name (device, "removed");
-  gst_bus_post (monitor->priv->bus, message);
-  if (item)
-    gst_object_unparent (GST_OBJECT (device));
-}
diff --git a/gst/gstdevicemonitor.h b/gst/gstdevicemonitor.h
index f5c3307..2df07e4 100644
--- a/gst/gstdevicemonitor.h
+++ b/gst/gstdevicemonitor.h
@@ -1,7 +1,7 @@
 /* GStreamer
- * Copyright (C) 2012 Olivier Crete <olivier.crete@collabora.com>
+ * Copyright (C) 2013 Olivier Crete <olivier.crete@collabora.com>
  *
- * gstdevicemonitor.h: Device probing and monitoring
+ * gstdevicemonitor.c: Device monitor
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -19,19 +19,20 @@
  * Boston, MA 02111-1307, USA.
  */
 
-#include <gst/gstdevicemonitorfactory.h>
-
 
 #ifndef __GST_DEVICE_MONITOR_H__
 #define __GST_DEVICE_MONITOR_H__
 
-#include <gst/gstelement.h>
+#include <gst/gstobject.h>
+#include <gst/gstdevice.h>
+#include <gst/gstdeviceprovider.h>
+#include <gst/gstdeviceproviderfactory.h>
 
 G_BEGIN_DECLS
 
 typedef struct _GstDeviceMonitor GstDeviceMonitor;
-typedef struct _GstDeviceMonitorClass GstDeviceMonitorClass;
 typedef struct _GstDeviceMonitorPrivate GstDeviceMonitorPrivate;
+typedef struct _GstDeviceMonitorClass GstDeviceMonitorClass;
 
 #define GST_TYPE_DEVICE_MONITOR                 (gst_device_monitor_get_type())
 #define GST_IS_DEVICE_MONITOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DEVICE_MONITOR))
@@ -41,21 +42,16 @@
 #define GST_DEVICE_MONITOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DEVICE_MONITOR, GstDeviceMonitorClass))
 #define GST_DEVICE_MONITOR_CAST(obj)            ((GstDeviceMonitor *)(obj))
 
-
 /**
  * GstDeviceMonitor:
- * @parent: The parent #GstObject
- * @devices: a #GList of the #GstDevice objects
+ * @parent: the parent #GstObject structure
  *
- * The structure of the base #GstDeviceMonitor
+ * Opaque device monitor object structure.
  *
  * Since: 1.4
  */
 struct _GstDeviceMonitor {
-  GstObject         parent;
-
-  /* Protected by the Object lock */
-  GList *devices;
+  GstObject                parent;
 
   /*< private >*/
 
@@ -67,75 +63,37 @@
 /**
  * GstDeviceMonitorClass:
  * @parent_class: the parent #GstObjectClass structure
- * @factory: a pointer to the #GstDeviceMonitorFactory that creates this
- *  monitor
- * @probe: Returns a list of devices that are currently available.
- *  This should never block.
- * @start: Starts monitoring for new devices. Only subclasses that can know
- *  that devices have been added or remove need to implement this method.
- * @stop: Stops monitoring for new devices. Only subclasses that implement
- *  the start() method need to implement this method.
  *
- * The structure of the base #GstDeviceMonitorClass
+ * Opaque device monitor class structure.
  *
  * Since: 1.4
  */
-
 struct _GstDeviceMonitorClass {
-  GstObjectClass    parent_class;
-
-  GstDeviceMonitorFactory     *factory;
-
-  GList*      (*probe) (GstDeviceMonitor * monitor);
-
-  gboolean    (*start) (GstDeviceMonitor * monitor);
-  void        (*stop)  (GstDeviceMonitor * monitor);
-
-  /*< private >*/
-  gpointer metadata;
+  GstObjectClass           parent_class;
 
   /*< private >*/
   gpointer _gst_reserved[GST_PADDING];
 };
 
-GType       gst_device_monitor_get_type (void);
+GType     gst_device_monitor_get_type (void);
+
+GstDeviceMonitor * gst_device_monitor_new  (void);
+
+GstBus *  gst_device_monitor_get_bus (GstDeviceMonitor * monitor);
+
+GList *   gst_device_monitor_get_devices (GstDeviceMonitor * monitor);
 
 
-GList *     gst_device_monitor_get_devices    (GstDeviceMonitor * monitor);
+gboolean  gst_device_monitor_start (GstDeviceMonitor * monitor);
 
-gboolean    gst_device_monitor_start          (GstDeviceMonitor * monitor);
-void        gst_device_monitor_stop           (GstDeviceMonitor * monitor);
-
-gboolean    gst_device_monitor_can_monitor    (GstDeviceMonitor * monitor);
-
-GstBus *    gst_device_monitor_get_bus        (GstDeviceMonitor * monitor);
-
-void        gst_device_monitor_device_add     (GstDeviceMonitor * monitor,
-                                               GstDevice * device);
-void        gst_device_monitor_device_remove  (GstDeviceMonitor * monitor,
-                                               GstDevice * device);
+void      gst_device_monitor_stop  (GstDeviceMonitor * monitor);
 
 
-/* device monitor class meta data */
-void        gst_device_monitor_class_set_metadata          (GstDeviceMonitorClass *klass,
-                                                            const gchar     *longname,
-                                                            const gchar     *classification,
-                                                            const gchar     *description,
-                                                            const gchar     *author);
-void        gst_device_monitor_class_set_static_metadata   (GstDeviceMonitorClass *klass,
-                                                            const gchar     *longname,
-                                                            const gchar     *classification,
-                                                            const gchar     *description,
-                                                            const gchar     *author);
-void        gst_device_monitor_class_add_metadata          (GstDeviceMonitorClass * klass,
-                                                            const gchar * key, const gchar * value);
-void        gst_device_monitor_class_add_static_metadata   (GstDeviceMonitorClass * klass,
-                                                            const gchar * key, const gchar * value);
-const gchar * gst_device_monitor_class_get_metadata        (GstDeviceMonitorClass * klass,
-                                                              const gchar * key);
-
-/* factory management */
-GstDeviceMonitorFactory * gst_device_monitor_get_factory   (GstDeviceMonitor * monitor);
+guint     gst_device_monitor_add_filter (GstDeviceMonitor * monitor,
+                                         const gchar      * classes,
+                                         GstCaps          * caps);
+gboolean  gst_device_monitor_remove_filter (GstDeviceMonitor * monitor,
+                                            guint filter_id);
 
 G_END_DECLS
 
diff --git a/gst/gstdevicemonitorfactory.c b/gst/gstdevicemonitorfactory.c
deleted file mode 100644
index f8c9826..0000000
--- a/gst/gstdevicemonitorfactory.c
+++ /dev/null
@@ -1,594 +0,0 @@
-/* GStreamer
- * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
- *                    2000 Wim Taymans <wtay@chello.be>
- *                    2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
- *
- * gstdevicemonitorfactory.c: GstDeviceMonitorFactory object, support routines
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/**
- * SECTION:gstdevicemonitorfactory
- * @short_description: Create GstDeviceMonitors from a factory
- * @see_also: #GstDeviceMonitor, #GstPlugin, #GstPluginFeature, #GstPadTemplate.
- *
- * #GstDeviceMonitorFactory is used to create instances of device monitors. A
- * GstDeviceMonitorfactory can be added to a #GstPlugin as it is also a
- * #GstPluginFeature.
- *
- * Use the gst_device_monitor_factory_find() and gst_device_monitor_factory_create()
- * functions to create device monitor instances or use gst_device_monitor_factory_make() as a
- * convenient shortcut.
- *
- * Since: 1.4
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gst_private.h"
-
-#include "gstdevicemonitorfactory.h"
-#include "gst.h"
-
-#include "glib-compat-private.h"
-
-GST_DEBUG_CATEGORY_STATIC (device_monitor_factory_debug);
-#define GST_CAT_DEFAULT device_monitor_factory_debug
-
-static void gst_device_monitor_factory_finalize (GObject * object);
-static void gst_device_monitor_factory_cleanup (GstDeviceMonitorFactory *
-    factory);
-
-/* static guint gst_device_monitor_factory_signals[LAST_SIGNAL] = { 0 }; */
-
-/* this is defined in gstelement.c */
-extern GQuark __gst_devicemonitorclass_factory;
-
-#define _do_init \
-{ \
-  GST_DEBUG_CATEGORY_INIT (device_monitor_factory_debug, "GST_DEVICE_MONITOR_FACTORY", \
-      GST_DEBUG_BOLD | GST_DEBUG_FG_WHITE | GST_DEBUG_BG_RED, \
-      "device monitor factories keep information about installed device monitors"); \
-}
-
-G_DEFINE_TYPE_WITH_CODE (GstDeviceMonitorFactory, gst_device_monitor_factory,
-    GST_TYPE_PLUGIN_FEATURE, _do_init);
-
-static void
-gst_device_monitor_factory_class_init (GstDeviceMonitorFactoryClass * klass)
-{
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-
-  gobject_class->finalize = gst_device_monitor_factory_finalize;
-}
-
-static void
-gst_device_monitor_factory_init (GstDeviceMonitorFactory * factory)
-{
-}
-
-static void
-gst_device_monitor_factory_finalize (GObject * object)
-{
-  GstDeviceMonitorFactory *factory = GST_DEVICE_MONITOR_FACTORY (object);
-  GstDeviceMonitor *monitor;
-
-  gst_device_monitor_factory_cleanup (factory);
-
-  monitor = g_atomic_pointer_get (&factory->monitor);
-  if (monitor)
-    gst_object_unref (monitor);
-
-  G_OBJECT_CLASS (gst_device_monitor_factory_parent_class)->finalize (object);
-}
-
-/**
- * gst_device_monitor_factory_find:
- * @name: name of factory to find
- *
- * Search for an device monitor factory of the given name. Refs the returned
- * device monitor factory; caller is responsible for unreffing.
- *
- * Returns: (transfer full): #GstDeviceMonitorFactory if found, %NULL otherwise
- *
- * Since: 1.4
- */
-GstDeviceMonitorFactory *
-gst_device_monitor_factory_find (const gchar * name)
-{
-  GstPluginFeature *feature;
-
-  g_return_val_if_fail (name != NULL, NULL);
-
-  feature = gst_registry_find_feature (gst_registry_get (), name,
-      GST_TYPE_DEVICE_MONITOR_FACTORY);
-  if (feature)
-    return GST_DEVICE_MONITOR_FACTORY (feature);
-
-  /* this isn't an error, for instance when you query if an device monitor factory is
-   * present */
-  GST_LOG ("no such device monitor factory \"%s\"", name);
-
-  return NULL;
-}
-
-static void
-gst_device_monitor_factory_cleanup (GstDeviceMonitorFactory * factory)
-{
-  if (factory->metadata) {
-    gst_structure_free ((GstStructure *) factory->metadata);
-    factory->metadata = NULL;
-  }
-  if (factory->type) {
-    factory->type = G_TYPE_INVALID;
-  }
-}
-
-#define CHECK_METADATA_FIELD(klass, name, key)                                 \
-  G_STMT_START {                                                               \
-    const gchar *metafield = gst_device_monitor_class_get_metadata (klass, key);      \
-    if (G_UNLIKELY (metafield == NULL || *metafield == '\0')) {                \
-      g_warning ("Device monitor factory metadata for '%s' has no valid %s field", name, key);    \
-      goto detailserror;                                                       \
-    } \
-  } G_STMT_END;
-
-/**
- * gst_device_monitor_register:
- * @plugin: (allow-none): #GstPlugin to register the device monitor with, or %NULL for
- *     a static device monitor.
- * @name: name of device monitors of this type
- * @rank: rank of device monitor (higher rank means more importance when autoplugging)
- * @type: GType of device monitor to register
- *
- * Create a new device monitorfactory capable of instantiating objects of the
- * @type and add the factory to @plugin.
- *
- * Returns: %TRUE, if the registering succeeded, %FALSE on error
- *
- * Since: 1.4
- */
-gboolean
-gst_device_monitor_register (GstPlugin * plugin, const gchar * name, guint rank,
-    GType type)
-{
-  GstPluginFeature *existing_feature;
-  GstRegistry *registry;
-  GstDeviceMonitorFactory *factory;
-  GstDeviceMonitorClass *klass;
-
-  g_return_val_if_fail (name != NULL, FALSE);
-  g_return_val_if_fail (g_type_is_a (type, GST_TYPE_DEVICE_MONITOR), FALSE);
-
-  registry = gst_registry_get ();
-
-  /* check if feature already exists, if it exists there is no need to update it
-   * when the registry is getting updated, outdated plugins and all their
-   * features are removed and readded.
-   */
-  existing_feature = gst_registry_lookup_feature (registry, name);
-  if (existing_feature) {
-    GST_DEBUG_OBJECT (registry, "update existing feature %p (%s)",
-        existing_feature, name);
-    factory = GST_DEVICE_MONITOR_FACTORY_CAST (existing_feature);
-    factory->type = type;
-    existing_feature->loaded = TRUE;
-    g_type_set_qdata (type, __gst_devicemonitorclass_factory, factory);
-    gst_object_unref (existing_feature);
-    return TRUE;
-  }
-
-  factory =
-      GST_DEVICE_MONITOR_FACTORY_CAST (g_object_newv
-      (GST_TYPE_DEVICE_MONITOR_FACTORY, 0, NULL));
-  gst_plugin_feature_set_name (GST_PLUGIN_FEATURE_CAST (factory), name);
-  GST_LOG_OBJECT (factory, "Created new device monitorfactory for type %s",
-      g_type_name (type));
-
-  /* provide info needed during class structure setup */
-  g_type_set_qdata (type, __gst_devicemonitorclass_factory, factory);
-  klass = GST_DEVICE_MONITOR_CLASS (g_type_class_ref (type));
-
-  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_LONGNAME);
-  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_KLASS);
-  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_DESCRIPTION);
-  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_AUTHOR);
-
-  factory->type = type;
-  factory->metadata = gst_structure_copy ((GstStructure *) klass->metadata);
-
-  if (plugin && plugin->desc.name) {
-    GST_PLUGIN_FEATURE_CAST (factory)->plugin_name = plugin->desc.name;
-    GST_PLUGIN_FEATURE_CAST (factory)->plugin = plugin;
-    g_object_add_weak_pointer ((GObject *) plugin,
-        (gpointer *) & GST_PLUGIN_FEATURE_CAST (factory)->plugin);
-  } else {
-    GST_PLUGIN_FEATURE_CAST (factory)->plugin_name = "NULL";
-    GST_PLUGIN_FEATURE_CAST (factory)->plugin = NULL;
-  }
-  gst_plugin_feature_set_rank (GST_PLUGIN_FEATURE_CAST (factory), rank);
-  GST_PLUGIN_FEATURE_CAST (factory)->loaded = TRUE;
-
-  gst_registry_add_feature (registry, GST_PLUGIN_FEATURE_CAST (factory));
-
-  return TRUE;
-
-  /* ERRORS */
-detailserror:
-  {
-    gst_device_monitor_factory_cleanup (factory);
-    return FALSE;
-  }
-}
-
-/**
- * gst_device_monitor_factory_get:
- * @factory: factory to instantiate
- *
- * Returns the device monitor of the type defined by the given device
- * monitorfactory.
- *
- * Returns: (transfer full): the #GstDeviceMonitor or %NULL if the
- *     device monitor couldn't be created
- *
- * Since: 1.4
- */
-GstDeviceMonitor *
-gst_device_monitor_factory_get (GstDeviceMonitorFactory * factory)
-{
-  GstDeviceMonitor *device_monitor;
-  GstDeviceMonitorClass *oclass;
-  GstDeviceMonitorFactory *newfactory;
-
-  g_return_val_if_fail (factory != NULL, NULL);
-
-  newfactory =
-      GST_DEVICE_MONITOR_FACTORY (gst_plugin_feature_load (GST_PLUGIN_FEATURE
-          (factory)));
-
-  if (newfactory == NULL)
-    goto load_failed;
-
-  factory = newfactory;
-
-  GST_INFO ("getting device monitor \"%s\"", GST_OBJECT_NAME (factory));
-
-  if (factory->type == 0)
-    goto no_type;
-
-  device_monitor = g_atomic_pointer_get (&newfactory->monitor);
-  if (device_monitor)
-    return gst_object_ref (device_monitor);
-
-  /* create an instance of the device monitor, cast so we don't assert on NULL
-   * also set name as early as we can
-   */
-  device_monitor = GST_DEVICE_MONITOR_CAST (g_object_newv (factory->type, 0,
-          NULL));
-  if (G_UNLIKELY (device_monitor == NULL))
-    goto no_device_monitor;
-
-  /* fill in the pointer to the factory in the device monitor class. The
-   * class will not be unreffed currently.
-   * Be thread safe as there might be 2 threads creating the first instance of
-   * an device monitor at the same moment
-   */
-  oclass = GST_DEVICE_MONITOR_GET_CLASS (device_monitor);
-  if (!g_atomic_pointer_compare_and_exchange (&oclass->factory, NULL, factory))
-    gst_object_unref (factory);
-
-  gst_object_ref_sink (device_monitor);
-
-  /* We use an atomic to make sure we don't create two in parallel */
-  if (!g_atomic_pointer_compare_and_exchange (&newfactory->monitor, NULL,
-          device_monitor)) {
-    gst_object_unref (device_monitor);
-
-    device_monitor = g_atomic_pointer_get (&newfactory->monitor);
-  }
-
-  GST_DEBUG ("created device monitor \"%s\"", GST_OBJECT_NAME (factory));
-
-  return gst_object_ref (device_monitor);
-
-  /* ERRORS */
-load_failed:
-  {
-    GST_WARNING_OBJECT (factory,
-        "loading plugin containing feature %s returned NULL!",
-        GST_OBJECT_NAME (factory));
-    return NULL;
-  }
-no_type:
-  {
-    GST_WARNING_OBJECT (factory, "factory has no type");
-    gst_object_unref (factory);
-    return NULL;
-  }
-no_device_monitor:
-  {
-    GST_WARNING_OBJECT (factory, "could not create device monitor");
-    gst_object_unref (factory);
-    return NULL;
-  }
-}
-
-/**
- * gst_device_monitor_factory_get_by_name:
- * @factoryname: a named factory to instantiate
- *
- * Returns the device monitor of the type defined by the given device
- * monitor factory.
- *
- * Returns: (transfer full): a #GstDeviceMonitor or %NULL if unable to
- * create device monitor
- *
- * Since: 1.4
- */
-GstDeviceMonitor *
-gst_device_monitor_factory_get_by_name (const gchar * factoryname)
-{
-  GstDeviceMonitorFactory *factory;
-  GstDeviceMonitor *device_monitor;
-
-  g_return_val_if_fail (factoryname != NULL, NULL);
-  g_return_val_if_fail (gst_is_initialized (), NULL);
-
-  GST_LOG ("gstdevicemonitorfactory: get_by_name \"%s\"", factoryname);
-
-  factory = gst_device_monitor_factory_find (factoryname);
-  if (factory == NULL)
-    goto no_factory;
-
-  GST_LOG_OBJECT (factory, "found factory %p", factory);
-  device_monitor = gst_device_monitor_factory_get (factory);
-  if (device_monitor == NULL)
-    goto create_failed;
-
-  gst_object_unref (factory);
-  return device_monitor;
-
-  /* ERRORS */
-no_factory:
-  {
-    GST_INFO ("no such device monitor factory \"%s\"!", factoryname);
-    return NULL;
-  }
-create_failed:
-  {
-    GST_INFO_OBJECT (factory, "couldn't create instance!");
-    gst_object_unref (factory);
-    return NULL;
-  }
-}
-
-/**
- * gst_device_monitor_factory_get_device_monitor_type:
- * @factory: factory to get managed #GType from
- *
- * Get the #GType for device monitors managed by this factory. The type can
- * only be retrieved if the device monitor factory is loaded, which can be
- * assured with gst_plugin_feature_load().
- *
- * Returns: the #GType for device monitors managed by this factory or 0 if
- * the factory is not loaded.
- *
- * Since: 1.4
- */
-GType
-gst_device_monitor_factory_get_device_monitor_type (GstDeviceMonitorFactory *
-    factory)
-{
-  g_return_val_if_fail (GST_IS_DEVICE_MONITOR_FACTORY (factory), 0);
-
-  return factory->type;
-}
-
-/**
- * gst_device_monitor_factory_get_metadata:
- * @factory: a #GstDeviceMonitorFactory
- * @key: a key
- *
- * Get the metadata on @factory with @key.
- *
- * Returns: the metadata with @key on @factory or %NULL when there was no
- * metadata with the given @key.
- *
- * Since: 1.4
- */
-const gchar *
-gst_device_monitor_factory_get_metadata (GstDeviceMonitorFactory * factory,
-    const gchar * key)
-{
-  return gst_structure_get_string ((GstStructure *) factory->metadata, key);
-}
-
-/**
- * gst_device_monitor_factory_get_metadata_keys:
- * @factory: a #GstDeviceMonitorFactory
- *
- * Get the available keys for the metadata on @factory.
- *
- * Returns: (transfer full) (element-type utf8) (array zero-terminated=1):
- * a %NULL-terminated array of key strings, or %NULL when there is no
- * metadata. Free with g_strfreev() when no longer needed.
- *
- * Since: 1.4
- */
-gchar **
-gst_device_monitor_factory_get_metadata_keys (GstDeviceMonitorFactory * factory)
-{
-  GstStructure *metadata;
-  gchar **arr;
-  gint i, num;
-
-  g_return_val_if_fail (GST_IS_DEVICE_MONITOR_FACTORY (factory), NULL);
-
-  metadata = (GstStructure *) factory->metadata;
-  if (metadata == NULL)
-    return NULL;
-
-  num = gst_structure_n_fields (metadata);
-  if (num == 0)
-    return NULL;
-
-  arr = g_new (gchar *, num + 1);
-  for (i = 0; i < num; ++i) {
-    arr[i] = g_strdup (gst_structure_nth_field_name (metadata, i));
-  }
-  arr[i] = NULL;
-  return arr;
-}
-
-/**
- * gst_device_monitor_factory_has_classesv:
- * @factory: a #GstDeviceMonitorFactory
- * @classes: (array zero-terminated=1): a %NULL terminated array of
- *   klasses to match, only match if all classes are matched
- *
- * Check if @factory matches all of the given classes
- *
- * Returns: %TRUE if @factory matches.
- *
- * Since: 1.4
- */
-gboolean
-gst_device_monitor_factory_has_classesv (GstDeviceMonitorFactory * factory,
-    gchar ** classes)
-{
-  const gchar *klass;
-
-  g_return_val_if_fail (GST_IS_DEVICE_MONITOR_FACTORY (factory), FALSE);
-
-  klass = gst_device_monitor_factory_get_metadata (factory,
-      GST_ELEMENT_METADATA_KLASS);
-
-  if (klass == NULL) {
-    GST_ERROR_OBJECT (factory,
-        "device monitor factory is missing klass identifiers");
-    return FALSE;
-  }
-
-  for (; classes[0]; classes++) {
-    const gchar *found;
-    guint len;
-
-    if (classes[0] == '\0')
-      continue;
-
-    found = strstr (klass, classes[0]);
-
-    if (!found)
-      return FALSE;
-    if (found != klass && *(found - 1) != '/')
-      return FALSE;
-
-    len = strlen (classes[0]);
-    if (found[len] != 0 && found[len] != '/')
-      return FALSE;
-  }
-
-  return TRUE;
-}
-
-/**
- * gst_device_monitor_factory_has_classes:
- * @factory: a #GstDeviceMonitorFactory
- * @classes: a "/" separate list of klasses to match, only match if all classes
- *  are matched
- *
- * Check if @factory matches all of the given @classes
- *
- * Returns: %TRUE if @factory matches.
- *
- * Since: 1.4
- */
-gboolean
-gst_device_monitor_factory_has_classes (GstDeviceMonitorFactory * factory,
-    const gchar * classes)
-{
-  gchar **classesv;
-  gboolean res;
-
-  classesv = g_strsplit (classes, "/", 0);
-
-  res = gst_device_monitor_factory_has_classesv (factory, classesv);
-
-  g_strfreev (classesv);
-
-  return res;
-}
-
-typedef struct
-{
-  const char *classes;
-  GstRank minrank;
-} FilterData;
-
-static gboolean
-device_monitor_filter (GstPluginFeature * feature, FilterData * data)
-{
-  gboolean res;
-
-  /* we only care about device monitor factories */
-  if (G_UNLIKELY (!GST_IS_DEVICE_MONITOR_FACTORY (feature)))
-    return FALSE;
-
-  res = (gst_plugin_feature_get_rank (feature) >= data->minrank) &&
-      gst_device_monitor_factory_has_classes (GST_DEVICE_MONITOR_FACTORY_CAST
-      (feature), data->classes);
-
-  return res;
-}
-
-/**
- * gst_device_monitor_factory_list_get_device_monitors:
- * @classes: a "/" separate list of klasses to match, only match if all classes
- *  are matched
- * @minrank: Minimum rank
- *
- * Get a list of factories that match all of the given @classes. Only
- * device monitors with a rank greater or equal to @minrank will be
- * returned.  The list of factories is returned by decreasing rank.
- *
- * Returns: (transfer full) (element-type Gst.DeviceMonitorFactory): a #GList of
- *     #GstDeviceMonitorFactory device monitors. Use gst_plugin_feature_list_free() after
- *     usage.
- *
- * Since: 1.4
- */
-GList *gst_device_monitor_factory_list_get_device_monitors
-    (const gchar * classes, GstRank minrank)
-{
-  GList *result;
-  FilterData data;
-
-  /* prepare type */
-  data.classes = classes;
-  data.minrank = minrank;
-
-  /* get the feature list using the filter */
-  result = gst_registry_feature_filter (gst_registry_get (),
-      (GstPluginFeatureFilter) device_monitor_filter, FALSE, &data);
-
-  /* sort on rank and name */
-  result = g_list_sort (result, gst_plugin_feature_rank_compare_func);
-
-  return result;
-}
diff --git a/gst/gstdevicemonitorfactory.h b/gst/gstdevicemonitorfactory.h
deleted file mode 100644
index 02bf04a..0000000
--- a/gst/gstdevicemonitorfactory.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* GStreamer
- * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
- *               2000,2004 Wim Taymans <wim@fluendo.com>
- *               2012 Olivier Crete <olivier.crete@collabora.com>
- *
- * gstdevicemonitorfactory.h: Header for GstDeviceMonitorFactory
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-
-
-#ifndef __GST_DEVICE_MONITOR_FACTORY_H__
-#define __GST_DEVICE_MONITOR_FACTORY_H__
-
-/**
- * GstDeviceMonitorFactory:
- *
- * The opaque #GstDeviceMonitorFactory data structure.
- *
- * Since: 1.4
- */
-
-/**
- * GstDeviceMonitorFactoryClass:
- *
- * The opaque #GstDeviceMonitorFactoryClass data structure.
- *
- * Since: 1.4
- */
-typedef struct _GstDeviceMonitorFactory GstDeviceMonitorFactory;
-typedef struct _GstDeviceMonitorFactoryClass GstDeviceMonitorFactoryClass;
-
-#include <gst/gstconfig.h>
-#include <gst/gstplugin.h>
-#include <gst/gstpluginfeature.h>
-#include <gst/gstdevicemonitor.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DEVICE_MONITOR_FACTORY            (gst_device_monitor_factory_get_type())
-#define GST_DEVICE_MONITOR_FACTORY(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DEVICE_MONITOR_FACTORY,\
-                                                 GstDeviceMonitorFactory))
-#define GST_DEVICE_MONITOR_FACTORY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DEVICE_MONITOR_FACTORY,\
-                                                 GstDeviceMonitorFactoryClass))
-#define GST_IS_DEVICE_MONITOR_FACTORY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DEVICE_MONITOR_FACTORY))
-#define GST_IS_DEVICE_MONITOR_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DEVICE_MONITOR_FACTORY))
-#define GST_DEVICE_MONITOR_FACTORY_CAST(obj)       ((GstDeviceMonitorFactory *)(obj))
-
-GType                   gst_device_monitor_factory_get_type          (void);
-
-GstDeviceMonitorFactory * gst_device_monitor_factory_find            (const gchar *name);
-
-GType                   gst_device_monitor_factory_get_device_monitor_type (GstDeviceMonitorFactory *factory);
-
-const gchar *           gst_device_monitor_factory_get_metadata       (GstDeviceMonitorFactory *factory, const gchar *key);
-gchar **                gst_device_monitor_factory_get_metadata_keys  (GstDeviceMonitorFactory *factory);
-
-GstDeviceMonitor*       gst_device_monitor_factory_get                (GstDeviceMonitorFactory *factory) G_GNUC_MALLOC;
-GstDeviceMonitor*       gst_device_monitor_factory_get_by_name        (const gchar *factoryname) G_GNUC_MALLOC;
-
-gboolean                gst_device_monitor_register                   (GstPlugin *plugin, const gchar *name,
-                                                                       guint rank,
-                                                                       GType type);
-
-gboolean      gst_device_monitor_factory_has_classesv (GstDeviceMonitorFactory * factory,
-                                                       gchar ** classes);
-
-gboolean      gst_device_monitor_factory_has_classes (GstDeviceMonitorFactory *factory,
-                                                      const gchar * classes);
-
-GList *       gst_device_monitor_factory_list_get_device_monitors (const gchar *classes,
-                                                                   GstRank minrank) G_GNUC_MALLOC;
-
-G_END_DECLS
-
-#endif /* __GST_DEVICE_MONITOR_FACTORY_H__ */
diff --git a/gst/gstdeviceprovider.c b/gst/gstdeviceprovider.c
new file mode 100644
index 0000000..ea91200
--- /dev/null
+++ b/gst/gstdeviceprovider.c
@@ -0,0 +1,591 @@
+/* GStreamer
+ * Copyright (C) 2012 Olivier Crete <olivier.crete@collabora.com>
+ *
+ * gstdeviceprovider.c: Device probing and monitoring
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstdeviceprovider
+ * @short_description: A device provider
+ * @see_also: #GstDevice, #GstDeviceMonitor
+ *
+ * A #GstDeviceProvider subclass is provided by a plugin that handles devices
+ * if there is a way to programatically list connected devices. It can also
+ * optionally provide updates to the list of connected devices.
+ *
+ * Each #GstDeviceProvider subclass is a singleton, a plugin should
+ * normally provide a single subclass for all devices.
+ *
+ * Applications would normally use a #GstDeviceMonitor to monitor devices
+ * from all relevant providers.
+ *
+ * Since: 1.4
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gst_private.h"
+
+#include "gstdeviceprovider.h"
+
+#include "gstelementmetadata.h"
+#include "gstquark.h"
+
+struct _GstDeviceProviderPrivate
+{
+  GstBus *bus;
+
+  GMutex start_lock;
+
+  gboolean started_count;
+};
+
+/* this is used in gstelementfactory.c:gst_element_register() */
+GQuark __gst_deviceproviderclass_factory = 0;
+
+static void gst_device_provider_class_init (GstDeviceProviderClass * klass);
+static void gst_device_provider_init (GstDeviceProvider * element);
+static void gst_device_provider_base_class_init (gpointer g_class);
+static void gst_device_provider_base_class_finalize (gpointer g_class);
+static void gst_device_provider_dispose (GObject * object);
+static void gst_device_provider_finalize (GObject * object);
+
+static gpointer gst_device_provider_parent_class = NULL;
+
+GType
+gst_device_provider_get_type (void)
+{
+  static volatile gsize gst_device_provider_type = 0;
+
+  if (g_once_init_enter (&gst_device_provider_type)) {
+    GType _type;
+    static const GTypeInfo element_info = {
+      sizeof (GstDeviceProviderClass),
+      gst_device_provider_base_class_init,
+      gst_device_provider_base_class_finalize,
+      (GClassInitFunc) gst_device_provider_class_init,
+      NULL,
+      NULL,
+      sizeof (GstDeviceProvider),
+      0,
+      (GInstanceInitFunc) gst_device_provider_init,
+      NULL
+    };
+
+    _type = g_type_register_static (GST_TYPE_OBJECT, "GstDeviceProvider",
+        &element_info, G_TYPE_FLAG_ABSTRACT);
+
+    __gst_deviceproviderclass_factory =
+        g_quark_from_static_string ("GST_DEVICEPROVIDERCLASS_FACTORY");
+    g_once_init_leave (&gst_device_provider_type, _type);
+  }
+  return gst_device_provider_type;
+}
+
+static void
+gst_device_provider_base_class_init (gpointer g_class)
+{
+  GstDeviceProviderClass *klass = GST_DEVICE_PROVIDER_CLASS (g_class);
+
+  /* Copy the element details here so elements can inherit the
+   * details from their base class and classes only need to set
+   * the details in class_init instead of base_init */
+  klass->metadata =
+      klass->metadata ? gst_structure_copy (klass->metadata) :
+      gst_structure_new_empty ("metadata");
+
+  klass->factory = g_type_get_qdata (G_TYPE_FROM_CLASS (klass),
+      __gst_deviceproviderclass_factory);
+}
+
+static void
+gst_device_provider_base_class_finalize (gpointer g_class)
+{
+  GstDeviceProviderClass *klass = GST_DEVICE_PROVIDER_CLASS (g_class);
+
+  gst_structure_free (klass->metadata);
+}
+
+static void
+gst_device_provider_class_init (GstDeviceProviderClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gst_device_provider_parent_class = g_type_class_peek_parent (klass);
+
+  g_type_class_add_private (klass, sizeof (GstDeviceProviderPrivate));
+
+  gobject_class->dispose = gst_device_provider_dispose;
+  gobject_class->finalize = gst_device_provider_finalize;
+}
+
+static void
+gst_device_provider_init (GstDeviceProvider * provider)
+{
+  provider->priv = G_TYPE_INSTANCE_GET_PRIVATE (provider,
+      GST_TYPE_DEVICE_PROVIDER, GstDeviceProviderPrivate);
+
+  g_mutex_init (&provider->priv->start_lock);
+
+  provider->priv->bus = gst_bus_new ();
+  gst_bus_set_flushing (provider->priv->bus, TRUE);
+}
+
+
+static void
+gst_device_provider_dispose (GObject * object)
+{
+  GstDeviceProvider *provider = GST_DEVICE_PROVIDER (object);
+
+  gst_object_replace ((GstObject **) & provider->priv->bus, NULL);
+
+  GST_OBJECT_LOCK (provider);
+  g_list_free_full (provider->devices, (GDestroyNotify) gst_object_unparent);
+  provider->devices = NULL;
+  GST_OBJECT_UNLOCK (provider);
+
+  G_OBJECT_CLASS (gst_device_provider_parent_class)->dispose (object);
+}
+
+static void
+gst_device_provider_finalize (GObject * object)
+{
+  GstDeviceProvider *provider = GST_DEVICE_PROVIDER (object);
+
+  g_mutex_clear (&provider->priv->start_lock);
+
+  G_OBJECT_CLASS (gst_device_provider_parent_class)->finalize (object);
+}
+
+/**
+ * gst_device_provider_class_add_metadata:
+ * @klass: class to set metadata for
+ * @key: the key to set
+ * @value: the value to set
+ *
+ * Set @key with @value as metadata in @klass.
+ */
+void
+gst_device_provider_class_add_metadata (GstDeviceProviderClass * klass,
+    const gchar * key, const gchar * value)
+{
+  g_return_if_fail (GST_IS_DEVICE_PROVIDER_CLASS (klass));
+  g_return_if_fail (key != NULL);
+  g_return_if_fail (value != NULL);
+
+  gst_structure_set ((GstStructure *) klass->metadata,
+      key, G_TYPE_STRING, value, NULL);
+}
+
+/**
+ * gst_device_provider_class_add_static_metadata:
+ * @klass: class to set metadata for
+ * @key: the key to set
+ * @value: the value to set
+ *
+ * Set @key with @value as metadata in @klass.
+ *
+ * Same as gst_device_provider_class_add_metadata(), but @value must be a static string
+ * or an inlined string, as it will not be copied. (GStreamer plugins will
+ * be made resident once loaded, so this function can be used even from
+ * dynamically loaded plugins.)
+ *
+ * Since: 1.4
+ */
+void
+gst_device_provider_class_add_static_metadata (GstDeviceProviderClass * klass,
+    const gchar * key, const gchar * value)
+{
+  GValue val = G_VALUE_INIT;
+
+  g_return_if_fail (GST_IS_DEVICE_PROVIDER_CLASS (klass));
+  g_return_if_fail (key != NULL);
+  g_return_if_fail (value != NULL);
+
+  g_value_init (&val, G_TYPE_STRING);
+  g_value_set_static_string (&val, value);
+  gst_structure_take_value ((GstStructure *) klass->metadata, key, &val);
+}
+
+/**
+ * gst_device_provider_class_set_metadata:
+ * @klass: class to set metadata for
+ * @longname: The long English name of the device provider. E.g. "File Sink"
+ * @classification: String describing the type of device provider, as an
+ *  unordered list separated with slashes ('/'). See draft-klass.txt of the
+ *  design docs
+ * for more details and common types. E.g: "Sink/File"
+ * @description: Sentence describing the purpose of the device provider.
+ * E.g: "Write stream to a file"
+ * @author: Name and contact details of the author(s). Use \n to separate
+ * multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"
+ *
+ * Sets the detailed information for a #GstDeviceProviderClass.
+ * <note>This function is for use in _class_init functions only.</note>
+ *
+ * Since: 1.4
+ */
+void
+gst_device_provider_class_set_metadata (GstDeviceProviderClass * klass,
+    const gchar * longname, const gchar * classification,
+    const gchar * description, const gchar * author)
+{
+  g_return_if_fail (GST_IS_DEVICE_PROVIDER_CLASS (klass));
+  g_return_if_fail (longname != NULL && *longname != '\0');
+  g_return_if_fail (classification != NULL && *classification != '\0');
+  g_return_if_fail (description != NULL && *description != '\0');
+  g_return_if_fail (author != NULL && *author != '\0');
+
+  gst_structure_id_set ((GstStructure *) klass->metadata,
+      GST_QUARK (ELEMENT_METADATA_LONGNAME), G_TYPE_STRING, longname,
+      GST_QUARK (ELEMENT_METADATA_KLASS), G_TYPE_STRING, classification,
+      GST_QUARK (ELEMENT_METADATA_DESCRIPTION), G_TYPE_STRING, description,
+      GST_QUARK (ELEMENT_METADATA_AUTHOR), G_TYPE_STRING, author, NULL);
+}
+
+/**
+ * gst_device_provider_class_set_static_metadata:
+ * @klass: class to set metadata for
+ * @longname: The long English name of the element. E.g. "File Sink"
+ * @classification: String describing the type of element, as an unordered list
+ * separated with slashes ('/'). See draft-klass.txt of the design docs
+ * for more details and common types. E.g: "Sink/File"
+ * @description: Sentence describing the purpose of the element.
+ * E.g: "Write stream to a file"
+ * @author: Name and contact details of the author(s). Use \n to separate
+ * multiple author metadata. E.g: "Joe Bloggs &lt;joe.blogs at foo.com&gt;"
+ *
+ * Sets the detailed information for a #GstDeviceProviderClass.
+ * <note>This function is for use in _class_init functions only.</note>
+ *
+ * Same as gst_device_provider_class_set_metadata(), but @longname, @classification,
+ * @description, and @author must be static strings or inlined strings, as
+ * they will not be copied. (GStreamer plugins will be made resident once
+ * loaded, so this function can be used even from dynamically loaded plugins.)
+ *
+ * Since: 1.4
+ */
+void
+gst_device_provider_class_set_static_metadata (GstDeviceProviderClass * klass,
+    const gchar * longname, const gchar * classification,
+    const gchar * description, const gchar * author)
+{
+  GstStructure *s = (GstStructure *) klass->metadata;
+  GValue val = G_VALUE_INIT;
+
+  g_return_if_fail (GST_IS_DEVICE_PROVIDER_CLASS (klass));
+  g_return_if_fail (longname != NULL && *longname != '\0');
+  g_return_if_fail (classification != NULL && *classification != '\0');
+  g_return_if_fail (description != NULL && *description != '\0');
+  g_return_if_fail (author != NULL && *author != '\0');
+
+  g_value_init (&val, G_TYPE_STRING);
+
+  g_value_set_static_string (&val, longname);
+  gst_structure_id_set_value (s, GST_QUARK (ELEMENT_METADATA_LONGNAME), &val);
+
+  g_value_set_static_string (&val, classification);
+  gst_structure_id_set_value (s, GST_QUARK (ELEMENT_METADATA_KLASS), &val);
+
+  g_value_set_static_string (&val, description);
+  gst_structure_id_set_value (s, GST_QUARK (ELEMENT_METADATA_DESCRIPTION),
+      &val);
+
+  g_value_set_static_string (&val, author);
+  gst_structure_id_take_value (s, GST_QUARK (ELEMENT_METADATA_AUTHOR), &val);
+}
+
+/**
+ * gst_device_provider_class_get_metadata:
+ * @klass: class to get metadata for
+ * @key: the key to get
+ *
+ * Get metadata with @key in @klass.
+ *
+ * Returns: the metadata for @key.
+ *
+ * Since: 1.4
+ */
+const gchar *
+gst_device_provider_class_get_metadata (GstDeviceProviderClass * klass,
+    const gchar * key)
+{
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER_CLASS (klass), NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  return gst_structure_get_string ((GstStructure *) klass->metadata, key);
+}
+
+/**
+ * gst_device_provider_get_devices:
+ * @provider: A #GstDeviceProvider
+ *
+ * Gets a list of devices that this provider understands. This may actually
+ * probe the hardware if the provider is not currently started.
+ *
+ * Returns: (transfer full) (element-type GstDevice): a #GList of
+ *   #GstDevice
+ *
+ * Since: 1.4
+ */
+
+GList *
+gst_device_provider_get_devices (GstDeviceProvider * provider)
+{
+  GstDeviceProviderClass *klass;
+  GList *devices = NULL;
+  gboolean started;
+  GList *item;
+
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER (provider), NULL);
+  klass = GST_DEVICE_PROVIDER_GET_CLASS (provider);
+
+  g_mutex_lock (&provider->priv->start_lock);
+  started = (provider->priv->started_count > 0);
+
+  if (started) {
+    GST_OBJECT_LOCK (provider);
+    for (item = provider->devices; item; item = item->next)
+      devices = g_list_prepend (devices, gst_object_ref (item->data));
+    GST_OBJECT_UNLOCK (provider);
+  } else if (klass->probe)
+    devices = klass->probe (provider);
+
+  g_mutex_unlock (&provider->priv->start_lock);
+
+  return devices;
+}
+
+/**
+ * gst_device_provider_start:
+ * @provider: A #GstDeviceProvider
+ *
+ * Starts providering the devices. This will cause #GST_MESSAGE_DEVICE messages
+ * to be posted on the provider's bus when devices are added or removed from
+ * the system.
+ *
+ * Since the #GstDeviceProvider is a singleton,
+ * gst_device_provider_start() may already have been called by another
+ * user of the object, gst_device_provider_stop() needs to be called the same
+ * number of times.
+ *
+ * Returns: %TRUE if the device providering could be started
+ *
+ * Since: 1.4
+ */
+
+gboolean
+gst_device_provider_start (GstDeviceProvider * provider)
+{
+  GstDeviceProviderClass *klass;
+  gboolean ret = FALSE;
+
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER (provider), FALSE);
+  klass = GST_DEVICE_PROVIDER_GET_CLASS (provider);
+
+  g_mutex_lock (&provider->priv->start_lock);
+
+  if (provider->priv->started_count > 0) {
+    ret = TRUE;
+    goto started;
+  }
+
+  if (klass->start)
+    ret = klass->start (provider);
+
+  if (ret) {
+    provider->priv->started_count++;
+    gst_bus_set_flushing (provider->priv->bus, FALSE);
+  }
+
+started:
+
+  g_mutex_unlock (&provider->priv->start_lock);
+
+  return ret;
+}
+
+/**
+ * gst_device_provider_stop:
+ * @provider: A #GstDeviceProvider
+ *
+ * Decreases the use-count by one. If the use count reaches zero, this
+ * #GstDeviceProvider will stop providering the devices. This needs to be
+ * called the same number of times that gst_device_provider_start() was called.
+ *
+ * Since: 1.4
+ */
+
+void
+gst_device_provider_stop (GstDeviceProvider * provider)
+{
+  GstDeviceProviderClass *klass;
+
+  g_return_if_fail (GST_IS_DEVICE_PROVIDER (provider));
+  klass = GST_DEVICE_PROVIDER_GET_CLASS (provider);
+
+  g_mutex_lock (&provider->priv->start_lock);
+
+  if (provider->priv->started_count == 1) {
+    gst_bus_set_flushing (provider->priv->bus, TRUE);
+    if (klass->stop)
+      klass->stop (provider);
+    GST_OBJECT_LOCK (provider);
+    g_list_free_full (provider->devices, (GDestroyNotify) gst_object_unparent);
+    provider->devices = NULL;
+    GST_OBJECT_UNLOCK (provider);
+  } else if (provider->priv->started_count < 1) {
+    g_critical
+        ("Trying to stop a GstDeviceProvider %s which is already stopped",
+        GST_OBJECT_NAME (provider));
+  }
+
+  provider->priv->started_count--;
+  g_mutex_unlock (&provider->priv->start_lock);
+}
+
+
+/**
+ * gst_device_provider_get_factory:
+ * @provider: a #GstDeviceProvider to request the device provider factory of.
+ *
+ * Retrieves the factory that was used to create this device provider.
+ *
+ * Returns: (transfer none): the #GstDeviceProviderFactory used for
+ *     creating this device provider. no refcounting is needed.
+ *
+ * Since: 1.4
+ */
+GstDeviceProviderFactory *
+gst_device_provider_get_factory (GstDeviceProvider * provider)
+{
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER (provider), NULL);
+
+  return GST_DEVICE_PROVIDER_GET_CLASS (provider)->factory;
+}
+
+/**
+ * gst_device_provider_can_provider:
+ * @provider: a #GstDeviceProvider
+ *
+ * If this function returns %TRUE, then the device provider can provider if
+ * devices are added or removed. Otherwise, it can only do static probing.
+ *
+ * Returns: %TRUE if the #GstDeviceProvider support providering, %FALSE otherwise
+ */
+gboolean
+gst_device_provider_can_monitor (GstDeviceProvider * provider)
+{
+  GstDeviceProviderClass *klass;
+
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER (provider), FALSE);
+  klass = GST_DEVICE_PROVIDER_GET_CLASS (provider);
+
+  if (klass->start)
+    return TRUE;
+  else
+    return FALSE;
+}
+
+/**
+ * gst_device_provider_get_bus:
+ * @provider: a #GstDeviceProvider
+ *
+ * Gets the #GstBus of this #GstDeviceProvider
+ *
+ * Returns: (transfer full): a #GstBus
+ *
+ * Since: 1.4
+ */
+GstBus *
+gst_device_provider_get_bus (GstDeviceProvider * provider)
+{
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER (provider), NULL);
+
+  return gst_object_ref (provider->priv->bus);
+}
+
+/**
+ * gst_device_provider_device_add:
+ * @provider: a #GstDeviceProvider
+ * @device: (transfer full): a #GstDevice that has been added
+ *
+ * Posts a message on the provider's #GstBus to inform applications that
+ * a new device has been added.
+ *
+ * This is for use by subclasses.
+ *
+ * Since: 1.4
+ */
+void
+gst_device_provider_device_add (GstDeviceProvider * provider,
+    GstDevice * device)
+{
+  GstMessage *message;
+
+  if (!gst_object_set_parent (GST_OBJECT (device), GST_OBJECT (provider))) {
+    GST_WARNING_OBJECT (provider, "Could not parent device %p to provider,"
+        " it already has a parent", device);
+    return;
+  }
+
+  GST_OBJECT_LOCK (provider);
+  provider->devices = g_list_prepend (provider->devices,
+      gst_object_ref (device));
+  GST_OBJECT_UNLOCK (provider);
+
+  message = gst_message_new_device_added (GST_OBJECT (provider), device);
+  gst_bus_post (provider->priv->bus, message);
+  gst_object_unref (device);
+}
+
+
+/**
+ * gst_device_provider_device_remove:
+ * @provider: a #GstDeviceProvider
+ * @device: a #GstDevice that has been removed
+ *
+ * Posts a message on the provider's #GstBus to inform applications that
+ * a device has been removed.
+ *
+ * This is for use by subclasses.
+ *
+ * Since: 1.4
+ */
+void
+gst_device_provider_device_remove (GstDeviceProvider * provider,
+    GstDevice * device)
+{
+  GstMessage *message;
+  GList *item;
+
+  GST_OBJECT_LOCK (provider);
+  item = g_list_find (provider->devices, device);
+  if (item) {
+    provider->devices = g_list_delete_link (provider->devices, item);
+  }
+  GST_OBJECT_UNLOCK (provider);
+
+  message = gst_message_new_device_removed (GST_OBJECT (provider), device);
+  g_signal_emit_by_name (device, "removed");
+  gst_bus_post (provider->priv->bus, message);
+  if (item)
+    gst_object_unparent (GST_OBJECT (device));
+}
diff --git a/gst/gstdeviceprovider.h b/gst/gstdeviceprovider.h
new file mode 100644
index 0000000..6370afc
--- /dev/null
+++ b/gst/gstdeviceprovider.h
@@ -0,0 +1,142 @@
+/* GStreamer
+ * Copyright (C) 2012 Olivier Crete <olivier.crete@collabora.com>
+ *
+ * gstdeviceprovider.h: Device probing and monitoring
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gstdeviceproviderfactory.h>
+
+
+#ifndef __GST_DEVICE_PROVIDER_H__
+#define __GST_DEVICE_PROVIDER_H__
+
+#include <gst/gstelement.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstDeviceProvider GstDeviceProvider;
+typedef struct _GstDeviceProviderClass GstDeviceProviderClass;
+typedef struct _GstDeviceProviderPrivate GstDeviceProviderPrivate;
+
+#define GST_TYPE_DEVICE_PROVIDER                 (gst_device_provider_get_type())
+#define GST_IS_DEVICE_PROVIDER(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DEVICE_PROVIDER))
+#define GST_IS_DEVICE_PROVIDER_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DEVICE_PROVIDER))
+#define GST_DEVICE_PROVIDER_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_DEVICE_PROVIDER, GstDeviceProviderClass))
+#define GST_DEVICE_PROVIDER(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DEVICE_PROVIDER, GstDeviceProvider))
+#define GST_DEVICE_PROVIDER_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DEVICE_PROVIDER, GstDeviceProviderClass))
+#define GST_DEVICE_PROVIDER_CAST(obj)            ((GstDeviceProvider *)(obj))
+
+
+/**
+ * GstDeviceProvider:
+ * @parent: The parent #GstObject
+ * @devices: a #GList of the #GstDevice objects
+ *
+ * The structure of the base #GstDeviceProvider
+ *
+ * Since: 1.4
+ */
+struct _GstDeviceProvider {
+  GstObject         parent;
+
+  /* Protected by the Object lock */
+  GList *devices;
+
+  /*< private >*/
+
+  GstDeviceProviderPrivate *priv;
+
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstDeviceProviderClass:
+ * @parent_class: the parent #GstObjectClass structure
+ * @factory: a pointer to the #GstDeviceProviderFactory that creates this
+ *  provider
+ * @probe: Returns a list of devices that are currently available.
+ *  This should never block.
+ * @start: Starts monitoring for new devices. Only subclasses that can know
+ *  that devices have been added or remove need to implement this method.
+ * @stop: Stops monitoring for new devices. Only subclasses that implement
+ *  the start() method need to implement this method.
+ *
+ * The structure of the base #GstDeviceProviderClass
+ *
+ * Since: 1.4
+ */
+
+struct _GstDeviceProviderClass {
+  GstObjectClass    parent_class;
+
+  GstDeviceProviderFactory     *factory;
+
+  GList*      (*probe) (GstDeviceProvider * provider);
+
+  gboolean    (*start) (GstDeviceProvider * provider);
+  void        (*stop)  (GstDeviceProvider * provider);
+
+  /*< private >*/
+  gpointer metadata;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+GType       gst_device_provider_get_type (void);
+
+
+GList *     gst_device_provider_get_devices    (GstDeviceProvider * provider);
+
+gboolean    gst_device_provider_start          (GstDeviceProvider * provider);
+void        gst_device_provider_stop           (GstDeviceProvider * provider);
+
+gboolean    gst_device_provider_can_monitor    (GstDeviceProvider * provider);
+
+GstBus *    gst_device_provider_get_bus        (GstDeviceProvider * provider);
+
+void        gst_device_provider_device_add     (GstDeviceProvider * provider,
+                                               GstDevice * device);
+void        gst_device_provider_device_remove  (GstDeviceProvider * provider,
+                                               GstDevice * device);
+
+
+/* device provider class meta data */
+void        gst_device_provider_class_set_metadata          (GstDeviceProviderClass *klass,
+                                                            const gchar     *longname,
+                                                            const gchar     *classification,
+                                                            const gchar     *description,
+                                                            const gchar     *author);
+void        gst_device_provider_class_set_static_metadata   (GstDeviceProviderClass *klass,
+                                                            const gchar     *longname,
+                                                            const gchar     *classification,
+                                                            const gchar     *description,
+                                                            const gchar     *author);
+void        gst_device_provider_class_add_metadata          (GstDeviceProviderClass * klass,
+                                                            const gchar * key, const gchar * value);
+void        gst_device_provider_class_add_static_metadata   (GstDeviceProviderClass * klass,
+                                                            const gchar * key, const gchar * value);
+const gchar * gst_device_provider_class_get_metadata        (GstDeviceProviderClass * klass,
+                                                              const gchar * key);
+
+/* factory management */
+GstDeviceProviderFactory * gst_device_provider_get_factory   (GstDeviceProvider * provider);
+
+G_END_DECLS
+
+#endif /* __GST_DEVICE_PROVIDER_H__ */
diff --git a/gst/gstdeviceproviderfactory.c b/gst/gstdeviceproviderfactory.c
new file mode 100644
index 0000000..3ea0703
--- /dev/null
+++ b/gst/gstdeviceproviderfactory.c
@@ -0,0 +1,580 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *                    2003 Benjamin Otte <in7y118@public.uni-hamburg.de>
+ *
+ * gstdeviceproviderfactory.c: GstDeviceProviderFactory object, support routines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:gstdeviceproviderfactory
+ * @short_description: Create GstDeviceProviders from a factory
+ * @see_also: #GstDeviceProvider, #GstPlugin, #GstPluginFeature, #GstPadTemplate.
+ *
+ * #GstDeviceProviderFactory is used to create instances of device providers. A
+ * GstDeviceProviderfactory can be added to a #GstPlugin as it is also a
+ * #GstPluginFeature.
+ *
+ * Use the gst_device_provider_factory_find() and
+ * gst_device_provider_factory_create() functions to create device
+ * provider instances or use gst_device_provider_factory_make() as a
+ * convenient shortcut.
+ *
+ * Since: 1.4
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gst_private.h"
+
+#include "gstdeviceproviderfactory.h"
+#include "gst.h"
+
+#include "glib-compat-private.h"
+
+GST_DEBUG_CATEGORY_STATIC (device_provider_factory_debug);
+#define GST_CAT_DEFAULT device_provider_factory_debug
+
+static void gst_device_provider_factory_finalize (GObject * object);
+static void gst_device_provider_factory_cleanup (GstDeviceProviderFactory *
+    factory);
+
+/* static guint gst_device_provider_factory_signals[LAST_SIGNAL] = { 0 }; */
+
+/* this is defined in gstelement.c */
+extern GQuark __gst_deviceproviderclass_factory;
+
+#define _do_init \
+{ \
+  GST_DEBUG_CATEGORY_INIT (device_provider_factory_debug, "GST_DEVICE_PROVIDER_FACTORY", \
+      GST_DEBUG_BOLD | GST_DEBUG_FG_WHITE | GST_DEBUG_BG_RED, \
+      "device provider factories keep information about installed device providers"); \
+}
+
+G_DEFINE_TYPE_WITH_CODE (GstDeviceProviderFactory, gst_device_provider_factory,
+    GST_TYPE_PLUGIN_FEATURE, _do_init);
+
+static void
+gst_device_provider_factory_class_init (GstDeviceProviderFactoryClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+
+  gobject_class->finalize = gst_device_provider_factory_finalize;
+}
+
+static void
+gst_device_provider_factory_init (GstDeviceProviderFactory * factory)
+{
+}
+
+static void
+gst_device_provider_factory_finalize (GObject * object)
+{
+  GstDeviceProviderFactory *factory = GST_DEVICE_PROVIDER_FACTORY (object);
+  GstDeviceProvider *provider;
+
+  gst_device_provider_factory_cleanup (factory);
+
+  provider = g_atomic_pointer_get (&factory->provider);
+  if (provider)
+    gst_object_unref (provider);
+
+  G_OBJECT_CLASS (gst_device_provider_factory_parent_class)->finalize (object);
+}
+
+/**
+ * gst_device_provider_factory_find:
+ * @name: name of factory to find
+ *
+ * Search for an device provider factory of the given name. Refs the returned
+ * device provider factory; caller is responsible for unreffing.
+ *
+ * Returns: (transfer full) (nullable): #GstDeviceProviderFactory if
+ * found, %NULL otherwise
+ *
+ * Since: 1.4
+ */
+GstDeviceProviderFactory *
+gst_device_provider_factory_find (const gchar * name)
+{
+  GstPluginFeature *feature;
+
+  g_return_val_if_fail (name != NULL, NULL);
+
+  feature = gst_registry_find_feature (gst_registry_get (), name,
+      GST_TYPE_DEVICE_PROVIDER_FACTORY);
+  if (feature)
+    return GST_DEVICE_PROVIDER_FACTORY (feature);
+
+  /* this isn't an error, for instance when you query if an device provider factory is
+   * present */
+  GST_LOG ("no such device provider factory \"%s\"", name);
+
+  return NULL;
+}
+
+static void
+gst_device_provider_factory_cleanup (GstDeviceProviderFactory * factory)
+{
+  if (factory->metadata) {
+    gst_structure_free ((GstStructure *) factory->metadata);
+    factory->metadata = NULL;
+  }
+  if (factory->type) {
+    factory->type = G_TYPE_INVALID;
+  }
+}
+
+#define CHECK_METADATA_FIELD(klass, name, key)                                 \
+  G_STMT_START {                                                               \
+    const gchar *metafield = gst_device_provider_class_get_metadata (klass, key);      \
+    if (G_UNLIKELY (metafield == NULL || *metafield == '\0')) {                \
+      g_warning ("Device provider factory metadata for '%s' has no valid %s field", name, key);    \
+      goto detailserror;                                                       \
+    } \
+  } G_STMT_END;
+
+/**
+ * gst_device_provider_register:
+ * @plugin: (allow-none): #GstPlugin to register the device provider with, or %NULL for
+ *     a static device provider.
+ * @name: name of device providers of this type
+ * @rank: rank of device provider (higher rank means more importance when autoplugging)
+ * @type: GType of device provider to register
+ *
+ * Create a new device providerfactory capable of instantiating objects of the
+ * @type and add the factory to @plugin.
+ *
+ * Returns: %TRUE, if the registering succeeded, %FALSE on error
+ *
+ * Since: 1.4
+ */
+gboolean
+gst_device_provider_register (GstPlugin * plugin, const gchar * name,
+    guint rank, GType type)
+{
+  GstPluginFeature *existing_feature;
+  GstRegistry *registry;
+  GstDeviceProviderFactory *factory;
+  GstDeviceProviderClass *klass;
+
+  g_return_val_if_fail (name != NULL, FALSE);
+  g_return_val_if_fail (g_type_is_a (type, GST_TYPE_DEVICE_PROVIDER), FALSE);
+
+  registry = gst_registry_get ();
+
+  /* check if feature already exists, if it exists there is no need to update it
+   * when the registry is getting updated, outdated plugins and all their
+   * features are removed and readded.
+   */
+  existing_feature = gst_registry_lookup_feature (registry, name);
+  if (existing_feature) {
+    GST_DEBUG_OBJECT (registry, "update existing feature %p (%s)",
+        existing_feature, name);
+    factory = GST_DEVICE_PROVIDER_FACTORY_CAST (existing_feature);
+    factory->type = type;
+    existing_feature->loaded = TRUE;
+    g_type_set_qdata (type, __gst_deviceproviderclass_factory, factory);
+    gst_object_unref (existing_feature);
+    return TRUE;
+  }
+
+  factory =
+      GST_DEVICE_PROVIDER_FACTORY_CAST (g_object_newv
+      (GST_TYPE_DEVICE_PROVIDER_FACTORY, 0, NULL));
+  gst_plugin_feature_set_name (GST_PLUGIN_FEATURE_CAST (factory), name);
+  GST_LOG_OBJECT (factory, "Created new device providerfactory for type %s",
+      g_type_name (type));
+
+  /* provide info needed during class structure setup */
+  g_type_set_qdata (type, __gst_deviceproviderclass_factory, factory);
+  klass = GST_DEVICE_PROVIDER_CLASS (g_type_class_ref (type));
+
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_LONGNAME);
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_KLASS);
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_DESCRIPTION);
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_AUTHOR);
+
+  factory->type = type;
+  factory->metadata = gst_structure_copy ((GstStructure *) klass->metadata);
+
+  if (plugin && plugin->desc.name) {
+    GST_PLUGIN_FEATURE_CAST (factory)->plugin_name = plugin->desc.name;
+    GST_PLUGIN_FEATURE_CAST (factory)->plugin = plugin;
+    g_object_add_weak_pointer ((GObject *) plugin,
+        (gpointer *) & GST_PLUGIN_FEATURE_CAST (factory)->plugin);
+  } else {
+    GST_PLUGIN_FEATURE_CAST (factory)->plugin_name = "NULL";
+    GST_PLUGIN_FEATURE_CAST (factory)->plugin = NULL;
+  }
+  gst_plugin_feature_set_rank (GST_PLUGIN_FEATURE_CAST (factory), rank);
+  GST_PLUGIN_FEATURE_CAST (factory)->loaded = TRUE;
+
+  gst_registry_add_feature (registry, GST_PLUGIN_FEATURE_CAST (factory));
+
+  return TRUE;
+
+  /* ERRORS */
+detailserror:
+  {
+    gst_device_provider_factory_cleanup (factory);
+    return FALSE;
+  }
+}
+
+/**
+ * gst_device_provider_factory_get:
+ * @factory: factory to instantiate
+ *
+ * Returns the device provider of the type defined by the given device
+ * providerfactory.
+ *
+ * Returns: (transfer full) (nullable): the #GstDeviceProvider or %NULL
+ * if the device provider couldn't be created
+ *
+ * Since: 1.4
+ */
+GstDeviceProvider *
+gst_device_provider_factory_get (GstDeviceProviderFactory * factory)
+{
+  GstDeviceProvider *device_provider;
+  GstDeviceProviderClass *oclass;
+  GstDeviceProviderFactory *newfactory;
+
+  g_return_val_if_fail (factory != NULL, NULL);
+
+  newfactory =
+      GST_DEVICE_PROVIDER_FACTORY (gst_plugin_feature_load (GST_PLUGIN_FEATURE
+          (factory)));
+
+  if (newfactory == NULL)
+    goto load_failed;
+
+  factory = newfactory;
+
+  GST_INFO ("getting device provider \"%s\"", GST_OBJECT_NAME (factory));
+
+  if (factory->type == 0)
+    goto no_type;
+
+  device_provider = g_atomic_pointer_get (&newfactory->provider);
+  if (device_provider)
+    return gst_object_ref (device_provider);
+
+  /* create an instance of the device provider, cast so we don't assert on NULL
+   * also set name as early as we can
+   */
+  device_provider = GST_DEVICE_PROVIDER_CAST (g_object_newv (factory->type, 0,
+          NULL));
+  if (G_UNLIKELY (device_provider == NULL))
+    goto no_device_provider;
+
+  /* fill in the pointer to the factory in the device provider class. The
+   * class will not be unreffed currently.
+   * Be thread safe as there might be 2 threads creating the first instance of
+   * an device provider at the same moment
+   */
+  oclass = GST_DEVICE_PROVIDER_GET_CLASS (device_provider);
+  if (!g_atomic_pointer_compare_and_exchange (&oclass->factory, NULL, factory))
+    gst_object_unref (factory);
+
+  gst_object_ref_sink (device_provider);
+
+  /* We use an atomic to make sure we don't create two in parallel */
+  if (!g_atomic_pointer_compare_and_exchange (&newfactory->provider, NULL,
+          device_provider)) {
+    gst_object_unref (device_provider);
+
+    device_provider = g_atomic_pointer_get (&newfactory->provider);
+  }
+
+  GST_DEBUG ("created device provider \"%s\"", GST_OBJECT_NAME (factory));
+
+  return gst_object_ref (device_provider);
+
+  /* ERRORS */
+load_failed:
+  {
+    GST_WARNING_OBJECT (factory,
+        "loading plugin containing feature %s returned NULL!",
+        GST_OBJECT_NAME (factory));
+    return NULL;
+  }
+no_type:
+  {
+    GST_WARNING_OBJECT (factory, "factory has no type");
+    gst_object_unref (factory);
+    return NULL;
+  }
+no_device_provider:
+  {
+    GST_WARNING_OBJECT (factory, "could not create device provider");
+    gst_object_unref (factory);
+    return NULL;
+  }
+}
+
+/**
+ * gst_device_provider_factory_get_by_name:
+ * @factoryname: a named factory to instantiate
+ *
+ * Returns the device provider of the type defined by the given device
+ * provider factory.
+ *
+ * Returns: (transfer full) (nullable): a #GstDeviceProvider or %NULL
+ * if unable to create device provider
+ *
+ * Since: 1.4
+ */
+GstDeviceProvider *
+gst_device_provider_factory_get_by_name (const gchar * factoryname)
+{
+  GstDeviceProviderFactory *factory;
+  GstDeviceProvider *device_provider;
+
+  g_return_val_if_fail (factoryname != NULL, NULL);
+  g_return_val_if_fail (gst_is_initialized (), NULL);
+
+  GST_LOG ("gstdeviceproviderfactory: get_by_name \"%s\"", factoryname);
+
+  factory = gst_device_provider_factory_find (factoryname);
+  if (factory == NULL)
+    goto no_factory;
+
+  GST_LOG_OBJECT (factory, "found factory %p", factory);
+  device_provider = gst_device_provider_factory_get (factory);
+  if (device_provider == NULL)
+    goto create_failed;
+
+  gst_object_unref (factory);
+  return device_provider;
+
+  /* ERRORS */
+no_factory:
+  {
+    GST_INFO ("no such device provider factory \"%s\"!", factoryname);
+    return NULL;
+  }
+create_failed:
+  {
+    GST_INFO_OBJECT (factory, "couldn't create instance!");
+    gst_object_unref (factory);
+    return NULL;
+  }
+}
+
+/**
+ * gst_device_provider_factory_get_device_provider_type:
+ * @factory: factory to get managed #GType from
+ *
+ * Get the #GType for device providers managed by this factory. The type can
+ * only be retrieved if the device provider factory is loaded, which can be
+ * assured with gst_plugin_feature_load().
+ *
+ * Returns: the #GType for device providers managed by this factory or 0 if
+ * the factory is not loaded.
+ *
+ * Since: 1.4
+ */
+GType
+gst_device_provider_factory_get_device_provider_type (GstDeviceProviderFactory *
+    factory)
+{
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER_FACTORY (factory), 0);
+
+  return factory->type;
+}
+
+/**
+ * gst_device_provider_factory_get_metadata:
+ * @factory: a #GstDeviceProviderFactory
+ * @key: a key
+ *
+ * Get the metadata on @factory with @key.
+ *
+ * Returns: (nullable): the metadata with @key on @factory or %NULL
+ * when there was no metadata with the given @key.
+ *
+ * Since: 1.4
+ */
+const gchar *
+gst_device_provider_factory_get_metadata (GstDeviceProviderFactory * factory,
+    const gchar * key)
+{
+  return gst_structure_get_string ((GstStructure *) factory->metadata, key);
+}
+
+/**
+ * gst_device_provider_factory_get_metadata_keys:
+ * @factory: a #GstDeviceProviderFactory
+ *
+ * Get the available keys for the metadata on @factory.
+ *
+ * Returns: (transfer full) (element-type utf8) (array zero-terminated=1) (nullable):
+ * a %NULL-terminated array of key strings, or %NULL when there is no
+ * metadata. Free with g_strfreev() when no longer needed.
+ *
+ * Since: 1.4
+ */
+gchar **
+gst_device_provider_factory_get_metadata_keys (GstDeviceProviderFactory *
+    factory)
+{
+  GstStructure *metadata;
+  gchar **arr;
+  gint i, num;
+
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER_FACTORY (factory), NULL);
+
+  metadata = (GstStructure *) factory->metadata;
+  if (metadata == NULL)
+    return NULL;
+
+  num = gst_structure_n_fields (metadata);
+  if (num == 0)
+    return NULL;
+
+  arr = g_new (gchar *, num + 1);
+  for (i = 0; i < num; ++i) {
+    arr[i] = g_strdup (gst_structure_nth_field_name (metadata, i));
+  }
+  arr[i] = NULL;
+  return arr;
+}
+
+/**
+ * gst_device_provider_factory_has_classesv:
+ * @factory: a #GstDeviceProviderFactory
+ * @classes: (array zero-terminated=1) (allow-none): a %NULL terminated array
+ *   of klasses to match, only match if all classes are matched
+ *
+ * Check if @factory matches all of the given classes
+ *
+ * Returns: %TRUE if @factory matches.
+ *
+ * Since: 1.4
+ */
+gboolean
+gst_device_provider_factory_has_classesv (GstDeviceProviderFactory * factory,
+    gchar ** classes)
+{
+  const gchar *klass;
+
+  g_return_val_if_fail (GST_IS_DEVICE_PROVIDER_FACTORY (factory), FALSE);
+
+  klass = gst_device_provider_factory_get_metadata (factory,
+      GST_ELEMENT_METADATA_KLASS);
+
+  if (klass == NULL) {
+    GST_ERROR_OBJECT (factory,
+        "device provider factory is missing klass identifiers");
+    return FALSE;
+  }
+
+  for (; classes != NULL && classes[0] != NULL; classes++) {
+    const gchar *found;
+    guint len;
+
+    if (classes[0] == '\0')
+      continue;
+
+    found = strstr (klass, classes[0]);
+
+    if (!found)
+      return FALSE;
+    if (found != klass && *(found - 1) != '/')
+      return FALSE;
+
+    len = strlen (classes[0]);
+    if (found[len] != 0 && found[len] != '/')
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_device_provider_factory_has_classes:
+ * @factory: a #GstDeviceProviderFactory
+ * @classes: (allow-none): a "/" separate list of klasses to match, only match
+ *     if all classes are matched
+ *
+ * Check if @factory matches all of the given @classes
+ *
+ * Returns: %TRUE if @factory matches or if @classes is %NULL.
+ *
+ * Since: 1.4
+ */
+gboolean
+gst_device_provider_factory_has_classes (GstDeviceProviderFactory * factory,
+    const gchar * classes)
+{
+  gchar **classesv;
+  gboolean res;
+
+  if (classes == NULL)
+    return TRUE;
+
+  classesv = g_strsplit (classes, "/", 0);
+
+  res = gst_device_provider_factory_has_classesv (factory, classesv);
+
+  g_strfreev (classesv);
+
+  return res;
+}
+
+static gboolean
+device_provider_filter (GstPluginFeature * feature, GstRank * minrank)
+{
+  /* we only care about device provider factories */
+  if (G_UNLIKELY (!GST_IS_DEVICE_PROVIDER_FACTORY (feature)))
+    return FALSE;
+
+  return (gst_plugin_feature_get_rank (feature) >= *minrank);
+}
+
+/**
+ * gst_device_provider_factory_list_get_device_providers:
+ * @minrank: Minimum rank
+ *
+ * Get a list of factories with a rank greater or equal to @minrank.
+ * The list of factories is returned by decreasing rank.
+ *
+ * Returns: (transfer full) (element-type Gst.DeviceProviderFactory):
+ * a #GList of #GstDeviceProviderFactory device providers. Use
+ * gst_plugin_feature_list_free() after usage.
+ *
+ * Since: 1.4
+ */
+GList *
+gst_device_provider_factory_list_get_device_providers (GstRank minrank)
+{
+  GList *result;
+
+  /* get the feature list using the filter */
+  result = gst_registry_feature_filter (gst_registry_get (),
+      (GstPluginFeatureFilter) device_provider_filter, FALSE, &minrank);
+
+  /* sort on rank and name */
+  result = g_list_sort (result, gst_plugin_feature_rank_compare_func);
+
+  return result;
+}
diff --git a/gst/gstdeviceproviderfactory.h b/gst/gstdeviceproviderfactory.h
new file mode 100644
index 0000000..edda736
--- /dev/null
+++ b/gst/gstdeviceproviderfactory.h
@@ -0,0 +1,90 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *               2000,2004 Wim Taymans <wim@fluendo.com>
+ *               2012 Olivier Crete <olivier.crete@collabora.com>
+ *
+ * gstdeviceproviderfactory.h: Header for GstDeviceProviderFactory
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+
+#ifndef __GST_DEVICE_PROVIDER_FACTORY_H__
+#define __GST_DEVICE_PROVIDER_FACTORY_H__
+
+/**
+ * GstDeviceProviderFactory:
+ *
+ * The opaque #GstDeviceProviderFactory data structure.
+ *
+ * Since: 1.4
+ */
+
+/**
+ * GstDeviceProviderFactoryClass:
+ *
+ * The opaque #GstDeviceProviderFactoryClass data structure.
+ *
+ * Since: 1.4
+ */
+typedef struct _GstDeviceProviderFactory GstDeviceProviderFactory;
+typedef struct _GstDeviceProviderFactoryClass GstDeviceProviderFactoryClass;
+
+#include <gst/gstconfig.h>
+#include <gst/gstplugin.h>
+#include <gst/gstpluginfeature.h>
+#include <gst/gstdeviceprovider.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DEVICE_PROVIDER_FACTORY            (gst_device_provider_factory_get_type())
+#define GST_DEVICE_PROVIDER_FACTORY(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DEVICE_PROVIDER_FACTORY,\
+                                                 GstDeviceProviderFactory))
+#define GST_DEVICE_PROVIDER_FACTORY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DEVICE_PROVIDER_FACTORY,\
+                                                 GstDeviceProviderFactoryClass))
+#define GST_IS_DEVICE_PROVIDER_FACTORY(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DEVICE_PROVIDER_FACTORY))
+#define GST_IS_DEVICE_PROVIDER_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DEVICE_PROVIDER_FACTORY))
+#define GST_DEVICE_PROVIDER_FACTORY_CAST(obj)       ((GstDeviceProviderFactory *)(obj))
+
+GType                   gst_device_provider_factory_get_type          (void);
+
+GstDeviceProviderFactory * gst_device_provider_factory_find            (const gchar *name);
+
+GType                   gst_device_provider_factory_get_device_provider_type (GstDeviceProviderFactory *factory);
+
+const gchar *           gst_device_provider_factory_get_metadata       (GstDeviceProviderFactory *factory, const gchar *key);
+gchar **                gst_device_provider_factory_get_metadata_keys  (GstDeviceProviderFactory *factory);
+
+GstDeviceProvider*       gst_device_provider_factory_get                (GstDeviceProviderFactory *factory) G_GNUC_MALLOC;
+GstDeviceProvider*       gst_device_provider_factory_get_by_name        (const gchar *factoryname) G_GNUC_MALLOC;
+
+gboolean                gst_device_provider_register                   (GstPlugin *plugin, const gchar *name,
+                                                                       guint rank,
+                                                                       GType type);
+
+gboolean      gst_device_provider_factory_has_classesv (GstDeviceProviderFactory * factory,
+                                                       gchar ** classes);
+
+gboolean      gst_device_provider_factory_has_classes (GstDeviceProviderFactory *factory,
+                                                       const gchar * classes);
+
+GList *       gst_device_provider_factory_list_get_device_providers (
+                                                       GstRank minrank) G_GNUC_MALLOC;
+
+G_END_DECLS
+
+#endif /* __GST_DEVICE_PROVIDER_FACTORY_H__ */
diff --git a/gst/gstelement.c b/gst/gstelement.c
index 25870f5..3fbe7fe 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -342,8 +342,8 @@
  * <note>An element is only required to provide a clock in the PAUSED
  * state. Some elements can provide a clock in other states.</note>
  *
- * Returns: (transfer full): the GstClock provided by the element or %NULL
- * if no clock could be provided.  Unref after usage.
+ * Returns: (transfer full) (nullable): the GstClock provided by the
+ * element or %NULL if no clock could be provided.  Unref after usage.
  *
  * MT safe.
  */
@@ -583,8 +583,8 @@
  *
  * Gets the index from the element.
  *
- * Returns: (transfer full): a #GstIndex or %NULL when no index was set on the
- * element. unref after usage.
+ * Returns: (transfer full) (nullable): a #GstIndex or %NULL when no
+ * index was set on the element. unref after usage.
  *
  * MT safe.
  */
@@ -865,8 +865,8 @@
  * Retrieves a pad from @element by name. This version only retrieves
  * already-existing (i.e. 'static') pads.
  *
- * Returns: (transfer full): the requested #GstPad if found, otherwise %NULL.
- *     unref after usage.
+ * Returns: (transfer full) (nullable): the requested #GstPad if
+ *     found, otherwise %NULL.  unref after usage.
  *
  * MT safe.
  */
@@ -978,8 +978,8 @@
  * This method is slow and will be deprecated in the future. New code should
  * use gst_element_request_pad() with the requested template.
  *
- * Returns: (transfer full): requested #GstPad if found, otherwise %NULL.
- *     Release after usage.
+ * Returns: (transfer full) (nullable): requested #GstPad if found,
+ *     otherwise %NULL.  Release after usage.
  */
 GstPad *
 gst_element_get_request_pad (GstElement * element, const gchar * name)
@@ -1083,8 +1083,8 @@
  *
  * The pad should be released with gst_element_release_request_pad().
  *
- * Returns: (transfer full): requested #GstPad if found, otherwise %NULL.
- *     Release after usage.
+ * Returns: (transfer full) (nullable): requested #GstPad if found,
+ *     otherwise %NULL.  Release after usage.
  */
 GstPad *
 gst_element_request_pad (GstElement * element,
@@ -1396,8 +1396,9 @@
  * that has subclasses, make sure to pass the g_class parameter of the
  * #GInstanceInitFunc here.</note>
  *
- * Returns: (transfer none): the #GstPadTemplate with the given name, or %NULL
- *     if none was found. No unreferencing is necessary.
+ * Returns: (transfer none) (nullable): the #GstPadTemplate with the
+ *     given name, or %NULL if none was found. No unreferencing is
+ *     necessary.
  */
 GstPadTemplate *
 gst_element_class_get_pad_template (GstElementClass *
@@ -1730,12 +1731,12 @@
 
 /**
  * _gst_element_error_printf:
- * @format: the printf-like format to use, or %NULL
+ * @format: (allow-none): the printf-like format to use, or %NULL
  *
  * This function is only used internally by the gst_element_error() macro.
  *
- * Returns: (transfer full): a newly allocated string, or %NULL if the format
- *     was %NULL or ""
+ * Returns: (transfer full) (nullable): a newly allocated string, or
+ *     %NULL if the format was %NULL or ""
  *
  * MT safe.
  */
diff --git a/gst/gstelement.h b/gst/gstelement.h
index 408d10c..bdd7215 100644
--- a/gst/gstelement.h
+++ b/gst/gstelement.h
@@ -694,7 +694,8 @@
  * For a nameless element, this returns %NULL, which you can safely g_free()
  * as well.
  *
- * Returns: (transfer full): the name of @elem. g_free() after usage. MT safe.
+ * Returns: (transfer full) (nullable): the name of @elem. g_free()
+ * after usage. MT safe.
  *
  */
 #define                 gst_element_get_name(elem)      gst_object_get_name(GST_OBJECT_CAST(elem))
diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c
index aa0c5af..b1f737b 100644
--- a/gst/gstelementfactory.c
+++ b/gst/gstelementfactory.c
@@ -123,7 +123,8 @@
  * Search for an element factory of the given name. Refs the returned
  * element factory; caller is responsible for unreffing.
  *
- * Returns: (transfer full): #GstElementFactory if found, %NULL otherwise
+ * Returns: (transfer full) (nullable): #GstElementFactory if found,
+ * %NULL otherwise
  */
 GstElementFactory *
 gst_element_factory_find (const gchar * name)
@@ -335,8 +336,8 @@
  * It will be given the name supplied, since all elements require a name as
  * their first argument.
  *
- * Returns: (transfer floating): new #GstElement or %NULL if the element couldn't
- *     be created
+ * Returns: (transfer floating) (nullable): new #GstElement or %NULL
+ *     if the element couldn't be created
  */
 GstElement *
 gst_element_factory_create (GstElementFactory * factory, const gchar * name)
@@ -422,7 +423,8 @@
  * consisting of the element factory name and a number.
  * If name is given, it will be given the name supplied.
  *
- * Returns: (transfer floating): new #GstElement or %NULL if unable to create element
+ * Returns: (transfer floating) (nullable): new #GstElement or %NULL
+ * if unable to create element
  */
 GstElement *
 gst_element_factory_make (const gchar * factoryname, const gchar * name)
@@ -500,8 +502,8 @@
  *
  * Get the metadata on @factory with @key.
  *
- * Returns: the metadata with @key on @factory or %NULL when there was no
- * metadata with the given @key.
+ * Returns: (nullable): the metadata with @key on @factory or %NULL
+ * when there was no metadata with the given @key.
  */
 const gchar *
 gst_element_factory_get_metadata (GstElementFactory * factory,
@@ -516,7 +518,7 @@
  *
  * Get the available keys for the metadata on @factory.
  *
- * Returns: (transfer full) (element-type utf8) (array zero-terminated=1):
+ * Returns: (transfer full) (element-type utf8) (array zero-terminated=1) (nullable):
  * a %NULL-terminated array of key strings, or %NULL when there is no
  * metadata. Free with g_strfreev() when no longer needed.
  */
diff --git a/gst/gstevent.h b/gst/gstevent.h
index 2ee38eb..db3cb51 100644
--- a/gst/gstevent.h
+++ b/gst/gstevent.h
@@ -275,8 +275,8 @@
 #define         gst_event_make_writable(ev)   GST_EVENT_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (ev)))
 /**
  * gst_event_replace:
- * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent
- *     to be replaced.
+ * @old_event: (inout) (transfer full) (nullable): pointer to a
+ *     pointer to a #GstEvent to be replaced.
  * @new_event: (allow-none) (transfer none): pointer to a #GstEvent that will
  *     replace the event pointed to by @old_event.
  *
@@ -301,8 +301,8 @@
 
 /**
  * gst_event_steal:
- * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent
- *     to be stolen.
+ * @old_event: (inout) (transfer full) (nullable): pointer to a
+ *     pointer to a #GstEvent to be stolen.
  *
  * Atomically replace the #GstEvent pointed to by @old_event with %NULL and
  * return the original event.
@@ -321,8 +321,8 @@
 
 /**
  * gst_event_take:
- * @old_event: (inout) (transfer full): pointer to a pointer to a #GstEvent
- *     to be stolen.
+ * @old_event: (inout) (transfer full) (nullable): pointer to a
+ *     pointer to a #GstEvent to be stolen.
  * @new_event: (allow-none) (transfer full): pointer to a #GstEvent that will
  *     replace the event pointed to by @old_event.
  *
diff --git a/gst/gstformat.c b/gst/gstformat.c
index 69600cd..aeae6c6 100644
--- a/gst/gstformat.c
+++ b/gst/gstformat.c
@@ -85,8 +85,8 @@
  *
  * Get a printable name for the given format. Do not modify or free.
  *
- * Returns: a reference to the static name of the format or %NULL if
- * the format is unknown.
+ * Returns: (nullable): a reference to the static name of the format
+ * or %NULL if the format is unknown.
  */
 const gchar *
 gst_format_get_name (GstFormat format)
@@ -225,7 +225,8 @@
  *
  * Get details about the given format.
  *
- * Returns: The #GstFormatDefinition for @format or %NULL on failure.
+ * Returns: (nullable): The #GstFormatDefinition for @format or %NULL
+ * on failure.
  *
  * MT safe.
  */
diff --git a/gst/gstghostpad.c b/gst/gstghostpad.c
index cac0d51..082aa15 100644
--- a/gst/gstghostpad.c
+++ b/gst/gstghostpad.c
@@ -79,8 +79,8 @@
  *
  * Invoke the default iterate internal links function of the proxy pad.
  *
- * Returns: a #GstIterator of #GstPad, or %NULL if @pad has no parent. Unref each
- * returned pad with gst_object_unref().
+ * Returns: (nullable): a #GstIterator of #GstPad, or %NULL if @pad
+ * has no parent. Unref each returned pad with gst_object_unref().
  */
 GstIterator *
 gst_proxy_pad_iterate_internal_links_default (GstPad * pad, GstObject * parent)
@@ -208,8 +208,8 @@
  * The internal pad of a #GstGhostPad is the internally used
  * pad of opposite direction, which is used to link to the target.
  *
- * Returns: (transfer full): the target #GstProxyPad, can be %NULL.
- * Unref target pad after usage.
+ * Returns: (transfer full) (nullable): the target #GstProxyPad, can
+ * be %NULL.  Unref target pad after usage.
  */
 GstProxyPad *
 gst_proxy_pad_get_internal (GstProxyPad * pad)
@@ -653,7 +653,8 @@
  *
  * The created ghostpad will not have a padtemplate.
  *
- * Returns: (transfer full): a new #GstPad, or %NULL in case of an error.
+ * Returns: (transfer full) (nullable): a new #GstPad, or %NULL in
+ * case of an error.
  */
 GstPad *
 gst_ghost_pad_new_no_target (const gchar * name, GstPadDirection dir)
@@ -679,7 +680,8 @@
  *
  * Will ref the target.
  *
- * Returns: (transfer floating): a new #GstPad, or %NULL in case of an error.
+ * Returns: (transfer floating) (nullable): a new #GstPad, or %NULL in
+ * case of an error.
  */
 GstPad *
 gst_ghost_pad_new (const gchar * name, GstPad * target)
@@ -719,7 +721,8 @@
  *
  * Will ref the target.
  *
- * Returns: (transfer full): a new #GstPad, or %NULL in case of an error.
+ * Returns: (transfer full) (nullable): a new #GstPad, or %NULL in
+ * case of an error.
  */
 
 GstPad *
@@ -761,7 +764,8 @@
  * Create a new ghostpad based on @templ, without setting a target. The
  * direction will be taken from the @templ.
  *
- * Returns: (transfer full): a new #GstPad, or %NULL in case of an error.
+ * Returns: (transfer full) (nullable): a new #GstPad, or %NULL in
+ * case of an error.
  */
 GstPad *
 gst_ghost_pad_new_no_target_from_template (const gchar * name,
@@ -783,8 +787,9 @@
  *
  * Get the target pad of @gpad. Unref target pad after usage.
  *
- * Returns: (transfer full): the target #GstPad, can be %NULL if the ghostpad
- * has no target set. Unref target pad after usage.
+ * Returns: (transfer full) (nullable): the target #GstPad, can be
+ * %NULL if the ghostpad has no target set. Unref target pad after
+ * usage.
  */
 GstPad *
 gst_ghost_pad_get_target (GstGhostPad * gpad)
diff --git a/gst/gstglobaldevicemonitor.c b/gst/gstglobaldevicemonitor.c
deleted file mode 100644
index 68900ef..0000000
--- a/gst/gstglobaldevicemonitor.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/* GStreamer
- * Copyright (C) 2013 Olivier Crete <olivier.crete@collabora.com>
- *
- * gstglobaldevicemonitor.c: Global device monitor
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/**
- * SECTION:gstglobaldevicemonitor
- * @short_description: A global device monitor and prober
- * @see_also: #GstDevice, #GstDeviceMonitor
- *
- * Applications should create a #GstGlobalDeviceMonitor when they want
- * to probe, list and monitor devices of a specific type. The
- * #GstGlobalDeviceMonitor will create the appropriate
- * #GstDeviceMonitor objects and manage them. It will then post
- * messages on its #GstBus for devices that have been added and
- * removed.
- *
- * Since: 1.4
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gst_private.h"
-#include "gstglobaldevicemonitor.h"
-
-struct _GstGlobalDeviceMonitorPrivate
-{
-  gboolean started;
-
-  GstBus *bus;
-
-  GPtrArray *monitors;
-  guint cookie;
-
-  GstCaps *caps;
-  gchar *classes;
-};
-
-
-G_DEFINE_TYPE (GstGlobalDeviceMonitor, gst_global_device_monitor,
-    GST_TYPE_OBJECT);
-
-static void gst_global_device_monitor_dispose (GObject * object);
-
-static void
-gst_global_device_monitor_class_init (GstGlobalDeviceMonitorClass * klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  g_type_class_add_private (klass, sizeof (GstGlobalDeviceMonitorPrivate));
-
-  object_class->dispose = gst_global_device_monitor_dispose;
-}
-
-static void
-bus_sync_message (GstBus * bus, GstMessage * message,
-    GstGlobalDeviceMonitor * monitor)
-{
-  GstMessageType type = GST_MESSAGE_TYPE (message);
-
-  if (type == GST_MESSAGE_DEVICE_ADDED || type == GST_MESSAGE_DEVICE_REMOVED) {
-    gboolean matches;
-    GstCaps *caps;
-    GstDevice *device;
-
-    if (type == GST_MESSAGE_DEVICE_ADDED)
-      gst_message_parse_device_added (message, &device);
-    else
-      gst_message_parse_device_removed (message, &device);
-
-    GST_OBJECT_LOCK (monitor);
-    caps = gst_device_get_caps (device);
-    matches = gst_caps_can_intersect (monitor->priv->caps, caps) &&
-        gst_device_has_classes (device, monitor->priv->classes);
-    gst_caps_unref (caps);
-    GST_OBJECT_UNLOCK (monitor);
-
-    if (matches)
-      gst_bus_post (monitor->priv->bus, gst_message_ref (message));
-  }
-}
-
-
-static void
-gst_global_device_monitor_init (GstGlobalDeviceMonitor * self)
-{
-  GList *factories;
-
-  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
-      GST_TYPE_GLOBAL_DEVICE_MONITOR, GstGlobalDeviceMonitorPrivate);
-
-  self->priv->bus = gst_bus_new ();
-  gst_bus_set_flushing (self->priv->bus, TRUE);
-
-  self->priv->monitors = g_ptr_array_new ();
-  self->priv->caps = gst_caps_new_any ();
-  self->priv->classes = g_strdup ("");
-
-  factories =
-      gst_device_monitor_factory_list_get_device_monitors (self->priv->classes,
-      1);
-
-  while (factories) {
-    GstDeviceMonitorFactory *factory = factories->data;
-    GstDeviceMonitor *monitor;
-
-    factories = g_list_remove (factories, factory);
-
-    monitor = gst_device_monitor_factory_get (factory);
-    if (monitor) {
-      GstBus *bus = gst_device_monitor_get_bus (monitor);
-
-      gst_bus_enable_sync_message_emission (bus);
-      g_signal_connect (bus, "sync-message",
-          G_CALLBACK (bus_sync_message), self);
-      g_ptr_array_add (self->priv->monitors, monitor);
-    }
-
-    gst_object_unref (factory);
-  }
-}
-
-
-static void
-gst_global_device_monitor_remove (GstGlobalDeviceMonitor * self, guint i)
-{
-  GstDeviceMonitor *monitor = g_ptr_array_index (self->priv->monitors, i);
-  GstBus *bus;
-
-  g_ptr_array_remove_index_fast (self->priv->monitors, i);
-
-  bus = gst_device_monitor_get_bus (monitor);
-  g_signal_handlers_disconnect_by_func (bus, bus_sync_message, self);
-  gst_object_unref (bus);
-
-  gst_object_unref (monitor);
-}
-
-static void
-gst_global_device_monitor_dispose (GObject * object)
-{
-  GstGlobalDeviceMonitor *self = GST_GLOBAL_DEVICE_MONITOR (object);
-
-  g_return_if_fail (self->priv->started == FALSE);
-
-  if (self->priv->monitors) {
-    while (self->priv->monitors->len)
-      gst_global_device_monitor_remove (self, self->priv->monitors->len - 1);
-    g_ptr_array_unref (self->priv->monitors);
-    self->priv->monitors = NULL;
-  }
-
-  gst_caps_replace (&self->priv->caps, NULL);
-  g_free (self->priv->classes);
-  gst_object_replace ((GstObject **) & self->priv->bus, NULL);
-
-  G_OBJECT_CLASS (gst_global_device_monitor_parent_class)->dispose (object);
-}
-
-/**
- * gst_global_device_monitor_get_devices:
- * @monitor: A #GstDeviceMonitor
- *
- * Gets a list of devices from all of the relevant monitors. This may actually
- * probe the hardware if the global monitor is not currently started.
- *
- * Returns: (transfer full) (element-type GstDevice): a #GList of
- *   #GstDevice
- *
- * Since: 1.4
- */
-
-GList *
-gst_global_device_monitor_get_devices (GstGlobalDeviceMonitor * monitor)
-{
-  GList *devices = NULL;
-  guint i;
-  guint cookie;
-
-  g_return_val_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor), NULL);
-
-  GST_OBJECT_LOCK (monitor);
-
-again:
-
-  g_list_free_full (devices, gst_object_unref);
-  devices = NULL;
-
-  cookie = monitor->priv->cookie;
-
-  for (i = 0; i < monitor->priv->monitors->len; i++) {
-    GList *tmpdev;
-    GstDeviceMonitor *device_monitor =
-        gst_object_ref (g_ptr_array_index (monitor->priv->monitors, i));
-    GList *item;
-
-    GST_OBJECT_UNLOCK (monitor);
-
-    tmpdev = gst_device_monitor_get_devices (device_monitor);
-
-    for (item = tmpdev; item; item = item->next) {
-      GstDevice *dev = GST_DEVICE (item->data);
-      GstCaps *caps = gst_device_get_caps (dev);
-
-      if (gst_caps_can_intersect (monitor->priv->caps, caps) &&
-          gst_device_has_classes (dev, monitor->priv->classes))
-        devices = g_list_prepend (devices, gst_object_ref (dev));
-      gst_caps_unref (caps);
-    }
-
-    g_list_free_full (tmpdev, gst_object_unref);
-    gst_object_unref (device_monitor);
-
-    GST_OBJECT_LOCK (monitor);
-
-    if (monitor->priv->cookie != cookie)
-      goto again;
-  }
-
-  GST_OBJECT_UNLOCK (monitor);
-
-  return devices;
-}
-
-/**
- * gst_global_device_monitor_start:
- * @monitor: A #GstGlobalDeviceMonitor
- *
- * Starts monitoring the devices, one this has succeeded, the
- * %GST_MESSAGE_DEVICE_ADDED and %GST_MESSAGE_DEVICE_REMOVED messages
- * will be emitted on the bus when the list of devices changes.
- *
- * Returns: %TRUE if the device monitoring could be started
- *
- * Since: 1.4
- */
-
-gboolean
-gst_global_device_monitor_start (GstGlobalDeviceMonitor * monitor)
-{
-  guint i;
-
-  g_return_val_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor), FALSE);
-
-  GST_OBJECT_LOCK (monitor);
-
-  if (monitor->priv->monitors->len == 0) {
-    GST_OBJECT_UNLOCK (monitor);
-    return FALSE;
-  }
-
-  gst_bus_set_flushing (monitor->priv->bus, FALSE);
-
-  for (i = 0; i < monitor->priv->monitors->len; i++) {
-    if (!gst_device_monitor_start (g_ptr_array_index (monitor->priv->monitors,
-                i))) {
-      gst_bus_set_flushing (monitor->priv->bus, TRUE);
-
-      for (; i != 0; i--)
-        gst_device_monitor_stop (g_ptr_array_index (monitor->priv->monitors,
-                i - 1));
-
-      GST_OBJECT_UNLOCK (monitor);
-      return FALSE;
-    }
-  }
-
-  monitor->priv->started = TRUE;
-  GST_OBJECT_UNLOCK (monitor);
-
-  return TRUE;
-}
-
-/**
- * gst_global_device_monitor_stop:
- * @monitor: A #GstDeviceMonitor
- *
- * Stops monitoring the devices.
- *
- * Since: 1.4
- */
-void
-gst_global_device_monitor_stop (GstGlobalDeviceMonitor * monitor)
-{
-  guint i;
-
-  g_return_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor));
-
-  gst_bus_set_flushing (monitor->priv->bus, TRUE);
-
-  GST_OBJECT_LOCK (monitor);
-  for (i = 0; i < monitor->priv->monitors->len; i++)
-    gst_device_monitor_stop (g_ptr_array_index (monitor->priv->monitors, i));
-  monitor->priv->started = FALSE;
-  GST_OBJECT_UNLOCK (monitor);
-
-}
-
-/**
- * gst_global_device_monitor_set_classes_filter:
- * @monitor: the global device monitor
- * @classes: device classes to use as filter
- *
- * Filter devices monitored by device class, e.g. in case you are only
- * interested in a certain type of device like audio devices or
- * video sources.
- *
- * Since: 1.4
- */
-void
-gst_global_device_monitor_set_classes_filter (GstGlobalDeviceMonitor * monitor,
-    const gchar * classes)
-{
-  GList *factories = NULL;
-  guint i;
-
-  g_return_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor));
-  g_return_if_fail (!monitor->priv->started);
-
-  GST_OBJECT_LOCK (monitor);
-  if (!strcmp (monitor->priv->classes, classes)) {
-    GST_OBJECT_UNLOCK (monitor);
-    return;
-  }
-
-  g_free (monitor->priv->classes);
-  monitor->priv->classes = g_strdup (classes);
-
-  factories = gst_device_monitor_factory_list_get_device_monitors (classes, 1);
-
-  for (i = 0; i < monitor->priv->monitors->len; i++) {
-    GstDeviceMonitor *dev_monitor;
-    GstDeviceMonitorFactory *f;
-    GList *item;
-
-    dev_monitor = g_ptr_array_index (monitor->priv->monitors, i);
-    f = gst_device_monitor_get_factory (dev_monitor);
-
-    item = g_list_find (factories, f);
-
-    if (item) {
-      /* If the item is in our list, then remove it from the list of factories,
-       * we don't have it to re-create it later
-       */
-      factories = g_list_remove_link (factories, item);
-      gst_object_unref (f);
-    } else {
-      /* If it's not in our list, them remove it from the list of monitors.
-       */
-
-      monitor->priv->cookie++;
-      gst_global_device_monitor_remove (monitor, i);
-      i--;
-    }
-  }
-
-  while (factories) {
-    GstDeviceMonitorFactory *factory = factories->data;
-    GstDeviceMonitor *device_monitor;
-
-    factories = g_list_remove (factories, factory);
-
-    device_monitor = gst_device_monitor_factory_get (factory);
-    if (device_monitor) {
-      GstBus *bus = gst_device_monitor_get_bus (device_monitor);
-
-      gst_bus_enable_sync_message_emission (bus);
-      g_signal_connect (bus, "sync-message",
-          G_CALLBACK (bus_sync_message), monitor);
-      gst_object_unref (bus);
-      g_ptr_array_add (monitor->priv->monitors, device_monitor);
-      monitor->priv->cookie++;
-    }
-
-    gst_object_unref (factory);
-  }
-
-  GST_OBJECT_UNLOCK (monitor);
-}
-
-/**
- * gst_global_device_monitor_get_classes_filter:
- * @monitor: the global device monitor
- *
- * Return the type (device classes) filter active for device filtering.
- *
- * Returns: string of device classes that are being filtered.
- *
- * Since: 1.4
- */
-gchar *
-gst_global_device_monitor_get_classes_filter (GstGlobalDeviceMonitor * monitor)
-{
-  gchar *res;
-
-  g_return_val_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor), 0);
-
-  GST_OBJECT_LOCK (monitor);
-  res = g_strdup (monitor->priv->classes);
-  GST_OBJECT_UNLOCK (monitor);
-
-  return res;
-}
-
-/**
- * gst_global_device_monitor_set_caps_filter:
- * @monitor: the global device monitor
- * @caps: caps to filter
- *
- * Set caps to use as filter for devices. By default ANY caps are used,
- * meaning no caps filter is active.
- *
- * Since: 1.4
- */
-void
-gst_global_device_monitor_set_caps_filter (GstGlobalDeviceMonitor * monitor,
-    GstCaps * caps)
-{
-  g_return_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor));
-  g_return_if_fail (GST_IS_CAPS (caps));
-
-  GST_OBJECT_LOCK (monitor);
-  gst_caps_replace (&monitor->priv->caps, caps);
-  GST_OBJECT_UNLOCK (monitor);
-}
-
-/**
- * gst_global_device_monitor_get_caps_filter:
- * @monitor: a global device monitor
- *
- * Get the #GstCaps filter set by gst_global_device_monitor_set_caps_filter().
- *
- * Returns: (transfer full): the filter caps that are active (or ANY caps)
- *
- * Since: 1.4
- */
-GstCaps *
-gst_global_device_monitor_get_caps_filter (GstGlobalDeviceMonitor * monitor)
-{
-  GstCaps *res;
-
-  g_return_val_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor), NULL);
-
-  GST_OBJECT_LOCK (monitor);
-  res = gst_caps_ref (monitor->priv->caps);
-  GST_OBJECT_UNLOCK (monitor);
-
-  return res;
-}
-
-/**
- * gst_global_device_monitor_new:
- *
- * Create a new #GstGlobalDeviceMonitor
- *
- * Returns: (transfer full): a new global device monitor.
- *
- * Since: 1.4
- */
-GstGlobalDeviceMonitor *
-gst_global_device_monitor_new (void)
-{
-  return g_object_new (GST_TYPE_GLOBAL_DEVICE_MONITOR, NULL);
-}
-
-/**
- * gst_global_device_monitor_get_bus:
- * @monitor: a #GstDeviceMonitor
- *
- * Gets the #GstBus of this #GstGlobalDeviceMonitor
- *
- * Returns: (transfer full): a #GstBus
- *
- * Since: 1.4
- */
-GstBus *
-gst_global_device_monitor_get_bus (GstGlobalDeviceMonitor * monitor)
-{
-  g_return_val_if_fail (GST_IS_GLOBAL_DEVICE_MONITOR (monitor), NULL);
-
-  return gst_object_ref (monitor->priv->bus);
-}
diff --git a/gst/gstglobaldevicemonitor.h b/gst/gstglobaldevicemonitor.h
deleted file mode 100644
index b92fd40..0000000
--- a/gst/gstglobaldevicemonitor.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* GStreamer
- * Copyright (C) 2013 Olivier Crete <olivier.crete@collabora.com>
- *
- * gstglobaldevicemonitor.c: Global device monitor
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-
-#ifndef __GST_GLOBAL_DEVICE_MONITOR_H__
-#define __GST_GLOBAL_DEVICE_MONITOR_H__
-
-#include <gst/gstobject.h>
-#include <gst/gstdevice.h>
-#include <gst/gstdevicemonitor.h>
-#include <gst/gstdevicemonitorfactory.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstGlobalDeviceMonitor GstGlobalDeviceMonitor;
-typedef struct _GstGlobalDeviceMonitorPrivate GstGlobalDeviceMonitorPrivate;
-typedef struct _GstGlobalDeviceMonitorClass GstGlobalDeviceMonitorClass;
-
-#define GST_TYPE_GLOBAL_DEVICE_MONITOR                 (gst_global_device_monitor_get_type())
-#define GST_IS_GLOBAL_DEVICE_MONITOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GLOBAL_DEVICE_MONITOR))
-#define GST_IS_GLOBAL_DEVICE_MONITOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GLOBAL_DEVICE_MONITOR))
-#define GST_GLOBAL_DEVICE_MONITOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GLOBAL_DEVICE_MONITOR, GstGlobalDeviceMonitorClass))
-#define GST_GLOBAL_DEVICE_MONITOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GLOBAL_DEVICE_MONITOR, GstGlobalDeviceMonitor))
-#define GST_GLOBAL_DEVICE_MONITOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GLOBAL_DEVICE_MONITOR, GstGlobalDeviceMonitorClass))
-#define GST_GLOBAL_DEVICE_MONITOR_CAST(obj)            ((GstGlobalDeviceMonitor *)(obj))
-
-/**
- * GstGlobalDeviceMonitor:
- * @parent: the parent #GstObject structure
- *
- * Opaque global device monitor object structure.
- *
- * Since: 1.4
- */
-struct _GstGlobalDeviceMonitor {
-  GstObject                parent;
-
-  /*< private >*/
-
-  GstGlobalDeviceMonitorPrivate *priv;
-
-  gpointer _gst_reserved[GST_PADDING];
-};
-
-/**
- * GstGlobalDeviceMonitorClass:
- * @parent_class: the parent #GstObjectClass structure
- *
- * Opaque global device monitor class structure.
- *
- * Since: 1.4
- */
-struct _GstGlobalDeviceMonitorClass {
-  GstObjectClass           parent_class;
-
-  /*< private >*/
-  gpointer _gst_reserved[GST_PADDING];
-};
-
-GType     gst_global_device_monitor_get_type (void);
-
-GstGlobalDeviceMonitor * gst_global_device_monitor_new  (void);
-
-GstBus *  gst_global_device_monitor_get_bus (GstGlobalDeviceMonitor * monitor);
-
-GList *   gst_global_device_monitor_get_devices (GstGlobalDeviceMonitor * monitor);
-
-
-gboolean  gst_global_device_monitor_start (GstGlobalDeviceMonitor * monitor);
-
-void      gst_global_device_monitor_stop  (GstGlobalDeviceMonitor * monitor);
-
-
-void      gst_global_device_monitor_set_classes_filter (GstGlobalDeviceMonitor * monitor,
-                                                        const gchar            * classes);
-
-gchar *   gst_global_device_monitor_get_classes_filter (GstGlobalDeviceMonitor * monitor);
-
-
-void      gst_global_device_monitor_set_caps_filter (GstGlobalDeviceMonitor * monitor,
-                                                     GstCaps                * caps);
-
-GstCaps * gst_global_device_monitor_get_caps_filter (GstGlobalDeviceMonitor * monitor);
-
-G_END_DECLS
-
-#endif /* __GST_GLOBAL_DEVICE_MONITOR_H__ */
diff --git a/gst/gstinfo.h b/gst/gstinfo.h
index 319e841..5c802bd 100644
--- a/gst/gstinfo.h
+++ b/gst/gstinfo.h
@@ -197,7 +197,7 @@
 
 /**
  * GST_STR_NULL:
- * @str: The string to check.
+ * @str: (allow-none): The string to check.
  *
  * Macro to use when a string must not be %NULL, but may be %NULL. If the string
  * is %NULL, "(NULL)" is printed instead.
diff --git a/gst/gstmemory.c b/gst/gstmemory.c
index c29fccd..9e97d1e 100644
--- a/gst/gstmemory.c
+++ b/gst/gstmemory.c
@@ -225,8 +225,8 @@
  * This function takes ownership of old @mem and returns a reference to a new
  * #GstMemory.
  *
- * Returns: (transfer full): a #GstMemory object mapped with @flags or %NULL when
- * a mapping is not possible.
+ * Returns: (transfer full) (nullable): a #GstMemory object mapped
+ * with @flags or %NULL when a mapping is not possible.
  */
 GstMemory *
 gst_memory_make_mapped (GstMemory * mem, GstMapInfo * info, GstMapFlags flags)
diff --git a/gst/gstmessage.c b/gst/gstmessage.c
index 5014016..f4b3ded 100644
--- a/gst/gstmessage.c
+++ b/gst/gstmessage.c
@@ -256,8 +256,8 @@
  * gst_message_new_custom:
  * @type: The #GstMessageType to distinguish messages
  * @src: The object originating the message.
- * @structure: (transfer full): the structure for the message. The message
- *     will take ownership of the structure.
+ * @structure: (transfer full) (allow-none): the structure for the
+ *     message. The message will take ownership of the structure.
  *
  * Create a new custom-typed message. This can be used for anything not
  * handled by other message-specific functions to pass a message to the
@@ -779,14 +779,16 @@
 GstMessage *
 gst_message_new_application (GstObject * src, GstStructure * structure)
 {
+  g_return_val_if_fail (structure != NULL, NULL);
+
   return gst_message_new_custom (GST_MESSAGE_APPLICATION, src, structure);
 }
 
 /**
  * gst_message_new_element:
  * @src: (transfer none): The object originating the message.
- * @structure: (transfer full): The structure for the message. The message
- *     will take ownership of the structure.
+ * @structure: (transfer full): The structure for the
+ *     message. The message will take ownership of the structure.
  *
  * Create a new element-specific message. This is meant as a generic way of
  * allowing one-way communication from an element to an application, for example
@@ -800,6 +802,8 @@
 GstMessage *
 gst_message_new_element (GstObject * src, GstStructure * structure)
 {
+  g_return_val_if_fail (structure != NULL, NULL);
+
   return gst_message_new_custom (GST_MESSAGE_ELEMENT, src, structure);
 }
 
@@ -2336,7 +2340,7 @@
  * @device: (transfer none): The new #GstDevice
  *
  * Creates a new device-added message. The device-added message is produced by
- * #GstDeviceMonitor or a #GstGlobalDeviceMonitor. They announce the appearance
+ * #GstDeviceProvider or a #GstlDeviceMonitor. They announce the appearance
  * of monitored devices.
  *
  * Returns: a newly allocated #GstMessage
@@ -2366,7 +2370,7 @@
  *  pointer to the new #GstDevice, or %NULL
  * 
  * Parses a device-added message. The device-added message is produced by
- * #GstDeviceMonitor or a #GstGlobalDeviceMonitor. It announces the appearance
+ * #GstDeviceProvider or a #GstDeviceMonitor. It announces the appearance
  * of monitored devices.
  *
  * Since: 1.4
@@ -2388,7 +2392,7 @@
  * @device: (transfer none): The removed #GstDevice
  *
  * Creates a new device-removed message. The device-removed message is produced
- * by #GstDeviceMonitor or a #GstGlobalDeviceMonitor. They announce the
+ * by #GstDeviceProvider or a #GstDeviceMonitor. They announce the
  * disappearance of monitored devices.
  *
  * Returns: a newly allocated #GstMessage
@@ -2418,7 +2422,7 @@
  *  pointer to the removed #GstDevice, or %NULL
  *
  * Parses a device-removed message. The device-removed message is produced by
- * #GstDeviceMonitor or a #GstGlobalDeviceMonitor. It announces the
+ * #GstDeviceProvider or a #GstDeviceMonitor. It announces the
  * disappearance of monitored devices.
  *
  * Since: 1.4
diff --git a/gst/gstmessage.h b/gst/gstmessage.h
index 7433edc..7d4282e 100644
--- a/gst/gstmessage.h
+++ b/gst/gstmessage.h
@@ -105,9 +105,9 @@
  *     filter for GST_MESSAGE_EXTENDED and then check the result for the
  *     specific type. (Since 1.4)
  * @GST_MESSAGE_DEVICE_ADDED: Message indicating a #GstDevice was added to
- *     a #GstDeviceMonitor (Since 1.4)
+ *     a #GstDeviceProvider (Since 1.4)
  * @GST_MESSAGE_DEVICE_REMOVED: Message indicating a #GstDevice was removed
- *     from a #GstDeviceMonitor (Since 1.4)
+ *     from a #GstDeviceProvider (Since 1.4)
  * @GST_MESSAGE_ANY: mask for all of the above messages.
  *
  * The different message types that are available.
@@ -404,8 +404,8 @@
 #define         gst_message_make_writable(msg)  GST_MESSAGE_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (msg)))
 /**
  * gst_message_replace:
- * @old_message: (inout) (transfer full): pointer to a pointer to a #GstMessage
- *     to be replaced.
+ * @old_message: (inout) (transfer full) (nullable): pointer to a
+ *     pointer to a #GstMessage to be replaced.
  * @new_message: (allow-none) (transfer none): pointer to a #GstMessage that will
  *     replace the message pointed to by @old_message.
  *
diff --git a/gst/gstmeta.c b/gst/gstmeta.c
index 0e0aca1..1269c56 100644
--- a/gst/gstmeta.c
+++ b/gst/gstmeta.c
@@ -205,8 +205,8 @@
  * Lookup a previously registered meta info structure by its implementation name
  * @impl.
  *
- * Returns: (transfer none): a #GstMetaInfo with @impl, or %NULL when no such
- * metainfo exists.
+ * Returns: (transfer none) (nullable): a #GstMetaInfo with @impl, or
+ * %NULL when no such metainfo exists.
  */
 const GstMetaInfo *
 gst_meta_get_info (const gchar * impl)
diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c
index bece06a..d65bd02 100644
--- a/gst/gstminiobject.c
+++ b/gst/gstminiobject.c
@@ -469,9 +469,9 @@
 
 /**
  * gst_mini_object_replace:
- * @olddata: (inout) (transfer full): pointer to a pointer to a mini-object to
- *     be replaced
- * @newdata: pointer to new mini-object
+ * @olddata: (inout) (transfer full) (nullable): pointer to a pointer to a
+ *     mini-object to be replaced
+ * @newdata: (allow-none): pointer to new mini-object
  *
  * Atomically modifies a pointer to point to a new mini-object.
  * The reference count of @olddata is decreased and the reference count of
@@ -691,7 +691,8 @@
  * This function gets back user data pointers stored via
  * gst_mini_object_set_qdata().
  *
- * Returns: (transfer none): The user data pointer set, or %NULL
+ * Returns: (transfer none) (nullable): The user data pointer set, or
+ * %NULL
  */
 gpointer
 gst_mini_object_get_qdata (GstMiniObject * object, GQuark quark)
@@ -721,7 +722,8 @@
  * and removes the data from @object without invoking its destroy() function (if
  * any was set).
  *
- * Returns: (transfer full): The user data pointer set, or %NULL
+ * Returns: (transfer full) (nullable): The user data pointer set, or
+ * %NULL
  */
 gpointer
 gst_mini_object_steal_qdata (GstMiniObject * object, GQuark quark)
diff --git a/gst/gstobject.c b/gst/gstobject.c
index b997db6..5691bec 100644
--- a/gst/gstobject.c
+++ b/gst/gstobject.c
@@ -310,9 +310,9 @@
 
 /**
  * gst_object_replace:
- * @oldobj: (inout) (transfer full): pointer to a place of a #GstObject to
- *     replace
- * @newobj: (transfer none): a new #GstObject
+ * @oldobj: (inout) (transfer full) (nullable): pointer to a place of
+ *     a #GstObject to replace
+ * @newobj: (transfer none) (allow-none): a new #GstObject
  *
  * Atomically modifies a pointer to point to a new object.
  * The reference count of @oldobj is decreased and the reference count of
@@ -588,7 +588,7 @@
 /**
  * gst_object_set_name:
  * @object: a #GstObject
- * @name:   new name of object
+ * @name: (allow-none): new name of object
  *
  * Sets the name of @object, or gives @object a guaranteed unique
  * name (if @name is %NULL).
@@ -649,7 +649,8 @@
  *
  * Free-function: g_free
  *
- * Returns: (transfer full): the name of @object. g_free() after usage.
+ * Returns: (transfer full) (nullable): the name of @object. g_free()
+ * after usage.
  *
  * MT safe. This function grabs and releases @object's LOCK.
  */
@@ -724,8 +725,8 @@
  * Returns the parent of @object. This function increases the refcount
  * of the parent object so you should gst_object_unref() it after usage.
  *
- * Returns: (transfer full): parent of @object, this can be %NULL if @object
- *   has no parent. unref after usage.
+ * Returns: (transfer full) (nullable): parent of @object, this can be
+ *   %NULL if @object has no parent. unref after usage.
  *
  * MT safe. Grabs and releases @object's LOCK.
  */
@@ -992,8 +993,8 @@
  *
  * Searches the list of properties under control.
  *
- * Returns: a #GstControlBinding or %NULL if the property is not being
- * controlled.
+ * Returns: (nullable): a #GstControlBinding or %NULL if the property
+ * is not being controlled.
  */
 static GstControlBinding *
 gst_object_find_control_binding (GstObject * self, const gchar * name)
@@ -1210,8 +1211,8 @@
  * Gets the corresponding #GstControlBinding for the property. This should be
  * unreferenced again after use.
  *
- * Returns: (transfer full): the #GstControlBinding for @property_name or %NULL if
- * the property is not controlled.
+ * Returns: (transfer full) (nullable): the #GstControlBinding for
+ * @property_name or %NULL if the property is not controlled.
  */
 GstControlBinding *
 gst_object_get_control_binding (GstObject * object, const gchar * property_name)
@@ -1271,8 +1272,8 @@
  *
  * Gets the value for the given controlled property at the requested time.
  *
- * Returns: the GValue of the property at the given time, or %NULL if the
- * property isn't controlled.
+ * Returns: (nullable): the GValue of the property at the given time,
+ * or %NULL if the property isn't controlled.
  */
 GValue *
 gst_object_get_value (GstObject * object, const gchar * property_name,
diff --git a/gst/gstpad.c b/gst/gstpad.c
index 09ce750..28170ac 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -766,7 +766,7 @@
 
 /**
  * gst_pad_new:
- * @name: the name of the new pad.
+ * @name: (allow-none): the name of the new pad.
  * @direction: the #GstPadDirection of the pad.
  *
  * Creates a new pad with the given name in the given direction.
@@ -774,7 +774,8 @@
  * will be assigned.
  * This function makes a copy of the name so you can safely free the name.
  *
- * Returns: (transfer floating): a new #GstPad, or %NULL in case of an error.
+ * Returns: (transfer floating) (nullable): a new #GstPad, or %NULL in
+ * case of an error.
  *
  * MT safe.
  */
@@ -788,14 +789,15 @@
 /**
  * gst_pad_new_from_template:
  * @templ: the pad template to use
- * @name: the name of the element
+ * @name: (allow-none): the name of the element
  *
  * Creates a new pad with the given name from the given template.
  * If name is %NULL, a guaranteed unique name (across all pads)
  * will be assigned.
  * This function makes a copy of the name so you can safely free the name.
  *
- * Returns: (transfer floating): a new #GstPad, or %NULL in case of an error.
+ * Returns: (transfer floating) (nullable): a new #GstPad, or %NULL in
+ * case of an error.
  */
 GstPad *
 gst_pad_new_from_template (GstPadTemplate * templ, const gchar * name)
@@ -816,7 +818,8 @@
  * will be assigned.
  * This function makes a copy of the name so you can safely free the name.
  *
- * Returns: (transfer floating): a new #GstPad, or %NULL in case of an error.
+ * Returns: (transfer floating) (nullable): a new #GstPad, or %NULL in
+ * case of an error.
  */
 GstPad *
 gst_pad_new_from_static_template (GstStaticPadTemplate * templ,
@@ -2458,9 +2461,9 @@
  *
  * Gets the template for @pad.
  *
- * Returns: (transfer full): the #GstPadTemplate from which this pad was
- *     instantiated, or %NULL if this pad has no template. Unref after
- *     usage.
+ * Returns: (transfer full) (nullable): the #GstPadTemplate from which
+ *     this pad was instantiated, or %NULL if this pad has no
+ *     template. Unref after usage.
  */
 GstPadTemplate *
 gst_pad_get_pad_template (GstPad * pad)
@@ -2584,9 +2587,9 @@
  * calling gst_pad_query_caps() on @pad and its peer. The caller owns a reference
  * on the resulting caps.
  *
- * Returns: (transfer full): the allowed #GstCaps of the pad link. Unref the
- *     caps when you no longer need it. This function returns %NULL when @pad
- *     has no peer.
+ * Returns: (transfer full) (nullable): the allowed #GstCaps of the
+ *     pad link. Unref the caps when you no longer need it. This
+ *     function returns %NULL when @pad has no peer.
  *
  * MT safe.
  */
@@ -2641,8 +2644,8 @@
  *
  * The caller must free this iterator after use with gst_iterator_free().
  *
- * Returns: a #GstIterator of #GstPad, or %NULL if @pad has no parent. Unref each
- * returned pad with gst_object_unref().
+ * Returns: (nullable): a #GstIterator of #GstPad, or %NULL if @pad
+ * has no parent. Unref each returned pad with gst_object_unref().
  */
 GstIterator *
 gst_pad_iterate_internal_links_default (GstPad * pad, GstObject * parent)
@@ -2707,9 +2710,9 @@
  *
  * Free-function: gst_iterator_free
  *
- * Returns: (transfer full): a new #GstIterator of #GstPad or %NULL when the
- *     pad does not have an iterator function configured. Use
- *     gst_iterator_free() after usage.
+ * Returns: (transfer full) (nullable): a new #GstIterator of #GstPad
+ *     or %NULL when the pad does not have an iterator function
+ *     configured. Use gst_iterator_free() after usage.
  */
 GstIterator *
 gst_pad_iterate_internal_links (GstPad * pad)
@@ -5348,8 +5351,9 @@
  * Returns a new reference of the sticky event of type @event_type
  * from the event.
  *
- * Returns: (transfer full): a #GstEvent of type @event_type or %NULL when no
- * event of @event_type was on @pad. Unref after usage.
+ * Returns: (transfer full) (nullable): a #GstEvent of type
+ * @event_type or %NULL when no event of @event_type was on
+ * @pad. Unref after usage.
  */
 GstEvent *
 gst_pad_get_sticky_event (GstPad * pad, GstEventType event_type, guint idx)
diff --git a/gst/gstpad.h b/gst/gstpad.h
index bfb8b1a..2ac335c 100644
--- a/gst/gstpad.h
+++ b/gst/gstpad.h
@@ -251,9 +251,9 @@
 /**
  * GstPadChainFunction:
  * @pad: the sink #GstPad that performed the chain.
- * @parent: 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.
+ * @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.
  *
  * A function that will be called on sinkpads when chaining buffers.
@@ -274,9 +274,9 @@
 /**
  * GstPadChainListFunction:
  * @pad: the sink #GstPad that performed the chain.
- * @parent: 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.
+ * @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.
  *
  * A function that will be called on sinkpads when chaining buffer lists.
@@ -297,9 +297,9 @@
 /**
  * GstPadGetRangeFunction:
  * @pad: the src #GstPad to perform the getrange on.
- * @parent: 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.
+ * @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.
  * @offset: the offset of the range
  * @length: the length of the range
  * @buffer: a memory location to hold the result buffer, cannot be %NULL.
@@ -348,9 +348,9 @@
 /**
  * GstPadEventFunction:
  * @pad: the #GstPad to handle the event.
- * @parent: 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.
+ * @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.
  *
  * Function signature to handle an event for the pad.
@@ -365,9 +365,9 @@
 /**
  * GstPadIterIntLinkFunction:
  * @pad: The #GstPad to query.
- * @parent: 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.
+ * @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.
  *
  * The signature of the internal pad link iterator function.
  *
@@ -382,9 +382,9 @@
 /**
  * GstPadQueryFunction:
  * @pad: the #GstPad to query.
- * @parent: 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.
+ * @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.
  * @query: the #GstQuery object to execute
  *
  * The signature of the query function.
@@ -399,9 +399,9 @@
 /**
  * GstPadLinkFunction:
  * @pad: the #GstPad that is linked.
- * @parent: 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.
+ * @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.
  * @peer: the peer #GstPad of the link
  *
  * Function signature to handle a new link on the pad.
@@ -412,9 +412,9 @@
 /**
  * GstPadUnlinkFunction:
  * @pad: the #GstPad that is linked.
- * @parent: 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.
+ * @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.
  *
  * Function signature to handle a unlinking the pad prom its peer.
  */
@@ -524,8 +524,8 @@
  * GstPadProbeInfo:
  * @type: the current probe type
  * @id: the id of the probe
- * @data: type specific data, check the @type field to know the datatype.
- *    This field can be %NULL.
+ * @data: (allow-none): type specific data, check the @type field to know the
+ *    datatype.  This field can be %NULL.
  * @offset: offset of pull probe, this field is valid when @type contains
  *    #GST_PAD_PROBE_TYPE_PULL
  * @size: size of pull probe, this field is valid when @type contains
@@ -581,7 +581,7 @@
 /**
  * GstPadStickyEventsForeachFunction:
  * @pad: the #GstPad.
- * @event: a sticky #GstEvent.
+ * @event: (allow-none): a sticky #GstEvent.
  * @user_data: the #gpointer to optional user data.
  *
  * Callback used by gst_pad_sticky_events_foreach().
@@ -1186,6 +1186,8 @@
  * Can return %NULL if the pad did not have a parent.
  *
  * MT safe.
+ *
+ * Returns: (nullable): the parent
  */
 #define gst_pad_get_parent(pad) gst_object_get_parent (GST_OBJECT_CAST (pad))
 
diff --git a/gst/gstplugin.c b/gst/gstplugin.c
index 9bfacc1..c9c286a 100644
--- a/gst/gstplugin.c
+++ b/gst/gstplugin.c
@@ -1006,7 +1006,8 @@
  *
  * There may be plugins that do not have a valid release date set on them.
  *
- * Returns: the date string of the plugin, or %NULL if not available.
+ * Returns: (nullable): the date string of the plugin, or %NULL if not
+ * available.
  */
 const gchar *
 gst_plugin_get_release_date_string (GstPlugin * plugin)
@@ -1039,7 +1040,8 @@
  * Gets the plugin specific data cache. If it is %NULL there is no cached data
  * stored. This is the case when the registry is getting rebuilt.
  *
- * Returns: (transfer none): The cached data as a #GstStructure or %NULL.
+ * Returns: (transfer none) (nullable): The cached data as a
+ * #GstStructure or %NULL.
  */
 const GstStructure *
 gst_plugin_get_cache_data (GstPlugin * plugin)
diff --git a/gst/gstplugin.h b/gst/gstplugin.h
index 500be30..6e49332 100644
--- a/gst/gstplugin.h
+++ b/gst/gstplugin.h
@@ -145,11 +145,12 @@
  * @source: source module plugin belongs to
  * @package: shipped package plugin belongs to
  * @origin: URL to provider of plugin
- * @release_datetime: date time string in ISO 8601 format (or rather, a
- *     subset thereof), or %NULL. Allowed are the following formats:
- *     "YYYY-MM-DD" and "YYY-MM-DDTHH:MMZ" (with 'T' a separator and 'Z'
- *     indicating UTC/Zulu time). This field should be set via the
- *     GST_PACKAGE_RELEASE_DATETIME preprocessor macro.
+ * @release_datetime: (allow-none): date time string in ISO 8601
+ *     format (or rather, a subset thereof), or %NULL. Allowed are the
+ *     following formats: "YYYY-MM-DD" and "YYY-MM-DDTHH:MMZ" (with
+ *     'T' a separator and 'Z' indicating UTC/Zulu time). This field
+ *     should be set via the %GST_PACKAGE_RELEASE_DATETIME
+ *     preprocessor macro.
  *
  * A plugin should export a variable of this type called plugin_desc. The plugin
  * loader will use the data provided there to initialize the plugin.
diff --git a/gst/gstpluginfeature.c b/gst/gstpluginfeature.c
index 6672f7b..ef24eaf 100644
--- a/gst/gstpluginfeature.c
+++ b/gst/gstpluginfeature.c
@@ -90,7 +90,8 @@
  * feature = loaded_feature;
  * ]|
  *
- * Returns: (transfer full): a reference to the loaded feature, or %NULL on error
+ * Returns: (transfer full) (nullable): a reference to the loaded
+ * feature, or %NULL on error
  */
 GstPluginFeature *
 gst_plugin_feature_load (GstPluginFeature * feature)
@@ -185,8 +186,9 @@
  *
  * Get the plugin that provides this feature.
  *
- * Returns: (transfer full): the plugin that provides this feature, or %NULL.
- *     Unref with gst_object_unref() when no longer needed.
+ * Returns: (transfer full) (nullable): the plugin that provides this
+ *     feature, or %NULL.  Unref with gst_object_unref() when no
+ *     longer needed.
  */
 GstPlugin *
 gst_plugin_feature_get_plugin (GstPluginFeature * feature)
@@ -205,8 +207,9 @@
  *
  * Get the name of the plugin that provides this feature.
  *
- * Returns: the name of the plugin that provides this feature, or %NULL if
- *     the feature is not associated with a plugin.
+ * Returns: (nullable): the name of the plugin that provides this
+ *     feature, or %NULL if the feature is not associated with a
+ *     plugin.
  *
  * Since: 1.2
  */
diff --git a/gst/gstpluginfeature.h b/gst/gstpluginfeature.h
index bc01969..08abb73 100644
--- a/gst/gstpluginfeature.h
+++ b/gst/gstpluginfeature.h
@@ -75,7 +75,7 @@
  * Returns the name of @feature.
  * For a nameless plugin feature, this returns %NULL.
  *
- * Returns: (transfer none): the name of @feature. MT safe.
+ * Returns: (transfer none) (nullable): the name of @feature. MT safe.
  *
  */
 #define                 gst_plugin_feature_get_name(feature)      GST_OBJECT_NAME(feature)
diff --git a/gst/gstpoll.c b/gst/gstpoll.c
index 6694a87..34f93f4 100644
--- a/gst/gstpoll.c
+++ b/gst/gstpoll.c
@@ -545,8 +545,8 @@
  *
  * Free-function: gst_poll_free
  *
- * Returns: (transfer full): a new #GstPoll, or %NULL in case of an error.
- *     Free with gst_poll_free().
+ * Returns: (transfer full) (nullable): a new #GstPoll, or %NULL in
+ *     case of an error.  Free with gst_poll_free().
  */
 GstPoll *
 gst_poll_new (gboolean controllable)
@@ -617,8 +617,8 @@
  *
  * Free-function: gst_poll_free
  *
- * Returns: (transfer full): a new #GstPoll, or %NULL in case of an error.
- *     Free with gst_poll_free().
+ * Returns: (transfer full) (nullable): a new #GstPoll, or %NULL in
+ *     case of an error.  Free with gst_poll_free().
  */
 GstPoll *
 gst_poll_new_timer (void)
diff --git a/gst/gstpreset.c b/gst/gstpreset.c
index 19f0fbb..27db9ec 100644
--- a/gst/gstpreset.c
+++ b/gst/gstpreset.c
@@ -116,9 +116,9 @@
 /*
  * preset_get_paths:
  * @preset: a #GObject that implements #GstPreset
- * @preset_user_path: location for path or %NULL
- * @preset_app_path: location for path or %NULL
- * @preset_system_path: location for path or %NULL
+ * @preset_user_path: (out) (allow-none): location for path or %NULL
+ * @preset_app_path: (out) (allow-none): location for path or %NULL
+ * @preset_system_path: (out) (allow-none): location for path or %NULL
  *
  * Fetch the preset_path for user local, application specific and system wide
  * settings. Don't free after use.
@@ -1069,7 +1069,7 @@
  * @preset: a #GObject that implements #GstPreset
  * @name: preset name
  * @tag: meta data item name
- * @value: new value
+ * @value: (allow-none): new value
  *
  * Sets a new @value for an existing meta data item or adds a new item. Meta
  * data @tag names can be something like e.g. "comment". Supplying %NULL for the
@@ -1141,7 +1141,8 @@
  * Gets the directory for application specific presets if set by the
  * application.
  *
- * Returns: the directory or %NULL, don't free or modify the string
+ * Returns: (nullable): the directory or %NULL, don't free or modify
+ * the string
  */
 const gchar *
 gst_preset_get_app_dir (void)
diff --git a/gst/gstquery.h b/gst/gstquery.h
index 3750a19..18a075c 100644
--- a/gst/gstquery.h
+++ b/gst/gstquery.h
@@ -276,8 +276,8 @@
 #define         gst_query_make_writable(q)      GST_QUERY_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (q)))
 /**
  * gst_query_replace:
- * @old_query: (inout) (transfer full): pointer to a pointer to a #GstQuery
- *     to be replaced.
+ * @old_query: (inout) (transfer full) (nullable): pointer to a pointer to a
+ *     #GstQuery to be replaced.
  * @new_query: (allow-none) (transfer none): pointer to a #GstQuery that will
  *     replace the query pointed to by @old_query.
  *
diff --git a/gst/gstregistry.c b/gst/gstregistry.c
index 2838737..73fdf0e 100644
--- a/gst/gstregistry.c
+++ b/gst/gstregistry.c
@@ -127,7 +127,7 @@
 #include "gstinfo.h"
 #include "gsterror.h"
 #include "gstregistry.h"
-#include "gstdevicemonitorfactory.h"
+#include "gstdeviceproviderfactory.h"
 
 #include "gstpluginloader.h"
 
@@ -166,7 +166,7 @@
   guint32 efl_cookie;
   GList *typefind_factory_list;
   guint32 tfl_cookie;
-  GList *device_monitor_factory_list;
+  GList *device_provider_factory_list;
   guint32 dmfl_cookie;
 };
 
@@ -317,10 +317,10 @@
     gst_plugin_feature_list_free (registry->priv->typefind_factory_list);
   }
 
-  if (registry->priv->device_monitor_factory_list) {
+  if (registry->priv->device_provider_factory_list) {
     GST_DEBUG_OBJECT (registry,
-        "Cleaning up cached device monitor factory list");
-    gst_plugin_feature_list_free (registry->priv->device_monitor_factory_list);
+        "Cleaning up cached device provider factory list");
+    gst_plugin_feature_list_free (registry->priv->device_provider_factory_list);
   }
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -789,20 +789,20 @@
 
 
 static GList *
-gst_registry_get_device_monitor_factory_list (GstRegistry * registry)
+gst_registry_get_device_provider_factory_list (GstRegistry * registry)
 {
   GList *list;
 
   GST_OBJECT_LOCK (registry);
 
   gst_registry_get_feature_list_or_create (registry,
-      &registry->priv->device_monitor_factory_list,
-      &registry->priv->dmfl_cookie, GST_TYPE_DEVICE_MONITOR_FACTORY);
+      &registry->priv->device_provider_factory_list,
+      &registry->priv->dmfl_cookie, GST_TYPE_DEVICE_PROVIDER_FACTORY);
 
   /* Return reffed copy */
   list =
       gst_plugin_feature_list_copy (registry->
-      priv->device_monitor_factory_list);
+      priv->device_provider_factory_list);
 
   GST_OBJECT_UNLOCK (registry);
 
@@ -868,8 +868,9 @@
  * Find the plugin with the given name in the registry.
  * The plugin will be reffed; caller is responsible for unreffing.
  *
- * Returns: (transfer full): the plugin with the given name or %NULL if the
- *     plugin was not found. gst_object_unref() after usage.
+ * Returns: (transfer full) (nullable): the plugin with the given name
+ *     or %NULL if the plugin was not found. gst_object_unref() after
+ *     usage.
  *
  * MT safe.
  */
@@ -902,8 +903,9 @@
  *
  * Find the pluginfeature with the given name and type in the registry.
  *
- * Returns: (transfer full): the pluginfeature with the given name and type
- *     or %NULL if the plugin was not found. gst_object_unref() after usage.
+ * Returns: (transfer full) (nullable): the pluginfeature with the
+ *     given name and type or %NULL if the plugin was not
+ *     found. gst_object_unref() after usage.
  *
  * MT safe.
  */
@@ -951,8 +953,8 @@
     return gst_registry_get_element_factory_list (registry);
   else if (type == GST_TYPE_TYPE_FIND_FACTORY)
     return gst_registry_get_typefind_factory_list (registry);
-  else if (type == GST_TYPE_DEVICE_MONITOR_FACTORY)
-    return gst_registry_get_device_monitor_factory_list (registry);
+  else if (type == GST_TYPE_DEVICE_PROVIDER_FACTORY)
+    return gst_registry_get_device_provider_factory_list (registry);
 
   data.type = type;
   data.name = NULL;
@@ -1055,8 +1057,8 @@
  * Look up a plugin in the given registry with the given filename.
  * If found, plugin is reffed.
  *
- * Returns: (transfer full): the #GstPlugin if found, or %NULL if not.
- *     gst_object_unref() after usage.
+ * Returns: (transfer full) (nullable): the #GstPlugin if found, or
+ *     %NULL if not.  gst_object_unref() after usage.
  */
 GstPlugin *
 gst_registry_lookup (GstRegistry * registry, const char *filename)
diff --git a/gst/gstregistrybinary.c b/gst/gstregistrybinary.c
index ee4a7a0..7b8556e 100644
--- a/gst/gstregistrybinary.c
+++ b/gst/gstregistrybinary.c
@@ -56,7 +56,7 @@
 #include <gst/gstelement.h>
 #include <gst/gsttypefind.h>
 #include <gst/gsttypefindfactory.h>
-#include <gst/gstdevicemonitorfactory.h>
+#include <gst/gstdeviceproviderfactory.h>
 #include <gst/gsturi.h>
 #include <gst/gstinfo.h>
 #include <gst/gstenumtypes.h>
@@ -526,7 +526,7 @@
   /* make sure these types exist */
   GST_TYPE_ELEMENT_FACTORY;
   GST_TYPE_TYPE_FIND_FACTORY;
-  GST_TYPE_DEVICE_MONITOR_FACTORY;
+  GST_TYPE_DEVICE_PROVIDER_FACTORY;
 
 #ifndef GST_DISABLE_GST_DEBUG
   timer = g_timer_new ();
diff --git a/gst/gstregistrychunks.c b/gst/gstregistrychunks.c
index fcacd6b..f854865 100644
--- a/gst/gstregistrychunks.c
+++ b/gst/gstregistrychunks.c
@@ -33,7 +33,7 @@
 #include <gst/gstelement.h>
 #include <gst/gsttypefind.h>
 #include <gst/gsttypefindfactory.h>
-#include <gst/gstdevicemonitorfactory.h>
+#include <gst/gstdeviceproviderfactory.h>
 #include <gst/gsturi.h>
 #include <gst/gstinfo.h>
 #include <gst/gstenumtypes.h>
@@ -333,17 +333,17 @@
     } else {
       gst_registry_chunks_save_const_string (list, "");
     }
-  } else if (GST_IS_DEVICE_MONITOR_FACTORY (feature)) {
-    GstRegistryChunkDeviceMonitorFactory *tff;
-    GstDeviceMonitorFactory *factory = GST_DEVICE_MONITOR_FACTORY (feature);
+  } else if (GST_IS_DEVICE_PROVIDER_FACTORY (feature)) {
+    GstRegistryChunkDeviceProviderFactory *tff;
+    GstDeviceProviderFactory *factory = GST_DEVICE_PROVIDER_FACTORY (feature);
 
     /* Initialize with zeroes because of struct padding and
      * valgrind complaining about copying unitialized memory
      */
-    tff = g_slice_new0 (GstRegistryChunkDeviceMonitorFactory);
+    tff = g_slice_new0 (GstRegistryChunkDeviceProviderFactory);
     chk =
         gst_registry_chunks_make_data (tff,
-        sizeof (GstRegistryChunkDeviceMonitorFactory));
+        sizeof (GstRegistryChunkDeviceProviderFactory));
     pf = (GstRegistryChunkPluginFeature *) tff;
 
 
@@ -668,16 +668,16 @@
         factory->extensions[i - 1] = str;
       }
     }
-  } else if (GST_IS_DEVICE_MONITOR_FACTORY (feature)) {
-    GstRegistryChunkDeviceMonitorFactory *dmf;
-    GstDeviceMonitorFactory *factory = GST_DEVICE_MONITOR_FACTORY (feature);
+  } else if (GST_IS_DEVICE_PROVIDER_FACTORY (feature)) {
+    GstRegistryChunkDeviceProviderFactory *dmf;
+    GstDeviceProviderFactory *factory = GST_DEVICE_PROVIDER_FACTORY (feature);
     const gchar *meta_data_str;
 
     align (*in);
     GST_DEBUG
         ("Reading/casting for GstRegistryChunkPluginFeature at address %p",
         *in);
-    unpack_element (*in, dmf, GstRegistryChunkDeviceMonitorFactory, end, fail);
+    unpack_element (*in, dmf, GstRegistryChunkDeviceProviderFactory, end, fail);
 
     pf = (GstRegistryChunkPluginFeature *) dmf;
 
diff --git a/gst/gstregistrychunks.h b/gst/gstregistrychunks.h
index e2c86ba..57ced70 100644
--- a/gst/gstregistrychunks.h
+++ b/gst/gstregistrychunks.h
@@ -132,15 +132,15 @@
 } GstRegistryChunkTypeFindFactory;
 
 /*
- * GstRegistryChunkDeviceMonitorFactory:
+ * GstRegistryChunkDeviceProviderFactory:
  *
- * A structure containing the device monitor factory fields
+ * A structure containing the device provider factory fields
  */
-typedef struct _GstRegistryChunkDeviceMonitorFactory
+typedef struct _GstRegistryChunkDeviceProviderFactory
 {
   GstRegistryChunkPluginFeature plugin_feature;
 
-} GstRegistryChunkDeviceMonitorFactory;
+} GstRegistryChunkDeviceProviderFactory;
 
 /*
  * GstRegistryChunkPadTemplate:
diff --git a/gst/gstsample.c b/gst/gstsample.c
index 76b76bd..ce8228a 100644
--- a/gst/gstsample.c
+++ b/gst/gstsample.c
@@ -143,10 +143,10 @@
  *
  * Get the buffer associated with @sample
  *
- * Returns: (transfer none): the buffer of @sample or %NULL when there
- *  is no buffer. The buffer remains valid as long as @sample is valid.
- *  If you need to hold on to it for longer than that, take a ref to
- *  the buffer with gst_buffer_ref().
+ * Returns: (transfer none) (nullable): the buffer of @sample or %NULL
+ *  when there is no buffer. The buffer remains valid as long as
+ *  @sample is valid.  If you need to hold on to it for longer than
+ *  that, take a ref to the buffer with gst_buffer_ref().
  */
 GstBuffer *
 gst_sample_get_buffer (GstSample * sample)
@@ -162,10 +162,10 @@
  *
  * Get the caps associated with @sample
  *
- * Returns: (transfer none): the caps of @sample or %NULL when there
- *  is no caps. The caps remain valid as long as @sample is valid.
- *  If you need to hold on to the caps for longer than that, take a ref to
- *  the caps with gst_caps_ref().
+ * Returns: (transfer none) (nullable): the caps of @sample or %NULL
+ *  when there is no caps. The caps remain valid as long as @sample is
+ *  valid.  If you need to hold on to the caps for longer than that,
+ *  take a ref to the caps with gst_caps_ref().
  */
 GstCaps *
 gst_sample_get_caps (GstSample * sample)
diff --git a/gst/gststructure.c b/gst/gststructure.c
index 5013860..91f3ab3 100644
--- a/gst/gststructure.c
+++ b/gst/gststructure.c
@@ -1585,8 +1585,8 @@
  * The string should not be modified, and remains valid until the next
  * call to a gst_structure_*() function with the given structure.
  *
- * Returns: a pointer to the string or %NULL when the field did not exist
- * or did not contain a string.
+ * Returns: (nullable): a pointer to the string or %NULL when the
+ * field did not exist or did not contain a string.
  */
 const gchar *
 gst_structure_get_string (const GstStructure * structure,
@@ -2374,8 +2374,9 @@
  *
  * Free-function: gst_structure_free
  *
- * Returns: (transfer full): a new #GstStructure or %NULL when the string could
- *     not be parsed. Free with gst_structure_free() after use.
+ * Returns: (transfer full) (nullable): a new #GstStructure or %NULL
+ *     when the string could not be parsed. Free with
+ *     gst_structure_free() after use.
  *
  * Since: 1.2
  */
@@ -2396,8 +2397,9 @@
  *
  * Free-function: gst_structure_free
  *
- * Returns: (transfer full): a new #GstStructure or %NULL when the string could
- *     not be parsed. Free with gst_structure_free() after use.
+ * Returns: (transfer full) (nullable): a new #GstStructure or %NULL
+ *     when the string could not be parsed. Free with
+ *     gst_structure_free() after use.
  */
 GstStructure *
 gst_structure_from_string (const gchar * string, gchar ** end)
diff --git a/gst/gsttaglist.c b/gst/gsttaglist.c
index c96cb56..be502c3 100644
--- a/gst/gsttaglist.c
+++ b/gst/gsttaglist.c
@@ -844,8 +844,9 @@
  *
  * Serializes a tag list to a string.
  *
- * Returns: a newly-allocated string, or %NULL in case of an error. The
- *    string must be freed with g_free() when no longer needed.
+ * Returns: (nullable): a newly-allocated string, or %NULL in case of
+ *     an error. The string must be freed with g_free() when no longer
+ *     needed.
  */
 gchar *
 gst_tag_list_to_string (const GstTagList * list)
@@ -861,7 +862,8 @@
  *
  * Deserializes a tag list.
  *
- * Returns: a new #GstTagList, or %NULL in case of an error.
+ * Returns: (nullable): a new #GstTagList, or %NULL in case of an
+ * error.
  */
 GstTagList *
 gst_tag_list_new_from_string (const gchar * str)
@@ -1131,8 +1133,8 @@
 
 /**
  * gst_tag_list_merge:
- * @list1: first list to merge
- * @list2: second list to merge
+ * @list1: (allow-none): first list to merge
+ * @list2: (allow-none): second list to merge
  * @mode: the mode to use
  *
  * Merges the two given lists into a new list. If one of the lists is %NULL, a
@@ -1140,7 +1142,7 @@
  *
  * Free-function: gst_tag_list_unref
  *
- * Returns: (transfer full): the new list
+ * Returns: (transfer full) (nullable): the new list
  */
 GstTagList *
 gst_tag_list_merge (const GstTagList * list1, const GstTagList * list2,
@@ -1424,8 +1426,9 @@
  * Gets the value that is at the given index for the given tag in the given
  * list.
  *
- * Returns: (transfer none): The GValue for the specified entry or %NULL if the
- *          tag wasn't available or the tag doesn't have as many entries
+ * Returns: (transfer none) (nullable): The GValue for the specified
+ *          entry or %NULL if the tag wasn't available or the tag
+ *          doesn't have as many entries
  */
 const GValue *
 gst_tag_list_get_value_index (const GstTagList * list, const gchar * tag,
diff --git a/gst/gsttagsetter.c b/gst/gsttagsetter.c
index b2955d6..7ed457e 100644
--- a/gst/gsttagsetter.c
+++ b/gst/gsttagsetter.c
@@ -340,8 +340,8 @@
  *
  * This function is not thread-safe.
  *
- * Returns: (transfer none): a current snapshot of the taglist used in the
- *          setter or %NULL if none is used.
+ * Returns: (transfer none) (nullable): a current snapshot of the
+ *          taglist used in the setter or %NULL if none is used.
  */
 const GstTagList *
 gst_tag_setter_get_tag_list (GstTagSetter * setter)
diff --git a/gst/gsttaskpool.c b/gst/gsttaskpool.c
index d7ff344..20b8aa4 100644
--- a/gst/gsttaskpool.c
+++ b/gst/gsttaskpool.c
@@ -223,9 +223,9 @@
  *
  * Start the execution of a new thread from @pool.
  *
- * Returns: (transfer none): a pointer that should be used for the
- * gst_task_pool_join function. This pointer can be %NULL, you must
- * check @error to detect errors.
+ * Returns: (transfer none) (nullable): a pointer that should be used
+ * for the gst_task_pool_join function. This pointer can be %NULL, you
+ * must check @error to detect errors.
  */
 gpointer
 gst_task_pool_push (GstTaskPool * pool, GstTaskPoolFunction func,
diff --git a/gst/gsttoc.c b/gst/gsttoc.c
index bee13cb..be99cb1 100644
--- a/gst/gsttoc.c
+++ b/gst/gsttoc.c
@@ -360,7 +360,8 @@
  *
  * Find #GstTocEntry with given @uid in the @toc.
  *
- * Returns: (transfer none): #GstTocEntry with specified @uid from the @toc, or %NULL if not found.
+ * Returns: (transfer none) (nullable): #GstTocEntry with specified
+ * @uid from the @toc, or %NULL if not found.
  */
 GstTocEntry *
 gst_toc_find_entry (const GstToc * toc, const gchar * uid)
@@ -393,8 +394,9 @@
  *
  * Copy #GstTocEntry with all subentries (deep copy).
  *
- * Returns: newly allocated #GstTocEntry in case of success, %NULL otherwise;
- * free it when done with gst_toc_entry_unref().
+ * Returns: (nullable): newly allocated #GstTocEntry in case of
+ * success, %NULL otherwise; free it when done with
+ * gst_toc_entry_unref().
  */
 static GstTocEntry *
 gst_toc_entry_copy (const GstTocEntry * entry)
@@ -437,8 +439,8 @@
  *
  * Copy #GstToc with all subentries (deep copy).
  *
- * Returns: newly allocated #GstToc in case of success, %NULL otherwise;
- * free it when done with gst_toc_unref().
+ * Returns: (nullable): newly allocated #GstToc in case of success,
+ * %NULL otherwise; free it when done with gst_toc_unref().
  */
 static GstToc *
 gst_toc_copy (const GstToc * toc)
@@ -492,8 +494,10 @@
 /**
  * gst_toc_entry_get_start_stop_times:
  * @entry: #GstTocEntry to get values from.
- * @start: (out): the storage for the start value, leave %NULL if not need.
- * @stop: (out): the storage for the stop value, leave %NULL if not need.
+ * @start: (out) (allow-none): the storage for the start value, leave
+ *   %NULL if not need.
+ * @stop: (out) (allow-none): the storage for the stop value, leave
+ *   %NULL if not need.
  *
  * Get @start and @stop values from the @entry and write them into appropriate
  * storages.
@@ -538,10 +542,10 @@
 /**
  * gst_toc_entry_get_loop:
  * @entry: #GstTocEntry to get values from.
- * @loop_type: (out): the storage for the loop_type value, leave %NULL if not
- *                    need.
- * @repeat_count: (out): the storage for the repeat_count value, leave %NULL if
- *                       not need.
+ * @loop_type: (out) (allow-none): the storage for the loop_type
+ *             value, leave %NULL if not need.
+ * @repeat_count: (out) (allow-none): the storage for the repeat_count
+ *                value, leave %NULL if not need.
  *
  * Get @loop_type and @repeat_count values from the @entry and write them into
  * appropriate storages. Loops are e.g. used by sampled instruments. GStreamer
diff --git a/gst/gsttocsetter.c b/gst/gsttocsetter.c
index 42839d2..f5c7ea5 100644
--- a/gst/gsttocsetter.c
+++ b/gst/gsttocsetter.c
@@ -128,8 +128,8 @@
  * modified without making it writable first.
  *
  *
- * Returns: (transfer full): TOC set, or %NULL. Unref with gst_toc_unref()
- *     when no longer needed
+ * Returns: (transfer full) (nullable): TOC set, or %NULL. Unref with
+ *     gst_toc_unref() when no longer needed
  */
 GstToc *
 gst_toc_setter_get_toc (GstTocSetter * setter)
diff --git a/gst/gsttypefind.c b/gst/gsttypefind.c
index 1fcbea1..ddcbfda 100644
--- a/gst/gsttypefind.c
+++ b/gst/gsttypefind.c
@@ -119,8 +119,8 @@
  * the stream. The returned memory is valid until the typefinding function
  * returns and must not be freed.
  *
- * Returns: (transfer none) (array length=size): the requested data, or %NULL
- *     if that data is not available.
+ * Returns: (transfer none) (array length=size) (nullable): the
+ *     requested data, or %NULL if that data is not available.
  */
 const guint8 *
 gst_type_find_peek (GstTypeFind * find, gint64 offset, guint size)
diff --git a/gst/gsttypefindfactory.c b/gst/gsttypefindfactory.c
index c216eb3..8a1b239 100644
--- a/gst/gsttypefindfactory.c
+++ b/gst/gsttypefindfactory.c
@@ -177,8 +177,8 @@
  * copy it using g_strdupv().  This function may return %NULL to indicate
  * a 0-length list.
  *
- * Returns: (transfer none) (array zero-terminated=1) (element-type utf8): a
- *     %NULL-terminated array of extensions associated with this factory
+ * Returns: (transfer none) (array zero-terminated=1) (element-type utf8) (nullable):
+ *     a %NULL-terminated array of extensions associated with this factory
  */
 const gchar *const *
 gst_type_find_factory_get_extensions (GstTypeFindFactory * factory)
diff --git a/gst/gsturi.c b/gst/gsturi.c
index 00a496f..eb8cdcc 100644
--- a/gst/gsturi.c
+++ b/gst/gsturi.c
@@ -233,9 +233,9 @@
  * Characters are encoded in PERCENTxy form, where xy is the ASCII hex code
  * for character 16x+y.
  *
- * Return value: a newly allocated string with the unescaped equivalents,
- * or %NULL if @escaped_string contained one of the characters
- * in @illegal_characters.
+ * Return value: (nullable): a newly allocated string with the
+ * unescaped equivalents, or %NULL if @escaped_string contained one of
+ * the characters in @illegal_characters.
  **/
 static char *
 unescape_string (const gchar * escaped_string, const gchar * illegal_characters)
@@ -664,9 +664,10 @@
  * Gets the list of protocols supported by @handler. This list may not be
  * modified.
  *
- * Returns: (transfer none) (element-type utf8): the supported protocols.
- *     Returns %NULL if the @handler isn't implemented properly, or the @handler
- *     doesn't support any protocols.
+ * Returns: (transfer none) (element-type utf8) (nullable): the
+ *     supported protocols.  Returns %NULL if the @handler isn't
+ *     implemented properly, or the @handler doesn't support any
+ *     protocols.
  */
 const gchar *const *
 gst_uri_handler_get_protocols (GstURIHandler * handler)
@@ -692,9 +693,10 @@
  *
  * Gets the currently handled URI.
  *
- * Returns: (transfer full): the URI currently handled by the @handler.
- *   Returns %NULL if there are no URI currently handled. The
- *   returned string must be freed with g_free() when no longer needed.
+ * Returns: (transfer full) (nullable): the URI currently handled by
+ *   the @handler.  Returns %NULL if there are no URI currently
+ *   handled. The returned string must be freed with g_free() when no
+ *   longer needed.
  */
 gchar *
 gst_uri_handler_get_uri (GstURIHandler * handler)
diff --git a/gst/gstutils.c b/gst/gstutils.c
index c411631..2aacbdc 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -773,8 +773,8 @@
  * Retrieves a pad template from @element that is compatible with @compattempl.
  * Pads from compatible templates can be linked together.
  *
- * Returns: (transfer none): a compatible #GstPadTemplate, or %NULL if none
- *     was found. No unreferencing is necessary.
+ * Returns: (transfer none) (nullable): a compatible #GstPadTemplate,
+ *   or %NULL if none was found. No unreferencing is necessary.
  */
 GstPadTemplate *
 gst_element_get_compatible_pad_template (GstElement * element,
@@ -850,8 +850,8 @@
  * #GST_PAD_REQUEST, requests a new pad. Can return %NULL for #GST_PAD_SOMETIMES
  * templates.
  *
- * Returns: (transfer full): the #GstPad, or NULL if one could not be found
- *     or created.
+ * Returns: (transfer full) (nullable): the #GstPad, or %NULL if one
+ *   could not be found or created.
  */
 static GstPad *
 gst_element_get_pad_from_template (GstElement * element, GstPadTemplate * templ)
@@ -891,7 +891,8 @@
  * Requests a pad from @element. The returned pad should be unlinked and
  * compatible with @templ. Might return an existing pad, or request a new one.
  *
- * Returns: a #GstPad, or %NULL if one could not be found or created.
+ * Returns: (nullable): a #GstPad, or %NULL if one could not be found
+ *   or created.
  */
 static GstPad *
 gst_element_request_compatible_pad (GstElement * element,
@@ -984,8 +985,9 @@
  * and if none can be found, it will request a compatible REQUEST pad by looking
  * at the templates of @element.
  *
- * Returns: (transfer full): the #GstPad to which a link can be made, or %NULL
- *     if one cannot be found. gst_object_unref() after usage.
+ * Returns: (transfer full) (nullable): the #GstPad to which a link
+ *   can be made, or %NULL if one cannot be found. gst_object_unref()
+ *   after usage.
  */
 GstPad *
 gst_element_get_compatible_pad (GstElement * element, GstPad * pad,
@@ -2311,8 +2313,9 @@
  * Gets the parent of @pad, cast to a #GstElement. If a @pad has no parent or
  * its parent is not an element, return %NULL.
  *
- * Returns: (transfer full): the parent of the pad. The caller has a
- * reference on the parent, so unref when you're finished with it.
+ * Returns: (transfer full) (nullable): the parent of the pad. The
+ * caller has a reference on the parent, so unref when you're finished
+ * with it.
  *
  * MT safe.
  */
@@ -2957,7 +2960,8 @@
  * owns a reference to it and should use gst_object_unref() on the
  * pad when it is not needed any longer.
  *
- * Returns: (transfer full): unlinked pad of the given direction, %NULL.
+ * Returns: (transfer full) (nullable): unlinked pad of the given
+ * direction, %NULL.
  */
 GstPad *
 gst_bin_find_unlinked_pad (GstBin * bin, GstPadDirection direction)
@@ -3017,8 +3021,8 @@
  * and want them all ghosted, you will have to create the ghost pads
  * yourself).
  *
- * Returns: (transfer floating) (type Gst.Bin): a newly-created bin,
- *   or %NULL if an error occurred.
+ * Returns: (transfer floating) (type Gst.Bin) (nullable): a
+ *   newly-created bin, or %NULL if an error occurred.
  */
 GstElement *
 gst_parse_bin_from_description (const gchar * bin_description,
@@ -3159,7 +3163,8 @@
  *
  * The complexity of this search function is O(log (num_elements)).
  *
- * Returns: (transfer none): The address of the found element or %NULL if nothing was found
+ * Returns: (transfer none) (nullable): The address of the found
+ * element or %NULL if nothing was found
  */
 gpointer
 gst_util_array_binary_search (gpointer array, guint num_elements,
@@ -3778,8 +3783,9 @@
  * The returned stream-id string should be treated as an opaque string, its
  * contents should not be interpreted.
  *
- * Returns: a newly-allocated copy of the stream-id for @pad, or %NULL.
- *     g_free() the returned string when no longer needed.
+ * Returns: (nullable): a newly-allocated copy of the stream-id for
+ *     @pad, or %NULL.  g_free() the returned string when no longer
+ *     needed.
  *
  * Since: 1.2
  */
diff --git a/gst/gstvalue.c b/gst/gstvalue.c
index f088cca..77e6fa1 100644
--- a/gst/gstvalue.c
+++ b/gst/gstvalue.c
@@ -4785,8 +4785,10 @@
 
 /**
  * gst_value_intersect:
- * @dest: (out caller-allocates) (transfer full): a uninitialized #GValue that will hold the calculated
- * intersection value. May be %NULL if the resulting set if not needed.
+ * @dest: (out caller-allocates) (transfer full) (allow-none):
+ *   a uninitialized #GValue that will hold the calculated
+ *   intersection value. May be %NULL if the resulting set if not
+ *   needed.
  * @value1: a value to intersect
  * @value2: another value to intersect
  *
@@ -4870,9 +4872,10 @@
 
 /**
  * gst_value_subtract:
- * @dest: (out caller-allocates): the destination value for the result if the
- *     subtraction is not empty. May be %NULL, in which case the resulting set
- *     will not be computed, which can give a fair speedup.
+ * @dest: (out caller-allocates) (allow-none): the destination value
+ *     for the result if the subtraction is not empty. May be %NULL,
+ *     in which case the resulting set will not be computed, which can
+ *     give a fair speedup.
  * @minuend: the value to subtract from
  * @subtrahend: the value to subtract
  *
@@ -5059,7 +5062,8 @@
  *
  * Free-function: g_free
  *
- * Returns: (transfer full): the serialization for @value or %NULL if none exists
+ * Returns: (transfer full) (nullable): the serialization for @value
+ * or %NULL if none exists
  */
 gchar *
 gst_value_serialize (const GValue * value)
diff --git a/gstreamer.doap b/gstreamer.doap
index 55f6dc2..b993d33 100644
--- a/gstreamer.doap
+++ b/gstreamer.doap
@@ -40,6 +40,16 @@
 
  <release>
   <Version>
+   <revision>1.3.90</revision>
+   <branch>1.3</branch>
+   <name></name>
+   <created>2014-06-28</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.3.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.3.3</revision>
    <branch>1.3</branch>
    <name></name>
diff --git a/gstreamer.spec b/gstreamer.spec
index 34a57d0..c926f5c 100644
--- a/gstreamer.spec
+++ b/gstreamer.spec
@@ -4,7 +4,7 @@
 %define 	_glib2		2.32.0
 
 Name: 		%{gstreamer}
-Version: 	1.3.3
+Version: 	1.3.90
 Release: 	1
 Summary: 	GStreamer streaming media framework runtime
 
diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c
index 3d23fdb..fc1582b 100644
--- a/libs/gst/base/gstadapter.c
+++ b/libs/gst/base/gstadapter.c
@@ -425,7 +425,7 @@
  *
  * Returns %NULL if @size bytes are not available.
  *
- * Returns: (transfer none) (array length=size) (element-type guint8):
+ * Returns: (transfer none) (array length=size) (element-type guint8) (nullable):
  *     a pointer to the first @size bytes of data, or %NULL
  */
 gconstpointer
@@ -708,7 +708,7 @@
  *
  * Free-function: g_free
  *
- * Returns: (transfer full) (array length=nbytes) (element-type guint8):
+ * Returns: (transfer full) (array length=nbytes) (element-type guint8) (nullable):
  *     oven-fresh hot data, or %NULL if @nbytes bytes are not available
  */
 gpointer
@@ -758,8 +758,8 @@
  *
  * Free-function: gst_buffer_unref
  *
- * Returns: (transfer full): a #GstBuffer containing the first @nbytes of
- *     the adapter, or %NULL if @nbytes bytes are not available.
+ * Returns: (transfer full) (nullable): a #GstBuffer containing the first
+ *     @nbytes of the adapter, or %NULL if @nbytes bytes are not available.
  *     gst_buffer_unref() when no longer needed.
  *
  * Since: 1.2
@@ -840,8 +840,8 @@
  *
  * Free-function: gst_buffer_unref
  *
- * Returns: (transfer full): a #GstBuffer containing the first @nbytes of
- *     the adapter, or %NULL if @nbytes bytes are not available.
+ * Returns: (transfer full) (nullable): a #GstBuffer containing the first
+ *     @nbytes of the adapter, or %NULL if @nbytes bytes are not available.
  *     gst_buffer_unref() when no longer needed.
  */
 GstBuffer *
@@ -917,9 +917,9 @@
  * Caller owns returned list and contained buffers. gst_buffer_unref() each
  * buffer in the list before freeing the list after usage.
  *
- * Returns: (element-type Gst.Buffer) (transfer full): a #GList of buffers
- *     containing the first @nbytes of the adapter, or %NULL if @nbytes bytes
- *     are not available
+ * Returns: (element-type Gst.Buffer) (transfer full) (nullable): a #GList of
+ *     buffers containing the first @nbytes of the adapter, or %NULL if @nbytes
+ *     bytes are not available
  */
 GList *
 gst_adapter_take_list (GstAdapter * adapter, gsize nbytes)
@@ -1165,7 +1165,7 @@
  * @offset: offset into the adapter data from which to start scanning, returns
  *          the last scanned position.
  * @size: number of bytes to scan from offset
- * @value: pointer to uint32 to return matching data
+ * @value: (out) (allow-none): pointer to uint32 to return matching data
  *
  * Scan for pattern @pattern with applied mask @mask in the adapter data,
  * starting from offset @offset.  If a match is found, the value that matched
diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index c3e63e1..fb31c9e 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -2716,6 +2716,7 @@
   GstBaseParseClass *bclass;
   GstBaseParse *parse;
   GstFlowReturn ret = GST_FLOW_OK;
+  GstFlowReturn old_ret = GST_FLOW_OK;
   GstBuffer *tmpbuf = NULL;
   guint fsize = 1;
   gint skip = -1;
@@ -2902,8 +2903,11 @@
     if (skip == 0 && flush == 0) {
       GST_LOG_OBJECT (parse, "nothing skipped and no frames finished, "
           "breaking to get more data");
+      /* ignore this return as it produced no data */
+      ret = old_ret;
       goto done;
     }
+    old_ret = ret;
   }
 
 done:
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
index b6fc1fc..bcd1e55 100644
--- a/libs/gst/base/gstbasesink.c
+++ b/libs/gst/base/gstbasesink.c
@@ -904,9 +904,9 @@
  *
  * Free-function: gst_sample_unref
  *
- * Returns: (transfer full): a #GstSample. gst_sample_unref() after usage.
- *     This function returns %NULL when no buffer has arrived in the sink yet
- *     or when the sink is not in PAUSED or PLAYING.
+ * Returns: (transfer full) (nullable): a #GstSample. gst_sample_unref() after
+ *     usage.  This function returns %NULL when no buffer has arrived in the
+ *     sink yet or when the sink is not in PAUSED or PLAYING.
  */
 GstSample *
 gst_base_sink_get_last_sample (GstBaseSink * sink)
diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c
index 8f97b71..bebaf12 100644
--- a/libs/gst/base/gstcollectpads.c
+++ b/libs/gst/base/gstcollectpads.c
@@ -576,8 +576,8 @@
  * @pads: the collectpads to use
  * @pad: (transfer none): the pad to add
  * @size: the size of the returned #GstCollectData structure
- * @destroy_notify: function to be called before the returned #GstCollectData
- * structure is freed
+ * @destroy_notify: (scope async): function to be called before the returned
+ *   #GstCollectData structure is freed
  * @lock: whether to lock this pad in usual waiting state
  *
  * Add a pad to the collection of collect pads. The pad has to be
@@ -606,8 +606,8 @@
  *
  * MT safe.
  *
- * Returns: a new #GstCollectData to identify the new pad. Or %NULL
- *   if wrong parameters are supplied.
+ * Returns: (nullable) (transfer none): a new #GstCollectData to identify the
+ *   new pad. Or %NULL if wrong parameters are supplied.
  */
 GstCollectData *
 gst_collect_pads_add_pad (GstCollectPads * pads, GstPad * pad, guint size,
diff --git a/libs/gst/base/gstcollectpads.h b/libs/gst/base/gstcollectpads.h
index 0ba2dee..9d56614 100644
--- a/libs/gst/base/gstcollectpads.h
+++ b/libs/gst/base/gstcollectpads.h
@@ -279,7 +279,8 @@
 
 /**
  * GstCollectPads:
- * @data: #GList of #GstCollectData managed by this #GstCollectPads.
+ * @data: (element-type GstBase.CollectData): #GList of #GstCollectData managed
+ *   by this #GstCollectPads.
  *
  * Collectpads object.
  */
diff --git a/libs/gst/base/gstdataqueue.c b/libs/gst/base/gstdataqueue.c
index e34b265..6f61062 100644
--- a/libs/gst/base/gstdataqueue.c
+++ b/libs/gst/base/gstdataqueue.c
@@ -142,7 +142,7 @@
 
   /* signals */
   /**
-   * GstDataQueue::empty:
+   * GstDataQueue::empty: (skip)
    * @queue: the queue instance
    *
    * Reports that the queue became empty (empty).
@@ -156,7 +156,7 @@
       g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
   /**
-   * GstDataQueue::full:
+   * GstDataQueue::full: (skip)
    * @queue: the queue instance
    *
    * Reports that the queue became full (full).
@@ -312,7 +312,7 @@
 }
 
 /**
- * gst_data_queue_flush:
+ * gst_data_queue_flush: (skip)
  * @queue: a #GstDataQueue.
  *
  * Flushes all the contents of the @queue. Any call to #gst_data_queue_push and
@@ -331,7 +331,7 @@
 }
 
 /**
- * gst_data_queue_is_empty:
+ * gst_data_queue_is_empty: (skip)
  * @queue: a #GstDataQueue.
  *
  * Queries if there are any items in the @queue.
@@ -354,7 +354,7 @@
 }
 
 /**
- * gst_data_queue_is_full:
+ * gst_data_queue_is_full: (skip)
  * @queue: a #GstDataQueue.
  *
  * Queries if @queue is full. This check will be done using the
@@ -378,7 +378,7 @@
 }
 
 /**
- * gst_data_queue_set_flushing:
+ * gst_data_queue_set_flushing: (skip)
  * @queue: a #GstDataQueue.
  * @flushing: a #gboolean stating if the queue will be flushing or not.
  *
@@ -426,7 +426,7 @@
 }
 
 /**
- * gst_data_queue_push_force:
+ * gst_data_queue_push_force: (skip)
  * @queue: a #GstDataQueue.
  * @item: a #GstDataQueueItem.
  *
@@ -474,7 +474,7 @@
 }
 
 /**
- * gst_data_queue_push:
+ * gst_data_queue_push: (skip)
  * @queue: a #GstDataQueue.
  * @item: a #GstDataQueueItem.
  *
@@ -558,7 +558,7 @@
 }
 
 /**
- * gst_data_queue_pop:
+ * gst_data_queue_pop: (skip)
  * @queue: a #GstDataQueue.
  * @item: pointer to store the returned #GstDataQueueItem.
  *
@@ -628,7 +628,7 @@
 }
 
 /**
- * gst_data_queue_peek:
+ * gst_data_queue_peek: (skip)
  * @queue: a #GstDataQueue.
  * @item: pointer to store the returned #GstDataQueueItem.
  *
@@ -683,7 +683,7 @@
 }
 
 /**
- * gst_data_queue_drop_head:
+ * gst_data_queue_drop_head: (skip)
  * @queue: The #GstDataQueue to drop an item from.
  * @type: The #GType of the item to drop.
  *
@@ -731,7 +731,7 @@
 }
 
 /**
- * gst_data_queue_limits_changed:
+ * gst_data_queue_limits_changed: (skip)
  * @queue: The #GstDataQueue
  *
  * Inform the queue that the limits for the fullness check have changed and that
@@ -755,7 +755,7 @@
 }
 
 /**
- * gst_data_queue_get_level:
+ * gst_data_queue_get_level: (skip)
  * @queue: The #GstDataQueue
  * @level: the location to store the result
  *
diff --git a/libs/gst/base/gstdataqueue.h b/libs/gst/base/gstdataqueue.h
index 7350c42..17c859c 100644
--- a/libs/gst/base/gstdataqueue.h
+++ b/libs/gst/base/gstdataqueue.h
@@ -43,7 +43,7 @@
 typedef struct _GstDataQueuePrivate GstDataQueuePrivate;
 
 /**
- * GstDataQueueItem:
+ * GstDataQueueItem: (skip)
  * @object: the #GstMiniObject to queue.
  * @size: the size in bytes of the miniobject.
  * @duration: the duration in #GstClockTime of the miniobject. Can not be
@@ -72,7 +72,7 @@
 };
 
 /**
- * GstDataQueueSize:
+ * GstDataQueueSize: (skip)
  * @visible: number of buffers
  * @bytes: number of bytes
  * @time: amount of time
@@ -87,7 +87,7 @@
 };
 
 /**
- * GstDataQueueCheckFullFunction:
+ * GstDataQueueCheckFullFunction: (skip)
  * @queue: a #GstDataQueue.
  * @visible: The number of visible items currently in the queue.
  * @bytes: The amount of bytes currently in the queue.
@@ -106,7 +106,7 @@
 typedef void (*GstDataQueueEmptyCallback) (GstDataQueue * queue, gpointer checkdata);
 
 /**
- * GstDataQueue:
+ * GstDataQueue: (skip)
  * @object: the parent structure
  *
  * Opaque #GstDataQueue structure.
@@ -120,6 +120,9 @@
   gpointer _gst_reserved[GST_PADDING];
 };
 
+/**
+ * GstDataQueueClass: (skip)
+ */
 struct _GstDataQueueClass
 {
   GObjectClass parent_class;
diff --git a/libs/gst/base/gstindex.c b/libs/gst/base/gstindex.c
index b614d2c..272f0e7 100644
--- a/libs/gst/base/gstindex.c
+++ b/libs/gst/base/gstindex.c
@@ -918,7 +918,7 @@
  *
  * Finds the given format/value in the index
  *
- * Returns: the entry associated with the value or %NULL if the
+ * Returns: (nullable): the entry associated with the value or %NULL if the
  *   value was not found.
  */
 GstIndexEntry *
@@ -949,7 +949,7 @@
  * Finds the given format/value in the index with the given
  * compare function and user_data.
  *
- * Returns: the entry associated with the value or %NULL if the
+ * Returns: (nullable): the entry associated with the value or %NULL if the
  *   value was not found.
  */
 GstIndexEntry *
diff --git a/libs/gst/base/gstqueuearray.c b/libs/gst/base/gstqueuearray.c
index d37535d..5ff03fd 100644
--- a/libs/gst/base/gstqueuearray.c
+++ b/libs/gst/base/gstqueuearray.c
@@ -44,7 +44,7 @@
 };
 
 /**
- * gst_queue_array_new:
+ * gst_queue_array_new: (skip)
  * @initial_size: Initial size of the new queue
  *
  * Allocates a new #GstQueueArray object with an initial
@@ -70,7 +70,7 @@
 
 
 /**
- * gst_queue_array_free:
+ * gst_queue_array_free: (skip)
  * @array: a #GstQueueArray object
  *
  * Frees queue @array and all memory associated to it.
@@ -85,7 +85,7 @@
 }
 
 /**
- * gst_queue_array_pop_head:
+ * gst_queue_array_pop_head: (skip)
  * @array: a #GstQueueArray object
  *
  * Returns and head of the queue @array and removes
@@ -111,7 +111,7 @@
 }
 
 /**
- * gst_queue_array_peek_head:
+ * gst_queue_array_peek_head: (skip)
  * @array: a #GstQueueArray object
  *
  * Returns and head of the queue @array and does not
@@ -131,7 +131,7 @@
 }
 
 /**
- * gst_queue_array_push_tail:
+ * gst_queue_array_push_tail: (skip)
  * @array: a #GstQueueArray object
  * @data: object to push
  *
@@ -183,7 +183,7 @@
 }
 
 /**
- * gst_queue_array_is_empty:
+ * gst_queue_array_is_empty: (skip)
  * @array: a #GstQueueArray object
  *
  * Checks if the queue @array is empty.
@@ -199,7 +199,7 @@
 }
 
 /**
- * gst_queue_array_drop_element:
+ * gst_queue_array_drop_element: (skip)
  * @array: a #GstQueueArray object
  * @idx: index to drop
  *
@@ -285,7 +285,7 @@
 }
 
 /**
- * gst_queue_array_find:
+ * gst_queue_array_find: (skip)
  * @array: a #GstQueueArray object
  * @func: (allow-none): comparison function, or %NULL to find @data by value
  * @data: data for comparison function
@@ -325,7 +325,7 @@
 }
 
 /**
- * gst_queue_array_get_length:
+ * gst_queue_array_get_length: (skip)
  * @array: a #GstQueueArray object
  *
  * Returns the length of the queue @array
diff --git a/libs/gst/base/gstqueuearray.h b/libs/gst/base/gstqueuearray.h
index b640886..bfe89e7 100644
--- a/libs/gst/base/gstqueuearray.h
+++ b/libs/gst/base/gstqueuearray.h
@@ -24,6 +24,9 @@
 #ifndef __GST_QUEUE_ARRAY_H__
 #define __GST_QUEUE_ARRAY_H__
 
+/**
+ * GstQueueArray: (skip)
+ */
 typedef struct _GstQueueArray GstQueueArray;
 
 GstQueueArray * gst_queue_array_new       (guint initial_size);
diff --git a/libs/gst/base/gsttypefindhelper.c b/libs/gst/base/gsttypefindhelper.c
index 1a0d327..b2fb21c 100644
--- a/libs/gst/base/gsttypefindhelper.c
+++ b/libs/gst/base/gsttypefindhelper.c
@@ -75,8 +75,8 @@
  * for performance reasons, but mostly because pointers returned by us need
  * to stay valid until typefinding has finished)
  *
- * Returns: address of the data or %NULL if buffer does not cover the
- * requested range.
+ * Returns: (nullable): address of the data or %NULL if buffer does not cover
+ * the requested range.
  */
 static const guint8 *
 helper_find_peek (gpointer data, gint64 offset, guint size)
@@ -269,8 +269,8 @@
  *
  * Free-function: gst_caps_unref
  *
- * Returns: (transfer full): the #GstCaps corresponding to the data stream.
- *     Returns %NULL if no #GstCaps matches the data stream.
+ * Returns: (transfer full) (nullable): the #GstCaps corresponding to the data
+ *     stream.  Returns %NULL if no #GstCaps matches the data stream.
  */
 GstCaps *
 gst_type_find_helper_get_range (GstObject * obj, GstObject * parent,
@@ -388,8 +388,8 @@
  *
  * Free-function: gst_caps_unref
  *
- * Returns: (transfer full): the #GstCaps corresponding to the data stream.
- *     Returns %NULL if no #GstCaps matches the data stream.
+ * Returns: (transfer full) (nullable): the #GstCaps corresponding to the data
+ *     stream.  Returns %NULL if no #GstCaps matches the data stream.
  */
 
 GstCaps *
@@ -426,8 +426,8 @@
  *
  * Get data pointer within a buffer.
  *
- * Returns: address inside the buffer or %NULL if buffer does not cover the
- * requested range.
+ * Returns: (nullable): address inside the buffer or %NULL if buffer does not
+ * cover the requested range.
  */
 static const guint8 *
 buf_helper_find_peek (gpointer data, gint64 off, guint size)
@@ -499,9 +499,9 @@
  *
  * Free-function: gst_caps_unref
  *
- * Returns: (transfer full): the #GstCaps corresponding to the data, or %NULL
- *     if no type could be found. The caller should free the caps returned
- *     with gst_caps_unref().
+ * Returns: (transfer full) (nullable): the #GstCaps corresponding to the data,
+ *     or %NULL if no type could be found. The caller should free the caps
+ *     returned with gst_caps_unref().
  */
 GstCaps *
 gst_type_find_helper_for_data (GstObject * obj, const guint8 * data, gsize size,
@@ -570,9 +570,9 @@
  *
  * Free-function: gst_caps_unref
  *
- * Returns: (transfer full): the #GstCaps corresponding to the data, or %NULL
- *     if no type could be found. The caller should free the caps returned
- *     with gst_caps_unref().
+ * Returns: (transfer full) (nullable): the #GstCaps corresponding to the data,
+ *     or %NULL if no type could be found. The caller should free the caps
+ *     returned with gst_caps_unref().
  */
 GstCaps *
 gst_type_find_helper_for_buffer (GstObject * obj, GstBuffer * buf,
@@ -607,9 +607,9 @@
  *
  * Free-function: gst_caps_unref
  *
- * Returns: (transfer full): the #GstCaps corresponding to @extension, or
- *     %NULL if no type could be found. The caller should free the caps
- *     returned with gst_caps_unref().
+ * Returns: (transfer full) (nullable): the #GstCaps corresponding to
+ *     @extension, or %NULL if no type could be found. The caller should free
+ *     the caps returned with gst_caps_unref().
  */
 GstCaps *
 gst_type_find_helper_for_extension (GstObject * obj, const gchar * extension)
diff --git a/plugins/elements/gstelements_private.c b/plugins/elements/gstelements_private.c
index 6c304b4..2364741 100644
--- a/plugins/elements/gstelements_private.c
+++ b/plugins/elements/gstelements_private.c
@@ -1,4 +1,7 @@
 /* GStreamer
+ * Copyright (C) 2011 David Schleef <ds@schleef.org>
+ * Copyright (C) 2011 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+ * Copyright (C) 2014 Tim-Philipp Müller <tim@centricular.com>
  * Copyright (C) 2014 Vincent Penquerc'h <vincent@collabora.co.uk>
  *
  * gstelements_private.c: Shared code for core elements
@@ -26,17 +29,7 @@
 #include "gst/gst.h"
 #include "gstelements_private.h"
 
-/**
- * gst_buffer_get_flags_string:
- * @buffer: a #GstBuffer
- * Returns: A newly allocated string
- *
- * Returns a newly allocated string describing the flags on this buffer.
- * The string must be freed using g_free() when done.
- *
- * Since: 1.4
- */
-
+/* Returns a newly allocated string describing the flags on this buffer */
 char *
 gst_buffer_get_flags_string (GstBuffer * buffer)
 {
diff --git a/plugins/elements/gstfilesrc.c b/plugins/elements/gstfilesrc.c
index dd4e811..3141883 100644
--- a/plugins/elements/gstfilesrc.c
+++ b/plugins/elements/gstfilesrc.c
@@ -480,14 +480,16 @@
           g_strerror (errno));
       src->seekable = FALSE;
     } else {
+      res = lseek (src->fd, 0, SEEK_SET);
+
+      if (res < 0) {
+        /* We really don't like not being able to go back to 0 */
+        src->seekable = FALSE;
+        goto lseek_wonky;
+      }
+
       src->seekable = TRUE;
     }
-    res = lseek (src->fd, 0, SEEK_SET);
-    if (res < 0) {
-      /* We really don't like not being able to go back to 0 */
-      src->seekable = FALSE;
-      goto lseek_wonky;
-    }
   }
 
   /* We can only really do seeking on regular files - for other file types, we
diff --git a/po/af.gmo b/po/af.gmo
index 3d9b5f4..6708b41 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 2b96e93..7cc88ce 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/az.gmo b/po/az.gmo
index 5f064da..01772d7 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 6cadef6..1c447e4 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/be.gmo b/po/be.gmo
index 8dadaf2..709c304 100644
--- a/po/be.gmo
+++ b/po/be.gmo
Binary files differ
diff --git a/po/be.po b/po/be.po
index 8ee9cd3..9097360 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/bg.gmo b/po/bg.gmo
index f458001..aa78608 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 0875d43..341b07e 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/ca.gmo b/po/ca.gmo
index 3357b1f..f7f5cf2 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 82cb9cd..018d302 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/cs.gmo b/po/cs.gmo
index 93f9073..dc299cf 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 8ce734e..11b4129 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/da.gmo b/po/da.gmo
index b5e2b77..af2258d 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 7b9044e..6af5f54 100644
--- a/po/da.po
+++ b/po/da.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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\n"
 "PO-Revision-Date: 2013-12-08 12:41+0100\n"
 "Last-Translator: Mogens Jaeger <mogensjaeger@gmail.com>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index 49b888f..00f620e 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index d9ecdd2..a7d5532 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/el.gmo b/po/el.gmo
index 3665af0..5b9b115 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 72aaa7d..44d0dc6 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 5e85ea5..c00d007 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 f97597f..096a9be 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/eo.gmo b/po/eo.gmo
index 7d42007..105388b 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 637a2d7..dcffaa1 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\n"
 "PO-Revision-Date: 2011-06-04 21:11+0100\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index 23327a9..10ddae7 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 051ac39..507378b 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/eu.gmo b/po/eu.gmo
index 955e903..6d0241b 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 07e5fcc..dfcf573 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/fi.gmo b/po/fi.gmo
index 6e7e85f..8ca64f5 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 87223ce..d1ce7c1 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/fr.gmo b/po/fr.gmo
index 9cbb429..b1d271c 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index c24997b..8411d5b 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/gl.gmo b/po/gl.gmo
index 148ca3e..7a6266a 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 0b2900a..1fa2742 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/gstreamer-1.0.pot b/po/gstreamer-1.0.pot
index df059d6..f13028c 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.3.3\n"
+"Project-Id-Version: gstreamer 1.3.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -310,7 +310,7 @@
 msgid "Selected clock cannot be used in pipeline."
 msgstr ""
 
-#: gst/gstregistry.c:1691
+#: gst/gstregistry.c:1693
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr ""
@@ -1013,17 +1013,17 @@
 msgid "No URI handler for the %s protocol found"
 msgstr ""
 
-#: gst/gsturi.c:762
+#: gst/gsturi.c:764
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr ""
 
-#: gst/gstutils.c:2352 tools/gst-launch.c:321
+#: gst/gstutils.c:2355 tools/gst-launch.c:321
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr ""
 
-#: gst/gstutils.c:2354 tools/gst-launch.c:323 tools/gst-launch.c:650
+#: gst/gstutils.c:2357 tools/gst-launch.c:323 tools/gst-launch.c:650
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -1152,7 +1152,7 @@
 msgid "Could not create temp file \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstfilesrc.c:517
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstfilesrc.c:519
 #: plugins/elements/gstqueue2.c:1504
 #, c-format
 msgid "Could not open file \"%s\" for reading."
@@ -1186,21 +1186,21 @@
 msgid "Error while writing to file \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:505
+#: plugins/elements/gstfilesrc.c:507
 msgid "No file name specified for reading."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:526
+#: plugins/elements/gstfilesrc.c:528
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:532
+#: plugins/elements/gstfilesrc.c:534
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr ""
 
-#: plugins/elements/gstfilesrc.c:538
+#: plugins/elements/gstfilesrc.c:540
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index 7046cf0..7721dc0 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 04e5a8f..c2ca4a7 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/hu.gmo b/po/hu.gmo
index 61abc40..6174c9b 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index a250118..952ff33 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/id.gmo b/po/id.gmo
index 71f3b78..5fd22f7 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 1ac9005..5c76538 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/it.gmo b/po/it.gmo
index 0de2f8c..9a5353d 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 600aca7..c4c49d0 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/ja.gmo b/po/ja.gmo
index 54767d4..a7292c2 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index ea30d5b..dc66f1e 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/lt.gmo b/po/lt.gmo
index bda011e..24bdb9d 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 1d1c006..3bd2a9f 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/nb.gmo b/po/nb.gmo
index 577d0b0..645f4d2 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index de61396..a00dff5 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/nl.gmo b/po/nl.gmo
index 1b249b0..8f07ecc 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index c431c47..d97ce91 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/pl.gmo b/po/pl.gmo
index c5f12b8..211dd22 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 3109a3a..543d674 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 8b32f92..e161a6b 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 ed8bd83..b98ecf1 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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."
diff --git a/po/ro.gmo b/po/ro.gmo
index 28a69ec..a5bb6ab 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index ac96689..2ed1f20 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/ru.gmo b/po/ru.gmo
index c0526f4..12e3da5 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index aae3e94..38eb830 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/rw.gmo b/po/rw.gmo
index a950b0c..2252930 100644
--- a/po/rw.gmo
+++ b/po/rw.gmo
Binary files differ
diff --git a/po/rw.po b/po/rw.po
index ee27537..19ec760 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/sk.gmo b/po/sk.gmo
index 90ebaf1..e3e0878 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 1798634..09a9ad7 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/sl.gmo b/po/sl.gmo
index cd3ae59..e50eb83 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index bad2716..52aa7ba 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/sq.gmo b/po/sq.gmo
index eee0ded..c32b4ed 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 56ac08a..85224ac 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/sr.gmo b/po/sr.gmo
index 4d34c6c..e9354cd 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 2740459..a81de8f 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\n"
 "PO-Revision-Date: 2014-06-18 20:12+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index da07fdf..9d06afe 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index d5dfbcc..b346b3e 100644
--- a/po/sv.po
+++ b/po/sv.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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\n"
 "PO-Revision-Date: 2014-05-04 12:11+0100\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index a06a3de..664e7c3 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 64c707a..15c84ae 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/uk.gmo b/po/uk.gmo
index 4be5465..02a01df 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 6b91ac3..85f0d1b 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/vi.gmo b/po/vi.gmo
index e47237f..9d2f7c8 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index d766b0f..bb7024f 100644
--- a/po/vi.po
+++ b/po/vi.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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\n"
 "PO-Revision-Date: 2013-12-11 08:08+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 1a92185..5a7b2e5 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 1b4b7ba..408054f 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 14908bb..9b020c8 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 cc1990d..b2e4f6e 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-06-22 17:12+0200\n"
+"POT-Creation-Date: 2014-06-28 10:24+0200\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"
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index e197999..f188b1a 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -105,7 +105,7 @@
 	gst/gstatomicqueue			\
 	gst/gstbuffer				\
 	gst/gstbufferlist			\
-	gst/gstbufferpool				\
+	gst/gstbufferpool			\
 	gst/gstmeta				\
 	gst/gstmemory				\
 	gst/gstbus				\
@@ -113,6 +113,7 @@
 	gst/gstcapsfeatures    			\
 	$(CXX_CHECKS)			     	\
 	gst/gstdatetime     			\
+	gst/gstdevice				\
 	gst/gstinfo		 		\
 	gst/gstiterator 			\
 	gst/gstmessage	 			\
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index 739acca..09d3319 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -88,7 +88,8 @@
 	gst/gstbufferpool$(EXEEXT) gst/gstmeta$(EXEEXT) \
 	gst/gstmemory$(EXEEXT) gst/gstbus$(EXEEXT) \
 	gst/gstcaps$(EXEEXT) gst/gstcapsfeatures$(EXEEXT) \
-	$(am__EXEEXT_2) gst/gstdatetime$(EXEEXT) gst/gstinfo$(EXEEXT) \
+	$(am__EXEEXT_2) gst/gstdatetime$(EXEEXT) \
+	gst/gstdevice$(EXEEXT) gst/gstinfo$(EXEEXT) \
 	gst/gstiterator$(EXEEXT) gst/gstmessage$(EXEEXT) \
 	gst/gstminiobject$(EXEEXT) gst/gstobject$(EXEEXT) \
 	gst/gstpad$(EXEEXT) gst/gstparamspecs$(EXEEXT) \
@@ -409,6 +410,12 @@
 gst_gstdatetime_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_gstdevice_SOURCES = gst/gstdevice.c
+gst_gstdevice_OBJECTS = gst/gstdevice.$(OBJEXT)
+gst_gstdevice_LDADD = $(LDADD)
+gst_gstdevice_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_gstelement_SOURCES = gst/gstelement.c
 gst_gstelement_OBJECTS = gst/gstelement.$(OBJEXT)
 gst_gstelement_LDADD = $(LDADD)
@@ -830,12 +837,13 @@
 	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/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/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 \
@@ -862,13 +870,13 @@
 	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/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_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 \
@@ -1818,6 +1826,12 @@
 gst/gstdatetime$(EXEEXT): $(gst_gstdatetime_OBJECTS) $(gst_gstdatetime_DEPENDENCIES) $(EXTRA_gst_gstdatetime_DEPENDENCIES) gst/$(am__dirstamp)
 	@rm -f gst/gstdatetime$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(gst_gstdatetime_OBJECTS) $(gst_gstdatetime_LDADD) $(LIBS)
+gst/gstdevice.$(OBJEXT): gst/$(am__dirstamp) \
+	gst/$(DEPDIR)/$(am__dirstamp)
+
+gst/gstdevice$(EXEEXT): $(gst_gstdevice_OBJECTS) $(gst_gstdevice_DEPENDENCIES) $(EXTRA_gst_gstdevice_DEPENDENCIES) gst/$(am__dirstamp)
+	@rm -f gst/gstdevice$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(gst_gstdevice_OBJECTS) $(gst_gstdevice_LDADD) $(LIBS)
 gst/gstelement.$(OBJEXT): gst/$(am__dirstamp) \
 	gst/$(DEPDIR)/$(am__dirstamp)
 
@@ -2241,6 +2255,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstcontroller.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstcpp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstdatetime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstdevice.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstelement.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstelementfactory.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstevent.Po@am__quote@
@@ -2674,6 +2689,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/gstdevice.log: gst/gstdevice$(EXEEXT)
+	@p='gst/gstdevice$(EXEEXT)'; \
+	b='gst/gstdevice'; \
+	$(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/gstinfo.log: gst/gstinfo$(EXEEXT)
 	@p='gst/gstinfo$(EXEEXT)'; \
 	b='gst/gstinfo'; \
diff --git a/tests/check/gst/gstbufferlist.c b/tests/check/gst/gstbufferlist.c
index 8af3db0..f20599b 100644
--- a/tests/check/gst/gstbufferlist.c
+++ b/tests/check/gst/gstbufferlist.c
@@ -25,8 +25,6 @@
 #include <gst/gstbufferlist.h>
 #include <string.h>
 
-#define TIMESTAMP 42
-
 static GstBufferList *list;
 
 static void
@@ -42,40 +40,6 @@
   list = NULL;
 }
 
-#if 0
-static GstBuffer *
-buffer_from_string (const gchar * str)
-{
-  gsize size;
-  GstBuffer *buf;
-  gpointer data;
-
-  size = strlen (str);
-  buf = gst_buffer_new_and_alloc (size);
-  GST_BUFFER_TIMESTAMP (buf) = TIMESTAMP;
-
-  data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
-  memcpy (data, str, size);
-  gst_buffer_unmap (buf, data, size);
-
-  return buf;
-}
-
-static void
-check_buffer (GstBuffer * buf, gsize size, const gchar * data)
-{
-  gchar *bdata;
-  gsize bsize, csize, msize;
-
-  bdata = gst_buffer_map (buf, &bsize, &msize, GST_MAP_READ);
-  csize = size ? size : bsize;
-  GST_DEBUG ("%lu %lu %lu", bsize, csize, msize);
-  fail_unless (bsize == csize);
-  fail_unless (memcmp (bdata, data, csize) == 0);
-  gst_buffer_unmap (buf, bdata, bsize);
-}
-#endif
-
 GST_START_TEST (test_add_and_iterate)
 {
   GstBuffer *buf1;
@@ -131,10 +95,8 @@
 
 GST_END_TEST;
 
-#if 0
 GST_START_TEST (test_make_writable)
 {
-  GstBufferListIterator *it;
   GstBufferList *wlist;
   GstBuffer *buf1;
   GstBuffer *buf2;
@@ -142,69 +104,62 @@
   GstBuffer *buf;
 
   /* add buffers to list */
-  it = gst_buffer_list_iterate (list);
-  gst_buffer_list_iterator_add_group (it);
-  buf1 = gst_buffer_new_and_alloc (1);
-  gst_buffer_list_iterator_add (it, buf1);
-  gst_buffer_list_iterator_add_group (it);
-  buf2 = gst_buffer_new_and_alloc (2);
-  gst_buffer_list_iterator_add (it, buf2);
-  buf3 = gst_buffer_new_and_alloc (3);
-  gst_buffer_list_iterator_add (it, buf3);
-  gst_buffer_list_iterator_free (it);
+  buf1 = gst_buffer_new_allocate (NULL, 1, NULL);
+  gst_buffer_list_add (list, buf1);
+
+  buf2 = gst_buffer_new_allocate (NULL, 2, NULL);
+  buf3 = gst_buffer_new_allocate (NULL, 3, NULL);
+  gst_buffer_list_add (list, gst_buffer_append (buf2, buf3));
 
   /* making it writable with refcount 1 returns the same list */
   wlist = gst_buffer_list_make_writable (list);
   fail_unless (wlist == list);
-  it = gst_buffer_list_iterate (list);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  buf = gst_buffer_list_iterator_next (it);
+  fail_unless_equals_int (gst_buffer_list_length (list), 2);
+  buf = gst_buffer_list_get (list, 0);
   fail_unless (buf == buf1);
   ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 1);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  buf = gst_buffer_list_iterator_next (it);
+  fail_unless_equals_int (gst_buffer_get_size (buf), 1);
+  buf = gst_buffer_list_get (list, 1);
   fail_unless (buf == buf2);
   ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 1);
-  buf = gst_buffer_list_iterator_next (it);
-  fail_unless (buf == buf3);
-  ASSERT_BUFFER_REFCOUNT (buf3, "buf3", 1);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_if (gst_buffer_list_iterator_next_group (it));
-  gst_buffer_list_iterator_free (it);
+  fail_unless_equals_int (gst_buffer_n_memory (buf), 2);
 
   /* making it writable with refcount 2 returns a copy of the list with
    * increased refcount on the buffers in the list */
   gst_buffer_list_ref (list);
-  fail_unless (GST_MINI_OBJECT_REFCOUNT_VALUE (list) == 2);
+  fail_unless_equals_int (GST_MINI_OBJECT_REFCOUNT_VALUE (list), 2);
   wlist = gst_buffer_list_make_writable (list);
-  fail_unless (GST_MINI_OBJECT_REFCOUNT_VALUE (list) == 1);
-  fail_unless (GST_MINI_OBJECT_REFCOUNT_VALUE (wlist) == 1);
+  fail_unless_equals_int (GST_MINI_OBJECT_REFCOUNT_VALUE (list), 1);
+  fail_unless_equals_int (GST_MINI_OBJECT_REFCOUNT_VALUE (wlist), 1);
   fail_unless (wlist != list);
-  it = gst_buffer_list_iterate (wlist);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  buf = gst_buffer_list_iterator_next (it);
+  /* check list */
+  fail_unless_equals_int (gst_buffer_list_length (list), 2);
+  buf = gst_buffer_list_get (list, 0);
   fail_unless (buf == buf1);
   ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 2);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  buf = gst_buffer_list_iterator_next (it);
+  fail_unless_equals_int (gst_buffer_get_size (buf), 1);
+  buf = gst_buffer_list_get (list, 1);
   fail_unless (buf == buf2);
   ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 2);
-  buf = gst_buffer_list_iterator_next (it);
-  fail_unless (buf == buf3);
-  ASSERT_BUFFER_REFCOUNT (buf3, "buf3", 2);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_if (gst_buffer_list_iterator_next_group (it));
-  gst_buffer_list_iterator_free (it);
+  fail_unless_equals_int (gst_buffer_n_memory (buf), 2);
+  /* check wlist */
+  fail_unless_equals_int (gst_buffer_list_length (wlist), 2);
+  buf = gst_buffer_list_get (wlist, 0);
+  fail_unless (buf == buf1);
+  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 2);
+  fail_unless_equals_int (gst_buffer_get_size (buf), 1);
+  buf = gst_buffer_list_get (wlist, 1);
+  fail_unless (buf == buf2);
+  ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 2);
+  fail_unless_equals_int (gst_buffer_n_memory (buf), 2);
   gst_buffer_list_unref (wlist);
+  /* list will be unrefed in cleanup hook */
 }
 
 GST_END_TEST;
 
 GST_START_TEST (test_copy)
 {
-  GstBufferListIterator *it;
   GstBufferList *list_copy;
   GstBuffer *buf1;
   GstBuffer *buf2;
@@ -212,401 +167,115 @@
   GstBuffer *buf;
 
   /* add buffers to the list */
-  it = gst_buffer_list_iterate (list);
-  gst_buffer_list_iterator_add_group (it);
-  buf1 = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, buf1);
-  gst_buffer_list_iterator_add_group (it);
-  buf2 = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, buf2);
-  buf3 = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, buf3);
-  gst_buffer_list_iterator_free (it);
+  buf1 = gst_buffer_new_allocate (NULL, 1, NULL);
+  gst_buffer_list_add (list, buf1);
+
+  buf2 = gst_buffer_new_allocate (NULL, 2, NULL);
+  buf3 = gst_buffer_new_allocate (NULL, 3, NULL);
+  gst_buffer_list_add (list, gst_buffer_append (buf2, buf3));
 
   /* make a copy */
   list_copy = gst_buffer_list_copy (list);
   fail_unless (GST_MINI_OBJECT_REFCOUNT_VALUE (list) == 1);
   fail_unless (GST_MINI_OBJECT_REFCOUNT_VALUE (list_copy) == 1);
   fail_unless (list_copy != list);
-  it = gst_buffer_list_iterate (list_copy);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  buf = gst_buffer_list_iterator_next (it);
+  fail_unless_equals_int (gst_buffer_list_length (list_copy), 2);
+  buf = gst_buffer_list_get (list_copy, 0);
   fail_unless (buf == buf1);
   ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 2);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  buf = gst_buffer_list_iterator_next (it);
+  fail_unless_equals_int (gst_buffer_get_size (buf1), 1);
+  buf = gst_buffer_list_get (list_copy, 1);
   fail_unless (buf == buf2);
   ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 2);
-  buf = gst_buffer_list_iterator_next (it);
-  fail_unless (buf == buf3);
-  ASSERT_BUFFER_REFCOUNT (buf3, "buf3", 2);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_if (gst_buffer_list_iterator_next_group (it));
-  gst_buffer_list_iterator_free (it);
+  fail_unless_equals_int (gst_buffer_get_size (buf2), 5);
+  fail_unless_equals_int (gst_buffer_n_memory (buf2), 2);
+
   gst_buffer_list_unref (list_copy);
 }
 
 GST_END_TEST;
 
-GST_START_TEST (test_steal)
-{
-  GstBufferListIterator *it;
-  GstBuffer *buf1;
-  GstBuffer *buf2;
-  GstBuffer *buf3;
-  GstBuffer *buf;
-
-  /* add buffers to the list */
-  it = gst_buffer_list_iterate (list);
-  gst_buffer_list_iterator_add_group (it);
-  buf1 = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, buf1);
-  gst_buffer_list_iterator_add_group (it);
-  buf2 = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, buf2);
-  buf3 = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, buf3);
-  gst_buffer_list_iterator_free (it);
-
-  /* check some error handling */
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (NULL)));
-  fail_unless (buf == NULL);
-  it = gst_buffer_list_iterate (list);
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (it)));
-  fail_unless (buf == NULL);
-
-  /* steal the first buffer */
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (it)));
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (it)));
-  fail_unless (gst_buffer_list_iterator_next (it) == buf1);
-  buf = gst_buffer_list_iterator_steal (it);
-  fail_unless (buf == buf1);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 1);
-  gst_buffer_unref (buf);
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (it)));
-  fail_unless (buf == NULL);
-
-  /* steal the second buffer */
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (it)));
-  fail_unless (gst_buffer_list_iterator_next (it) == buf2);
-  buf = gst_buffer_list_iterator_steal (it);
-  fail_unless (buf == buf2);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 1);
-  gst_buffer_unref (buf);
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (it)));
-
-  /* steal the third buffer */
-  fail_unless (gst_buffer_list_iterator_next (it) == buf3);
-  buf = gst_buffer_list_iterator_steal (it);
-  fail_unless (buf == buf3);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 1);
-  gst_buffer_unref (buf);
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_steal (it)));
-
-  gst_buffer_list_iterator_free (it);
-
-  /* iterate again when all buffers have been stolen */
-  it = gst_buffer_list_iterate (list);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_if (gst_buffer_list_iterator_next_group (it));
-  gst_buffer_list_iterator_free (it);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_take)
-{
-  GstBufferListIterator *it;
-  GstBuffer *buf1;
-  GstBuffer *buf2;
-  GstBuffer *buf3;
-  GstBuffer *buf;
-
-  /* add buffers to the list */
-  it = gst_buffer_list_iterate (list);
-  gst_buffer_list_iterator_add_group (it);
-  buf1 = gst_buffer_new ();
-  gst_buffer_ref (buf1);
-  gst_buffer_list_iterator_add (it, buf1);
-  gst_buffer_list_iterator_add_group (it);
-  buf2 = gst_buffer_new ();
-  gst_buffer_ref (buf2);
-  gst_buffer_list_iterator_add (it, buf2);
-  buf3 = gst_buffer_new ();
-  gst_buffer_ref (buf3);
-  gst_buffer_list_iterator_add (it, buf3);
-  gst_buffer_list_iterator_free (it);
-
-  /* check some error handling */
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (NULL, NULL));
-  it = gst_buffer_list_iterate (list);
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, NULL));
-  buf = gst_buffer_new ();
-  gst_buffer_ref (buf);
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (NULL, buf));
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 2);
-
-  /* replace the first buffer */
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, buf));
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 2);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, buf));
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 2);
-  fail_unless (gst_buffer_list_iterator_next (it) == buf1);
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, NULL));
-  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 2);
-  gst_buffer_list_iterator_take (it, buf);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 2);
-  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 1);
-  gst_buffer_unref (buf1);
-
-  /* replace the first buffer again, with itself */
-  gst_buffer_ref (buf);
-  gst_buffer_list_iterator_take (it, buf);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 2);
-
-  /* replace the second buffer */
-  gst_buffer_ref (buf);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, buf));
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 3);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 2);
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, buf));
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 3);
-  ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 2);
-  fail_unless (gst_buffer_list_iterator_next (it) == buf2);
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, NULL));
-  ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 2);
-  gst_buffer_list_iterator_take (it, buf);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 3);
-  ASSERT_BUFFER_REFCOUNT (buf2, "buf2", 1);
-  gst_buffer_unref (buf2);
-
-  /* replace the third buffer */
-  gst_buffer_ref (buf);
-  fail_unless (gst_buffer_list_iterator_next (it) == buf3);
-  ASSERT_BUFFER_REFCOUNT (buf3, "buf3", 2);
-  gst_buffer_list_iterator_take (it, buf);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 4);
-  ASSERT_BUFFER_REFCOUNT (buf3, "buf3", 1);
-  gst_buffer_unref (buf3);
-  fail_if (gst_buffer_list_iterator_next_group (it));
-  ASSERT_CRITICAL (gst_buffer_list_iterator_take (it, buf));
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 4);
-  gst_buffer_unref (buf);
-
-  gst_buffer_list_iterator_free (it);
-}
-
-GST_END_TEST;
-
-static gpointer do_data_func_data;
-static gboolean notified;
-
-static GstBuffer *
-do_data_func (GstBuffer * buffer, gpointer data)
-{
-  do_data_func_data = data;
-  fail_if (notified);
-
-  return buffer;
-}
-
-static GstBuffer *
-do_func_null (GstBuffer * buffer)
-{
-  gst_buffer_unref (buffer);
-
-  return NULL;
-}
-
-GST_START_TEST (test_do)
-{
-  GstBufferListIterator *it;
-  GstBuffer *buf1;
-  GstBuffer *buf;
-  gchar *data;
-
-  /* error handling */
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_do (NULL, NULL, NULL)));
-  fail_unless (buf == NULL);
-  fail_unless (buf == NULL);
-  it = gst_buffer_list_iterate (list);
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_do (it, NULL, NULL)));
-  fail_unless (buf == NULL);
-  fail_unless (buf == NULL);
-
-  /* add buffers to the list */
-  gst_buffer_list_iterator_add_group (it);
-  buf1 = gst_buffer_new ();
-  gst_buffer_ref (buf1);
-  gst_buffer_list_iterator_add (it, buf1);
-  gst_buffer_list_iterator_add_group (it);
-  gst_buffer_list_iterator_free (it);
-
-  /* call do-function */
-  it = gst_buffer_list_iterate (list);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  ASSERT_CRITICAL ((buf =
-          gst_buffer_list_iterator_do (it,
-              (GstBufferListDoFunction) gst_buffer_ref, NULL)));
-  fail_unless (buf == NULL);
-  data = (char *) "data";
-  ASSERT_CRITICAL ((buf = gst_buffer_list_iterator_do (it, do_data_func,
-              data)));
-  fail_unless (buf == NULL);
-  fail_unless (do_data_func_data != data);
-  buf = gst_buffer_list_iterator_next (it);
-  fail_unless (buf == buf1);
-  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 2);
-  buf =
-      gst_buffer_list_iterator_do (it, (GstBufferListDoFunction) gst_buffer_ref,
-      NULL);
-  fail_unless (buf == buf1);
-  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 3);
-  gst_buffer_unref (buf);
-  buf = gst_buffer_list_iterator_do (it, do_data_func, data);
-  fail_unless (buf == buf1);
-  fail_unless (do_data_func_data == data);
-
-  /* do-function that return a new buffer replaces the buffer in the list */
-  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 2);
-  buf = gst_buffer_list_iterator_do (it,
-      (GstBufferListDoFunction) gst_mini_object_make_writable, NULL);
-  fail_unless (buf != buf1);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf", 1);
-  ASSERT_BUFFER_REFCOUNT (buf, "buf1", 1);
-  gst_buffer_replace (&buf1, buf);
-
-  /* do-function that return NULL removes the buffer from the list */
-  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 2);
-  fail_unless (gst_buffer_list_iterator_do (it,
-          (GstBufferListDoFunction) do_func_null, NULL) == NULL);
-  ASSERT_BUFFER_REFCOUNT (buf1, "buf1", 1);
-  ASSERT_CRITICAL ((buf =
-          gst_buffer_list_iterator_do (it,
-              (GstBufferListDoFunction) gst_buffer_ref, NULL)));
-  fail_unless (buf == NULL);
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  gst_buffer_list_iterator_free (it);
-  it = gst_buffer_list_iterate (list);
-  fail_unless (gst_buffer_list_iterator_next_group (it));
-  fail_unless (gst_buffer_list_iterator_next (it) == NULL);
-  fail_if (gst_buffer_list_iterator_next_group (it));
-  gst_buffer_list_iterator_free (it);
-  gst_buffer_unref (buf1);
-}
-
-GST_END_TEST;
-
 typedef struct
 {
-  GstBuffer *buf[3][3];
+  GstBuffer *buf[2];
   guint iter;
 } ForeachData;
 
-static GstBufferListItem
-foreach_func1 (GstBuffer ** buffer, guint group, guint idx, ForeachData * data)
+static gboolean
+foreach_func1 (GstBuffer ** buffer, guint idx, ForeachData * data)
 {
   fail_unless (buffer != NULL);
-  fail_unless (*buffer == data->buf[group][idx]);
+  fail_unless (GST_IS_BUFFER (*buffer));
+  fail_unless (*buffer == data->buf[idx]);
 
   data->iter++;
 
-  return GST_BUFFER_LIST_CONTINUE;
+  return TRUE;
 }
 
-static GstBufferListItem
-foreach_func2 (GstBuffer ** buffer, guint group, guint idx, ForeachData * data)
+static gboolean
+foreach_func3 (GstBuffer ** buffer, guint idx, ForeachData * data)
 {
   fail_unless (idx == 0);
   fail_unless (buffer != NULL);
-  fail_unless (*buffer == data->buf[group][idx]);
+  fail_unless (GST_IS_BUFFER (*buffer));
+  fail_unless (*buffer == data->buf[idx]);
 
   data->iter++;
 
-  return GST_BUFFER_LIST_SKIP_GROUP;
+  return FALSE;
 }
 
-static GstBufferListItem
-foreach_func3 (GstBuffer ** buffer, guint group, guint idx, ForeachData * data)
-{
-  fail_unless (group == 0);
-  fail_unless (idx == 0);
-  fail_unless (buffer != NULL);
-  fail_unless (*buffer == data->buf[group][idx]);
-
-  data->iter++;
-
-  return GST_BUFFER_LIST_END;
-}
-
-static GstBufferListItem
-foreach_func4 (GstBuffer ** buffer, guint group, guint idx, ForeachData * data)
+static gboolean
+foreach_func4 (GstBuffer ** buffer, guint idx, ForeachData * data)
 {
   fail_unless (idx == 0);
   fail_unless (buffer != NULL);
-  fail_unless (*buffer == data->buf[group][idx]);
+  fail_unless (GST_IS_BUFFER (*buffer));
+  fail_unless (*buffer == data->buf[data->iter]);
 
-  gst_buffer_unref (*buffer);
-  *buffer = NULL;
+  /* remove first */
+  if (*buffer == data->buf[0]) {
+    gst_buffer_unref (*buffer);
+    *buffer = NULL;
+  }
+
   data->iter++;
 
-  return GST_BUFFER_LIST_SKIP_GROUP;
+  return TRUE;
 }
 
-static GstBufferListItem
-foreach_func5 (GstBuffer ** buffer, guint group, guint idx, ForeachData * data)
+static gboolean
+foreach_func5 (GstBuffer ** buffer, guint idx, ForeachData * data)
 {
   fail_unless (buffer != NULL);
+  fail_unless (GST_IS_BUFFER (*buffer));
 
   data->iter++;
 
-  return GST_BUFFER_LIST_CONTINUE;
+  return TRUE;
 }
 
 GST_START_TEST (test_foreach)
 {
-  GstBufferListIterator *it;
+  GstBuffer *buf2, *buf3;
   ForeachData data;
 
   /* add buffers to the list */
-  it = gst_buffer_list_iterate (list);
-  gst_buffer_list_iterator_add_group (it);
-  data.buf[0][0] = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, data.buf[0][0]);
-  gst_buffer_list_iterator_add_group (it);
-  data.buf[1][0] = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, data.buf[1][0]);
-  data.buf[1][1] = gst_buffer_new ();
-  gst_buffer_list_iterator_add (it, data.buf[1][1]);
-  gst_buffer_list_iterator_free (it);
+  data.buf[0] = gst_buffer_new_allocate (NULL, 1, NULL);
+  gst_buffer_list_add (list, data.buf[0]);
 
-  fail_unless (gst_buffer_list_get (list, 0, 0) == data.buf[0][0]);
-  fail_unless (gst_buffer_list_get (list, 0, 1) == NULL);
-  fail_unless (gst_buffer_list_get (list, 1, 0) == data.buf[1][0]);
-  fail_unless (gst_buffer_list_get (list, 1, 1) == data.buf[1][1]);
-  fail_unless (gst_buffer_list_get (list, 1, 2) == NULL);
-  fail_unless (gst_buffer_list_get (list, 2, 0) == NULL);
-  fail_unless (gst_buffer_list_get (list, 2, 1) == NULL);
-  fail_unless (gst_buffer_list_get (list, 3, 3) == NULL);
+  buf2 = gst_buffer_new_allocate (NULL, 2, NULL);
+  buf3 = gst_buffer_new_allocate (NULL, 3, NULL);
+  data.buf[1] = gst_buffer_append (buf2, buf3);
+  gst_buffer_list_add (list, data.buf[1]);
+
+  fail_unless (gst_buffer_list_get (list, 0) == data.buf[0]);
+  fail_unless (gst_buffer_list_get (list, 1) == data.buf[1]);
 
   /* iterate everything */
   data.iter = 0;
   gst_buffer_list_foreach (list, (GstBufferListFunc) foreach_func1, &data);
-  fail_unless (data.iter == 3);
-
-  /* iterate only the first buffer of groups */
-  data.iter = 0;
-  gst_buffer_list_foreach (list, (GstBufferListFunc) foreach_func2, &data);
   fail_unless (data.iter == 2);
 
   /* iterate only the first buffer */
@@ -614,17 +283,13 @@
   gst_buffer_list_foreach (list, (GstBufferListFunc) foreach_func3, &data);
   fail_unless (data.iter == 1);
 
-  /* remove the first buffer of each group */
+  /* remove the first buffer */
   data.iter = 0;
   gst_buffer_list_foreach (list, (GstBufferListFunc) foreach_func4, &data);
   fail_unless (data.iter == 2);
 
-  fail_unless (gst_buffer_list_get (list, 0, 0) == NULL);
-  fail_unless (gst_buffer_list_get (list, 0, 1) == NULL);
-  fail_unless (gst_buffer_list_get (list, 1, 0) == data.buf[1][1]);
-  fail_unless (gst_buffer_list_get (list, 1, 1) == NULL);
-  fail_unless (gst_buffer_list_get (list, 1, 2) == NULL);
-  fail_unless (gst_buffer_list_get (list, 2, 0) == NULL);
+  fail_unless (gst_buffer_list_get (list, 0) == data.buf[1]);
+  fail_unless_equals_int (gst_buffer_list_length (list), 1);
 
   /* iterate everything, just one more buffer now */
   data.iter = 0;
@@ -634,43 +299,84 @@
 
 GST_END_TEST;
 
-GST_START_TEST (test_list)
+/* make sure everything is fine if we exceed the pre-allocated size */
+GST_START_TEST (test_expand_and_remove)
 {
-  GstBufferListIterator *it;
-  GList *l = NULL;
-  gint i;
+  GPtrArray *arr;
+  GstBuffer *buf;
+  guint i, idx, num, counter = 0;
 
-  for (i = 0; i < 10; i++) {
-    gchar name[10];
-    g_snprintf (name, 10, "%d", i);
-    l = g_list_append (l, buffer_from_string (name));
+  gst_buffer_list_unref (list);
+
+  arr = g_ptr_array_new ();
+
+  list = gst_buffer_list_new_sized (1);
+
+  for (i = 0; i < 250; ++i) {
+    num = ++counter;
+    buf = gst_buffer_new_allocate (NULL, num, NULL);
+    gst_buffer_list_add (list, buf);
+    g_ptr_array_add (arr, GINT_TO_POINTER (num));
   }
 
-  /* add buffers to the list */
-  it = gst_buffer_list_iterate (list);
-  gst_buffer_list_iterator_add_group (it);
-  gst_buffer_list_iterator_add_list (it, l);
-
-  /* add a buffer */
-  gst_buffer_list_iterator_add (it, buffer_from_string ("10"));
-
-  /* add another list */
-  l = g_list_append (NULL, buffer_from_string ("11"));
-  gst_buffer_list_iterator_add_list (it, l);
-
-  for (i = 0; i < 12; i++) {
-    GstBuffer *buf;
-    gchar name[10];
-
-    buf = gst_buffer_list_get (list, 0, i);
-    g_snprintf (name, 10, "%d", i);
-    check_buffer (buf, 0, name);
+  for (i = 0; i < 250; ++i) {
+    num = ++counter;
+    buf = gst_buffer_new_allocate (NULL, num, NULL);
+    idx = g_random_int_range (0, gst_buffer_list_length (list));
+    gst_buffer_list_insert (list, idx, buf);
+    g_ptr_array_insert (arr, idx, GINT_TO_POINTER (num));
   }
-  gst_buffer_list_iterator_free (it);
+
+  /* make sure the list looks like it should */
+  fail_unless_equals_int (arr->len, gst_buffer_list_length (list));
+  for (i = 0; i < arr->len; ++i) {
+    buf = gst_buffer_list_get (list, i);
+    num = gst_buffer_get_size (buf);
+    fail_unless_equals_int (num, GPOINTER_TO_INT (g_ptr_array_index (arr, i)));
+  }
+
+  for (i = 0; i < 44; ++i) {
+    num = g_random_int_range (1, 5);
+    idx = g_random_int_range (0, gst_buffer_list_length (list) - num);
+    gst_buffer_list_remove (list, idx, num);
+    g_ptr_array_remove_range (arr, idx, num);
+  }
+
+  /* make sure the list still looks like it should */
+  fail_unless_equals_int (arr->len, gst_buffer_list_length (list));
+  for (i = 0; i < arr->len; ++i) {
+    buf = gst_buffer_list_get (list, i);
+    num = gst_buffer_get_size (buf);
+    fail_unless_equals_int (num, GPOINTER_TO_INT (g_ptr_array_index (arr, i)));
+  }
+
+  for (i = 0; i < 500; ++i) {
+    num = ++counter;
+    buf = gst_buffer_new_allocate (NULL, num, NULL);
+    gst_buffer_list_add (list, buf);
+    g_ptr_array_add (arr, GINT_TO_POINTER (num));
+  }
+
+  for (i = 0; i < 500; ++i) {
+    num = ++counter;
+    buf = gst_buffer_new_allocate (NULL, num, NULL);
+    idx = g_random_int_range (0, gst_buffer_list_length (list));
+    gst_buffer_list_insert (list, idx, buf);
+    g_ptr_array_insert (arr, idx, GINT_TO_POINTER (num));
+  }
+
+  /* make sure the list still looks like it should */
+  fail_unless_equals_int (arr->len, gst_buffer_list_length (list));
+  for (i = 0; i < arr->len; ++i) {
+    buf = gst_buffer_list_get (list, i);
+    num = gst_buffer_get_size (buf);
+    fail_unless_equals_int (num, GPOINTER_TO_INT (g_ptr_array_index (arr, i)));
+  }
+
+  g_ptr_array_unref (arr);
 }
 
 GST_END_TEST;
-#endif
 
 static Suite *
 gst_buffer_list_suite (void)
@@ -682,15 +388,10 @@
   tcase_add_checked_fixture (tc_chain, setup, cleanup);
   tcase_add_test (tc_chain, test_add_and_iterate);
   tcase_add_test (tc_chain, test_remove);
-#if 0
   tcase_add_test (tc_chain, test_make_writable);
   tcase_add_test (tc_chain, test_copy);
-  tcase_add_test (tc_chain, test_steal);
-  tcase_add_test (tc_chain, test_take);
-  tcase_add_test (tc_chain, test_do);
   tcase_add_test (tc_chain, test_foreach);
-  tcase_add_test (tc_chain, test_list);
-#endif
+  tcase_add_test (tc_chain, test_expand_and_remove);
 
   return s;
 }
diff --git a/tests/check/gst/gstcaps.c b/tests/check/gst/gstcaps.c
index b1a1352..e529406 100644
--- a/tests/check/gst/gstcaps.c
+++ b/tests/check/gst/gstcaps.c
@@ -1129,6 +1129,13 @@
 
   gst_caps_unref (c2);
   gst_caps_unref (c1);
+
+  c1 = gst_caps_from_string ("video/x-raw");
+  f1 = gst_caps_get_features (c1, 0);
+  f2 = gst_caps_features_new ("memory:dmabuf", NULL);
+  gst_caps_set_features (c1, 0, f2);
+
+  gst_caps_unref (c1);
 }
 
 GST_END_TEST;
diff --git a/tests/check/gst/gstdevice.c b/tests/check/gst/gstdevice.c
new file mode 100644
index 0000000..c59d43b
--- /dev/null
+++ b/tests/check/gst/gstdevice.c
@@ -0,0 +1,561 @@
+/* GStreamer
+ * Copyright (C) 2014 Collabora
+ *   Author: Olivier Crete <olivier.crete@collabora.com>
+ *
+ * gstdevice.c: Unit test for GstDevice
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <gst/gst.h>
+
+typedef struct _GstTestDevice
+{
+  GstDevice parent;
+} GstTestDevice;
+
+typedef struct _GstTestDeviceClass
+{
+  GstDeviceClass parent_class;
+} GstTestDeviceClass;
+
+GType gst_test_device_get_type (void);
+
+
+G_DEFINE_TYPE (GstTestDevice, gst_test_device, GST_TYPE_DEVICE)
+
+     static GstElement *gst_test_device_create_element (GstDevice * device,
+    const gchar * name)
+{
+  return gst_bin_new (name);
+}
+
+static gboolean
+gst_test_device_reconfigure_element (GstDevice * device, GstElement * element)
+{
+  if (!strcmp (GST_ELEMENT_NAME (element), "reconfigurable"))
+    return TRUE;
+  else
+    return FALSE;
+}
+
+static void
+gst_test_device_class_init (GstTestDeviceClass * klass)
+{
+  GstDeviceClass *dclass = GST_DEVICE_CLASS (klass);
+
+  dclass->create_element = gst_test_device_create_element;
+  dclass->reconfigure_element = gst_test_device_reconfigure_element;
+}
+
+static void
+gst_test_device_init (GstTestDevice * self)
+{
+}
+
+#define DEVICE_CLASS "Test0/Test1/Test2/Test3/Test4/TestDev"
+#define DISPLAY_NAME "Test device"
+
+static GstDevice *
+test_device_new (void)
+{
+  GstCaps *caps = gst_caps_new_empty_simple ("video/test");
+  GstDevice *device = g_object_new (gst_test_device_get_type (), "caps", caps,
+      "display-name", DISPLAY_NAME, "device-class", DEVICE_CLASS, NULL);
+
+  gst_caps_unref (caps);
+
+  return device;
+}
+
+GST_START_TEST (test_device)
+{
+  GstDevice *device = test_device_new ();
+  GstCaps *caps;
+  gchar *display_name;
+  gchar *device_class;
+  GstCaps *compare_caps = gst_caps_new_empty_simple ("video/test");
+  GstElement *element;
+
+  caps = gst_device_get_caps (device);
+  display_name = gst_device_get_display_name (device);
+  device_class = gst_device_get_device_class (device);
+
+  fail_unless_equals_string (DISPLAY_NAME, display_name);
+  fail_unless_equals_string (DEVICE_CLASS, device_class);
+  gst_check_caps_equal (caps, compare_caps);
+
+  g_free (display_name);
+  g_free (device_class);
+  gst_caps_unref (caps);
+
+  fail_unless (gst_device_has_classes (device, "Test1"));
+  fail_unless (gst_device_has_classes (device, "Test2/Test1"));
+
+  element = gst_device_create_element (device, "reconfigurable");
+  fail_unless (GST_IS_BIN (element));
+
+  fail_unless (gst_device_reconfigure_element (device, element));
+
+  gst_element_set_name (element, "no-no");
+
+  fail_unless (!gst_device_reconfigure_element (device, element));
+
+  gst_object_unref (element);
+
+  gst_caps_unref (compare_caps);
+  gst_object_unref (device);
+}
+
+GST_END_TEST;
+
+
+typedef struct _GstTestDeviceProvider
+{
+  GstDeviceProvider parent;
+
+} GstTestDeviceProvider;
+
+typedef struct _GstTestDeviceProviderClass
+{
+  GstDeviceProviderClass parent_class;
+} GstTestDeviceProviderClass;
+
+GType gst_test_device_provider_get_type (void);
+
+
+G_DEFINE_TYPE (GstTestDeviceProvider, gst_test_device_provider,
+    GST_TYPE_DEVICE_PROVIDER)
+
+
+     static GList *devices = NULL;
+
+     static GList *gst_test_device_provider_probe (GstDeviceProvider * provider)
+{
+  GList *devs;
+
+  devs = g_list_copy (devices);
+  g_list_foreach (devs, (GFunc) gst_object_ref, NULL);
+
+  return devs;
+}
+
+static void
+gst_test_device_provider_class_init (GstTestDeviceProviderClass * klass)
+{
+  GstDeviceProviderClass *dpclass = GST_DEVICE_PROVIDER_CLASS (klass);
+
+  dpclass->probe = gst_test_device_provider_probe;
+
+  gst_device_provider_class_set_static_metadata (dpclass,
+      "Test Device Provider", "Test0/Test1/Test2/Test3/TestProvider",
+      "List but does NOT monitor test devices",
+      "Olivier Crete <olivier.crete@collabora.com>");
+}
+
+static void
+gst_test_device_provider_init (GstTestDeviceProvider * self)
+{
+}
+
+static void
+register_test_device_provider (void)
+{
+  gst_device_provider_register (NULL, "testdeviceprovider", 1,
+      gst_test_device_provider_get_type ());
+}
+
+GST_START_TEST (test_device_provider_factory)
+{
+  GstDeviceProvider *dp, *dp2;
+  GList *factories;
+  GstDeviceProviderFactory *f;
+
+  register_test_device_provider ();
+
+  factories = gst_device_provider_factory_list_get_device_providers (1);
+
+  fail_unless (factories != NULL);
+
+  f = gst_device_provider_factory_find ("testdeviceprovider");
+  fail_unless (f != NULL);
+
+  gst_plugin_feature_list_free (factories);
+
+  fail_unless (gst_device_provider_factory_has_classes (f, "Test2"));
+  fail_unless (gst_device_provider_factory_has_classes (f, "Test2/Test0"));
+  fail_unless (!gst_device_provider_factory_has_classes (f,
+          "Test2/TestN/Test0"));
+  fail_unless (!gst_device_provider_factory_has_classes (f, "TestN"));
+  fail_unless (!gst_device_provider_factory_has_classes (f, "Test"));
+
+  dp = gst_device_provider_factory_get (f);
+
+  gst_object_unref (f);
+
+  dp2 = gst_device_provider_factory_get_by_name ("testdeviceprovider");
+
+  fail_unless_equals_pointer (dp, dp2);
+
+  gst_object_unref (dp);
+  gst_object_unref (dp2);
+
+  dp2 = gst_device_provider_factory_get_by_name ("testdeviceprovider");
+  fail_unless_equals_pointer (dp, dp2);
+  gst_object_unref (dp2);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_device_provider)
+{
+  GstDeviceProvider *dp;
+  GList *devs;
+  GstBus *bus;
+
+  register_test_device_provider ();
+
+  dp = gst_device_provider_factory_get_by_name ("testdeviceprovider");
+
+  fail_unless (gst_device_provider_get_devices (dp) == NULL);
+
+  devices = g_list_append (NULL, test_device_new ());
+
+  devs = gst_device_provider_get_devices (dp);
+  fail_unless (g_list_length (devs) == 1);
+  fail_unless_equals_pointer (devs->data, devices->data);
+  g_list_free_full (devs, (GDestroyNotify) gst_object_unref);
+
+  fail_if (gst_device_provider_can_monitor (dp));
+  fail_if (gst_device_provider_start (dp));
+
+  bus = gst_device_provider_get_bus (dp);
+  fail_unless (GST_IS_BUS (bus));
+  gst_object_unref (bus);
+
+  g_list_free_full (devices, (GDestroyNotify) gst_object_unref);
+  gst_object_unref (dp);
+}
+
+GST_END_TEST;
+
+typedef struct _GstTestDeviceProviderMonitor
+{
+  GstDeviceProvider parent;
+
+} GstTestDeviceProviderMonitor;
+
+typedef struct _GstTestDeviceProviderMonitorClass
+{
+  GstDeviceProviderClass parent_class;
+} GstTestDeviceProviderMonitorClass;
+
+GType gst_test_device_provider_monitor_get_type (void);
+
+
+G_DEFINE_TYPE (GstTestDeviceProviderMonitor, gst_test_device_provider_monitor,
+    GST_TYPE_DEVICE_PROVIDER)
+
+
+     static gboolean
+         gst_test_device_provider_monitor_start (GstDeviceProvider * monitor)
+{
+  return TRUE;
+}
+
+static void
+gst_test_device_provider_monitor_class_init (GstTestDeviceProviderMonitorClass *
+    klass)
+{
+  GstDeviceProviderClass *dpclass = GST_DEVICE_PROVIDER_CLASS (klass);
+
+  dpclass->probe = gst_test_device_provider_probe;
+  dpclass->start = gst_test_device_provider_monitor_start;
+
+  gst_device_provider_class_set_static_metadata (dpclass,
+      "Test Device Provider Monitor",
+      "Test0/Test1/Test2/Test4/TestProviderMonitor",
+      "List and monitors Test devices",
+      "Olivier Crete <olivier.crete@collabora.com>");
+}
+
+static void
+gst_test_device_provider_monitor_init (GstTestDeviceProviderMonitor * self)
+{
+}
+
+static void
+register_test_device_provider_monitor (void)
+{
+  gst_device_provider_register (NULL, "testdeviceprovidermonitor", 2,
+      gst_test_device_provider_monitor_get_type ());
+}
+
+
+GST_START_TEST (test_device_provider_monitor)
+{
+  GstDeviceProvider *dp;
+  GList *devs;
+  GstBus *bus;
+  GstDevice *mydev;
+  GstDevice *dev;
+  GstMessage *msg;
+
+  register_test_device_provider_monitor ();
+
+  devices = g_list_append (NULL, test_device_new ());
+
+  dp = gst_device_provider_factory_get_by_name ("testdeviceprovidermonitor");
+
+  bus = gst_device_provider_get_bus (dp);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg == NULL);
+
+  fail_unless (gst_device_provider_can_monitor (dp));
+  fail_unless (gst_device_provider_start (dp));
+
+  fail_unless (gst_device_provider_get_devices (dp) == NULL);
+
+  devs = gst_device_provider_get_devices (dp);
+  fail_unless (devs == NULL);
+
+  mydev = test_device_new ();
+  fail_unless (g_object_is_floating (mydev));
+  ASSERT_OBJECT_REFCOUNT (mydev, "dev", 1);
+
+  gst_device_provider_device_add (dp, mydev);
+  fail_unless (!g_object_is_floating (mydev));
+  ASSERT_OBJECT_REFCOUNT (mydev, "dev", 2);
+
+  devs = gst_device_provider_get_devices (dp);
+  ASSERT_OBJECT_REFCOUNT (mydev, "dev", 3);
+
+  fail_unless_equals_int (g_list_length (devs), 1);
+  fail_unless_equals_pointer (devs->data, mydev);
+  g_list_free_full (devs, (GDestroyNotify) gst_object_unref);
+
+  ASSERT_OBJECT_REFCOUNT (mydev, "dev", 2);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg != NULL);
+
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_DEVICE_ADDED);
+
+  gst_message_parse_device_added (msg, &dev);
+  fail_unless_equals_pointer (dev, mydev);
+  gst_object_unref (dev);
+  gst_message_unref (msg);
+
+  ASSERT_OBJECT_REFCOUNT (mydev, "dev", 1);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg == NULL);
+
+  gst_device_provider_device_remove (dp, mydev);
+  devs = gst_device_provider_get_devices (dp);
+  fail_unless (devs == NULL);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg != NULL);
+
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_DEVICE_REMOVED);
+
+  gst_message_parse_device_removed (msg, &dev);
+  fail_unless_equals_pointer (dev, mydev);
+  ASSERT_OBJECT_REFCOUNT (mydev, "dev", 2);
+  gst_object_unref (dev);
+  gst_message_unref (msg);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg == NULL);
+
+  gst_device_provider_stop (dp);
+  gst_object_unref (bus);
+  ASSERT_OBJECT_REFCOUNT (dp, "monitor", 2);
+  gst_object_unref (dp);
+
+  /* Is singleton, so system keeps a ref */
+  ASSERT_OBJECT_REFCOUNT (dp, "monitor", 1);
+
+  g_list_free_full (devices, (GDestroyNotify) gst_object_unref);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_device_monitor)
+{
+  GstDeviceProvider *dp, *dp2;
+  GstDeviceMonitor *mon;
+  GList *devs;
+  guint id, id2;
+  GstDevice *mydev;
+  GstMessage *msg;
+  GstBus *bus;
+  GstDevice *dev;
+
+  register_test_device_provider ();
+  register_test_device_provider_monitor ();
+
+  dp = gst_device_provider_factory_get_by_name ("testdeviceprovider");
+  dp2 = gst_device_provider_factory_get_by_name ("testdeviceprovidermonitor");
+
+  mon = gst_device_monitor_new ();
+
+  devices = g_list_append (NULL, test_device_new ());
+
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (devs == NULL);
+
+  id = gst_device_monitor_add_filter (mon, "TestProvider", NULL);
+  fail_unless (id > 0);
+
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (devs == NULL);
+
+  fail_unless (gst_device_monitor_add_filter (mon, "TestDevice", NULL) == 0);
+  ASSERT_CRITICAL (gst_device_monitor_remove_filter (mon, 0));
+
+  fail_unless (gst_device_monitor_remove_filter (mon, id));
+
+  id = gst_device_monitor_add_filter (mon, "Test3", NULL);
+  fail_unless (id > 0);
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (g_list_length (devs) == 1);
+  fail_unless_equals_pointer (devs->data, devices->data);
+  g_list_free_full (devs, (GDestroyNotify) gst_object_unref);
+
+  id2 = gst_device_monitor_add_filter (mon, "Test1", NULL);
+  fail_unless (id2 > 0);
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (g_list_length (devs) == 2);
+  fail_unless_equals_pointer (devs->data, devices->data);
+  fail_unless_equals_pointer (devs->next->data, devices->data);
+  g_list_free_full (devs, (GDestroyNotify) gst_object_unref);
+
+  fail_unless (gst_device_monitor_remove_filter (mon, id));
+
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (g_list_length (devs) == 2);
+  fail_unless_equals_pointer (devs->data, devices->data);
+  fail_unless_equals_pointer (devs->next->data, devices->data);
+  g_list_free_full (devs, (GDestroyNotify) gst_object_unref);
+
+
+  fail_unless (gst_device_monitor_start (mon));
+
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (g_list_length (devs) == 1);
+  fail_unless_equals_pointer (devs->data, devices->data);
+  g_list_free_full (devs, (GDestroyNotify) gst_object_unref);
+
+  gst_device_monitor_stop (mon);
+
+  fail_unless (gst_device_monitor_remove_filter (mon, id2));
+
+  id = gst_device_monitor_add_filter (mon, "Test4", NULL);
+  fail_unless (id > 0);
+
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (g_list_length (devs) == 1);
+  fail_unless_equals_pointer (devs->data, devices->data);
+  g_list_free_full (devs, (GDestroyNotify) gst_object_unref);
+
+  fail_unless (gst_device_monitor_start (mon));
+
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (devs == NULL);
+
+  bus = gst_device_monitor_get_bus (mon);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg == NULL);
+
+  mydev = test_device_new ();
+  gst_device_provider_device_add (dp2, mydev);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg != NULL);
+
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_DEVICE_ADDED);
+
+  gst_message_parse_device_added (msg, &dev);
+  fail_unless_equals_pointer (dev, mydev);
+  gst_object_unref (dev);
+  gst_message_unref (msg);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg == NULL);
+
+  gst_device_provider_device_remove (dp2, mydev);
+  devs = gst_device_monitor_get_devices (mon);
+  fail_unless (devs == NULL);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg != NULL);
+
+  fail_unless (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_DEVICE_REMOVED);
+
+  gst_message_parse_device_removed (msg, &dev);
+  fail_unless_equals_pointer (dev, mydev);
+  gst_object_unref (dev);
+  gst_message_unref (msg);
+
+  msg = gst_bus_pop (bus);
+  fail_unless (msg == NULL);
+
+
+  gst_device_monitor_stop (mon);
+
+  gst_object_unref (bus);
+  gst_object_unref (mon);
+
+  gst_object_unref (dp);
+  gst_object_unref (dp2);
+  g_list_free_full (devices, (GDestroyNotify) gst_object_unref);
+
+  /* should work fine without any filters */
+  mon = gst_device_monitor_new ();
+  fail_unless (gst_device_monitor_start (mon));
+  gst_device_monitor_stop (mon);
+  gst_object_unref (mon);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+gst_device_suite (void)
+{
+  Suite *s = suite_create ("GstDevice");
+  TCase *tc_chain = tcase_create ("device tests");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_device);
+  tcase_add_test (tc_chain, test_device_provider_factory);
+  tcase_add_test (tc_chain, test_device_provider);
+  tcase_add_test (tc_chain, test_device_provider_monitor);
+  tcase_add_test (tc_chain, test_device_monitor);
+
+  return s;
+}
+
+GST_CHECK_MAIN (gst_device);
diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c
index 543bd1a..992f4ff 100644
--- a/tools/gst-inspect.c
+++ b/tools/gst-inspect.c
@@ -1139,7 +1139,7 @@
   gint num_features = 0;
   gint num_elements = 0;
   gint num_typefinders = 0;
-  gint num_devmonitors = 0;
+  gint num_devproviders = 0;
   gint num_other = 0;
 
   origlist = features =
@@ -1180,14 +1180,14 @@
             gst_plugin_feature_get_name (feature));
 
       num_typefinders++;
-    } else if (GST_IS_DEVICE_MONITOR_FACTORY (feature)) {
-      GstDeviceMonitorFactory *factory;
+    } else if (GST_IS_DEVICE_PROVIDER_FACTORY (feature)) {
+      GstDeviceProviderFactory *factory;
 
-      factory = GST_DEVICE_MONITOR_FACTORY (feature);
+      factory = GST_DEVICE_PROVIDER_FACTORY (feature);
       n_print ("  %s: %s\n", GST_OBJECT_NAME (factory),
-          gst_device_monitor_factory_get_metadata (factory,
+          gst_device_provider_factory_get_metadata (factory,
               GST_ELEMENT_METADATA_LONGNAME));
-      num_devmonitors++;
+      num_devproviders++;
     } else if (feature) {
       n_print ("  %s (%s)\n", gst_object_get_name (GST_OBJECT (feature)),
           g_type_name (G_OBJECT_TYPE (feature)));
@@ -1205,8 +1205,8 @@
     n_print ("  +-- %d elements\n", num_elements);
   if (num_typefinders > 0)
     n_print ("  +-- %d typefinders\n", num_typefinders);
-  if (num_devmonitors > 0)
-    n_print ("  +-- %d device monitors\n", num_devmonitors);
+  if (num_devproviders > 0)
+    n_print ("  +-- %d device providers\n", num_devproviders);
   if (num_other > 0)
     n_print ("  +-- %d other objects\n", num_other);
 
diff --git a/win32/common/config.h b/win32/common/config.h
index c3e90cd..7746853 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -62,7 +62,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2014-06-22"
+#define GST_PACKAGE_RELEASE_DATETIME "2014-06-28"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -354,7 +354,7 @@
 #define PACKAGE_NAME "GStreamer"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer 1.3.3"
+#define PACKAGE_STRING "GStreamer 1.3.90"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gstreamer"
@@ -363,7 +363,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.3.3"
+#define PACKAGE_VERSION "1.3.90"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -401,7 +401,7 @@
 #undef USE_POISONING
 
 /* Version number of package */
-#define VERSION "1.3.3"
+#define VERSION "1.3.90"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/win32/common/gstversion.h b/win32/common/gstversion.h
index e04dc96..26cc9bb 100644
--- a/win32/common/gstversion.h
+++ b/win32/common/gstversion.h
@@ -57,7 +57,7 @@
  *
  * The micro version of GStreamer at compile time:
  */
-#define GST_VERSION_MICRO (3)
+#define GST_VERSION_MICRO (90)
 /**
  * GST_VERSION_NANO:
  *
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index fc74f2f..2fda6b6 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -415,31 +415,39 @@
 	gst_device_get_type
 	gst_device_has_classes
 	gst_device_has_classesv
-	gst_device_monitor_can_monitor
-	gst_device_monitor_class_add_metadata
-	gst_device_monitor_class_add_static_metadata
-	gst_device_monitor_class_get_metadata
-	gst_device_monitor_class_set_metadata
-	gst_device_monitor_class_set_static_metadata
-	gst_device_monitor_device_add
-	gst_device_monitor_device_remove
-	gst_device_monitor_factory_find
-	gst_device_monitor_factory_get
-	gst_device_monitor_factory_get_by_name
-	gst_device_monitor_factory_get_device_monitor_type
-	gst_device_monitor_factory_get_metadata
-	gst_device_monitor_factory_get_metadata_keys
-	gst_device_monitor_factory_get_type
-	gst_device_monitor_factory_has_classes
-	gst_device_monitor_factory_has_classesv
-	gst_device_monitor_factory_list_get_device_monitors
+	gst_device_monitor_add_filter
 	gst_device_monitor_get_bus
 	gst_device_monitor_get_devices
-	gst_device_monitor_get_factory
 	gst_device_monitor_get_type
-	gst_device_monitor_register
+	gst_device_monitor_new
+	gst_device_monitor_remove_filter
 	gst_device_monitor_start
 	gst_device_monitor_stop
+	gst_device_provider_can_monitor
+	gst_device_provider_class_add_metadata
+	gst_device_provider_class_add_static_metadata
+	gst_device_provider_class_get_metadata
+	gst_device_provider_class_set_metadata
+	gst_device_provider_class_set_static_metadata
+	gst_device_provider_device_add
+	gst_device_provider_device_remove
+	gst_device_provider_factory_find
+	gst_device_provider_factory_get
+	gst_device_provider_factory_get_by_name
+	gst_device_provider_factory_get_device_provider_type
+	gst_device_provider_factory_get_metadata
+	gst_device_provider_factory_get_metadata_keys
+	gst_device_provider_factory_get_type
+	gst_device_provider_factory_has_classes
+	gst_device_provider_factory_has_classesv
+	gst_device_provider_factory_list_get_device_providers
+	gst_device_provider_get_bus
+	gst_device_provider_get_devices
+	gst_device_provider_get_factory
+	gst_device_provider_get_type
+	gst_device_provider_register
+	gst_device_provider_start
+	gst_device_provider_stop
 	gst_device_reconfigure_element
 	gst_double_range_get_type
 	gst_element_abort_state
@@ -605,16 +613,6 @@
 	gst_ghost_pad_new_no_target
 	gst_ghost_pad_new_no_target_from_template
 	gst_ghost_pad_set_target
-	gst_global_device_monitor_get_bus
-	gst_global_device_monitor_get_caps_filter
-	gst_global_device_monitor_get_classes_filter
-	gst_global_device_monitor_get_devices
-	gst_global_device_monitor_get_type
-	gst_global_device_monitor_new
-	gst_global_device_monitor_set_caps_filter
-	gst_global_device_monitor_set_classes_filter
-	gst_global_device_monitor_start
-	gst_global_device_monitor_stop
 	gst_init
 	gst_init_check
 	gst_init_get_option_group