Merge branch 'master' into 0.11

Conflicts:
	configure.ac
	docs/gst/gstreamer-sections.txt
	gst/gstbin.c
	gst/gstelement.c
	gst/gstelement.h
	gst/gstghostpad.c
	gst/gstminiobject.c
	gst/gstminiobject.h
	libs/gst/base/gstbasesrc.c
	libs/gst/base/gstbasetransform.c
	plugins/elements/gstinputselector.c
	tests/check/gst/gstminiobject.c
diff --git a/ChangeLog b/ChangeLog
index 23fa97e..e9e08dc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,3289 @@
-=== release 0.10.32 ===
+=== release 0.10.34 ===
 
-2011-01-21  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+2011-05-14  Tim-Philipp Müller <tim.muller@collabora.co.uk>
 
 	* configure.ac:
-	  releasing 0.10.32, "Take Me to the Bonus Level"
+	  releasing 0.10.34, "Misfits"
+
+2011-05-04 15:31:56 +0300  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* libs/gst/base/gstbasesrc.c:
+	  basesrc: do not set first buffer timestamp to 0 for live sources
+	  Doing so avoids a large timestamp gap between first and second buffer
+	  for live sources which take time to start up.
+	  The first buffer now has a "live" timestamp based on the running time,
+	  as other buffers do.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=649369
+
+2011-05-10 11:11:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: ensure thread safety when adding a pad
+	  This seems to be a regression, and was causing crashes.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=649878
+
+=== release 0.10.33 ===
+
+2011-05-10 08:55:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* docs/plugins/inspect/plugin-coreindexers.xml:
+	* gstreamer.doap:
+	* 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/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.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:
+	* win32/common/config.h:
+	* win32/common/gstversion.h:
+	  Release 0.10.33
+	  Highlights:
+	  - new parser base class: GstBaseParse
+	  - new core element: funnel
+	  - OSX multi-arch fixes
+	  - new QoS type for QoS events
+	  - new progress message API to notify applications of asynchronous operations
+	  - countless other fixes and improvements
+
+2011-05-06 23:40:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: don't post loads of empty taglists
+	  Only post bitrate updates if there's something to post, don't
+	  post empty taglists if nothing changed.
+
+2011-05-06 11:35:36 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstinfo.h:
+	  info: avoid redefinition of symbols when debugging is off
+	  The refactoring of gst_debug_add_log_function() now causes build failure when
+	  debug-logging is turned off. Just move it to the conditional part of the header.
+
+2011-05-04 15:29:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstminiobject.c:
+	  tests: fix compiler warning in new miniobject test
+	  gst/gstminiobject.c: In function ‘test_dup_null_mini_object’:
+	  gst/gstminiobject.c:459:7: warning: assignment from incompatible pointer type
+
+2011-05-02 11:30:06 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/gstminiobject.c:
+	* tests/check/gst/gstminiobject.c:
+	  miniobject: Fix dup_mini_object function to handle NULL gvalues
+	  g_value_dup_object handles gvalues that contain NULL pointers,
+	  gst_value_dup_mini_object should do the same.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=649195
+
+2011-05-03 13:55:43 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/base/gstbaseparse.c:
+	  docs: it its %TRUE (constant)
+	  As spotted by Tim.
+
+2011-05-02 16:22:56 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstelementfactory.c:
+	  docs: fix copy'n'paste doc header mistake
+
+2011-05-02 16:20:24 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstelement.h:
+	* gst/gstpluginfeature.h:
+	  docs: add two trivial doc blobs
+
+2011-05-02 16:03:29 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/base/gstbaseparse.c:
+	  docs: add missing parameter docs
+
+2011-05-02 16:00:52 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/dataprotocol/dataprotocol.h:
+	  docs: add docs for GstDPPacketizer
+
+2011-05-02 15:52:58 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstcaps.h:
+	  docs: improve the syntax for the capsintersectmode docs
+
+2011-05-02 15:48:01 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstelement.c:
+	  docs: fixup broken xref
+
+2011-05-02 15:46:59 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/gst/gstreamer-sections.txt:
+	* docs/libs/gstreamer-libs-sections.txt:
+	  docs: add new api to -section.txt
+
+2011-05-02 15:35:52 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstatomicqueue.h:
+	  docs: fix gtk-doc syntax
+
+2011-05-02 15:30:13 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* plugins/elements/gstfunnel.c:
+	  docs: don't duplicate info that we take from element-details
+
+2011-04-28 15:37:02 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/gst/gstreamer-sections.txt:
+	  docs: remove non existing symbol
+
+2011-04-28 15:05:28 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstbufferlist.c:
+	* gst/gstsystemclock.h:
+	  docs: we don't need to document private members in opaque structs
+
+2011-04-30 16:55:36 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* docs/plugins/inspect/plugin-coreindexers.xml:
+	* docs/plugins/inspect/plugin-staticelements.xml:
+	* po/de.po:
+	* po/fr.po:
+	* win32/common/config.h:
+	* win32/common/gstversion.h:
+	  0.10.32.4 pre-release
+
+2011-04-29 23:44:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstpluginfeature.h:
+	  pluginfeature: include plugin.h in header where we use a GstPlugin pointer
+	  Should fix issue with gstreamermm build where <gst/gstindex.h> is included
+	  directly instead of gst/gst.h.
+
+2011-04-27 11:49:11 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* docs/plugins/inspect/plugin-coreindexers.xml:
+	* po/bg.po:
+	* po/nl.po:
+	* po/pl.po:
+	* po/ru.po:
+	* win32/common/config.h:
+	* win32/common/gstversion.h:
+	  0.10.32.3 pre-release
+
+2011-04-26 15:42:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gst_private.h:
+	* gst/gstbin.c:
+	* gst/gstbus.c:
+	* gst/gstbus.h:
+	  Revert lockfree GstBus for the release
+	  Drop in old GstBus code for the release to play it safe, since
+	  regressions that are apparently hard to track down and reproduce
+	  have been reported (on windows/OSX mostly) against the lockfree
+	  version, and more time is needed to fix them.
+	  This reverts commit 03391a897001d35d1d290f27dd12e98a8b729fb4.
+	  This reverts commit 43cdbc17e6f944cdf02aeed78d1d5f6bde5190c9.
+	  This reverts commit 80eb160e0f62350271f061daa5f289d9d4277cf4.
+	  This reverts commit c41b0ade28790ffdb0e484b41cd7929c4e145dec.
+	  This reverts commit 874d60e5899dd5b89854679d1a4ad016a58ba4e0.
+	  This reverts commit 79370d4b1781af9c9a65f2d1e3498124d8c4c413.
+	  This reverts commit 2cb3e5235196eb71fb25e0a4a4b8749d6d0a8453.
+	  This reverts commit bd1c40011434c1efaa696dc98ef855ef9cce9b28.
+	  This reverts commit 4bf8f1524f6e3374b3f3bc57322337723d06b928.
+	  This reverts commit 14d7db1b527b05f029819057aef5c123ac7e013d.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647493
+
+2011-04-15 22:00:11 -0700  David Schleef <ds@schleef.org>
+
+	* gst/gstutils.c:
+	  minor inline documentation fix
+
+2011-04-24 14:02:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From c3cafe1 to 46dfcea
+
+2011-04-24 11:44:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstbin.c:
+	  tests: clean up properly in the bin test_link_structure_change unit test
+	  Don't forget to set the pipeline back to NULL state, which makes
+	  valgrind happy again.
+
+2011-04-24 09:58:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstregistry.c:
+	  registry: when removing a cached-but-no-longer-existing plugin, only remove features that belong to it
+	  When a plugin file no longer exists, e.g. because it's been removed or
+	  renamed, don't remove all features in the registry based on the *name*
+	  of the plugin they belong to, but only remove those who actually belong
+	  to that particular plugin (object/pointer).
+	  This fixes issues of plugin features disappearing when a plugin .so file
+	  is renamed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=604094
+
+2011-04-24 09:53:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstelementfactory.c:
+	* gst/gstpluginfeature.c:
+	* gst/gstpluginfeature.h:
+	* gst/gstregistrychunks.c:
+	* gst/gsttypefind.c:
+	  pluginfeature: store pointer to plugin in addition to the plugin name
+	  So we can reliably remove plugin features for a specific plugin later.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=604094
+
+2011-04-24 11:05:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstregistry.c:
+	  registry: use TRACE log level to log files that don't look like plugins
+	  Cuts down the noise in uninstalled setups.
+
+2011-04-19 20:35:04 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* libs/gst/base/gstbasetransform.c:
+	  basetransform: fix negotiation regression
+	  Fixup patch for 83597767b169dd6c39a07b6144a650c1f098825a
+	  Use a separate variable for knowing if a pad alloc has been made
+	  instead of checking for the flow return that might not be the
+	  result of the pad alloc
+	  https://bugzilla.gnome.org/show_bug.cgi?id=648220
+
+2011-04-21 12:33:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstpipeline.c:
+	  tests: add simple pipeline-in-pipeline unit test
+	  https://bugzilla.gnome.org/show_bug.cgi?id=648297
+
+2011-04-20 15:39:16 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  bus: also allow popping a message without timeout if no poll available
+	  ... which happens in particular flushing a bus, possibly as part
+	  of a state change, e.g. when having a pipeline in a pipeline
+	  and then changing state back to NULL. The interior pipeline
+	  will/might then flush the bus, which is a child bus from the
+	  parent which does not have a poll anymore these days.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=648297
+
+2011-04-19 14:05:23 +0200  Havard Graff <havard.graff@tandberg.com>
+
+	* gst/gstpad.c:
+	  pad: unlock before freeing the cache to avoid deadlock
+	  https://bugzilla.gnome.org/show_bug.cgi?id=648199
+
+2011-04-14 10:15:26 +0200  Havard Graff <havard.graff@tandberg.com>
+
+	* libs/gst/base/gstbasetransform.c:
+	  basetransform: don't unref trans until the function is done using it
+	  trans->priv->force_alloc = FALSE would crash if the ref held is the last
+	  https://bugzilla.gnome.org/show_bug.cgi?id=648215
+
+2011-04-19 13:23:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstindex.c:
+	  docs: add note/warning to gst_index_get_writer_id() docs about the OBJECT_LOCK
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646811
+
+2011-04-19 13:05:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: don't deadlock when setting external index
+	  Protect index with its own lock. gst_index_get_writer_id() may take
+	  the object lock internally (the default resolver, GST_INDEX_RESOLVER_PATH,
+	  will anyway), so if we're using that to protect the index as well,
+	  we'll deadlock.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646811
+
+2011-04-19 11:51:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: make fmtlist constant
+
+2011-04-19 11:48:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstquery.c:
+	* gst/gstquery.h:
+	  query: const-ify formats arguments to gst_query_set_formatsv()
+
+2011-04-16 15:20:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  docs: remove reference to baseparse API that didn't make it
+
+2011-04-16 14:56:03 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* configure.ac:
+	* docs/plugins/gstreamer-plugins.args:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* docs/plugins/inspect/plugin-coreindexers.xml:
+	* win32/common/config.h:
+	* win32/common/gstenumtypes.c:
+	* win32/common/gstenumtypes.h:
+	* win32/common/gstversion.h:
+	  0.10.32.2 pre-release
+
+2011-04-16 14:54:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* 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/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.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:
+	  po: update translations
+
+2011-04-16 14:52:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tools/gst-launch.c:
+	  gst-launch: remove newline from translatable string
+
+2011-04-16 13:49:45 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/Makefile.am:
+	  gst: gobject-introspection scanner doesn't need to scan or update plugin info
+
+2011-04-16 14:34:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/Makefile.am:
+	  gst: make sure gobject-introspection scanner calls gst_init()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647922
+
+2011-04-16 10:45:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/Makefile.am:
+	* libs/gst/check/Makefile.am:
+	* libs/gst/controller/Makefile.am:
+	* libs/gst/dataprotocol/Makefile.am:
+	* libs/gst/net/Makefile.am:
+	  libs: gobject-introspection scanner doesn't need to scan or update plugin info
+	  Make sure the scanner doesn't load or introspect or check any plugins,
+	  (especially not outside the build directory).
+
+2011-04-16 10:33:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/Makefile.am:
+	* libs/gst/check/Makefile.am:
+	* libs/gst/controller/Makefile.am:
+	* libs/gst/dataprotocol/Makefile.am:
+	* libs/gst/net/Makefile.am:
+	  libs: make sure gobject-introspection scanner calls gst_init()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647922
+
+2011-04-16 10:17:24 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* win32/common/libgstbase.def:
+	  win32: add new baseparse API to libgstbase.def
+
+2011-04-16 09:32:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* win32/common/libgstreamer.def:
+	  win32: Add exports for the GstParseContext and GstBufferListIterator types
+
+2011-04-15 20:58:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstpluginloader.c:
+	  pluginloader: only run gst-plugin-scanner with /usr/bin/arch wrapper on OS X >= 10.5
+	  Based on patch by: Daniel Macks <dmacks@netspace.org>
+	  Earlier versions of OSX don't support proper multiarch and
+	  trying to use /usr/bin/arch -foo with those versions would
+	  just break things.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=615357
+
+2011-04-15 19:07:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gstreamer-libs-sections.txt:
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: expose gst_base_parse_frame_free() for completeness
+	  API: gst_base_parse_frame_free()
+
+2011-04-15 18:52:18 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: init frames on the stack with gst_base_parse_frame_init()
+	  Frames must now be inited this way, can't just zero them
+	  out and use them.
+
+2011-04-15 18:38:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: more debug logging, minor clean-up
+	  Trace frames, split out code to queue a frame for later.
+
+2011-04-15 18:00:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: change gst_base_parse_frame_init() to not take a GstBaseParse argument
+
+2011-04-15 17:41:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: make GstBaseParseFrame handling more bindings-friendly
+	  Change semantics of gst_base_parse_push_frame() and make it take
+	  ownership of the whole frame, not just the frame contents. This
+	  is more in line with how gst_pad_push() etc. work. Just transfering
+	  the content, but not the container of something that's not really
+	  known to be a container is hard to annotate properly and probably
+	  won't work. We mark frames allocated on the stack now with a private
+	  flag in gst_base_parse_frame_init(), so gst_base_parse_frame_free()
+	  only frees the contents in that case but not the frame struct itself.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+	  API: gst_base_parse_frame_new()
+
+2011-04-15 15:02:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: register boxed type for GstBaseFrameParse
+	  To make this usable for bindings.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-04-15 13:57:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: Add missing ) to the ring-buffer-max-size property description
+
+2011-04-15 10:53:56 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: Remove unused but set variable
+	  GCC 4.6.0 spits warnings about these.
+
+2011-04-14 16:06:16 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gst.c:
+	* gst/gstbufferlist.c:
+	* gst/gstbufferlist.h:
+	  bufferlist: Add boxed type for GstBufferListIterator for gobject-introspection
+
+2011-04-14 15:59:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gst.c:
+	* gst/gstparse.c:
+	* gst/gstparse.h:
+	  parse: Add boxed type for GstParseContext for gobject-introspection
+
+2011-04-14 15:51:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstbufferlist.c:
+	* gst/gstfilter.c:
+	* gst/gstinterface.c:
+	* gst/gstiterator.c:
+	* gst/gstminiobject.c:
+	* gst/gstregistry.c:
+	* gst/gststructure.c:
+	* gst/gstutils.c:
+	  gst: Add some more gobject-introspection annotations
+
+2011-04-14 09:07:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Don't leak the sinkpad name
+
+2011-04-14 09:07:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/multiqueue.c:
+	  multiqueue: Don't leak pads in the named pads unit test
+
+2011-04-14 08:59:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstutils.c:
+	  utils: Fix caps leaks in gst_element_factory_can_accept_{any,all}_caps_in_direction()
+
+2011-04-13 09:20:13 -0700  David Schleef <ds@schleef.org>
+
+	* gst/parse/parse.l:
+	* tests/check/pipelines/parse-launch.c:
+	  parser: Allow element names to begin with digits
+
+2011-04-13 10:24:33 -0700  David Schleef <ds@schleef.org>
+
+	* tests/check/gst/gstutils.c:
+	  tests: Add test for greatest common divisor
+
+2011-01-06 18:11:31 +0100  Ole André Vadla Ravnås <oravnas@cisco.com>
+
+	* plugins/elements/gstfunnel.c:
+	* plugins/elements/gstinputselector.c:
+	* plugins/elements/gstoutputselector.c:
+	* plugins/elements/gstqueue.c:
+	* plugins/elements/gsttee.c:
+	  elements: Fix pad callbacks so they handle when parent goes away
+	  1) We need to lock and get a strong ref to the parent, if still there.
+	  2) If it has gone away, we need to handle that gracefully.
+	  This is necessary in order to safely modify a running pipeline. Has been
+	  observed when a streaming thread is doing a buffer_alloc() while an
+	  application thread sends an event on a pad further downstream, and from
+	  within a pad probe (holding STREAM_LOCK) carries out the pipeline plumbing
+	  while the streaming thread has its buffer_alloc() in progress.
+
+2011-01-06 18:11:31 +0100  Ole André Vadla Ravnås <oravnas@cisco.com>
+
+	* libs/gst/base/gstbasesink.c:
+	* libs/gst/base/gstbasetransform.c:
+	  base: Fix pad callbacks so they handle when parent goes away
+	  1) We need to lock and get a strong ref to the parent, if still there.
+	  2) If it has gone away, we need to handle that gracefully.
+	  This is necessary in order to safely modify a running pipeline. Has been
+	  observed when a streaming thread is doing a buffer_alloc() while an
+	  application thread sends an event on a pad further downstream, and from
+	  within a pad probe (holding STREAM_LOCK) carries out the pipeline plumbing
+	  while the streaming thread has its buffer_alloc() in progress.
+
+2011-01-06 18:11:31 +0100  Ole André Vadla Ravnås <oravnas@cisco.com>
+
+	* gst/gstghostpad.c:
+	  ghostpad: Fix pad callbacks so they handle when parent goes away
+	  1) We need to lock and get a strong ref to the parent, if still there.
+	  2) If it has gone away, we need to handle that gracefully.
+	  This is necessary in order to safely modify a running pipeline. Has been
+	  observed when a streaming thread is doing a buffer_alloc() while an
+	  application thread sends an event on a pad further downstream, and from
+	  within a pad probe (holding STREAM_LOCK) carries out the pipeline plumbing
+	  while the streaming thread has its buffer_alloc() in progress.
+
+2011-04-13 17:26:54 +0200  Janne Grunau <janne.grunau@collabora.co.uk>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: prevent calculation with GST_CLOCK_TIME_NONE in update_time_level()
+
+2011-04-11 15:08:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/multiqueue.c:
+	* tests/check/elements/queue2.c:
+	* tests/check/gst/gstvalue.c:
+	* tests/check/libs/test_transform.c:
+	  tests: fix unusued-but-assigned-variable warnings with gcc 4.6
+
+2011-04-11 13:04:32 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstbin.c:
+	  tests: disable test_many_bins unit test for now
+	  It fails on the OSX bot (both with git and the last release), and
+	  it doesn't really test anything useful, so may just as well disable
+	  it for now.
+
+2011-04-11 12:51:36 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstpluginloader.c:
+	  pluginloader: fix compiler warnings
+	  Cast string constants to make compiler happy.
+
+2011-04-11 12:04:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstbin.c:
+	  tests: allow more time for the test_many_bins pipeline to preroll
+	  Hopefully makes this test work on the OSX build bot and other
+	  not-so-powerful machines.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646624
+
+2011-04-11 11:29:00 +0100  Jan Schmidt <thaytan@mad.scientist.com>
+
+	* gst/gstpluginloader.c:
+	  pluginloader: make sure gst-plugin-scanner is called with the right arch on OSX
+	  On OSX, GStreamer might be built as a 'fat/universal' binary containing
+	  both 32-bit and 64-bit code. We must take care that gst-plugin-scanner
+	  is executed with the same architecture as the GStreamer core, otherwise
+	  bad things may happen and core/scanner will not be able to communicate
+	  properly.
+	  Should fix issues with (32-bit) firefox using a 32-bit GStreamer core
+	  which then spawns a 'universal' gst-plugin-scanner binary which gets
+	  run in 64-bit mode, causing 100% cpu usage / busy loops or just hanging
+	  firefox until killed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=615357
+
+2011-04-11 11:05:24 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/gstpad.c:
+	  pad: Allow tracking of buffers in GST_SCHEDULING debug output
+	  As GST_SCHEDULING reports when buffers pass through pads due to
+	  gst_pad_push calls, they are a good way of tracking the progress of
+	  buffers through pipelines. As such, adding output of the buffer pointers
+	  to these messages allows tracking of specific buffers, easing debugging.
+
+2011-01-27 14:33:08 +0100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* .gitignore:
+	* Android.mk:
+	* android/NOTICE:
+	* android/base.mk:
+	* android/controller.mk:
+	* android/dataprotocol.mk:
+	* android/elements.mk:
+	* android/gst-inspect.mk:
+	* android/gst-launch.mk:
+	* android/gst-plugin-scanner.mk:
+	* android/gst.mk:
+	* android/gst/gstconfig.h:
+	* android/gst/gstenumtypes.c:
+	* android/gst/gstenumtypes.h:
+	* android/gst/gstmarshal.c:
+	* android/gst/gstmarshal.h:
+	* android/gst/gstversion.h:
+	* android/gst/parse/grammar.output:
+	* android/gst/parse/grammar.tab.c:
+	* android/gst/parse/grammar.tab.h:
+	* android/gst/parse/lex._gst_parse_yy.c:
+	* android/indexers.mk:
+	* android/net.mk:
+	* android/tools.mk:
+	* gst/Makefile.am:
+	* gst/parse/Makefile.am:
+	* libs/Makefile.am:
+	* libs/gst/Makefile.am:
+	* libs/gst/base/Makefile.am:
+	* libs/gst/controller/Makefile.am:
+	* libs/gst/dataprotocol/Makefile.am:
+	* libs/gst/helpers/Makefile.am:
+	* libs/gst/net/Makefile.am:
+	* plugins/Makefile.am:
+	* plugins/elements/Makefile.am:
+	* plugins/indexers/Makefile.am:
+	* tools/Makefile.am:
+	  android: make it ready for androgenizer
+	  Remove the android/ top dir
+	  Fixe the Makefile.am to be androgenized
+	  To build gstreamer for android we are now using androgenizer which generates the needed Android.mk files.
+	  Androgenizer can be found here: http://git.collabora.co.uk/?p=user/derek/androgenizer.git
+
+2011-04-09 23:54:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gsttrace.c:
+	  trace: don't put code with side effects into g_return_if_fail()
+
+2011-04-09 22:57:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  docs: minor fixes for baseparse docs
+	  Class vfunc references still aren't right, no idea what
+	  the correct markup for those is.
+
+2011-04-09 18:04:55 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstelement.c:
+	  element: unref event in default_send_event in case element has no pads
+	  Spotted by  Haakon Sporsheim.
+
+2011-04-08 19:07:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: minor variable name clean-up
+
+2011-04-08 15:31:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gstreamer-libs-sections.txt:
+	* docs/plugins/gstreamer-plugins.args:
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	* win32/common/libgstbase.def:
+	  baseparse: rename _set_frame_props() to _set_frame_rate()
+	  Seems like the best fit to what it does, and is shorter than
+	  set_frame_properties() which might also have been confusing
+	  because of GstBaseParseFrame.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-04-06 17:43:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gstreamer-libs-sections.txt:
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: replace format flags with gst_base_parse_set_{passthrough,syncable,has_timing_info}
+	  This is more in line with e.g. GstBaseTransform's API, and makes for nicer
+	  to read code. No getters for now since I don't see any use case for them,
+	  the API is for subclasses, which usually know what format they're
+	  dealing with already and hence know what they've set.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-04-04 17:58:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: make DRAIN and SYNC flags on baseparse, not the frame, and change to DRAINING and LOST_SYNC
+	  The first because it seems a better fit conceptually, the second
+	  to express booleanness. Also change the accessor macros for subclasses
+	  to GST_BASE_PARSE_DRAINING and GST_BASE_PARSE_LOST_SYNC.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-04-02 14:18:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: add some padding to GstBaseParseFrame
+	  Esp. since it's usually allocated on the stack.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-04-02 14:08:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: fix typo in docs for GST_BASE_PARSE_FORMAT_FLAG_PASSTHROUGH
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-04-02 14:04:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: use GQueue instead of GList for queued frames
+	  and make buffer metadata writable before setting caps on queued
+	  buffer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646341
+
+2011-04-02 13:02:01 +0100  Zaheer Abbas Merali <zaheermerali@gmail.com>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: add GST_BASE_PARSE_FLOW_QUEUED to queue buffers until caps are known
+	  This is useful for parser like flacparse or h264parse which may need to process
+	  some buffers before they can construct the final caps, in which case they may
+	  want to delay pushing the initial buffers until the full and proper caps are
+	  known.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646341
+
+2011-03-31 15:50:22 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/libs/gstreamer-libs-docs.sgml:
+	* docs/libs/gstreamer-libs-sections.txt:
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: add to docs and fix up gtk-doc markup a little
+	  And add Since markers.
+
+2011-03-31 14:48:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: replace set_seek() with _set_average_bitrate() and FLAG_SYNCABLE
+	  This makes more sense conceptually, since the bitrate may be used
+	  to estimate a seek position if there's no seek table or just for
+	  duration reporting/estimation if we can't seek. Also, even if the
+	  format is not syncable, we could still seek by pushing data from the
+	  start and using the segment to make downstream clip.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-03-24 17:30:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: rename GstBaseFormat to GstBaseFormatFlags and fix up associated API
+	  Also change gst_base_parse_set_format(parse,flags,switch_on) to
+	  gst_base_parse_set_format_flags(parse,flags) which is more in line
+	  with the rest of our API and how the function is used.
+
+2011-03-13 23:43:52 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: don't expose GstAdapter in public header
+	  None of the existing subclasses needs access to that, so there's
+	  no reason to expose it for now.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-03-13 23:38:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: move various segment-related members into the private instance struct
+	  If none of the existing subclasses uses these, there's probably no
+	  need to expose them at the moment. Keep the segment itself exposed
+	  though.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-03-13 23:30:51 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: remove unused GST_BASE_PARSE_{SINK,SRC}_NAME
+	  https://bugzilla.gnome.org/show_bug.cgi?id=518857
+
+2011-03-12 16:16:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: re-indent header
+
+2011-03-12 15:34:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: fix up GType name and make _get_type() function thread-safe
+	  Rename GType from GstBaseParseBad to GstBaseParse.
+
+2011-03-12 15:29:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/Makefile.am:
+	  libs: add GstBaseParse which was moved from -bad
+
+2011-02-23 17:24:14 -0800  David Schleef <ds@schleef.org>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: make_metadata_writable() fix
+
+2011-02-21 13:24:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: rename GType from GstAudioBaseParseBad to GstBaseParseBad
+	  We use it for video as well now.
+
+2011-02-18 15:05:31 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: trim trailing whitespace
+
+2011-02-18 15:05:03 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/base/gstbaseparse.c:
+	  baseparse: use delta-unit flags instead of none
+
+2011-02-17 13:22:28 -0800  David Schleef <ds@schleef.org>
+
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: update documentation for API changes
+
+2010-10-13 15:39:55 -0700  David Schleef <ds@schleef.org>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	* libs/gst/base/gstbaseparse.c:
+	* libs/gst/base/gstbaseparse.h:
+	  baseparse: Create baseparse library
+
+2011-02-07 14:46:57 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: tune QUERY_SEEKING response
+	  Even if we currently do not have a duration yet, assume seekable if
+	  it looks like we'll likely be able to determine it later on
+	  (which coincides with needed information to perform seeking).
+	  Fixes #641047.
+
+2011-02-08 23:39:24 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: Update min/max bitrate before first posting them
+	  This avoids posting an initial min-bitrate of G_UINTMAX and max-bitrate
+	  of 0.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=641857
+
+2011-01-21 14:53:39 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: tune default duration estimate update interval
+	  Rather than a fixed default frame count, estimate frame count to aim for
+	  an interval duration depending on fps if available, otherwise use old
+	  fixed default.
+
+2011-01-14 15:16:04 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: reverse playback; mind keyframes for fragment boundary
+
+2011-01-12 14:40:37 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: ensure non-empty candidate frames
+
+2011-01-11 15:24:23 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: clarify some debug statements
+
+2011-01-11 15:24:02 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: properly track upstream timestamps
+	  ... rather than with a delay.
+
+2011-01-11 15:23:29 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: need proper frame duration to obtain sensible frame bitrate
+
+2011-01-11 15:22:51 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: proper initial values for index tracking variables
+
+2011-01-11 12:05:13 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: arrange for consistent event handling
+
+2011-01-10 16:59:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: header style cleaning
+
+2011-01-10 17:07:38 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: provide some more initial frame metadata in parse_frame
+	  ... and document accordingly.
+
+2011-01-10 16:56:36 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: refactor passthrough into format flags
+	  Also add a format flag to signal baseparse that subclass/format can provide
+	  (parsed) timestamp rather than an estimated one.  In particular, such "strong"
+	  timestamp then allows to e.g. determine duration.
+
+2011-01-10 15:34:48 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: introduce a baseparse frame to serve as context
+	  ... and adjust subclass parsers accordingly
+
+2011-01-07 16:39:51 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: restrict duration scanning to pull mode and avoid extra set_caps call
+
+2011-01-07 15:58:49 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: update some documentation
+	  Also add some more debug.
+
+2011-01-06 11:41:44 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: allow increasing min_size for current frame parsing only
+	  Also check that subclass actually either directs to skip bytes or
+	  increases expected frame size to avoid going nowhere in bogus
+	  indefinite looping.
+
+2011-01-14 15:26:37 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baesparse: fix refactor regression in loop based parsing
+
+2011-01-06 11:16:56 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: pass all available data to subclass rather than minimum
+	  Also reduce some adapter calls and add a few debug statements.
+
+2010-12-10 15:59:49 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: fix reverse playback handling
+
+2010-12-10 14:56:13 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: minor typo and debug statement cleanup
+
+2010-12-10 14:40:05 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: reduce locking
+	  ... which is either already mute and/or implicitly handled by STREAM_LOCK.
+
+2011-01-14 14:08:38 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: avoid loop in frame locating interpolation
+
+2011-01-14 16:30:11 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparsers: baseparse: Be careful to not lose the event ref
+	  Don't unref the event if it hasn't been handled, because the caller
+	  assumes it is still valid and might reuse it.
+	  I ran into this problem when transcoding an AVI (with mp3 inside)
+	  to gpp.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639555
+
+2011-01-13 16:27:04 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  docs: minor baseparse docs/comment fixes
+	  Remove copy'n'paste leftovers.
+
+2010-11-08 19:58:31 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: increase keyframe awareness
+	  ... which is not particular relevant for audio parsing, but more so
+	  in video cases.  In particular, auto-determine if dealing with video (caps).
+
+2010-11-30 15:41:02 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: avoid unexpected stray metadata
+
+2010-11-30 15:40:28 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: use proper _NONE output value when applicable
+
+2010-11-25 18:56:42 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparsers: Remove dead assignments
+
+2010-11-25 17:14:23 +0100  Andoni Morales Alastruey <amorales@flumotion.com>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparse: fix possible division-by-zero
+	  https://bugzilla.gnome.org/show_bug.cgi?id=635786
+
+2010-11-17 16:23:42 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: use correct offset when adding index entry
+	  ... bearing in mind that BUFFER_OFFSET is media specific and may not
+	  reflect the basic offset after having been parsed.
+
+2010-11-17 14:30:09 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: enhancements for timestamp marked framed formats
+	  That is, as such formats allow subclass to extract position from frame,
+	  it is possible to extract duration (if not otherwise provided)
+	  from (near) last frame, and a seek can fairly accurately target the required
+	  position.
+	  Fixes #631389.
+
+2010-11-16 17:06:14 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: refactor frame scanning peformed by _loop
+
+2010-11-16 18:04:00 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: slightly optimize sending of pending newsegment events
+
+2010-11-16 17:04:35 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: minor fixes and enhancements
+	  Arrange for upstream as well as downstream flushing when seeking.
+	  Also determine upstream size as well as seekability.  Adjust some comments
+	  to reality and employ debug statement in proper order.
+
+2010-10-29 14:08:58 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: use only upstream duration if it provides one
+
+2010-10-25 14:15:50 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: reflow update_bitrate code
+	  ... which makes local variables represent real state better, and avoids
+	  triggering unneeded updates/actions.
+
+2010-10-25 14:13:51 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: add some debug statements
+
+2010-10-11 17:49:46 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: perform bitrate handling and posting after newsegment sending
+
+2010-10-11 17:36:19 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: immediately post subclass provided bitrate
+
+2010-10-05 11:17:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  Revert "baseparse: add skip property"
+	  This reverts commit b5a3d60363d837a10f0533c141ec93d10b742312.
+	  Reverting this for now, since no one really seems to remember why this
+	  property exists or what it could possibly be good for. It seems to have
+	  been in the original mp3parse since the beginning of time and was back-
+	  ported from there.
+
+2010-10-03 23:50:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparser: Let the format string agree with the parameters to fix compiler warning
+
+2010-09-22 15:44:43 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: Fix debug output
+	  We lose the reference to the buffer after gst_pad_push(), so the debug
+	  print should happen before.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=622276
+
+2010-09-29 16:12:42 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: support reverse playback
+	  ... in pull mode or upstream driven.
+
+2010-09-27 12:16:43 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: remove done TODOs and update documentation
+
+2010-09-25 14:40:54 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: use determined seekability in answering SEEKING query
+
+2010-09-25 14:32:06 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: add skip property
+
+2010-09-22 15:07:09 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: use _set_frame_props to configure frame lead_in and lead_out
+	  ... provided a corresponding decoder with sufficient leading and following
+	  frames to carry out full decoding for a particular segment.
+
+2010-09-22 14:13:17 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: use _set_duration to configure duration update interval
+	  ... as it logically belongs there as one or the other; either subclass
+	  can provide a duration, or an estimate must be made (reguarly updated).
+
+2010-09-22 13:55:20 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: localize use of provided fps information
+
+2010-09-22 12:13:12 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: seek table and accurate seek support
+
+2010-09-21 13:57:10 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: proper and more extended segment and seek handling
+	  That is, loop pause handling, segment seek support, newsegment for gaps, etc
+
+2010-09-21 10:57:04 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: add index support
+
+2010-09-21 09:59:56 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: refactor state reset
+
+2010-09-20 16:39:37 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: prevent indefinite resyncing
+
+2010-09-20 13:57:55 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: specific EOS handling if no output so far
+
+2010-09-20 13:31:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: adjust _set_frame_prop documentation and set default as claimed
+
+2010-09-20 13:30:54 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: fix bitrate copy-and-paste and update heuristic
+
+2010-09-17 18:33:29 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: post duration message if average bitrates is updated
+
+2010-09-17 18:24:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: remove is_seekable vmethod and use a set_seek instead
+	  Seekability, like duration, etc is unlikely to change (frequently), and
+	  the default assumption covers most cases, so let subclass set when needed.
+	  At the same time, allow subclass to indicate if it has seek-metadata (table)
+	  available, and possibly have it provide an average bitrate.
+
+2010-09-17 17:21:46 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: add another hook for subclass prior to pushing buffer
+	  ... and allow subclass to perform custom segment clipping, or to
+	  emit tags or messages at this time.
+
+2010-09-17 17:19:37 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: 0 converts to 0 by default
+
+2010-09-16 18:56:46 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: refactor conversion using helper function and export default convert
+
+2010-09-16 18:35:47 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: streamline query handling
+
+2010-09-16 11:51:20 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: cleanup struct and remove unused member
+
+2010-09-22 16:07:24 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: Allow chaining of subclass event handlers
+	  This allows the child class to chain its event handler with
+	  GstBaseParse, so that subclasses don't have to duplicate all the default
+	  event handling logic.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=622276
+
+2010-08-27 18:35:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: Don't use GST_FLOW_IS_FATAL()
+	  Also don't post an error message for UNEXPECTED and do it
+	  for NOT_LINKED.
+
+2010-09-06 14:12:00 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: non-TIME seek event is simply not handled
+
+2010-06-15 15:34:05 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: fix seek event ref handling
+
+2010-06-15 15:33:37 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: prevent arithmetic overflows in pull mode buffer cache handling
+
+2010-06-15 15:32:34 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: fix seek handling
+	  Allow a few more seek event type combinations, and really use the result
+	  of gst_segment_set_seek to perform the seek.  Also add some debug.
+
+2010-03-26 18:56:49 +0000  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: Don't emit bitrate tags too early
+	  We wait to parse a minimum number of frames (10, arbitrarily) before
+	  emiting bitrate tags so that our early estimates are not wildly
+	  inaccurate for streams that start with a silence. If the stream ends
+	  before that, we just emit the tags anyway.
+	  While it _would_ be nicer to be specify the threshold to start pushing
+	  the tags in terms of duration, this would introduce more complexity than
+	  this merits.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=614991
+
+2010-03-26 18:20:24 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: Set the last stop to the buffer starttime if the duration is invalid
+	  ...instead of not setting it at all.
+
+2010-03-26 18:19:00 +0100  Joshua M. Doe <josh@joshdoe.com>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: Send NEWSEGMENT event with correct start and position
+	  Instead of taking the last stop (which could be buffer endtime instead
+	  of starttime) always take the buffer starttime.
+	  Fixes bug #614016.
+
+2010-03-25 17:09:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  audioparsers: remove unused GstBaseParseClassPrivate structure
+
+2010-03-25 11:22:58 +0000  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  audioparsers: Add bitrate calculation to baseparse
+	  This makes baseparse keep a running average of the stream bitrate, as
+	  well as the minimum and maximum bitrates. Subclasses can override a
+	  vfunc to make sure that per-frame overhead from the container is not
+	  accounted for in the bitrate calculation.
+	  We take care not to override the bitrate, minimum-bitrate, and
+	  maximum-bitrate tags if they have been posted upstream. We also
+	  rate-limit the emission of bitrate so that it is only triggered by a
+	  change of >10 kbps.
+
+2010-01-14 11:50:33 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparsers: rename baseparse GType name to avoid possible conflicts
+
+2010-01-05 15:05:05 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparsers: documentation fixes
+
+2009-12-21 18:18:39 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: adjust seek handling and newsegment sending
+	  Perform sanity check on type of seek, and only perform one that is
+	  appropriately supported.  Adjust downstream newsegment event
+	  to first buffer timestamp that is sent downstream.
+
+2009-12-21 11:59:45 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: minor refactor cleanup
+	  Also add some debug logging.
+
+2009-12-18 21:02:40 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: implement leftover draining in pull mode
+
+2009-12-16 18:38:33 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: provide default conversion using bps if no fps available
+	  Also store estimated duration as such, rather than pretending otherwise
+	  (e.g. set by subclass).
+
+2009-12-18 13:30:29 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: check for remaining data when draining in push mode
+
+2009-12-18 13:30:07 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  baseparse: fix pull mode cache size comparison
+
+2009-12-11 10:25:16 -0800  Michael Smith <msmith@songbirdnest.com>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparse: fix a format string as reported on irc.
+
+2009-10-29 15:18:37 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  baseparse: custom bufferflag indicates not to count frame in stats
+
+2009-11-27 17:27:32 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/audioparsers/gstbaseparse.c:
+	  audioparsers: reference GstBaseParse now lives here
+
+2009-11-28 18:13:31 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	* gst/aacparse/gstbaseparse.h:
+	* gst/audioparsers/gstbaseparse.c:
+	* gst/audioparsers/gstbaseparse.h:
+	  audioparsers: rename 'aacparse' plugin to generic 'audioparsers' plugin
+
+2009-10-29 16:05:00 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: reset passthrough mode to default (disabled) on activation
+
+2009-10-29 15:16:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: ensure buffer metadata is writable
+
+2009-10-28 14:06:13 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	* gst/aacparse/gstbaseparse.h:
+	  baseparse: fix/enhance DISCONT marking
+	  In particular, consider DISCONT == !sync, and allow subclass to query
+	  sync state, as it may want to perform additional checks depending
+	  on whether sync was achieved earlier on.
+	  Also arrange for subclass to query whether leftover data is being drained.
+
+2009-11-23 15:48:25 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	* gst/aacparse/gstbaseparse.h:
+	  baseparse: add timestamp handling, and default conversion
+	  In particular, (optionally) provide baseparse with a notion of frames per second
+	  (and therefore also frame duration) and have it track frame and byte counts.
+	  This way, subclass can provide baseparse with fps and have it provide default
+	  buffer time metadata and conversions, though subclass can still install
+	  callbacks to handle such itself.
+
+2009-10-28 12:02:03 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: documentation fixes
+
+2009-10-28 12:00:08 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: use_fixed_caps for src pad
+	  After all, stream is as-is, and there is little molding to downstream's
+	  taste that can be done.  If subclass can and wants to do so, it can
+	  still override as such.
+
+2009-11-20 17:32:13 +0100  Julien Moutte <julien@fluendo.com>
+
+	* gst/aacparse/gstbaseparse.c:
+	  aacparse: Fix compilation warnings
+
+2009-10-11 11:22:11 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/aacparse/gstbaseparse.c:
+	  aacparse: fix warnings in macosx snow leopard
+
+2009-09-25 17:02:53 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	* gst/aacparse/gstbaseparse.h:
+	  aacparse: forego (bogus) parsing of already parsed (raw) input
+
+2009-08-07 13:07:17 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: prevent infinite loop when draining
+
+2009-08-07 13:06:28 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: fix minor memory leak
+
+2009-07-14 14:08:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	* gst/aacparse/gstbaseparse.h:
+	  aacparse: Add function for the baseparse subclass to push buffers downstream
+	  Also handle the case gracefully where the subclass decides to drop
+	  the first buffers and has no caps set yet. It's still required to
+	  have valid caps set when the first buffer should be passed downstream.
+
+2009-07-14 14:07:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: Fix seek event leaking
+
+2009-06-01 13:56:18 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: propagate return value of GstBaseParse::set_sink_caps()
+	  gst_base_parse_sink_setcaps() presumably should fail if the subclass
+	  returns FALSE from its ::set_sink_caps() function.
+
+2009-06-01 13:47:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: don't try to GST_LOG an already-freed caps string
+	  The proper way to log caps is via GST_PTR_FORMAT anyway.
+
+2009-05-26 19:43:53 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: fix debug category
+
+2009-04-27 22:39:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: fix (regression in) newsegment handling
+	  (aacparse, amrparse, flacparse).  Fixes #580133.
+
+2009-04-07 04:53:02 +0300  René Stadler <mail@renestadler.de>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: Fix slightly broken buffer-in-segment check (aacparse, amrparse, flacparse)
+
+2009-04-05 03:50:19 +0300  René Stadler <mail@renestadler.de>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: Fix push mode seeking (aacparse, amrparse)
+	  Sending the flush-start event forward before taking the stream lock actually
+	  works, in contrast to deadlocking in downstream preroll_wait (hunk 1).
+	  After that we get the chain function being stuck in a busy loop. This is fixed
+	  by updating the minimum frame size inside the synchronization loop because the
+	  subclass asks for more data in this way (hunk 2).
+	  Finally, this leads to a very probable crash because the subclass can find a
+	  valid frame with a size greater than the currently available data in the
+	  adapter. This makes the subsequent gst_adapter_take_buffer call return NULL,
+	  which is not expected (hunk 3).
+
+2009-03-31 16:07:46 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: Delay newsegment as long as possible.
+	  If newsegment is sent (too) early, caps may not yet be fixed/set,
+	  and downstream may not have been linked.
+
+2009-02-27 11:24:37 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: revert last change and properly fix
+	  Baseparse internaly breaks the semantics of a _chain function by calling it with
+	  buffer==NULL. The reson I belived it was okay to remove it was that there is
+	  also an unchecked access to buffer later in _chain. Actually that code is wrong,
+	  as it most probably wants to set discont on the outgoing buffer.
+
+2009-02-26 11:02:06 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/aacparse/gstbaseparse.c:
+	  baseparse: remove checks for buffer==NULL
+	  Accordifn to docs for GstPadChainFunction buffer cannot be NULL. If we would
+	  leave the check, we would also need more such check below.
+
+2009-01-30 18:18:10 +0000  Jan Schmidt <jan.schmidt@sun.com>
+
+	* gst/aacparse/gstbaseparse.c:
+	  Fix the return value of the default parse_frame function.
+	  Fix the return value of the default parse_frame function in both
+	  copies of GstBaseParse
+
+2008-11-13 14:21:39 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  gst/: Fix baseparse type name.
+	  Original commit message from CVS:
+	  * gst/aacparse/gstbaseparse.c:
+	  * gst/amrparse/gstbaseparse.c:
+	  Fix baseparse type name.
+
+2008-11-13 12:59:34 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+	  Add two new baseparse based parsers (aac and amr) from Bug #518857.
+	  Original commit message from CVS:
+	  * configure.ac:
+	  * gst/aacparse/Makefile.am:
+	  * gst/aacparse/gstaacparse.c:
+	  * gst/aacparse/gstaacparse.h:
+	  * gst/aacparse/gstbaseparse.c:
+	  * gst/aacparse/gstbaseparse.h:
+	  * gst/amrparse/Makefile.am:
+	  * gst/amrparse/gstamrparse.c:
+	  * gst/amrparse/gstamrparse.h:
+	  * gst/amrparse/gstbaseparse.c:
+	  * gst/amrparse/gstbaseparse.h:
+	  Add two new baseparse based parsers (aac and amr) from Bug #518857.
+
+2011-03-20 00:56:08 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* plugins/elements/gstqueue.c:
+	* plugins/elements/gstqueue2.c:
+	  queue[2]: Make src query MT-safe
+	  It is possible that the element might be going down while the event arrives
+
+2011-03-20 00:56:08 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* libs/gst/base/gstbasesrc.c:
+	  basesrc: Make src query MT-safe
+	  It is possible that the element might be going down while the event arrives
+
+2011-04-08 14:56:37 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstqueue.c:
+	* plugins/elements/gstqueue2.c:
+	  queue[2]: Unref events if the parent element disappeared
+
+2011-03-21 16:01:05 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* plugins/elements/gstqueue.c:
+	* plugins/elements/gstqueue2.c:
+	  queue[2]: Make upstream events MT-safe
+
+2011-04-08 14:55:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* libs/gst/base/gstbasesrc.c:
+	* libs/gst/base/gstbasetransform.c:
+	  base: Unref events if the parent element disappeared
+	  And also unref events if the basetransform subclass has no
+	  event handler and the event is not forwarded at all.
+
+2011-03-21 16:01:05 +0100  Havard Graff <havard.graff@tandberg.com>
+
+	* libs/gst/base/gstbasesrc.c:
+	* libs/gst/base/gstbasetransform.c:
+	  base: Make upstream events MT-safe
+
+2011-03-29 11:57:06 +0200  Stian Selnes <stiaseln@cisco.com>
+
+	* plugins/elements/gstqueue.c:
+	* plugins/elements/gstqueue2.c:
+	  gstqueue, gstqueue2: check if parent of pad is NULL in _getcaps
+	  Parent of the pad (the queue) may be set to NULL while there is
+	  a buffer alloc going on.
+
+2011-04-08 14:50:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Fix getcaps and event function from last commit
+	  Return ANY caps if the parent disappeared, i.e. the template caps
+	  and don't leak events if the parent disappeared.
+
+2011-04-01 08:46:14 +0200  Havard Graff <havard.graff@tandberg.com>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Protect against pad-parent disappearing
+
+2010-12-14 16:06:46 +0100  Stian Selnes <stian.selnes@tandberg.com>
+
+	* gst/gstiterator.c:
+	  iterator: resync to avoid infinite loop
+
+2011-04-08 09:20:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/gst/gstutils.c:
+	  utils: Fix uninitialized variable compiler warnings
+
+2011-04-08 09:15:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  bus: Removed unused GCond
+
+2011-04-08 09:07:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Add another check for the flushing flag after taking the lock
+	  This prevents another potential deadlock when flushing the pad
+	  at exactly the right time.
+
+2011-04-07 11:24:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  bus: Immediately drop messages after calling the sync handler if this is a synchronous bus
+	  Otherwise we might wait forever for the message to be popped from
+	  the queue if a sync handler returned GST_BUS_ASYNC.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647005
+
+2011-04-07 11:19:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gst_private.h:
+	* gst/gstbin.c:
+	* gst/gstbus.c:
+	  bus: Use a construct-only property to distinguish between child buses and normal buses
+	  This allows to only create the socketpair when it is really required instead
+	  of always creating it and immediately destroying it again for child buses.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=647005
+
+2011-04-07 20:47:25 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/queue2.c:
+	  tests: add some basic unit tests for queue2
+
+2011-04-07 20:45:22 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: fix buffer leak on eos when using the ring buffer
+
+2011-01-11 14:27:35 +0100  Idar Tollefsen <itollefs@cisco.com>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: Fixes memory leak on out_flushing error in gst_queue2_create_read.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646972
+
+2011-04-07 19:44:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: fix minor memory leak
+
+2011-04-07 17:34:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* plugins/elements/gstfunnel.c:
+	  funnel: minor element description fix
+
+2011-04-07 16:08:34 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/random/draft-missing-plugins.txt:
+	  docs: remove file as we have docs/design/part-missing-plugins.txt
+
+2011-04-07 10:48:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* libs/gst/base/gstbasesrc.c:
+	  basesrc: Handle tag and custom downstream events the same
+	  Especially drop tag events when flushing to not send them over
+	  and over again.
+	  Should've been in the last commit already but I forgot to call
+	  git rebase --continue...
+
+2011-04-07 10:40:16 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* libs/gst/base/gstbasesrc.c:
+	  bla
+
+2011-04-07 10:29:41 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* libs/gst/base/gstbasesrc.c:
+	  basesrc: Send syncronized custom downstream/both events downstream from the streaming thread
+	  Instead of just silently dropping them. The same was done for tag events
+	  before already.
+	  Fixes bug #635718.
+
+2011-04-06 14:06:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gst_private.h:
+	* gst/gstbin.c:
+	* gst/gstbus.c:
+	  bus: Add private API to set a GstBus in child mode
+	  This is used by GstBin to create a child bus without
+	  a socketpair because child buses will always work
+	  synchronous. Otherwise too many sockets could be
+	  created and the limit of file descriptors for the
+	  process could be reached.
+	  Fixes bug #646624.
+
+2011-04-06 13:56:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  Revert "bus: Only create the signalling socket pair when required"
+	  This reverts commit 4bf8f1524f6e3374b3f3bc57322337723d06b928.
+
+2011-04-06 13:56:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  Revert "bus: Check if pending messages are in the queue"
+	  This reverts commit bd1c40011434c1efaa696dc98ef855ef9cce9b28.
+
+2011-04-06 11:38:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstbin.c:
+	  checks: make tests_many_bins in bin unit test a bit faster
+	  Not doing expensive checks when linking elements makes things
+	  much faster.
+
+2011-04-06 11:30:18 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstbin.c:
+	  checks: add some queues to test_many_bins unit test
+	  To limit the number of calls in a row per thread.
+
+2011-04-06 12:03:18 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  bus: Check if pending messages are in the queue
+	  We can't rely completely on the poll fd because the fd might be
+	  created after messages were posted to the bus.
+
+2011-04-06 11:45:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/gst/gstvalue.c:
+	  value: GstDate/GDate has a abbreviation now
+
+2011-04-03 16:11:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/gst/gstbin.c:
+	  checks: add GstBin unit test that creates a lot of bins
+	  Currently fails (in normal circumstances) because we create a
+	  socket pair for each bin's bus and exhaust the number of available
+	  file descriptors.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646624
+
+2011-04-05 16:22:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstbus.c:
+	  bus: Only create the signalling socket pair when required
+	  Otherwise a new one would be created for every single bus and
+	  the process could easily run out of file descriptors.
+	  Fixes bug #646624.
+
+2011-04-05 14:36:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gststructure.c:
+	  structure: Add date as a type abbreviation of GDate
+	  See bug #646696.
+
+2011-04-04 15:56:30 +0300  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 1ccbe09 to c3cafe1
+
+2011-04-04 03:33:46 +0200  Andoni Morales Alastruey <ylatuya@gmail.com>
+
+	* gst/gstpoll.c:
+	  gstpoll: retry reading the control socket to release properly all wakeups
+	  if set->control_pending is set to 0 but we didn't not succed reading
+	  the control socket, future calls to gst_poll_wait() will be awaiken
+	  by the control socket which will not be released properly because
+	  set->control_pending is already 0, causing an infinite loop.
+
+2011-04-04 10:18:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gststructure.c:
+	  structure: Don't allow invalid GDates in all structures and don't allow NULL GDates in taglists
+	  Some code (e.g. gstvorbistag.c) assumes non-NULL GDates in taglists and
+	  explodes otherwise and NULL or invalid GDates don't make much sense anyway.
+
+2011-03-25 15:56:07 +0100  Thomas Kristensen <thomas.kristensen@cisco.com>
+
+	* gst/gstpoll.c:
+	  poll: don't call WSAWaitForMultipleEvents with no events
+	  Fixes error caught by Microsoft Application Verifier.
+
+2011-04-03 16:18:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstevent.h:
+	  docs: add pointer to part-seeking.txt design docs to event seek flags docs
+
+2011-04-03 16:18:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/elements/.gitignore:
+	  checks: ignore new funnel unit test binary
+
+2011-04-02 14:51:18 +0100  Bastien Nocera <hadess@hadess.net>
+
+	* gst/gstutils.h:
+	  utils: Avoid using "type" as name for a variable and a macro argument in GST_BOILERPLATE
+	  This caused "re-declaration" problems.
+	  ./clutter-gst-video-sink.c: In function ‘clutter_gst_video_sink_init_interfaces’:
+	  ./clutter-gst-video-sink.c:231:1: warning: declaration of ‘ClutterGstVideoSink’ shadows a global declaration [-Wshadow]
+	  ./clutter-gst-video-sink.h:64:44: warning: shadowed declaration is here [-Wshadow]
+	  https://bugzilla.gnome.org/show_bug.cgi?id=646531
+
+2011-04-01 13:56:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstelement.c:
+	  element: When requesting an existing pad print a g_critical() instead of using an assertion
+	  Some applications are requesting the same pad name multiple times
+	  and the behaviour is undefined and different from element to element
+	  but we don't want to break applications that work just fine.
+	  In 0.11 this check should be an assertion again, although elements
+	  have to do manual checking if the pad already exists again because
+	  it can't be done in a threadsafe way here.
+
+2011-04-01 13:53:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstelement.c:
+	  element: Use gint64/guint64 string parsing functions
+	  And check that the requested pad names are inside the valid
+	  gint/guint range.
+
+2011-04-01 13:51:31 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* gst/gstelement.c:
+	  element: strto[u]l() returns a g[u]long
+
+2011-03-31 19:25:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/part-seeking.txt:
+	  design docs: document expected behaviour for ACCURATE and KEY_UNIT seek flags
+
+2011-03-31 10:53:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/gst/struct_x86_64.h:
+	  gstabi: Add some new structures for x86-64
+
+2011-03-31 10:46:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_x86_64.h:
+	  libsabi: Add lots of new structures for x86-64
+
+2011-03-30 10:48:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	* tests/check/elements/multiqueue.c:
+	  multiqueue: Make assignment of queue IDs and pad names threadsafe
+	  Also add a test for naming pads by the caller and return NULL
+	  when requesting an already existing pad.
+
+2011-03-29 23:58:43 +0200  Andreas Frisch <fraxinas@opendreambox.org>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Set the single queue ID to the ID of the requested pad if one was given by the caller
+
+2011-03-29 16:22:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstelement.c:
+	  element: Fix sanity checks for request pad templates without %
+
+2011-03-29 11:57:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstelement.c:
+	  element: Add some more sanity checks to the pad name checking of request pads in all cases
+	  Especially check if a pad with that name already exists.
+
+2011-03-29 11:52:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstelement.c:
+	  element: Check %u too when trying to find a pad template for a request pad
+
+2011-03-28 21:01:13 +0200  Fraxinas <andreas.frisch@multimedia-labs.de>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Fix arbitrary sink + source pad naming
+	  Use the string provided by the caller for the sinkpad name
+	  if possible. Note that all sanity checking for this name
+	  is already done in GstElement.
+	  Fixes Bug #645931
+
+2011-03-29 11:18:36 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstfunnel.c:
+	  funnel: Add some more documentation about the behaviour of funnel
+
+2011-03-29 11:08:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstfunnel.c:
+	  funnel: Send a newsegment event after flush-stop
+
+2011-03-29 11:07:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstfunnel.c:
+	  funnel: Some random cleanup
+
+2011-03-29 10:56:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstfunnel.c:
+	  funnel: Use a GstPad subclass for the sinkpads instead of using the pad's element private data
+
+2011-03-29 10:42:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/plugins/gstreamer-plugins-docs.sgml:
+	* docs/plugins/gstreamer-plugins-sections.txt:
+	* docs/plugins/gstreamer-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* docs/plugins/inspect/plugin-staticelements.xml:
+	* plugins/elements/Makefile.am:
+	* plugins/elements/gstelements.c:
+	* plugins/elements/gstfunnel.c:
+	* plugins/elements/gstfunnel.h:
+	* tests/check/Makefile.am:
+	* tests/check/elements/funnel.c:
+	  funnel: Integrate into the build system and rename the types
+
+2011-03-29 10:39:42 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstfunnel.c:
+	* plugins/elements/gstfunnel.h:
+	* tests/check/elements/funnel.c:
+	  funnel: Import funnel element from farsight2
+
+2011-03-28 21:21:00 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* gst/gstbin.c:
+	* libs/gst/base/gstbasesrc.c:
+	  basesrc: Return FALSE if we don't handle an event
+	  basesrc's default event handler returns TRUE regardless of whether the
+	  event is handled or not. This fixes the handler to conform with the
+	  expected behaviour (which is to only return TRUE when the event has
+	  actually benn handled). gst_bin_do_latency_func() depended on this
+	  (incorrect) behaviour, and is now modified as well.
+	  (Remaining 1-liner change in gstbasesrc.c is to keep gst-indent happy)
+
+2011-03-25 22:08:41 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 193b717 to 1ccbe09
+
+2011-03-25 14:55:39 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From b77e2bf to 193b717
+
+2011-03-25 09:27:58 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From d8814b6 to b77e2bf
+
+2011-03-25 08:59:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 6aaa286 to d8814b6
+
+2011-03-24 18:48:41 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 6aec6b9 to 6aaa286
+
+2011-03-24 18:27:09 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/plugins/gstreamer-plugins-sections.txt:
+	* plugins/elements/gstqueue.h:
+	  docs: fix some gtk-doc warnings
+	  Document the queue leaky enums.
+
+2011-03-24 18:25:08 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: set max value for to the matching one for the datatype
+	  The property is guint64, so use G_MAXUINT64 instead of G_MAXUINT.
+
+2011-03-24 13:22:57 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/base/gstbasesrc.c:
+	* libs/gst/base/gstbasesrc.h:
+	* libs/gst/base/gstbasetransform.h:
+	* libs/gst/base/gstcollectpads.c:
+	  docs: cleanup and xref fixes
+	  Deal with the hints from gtk-doc and fix the xrefs. Apply a work-around for ()
+	  precedence over @. Move "MT Safe" text to doc body in many places. Trim eol
+	  whitespaces.
+
+2011-03-23 16:42:24 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: print flow return as a name in debug log
+
+2011-03-23 17:13:58 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/libs/Makefile.am:
+	* docs/plugins/Makefile.am:
+	  docs: do xrefs for non installed books too
+	  Get the xrefs from the builddir for the books in the same packages. This fixes
+	  the cross references if one does not have the docs already installed.
+
+2010-04-19 20:39:53 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* libs/gst/base/gstbasesrc.c:
+	  basesrc: Keep downstream caps order when fixating
+	  This allows use to use the first intersecting format prefered by downstream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617045
+
+2010-04-19 20:40:56 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* libs/gst/base/gstbasetransform.c:
+	  basetransform: Retain caps order when getting caps
+	  If the element gave us caps in a specific order, let's retain that
+	  by intersecting against the template but retaining the order given
+	  by the element.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617045
+
+2011-02-25 10:25:26 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* tests/check/gst/gstcaps.c:
+	  tests: caps: Tests for the new caps intersection mode
+	  Adds test cases for the caps 'first' intersect mode
+	  Adds another test for the 'zigzag' mode
+	  Fixes #617045
+
+2011-02-25 08:50:12 -0300  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/gst.c:
+	* gst/gstcaps.c:
+	* gst/gstcaps.h:
+	* win32/common/libgstreamer.def:
+	  gstcaps: new API : gst_caps_intersect_full
+	  Just like gst_caps_intersect, but adds a new parameter 'mode'
+	  that allows selecting the intersection algorithm to use.
+	  Currently we have GST_CAPS_INTERSECT_MODE_ZIG_ZAG (default) and
+	  GST_CAPS_INTERSECT_MODE_FIRST.
+	  API: gst_caps_intersect_full
+	  API: GstCapsIntersectMode
+	  API: GST_CAPS_INTERSECT_MODE_ZIG_ZAG
+	  API: GST_CAPS_INTERSECT_MODE_FIRST
+	  https://bugzilla.gnome.org/show_bug.cgi?id=617045
+
+2011-03-12 17:01:39 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/.gitignore:
+	* tests/check/libs/gstlibscpp.cc:
+	  tests: add libscpp unit test to make sure g++ likes our library headers
+
+2011-03-12 16:58:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/base/gstbytereader.h:
+	* libs/gst/base/gstbytewriter.h:
+	  bytereader, bytewriter: fix up inline functions to make g++ happy
+	  gstbytereader.h: In function ‘guint8* gst_byte_reader_dup_data_unchecked(GstByteReader*, guint)’:
+	  gstbytereader.h:249:75: error: invalid conversion from ‘void*’ to ‘guint8*’
+	  gstbytewriter.h: In function ‘gboolean _gst_byte_writer_ensure_free_space_inline(GstByteWriter*, guint)’:
+	  gstbytewriter.h:196:75: error: invalid conversion from ‘void*’ to ‘guint8*’
+	  https://bugzilla.gnome.org/show_bug.cgi?id=645595
+
+2011-03-22 16:26:56 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/gstelement.h:
+	  gstelement: Fix typo in the docs
+	  GST_ELEMENT_INFO will post a INFO message, not a WARNING
+
+2011-03-18 08:22:23 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* gst/gsttagsetter.c:
+	  tagsetter: Removing unused debug category
+	  tagsetter's debug category had a typo and was unused. Removing it.
+
+2011-03-18 19:34:57 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* autogen.sh:
+	  autogen: wingo signed comment
+
+2011-03-22 11:04:20 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Don't leak objects when flushing after dequeueing and before pushing the object
+
+2011-03-21 17:54:10 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.h:
+	  multiqueue: Really remove unused variable
+
+2011-03-21 17:52:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	* plugins/elements/gstmultiqueue.h:
+	  multiqueue: Increment unique item counter with atomic operations
+	  Before it was only protected by the stream lock but every pad
+	  has its own stream lock, making the protection rather useless.
+
+2011-03-21 17:17:22 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Unblock all waiting pads when shutting down
+
+2011-03-21 12:39:34 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Remove unused variable
+
+2011-03-21 16:28:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstmultiqueue.c:
+	  multiqueue: Exit loop function if the pad is flushing
+	  Fixes possible deadlocks when flushing an unlinked pad that waits
+	  for other pads to advance.
+
+2011-03-19 17:06:12 -0500  Jason D. Clinton <me@jasonclinton.com>
+
+	* gst/gstpoll.c:
+	* libs/gst/controller/gstinterpolation.c:
+	* plugins/elements/gstfilesrc.c:
+	  build: fix build with -Werror with GCC 4.6.0
+	  This touches three areas of code, removes unused variables and discards
+	  return values from two functions with (void).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=645267
+
+2011-03-19 10:39:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstevent.h:
+	  event: Add since marker to GST_EVENT_SINK_MESSAGE
+
+2011-03-19 08:55:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Stop waiting for a pad switch when the pad is flushing
+
+2011-03-19 08:50:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Move locking and signalling macros from the header to the source file
+
+2011-03-17 23:42:48 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gsttask.h:
+	  task: fix GST_TASK_BROADCAST
+	  Surprisingly enough, you can't "breadcast" on a GCond.
+	  Spotted by Rune Sætre.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=645022
+
+2011-03-17 14:21:17 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Hold the selector lock while reading properties of the active pad
+
+2011-03-17 14:10:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Make sure that EOS is always sent downstream for the active pad
+	  It can happen that the currently active pad got the EOS event
+	  before it was activated and the previously active pad got the
+	  EOS event after it was deactivated. In that case we have to
+	  send the EOS event from an inactive pad downstream.
+
+2011-03-16 18:19:11 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstinputselector.c:
+	  inputselector: Return GST_FLOW_OK until the selected pad pushed something downstream
+	  This makes sure that during switches at no point in time all pads
+	  have returned not-linked, which can happen when playing an audio-only
+	  file with playbin2 and switching between the streams for example.
+	  Fixes bug #644935.
+
+2011-03-16 12:01:21 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstpad.c:
+	  pad: Document that pad blocks only make sense for sink pads in pull mode and src pads in push mode
+	  See bug #644907.
+
+2011-03-16 11:53:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* gst/gstghostpad.c:
+	  ghostpad: The internally linked pad of the proxypad is the ghostpad
+	  Previously we were returning the peerpad, which is the target
+	  of the ghostpad.
+
+2011-02-25 16:20:49 +0100  Jonas Holmberg <jonas.holmberg@axis.com>
+
+	* gst/gstbufferlist.c:
+	* tests/check/gst/gstbufferlist.c:
+	  bufferlist: Use a GQueue instead of a GList
+	  Adding a buffer to the end of a GstBufferList is supposed to be a fast
+	  operation, but it was not since the iterator does not advance its
+	  nextpointer when adding buffers and GList does not have a tail pointer.
+	  Using a GQueue to store the buffers makes it easier to add buffers to
+	  the end of the list and this operation will now be much more efficient.
+	  Adding an entire GList of buffers using
+	  gst_buffer_list_iterator_add_list() will however have to iterate over
+	  the list being added to be able to update the tail pointer in the
+	  GQueue.
+
+2011-03-10 17:48:26 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstutils.c:
+	* win32/common/libgstreamer.def:
+	  utils: fix ABI break when compiling gstreamer with -DGST_DISABLE_DEPRECATED
+	  GST_DISABLE_DEPRECATED should only affect visibility of declarations in headers,
+	  not actually remove symbols. See GitDeveloperGuidelines and DeprecatingAPI
+	  pages in wiki.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=402141
+
+2011-03-10 16:46:04 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* win32/common/libgstreamer.def:
+	  win32: Update .def file for API addition
+
+2011-03-09 16:15:33 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/pwg/advanced-types.xml:
+	  pwg: fix element name "videodrop" to "videorate"
+
+2011-03-08 12:11:08 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/gst/gstelementfactory.c:
+	  test: add tests for new element_factory api.
+
+2010-06-23 22:00:04 +0200  Thijs Vermeir <thijsvermeir@gmail.com>
+
+	* gst/gstutils.c:
+	* gst/gstutils.h:
+	* win32/common/libgstreamer.def:
+	  gstutils: replace gst_element_factory_can_{sink,src}_caps
+	  Add new functions to clarify how the caps are compared to the template caps of
+	  the element factory. Improve the docs to point out the difference.
+	  Deprecate: gst_element_factory_can_{src|sink}_caps
+	  API: add gst_element_factory_can_{src|sink}_{any|all}_capps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=402141
+
+2011-03-07 23:13:56 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/gst/gstcaps.c:
+	  tests: add a unit test for gst_caps_new_simple
+	  Add a test for the crash in bug #642271.
+
+2011-03-08 11:55:29 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/gst/gstelementfactory.c:
+	  tests: add test to create a factory
+
+2011-03-08 10:36:30 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/gst/.gitignore:
+	* tests/check/gst/gstelement.c:
+	* tests/check/gst/gstelementfactory.c:
+	  tests: start a new test suite for element factories
+	  Move one test from gstelement suite.
+
+2011-03-08 11:34:19 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstpadtemplate.c:
+	  padtemplate: add missing ; in example (and trim whitespace)
+
+2011-03-08 09:58:55 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gststructure.c:
+	  structure: gst_structure_empty_new() does better error checking
+	  No need to check for media_type!=NULL as the function we call that actual create
+	  the structure does a full check anyway.
+
+2011-03-08 10:06:23 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstcaps.c:
+	* gst/gststructure.c:
+	  caps,structure: trim trailing whitespace
+
+2011-03-04 08:28:25 +1000  Jonathan Matthew <jonathan@d14n.org>
+
+	* gst/gstcaps.c:
+	  caps: don't create broken caps for invalid media types
+	  Check if structure has been created before appending it to the caps. Free the
+	  caps in the case of an error to not conceal it be returning empty caps.
+	  Fixes #642271
+
+2011-03-07 16:21:47 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/examples/helloworld/helloworld.c:
+	  examples: update hello world example
+	  Our helloworld example thatw e reference from the manual has been a bit
+	  complicated to serve a first contact with gstreamer. Since we have and
+	  promote playbin2 as a playback api use it here.
+	  Based on work from Mathias Hasselmann <mathias.hasselmann@gmx.de>
+	  Fixes #424143
+
+2011-03-02 13:55:36 +0530  Arun Raghavan <arun.raghavan@collabora.co.uk>
+
+	* docs/faq/git.xml:
+	  faq: Minor update to ssh key generation commands
+	  fd.o requires RSA keys, and in general, users would probably want to
+	  make a per-server key file rather than overwrite id_rsa, id_rsa.pub.
+
+2011-02-28 18:43:41 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* configure.ac:
+	  configure.ac: export plugin description more platform independent
+	  Fixes #642504.
+
+2011-02-28 18:32:07 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 1de7f6a to 6aec6b9
+
+2011-02-28 15:01:54 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstregistry.h:
+	* gst/gstutils.c:
+	* libs/gst/controller/gsthelper.c:
+	  docs: typo fixes
+	  convinience -> convenience
+
+2011-02-28 14:56:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tools/gst-inspect.c:
+	  tools: print "pad-added", "pad-removed" and "no-more-pads" signals for elements with sometimes pads
+	  It's often not obvious to people that elements like e.g. uridecodebin
+	  (or demuxers) automatically support the standard signals of the
+	  GstElement class, so let's print the useful pad-related ones for
+	  elements with sometimes pads.
+
+2011-02-28 16:27:01 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstutils.c:
+	  docs: small updates as suggested on a blog
+	  Link from convinience api to the underlying api.
+
+2011-02-24 17:11:49 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gsturi.c:
+	  uri: make win32 buildbot happy
+	  gsturi.c:854:16: error: unused variable 'abs_clean'
+	  gsturi.c:788:1: error: 'gst_file_utils_canonicalise_path' defined but not used
+
+2011-02-24 15:32:00 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* plugins/elements/gstfilesink.c:
+	* plugins/elements/gstfilesrc.c:
+	* tests/check/elements/filesrc.c:
+	  filesrc, filesink: fix URI creation regression for non-absolute locations
+	  Passing e.g. location=foo would lead to warnings because g_filename_to_uri()
+	  wants an absolute file path and returns NULL otherwise. Use brand-new
+	  gst_filename_to_uri() instead, which will try harder to create a proper
+	  URI for us.
+	  Also add unit test.
+
+2011-02-24 15:18:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gsturi.c:
+	* gst/gsturi.h:
+	* win32/common/libgstreamer.def:
+	  uri: add gst_filename_to_uri() that takes relative filenames
+	  Add function that (unlike the GLib equivalent) also accepts paths that
+	  aren't absolute and will clean up relative markers such as ./ and ../
+	  before forming a URI.
+	  Fixes warnings with e.g. filesrc location=foo ! typefind caused by the
+	  recent switch to g_filename_to_uri(), but also actually creates valid
+	  URIs for the first time.
+	  Windows code paths could need some more work, e.g. we don't clean up
+	  the relative markers there for now (because path could have \ and /
+	  as separators).
+	  API: gst_filename_to_uri()
+
+2011-02-24 16:20:01 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/gst/gstabi.c:
+	* tests/check/libs/libsabi.c:
+	  tests: refix the tests (missing #endif)
+
+2011-02-24 16:11:17 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/Makefile.am:
+	  Makefile.am: add new abi headers to nodist_HEADERS
+
+2011-02-21 11:24:45 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tools/gst-launch.1.in:
+	* tools/gst-launch.c:
+	  gst-launch: add index support
+	  When option "-i" is given, set an index object on the pipeline and compute
+	  statistics for all index writers. Print a sumary when shutting down the
+	  pipeline.
+
+2011-02-24 15:12:14 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_arm.h:
+	  tests: add abi check data for ARM (libs)
+
+2011-02-24 15:02:37 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* tests/check/gst/gstabi.c:
+	* tests/check/gst/struct_arm.h:
+	  tests: add abi check data for ARM
+
+2011-02-23 12:33:58 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/gst/running.xml:
+	  docs: tell that ORC_CODE can contain a list of flags
+
+2011-02-14 18:05:09 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* libs/gst/base/gstbasetransform.c:
+	* tests/check/libs/transform1.c:
+	  basetransform: Be smarter with pad allocs
+	  Avoid doing unnecessary pad-allocs when on passthrough mode.
+	  If multiple basetransform elements are on a pipeline, they
+	  would do a pad-alloc for each received buffer, each element
+	  would do this, so we would have lots of pad allocs on the
+	  pipeline for a single buffer being pushed through it.
+	  This patch attempts to reduce this amount by avoiding
+	  doing pad-allocs if the element has already done it
+	  after the last pushed buffer. So it will only be allowed
+	  to do a new pad-alloc after it has pushed a buffer, so we get
+	  1x1 pad-alloc and buffer ratio
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642373
+
+2011-02-21 13:39:38 +0100  Philip Jägenstedt <philipj@opera.com>
+
+	* gst/gstindex.c:
+	  docs: fix typo in gst_index_new() docs
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642869
+
+2011-02-21 12:44:05 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* plugins/elements/gstfakesink.c:
+	  fakesink: print new MEDIA4 flag as well
+
+2011-01-03 11:37:05 +0100  Robert Swain <robert.swain@collabora.co.uk>
+
+	* gst/gstbuffer.h:
+	* gst/gstminiobject.h:
+	  miniobject, buffer: steal miniobject flag for use as MEDIA4 buffer flag
+	  This was required to add a new MEDIA4 buffer flag for indicating
+	  progressive/mixed telecine video buffers. There is no space for
+	  additional flags in GstBuffer, so steal one from GstMiniObject.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642671
+
+2011-02-20 16:11:27 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstatomicqueue.c:
+	* gst/gstatomicqueue.h:
+	  docs: add some more Since: markers to atomic queue docs
+
+2011-02-21 11:55:50 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+	* gst/gstelement.c:
+	  Revert "element: Call ->release_pad() to clean up pad"
+	  This commit changes the request pad behaviour for plugins and applications.
+	  Reopens Bug #402562
+	  The proper fix for that bug is to keep track of created request pads.
+	  This reverts commit a5e44ffffaa6d7a8d7af8dcb77e37990996253a5.
+
+2011-02-21 10:03:16 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstindex.c:
+	  index: add FIXME-0.11: comments
+
+2011-02-15 10:57:08 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstindex.c:
+	  docs: improve index docs
+
+2011-02-18 17:09:14 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* docs/design/part-progress.txt:
+	  docs: spell-check
+
+2011-02-15 19:15:16 -0800  David Schleef <ds@schleef.org>
+
+	* plugins/elements/gstfakesink.c:
+	  fakesink: print buffer flags
+
+2010-12-04 18:53:55 -0800  David Schleef <ds@schleef.org>
+
+	* gst/gstelement.c:
+	  element: Call ->release_pad() to clean up pad
+	  Fixes #636011 and #402562.
+
+2011-02-17 14:50:40 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstindex.c:
+	  index: fix creation of writer id for unparented pads
+	  Also do some cleanup in the impl.
+
+2011-02-17 10:34:37 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstvalue.c:
+	* tests/check/gst/gstvalue.c:
+	  value: add (de)serialisation function for uchar
+	  .. since we sadly have a plugin in -good that has a uchar property
+	  (cmmlenc)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642522
+
+2011-02-16 19:54:57 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstatomicqueue.c:
+	  atomicqueue: fix include order atomicqueue: fix include order# Please enter the commit message for your changes. Lines starting
+
+2010-10-28 13:27:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstbus.c:
+	* gst/gstbus.h:
+	  bus: make the bus almost lockfree
+	  Use new GstPoll functionality to wakeup the mainloop.
+	  Use an atomic queue on the writer side to post the messages.
+	  The reader side it protected with the lock still because we don't want multiple
+	  concurrent readers.
+
+2011-02-16 17:21:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* win32/common/libgstreamer.def:
+	  defs: fix defs file for new symbols
+
+2011-02-16 17:14:11 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstatomicqueue.c:
+	  atomicqueue: use correct array sizes
+
+2011-02-16 16:21:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstatomicqueue.c:
+	  atomicqueue: fix docs some more
+
+2011-02-16 16:19:46 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/gst/gstreamer-docs.sgml:
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstatomicqueue.c:
+	* gst/gstatomicqueue.h:
+	  atomicqueue: add refcounting and docs
+
+2011-02-16 12:48:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstatomicqueue.c:
+	  atomicqueue: make sure a min initial_size is used
+
+2010-10-28 16:02:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/Makefile.am:
+	* gst/gstatomicqueue.c:
+	* gst/gstatomicqueue.h:
+	  atomicqueue: add an atomic queue
+	  Add an atomic queue. The queue can be used from multiple threads simultaneously
+	  and without taking any locks or doing any blocking operations. This makes it
+	  highly scalable for things like the bus, bufferpools and object recycling.
+
+2011-02-16 17:14:46 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/gst/gstbus.c:
+	  check: fix a leak in the bus unit test
+
+2011-02-16 17:28:15 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gst.c:
+	  deinit: add progress type class unref
+
+2011-02-16 15:13:05 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstutils.c:
+	  utils: tell also what pad a pad is already linked against
+
+2011-02-15 22:56:35 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/filesink.c:
+	* tests/check/elements/filesrc.c:
+	  file{sink,src}: Check if non-URI characters are escaped, but only for the URI not the location property
+
+2011-02-15 22:49:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* tests/check/elements/filesink.c:
+	* tests/check/elements/filesrc.c:
+	  file{src,sink}: Fix unit tests
+	  filesink and filesrc should return exactly the same URI as passed
+	  and must not escape path separators.
+
+2011-02-15 22:48:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* plugins/elements/gstfilesink.c:
+	  filesink: Fix escaping of URIs
+	  Especially don't escape / as path separators
+
+2011-02-15 22:05:31 +0100  Andoni Morales Alastruey <ylatuya@gmail.com>
+
+	* plugins/elements/gstfilesrc.c:
+	  filesrc: Fix escaping of file uris
+	  Fixes bug #642393.
+
+2011-02-15 18:26:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstmessage.c:
+	* gst/gstquark.c:
+	* gst/gstquark.h:
+	  message: add timeout to progress message
+	  Add a timeout member to the progress messages to let the application know about
+	  the timeout so that it can do some gui things with it.
+
+2011-02-15 18:14:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/part-progress.txt:
+	  design: mention timeout in the progress message
+
+2011-02-15 17:20:08 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-progress.txt:
+	* docs/design/part-progress.txt:
+	  design: make progress draft official
+
+2011-01-06 18:55:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-progress.txt:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* gst/gstquark.c:
+	* gst/gstquark.h:
+	  message: rename category to code
+
+2011-01-06 15:58:47 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstmessage.c:
+	  message: add new message quark
+
+2011-01-06 15:58:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-progress.txt:
+	  docs: add more standard categories
+
+2011-01-05 13:53:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gst.c:
+	  gst: register new type
+
+2011-01-05 13:48:51 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* tests/check/gst/gstmessage.c:
+	  check: add progress message unit test
+
+2011-01-05 13:41:08 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstmessage.c:
+	* gst/gstmessage.h:
+	* gst/gstquark.c:
+	* gst/gstquark.h:
+	* win32/common/libgstreamer.def:
+	  message: add progress message functions
+
+2011-01-05 13:39:19 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-progress.txt:
+	  docs: update progress field
+	  Avoid naming the progress free text field 'message' as it conflicts with the
+	  message itself.
+
+2011-02-15 14:42:58 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: don't read beyond the end of file upstream in pull mode
+	  ... which could lead to a premature eos being reported downstream,
+	  rather than a successful partial read which would result when
+	  performed directly on e.g. basesrc.
+
+2011-01-26 16:46:25 +0800  Chen Rui <rui.chen@tieto.com>
+
+	* gst/gstutils.c:
+	  utils: return real error in compatible link check
+	  We need to ensure we call gst_pad_check_link() with the two pads in the correct
+	  order. The order depends on wheter we iterate src or sink pads.
+	  Signed-off-by: Chen Rui <rui.chen@tieto.com>
+
+2011-02-14 17:31:25 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstpad.c:
+	  pad: Check sinkpad for flushing
+	  Check the sinkpad for the flushing state before calling the chainfunction on the
+	  pad. We do this by checking the cache (which is also cleared on the srcpad when
+	  the sink is set to flushing).
+	  Fixes #641928
+
+2011-02-11 17:47:17 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+	* libs/gst/base/gstbasetransform.c:
+	  basetransform: Check for pad alloc caps when suggestion is not fixed
+	  If after computing the suggestion with downstream caps we still have
+	  a non-fixed suggestion caps try to intersect with the input caps
+	  of the pad alloc to avoid useless renegotiations.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=642130
+
+2011-02-14 14:00:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: improve duration calculation
+	  Keep track of the average distance between incomming timestamps and
+	  use that to estimate the frame duration when buffers have no duration set on
+	  them.
+
+2011-02-14 13:49:10 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: improve rate calculation
+	  When there is no duration on input buffers, assume the rate is 1.0
+	  instead of (the undefined) 0.0.
+
+2011-02-14 13:47:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: improve average duration calculation
+	  Improve the calculation of the duration. When we have no input duration set on
+	  the input buffers stop is set to start and then we end up using a 0 duration in
+	  the average calculation.
+
+2011-02-14 12:21:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: rename variable
+	  Rename an internal variable to better reflact what its value means.
+
+2011-02-14 15:39:21 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/parse/grammar.y:
+	  parse-launch: trim whitespaces
+
+2011-02-14 15:37:23 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/parse/grammar.y:
+	  parse-launch: fix typo in pad-list length comparision
+	  It was comparing the length with itself.
+	  Fixes #642071.
+
+2011-02-14 12:52:30 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From f94d739 to 1de7f6a
+
+2011-02-13 22:56:15 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tools/gst-launch.c:
+	  gst-launch: pretty-print datetime tags
+
+2011-02-10 23:30:21 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gstreamer.doap:
+	  gstreamer.doap: update mailing list host
+
+2011-02-10 14:53:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: fix some comments
+
+2011-02-10 14:50:04 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: keep track of earliest QoS timestamp
+	  Keep track of the earliest allowed timestamp according to the latest
+	  QoS report and drop buffers before that time. Activate this filter
+	  when throttling is enabled. We could later also activate this in the
+	  other QoS cases.
+	  See #638891
+
+2011-02-10 14:17:12 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* libs/gst/base/gstbasesink.c:
+	  basesink: use new QoS type
+	  Use the new QoS type and send throttling QoS messages.
+
+2011-02-10 13:42:05 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/libs/gstreamer-libs-sections.txt:
+	* libs/gst/base/gstbasesink.c:
+	* libs/gst/base/gstbasesink.h:
+	* win32/common/libgstbase.def:
+	  basesink: add property to configure a throttle-time
+	  Add a property to configure the throttle time on a sink. The
+	  property is not yet used.
+	  See #638891
+
+2011-02-10 12:02:03 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gst.c:
+	* gst/gstevent.c:
+	* gst/gstevent.h:
+	* tests/check/gst/gstevent.c:
+	* win32/common/libgstreamer.def:
+	  event: add QoS event type
+	  Add a parameter to the QoS event to specify the QoS event type.
+	  Update docs and add unit test.
+	  See #638891
+
+2011-02-10 12:00:47 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstclock.c:
+	  clock: fix parameter docs
+
+2011-02-10 10:49:22 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/part-qos.txt:
+	  design: tweak docs a little
+
+2011-02-10 10:34:57 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/part-qos.txt:
+	  design: update QoS document
+	  Add new QoS types and talk about the new throttle QoS message.
+
+2011-02-10 13:46:08 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/design/draft-bufferpool.txt:
+	  docs: fix some typos in the bufferpool draft
+
+2011-02-10 10:19:38 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstevent.c:
+	  events: fix g-i annotation for gst_event_new_tag() which takes ownership of the tag list
+
+2011-02-10 00:02:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/manual/basics-bins.xml:
+	* docs/manual/basics-elements.xml:
+	* docs/manual/basics-pads.xml:
+	* gst/gstbin.c:
+	* gst/gstelement.c:
+	  docs: mention that it's necessary to set the state of elements added to an already-running pipeline
+	  https://bugzilla.gnome.org/show_bug.cgi?id=641631
+
+2011-02-09 16:22:04 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/draft-bufferpool.txt:
+	  design: add draft for first ideas for a bufferpool feature
+	  Add a first draft with some ideas and use cases for the implementation
+	  for bufferpools. The purpose is to be able to make elements negotiate
+	  their buffer requirements as well as provide an infrastructure to
+	  preallocate and reuse buffers in an easy way.
+
+2011-02-09 15:23:13 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gsttaglist.h:
+	  docs: clarify the NOMINAL_BITRATE docs
+	  Tell that its a target bitrate and actual values might be different.
+
+2011-02-03 15:17:13 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* gst/gstpoll.c:
+	  poll: trigger rebuild setup in _new
+	  Failing to do so in the Windows case (implicitly triggered otherwise)
+	  would have a subsequent _wait return immediately leading to high CPU
+	  usage timeout loops.
+	  Fixes #640675.
+
+2011-02-03 10:53:27 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstinfo.c:
+	* gst/gstinfo.h:
+	  info: make adding/removing of gst_debug_log_default() work properly
+	  Make adding/removing gst_debug_log_default() work reliably in all
+	  circumstances. The problem was that depending on platform and linker
+	  flags the function argument might resolve to different addresses,
+	  which made it impossible to remove the default log function added
+	  in gst_init() from application code (because the pointer values
+	  didn't match). The new approach should keep things simple by passing
+	  NULL for the default function, which the code in libgstreamer can
+	  then handle.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=625396
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640771
+
+2011-02-03 10:28:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstinfo.c:
+	  Revert "info: use the publicly visible address to fix the tests"
+	  This reverts commit eb56687a6dfd207507a4ca000eae53f93b5e33ea.
+	  While this commit may have fixed a problem on one of the build bots,
+	  it didn't actually fix the original bug reported for win32.
+	  Also, it causes other problems, such as the lookup failing when
+	  called from C++ code (gst-phonon, amarok).
+	  This needs to be fixed differently.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640771
+	  https://bugzilla.gnome.org/show_bug.cgi?id=625396
+
+2011-02-02 15:35:45 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* plugins/elements/gstqueue2.c:
+	  queue2: properly identity dequeued event as such
+	  ... which avoids terminating with ERROR rather than UNEXPECTED.
+
+2011-02-02 02:07:58 +0000  Peter Collingbourne <peter@pcc.me.uk>
+
+	* scripts/gst-uninstalled:
+	  gst-uninstalled: use $GST_PREFIX variable
+	  This makes it easier to change the prefix by editing the script.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=641212
+
+2010-08-19 22:43:07 +0300  Sreerenj Balachandran <sreerenj.balachandran@nokia.com>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gsttaglist.c:
+	* gst/gsttaglist.h:
+	  taglist: add a new "encoded-by" tag
+	  Usecase: ID3v2 TENC ("Encoded by") frame.
+	  API: GST_TAG_ENCODED_BY
+	  https://bugzilla.gnome.org/show_bug.cgi?id=627268
+
+2011-01-29 18:02:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+	* libs/gst/net/gstnettimeprovider.c:
+	* libs/gst/net/gstnettimeprovider.h:
+	  net: use socklen_t where appropriate rather than specific type
+	  In particular, fixes Cygwin build where socklen_t is defined as int
+	  in line with native win32 api definition.
+
+2011-01-31 15:58:18 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* gst/gstbus.c:
+	* tests/check/gst/gstbus.c:
+	  bus: honour any per-thread default main context set via g_main_thread_push_thread_default()
+	  Makes gst_bus_add_watch(), gst_bus_add_watch_full(), gst_bus_add_signal_watch(),
+	  and gst_bus_add_signal_watch_full() convenience functions automatically pick up
+	  any non-default main contexts set for the current thread via
+	  g_main_thread_push_thread_default().
+
+2011-01-28 15:36:33 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+	* plugins/elements/gstvalve.c:
+	  valve: Only set discont on the first buffer after drops
+	  Reset the discont member after setting discont on the first buffer after
+	  dropping.
+
+2011-01-28 19:08:08 +0000  Bastien Nocera <hadess@hadess.net>
+
+	* gst/gstelement.c:
+	  GstElement: Fix warning with GCC 4.6
+	  gstelement.c: In function ‘gst_element_get_request_pad’:
+	  gstelement.c:1052:18: error: variable ‘tmp’ set but not used [-Werror=unused-but-set-variable]
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640850
+
+2011-01-27 09:28:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* plugins/elements/gstidentity.c:
+	  identity: print unset buffer timestamps or durations as 'none'
+	  Like fakesink and fakesrc do.
+
+2011-01-12 16:03:30 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* plugins/elements/gsttypefindelement.c:
+	  typefind: don't take object lock for reading the found caps
+	  Once we switch to normal mode, we're not typefinding anymore and thus the caps
+	  will not change. Therefore can avoid the object lock in the data-flow path.
+	  The locking was added in order to fix bug #608877.
+
+2011-01-25 09:39:45 +0800  Zhang Wanming <Wanming.Zhang@tieto.com>
+
+	* docs/design/part-gstbin.txt:
+	* docs/design/part-gstghostpad.txt:
+	* docs/random/caps:
+	* docs/random/omega/TODO-0.1.0:
+	* docs/random/thomasvs/capturing:
+	* docs/random/wtay/events:
+	* docs/random/wtay/events3:
+	* docs/slides/outline:
+	  docs: fix a few more typos
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640502
+
+2011-01-25 18:48:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* plugins/elements/gsttypefindelement.c:
+	  docs: flesh out typefindelement docs some more
+	  Mention that have-type signal may be emitted from streaming
+	  thread or application thread, and fix a typo.
+
+2011-01-12 16:03:57 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* plugins/elements/gsttypefindelement.c:
+	  typefind: code and comment cleanups
+	  Make code two places of the code the pushes the buffer store more similar. More
+	  comments and debug logging.
+
+2011-01-12 13:05:06 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gsttrace.c:
+	  trace: ensure messages are \0 terminated
+
+2011-01-12 12:58:44 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/net/gstnettimeprovider.c:
+	  nettimeprovider: handle invalid network addresses earlier
+	  Handle inet_aton() return code.
+
+2011-01-12 12:44:59 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/check/gstconsistencychecker.c:
+	  checks: add a comment to indicate that we intentionally leave out the 'break'
+
+2011-01-12 12:43:04 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* gst/gstregistrybinary.c:
+	  registry: remove dead code
+	  The GError is only used for the mmap operations. If we have an error we handle
+	  and clean it there already.
+
+2011-01-12 09:33:53 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* libs/gst/controller/gstcontroller.c:
+	  docs: small controller api docs improvement
+
+2011-01-11 15:09:52 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* plugins/elements/gsttypefindelement.c:
+	  typefind: canonicalize signal name
+
+2011-01-11 15:09:30 +0200  Stefan Kost <ensonic@users.sf.net>
+
+	* plugins/elements/gsttypefindelement.c:
+	  docs: mention have-type signal in the docs.
+
+2011-01-25 09:15:49 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tools/gst-launch.1.in:
+	  docs: minor gst-launch man page fix
+	  Transmitter/receiver pipelines were mislabelled. Spotted by Majin.
+
+2011-01-25 16:09:18 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+	* tests/check/elements/multiqueue.c:
+	  multiqueue test: Remove workaround for pad_task hangs
+	  Remove code that isn't needed any longer, which sets the multiqueue
+	  to PLAYING and back before unreffing, in order to avoid a deadlock
+	  waiting for gstpad tasks that were never started. The problem seems
+	  to have been fixed long ago.
+
+2011-01-25 00:20:34 +0800  Cai Yuanqing <ckjacket@gmail.com>
+
+	* docs/design/part-MT-refcounting.txt:
+	  design docs: fix 2 typos in part-MT-refcounting
+
+2011-01-24 17:46:15 +0800  Yang Xichuan <xichuan.yang@tieto.com>
+
+	* docs/design/part-gstbin.txt:
+	  design docs: part-gstbin.txt fix typo
+	  Signed-off-by: Yang Xichuan <xichuan.yang@tieto.com>
+
+2011-01-19 15:48:26 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* docs/design/part-block.txt:
+	* docs/design/part-bufferlist.txt:
+	* docs/design/part-clocks.txt:
+	* docs/design/part-element-sink.txt:
+	* docs/design/part-overview.txt:
+	* docs/design/part-preroll.txt:
+	* docs/design/part-push-pull.txt:
+	* docs/design/part-scheduling.txt:
+	* docs/design/part-seeking.txt:
+	* docs/design/part-segments.txt:
+	* docs/design/part-states.txt:
+	* docs/design/part-streams.txt:
+	* docs/design/part-synchronisation.txt:
+	  design docs: fix a few typos and a thinko
+
+2011-01-11 17:43:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+	* docs/gst/gstreamer-sections.txt:
+	* gst/gstclock.c:
+	* gst/gstclock.h:
+	* win32/common/libgstreamer.def:
+	  clock: API: Add function to re-init periodic GstClockIDs
+
+2011-01-20 14:37:25 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/gstpluginloader.c:
+	  gstpluginloader: do not leak the description string
+	  The description string was changed to an inlined string a while back.
+	  (But: no need to intern the const strings here, we just use the interning
+	  to avoid allocating duplicates and make memory management easier,
+	  since the strings will be around for the life-time of the app anyway).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=640071
+
+2011-01-22 15:33:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* gst/gstbuffer.c:
+	  buffer: clarify docs
+
+2011-01-11 10:33:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+	* docs/design/part-buffering.txt:
+	  design: update buffering doc
+	  Add strategies to buffering doc
+
+2011-01-24 11:53:12 +0200  Mart Raudsepp <mart.raudsepp@collabora.co.uk>
+
+	* gst/gstclock.c:
+	* gst/gstclock.h:
+	  docs: add missing "Since: 0.10.32" markers for GstClock
+	  Since tags were missing for gst_clock_single_shot_id_reinit()
+	  and GST_CLOCK_DONE.
+
+2011-01-24 10:56:21 +0200  Mart Raudsepp <mart.raudsepp@collabora.co.uk>
+
+	* plugins/elements/gstqueue2.c:
+	  docs: Fix GstQueue2:ring-buffer-max-size property Since tag (0.10.31, not 0.10.30)
+
+2011-01-24 10:26:45 +0200  Mart Raudsepp <mart.raudsepp@collabora.co.uk>
+
+	* gst/gststructure.c:
+	  docs: add missing "Since: 0.10.31" marker for gst_structure_get_date_time()
+
+2011-01-24 14:22:27 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* tests/check/pipelines/parse-launch.c:
+	  tests: add unit test for read-beyond-end-of-string bug
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639674
+
+2011-01-24 14:16:37 +0000  Miguel Angel Cabrera Moya <madmac2501@gmail.com>
+
+	* gst/parse/types.h:
+	  parse-launch: don't read past end of string if last character is an escape char
+	  When the last character of a property value is a backslash
+	  the unescaping code reads one byte pass the end of the string.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639674
+
+2011-01-14 09:21:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* docs/manuals.mak:
+	  docs: hack a charset=utf-8 into pwg/adm html versions
+	  So the encoding of the original document is respected and
+	  displays properly in browsers where the encoding autodetection
+	  fails to recognise that it's utf-8.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=639448
+
+2011-01-13 15:41:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* libs/gst/check/gstcheck.c:
+	  check: don't leak xml file name if GST_CHECK_XML is set
+	  Spotted by nvineeth@gmail.com
+
+2011-01-23 23:45:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* docs/plugins/inspect/plugin-coreindexers.xml:
+	* win32/common/config.h:
+	* win32/common/gstversion.h:
+	  Back to development
+
+=== release 0.10.32 ===
+
+2011-01-21 10:25:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-coreelements.xml:
+	* docs/plugins/inspect/plugin-coreindexers.xml:
+	* gstreamer.doap:
+	* win32/common/config.h:
+	* win32/common/gstversion.h:
+	  Release 0.10.32
 
 2011-01-20 19:07:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
 
diff --git a/NEWS b/NEWS
index 1c40a37..283b60e 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,171 @@
-This is GStreamer 0.10.32 "Take Me to the Bonus Level"
+This is GStreamer 0.10.34 "Misfits"
+
+Changes since 0.10.33:
+
+      * Fix multiqueue thread-safety regression
+      * Don't set artificial 0-timestamp on first packet for TIME-based live sources
+      * Otherwise identical to the previous release (0.10.33)
+
+Bugs fixed since 0.10.33:
+
+      * 649369 : basesrc: do not set first buffer timestamp to 0 for live sources
+      * 649878 : multiqueue regression: gst_single_queue_new not MT-safe
+
+Changes since 0.10.32:
+
+      * atomicqueue: add an atomic/lock-free queue structure based
+      * bufferlist: improve _add*() performance
+      * bus: in _add_watch() honour any per-thread default main context set via g_main_thread_push_thread_default()
+      * caps: new gst_caps_intersect_full() to intersect in different modes
+      * clock: add functions to re-init existing periodic GstClockIDs
+      * event: add QoS type (overflow, underflow, throttle) for QoS events
+      * ghostpad: The internally linked pad of the proxypad is the ghostpad
+      * gstpoll: retry reading the control socket to release properly all wakeups
+      * message: new progress message API for asynchronous operations
+      * pad: unlock before freeing the pad cache to avoid deadlock
+      * pad: better handling for when parent goes away during data/query/event flow
+      * parse-launch: allow element names to begin with digits
+      * pluginloader: call gst-plugin-scanner with the right arch on OSX, fixing hangs with firefox
+      * registry: fixes elements (features) disappearing if a plugin or plugin file is renamed
+      * structure: Add "(date)" as a type abbreviation of GDate
+      * structure: Don't allow invalid GDates in all structures and don't allow NULL GDates in taglists
+      * taglist: add a new "encoded-by" tag
+      * uri: add gst_filename_to_uri() that takes relative filenames
+      * utils: add gst_element_factory_can_{src|sink}_{any|all}_caps() to replace can_{sink,src}_caps()
+      * baseparse: new GstBaseParse class for parsers
+      * basesink: improve rate, duration, and average duration calculation
+      * basesink: use new QoS types and add add "throttle-time" property
+      * basesrc: Handle tag and custom downstream events the same
+      * basesrc: keep downstream caps order when fixating, to honour downstream preferences when negotiating
+      * basesrc: Return FALSE if we don't handle an event
+      * basesrc: Send synchronized custom downstream/both events downstream from the streaming thread
+      * basetransform: Be smarter with pad allocs
+      * basetransform: Check for pad alloc caps when suggestion is not fixed
+      * basetransform: Retain caps order when getting caps, to honour downstream preferences when negotiating
+      * funnel: new N-to-1 pipe fitting element imported from farsight
+      * fakesink: print buffer flags
+      * filesink: Fix escaping of URIs
+      * file{sink,src}: Check if non-URI characters are escaped, but only for the URI not the location property
+      * filesrc, filesink: fix URI creation regression for non-absolute locations
+      * filesrc: Fix escaping of file uris
+      * inputselector: Hold the selector lock while reading properties of the active pad
+      * inputselector: Make sure that EOS is always sent downstream for the active pad
+      * inputselector: Return GST_FLOW_OK until the selected pad pushed something downstream
+      * inputselector: Stop waiting for a pad switch when the pad is flushing
+      * multiqueue: fix some potential corner-case deadlocks and some leaks
+      * multiqueue: handle arbitrary sink + source pad naming
+      * queue2: don't read beyond the end of file upstream in pull mode; leak fixes
+      * plugins: make query and event functions more thread-safe, protect against parent-pad disappearing
+      * gst-launch: add GstIndex support
+
+Bugs fixed since 0.10.32:
+
+     * 642356 : [Index] review api and add an example
+      * 402141 : gst_element_factory_can_{sink,src}_caps seems to be broken
+      * 518857 : [API] GstBaseParse: new base class for parsers
+      * 604094 : registry: do not remove features when removing a cached plugin that no longer is present
+      * 615357 : [macosx] Handle multi-arch plugin-scanner
+      * 617045 : [caps] New method for intersecting caps while retaining order
+      * 639674 : parse-launch: improve parsing resilience (for escapes at end of string)
+      * 639962 : design docs: Fix a few typos and a think
+      * 640071 : pluginloader: do not leak the description string of blacklisted plugin
+      * 640437 : design docs: fix 2 typos in part-MT-refcounting
+      * 640502 : fix a few typos
+      * 640622 : gst_element_link_pads_full function return wrong error information
+      * 640675 : high cpu-load with 0.10.32 release
+      * 640850 : GstElement: Fix warning with GCC 4.6
+      * 641212 : gst-uninstalled: use $GST_PREFIX variable
+      * 641928 : gst_pad_push fast path races with pad deactivation
+      * 642071 : Incorrect comparing of number of source and sink links when parsing a launch string
+      * 642130 : [basetransform] Check for pad alloc caps when suggestion is not fixed
+      * 642271 : crash in gst_caps_structure_intersect, encoder_match_media_type
+      * 642373 : [basetransform] Avoid too may pad allocs
+      * 642393 : [filesrc] Fails setting the same uri it's setting in the uri queries.
+      * 642504 : [mingw/cygwin build] correctly export plugin description
+      * 642522 : gstvalue.c does not include a deserialize function for uchar
+      * 642869 : gst_index_new: documentation typo
+      * 643301 : Adding a buffer to a buffer list iterates the list
+      * 643455 : [regression] Lots of dropouts in Empathy voip calls
+      * 644935 : [inputselector] During switching of streams it can happen that all pads returned not-linked last
+      * 645022 : GstTask: typo in GST_TASK_BROADCAST - g_cond_breadcast should probably be g_cond_broadcast
+      * 645267 : build: fix build with -Werror with GCC 4.6.0
+      * 645595 : bytereader, bytewriter: fix warnings when using inline functions with g++
+      * 645746 : [gstpoll] Regression causes 100% cpu usage in multifdsink
+      * 645877 : commit 14d7db1 causes cpu spinning and other bus weirdness
+      * 645931 : [gstmultiqueue] fix arbitrary sink + source pad naming
+      * 646118 : [gstmultiqueue] if arbitrary sink number is specified by caller, use this as single queue id
+      * 646341 : [baseparse] Add a queued flow return so parsers can keep frames in a queue
+      * 646531 : GST_BOILERPLATE: don't use " type " as both a variable name and a macro argument
+      * 646566 : Protect against Pad-Parent disappearing
+      * 646569 : poll: don't call WSAWaitForMultipleEvents with no events
+      * 646624 : GstBin: regression: creating too many bins fails, exhausting allowed file descriptor limit
+      * 646811 : baseparse: deadlock in gst_base_parse_set_index
+      * 646971 : iterator: resync to avoid infinite loop
+      * 647005 : GstBus: Only create the socketpair for async message delivery if required
+      * 647131 : recent multiqueue changes break DVD playback (again)
+      * 647293 : Fix pad callbacks so they handle when parent goes away
+      * 647763 : [bus] Bus is leaked if a watch is installed in the default main context
+      * 647844 : baseparse: Remove unused but set variable
+      * 647922 : [introspection] Needs to call gst_init() before anything else
+      * 648199 : pad: potential deadlock / crash when freeing cache
+      * 648215 : basetransform: unref in wrong place
+      * 648220 : Regression: videoscale fails to negotiate for PAR transformation
+      * 648297 : [bus] regression: critical assertion failure
+      * 649195 : [miniobject] Fix dup_mini_object function to handle NULL gvalues
+      * 635718 : [basesrc] custom, non-OOB events aren't pushed downstream
+      * 625396 : gst_debug_remove_log_function doesn't remove default log handler
+      * 640771 : amarok doesn't start with new phonon gstreamer
+      * 646972 : queue2: Fixes memory leak on out_flushing error in gst_queue2_create_read
+      * 640665 : basesink: drops too many buffers when there's no duration
+
+API additions since 0.10.32:
+
+      * gst_atomic_queue_length()
+      * gst_atomic_queue_new()
+      * gst_atomic_queue_peek()
+      * gst_atomic_queue_pop()
+      * gst_atomic_queue_push()
+      * gst_atomic_queue_ref()
+      * gst_atomic_queue_unref()
+      * gst_buffer_list_iterator_get_type()
+      * gst_caps_intersect_full()
+      * gst_caps_intersect_mode_get_type()
+      * gst_clock_periodic_id_reinit()
+      * gst_element_factory_can_sink_all_caps()
+      * gst_element_factory_can_sink_any_caps()
+      * gst_element_factory_can_src_all_caps()
+      * gst_element_factory_can_src_any_caps()
+      * gst_event_new_qos_full()
+      * gst_event_parse_qos_full()
+      * gst_filename_to_uri()
+      * gst_message_new_progress()
+      * gst_message_parse_progress()
+      * gst_parse_context_get_type()
+      * gst_progress_type_get_type()
+      * gst_qos_type_get_type()
+      * GST_TAG_ENCODED_BY
+      * gst_base_parse_add_index_entry()
+      * gst_base_parse_convert_default()
+      * gst_base_parse_frame_free()
+      * gst_base_parse_frame_get_type()
+      * gst_base_parse_frame_init()
+      * gst_base_parse_frame_new()
+      * gst_base_parse_get_type()
+      * gst_base_parse_push_frame()
+      * gst_base_parse_set_average_bitrate()
+      * gst_base_parse_set_duration()
+      * gst_base_parse_set_frame_rate()
+      * gst_base_parse_set_has_timing_info()
+      * gst_base_parse_set_min_frame_size()
+      * gst_base_parse_set_passthrough()
+      * gst_base_parse_set_syncable()
+      * gst_base_sink_get_throttle_time()
+      * gst_base_sink_set_throttle_time()
+
+API deprecated since 0.10.32:
+
+      * gst_element_factory_can_src_caps()
+      * gst_element_factory_can_sink_caps()
 
 Changes since 0.10.31:
 
diff --git a/RELEASE b/RELEASE
index 3cfb820..2cad94a 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,5 +1,5 @@
 
-Release notes for GStreamer 0.10.32 "Take Me to the Bonus Level"
+Release notes for GStreamer 0.10.34 "Misfits"
         
 
 
@@ -9,6 +9,12 @@
 
 
 The 0.10.x series is a stable series targeted at end users.
+It is not API or ABI compatible with the stable 0.8.x series.
+It is, however, parallel installable with the 0.8.x series.
+
+
+The 0.10.x series has been reworked for threadsafety.  It also features
+various feature additions and enhancements.
 
 
 This module, gstreamer, only contains core functionality.
@@ -31,64 +37,14 @@
 
 Features of this release
     
-      * GLib requirement is now >= 2.22
-      * New core element: valve (moved from -bad)
-      * New core element: input-selector (N.B. without "select-all" property, use fsfunnel instead) (moved from -bad)
-      * New core element: output-selector (with different negotiation behaviour by default, set pad-negotiation-mode=active for previous behaviour) (moved from -bad)
-      * Performance improvements for many heavily-used code paths: GstPad, GstPoll, GstClock, GstTask, basesink, basesrc, queue2, multiqueue
-      * gobject-introspection: add annotations for most core API
-      * clock: make sync clock wait lockfree
-      * fdsrc/fdsink: reenable on MSVC
-      * registry: fix GStatBuf definition for win32 when building against older glib (fixes unnecessary rescanning of plugins at start-up)
-      * element: add a more flexible way to get request pads from elements
-      * multiqueue: return upon input when already eos
-      * object: fix creation of default name (when creating more than 100000 elements)
-      * pluginloader: fix hangs on OSX
-      * poll: fixes for (p)select backend (used e.g. on OSX)
-      * poll: refactor and make more lockfree; fixes for win32 and OSX (pselect backend)
-      * registry: don't replace valid existing plugins by blacklisted ones
-      * tags: don't produce duplicated entries when merging same value twice
-      * basesink: preroll fixes for async=false case
-      * basesink: rework position reporting code
-      * basetransform: handle downstream giving a buffer with new caps but invalid size
+      * Fix multiqueue thread-safety regression
+      * Don't set artificial 0-timestamp on first packet for TIME-based live sources
+      * Otherwise identical to the previous release (0.10.33)
 
 Bugs fixed in this release
      
-      * 635785 : basesrc: fix deadlock
-      * 638599 : GST_PTR_FORMAT causes crashes if GLib-internal printf is used but system provides register_printf_specifier
-      * 503592 : gstpad.c does many ref/unref of peer pad in dataflow
-      * 564056 : Protect against umask(0177)
-      * 607513 : input-selector segfaults in g_object_notify()
-      * 632168 : [gsttask] MSVC thread names for task debugging
-      * 632447 : reduce static memory allocated by the registry
-      * 632557 : [macros] Define restrict keyword if not available
-      * 632778 : Optimisations to GstBaseSink
-      * 632779 : gstdataqueue: Only emit g_cond_signal when needed
-      * 632780 : queue: Remove useless checks from e406f7
-      * 633918 : [fakesink] [PATCH] print sink-message events like a  message and its structure
-      * 634965 : sinks render buffers in state PAUSED when async is FALSE
-      * 635001 : basesink: fix position reporting in PAUSED
-      * 636268 : configure test fails on FreeBSD
-      * 636455 : basesrc: Avoid taking object locks for just checking tag presence
-      * 637057 : [plugin-scanner] gstpoll fails with select backend
-      * 637300 : [API] request pad based on caps
-      * 637549 : build fails: ./.libs/libgstbase-0.10.so: undefined reference to `gst_clock_single_shot_id_reinit'
-      * 637776 : merging the same tag values again produces lists containing duplicates
-      * 638381 : {input,output}-selector: double-check API before release
-      * 638399 : a few typos in GStreamer
-      * 638900 : [GstPoll] Doesn't compile with MinGW
-      * 638941 : registry scan/loading race and inconsistency
-
-API changed in this release
-     
-- API additions:
-    
-      * gst_clock_single_shot_id_reinit()
-      * gst_element_request_pad()
-      * GstElementClass::request_new_pad_full()
-      * gst_poll_get_read_gpollfd()
-      * gst_value_list_merge()
-      * GST_CLOCK_DONE
+      * 649369 : basesrc: do not set first buffer timestamp to 0 for live sources
+      * 649878 : [multiqueue] regression: gst_single_queue_new not MT-safe
 
 Download
 
@@ -113,31 +69,15 @@
 will create more lists as necessary.
 
         
+Applications
+
+Applications ported to GStreamer 0.10 include Totem, RhythmBox, Sound-Juicer,
+Gnome Media, Flumotion, Amarok, Jamboree, Pitivi, Istanbul, AnnoAmp, Elisa, and others.
+Let us know if you want to be added to this list.
+
+  
 Contributors to this release
     
-      * Andoni Morales Alastruey
-      * Benjamin Gaignard
-      * Benjamin Otte
-      * David Hoyt
-      * David Schleef
-      * Edward Hervey
-      * Havard Graff
-      * Jan Schmidt
-      * Kipp Cannon
-      * Koop Mast
-      * Lasse Laukkanen
       * Mark Nauwelaerts
-      * Michael Smith
-      * Olivier Crete
-      * Olivier Crête
-      * Raimo Järvi
-      * Sebastian Dröge
-      * Stefan Kost
-      * Thiago Santos
-      * Tim-Philipp Müller
-      * Tommi Myöhänen
-      * Wim Taymans
-      * Zhang Wanming
-      * Christian Schaller
-      * Sjoerd Simons
+      * Vincent Penquerc'h
  
diff --git a/configure.ac b/configure.ac
index 8bd2cbd..dc9c33e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,7 +48,7 @@
 dnl - interfaces added -> increment AGE
 dnl - interfaces removed -> AGE = 0
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 28, 0, 28)
+AS_LIBTOOL(GST, 29, 0, 29)
 
 dnl FIXME: this macro doesn't actually work;
 dnl the generated libtool script has no support for the listed tags.
diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt
index 2ddca0c..311fb13 100644
--- a/docs/gst/gstreamer-sections.txt
+++ b/docs/gst/gstreamer-sections.txt
@@ -933,14 +933,43 @@
 <SECTION>
 <FILE>gstghostpad</FILE>
 <TITLE>GstGhostPad</TITLE>
+GstProxyPad
 GstGhostPad
+
 gst_ghost_pad_new
 gst_ghost_pad_new_no_target
 gst_ghost_pad_new_from_template
 gst_ghost_pad_new_no_target_from_template
+
 gst_ghost_pad_set_target
 gst_ghost_pad_get_target
+
 gst_ghost_pad_construct
+
+gst_ghost_pad_setcaps_default
+gst_ghost_pad_unlink_default
+gst_ghost_pad_link_default
+gst_ghost_pad_activate_pull_default
+gst_ghost_pad_activate_push_default
+
+gst_ghost_pad_internal_activate_push_default
+gst_ghost_pad_internal_activate_pull_default
+
+gst_proxy_pad_get_internal
+
+gst_proxy_pad_query_type_default
+gst_proxy_pad_event_default
+gst_proxy_pad_query_default
+gst_proxy_pad_iterate_internal_links_default
+gst_proxy_pad_chain_default
+gst_proxy_pad_chain_list_default
+gst_proxy_pad_getrange_default
+gst_proxy_pad_checkgetrange_default
+gst_proxy_pad_getcaps_default
+gst_proxy_pad_acceptcaps_default
+gst_proxy_pad_fixatecaps_default
+gst_proxy_pad_setcaps_default
+gst_proxy_pad_unlink_default
 <SUBSECTION Standard>
 GstGhostPadClass
 GST_GHOST_PAD
@@ -1393,6 +1422,7 @@
 GstMiniObjectCopyFunction
 GstMiniObjectDisposeFunction
 GstMiniObjectFreeFunction
+GstMiniObjectWeakNotify
 
 GST_MINI_OBJECT_TYPE
 GST_MINI_OBJECT_FLAGS
@@ -1413,6 +1443,9 @@
 gst_mini_object_ref
 gst_mini_object_unref
 
+gst_mini_object_weak_ref
+gst_mini_object_weak_unref
+
 gst_mini_object_replace
 
 <SUBSECTION Standard>
@@ -1540,11 +1573,6 @@
 gst_pad_new_from_template
 gst_pad_new_from_static_template
 
-gst_pad_alloc_buffer
-gst_pad_alloc_buffer_and_set_caps
-gst_pad_set_bufferalloc_function
-GstPadBufferAllocFunction
-
 gst_pad_set_chain_function
 GstPadChainFunction
 
diff --git a/docs/plugins/gstreamer-plugins.args b/docs/plugins/gstreamer-plugins.args
index c7f3571..5d965e6 100644
--- a/docs/plugins/gstreamer-plugins.args
+++ b/docs/plugins/gstreamer-plugins.args
@@ -849,6 +849,16 @@
 </ARG>
 
 <ARG>
+<NAME>GstMultiQueue::sync-by-running-time</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sync By Running Time</NICK>
+<BLURB>Synchronize deactivated or not-linked streams by running time.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstBin::async-handling</NAME>
 <TYPE>gboolean</TYPE>
 <RANGE></RANGE>
@@ -1068,3 +1078,13 @@
 <DEFAULT>FALSE</DEFAULT>
 </ARG>
 
+<ARG>
+<NAME>GstInputSelector::sync-streams</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Sync Streams</NICK>
+<BLURB>Synchronize inactive streams to the running time of the active stream.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/inspect/plugin-coreelements.xml b/docs/plugins/inspect/plugin-coreelements.xml
index b7ca01a..aef69a7 100644
--- a/docs/plugins/inspect/plugin-coreelements.xml
+++ b/docs/plugins/inspect/plugin-coreelements.xml
@@ -3,10 +3,10 @@
   <description>standard GStreamer elements</description>
   <filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
   <basename>libgstcoreelements.so</basename>
-  <version>0.10.32.4</version>
+  <version>0.10.34.1</version>
   <license>LGPL</license>
   <source>gstreamer</source>
-  <package>GStreamer prerelease</package>
+  <package>GStreamer git</package>
   <origin>Unknown package origin</origin>
   <elements>
     <element>
diff --git a/docs/plugins/inspect/plugin-coreindexers.xml b/docs/plugins/inspect/plugin-coreindexers.xml
index 2ff2118..e8d2401 100644
--- a/docs/plugins/inspect/plugin-coreindexers.xml
+++ b/docs/plugins/inspect/plugin-coreindexers.xml
@@ -3,10 +3,10 @@
   <description>GStreamer core indexers</description>
   <filename>../../plugins/indexers/.libs/libgstcoreindexers.so</filename>
   <basename>libgstcoreindexers.so</basename>
-  <version>0.10.32.4</version>
+  <version>0.10.34.1</version>
   <license>LGPL</license>
   <source>gstreamer</source>
-  <package>GStreamer prerelease</package>
+  <package>GStreamer git</package>
   <origin>Unknown package origin</origin>
   <elements>
   </elements>
diff --git a/gst/gst_private.h b/gst/gst_private.h
index cf0d152..13f2590 100644
--- a/gst/gst_private.h
+++ b/gst/gst_private.h
@@ -51,6 +51,9 @@
 /* for the pad cache */
 #include "gstpad.h"
 
+/* for GstElement */
+#include "gstelement.h"
+
 G_BEGIN_DECLS
 
 /* used by gstparse.c and grammar.y */
@@ -115,6 +118,10 @@
 
 void _priv_gst_pad_invalidate_cache (GstPad *pad);
 
+/* Used in GstBin for manual state handling */
+void _priv_gst_element_state_changed (GstElement *element, GstState oldstate,
+    GstState newstate, GstState pending);
+
 /* used in both gststructure.c and gstcaps.c; numbers are completely made up */
 #define STRUCTURE_ESTIMATED_STRING_LEN(s) (16 + gst_structure_n_fields(s) * 22)
 
diff --git a/gst/gstbin.c b/gst/gstbin.c
index 578c9db..b25f96b 100644
--- a/gst/gstbin.c
+++ b/gst/gstbin.c
@@ -222,6 +222,8 @@
 
 static GstStateChangeReturn gst_bin_change_state_func (GstElement * element,
     GstStateChange transition);
+static void gst_bin_state_changed (GstElement * element, GstState oldstate,
+    GstState newstate, GstState pending);
 static GstStateChangeReturn gst_bin_get_state_func (GstElement * element,
     GstState * state, GstState * pending, GstClockTime timeout);
 static void bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret,
@@ -468,6 +470,7 @@
 
   gstelement_class->change_state =
       GST_DEBUG_FUNCPTR (gst_bin_change_state_func);
+  gstelement_class->state_changed = GST_DEBUG_FUNCPTR (gst_bin_state_changed);
   gstelement_class->get_state = GST_DEBUG_FUNCPTR (gst_bin_get_state_func);
   gstelement_class->get_index = GST_DEBUG_FUNCPTR (gst_bin_get_index_func);
   gstelement_class->set_index = GST_DEBUG_FUNCPTR (gst_bin_set_index_func);
@@ -983,6 +986,7 @@
 is_eos (GstBin * bin, guint32 * seqnum)
 {
   gboolean result;
+  gint n_eos = 0;
   GList *walk, *msgs;
 
   result = TRUE;
@@ -996,6 +1000,7 @@
               find_message (bin, GST_OBJECT_CAST (element), GST_MESSAGE_EOS))) {
         GST_DEBUG ("sink '%s' posted EOS", GST_ELEMENT_NAME (element));
         *seqnum = gst_message_get_seqnum (GST_MESSAGE_CAST (msgs->data));
+        n_eos++;
       } else {
         GST_DEBUG ("sink '%s' did not post EOS yet",
             GST_ELEMENT_NAME (element));
@@ -1004,7 +1009,13 @@
       }
     }
   }
-  return result;
+  /* FIXME: Some tests (e.g. elements/capsfilter) use
+   * pipelines with a dangling sinkpad but no sink element.
+   * These tests assume that no EOS message is ever
+   * posted on the bus so let's keep that behaviour.
+   * In valid pipelines this doesn't make a difference.
+   */
+  return result && n_eos > 0;
 }
 
 static void
@@ -2238,7 +2249,6 @@
   if (!(cont = gst_pad_set_active (pad, *active)))
     g_value_set_boolean (ret, FALSE);
 
-  /* unref the object that was reffed for us by _fold */
   return cont;
 }
 
@@ -2387,6 +2397,19 @@
   return res;
 }
 
+static void
+gst_bin_state_changed (GstElement * element, GstState oldstate,
+    GstState newstate, GstState pending)
+{
+  GstElementClass *pklass = (GstElementClass *) parent_class;
+
+  if (newstate == GST_STATE_PLAYING && pending == GST_STATE_VOID_PENDING)
+    bin_do_eos (GST_BIN_CAST (element));
+
+  if (pklass->state_changed)
+    pklass->state_changed (element, oldstate, newstate, pending);
+}
+
 static GstStateChangeReturn
 gst_bin_change_state_func (GstElement * element, GstStateChange transition)
 {
@@ -2621,8 +2644,6 @@
       gst_element_state_get_name (GST_STATE (element)),
       gst_element_state_change_return_get_name (ret));
 
-  bin_do_eos (bin);
-
   return ret;
 
   /* ERRORS */
@@ -2736,8 +2757,6 @@
   GST_STATE_UNLOCK (bin);
   GST_DEBUG_OBJECT (bin, "state continue done");
 
-  bin_do_eos (bin);
-
   gst_object_unref (bin);
   g_slice_free (BinContinueData, data);
   return;
@@ -2832,9 +2851,8 @@
   GST_OBJECT_UNLOCK (bin);
 
   /* post message */
-  gst_element_post_message (GST_ELEMENT_CAST (bin),
-      gst_message_new_state_changed (GST_OBJECT_CAST (bin),
-          new_state, new_state, new_state));
+  _priv_gst_element_state_changed (GST_ELEMENT_CAST (bin), new_state, new_state,
+      new_state);
 
 post_start:
   if (amessage) {
@@ -2876,8 +2894,8 @@
   GstState current, pending, target;
   GstStateChangeReturn old_ret;
   GstState old_state, old_next;
-  gboolean toplevel;
-  GstMessage *smessage = NULL, *amessage = NULL;
+  gboolean toplevel, state_changed = FALSE;
+  GstMessage *amessage = NULL;
   BinContinueData *cont = NULL;
 
   if (GST_STATE_RETURN (bin) == GST_STATE_CHANGE_FAILURE)
@@ -2956,15 +2974,14 @@
 
   if (old_next != GST_STATE_PLAYING) {
     if (old_state != old_next || old_ret == GST_STATE_CHANGE_ASYNC) {
-      smessage = gst_message_new_state_changed (GST_OBJECT_CAST (bin),
-          old_state, old_next, pending);
+      state_changed = TRUE;
     }
   }
   GST_OBJECT_UNLOCK (bin);
 
-  if (smessage) {
-    GST_DEBUG_OBJECT (bin, "posting state change message");
-    gst_element_post_message (GST_ELEMENT_CAST (bin), smessage);
+  if (state_changed) {
+    _priv_gst_element_state_changed (GST_ELEMENT_CAST (bin), old_state,
+        old_next, pending);
   }
   if (amessage) {
     /* post our combined ASYNC_DONE when all is ASYNC_DONE. */
@@ -2972,9 +2989,6 @@
     gst_element_post_message (GST_ELEMENT_CAST (bin), amessage);
   }
 
-  if (!cont)
-    bin_do_eos (bin);
-
   GST_OBJECT_LOCK (bin);
   if (cont) {
     /* toplevel, start continue state */
diff --git a/gst/gstelement.c b/gst/gstelement.c
index d8afdbb..63b6dbc 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -2227,6 +2227,28 @@
   }
 }
 
+/* Not static because GstBin has manual state handling too */
+void
+_priv_gst_element_state_changed (GstElement * element, GstState oldstate,
+    GstState newstate, GstState pending)
+{
+  GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
+  GstMessage *message;
+
+  GST_CAT_INFO_OBJECT (GST_CAT_STATES, element,
+      "notifying about state-changed %s to %s (%s pending)",
+      gst_element_state_get_name (oldstate),
+      gst_element_state_get_name (newstate),
+      gst_element_state_get_name (pending));
+
+  if (klass->state_changed)
+    klass->state_changed (element, oldstate, newstate, pending);
+
+  message = gst_message_new_state_changed (GST_OBJECT_CAST (element),
+      oldstate, newstate, pending);
+  gst_element_post_message (element, message);
+}
+
 /**
  * gst_element_continue_state:
  * @element: a #GstElement to continue the state change of.
@@ -2254,7 +2276,6 @@
   GstStateChangeReturn old_ret;
   GstState old_state, old_next;
   GstState current, next, pending;
-  GstMessage *message;
   GstStateChange transition;
 
   GST_OBJECT_LOCK (element);
@@ -2290,9 +2311,7 @@
       gst_element_state_get_name (old_next),
       gst_element_state_get_name (pending), gst_element_state_get_name (next));
 
-  message = gst_message_new_state_changed (GST_OBJECT_CAST (element),
-      old_state, old_next, pending);
-  gst_element_post_message (element, message);
+  _priv_gst_element_state_changed (element, old_state, old_next, pending);
 
   GST_CAT_INFO_OBJECT (GST_CAT_STATES, element,
       "continue state change %s to %s, final %s",
@@ -2324,16 +2343,9 @@
      * previous return value.
      * We do signal the cond though as a _get_state() might be blocking
      * on it. */
-    if (old_state != old_next || old_ret == GST_STATE_CHANGE_ASYNC) {
-      GST_CAT_INFO_OBJECT (GST_CAT_STATES, element,
-          "posting state-changed %s to %s",
-          gst_element_state_get_name (old_state),
-          gst_element_state_get_name (old_next));
-      message =
-          gst_message_new_state_changed (GST_OBJECT_CAST (element), old_state,
-          old_next, GST_STATE_VOID_PENDING);
-      gst_element_post_message (element, message);
-    }
+    if (old_state != old_next || old_ret == GST_STATE_CHANGE_ASYNC)
+      _priv_gst_element_state_changed (element, old_state, old_next,
+          GST_STATE_VOID_PENDING);
 
     GST_STATE_BROADCAST (element);
 
@@ -2402,9 +2414,7 @@
     GST_ELEMENT_START_TIME (element) = 0;
   GST_OBJECT_UNLOCK (element);
 
-  message = gst_message_new_state_changed (GST_OBJECT_CAST (element),
-      new_state, new_state, new_state);
-  gst_element_post_message (element, message);
+  _priv_gst_element_state_changed (element, new_state, new_state, new_state);
 
   message =
       gst_message_new_async_start (GST_OBJECT_CAST (element), new_base_time);
@@ -2691,7 +2701,6 @@
   if (!(cont = gst_pad_set_active (pad, *active)))
     g_value_set_boolean (ret, FALSE);
 
-  /* unref the object that was reffed for us by _fold */
   return cont;
 }
 
diff --git a/gst/gstelement.h b/gst/gstelement.h
index 7bd958c..fba69a6 100644
--- a/gst/gstelement.h
+++ b/gst/gstelement.h
@@ -597,6 +597,7 @@
  * @get_query_types: get the supported #GstQueryType of this element
  * @query: perform a #GstQuery on the element
  * @request_new_pad_full: called when a new pad is requested. Since: 0.10.32.
+ * @state_changed: called immediately after a new state was set. Since: 0.10.35.
  *
  * GStreamer element class. Override the vmethods to implement the element
  * functionality.
@@ -636,6 +637,8 @@
                                                  GstState * pending, GstClockTime timeout);
   GstStateChangeReturn (*set_state)             (GstElement *element, GstState state);
   GstStateChangeReturn (*change_state)          (GstElement *element, GstStateChange transition);
+  void                 (*state_changed)         (GstElement *element, GstState oldstate,
+                                                 GstState newstate, GstState pending);
 
   /* bus */
   void                  (*set_bus)              (GstElement * element, GstBus * bus);
diff --git a/gst/gstghostpad.c b/gst/gstghostpad.c
index b33a241..8d6584e 100644
--- a/gst/gstghostpad.c
+++ b/gst/gstghostpad.c
@@ -73,7 +73,6 @@
 G_DEFINE_TYPE (GstProxyPad, gst_proxy_pad, GST_TYPE_PAD);
 
 static GstPad *gst_proxy_pad_get_target (GstPad * pad);
-static GstPad *gst_proxy_pad_get_internal (GstPad * pad);
 
 static void gst_proxy_pad_dispose (GObject * object);
 static void gst_proxy_pad_finalize (GObject * object);
@@ -83,12 +82,26 @@
 
 static GParamSpec *pspec_caps = NULL;
 
-static const GstQueryType *
-gst_proxy_pad_do_query_type (GstPad * pad)
+/**
+ * gst_proxy_pad_query_type_default:
+ * @pad: a #GstPad.
+ *
+ * Invoke the default query type handler of the proxy pad.
+ *
+ * Returns: (transfer none) (array zero-terminated=1): a zero-terminated array
+ *     of #GstQueryType.
+ *
+ * Since: 0.10.35
+ */
+const GstQueryType *
+gst_proxy_pad_query_type_default (GstPad * pad)
 {
-  GstPad *target = gst_proxy_pad_get_target (pad);
+  GstPad *target;
   const GstQueryType *res = NULL;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
+
+  target = gst_proxy_pad_get_target (pad);
   if (target) {
     res = gst_pad_get_query_types (target);
     gst_object_unref (target);
@@ -96,12 +109,28 @@
   return res;
 }
 
-static gboolean
-gst_proxy_pad_do_event (GstPad * pad, GstEvent * event)
+/**
+ * gst_proxy_pad_event_default:
+ * @pad: a #GstPad to push the event to.
+ * @event: (transfer full): the #GstEvent to send to the pad.
+ *
+ * Invoke the default event of the proxy pad.
+ *
+ * Returns: TRUE if the event was handled.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_proxy_pad_event_default (GstPad * pad, GstEvent * event)
 {
   gboolean res = FALSE;
-  GstPad *internal = gst_proxy_pad_get_internal (pad);
+  GstPad *internal;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
+  g_return_val_if_fail (GST_IS_EVENT (event), FALSE);
+
+  internal =
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad)));
   if (internal) {
     res = gst_pad_push_event (internal, event);
     gst_object_unref (internal);
@@ -110,12 +139,27 @@
   return res;
 }
 
-static gboolean
-gst_proxy_pad_do_query (GstPad * pad, GstQuery ** query)
+/**
+ * gst_proxy_pad_query_default:
+ * @pad: a #GstPad to invoke the default query on.
+ * @query: (transfer none): the #GstQuery to perform.
+ *
+ * Invoke the default query function of the proxy pad.
+ *
+ * Returns: TRUE if the query could be performed.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_proxy_pad_query_default (GstPad * pad, GstQuery ** query)
 {
   gboolean res = FALSE;
-  GstPad *target = gst_proxy_pad_get_target (pad);
+  GstPad *target;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
+  g_return_val_if_fail (GST_IS_QUERY (query), FALSE);
+
+  target = gst_proxy_pad_get_target (pad);
   if (target) {
     res = gst_pad_query (target, query);
     gst_object_unref (target);
@@ -124,11 +168,27 @@
   return res;
 }
 
-static GstIterator *
-gst_proxy_pad_do_iterate_internal_links (GstPad * pad)
+/**
+ * gst_proyx_pad_iterate_internal_links_default:
+ * @pad: the #GstPad to get the internal links of.
+ *
+ * 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().
+ *
+ * Since: 0.10.35
+ */
+GstIterator *
+gst_proxy_pad_iterate_internal_links_default (GstPad * pad)
 {
   GstIterator *res = NULL;
-  GstPad *internal = GST_PROXY_PAD_INTERNAL (pad);
+  GstPad *internal;
+
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
+
+  internal =
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad)));
 
   if (internal) {
     GValue v = { 0, };
@@ -137,63 +197,142 @@
     g_value_set_object (&v, internal);
     res = gst_iterator_new_single (GST_TYPE_PAD, &v);
     g_value_unset (&v);
+    gst_object_unref (internal);
   }
 
   return res;
 }
 
-static GstFlowReturn
-gst_proxy_pad_do_chain (GstPad * pad, GstBuffer * buffer)
+/**
+ * gst_proxy_pad_chain_default:
+ * @pad: a sink #GstPad, returns GST_FLOW_ERROR if not.
+ * @buffer: (transfer full): the #GstBuffer to send, return GST_FLOW_ERROR
+ *     if not.
+ *
+ * Invoke the default chain function of the proxy pad.
+ *
+ * Returns: a #GstFlowReturn from the pad.
+ *
+ * Since: 0.10.35
+ */
+GstFlowReturn
+gst_proxy_pad_chain_default (GstPad * pad, GstBuffer * buffer)
 {
   GstFlowReturn res;
-  GstPad *internal = GST_PROXY_PAD_INTERNAL (pad);
+  GstPad *internal;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
+
+  internal = GST_PROXY_PAD_INTERNAL (pad);
   res = gst_pad_push (internal, buffer);
 
   return res;
 }
 
-static GstFlowReturn
-gst_proxy_pad_do_chain_list (GstPad * pad, GstBufferList * list)
+/**
+ * gst_proxy_pad_chain_list_default:
+ * @pad: a sink #GstPad, returns GST_FLOW_ERROR if not.
+ * @list: (transfer full): the #GstBufferList to send, return GST_FLOW_ERROR
+ *     if not.
+ *
+ * Invoke the default chain list function of the proxy pad.
+ *
+ * Returns: a #GstFlowReturn from the pad.
+ *
+ * Since: 0.10.35
+ */
+GstFlowReturn
+gst_proxy_pad_chain_list_default (GstPad * pad, GstBufferList * list)
 {
   GstFlowReturn res;
-  GstPad *internal = GST_PROXY_PAD_INTERNAL (pad);
+  GstPad *internal;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
+  g_return_val_if_fail (GST_IS_BUFFER_LIST (list), GST_FLOW_ERROR);
+
+  internal = GST_PROXY_PAD_INTERNAL (pad);
   res = gst_pad_push_list (internal, list);
 
   return res;
 }
 
-static GstFlowReturn
-gst_proxy_pad_do_getrange (GstPad * pad, guint64 offset, guint size,
+/**
+ * gst_proxy_pad_get_range_default:
+ * @pad: a src #GstPad, returns #GST_FLOW_ERROR if not.
+ * @offset: The start offset of the buffer
+ * @size: The length of the buffer
+ * @buffer: (out callee-allocates): a pointer to hold the #GstBuffer,
+ *     returns #GST_FLOW_ERROR if %NULL.
+ *
+ * Invoke the default getrange function of the proxy pad.
+ *
+ * Returns: a #GstFlowReturn from the pad.
+ *
+ * Since: 0.10.35
+ */
+GstFlowReturn
+gst_proxy_pad_getrange_default (GstPad * pad, guint64 offset, guint size,
     GstBuffer ** buffer)
 {
   GstFlowReturn res;
-  GstPad *internal = GST_PROXY_PAD_INTERNAL (pad);
+  GstPad *internal;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR);
+  g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
+
+  internal = GST_PROXY_PAD_INTERNAL (pad);
   res = gst_pad_pull_range (internal, offset, size, buffer);
 
   return res;
 }
 
-static gboolean
-gst_proxy_pad_do_checkgetrange (GstPad * pad)
+/**
+ * gst_proxy_pad_checkgetrange_default:
+ * @pad: a src #GstPad, returns #GST_FLOW_ERROR if not.
+ *
+ * Invoke the default checkgetrange function of the proxy pad.
+ *
+ * Returns: a #gboolean from the pad.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_proxy_pad_checkgetrange_default (GstPad * pad)
 {
   gboolean result;
-  GstPad *internal = GST_PROXY_PAD_INTERNAL (pad);
+  GstPad *internal;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
+
+  internal = GST_PROXY_PAD_INTERNAL (pad);
   result = gst_pad_check_pull_range (internal);
 
   return result;
 }
 
-static GstCaps *
-gst_proxy_pad_do_getcaps (GstPad * pad, GstCaps * filter)
+/**
+ * gst_proxy_pad_getcaps_default:
+ * @pad: a #GstPad to get the capabilities of.
+ * @filter: a #GstCaps filter.
+ *
+ * Invoke the default getcaps function of the proxy pad.
+ *
+ * Returns: (transfer full): the caps of the pad with incremented ref-count
+ *
+ * Since: 0.10.35
+ */
+GstCaps *
+gst_proxy_pad_getcaps_default (GstPad * pad, GstCaps * filter)
 {
-  GstPad *target = gst_proxy_pad_get_target (pad);
+  GstPad *target;
   GstCaps *res;
-  GstPadTemplate *templ = GST_PAD_PAD_TEMPLATE (pad);
+  GstPadTemplate *templ;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
+
+  templ = GST_PAD_PAD_TEMPLATE (pad);
+  target = gst_proxy_pad_get_target (pad);
   if (target) {
     /* if we have a real target, proxy the call */
     res = gst_pad_get_caps (target, filter);
@@ -245,12 +384,27 @@
   return res;
 }
 
-static gboolean
-gst_proxy_pad_do_acceptcaps (GstPad * pad, GstCaps * caps)
+/**
+ * gst_proxy_pad_acceptcaps_default:
+ * @pad: a #GstPad to check
+ * @caps: a #GstCaps to check on the pad
+ *
+ * Invoke the default acceptcaps function of the proxy pad.
+ *
+ * Returns: TRUE if the pad can accept the caps.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_proxy_pad_acceptcaps_default (GstPad * pad, GstCaps * caps)
 {
-  GstPad *target = gst_proxy_pad_get_target (pad);
+  GstPad *target;
   gboolean res;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
+  g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE);
+
+  target = gst_proxy_pad_get_target (pad);
   if (target) {
     res = gst_pad_accept_caps (target, caps);
     gst_object_unref (target);
@@ -263,23 +417,52 @@
   return res;
 }
 
-static void
-gst_proxy_pad_do_fixatecaps (GstPad * pad, GstCaps * caps)
+/**
+ * gst_proxy_pad_fixatecaps_default:
+ * @pad: a  #GstPad to fixate
+ * @caps: the  #GstCaps to fixate
+ *
+ * Invoke the default fixatecaps function of the proxy pad.
+ *
+ * Since: 0.10.35
+ */
+void
+gst_proxy_pad_fixatecaps_default (GstPad * pad, GstCaps * caps)
 {
-  GstPad *target = gst_proxy_pad_get_target (pad);
+  GstPad *target;
 
+  g_return_if_fail (GST_IS_PROXY_PAD (pad));
+  g_return_if_fail (GST_IS_CAPS (caps));
+
+  target = gst_proxy_pad_get_target (pad);
   if (target) {
     gst_pad_fixate_caps (target, caps);
     gst_object_unref (target);
   }
 }
 
-static gboolean
-gst_proxy_pad_do_setcaps (GstPad * pad, GstCaps * caps)
+/**
+ * gst_proxy_pad_setcaps_default:
+ * @pad: a  #GstPad to set the capabilities of.
+ * @caps: (transfer none): a #GstCaps to set.
+ *
+ * Invoke the default setcaps function of the proxy pad.
+ *
+ * Returns: TRUE if the caps could be set. FALSE if the caps were not fixed
+ * or bad parameters were provided to this function.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_proxy_pad_setcaps_default (GstPad * pad, GstCaps * caps)
 {
-  GstPad *target = gst_proxy_pad_get_target (pad);
+  GstPad *target;
   gboolean res;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
+  g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE);
+
+  target = gst_proxy_pad_get_target (pad);
   if (target) {
     res = gst_pad_set_caps (target, caps);
     gst_object_unref (target);
@@ -353,22 +536,46 @@
   return target;
 }
 
-static GstPad *
-gst_proxy_pad_get_internal (GstPad * pad)
+/**
+ * gst_proxy_pad_get_internal:
+ * @pad: the #GstProxyPad
+ *
+ * Get the internal pad of @pad. Unref target pad after usage.
+ *
+ * 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.
+ *
+ * Since: 0.10.35
+ */
+GstProxyPad *
+gst_proxy_pad_get_internal (GstProxyPad * pad)
 {
   GstPad *internal;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
+
   GST_PROXY_LOCK (pad);
   internal = GST_PROXY_PAD_INTERNAL (pad);
   if (internal)
     gst_object_ref (internal);
   GST_PROXY_UNLOCK (pad);
 
-  return internal;
+  return GST_PROXY_PAD_CAST (internal);
 }
 
-static void
-gst_proxy_pad_do_unlink (GstPad * pad)
+/**
+ * gst_proxy_pad_unlink_default:
+ * @pad: a #GstPad to unlink
+ *
+ * Invoke the default unlink function of the proxy pad.
+ *
+ * Since: 0.10.35
+ */
+void
+gst_proxy_pad_unlink_default (GstPad * pad)
 {
   GstPad *internal;
 
@@ -396,19 +603,19 @@
   gobject_class->finalize = gst_proxy_pad_finalize;
 
   /* Register common function pointer descriptions */
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_query_type);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_event);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_query);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_iterate_internal_links);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_getcaps);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_acceptcaps);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_fixatecaps);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_setcaps);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_unlink);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_chain);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_chain_list);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_getrange);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_checkgetrange);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_query_type_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_event_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_query_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_iterate_internal_links_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_getcaps_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_acceptcaps_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_fixatecaps_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_setcaps_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_unlink_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_chain_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_chain_list_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_getrange_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_checkgetrange_default);
 }
 
 static void
@@ -449,17 +656,17 @@
       GST_TYPE_PROXY_PAD, GstProxyPadPrivate);
   GST_PROXY_GET_LOCK (pad) = g_mutex_new ();
 
-  gst_pad_set_query_type_function (pad, gst_proxy_pad_do_query_type);
-  gst_pad_set_event_function (pad, gst_proxy_pad_do_event);
-  gst_pad_set_query_function (pad, gst_proxy_pad_do_query);
+  gst_pad_set_query_type_function (pad, gst_proxy_pad_query_type_default);
+  gst_pad_set_event_function (pad, gst_proxy_pad_event_default);
+  gst_pad_set_query_function (pad, gst_proxy_pad_query_default);
   gst_pad_set_iterate_internal_links_function (pad,
-      gst_proxy_pad_do_iterate_internal_links);
+      gst_proxy_pad_iterate_internal_links_default);
 
-  gst_pad_set_getcaps_function (pad, gst_proxy_pad_do_getcaps);
-  gst_pad_set_acceptcaps_function (pad, gst_proxy_pad_do_acceptcaps);
-  gst_pad_set_fixatecaps_function (pad, gst_proxy_pad_do_fixatecaps);
-  gst_pad_set_setcaps_function (pad, gst_proxy_pad_do_setcaps);
-  gst_pad_set_unlink_function (pad, gst_proxy_pad_do_unlink);
+  gst_pad_set_getcaps_function (pad, gst_proxy_pad_getcaps_default);
+  gst_pad_set_acceptcaps_function (pad, gst_proxy_pad_acceptcaps_default);
+  gst_pad_set_fixatecaps_function (pad, gst_proxy_pad_fixatecaps_default);
+  gst_pad_set_setcaps_function (pad, gst_proxy_pad_setcaps_default);
+  gst_pad_set_unlink_function (pad, gst_proxy_pad_unlink_default);
 }
 
 
@@ -482,13 +689,26 @@
 
 static void gst_ghost_pad_dispose (GObject * object);
 
-/* see gstghostpad design docs */
-static gboolean
-gst_ghost_pad_internal_do_activate_push (GstPad * pad, gboolean active)
+/**
+ * gst_ghost_pad_internal_activate_push_default:
+ * @pad: the #GstPad to activate or deactivate.
+ * @active: whether the pad should be active or not.
+ *
+ * Invoke the default activate push function of a proxy pad that is
+ * owned by a ghost pad.
+ *
+ * Returns: %TRUE if the operation was successful.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_ghost_pad_internal_activate_push_default (GstPad * pad, gboolean active)
 {
   gboolean ret;
   GstPad *other;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
+
   GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, we're ok",
       (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad));
 
@@ -500,12 +720,26 @@
   return ret;
 }
 
-static gboolean
-gst_ghost_pad_internal_do_activate_pull (GstPad * pad, gboolean active)
+/**
+ * gst_ghost_pad_internal_activate_pull_default:
+ * @pad: the #GstPad to activate or deactivate.
+ * @active: whether the pad should be active or not.
+ *
+ * Invoke the default activate pull function of a proxy pad that is
+ * owned by a ghost pad.
+ *
+ * Returns: %TRUE if the operation was successful.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_ghost_pad_internal_activate_pull_default (GstPad * pad, gboolean active)
 {
   gboolean ret;
   GstPad *other;
 
+  g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE);
+
   GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"),
       GST_DEBUG_PAD_NAME (pad));
 
@@ -513,7 +747,7 @@
     /* we are activated in pull mode by our peer element, which is a sinkpad
      * that wants to operate in pull mode. This activation has to propagate
      * upstream throught the pipeline. We call the internal activation function,
-     * which will trigger gst_ghost_pad_do_activate_pull, which propagates even
+     * which will trigger gst_ghost_pad_activate_pull_default, which propagates even
      * further upstream */
     GST_LOG_OBJECT (pad, "pad is src, activate internal");
     other = GST_PROXY_PAD_INTERNAL (pad);
@@ -533,12 +767,25 @@
   return ret;
 }
 
-static gboolean
-gst_ghost_pad_do_activate_push (GstPad * pad, gboolean active)
+/**
+ * gst_ghost_pad_activate_push_default:
+ * @pad: the #GstPad to activate or deactivate.
+ * @active: whether the pad should be active or not.
+ *
+ * Invoke the default activate push function of a ghost pad.
+ *
+ * Returns: %TRUE if the operation was successful.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_ghost_pad_activate_push_default (GstPad * pad, gboolean active)
 {
   gboolean ret;
   GstPad *other;
 
+  g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE);
+
   GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, proxy internal",
       (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad));
 
@@ -549,12 +796,25 @@
   return ret;
 }
 
-static gboolean
-gst_ghost_pad_do_activate_pull (GstPad * pad, gboolean active)
+/**
+ * gst_ghost_pad_activate_pull_default:
+ * @pad: the #GstPad to activate or deactivate.
+ * @active: whether the pad should be active or not.
+ *
+ * Invoke the default activate pull function of a ghost pad.
+ *
+ * Returns: %TRUE if the operation was successful.
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_ghost_pad_activate_pull_default (GstPad * pad, gboolean active)
 {
   gboolean ret;
   GstPad *other;
 
+  g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE);
+
   GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"),
       GST_DEBUG_PAD_NAME (pad));
 
@@ -580,12 +840,26 @@
   return ret;
 }
 
-static GstPadLinkReturn
-gst_ghost_pad_do_link (GstPad * pad, GstPad * peer)
+/**
+ * gst_ghost_pad_link_default:
+ * @pad: the #GstPad to link.
+ * @peer: the #GstPad peer
+ *
+ * Invoke the default link function of a ghost pad.
+ *
+ * Returns: #GstPadLinkReturn of the operation
+ *
+ * Since: 0.10.35
+ */
+GstPadLinkReturn
+gst_ghost_pad_link_default (GstPad * pad, GstPad * peer)
 {
   GstPadLinkReturn ret;
   GstPad *internal;
 
+  g_return_val_if_fail (GST_IS_GHOST_PAD (pad), GST_PAD_LINK_REFUSED);
+  g_return_val_if_fail (GST_IS_PAD (peer), GST_PAD_LINK_REFUSED);
+
   GST_DEBUG_OBJECT (pad, "linking ghostpad");
 
   internal = GST_PROXY_PAD_INTERNAL (pad);
@@ -619,11 +893,21 @@
   }
 }
 
-static void
-gst_ghost_pad_do_unlink (GstPad * pad)
+/**
+ * gst_ghost_pad_unlink_default:
+ * @pad: the #GstPad to link.
+ *
+ * Invoke the default unlink function of a ghost pad.
+ *
+ * Since: 0.10.35
+ */
+void
+gst_ghost_pad_unlink_default (GstPad * pad)
 {
   GstPad *internal;
 
+  g_return_if_fail (GST_IS_GHOST_PAD (pad));
+
   internal = GST_PROXY_PAD_INTERNAL (pad);
 
   GST_DEBUG_OBJECT (pad, "unlinking ghostpad");
@@ -722,31 +1006,27 @@
     gst_caps_unref (caps);
 }
 
-static gboolean
-gst_ghost_pad_do_setcaps (GstPad * pad, GstCaps * caps)
+/**
+ * gst_ghost_pad_setcaps_default:
+ * @pad: the #GstPad to link.
+ * @caps: (transfer none): the #GstCaps to set
+ *
+ * Invoke the default setcaps function of a ghost pad.
+ *
+ * Returns: %TRUE if the operation was successful
+ *
+ * Since: 0.10.35
+ */
+gboolean
+gst_ghost_pad_setcaps_default (GstPad * pad, GstCaps * caps)
 {
+  g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE);
+  g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE);
+
   if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC)
     return TRUE;
 
-  return gst_proxy_pad_do_setcaps (pad, caps);
-}
-
-static GstIterator *
-gst_ghost_pad_do_iterate_internal_links (GstPad * pad)
-{
-  GstIterator *res = NULL;
-  GstPad *internal = GST_PROXY_PAD_INTERNAL (GST_GHOST_PAD_CAST (pad));
-
-  if (internal) {
-    GValue v = { 0, };
-
-    g_value_init (&v, GST_TYPE_PAD);
-    g_value_set_object (&v, internal);
-    res = gst_iterator_new_single (GST_TYPE_PAD, &v);
-    g_value_unset (&v);
-  }
-
-  return res;
+  return gst_proxy_pad_setcaps_default (pad, caps);
 }
 
 static void
@@ -760,10 +1040,10 @@
 
   gobject_class->dispose = gst_ghost_pad_dispose;
 
-  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_setcaps);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_activate_pull);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_activate_push);
-  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_link);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_setcaps_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_activate_pull_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_activate_push_default);
+  GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_link_default);
 }
 
 static void
@@ -772,13 +1052,12 @@
   GST_GHOST_PAD_PRIVATE (pad) = G_TYPE_INSTANCE_GET_PRIVATE (pad,
       GST_TYPE_GHOST_PAD, GstGhostPadPrivate);
 
-  gst_pad_set_setcaps_function (GST_PAD_CAST (pad), gst_ghost_pad_do_setcaps);
+  gst_pad_set_setcaps_function (GST_PAD_CAST (pad),
+      gst_ghost_pad_setcaps_default);
   gst_pad_set_activatepull_function (GST_PAD_CAST (pad),
-      gst_ghost_pad_do_activate_pull);
+      gst_ghost_pad_activate_pull_default);
   gst_pad_set_activatepush_function (GST_PAD_CAST (pad),
-      gst_ghost_pad_do_activate_push);
-  gst_pad_set_iterate_internal_links_function (GST_PAD_CAST (pad),
-      gst_ghost_pad_do_iterate_internal_links);
+      gst_ghost_pad_activate_push_default);
 }
 
 static void
@@ -795,7 +1074,7 @@
   gst_ghost_pad_set_target (GST_GHOST_PAD (pad), NULL);
 
   /* Unlink here so that gst_pad_dispose doesn't. That would lead to a call to
-   * gst_ghost_pad_do_unlink when the ghost pad is in an inconsistent state */
+   * gst_ghost_pad_unlink_default when the ghost pad is in an inconsistent state */
   peer = gst_pad_get_peer (pad);
   if (peer) {
     if (GST_PAD_IS_SRC (pad))
@@ -859,16 +1138,17 @@
 
   /* Set directional padfunctions for ghostpad */
   if (dir == GST_PAD_SINK) {
-    gst_pad_set_chain_function (pad, gst_proxy_pad_do_chain);
-    gst_pad_set_chain_list_function (pad, gst_proxy_pad_do_chain_list);
+    gst_pad_set_chain_function (pad, gst_proxy_pad_chain_default);
+    gst_pad_set_chain_list_function (pad, gst_proxy_pad_chain_list_default);
   } else {
-    gst_pad_set_getrange_function (pad, gst_proxy_pad_do_getrange);
-    gst_pad_set_checkgetrange_function (pad, gst_proxy_pad_do_checkgetrange);
+    gst_pad_set_getrange_function (pad, gst_proxy_pad_getrange_default);
+    gst_pad_set_checkgetrange_function (pad,
+        gst_proxy_pad_checkgetrange_default);
   }
 
   /* link/unlink functions */
-  gst_pad_set_link_function (pad, gst_ghost_pad_do_link);
-  gst_pad_set_unlink_function (pad, gst_ghost_pad_do_unlink);
+  gst_pad_set_link_function (pad, gst_ghost_pad_link_default);
+  gst_pad_set_unlink_function (pad, gst_ghost_pad_unlink_default);
 
   /* INTERNAL PAD, it always exists and is child of the ghostpad */
   otherdir = (dir == GST_PAD_SRC) ? GST_PAD_SINK : GST_PAD_SRC;
@@ -887,12 +1167,13 @@
 
   /* Set directional padfunctions for internal pad */
   if (dir == GST_PAD_SRC) {
-    gst_pad_set_chain_function (internal, gst_proxy_pad_do_chain);
-    gst_pad_set_chain_list_function (internal, gst_proxy_pad_do_chain_list);
+    gst_pad_set_chain_function (internal, gst_proxy_pad_chain_default);
+    gst_pad_set_chain_list_function (internal,
+        gst_proxy_pad_chain_list_default);
   } else {
-    gst_pad_set_getrange_function (internal, gst_proxy_pad_do_getrange);
+    gst_pad_set_getrange_function (internal, gst_proxy_pad_getrange_default);
     gst_pad_set_checkgetrange_function (internal,
-        gst_proxy_pad_do_checkgetrange);
+        gst_proxy_pad_checkgetrange_default);
   }
 
   GST_PROXY_LOCK (pad);
@@ -924,9 +1205,9 @@
 
   /* special activation functions for the internal pad */
   gst_pad_set_activatepull_function (internal,
-      gst_ghost_pad_internal_do_activate_pull);
+      gst_ghost_pad_internal_activate_pull_default);
   gst_pad_set_activatepush_function (internal,
-      gst_ghost_pad_internal_do_activate_push);
+      gst_ghost_pad_internal_activate_push_default);
 
   GST_PROXY_UNLOCK (pad);
 
diff --git a/gst/gstghostpad.h b/gst/gstghostpad.h
index f492a74..37d27a2 100644
--- a/gst/gstghostpad.h
+++ b/gst/gstghostpad.h
@@ -59,6 +59,22 @@
 
 GType gst_proxy_pad_get_type (void);
 
+GstProxyPad*     gst_proxy_pad_get_internal     (GstProxyPad *pad);
+
+
+const GstQueryType* gst_proxy_pad_query_type_default             (GstPad *pad);
+gboolean            gst_proxy_pad_event_default                  (GstPad *pad, GstEvent *event);
+gboolean            gst_proxy_pad_query_default                  (GstPad *pad, GstQuery **query);
+GstIterator*        gst_proxy_pad_iterate_internal_links_default (GstPad *pad);
+GstFlowReturn       gst_proxy_pad_chain_default                  (GstPad *pad, GstBuffer *buf);
+GstFlowReturn       gst_proxy_pad_chain_list_default             (GstPad *pad, GstBufferList *list);
+GstFlowReturn       gst_proxy_pad_getrange_default               (GstPad *pad, guint64 offset, guint size, GstBuffer **buffer);
+gboolean            gst_proxy_pad_checkgetrange_default          (GstPad *pad);
+GstCaps*            gst_proxy_pad_getcaps_default                (GstPad *pad, GstCaps * filter);
+gboolean            gst_proxy_pad_acceptcaps_default             (GstPad *pad, GstCaps *caps);
+void                gst_proxy_pad_fixatecaps_default             (GstPad *pad, GstCaps *caps);
+gboolean            gst_proxy_pad_setcaps_default                (GstPad *pad, GstCaps *caps);
+void                gst_proxy_pad_unlink_default                 (GstPad * pad);
 
 #define GST_TYPE_GHOST_PAD		(gst_ghost_pad_get_type ())
 #define GST_IS_GHOST_PAD(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GHOST_PAD))
@@ -106,6 +122,15 @@
 
 gboolean	 gst_ghost_pad_construct	(GstGhostPad *gpad);
 
+gboolean         gst_ghost_pad_setcaps_default        (GstPad * pad, GstCaps * caps);
+void             gst_ghost_pad_unlink_default         (GstPad * pad);
+GstPadLinkReturn gst_ghost_pad_link_default           (GstPad * pad, GstPad * peer);
+gboolean         gst_ghost_pad_activate_pull_default  (GstPad * pad, gboolean active);
+gboolean         gst_ghost_pad_activate_push_default  (GstPad * pad, gboolean active);
+
+gboolean         gst_ghost_pad_internal_activate_push_default (GstPad * pad, gboolean active);
+gboolean         gst_ghost_pad_internal_activate_pull_default (GstPad * pad, gboolean active);
+
 G_END_DECLS
 
 #endif /* __GST_GHOST_PAD_H__ */
diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c
index 7ad8179..198325e 100644
--- a/gst/gstminiobject.c
+++ b/gst/gstminiobject.c
@@ -45,8 +45,8 @@
 static GstAllocTrace *_gst_mini_object_trace;
 #endif
 
-#define GST_MINI_OBJECT_GET_CLASS_UNCHECKED(obj) \
-    ((GstMiniObjectClass *) (((GTypeInstance*)(obj))->g_class))
+/* Mutex used for weak referencing */
+G_LOCK_DEFINE_STATIC (weak_refs_mutex);
 
 /* boxed copy and free functions. Don't real copy or free but simply
  * change the refcount */
@@ -109,6 +109,8 @@
   mini_object->refcount = 1;
   mini_object->flags = 0;
   mini_object->size = size;
+  mini_object->n_weak_refs = 0;
+  mini_object->weak_refs = NULL;
 }
 
 /**
@@ -223,6 +225,16 @@
   return mini_object;
 }
 
+static void
+weak_refs_notify (GstMiniObject * obj)
+{
+  guint i;
+
+  for (i = 0; i < obj->n_weak_refs; i++)
+    obj->weak_refs[i].notify (obj->weak_refs[i].data, obj);
+  g_free (obj->weak_refs);
+}
+
 /**
  * gst_mini_object_unref:
  * @mini_object: the mini-object
@@ -253,6 +265,10 @@
     /* decrement the refcount again, if the subclass recycled the object we don't
      * want to free the instance anymore */
     if (G_LIKELY (g_atomic_int_dec_and_test (&mini_object->refcount))) {
+      /* The weak reference stack is freed in the notification function */
+      if (mini_object->n_weak_refs)
+        weak_refs_notify (mini_object);
+
 #ifndef GST_DISABLE_TRACE
       gst_alloc_trace_free (_gst_mini_object_trace, mini_object);
 #endif
@@ -299,3 +315,95 @@
   if (olddata_val)
     gst_mini_object_unref (olddata_val);
 }
+
+/**
+ * gst_mini_object_weak_ref: (skip)
+ * @mini_object: #GstMiniObject to reference weakly
+ * @notify: callback to invoke before the mini object is freed
+ * @data: extra data to pass to notify
+ *
+ * Adds a weak reference callback to a mini object. Weak references are
+ * used for notification when a mini object is finalized. They are called
+ * "weak references" because they allow you to safely hold a pointer
+ * to the mini object without calling gst_mini_object_ref()
+ * (gst_mini_object_ref() adds a strong reference, that is, forces the object
+ * to stay alive).
+ *
+ * Since: 0.10.35
+ */
+void
+gst_mini_object_weak_ref (GstMiniObject * object,
+    GstMiniObjectWeakNotify notify, gpointer data)
+{
+  guint i;
+
+  g_return_if_fail (object != NULL);
+  g_return_if_fail (notify != NULL);
+  g_return_if_fail (GST_MINI_OBJECT_REFCOUNT_VALUE (object) >= 1);
+
+  G_LOCK (weak_refs_mutex);
+
+  if (object->n_weak_refs) {
+    /* Don't add the weak reference if it already exists. */
+    for (i = 0; i < object->n_weak_refs; i++) {
+      if (object->weak_refs[i].notify == notify &&
+          object->weak_refs[i].data == data) {
+        g_warning ("%s: Attempt to re-add existing weak ref %p(%p) failed.",
+            G_STRFUNC, notify, data);
+        goto found;
+      }
+    }
+
+    i = object->n_weak_refs++;
+    object->weak_refs =
+        g_realloc (object->weak_refs, sizeof (object->weak_refs[0]) * i);
+  } else {
+    object->weak_refs = g_malloc0 (sizeof (object->weak_refs[0]));
+    object->n_weak_refs = 1;
+    i = 0;
+  }
+  object->weak_refs[i].notify = notify;
+  object->weak_refs[i].data = data;
+found:
+  G_UNLOCK (weak_refs_mutex);
+}
+
+/**
+ * gst_mini_object_weak_unref: (skip)
+ * @mini_object: #GstMiniObject to remove a weak reference from
+ * @notify: callback to search for
+ * @data: data to search for
+ *
+ * Removes a weak reference callback to a mini object.
+ *
+ * Since: 0.10.35
+ */
+void
+gst_mini_object_weak_unref (GstMiniObject * object,
+    GstMiniObjectWeakNotify notify, gpointer data)
+{
+  gboolean found_one = FALSE;
+
+  g_return_if_fail (object != NULL);
+  g_return_if_fail (notify != NULL);
+
+  G_LOCK (weak_refs_mutex);
+
+  if (object->n_weak_refs) {
+    guint i;
+
+    for (i = 0; i < object->n_weak_refs; i++)
+      if (object->weak_refs[i].notify == notify &&
+          object->weak_refs[i].data == data) {
+        found_one = TRUE;
+        object->n_weak_refs -= 1;
+        if (i != object->n_weak_refs)
+          object->weak_refs[i] = object->weak_refs[object->n_weak_refs];
+
+        break;
+      }
+  }
+  G_UNLOCK (weak_refs_mutex);
+  if (!found_one)
+    g_warning ("%s: couldn't find weak ref %p(%p)", G_STRFUNC, notify, data);
+}
diff --git a/gst/gstminiobject.h b/gst/gstminiobject.h
index fe0a1aa..ff69eb6 100644
--- a/gst/gstminiobject.h
+++ b/gst/gstminiobject.h
@@ -65,6 +65,22 @@
  */
 typedef void (*GstMiniObjectFreeFunction) (GstMiniObject *obj);
 
+ /**
+ * GstMiniObjectWeakNotify:
+ * @data: data that was provided when the weak reference was established
+ * @where_the_mini_object_was: the mini object being finalized
+ * 
+ * A #GstMiniObjectWeakNotify function can be added to a mini object as a
+ * callback that gets triggered when the mini object is finalized. Since the
+ * mini object is already being finalized when the #GstMiniObjectWeakNotify is
+ * called, there's not much you could do with the object, apart from e.g. using
+ * its adress as hash-index or the like.
+ *
+ * Since: 0.10.35
+ */
+typedef void (*GstMiniObjectWeakNotify) (gpointer data,
+    GstMiniObject * where_the_mini_object_was);
+
 /**
  * GST_MINI_OBJECT_FLAGS:
  * @obj: MiniObject to return flags for.
@@ -165,6 +181,15 @@
   GstMiniObjectCopyFunction copy;
   GstMiniObjectDisposeFunction dispose;
   GstMiniObjectFreeFunction free;
+
+  /* < private > */
+  /* Used to keep track of weak ref notifies */
+  guint n_weak_refs;
+  struct
+  {
+    GstMiniObjectWeakNotify notify;
+    gpointer data;
+  } *weak_refs;
 };
 
 GType           gst_mini_object_register        (const gchar *name);
@@ -180,6 +205,13 @@
 GstMiniObject*	gst_mini_object_ref		(GstMiniObject *mini_object);
 void		gst_mini_object_unref		(GstMiniObject *mini_object);
 
+void	        gst_mini_object_weak_ref        (GstMiniObject *object,
+					         GstMiniObjectWeakNotify notify,
+					         gpointer data);
+void	        gst_mini_object_weak_unref	(GstMiniObject *object,
+					         GstMiniObjectWeakNotify notify,
+					         gpointer data);
+
 void		gst_mini_object_replace         (GstMiniObject **olddata, GstMiniObject *newdata);
 
 
diff --git a/gst/gstsystemclock.c b/gst/gstsystemclock.c
index 45d1269..fbd4c3b 100644
--- a/gst/gstsystemclock.c
+++ b/gst/gstsystemclock.c
@@ -326,9 +326,16 @@
   if (sysclock->priv->wakeup_count == 0) {
     GST_CAT_DEBUG (GST_CAT_CLOCK, "writing control");
     while (!gst_poll_write_control (sysclock->priv->timer)) {
-      g_warning
-          ("gstsystemclock: write control failed in wakeup_async, trying again : %d:%s\n",
-          errno, g_strerror (errno));
+      if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
+        g_warning
+            ("gstsystemclock: write control failed in wakeup_async, trying again: %d:%s\n",
+            errno, g_strerror (errno));
+      } else {
+        g_critical
+            ("gstsystemclock: write control failed in wakeup_async: %d:%s\n",
+            errno, g_strerror (errno));
+        return;
+      }
     }
   }
   sysclock->priv->wakeup_count++;
diff --git a/gstreamer.doap b/gstreamer.doap
index 041e8f3..807322b 100644
--- a/gstreamer.doap
+++ b/gstreamer.doap
@@ -40,6 +40,28 @@
 
  <release>
   <Version>
+   <revision>0.10.34</revision>
+   <branch>0.10</branch>
+   <name>Misfits</name>
+   <created>2011-05-13</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.34.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.34.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.33</revision>
+   <branch>0.10</branch>
+   <name>Prior Spaceflight Experience is an Advantage</name>
+   <created>2011-05-10</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.33.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.33.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>0.10.32</revision>
    <branch>0.10</branch>
    <name>Take Me to the Bonus Level</name>
diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c
index 7c3407b..88b06e3 100644
--- a/libs/gst/base/gstbasesrc.c
+++ b/libs/gst/base/gstbasesrc.c
@@ -2112,7 +2112,7 @@
 
   /* no timestamp set and we are at offset 0, we can timestamp with 0 */
   if (offset == 0 && src->segment.time == 0
-      && GST_BUFFER_TIMESTAMP (*buf) == -1) {
+      && GST_BUFFER_TIMESTAMP (*buf) == -1 && !src->is_live) {
     *buf = gst_buffer_make_writable (*buf);
     GST_BUFFER_TIMESTAMP (*buf) = 0;
   }
diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c
index 661557b..3e11605 100644
--- a/plugins/elements/gstinputselector.c
+++ b/plugins/elements/gstinputselector.c
@@ -95,9 +95,12 @@
 {
   PROP_0,
   PROP_N_PADS,
-  PROP_ACTIVE_PAD
+  PROP_ACTIVE_PAD,
+  PROP_SYNC_STREAMS
 };
 
+#define DEFAULT_SYNC_STREAMS FALSE
+
 #define DEFAULT_PAD_ALWAYS_OK TRUE
 
 enum
@@ -520,6 +523,105 @@
   return self->flushing;
 }
 
+/* must be called with the SELECTOR_LOCK, will block until the running time
+ * of the active pad is after this pad or return TRUE when flushing */
+static gboolean
+gst_input_selector_wait_running_time (GstInputSelector * sel,
+    GstSelectorPad * pad, GstBuffer * buf)
+{
+  GstPad *active_sinkpad;
+  GstSelectorPad *active_selpad;
+  GstSegment *seg, *active_seg;
+  GstClockTime running_time, active_running_time = -1;
+
+  seg = &pad->segment;
+
+  active_sinkpad =
+      gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (pad));
+  active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad);
+  active_seg = &active_selpad->segment;
+
+  /* We can only sync if the segments are in time format or
+   * if the active pad had no newsegment event yet */
+  if (seg->format != GST_FORMAT_TIME ||
+      (active_seg->format != GST_FORMAT_TIME
+          && active_seg->format != GST_FORMAT_UNDEFINED))
+    return FALSE;
+
+  /* If we have no valid timestamp we can't sync this buffer */
+  if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf))
+    return FALSE;
+
+  running_time = GST_BUFFER_TIMESTAMP (buf);
+  /* If possible try to get the running time at the end of the buffer */
+  if (GST_BUFFER_DURATION_IS_VALID (buf))
+    running_time += GST_BUFFER_DURATION (buf);
+  if (running_time > seg->stop)
+    running_time = seg->stop;
+  running_time =
+      gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time);
+  /* If this is outside the segment don't sync */
+  if (running_time == -1)
+    return FALSE;
+
+  /* Get active pad's running time, if no configured segment yet keep at -1 */
+  if (active_seg->format == GST_FORMAT_TIME)
+    active_running_time =
+        gst_segment_to_running_time (active_seg, GST_FORMAT_TIME,
+        active_seg->position);
+
+  /* Wait until
+   *   a) this is the active pad
+   *   b) the pad or the selector is flushing
+   *   c) the selector is not blocked
+   *   d) the active pad has no running time or the active
+   *      pad's running time is before this running time
+   *   e) the active pad has a non-time segment
+   */
+  while (pad != active_selpad && !sel->flushing && !pad->flushing &&
+      (sel->blocked || active_running_time == -1
+          || running_time >= active_running_time)) {
+    if (!sel->blocked)
+      GST_DEBUG_OBJECT (pad,
+          "Waiting for active streams to advance. %" GST_TIME_FORMAT " >= %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (running_time),
+          GST_TIME_ARGS (active_running_time));
+
+    GST_INPUT_SELECTOR_WAIT (sel);
+
+    /* Get new active pad, it might have changed */
+    active_sinkpad =
+        gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (pad));
+    active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad);
+    active_seg = &active_selpad->segment;
+
+    /* If the active segment is configured but not to time format
+     * we can't do any syncing at all */
+    if (active_seg->format != GST_FORMAT_TIME
+        && active_seg->format != GST_FORMAT_UNDEFINED)
+      break;
+
+    /* Get the new active pad running time */
+    if (active_seg->format == GST_FORMAT_TIME)
+      active_running_time =
+          gst_segment_to_running_time (active_seg, GST_FORMAT_TIME,
+          active_seg->position);
+    else
+      active_running_time = -1;
+
+    if (!sel->blocked)
+      GST_DEBUG_OBJECT (pad,
+          "Waited for active streams to advance. %" GST_TIME_FORMAT " >= %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (running_time),
+          GST_TIME_ARGS (active_running_time));
+
+  }
+
+  /* Return TRUE if the selector or the pad is flushing */
+  return (sel->flushing || pad->flushing);
+}
+
+
 static GstFlowReturn
 gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
 {
@@ -549,6 +651,16 @@
   prev_active_sinkpad = sel->active_sinkpad;
   active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
 
+  /* In sync mode wait until the active pad has advanced
+   * after the running time of the current buffer */
+  if (sel->sync_streams && active_sinkpad != pad) {
+    if (gst_input_selector_wait_running_time (sel, selpad, buf))
+      goto flushing;
+  }
+
+  /* Might have changed while waiting */
+  active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+
   /* update the segment on the srcpad */
   start_time = GST_BUFFER_TIMESTAMP (buf);
   if (GST_CLOCK_TIME_IS_VALID (start_time)) {
@@ -567,6 +679,10 @@
   if (pad != active_sinkpad)
     goto ignore;
 
+  /* Tell all non-active pads that we advanced the running time */
+  if (sel->sync_streams)
+    GST_INPUT_SELECTOR_BROADCAST (sel);
+
   /* if we have a pending segment, push it out now */
   if (G_UNLIKELY (selpad->segment_pending)) {
     GST_DEBUG_OBJECT (pad,
@@ -764,6 +880,21 @@
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
+   * GstInputSelector:sync-streams
+   *
+   * If set to %TRUE all inactive streams will be synced to the
+   * running time of the active stream. This makes sure that no
+   * buffers are dropped by input-selector that might be needed
+   * when switching the active pad.
+   *
+   * Since: 0.10.35
+   */
+  g_object_class_install_property (gobject_class, PROP_SYNC_STREAMS,
+      g_param_spec_boolean ("sync-streams", "Sync Streams",
+          "Synchronize inactive streams to the running time of the active stream",
+          DEFAULT_SYNC_STREAMS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
    * GstInputSelector::block:
    * @inputselector: the #GstInputSelector
    *
@@ -864,6 +995,7 @@
   sel->active_sinkpad = NULL;
   sel->padcount = 0;
   gst_segment_init (&sel->segment, GST_FORMAT_UNDEFINED);
+  sel->sync_streams = DEFAULT_SYNC_STREAMS;
 
   sel->lock = g_mutex_new ();
   sel->cond = g_cond_new ();
@@ -979,6 +1111,12 @@
 
   active_pad_p = &self->active_sinkpad;
   gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad));
+
+  /* Wake up all non-active pads in sync mode, they might be
+   * the active pad now */
+  if (self->sync_streams)
+    GST_INPUT_SELECTOR_BROADCAST (self);
+
   GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT,
       self->active_sinkpad);
 
@@ -1004,6 +1142,13 @@
       GST_INPUT_SELECTOR_UNLOCK (sel);
       break;
     }
+    case PROP_SYNC_STREAMS:
+    {
+      GST_INPUT_SELECTOR_LOCK (sel);
+      sel->sync_streams = g_value_get_boolean (value);
+      GST_INPUT_SELECTOR_UNLOCK (sel);
+      break;
+    }
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1027,6 +1172,11 @@
       g_value_set_object (value, sel->active_sinkpad);
       GST_INPUT_SELECTOR_UNLOCK (object);
       break;
+    case PROP_SYNC_STREAMS:
+      GST_INPUT_SELECTOR_LOCK (object);
+      g_value_set_boolean (value, sel->sync_streams);
+      GST_INPUT_SELECTOR_UNLOCK (object);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h
index 0ed7a4b..f370999 100644
--- a/plugins/elements/gstinputselector.h
+++ b/plugins/elements/gstinputselector.h
@@ -56,6 +56,7 @@
   GstPad *active_sinkpad;
   guint n_pads;
   guint padcount;
+  gboolean sync_streams;
 
   GstSegment segment;      /* the output segment */
   gboolean pending_close;  /* if we should push a close first */
diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c
index 3139df3..233225d 100644
--- a/plugins/elements/gstmultiqueue.c
+++ b/plugins/elements/gstmultiqueue.c
@@ -156,6 +156,8 @@
   guint32 nextid;               /* ID of the next object waiting to be pushed */
   guint32 oldid;                /* ID of the last object pushed (last in a series) */
   guint32 last_oldid;           /* Previously observed old_id, reset to MAXUINT32 on flush */
+  GstClockTime next_time;       /* End running time of next buffer to be pushed */
+  GstClockTime last_time;       /* Start running time of last pushed buffer */
   GCond *turn;                  /* SingleQueue turn waiting conditional */
 };
 
@@ -179,6 +181,7 @@
 
 static void wake_up_next_non_linked (GstMultiQueue * mq);
 static void compute_high_id (GstMultiQueue * mq);
+static void compute_high_time (GstMultiQueue * mq);
 static void single_queue_overrun_cb (GstDataQueue * dq, GstSingleQueue * sq);
 static void single_queue_underrun_cb (GstDataQueue * dq, GstSingleQueue * sq);
 
@@ -224,6 +227,7 @@
 #define DEFAULT_USE_BUFFERING FALSE
 #define DEFAULT_LOW_PERCENT   10
 #define DEFAULT_HIGH_PERCENT  99
+#define DEFAULT_SYNC_BY_RUNNING_TIME FALSE
 
 enum
 {
@@ -237,6 +241,7 @@
   PROP_USE_BUFFERING,
   PROP_LOW_PERCENT,
   PROP_HIGH_PERCENT,
+  PROP_SYNC_BY_RUNNING_TIME,
   PROP_LAST
 };
 
@@ -382,6 +387,22 @@
           "High threshold for buffering to finish", 0, 100,
           DEFAULT_HIGH_PERCENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  /**
+   * GstMultiQueue:sync-by-running-time
+   * 
+   * If enabled multiqueue will synchronize deactivated or not-linked streams
+   * to the activated and linked streams by taking the running time.
+   * Otherwise multiqueue will synchronize the deactivated or not-linked
+   * streams by keeping the order in which buffers and events arrived compared
+   * to active and linked streams.
+   *
+   * Since: 0.10.35
+   */
+  g_object_class_install_property (gobject_class, PROP_SYNC_BY_RUNNING_TIME,
+      g_param_spec_boolean ("sync-by-running-time", "Sync By Running Time",
+          "Synchronize deactivated or not-linked streams by running time",
+          DEFAULT_SYNC_BY_RUNNING_TIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   gobject_class->finalize = gst_multi_queue_finalize;
 
@@ -419,8 +440,11 @@
   mqueue->low_percent = DEFAULT_LOW_PERCENT;
   mqueue->high_percent = DEFAULT_HIGH_PERCENT;
 
+  mqueue->sync_by_running_time = DEFAULT_SYNC_BY_RUNNING_TIME;
+
   mqueue->counter = 1;
   mqueue->highid = -1;
+  mqueue->high_time = GST_CLOCK_TIME_NONE;
 
   mqueue->qlock = g_mutex_new ();
 }
@@ -493,6 +517,9 @@
     case PROP_HIGH_PERCENT:
       mq->high_percent = g_value_get_int (value);
       break;
+    case PROP_SYNC_BY_RUNNING_TIME:
+      mq->sync_by_running_time = g_value_get_boolean (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -535,6 +562,9 @@
     case PROP_HIGH_PERCENT:
       g_value_set_int (value, mq->high_percent);
       break;
+    case PROP_SYNC_BY_RUNNING_TIME:
+      g_value_set_boolean (value, mq->sync_by_running_time);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -737,8 +767,15 @@
     sq->nextid = 0;
     sq->oldid = 0;
     sq->last_oldid = G_MAXUINT32;
+    sq->next_time = GST_CLOCK_TIME_NONE;
+    sq->last_time = GST_CLOCK_TIME_NONE;
     gst_data_queue_set_flushing (sq->queue, FALSE);
 
+    /* Reset high time to be recomputed next */
+    GST_MULTI_QUEUE_MUTEX_LOCK (mq);
+    mq->high_time = GST_CLOCK_TIME_NONE;
+    GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
+
     sq->flushing = FALSE;
 
     GST_LOG_OBJECT (mq, "SingleQueue %d : starting task", sq->id);
@@ -932,6 +969,63 @@
   GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
 }
 
+static GstClockTime
+get_running_time (GstSegment * segment, GstMiniObject * object, gboolean end)
+{
+  GstClockTime time = GST_CLOCK_TIME_NONE;
+
+  if (GST_IS_BUFFER (object)) {
+    GstBuffer *buf = GST_BUFFER_CAST (object);
+
+    if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+      time = GST_BUFFER_TIMESTAMP (buf);
+      if (end && GST_BUFFER_DURATION_IS_VALID (buf))
+        time += GST_BUFFER_DURATION (buf);
+      if (time > segment->stop)
+        time = segment->stop;
+      time = gst_segment_to_running_time (segment, GST_FORMAT_TIME, time);
+    }
+  } else if (GST_IS_BUFFER_LIST (object)) {
+    GstBufferList *list = GST_BUFFER_LIST_CAST (object);
+    gint i, n;
+    GstBuffer *buf;
+
+    n = gst_buffer_list_len (list);
+    for (i = 0; i < n; i++) {
+      buf = gst_buffer_list_get (list, i);
+      if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+        time = GST_BUFFER_TIMESTAMP (buf);
+        if (end && GST_BUFFER_DURATION_IS_VALID (buf))
+          time += GST_BUFFER_DURATION (buf);
+        if (time > segment->stop)
+          time = segment->stop;
+        time = gst_segment_to_running_time (segment, GST_FORMAT_TIME, time);
+        if (!end)
+          goto done;
+      } else if (!end) {
+        goto done;
+      }
+    }
+  } else if (GST_IS_EVENT (object)) {
+    GstEvent *event = GST_EVENT_CAST (object);
+
+    /* For newsegment events return the running time of the start position */
+    if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+      GstSegment new_segment = *segment;
+
+      gst_event_parse_segment (event, &new_segment);
+      if (new_segment.format == GST_FORMAT_TIME) {
+        time =
+            gst_segment_to_running_time (&new_segment, GST_FORMAT_TIME,
+            new_segment.start);
+      }
+    }
+  }
+
+done:
+  return time;
+}
+
 static GstFlowReturn
 gst_single_queue_push_one (GstMultiQueue * mq, GstSingleQueue * sq,
     GstMiniObject * object)
@@ -1070,6 +1164,7 @@
   GstMiniObject *object = NULL;
   guint32 newid;
   GstFlowReturn result;
+  GstClockTime next_time;
 
   sq = (GstSingleQueue *) gst_pad_get_element_private (pad);
   mq = sq->mqueue;
@@ -1091,6 +1186,9 @@
   object = gst_multi_queue_item_steal_object (item);
   gst_multi_queue_item_destroy (item);
 
+  /* Get running time of the item. Events will have GST_CLOCK_TIME_NONE */
+  next_time = get_running_time (&sq->src_segment, object, TRUE);
+
   GST_LOG_OBJECT (mq, "SingleQueue %d : newid:%d , oldid:%d",
       sq->id, newid, sq->last_oldid);
 
@@ -1099,9 +1197,9 @@
    * or it's the first loop, or we just passed the previous highid, 
    * we might need to wake some sleeping pad up, so there's extra work 
    * there too */
-  if (sq->srcresult == GST_FLOW_NOT_LINKED ||
-      (sq->last_oldid == G_MAXUINT32) || (newid != (sq->last_oldid + 1)) ||
-      sq->last_oldid > mq->highid) {
+  if (sq->srcresult == GST_FLOW_NOT_LINKED
+      || (sq->last_oldid == G_MAXUINT32) || (newid != (sq->last_oldid + 1))
+      || sq->last_oldid > mq->highid) {
     GST_LOG_OBJECT (mq, "CHECKING sq->srcresult: %s",
         gst_flow_get_name (sq->srcresult));
 
@@ -1116,6 +1214,7 @@
 
     /* Update the nextid so other threads know when to wake us up */
     sq->nextid = newid;
+    sq->next_time = next_time;
 
     /* Update the oldid (the last ID we output) for highid tracking */
     if (sq->last_oldid != G_MAXUINT32)
@@ -1126,10 +1225,20 @@
 
       /* Recompute the highid */
       compute_high_id (mq);
-      while (newid > mq->highid && sq->srcresult == GST_FLOW_NOT_LINKED) {
-        GST_DEBUG_OBJECT (mq, "queue %d sleeping for not-linked wakeup with "
-            "newid %u and highid %u", sq->id, newid, mq->highid);
+      /* Recompute the high time */
+      compute_high_time (mq);
 
+      while (((mq->sync_by_running_time && next_time != GST_CLOCK_TIME_NONE &&
+                  (mq->high_time == GST_CLOCK_TIME_NONE
+                      || next_time >= mq->high_time))
+              || (!mq->sync_by_running_time && newid > mq->highid))
+          && sq->srcresult == GST_FLOW_NOT_LINKED) {
+
+        GST_DEBUG_OBJECT (mq,
+            "queue %d sleeping for not-linked wakeup with "
+            "newid %u, highid %u, next_time %" GST_TIME_FORMAT
+            ", high_time %" GST_TIME_FORMAT, sq->id, newid, mq->highid,
+            GST_TIME_ARGS (next_time), GST_TIME_ARGS (mq->high_time));
 
         /* Wake up all non-linked pads before we sleep */
         wake_up_next_non_linked (mq);
@@ -1143,8 +1252,13 @@
           goto out_flushing;
         }
 
+        /* Recompute the high time */
+        compute_high_time (mq);
+
         GST_DEBUG_OBJECT (mq, "queue %d woken from sleeping for not-linked "
-            "wakeup with newid %u and highid %u", sq->id, newid, mq->highid);
+            "wakeup with newid %u, highid %u, next_time %" GST_TIME_FORMAT
+            ", high_time %" GST_TIME_FORMAT, sq->id, newid, mq->highid,
+            GST_TIME_ARGS (next_time), GST_TIME_ARGS (mq->high_time));
       }
 
       /* Re-compute the high_id in case someone else pushed */
@@ -1154,8 +1268,9 @@
       /* Wake up all non-linked pads */
       wake_up_next_non_linked (mq);
     }
-    /* We're done waiting, we can clear the nextid */
+    /* We're done waiting, we can clear the nextid and nexttime */
     sq->nextid = 0;
+    sq->next_time = GST_CLOCK_TIME_NONE;
 
     GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
   }
@@ -1166,6 +1281,18 @@
   GST_LOG_OBJECT (mq, "BEFORE PUSHING sq->srcresult: %s",
       gst_flow_get_name (sq->srcresult));
 
+  /* Update time stats */
+  next_time = get_running_time (&sq->src_segment, object, FALSE);
+  if (next_time != GST_CLOCK_TIME_NONE) {
+    if (sq->last_time == GST_CLOCK_TIME_NONE || sq->last_time < next_time)
+      sq->last_time = next_time;
+    if (mq->high_time == GST_CLOCK_TIME_NONE || mq->high_time <= next_time) {
+      /* Wake up all non-linked pads now that we advanceed the high time */
+      mq->high_time = next_time;
+      wake_up_next_non_linked (mq);
+    }
+  }
+
   /* Try to push out the new object */
   result = gst_single_queue_push_one (mq, sq, object);
   sq->srcresult = result;
@@ -1179,6 +1306,7 @@
       gst_flow_get_name (sq->srcresult));
 
   sq->last_oldid = newid;
+
   return;
 
 out_flushing:
@@ -1499,7 +1627,10 @@
     GstSingleQueue *sq = (GstSingleQueue *) tmp->data;
 
     if (sq->srcresult == GST_FLOW_NOT_LINKED) {
-      if (sq->nextid != 0 && sq->nextid <= mq->highid) {
+      if ((mq->sync_by_running_time && mq->high_time != GST_CLOCK_TIME_NONE
+              && sq->next_time != GST_CLOCK_TIME_NONE
+              && sq->next_time >= mq->high_time)
+          || (sq->nextid != 0 && sq->nextid <= mq->highid)) {
         GST_LOG_OBJECT (mq, "Waking up singlequeue %d", sq->id);
         g_cond_signal (sq->turn);
       }
@@ -1550,6 +1681,49 @@
       lowest);
 }
 
+/* WITH LOCK TAKEN */
+static void
+compute_high_time (GstMultiQueue * mq)
+{
+  /* The high-id is either the highest id among the linked pads, or if all
+   * pads are not-linked, it's the lowest not-linked pad */
+  GList *tmp;
+  GstClockTime highest = GST_CLOCK_TIME_NONE;
+  GstClockTime lowest = GST_CLOCK_TIME_NONE;
+
+  for (tmp = mq->queues; tmp; tmp = g_list_next (tmp)) {
+    GstSingleQueue *sq = (GstSingleQueue *) tmp->data;
+
+    GST_LOG_OBJECT (mq,
+        "inspecting sq:%d , next_time:%" GST_TIME_FORMAT ", last_time:%"
+        GST_TIME_FORMAT ", srcresult:%s", sq->id, GST_TIME_ARGS (sq->next_time),
+        GST_TIME_ARGS (sq->last_time), gst_flow_get_name (sq->srcresult));
+
+    if (sq->srcresult == GST_FLOW_NOT_LINKED) {
+      /* No need to consider queues which are not waiting */
+      if (sq->next_time == GST_CLOCK_TIME_NONE) {
+        GST_LOG_OBJECT (mq, "sq:%d is not waiting - ignoring", sq->id);
+        continue;
+      }
+
+      if (lowest == GST_CLOCK_TIME_NONE || sq->next_time < lowest)
+        lowest = sq->next_time;
+    } else if (sq->srcresult != GST_FLOW_UNEXPECTED) {
+      /* If we don't have a global highid, or the global highid is lower than
+       * this single queue's last outputted id, store the queue's one, 
+       * unless the singlequeue is at EOS (srcresult = UNEXPECTED) */
+      if (highest == GST_CLOCK_TIME_NONE || sq->last_time > highest)
+        highest = sq->last_time;
+    }
+  }
+
+  mq->high_time = highest;
+
+  GST_LOG_OBJECT (mq,
+      "High time is now : %" GST_TIME_FORMAT ", lowest non-linked %"
+      GST_TIME_FORMAT, GST_TIME_ARGS (mq->high_time), GST_TIME_ARGS (lowest));
+}
+
 #define IS_FILLED(q, format, value) (((q)->max_size.format) != 0 && \
      ((q)->max_size.format) <= (value))
 
@@ -1738,8 +1912,6 @@
   sq->extra_size.bytes = mqueue->extra_size.bytes;
   sq->extra_size.time = mqueue->extra_size.time;
 
-  GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
-
   GST_DEBUG_OBJECT (mqueue, "Creating GstSingleQueue id:%d", sq->id);
 
   sq->mqueue = mqueue;
@@ -1755,6 +1927,8 @@
 
   sq->nextid = 0;
   sq->oldid = 0;
+  sq->next_time = GST_CLOCK_TIME_NONE;
+  sq->last_time = GST_CLOCK_TIME_NONE;
   sq->turn = g_cond_new ();
 
   sq->sinktime = GST_CLOCK_TIME_NONE;
@@ -1799,6 +1973,8 @@
   gst_pad_set_element_private (sq->sinkpad, (gpointer) sq);
   gst_pad_set_element_private (sq->srcpad, (gpointer) sq);
 
+  GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
+
   /* only activate the pads when we are not in the NULL state
    * and add the pad under the state_lock to prevend state changes
    * between activating and adding */
diff --git a/plugins/elements/gstmultiqueue.h b/plugins/elements/gstmultiqueue.h
index b9c28cd..bb3d840 100644
--- a/plugins/elements/gstmultiqueue.h
+++ b/plugins/elements/gstmultiqueue.h
@@ -50,6 +50,8 @@
 struct _GstMultiQueue {
   GstElement element;
 
+  gboolean sync_by_running_time;
+
   /* number of queues */
   guint	nbqueues;
 
@@ -65,6 +67,7 @@
 
   guint32  counter;	/* incoming object counter, use atomic accesses */
   guint32  highid;	/* contains highest id of last outputted object */
+  GstClockTime high_time; /* highest start running time */
 
   GMutex * qlock;	/* Global queue lock (vs object lock or individual */
 			/* queues lock). Protects nbqueues, queues, global */
diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c
index a1e85ff..7704aec 100644
--- a/plugins/elements/gstqueue2.c
+++ b/plugins/elements/gstqueue2.c
@@ -855,6 +855,7 @@
   queue->bytes_in = 0;
   queue->bytes_out = 0;
   queue->byte_in_rate = 0.0;
+  queue->byte_in_period = 0;
   queue->byte_out_rate = 0.0;
   queue->last_in_elapsed = 0.0;
   queue->last_out_elapsed = 0.0;
@@ -867,8 +868,11 @@
 /* Tuning for rate estimation. We use a large window for the input rate because
  * it should be stable when connected to a network. The output rate is less
  * stable (the elements preroll, queues behind a demuxer fill, ...) and should
- * therefore adapt more quickly. */
-#define AVG_IN(avg,val)  ((avg) * 15.0 + (val)) / 16.0
+ * therefore adapt more quickly.
+ * However, initial input rate may be subject to a burst, and should therefore
+ * initially also adapt more quickly to changes, and only later on give higher
+ * weight to previous values. */
+#define AVG_IN(avg,val,w1,w2)  ((avg) * (w1) + (val) * (w2)) / ((w1) + (w2))
 #define AVG_OUT(avg,val) ((avg) * 3.0 + (val)) / 4.0
 
 static void
@@ -890,14 +894,20 @@
     period = elapsed - queue->last_in_elapsed;
 
     GST_DEBUG_OBJECT (queue,
-        "rates: period %f, in %" G_GUINT64_FORMAT, period, queue->bytes_in);
+        "rates: period %f, in %" G_GUINT64_FORMAT ", global period %f",
+        period, queue->bytes_in, queue->byte_in_period);
 
     byte_in_rate = queue->bytes_in / period;
 
     if (queue->byte_in_rate == 0.0)
       queue->byte_in_rate = byte_in_rate;
     else
-      queue->byte_in_rate = AVG_IN (queue->byte_in_rate, byte_in_rate);
+      queue->byte_in_rate = AVG_IN (queue->byte_in_rate, byte_in_rate,
+          (double) queue->byte_in_period, period);
+
+    /* another data point, cap at 16 for long time running average */
+    if (queue->byte_in_period < 16 * RATE_INTERVAL)
+      queue->byte_in_period += period;
 
     /* reset the values to calculate rate over the next interval */
     queue->last_in_elapsed = elapsed;
diff --git a/plugins/elements/gstqueue2.h b/plugins/elements/gstqueue2.h
index 358b43a..ccbead6 100644
--- a/plugins/elements/gstqueue2.h
+++ b/plugins/elements/gstqueue2.h
@@ -116,6 +116,7 @@
   gdouble last_in_elapsed;
   guint64 bytes_in;
   gdouble byte_in_rate;
+  gdouble byte_in_period;
 
   GTimer *out_timer;
   gboolean out_timer_started;
diff --git a/po/af.po b/po/af.po
index f33ca75..a181e82 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2005-12-05 11:45+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
diff --git a/po/az.po b/po/az.po
index e5aa7ab..4ce2582 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2004-03-19 18:40+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/be.po b/po/be.po
index 3653b71..dbd76ab 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2006-01-18 22:26+0200\n"
 "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
 "Language-Team: Belarusian <i18n@mova.org>\n"
diff --git a/po/bg.po b/po/bg.po
index 0d297fe..4c9489d 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: 2011-04-27 11:27+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-04-26 22:40+0300\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
diff --git a/po/ca.po b/po/ca.po
index 0e7c959..0edb1bf 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-11-04 19:41+0100\n"
 "Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.po b/po/cs.po
index c4767ae..4e42da6 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.20.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2008-10-12 12:12+0200\n"
 "Last-Translator: Miloslav Trmac <mitr@volny.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
diff --git a/po/da.po b/po/da.po
index 5fade0e..813661a 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-11-06 22:52+0100\n"
 "Last-Translator: Mogens Jaeger <mogensjaeger@gmail.com>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.po b/po/de.po
index daa8371..cc8741a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-30 15:35+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-04-27 23:44+0200\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
diff --git a/po/el.po b/po/el.po
index 1aa662b..c4409ca 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-11-29 11:14+0200\n"
 "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.po b/po/en_GB.po
index ba81f68..f77ab29 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2004-04-26 10:36-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
diff --git a/po/es.po b/po/es.po
index 872b03f..c579819 100644
--- a/po/es.po
+++ b/po/es.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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-11-01 18:11+0100\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.po b/po/eu.po
index 663b9d9..529077f 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-03-25 13:10+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.po b/po/fi.po
index 2ec7471..1add3ba 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-11-17 23:10+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.po b/po/fr.po
index 4891afe..9641e77 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-30 15:35+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-04-28 09:34+0200\n"
 "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
diff --git a/po/gl.po b/po/gl.po
index 6bae3e8..a58aec8 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.31.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-04-13 05:19+0000\n"
 "Last-Translator: Francisco Diéguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/hu.po b/po/hu.po
index 205af59..74b2fd7 100644
--- a/po/hu.po
+++ b/po/hu.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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-11-01 13:39+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.po b/po/id.po
index 44da03d..ea40ed1 100644
--- a/po/id.po
+++ b/po/id.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-06-29 21:55+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.po b/po/it.po
index c041ecf..c48f670 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-10-25 10:03+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.po b/po/ja.po
index 33afbfa..dc0d8c5 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.20.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2008-10-16 19:57+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.po b/po/lt.po
index dcd575a..119cf67 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-07-16 00:50+0300\n"
 "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/nb.po b/po/nb.po
index af44e1c..0fd1f5b 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-10-24 21:36+0200\n"
 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
diff --git a/po/nl.po b/po/nl.po
index beea585..6596549 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-27 11:27+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-04-26 23:10+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.po b/po/pl.po
index 5f3860b..aa1e2db 100644
--- a/po/pl.po
+++ b/po/pl.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: 2011-04-27 11:27+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-04-26 17:54+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.po b/po/pt_BR.po
index f31bb9a..d144759 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -17,7 +17,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.31.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-01-08 01:36-0300\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
diff --git a/po/ro.po b/po/ro.po
index a0c0677..e7e7e3f 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-08-16 01:10+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.po b/po/ru.po
index 1ad44b1..2300900 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-27 11:27+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-04-26 20:25+0400\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@mx.ru>\n"
diff --git a/po/rw.po b/po/rw.po
index 8818bc8..6200b2f 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2005-04-04 10:55-0700\n"
 "Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
 "Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
diff --git a/po/sk.po b/po/sk.po
index cb9c00e..7c266a1 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-11-08 16:13+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.po b/po/sl.po
index ab5cfa6..20996f5 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-09-18 20:21+0100\n"
 "Last-Translator: Matej Urbančič <matej.urban@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.po b/po/sq.po
index dd89e54..2b35a23 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2004-08-07 23:46+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <begraj@hotmail.com>\n"
diff --git a/po/sr.po b/po/sr.po
index bc9d6ef..272ed70 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.8\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2005-01-27 16:58+0100\n"
 "Last-Translator: Danilo Segan <dsegan@gmx.net>\n"
 "Language-Team: Serbian <gnu@prevod.org>\n"
diff --git a/po/sv.po b/po/sv.po
index aaf92b0..adbde56 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.31.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2011-01-09 19:46+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.po b/po/tr.po
index 04c1941..a4c2a40 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2004-04-03 03:14+0300\n"
 "Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.po b/po/uk.po
index d2369c6..50b36d9 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.14\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2007-09-07 11:16+0300\n"
 "Last-Translator: Maxim V. Dziumanenko <dziumanenko@gmail.com>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.po b/po/vi.po
index cda9a34..d95c7a0 100644
--- a/po/vi.po
+++ b/po/vi.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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-10-03 19:09+1030\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 2c7a30e..daaf202 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: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2010-02-02 18:58+0800\n"
 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 4dafa17..4a83e21 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.8\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2011-04-16 14:53+0100\n"
+"POT-Creation-Date: 2011-05-10 08:32+0100\n"
 "PO-Revision-Date: 2005-04-27 14:55+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
diff --git a/tests/check/gst/gstghostpad.c b/tests/check/gst/gstghostpad.c
index b5034f1..a6ed29b 100644
--- a/tests/check/gst/gstghostpad.c
+++ b/tests/check/gst/gstghostpad.c
@@ -255,7 +255,7 @@
 GST_START_TEST (test_link)
 {
   GstElement *b1, *b2, *src, *sink;
-  GstPad *srcpad, *sinkpad, *gpad;
+  GstPad *srcpad, *sinkpad, *gpad, *ppad, *tmp;
   GstPadLinkReturn ret;
 
   b1 = gst_element_factory_make ("pipeline", NULL);
@@ -278,6 +278,14 @@
 
   /* now setup a ghostpad */
   gpad = gst_ghost_pad_new ("sink", sinkpad);
+
+  /* Check if the internal pads are set correctly */
+  ppad = GST_PAD (gst_proxy_pad_get_internal (GST_PROXY_PAD (gpad)));
+  fail_unless (ppad == GST_PAD_PEER (sinkpad));
+  tmp = GST_PAD (gst_proxy_pad_get_internal (GST_PROXY_PAD (ppad)));
+  fail_unless (tmp == gpad);
+  gst_object_unref (tmp);
+  gst_object_unref (ppad);
   gst_object_unref (sinkpad);
   /* need to ref as _add_pad takes ownership */
   gst_object_ref (gpad);
diff --git a/tests/check/gst/gstminiobject.c b/tests/check/gst/gstminiobject.c
index b4ffcb8..237f7e4 100644
--- a/tests/check/gst/gstminiobject.c
+++ b/tests/check/gst/gstminiobject.c
@@ -168,6 +168,33 @@
 
 GST_END_TEST;
 
+/* ======== weak ref test ======== */
+
+static gboolean weak_ref_notify_succeeded = FALSE;
+
+static void
+on_weak_ref_notify (gpointer data, GstMiniObject * where_object_was)
+{
+  weak_ref_notify_succeeded = TRUE;
+}
+
+GST_START_TEST (test_weak_ref)
+{
+  GstBuffer *buffer;
+
+  buffer = gst_buffer_new_and_alloc (4);
+
+  gst_mini_object_weak_ref (GST_MINI_OBJECT (buffer), on_weak_ref_notify,
+      &buffer);
+
+  gst_buffer_unref (buffer);
+
+  fail_unless (weak_ref_notify_succeeded,
+      "No weak reference notification took place.");
+}
+
+GST_END_TEST;
+
 #if 0
 /* ======== recycle test ======== */
 
@@ -434,6 +461,7 @@
   tcase_add_test (tc_chain, test_make_writable);
   tcase_add_test (tc_chain, test_ref_threaded);
   tcase_add_test (tc_chain, test_unref_threaded);
+  tcase_add_test (tc_chain, test_weak_ref);
   //tcase_add_test (tc_chain, test_recycle_threaded);
   tcase_add_test (tc_chain, test_value_collection);
   tcase_add_test (tc_chain, test_dup_null_mini_object);
diff --git a/win32/common/config.h b/win32/common/config.h
index fad9156..74e6fc4 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -59,13 +59,13 @@
 #define GST_MAJORMINOR "0.10"
 
 /* package name in plugins */
-#define GST_PACKAGE_NAME "GStreamer prerelease"
+#define GST_PACKAGE_NAME "GStreamer git"
 
 /* package origin */
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2011-04-30T14:22Z"
+#define GST_PACKAGE_RELEASE_DATETIME "2011-05-14T08:26Z"
 
 /* location of the installed gst-plugin-scanner */
 #define GST_PLUGIN_SCANNER_INSTALLED LIBDIR "\\gst-plugin-scanner"
@@ -340,7 +340,7 @@
 #define PACKAGE_NAME "GStreamer"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer 0.10.32.4"
+#define PACKAGE_STRING "GStreamer 0.10.34.1"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gstreamer"
@@ -349,7 +349,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "0.10.32.4"
+#define PACKAGE_VERSION "0.10.34.1"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -380,7 +380,7 @@
 #undef USE_POISONING
 
 /* Version number of package */
-#define VERSION "0.10.32.4"
+#define VERSION "0.10.34.1"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/win32/common/gstversion.h b/win32/common/gstversion.h
index 8b749c4..be93d1a 100644
--- a/win32/common/gstversion.h
+++ b/win32/common/gstversion.h
@@ -57,14 +57,14 @@
  *
  * The micro version of GStreamer at compile time:
  */
-#define GST_VERSION_MICRO (32)
+#define GST_VERSION_MICRO (34)
 /**
  * GST_VERSION_NANO:
  *
  * The nano version of GStreamer at compile time:
  * Actual releases have 0, GIT versions have 1, prerelease versions have 2-...
  */
-#define GST_VERSION_NANO (4)
+#define GST_VERSION_NANO (1)
 
 /**
  * GST_CHECK_VERSION:
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index 06969d0..e545769 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -436,14 +436,21 @@
 	gst_fraction_get_type
 	gst_fraction_range_get_type
 	gst_g_error_get_type
+	gst_ghost_pad_activate_pull_default
+	gst_ghost_pad_activate_push_default
 	gst_ghost_pad_construct
 	gst_ghost_pad_get_target
 	gst_ghost_pad_get_type
+	gst_ghost_pad_internal_activate_pull_default
+	gst_ghost_pad_internal_activate_push_default
+	gst_ghost_pad_link_default
 	gst_ghost_pad_new
 	gst_ghost_pad_new_from_template
 	gst_ghost_pad_new_no_target
 	gst_ghost_pad_new_no_target_from_template
 	gst_ghost_pad_set_target
+	gst_ghost_pad_setcaps_default
+	gst_ghost_pad_unlink_default
 	gst_implements_interface_cast
 	gst_implements_interface_check
 	gst_implements_interface_get_type
@@ -613,6 +620,8 @@
 	gst_mini_object_register
 	gst_mini_object_replace
 	gst_mini_object_unref
+	gst_mini_object_weak_ref
+	gst_mini_object_weak_unref
 	gst_object_check_uniqueness
 	gst_object_default_deep_notify
 	gst_object_default_error
@@ -827,7 +836,22 @@
 	gst_print_element_args
 	gst_print_pad_caps
 	gst_progress_type_get_type
+	gst_proxy_pad_acceptcaps_default
+	gst_proxy_pad_bufferalloc_default
+	gst_proxy_pad_chain_default
+	gst_proxy_pad_chain_list_default
+	gst_proxy_pad_checkgetrange_default
+	gst_proxy_pad_event_default
+	gst_proxy_pad_fixatecaps_default
+	gst_proxy_pad_get_internal
 	gst_proxy_pad_get_type
+	gst_proxy_pad_getcaps_default
+	gst_proxy_pad_getrange_default
+	gst_proxy_pad_iterate_internal_links_default
+	gst_proxy_pad_query_default
+	gst_proxy_pad_query_type_default
+	gst_proxy_pad_setcaps_default
+	gst_proxy_pad_unlink_default
 	gst_qos_type_get_type
 	gst_query_add_allocation_meta
 	gst_query_add_buffering_range