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