Merge branch '0.11' of ssh://git.freedesktop.org/git/gstreamer/gstreamer into 0.11
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 16 May 2011 14:54:02 +0000 (16:54 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 16 May 2011 14:54:02 +0000 (16:54 +0200)
67 files changed:
ChangeLog
NEWS
RELEASE
configure.ac
docs/gst/gstreamer-sections.txt
docs/plugins/gstreamer-plugins.args
docs/plugins/inspect/plugin-coreelements.xml
docs/plugins/inspect/plugin-coreindexers.xml
gst/gst_private.h
gst/gstbin.c
gst/gstelement.c
gst/gstelement.h
gst/gstghostpad.c
gst/gstghostpad.h
gst/gstminiobject.c
gst/gstminiobject.h
gst/gstsystemclock.c
gstreamer.doap
libs/gst/base/gstbasesrc.c
plugins/elements/gstinputselector.c
plugins/elements/gstinputselector.h
plugins/elements/gstmultiqueue.c
plugins/elements/gstmultiqueue.h
plugins/elements/gstqueue2.c
plugins/elements/gstqueue2.h
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
tests/check/gst/gstghostpad.c
tests/check/gst/gstminiobject.c
win32/common/config.h
win32/common/gstversion.h
win32/common/libgstreamer.def

index 23fa97e..e9e08dc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+=== release 0.10.34 ===
+
+2011-05-14  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         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  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+2011-01-21 10:25:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
 
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
        * configure.ac:
-         releasing 0.10.32, "Take Me to the Bonus Level"
+       * 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 (file)
--- 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 (file)
--- 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 @@ core of the GStreamer streaming media framework.
 
 
 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 @@ contains a set of less supported plug-ins that haven't passed the
 
 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 @@ subscribe to the gstreamer-devel list. If there is sufficient interest we
 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
  
index 8bd2cbd..dc9c33e 100644 (file)
@@ -48,7 +48,7 @@ dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
 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.
index 2ddca0c..311fb13 100644 (file)
@@ -933,14 +933,43 @@ gst_format_get_type
 <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 @@ GstMiniObjectFlags
 GstMiniObjectCopyFunction
 GstMiniObjectDisposeFunction
 GstMiniObjectFreeFunction
+GstMiniObjectWeakNotify
 
 GST_MINI_OBJECT_TYPE
 GST_MINI_OBJECT_FLAGS
@@ -1413,6 +1443,9 @@ gst_mini_object_make_writable
 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
 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
 
index c7f3571..5d965e6 100644 (file)
 </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>
 <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>
+
index b7ca01a..aef69a7 100644 (file)
@@ -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>
index 2ff2118..e8d2401 100644 (file)
@@ -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>
index cf0d152..13f2590 100644 (file)
@@ -51,6 +51,9 @@ extern const char             g_log_domain_gstreamer[];
 /* 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 @@ gboolean _gst_plugin_loader_client_run (void);
 
 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)
 
index 578c9db..b25f96b 100644 (file)
@@ -222,6 +222,8 @@ static void gst_bin_get_property (GObject * object, guint prop_id,
 
 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 @@ gst_bin_class_init (GstBinClass * klass)
 
   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 @@ static gboolean
 is_eos (GstBin * bin, guint32 * seqnum)
 {
   gboolean result;
+  gint n_eos = 0;
   GList *walk, *msgs;
 
   result = TRUE;
@@ -996,6 +1000,7 @@ is_eos (GstBin * bin, guint32 * seqnum)
               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 @@ is_eos (GstBin * bin, guint32 * seqnum)
       }
     }
   }
-  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 @@ activate_pads (const GValue * vpad, GValue * ret, gboolean * active)
   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 @@ gst_bin_do_latency_func (GstBin * bin)
   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 @@ state_end:
       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_bin_continue_func (BinContinueData * data)
   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 @@ bin_handle_async_start (GstBin * bin, gboolean new_base_time)
   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 @@ bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret,
   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 @@ bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret,
 
   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 @@ bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret,
     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 */
index d8afdbb..63b6dbc 100644 (file)
@@ -2227,6 +2227,28 @@ nothing_aborted:
   }
 }
 
+/* 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 @@ gst_element_continue_state (GstElement * element, GstStateChangeReturn ret)
   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_continue_state (GstElement * element, GstStateChangeReturn ret)
       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 @@ complete:
      * 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_lost_state (GstElement * element, gboolean new_base_time)
     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 @@ activate_pads (const GValue * vpad, GValue * ret, gboolean * active)
   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;
 }
 
index 7bd958c..fba69a6 100644 (file)
@@ -597,6 +597,7 @@ struct _GstElement
  * @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 @@ struct _GstElementClass
                                                  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);
index b33a241..8d6584e 100644 (file)
@@ -73,7 +73,6 @@ struct _GstProxyPadPrivate
 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 void on_src_target_notify (GstPad * target,
 
 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 @@ gst_proxy_pad_do_query_type (GstPad * pad)
   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 @@ gst_proxy_pad_do_event (GstPad * pad, GstEvent * event)
   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 @@ gst_proxy_pad_do_query (GstPad * pad, GstQuery ** query)
   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 @@ gst_proxy_pad_do_iterate_internal_links (GstPad * pad)
     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 @@ done:
   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 @@ gst_proxy_pad_do_acceptcaps (GstPad * pad, GstCaps * caps)
   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 @@ gst_proxy_pad_get_target (GstPad * pad)
   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 @@ gst_proxy_pad_class_init (GstProxyPadClass * klass)
   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_proxy_pad_init (GstProxyPad * ppad)
       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 @@ G_DEFINE_TYPE (GstGhostPad, gst_ghost_pad, GST_TYPE_PROXY_PAD);
 
 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 @@ gst_ghost_pad_internal_do_activate_push (GstPad * pad, gboolean active)
   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 @@ gst_ghost_pad_internal_do_activate_pull (GstPad * pad, gboolean active)
     /* 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 @@ gst_ghost_pad_internal_do_activate_pull (GstPad * pad, gboolean active)
   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 @@ gst_ghost_pad_do_activate_push (GstPad * pad, gboolean active)
   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 @@ gst_ghost_pad_do_activate_pull (GstPad * pad, gboolean active)
   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 @@ link_failed:
   }
 }
 
-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 @@ done:
     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 @@ gst_ghost_pad_class_init (GstGhostPadClass * klass)
 
   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_init (GstGhostPad * pad)
   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_dispose (GObject * object)
   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 @@ gst_ghost_pad_construct (GstGhostPad * gpad)
 
   /* 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 @@ gst_ghost_pad_construct (GstGhostPad * gpad)
 
   /* 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 @@ gst_ghost_pad_construct (GstGhostPad * gpad)
 
   /* 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);
 
index f492a74..37d27a2 100644 (file)
@@ -59,6 +59,22 @@ struct _GstProxyPadClass
 
 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_set_target       (GstGhostPad *gpad, GstPad *newtarget);
 
 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__ */
index 7ad8179..198325e 100644 (file)
@@ -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 @@ gst_mini_object_init (GstMiniObject * mini_object, GType type, gsize size)
   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 @@ gst_mini_object_ref (GstMiniObject * mini_object)
   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 @@ gst_mini_object_unref (GstMiniObject * mini_object)
     /* 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 @@ gst_mini_object_replace (GstMiniObject ** olddata, GstMiniObject * newdata)
   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);
+}
index fe0a1aa..ff69eb6 100644 (file)
@@ -65,6 +65,22 @@ typedef void (*GstMiniObjectDisposeFunction) (GstMiniObject *obj);
  */
 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 @@ struct _GstMiniObject {
   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_make_writable      (GstMiniObject *mini_object);
 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);
 
 
index 45d1269..fbd4c3b 100644 (file)
@@ -326,9 +326,16 @@ gst_system_clock_add_wakeup (GstSystemClock * sysclock)
   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++;
index 041e8f3..807322b 100644 (file)
@@ -40,6 +40,28 @@ hierarchy, and a set of media-agnostic core elements.
 
  <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>
index 7c3407b..88b06e3 100644 (file)
@@ -2112,7 +2112,7 @@ again:
 
   /* 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;
   }
index 661557b..3e11605 100644 (file)
@@ -95,9 +95,12 @@ enum
 {
   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 @@ gst_input_selector_wait (GstInputSelector * self, GstSelectorPad * pad)
   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 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
   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 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
   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 @@ gst_input_selector_class_init (GstInputSelectorClass * klass)
           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 @@ gst_input_selector_init (GstInputSelector * sel)
   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 @@ gst_input_selector_set_active_pad (GstInputSelector * self,
 
   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_set_property (GObject * object, guint prop_id,
       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 @@ gst_input_selector_get_property (GObject * object, guint prop_id,
       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;
index 0ed7a4b..f370999 100644 (file)
@@ -56,6 +56,7 @@ struct _GstInputSelector {
   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 */
index 3139df3..233225d 100644 (file)
@@ -156,6 +156,8 @@ struct _GstSingleQueue
   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 gst_single_queue_free (GstSingleQueue * squeue);
 
 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 @@ enum
 #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 @@ enum
   PROP_USE_BUFFERING,
   PROP_LOW_PERCENT,
   PROP_HIGH_PERCENT,
+  PROP_SYNC_BY_RUNNING_TIME,
   PROP_LAST
 };
 
@@ -382,6 +387,22 @@ gst_multi_queue_class_init (GstMultiQueueClass * klass)
           "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 @@ gst_multi_queue_init (GstMultiQueue * mqueue)
   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 @@ gst_multi_queue_set_property (GObject * object, guint prop_id,
     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 @@ gst_multi_queue_get_property (GObject * object, guint prop_id,
     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 @@ gst_single_queue_flush (GstMultiQueue * mq, GstSingleQueue * sq, gboolean flush)
     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 @@ apply_buffer (GstMultiQueue * mq, GstSingleQueue * sq, GstClockTime timestamp,
   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 @@ gst_multi_queue_loop (GstPad * pad)
   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 @@ gst_multi_queue_loop (GstPad * pad)
   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 @@ gst_multi_queue_loop (GstPad * pad)
    * 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 @@ gst_multi_queue_loop (GstPad * pad)
 
     /* 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 @@ gst_multi_queue_loop (GstPad * pad)
 
       /* 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 @@ gst_multi_queue_loop (GstPad * pad)
           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 @@ gst_multi_queue_loop (GstPad * pad)
       /* 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_multi_queue_loop (GstPad * pad)
   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_multi_queue_loop (GstPad * pad)
       gst_flow_get_name (sq->srcresult));
 
   sq->last_oldid = newid;
+
   return;
 
 out_flushing:
@@ -1499,7 +1627,10 @@ wake_up_next_non_linked (GstMultiQueue * mq)
     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 @@ compute_high_id (GstMultiQueue * mq)
       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 @@ gst_single_queue_new (GstMultiQueue * mqueue, gint id)
   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 @@ gst_single_queue_new (GstMultiQueue * mqueue, gint id)
 
   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_single_queue_new (GstMultiQueue * mqueue, gint id)
   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 */
index b9c28cd..bb3d840 100644 (file)
@@ -50,6 +50,8 @@ typedef struct _GstMultiQueueClass GstMultiQueueClass;
 struct _GstMultiQueue {
   GstElement element;
 
+  gboolean sync_by_running_time;
+
   /* number of queues */
   guint        nbqueues;
 
@@ -65,6 +67,7 @@ struct _GstMultiQueue {
 
   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 */
index a1e85ff..7704aec 100644 (file)
@@ -855,6 +855,7 @@ reset_rate_timer (GstQueue2 * queue)
   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 @@ reset_rate_timer (GstQueue2 * queue)
 /* 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 @@ update_in_rates (GstQueue2 * queue)
     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;
index 358b43a..ccbead6 100644 (file)
@@ -116,6 +116,7 @@ struct _GstQueue2
   gdouble last_in_elapsed;
   guint64 bytes_in;
   gdouble byte_in_rate;
+  gdouble byte_in_period;
 
   GTimer *out_timer;
   gboolean out_timer_started;
index f33ca75..a181e82 100644 (file)
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index e5aa7ab..4ce2582 100644 (file)
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index 3653b71..dbd76ab 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index 0d297fe..4c9489d 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@ msgid ""
 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"
index 0e7c959..0edb1bf 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index c4767ae..4e42da6 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,7 +8,7 @@ msgid ""
 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"
index 5fade0e..813661a 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@ msgid ""
 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"
index daa8371..cc8741a 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
 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"
index 1aa662b..c4409ca 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index ba81f68..f77ab29 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 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"
index 872b03f..c579819 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index 663b9d9..529077f 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@ msgid ""
 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"
index 2ec7471..1add3ba 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -12,7 +12,7 @@ msgid ""
 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"
index 4891afe..9641e77 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@ msgid ""
 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"
index 6bae3e8..a58aec8 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index 205af59..74b2fd7 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index 44da03d..ea40ed1 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index c041ecf..c48f670 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -106,7 +106,7 @@ msgid ""
 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"
index 33afbfa..dc0d8c5 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index dcd575a..119cf67 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index af44e1c..0fd1f5b 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index beea585..6596549 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -10,7 +10,7 @@ msgid ""
 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"
index 5f3860b..aa1e2db 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index f31bb9a..d144759 100644 (file)
@@ -17,7 +17,7 @@ msgid ""
 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"
index a0c0677..e7e7e3f 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@ msgid ""
 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"
index 1ad44b1..2300900 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgid ""
 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"
index 8818bc8..6200b2f 100644 (file)
--- a/po/rw.po
+++ b/po/rw.po
@@ -15,7 +15,7 @@ msgid ""
 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"
index cb9c00e..7c266a1 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@ msgid ""
 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"
index ab5cfa6..20996f5 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -8,7 +8,7 @@ msgid ""
 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"
index dd89e54..2b35a23 100644 (file)
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index bc9d6ef..272ed70 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index aaf92b0..adbde56 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@ msgid ""
 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"
index 04c1941..a4c2a40 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
 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"
index d2369c6..50b36d9 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index cda9a34..d95c7a0 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -7,7 +7,7 @@ msgid ""
 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"
index 2c7a30e..daaf202 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 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"
index 4dafa17..4a83e21 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 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"
index b5034f1..a6ed29b 100644 (file)
@@ -255,7 +255,7 @@ GST_END_TEST;
 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 @@ GST_START_TEST (test_link)
 
   /* 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);
index b4ffcb8..237f7e4 100644 (file)
@@ -168,6 +168,33 @@ GST_START_TEST (test_unref_threaded)
 
 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 @@ gst_mini_object_suite (void)
   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);
index fad9156..74e6fc4 100644 (file)
 #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"
 #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"
 #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
 #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). */
index 8b749c4..be93d1a 100644 (file)
@@ -57,14 +57,14 @@ G_BEGIN_DECLS
  *
  * 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:
index 06969d0..e545769 100644 (file)
@@ -436,14 +436,21 @@ EXPORTS
        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 @@ EXPORTS
        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 @@ EXPORTS
        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