diff --git a/ChangeLog b/ChangeLog index 23fa97ef2e..e9e08dce90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,3289 @@ -=== release 0.10.32 === +=== release 0.10.34 === -2011-01-21 Tim-Philipp Müller +2011-05-14 Tim-Philipp Müller * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * libs/gst/base/gstbaseparse.c: + docs: it its %TRUE (constant) + As spotted by Tim. + +2011-05-02 16:22:56 +0300 Stefan Kost + + * gst/gstelementfactory.c: + docs: fix copy'n'paste doc header mistake + +2011-05-02 16:20:24 +0300 Stefan Kost + + * gst/gstelement.h: + * gst/gstpluginfeature.h: + docs: add two trivial doc blobs + +2011-05-02 16:03:29 +0300 Stefan Kost + + * libs/gst/base/gstbaseparse.c: + docs: add missing parameter docs + +2011-05-02 16:00:52 +0300 Stefan Kost + + * libs/gst/dataprotocol/dataprotocol.h: + docs: add docs for GstDPPacketizer + +2011-05-02 15:52:58 +0300 Stefan Kost + + * gst/gstcaps.h: + docs: improve the syntax for the capsintersectmode docs + +2011-05-02 15:48:01 +0300 Stefan Kost + + * gst/gstelement.c: + docs: fixup broken xref + +2011-05-02 15:46:59 +0300 Stefan Kost + + * 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 + + * gst/gstatomicqueue.h: + docs: fix gtk-doc syntax + +2011-05-02 15:30:13 +0300 Stefan Kost + + * plugins/elements/gstfunnel.c: + docs: don't duplicate info that we take from element-details + +2011-04-28 15:37:02 +0300 Stefan Kost + + * docs/gst/gstreamer-sections.txt: + docs: remove non existing symbol + +2011-04-28 15:05:28 +0300 Stefan Kost + + * 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 + + * 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 + + * gst/gstpluginfeature.h: + pluginfeature: include plugin.h in header where we use a GstPlugin pointer + Should fix issue with gstreamermm build where is included + directly instead of gst/gst.h. + +2011-04-27 11:49:11 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * gst/gstutils.c: + minor inline documentation fix + +2011-04-24 14:02:51 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From c3cafe1 to 46dfcea + +2011-04-24 11:44:19 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * libs/gst/base/gstbaseparse.c: + baseparse: make fmtlist constant + +2011-04-19 11:48:05 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * 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 + + * tools/gst-launch.c: + gst-launch: remove newline from translatable string + +2011-04-16 13:49:45 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/common/libgstbase.def: + win32: add new baseparse API to libgstbase.def + +2011-04-16 09:32:17 +0200 Sebastian Dröge + + * win32/common/libgstreamer.def: + win32: Add exports for the GstParseContext and GstBufferListIterator types + +2011-04-15 20:58:51 +0100 Tim-Philipp Müller + + * 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 + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * plugins/elements/gstqueue2.c: + queue2: Add missing ) to the ring-buffer-max-size property description + +2011-04-15 10:53:56 +0200 Robert Swain + + * 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 + + * 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 + + * 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 + + * 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 + + * plugins/elements/gstmultiqueue.c: + multiqueue: Don't leak the sinkpad name + +2011-04-14 09:07:25 +0200 Sebastian Dröge + + * 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 + + * 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 + + * 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 + + * tests/check/gst/gstutils.c: + tests: Add test for greatest common divisor + +2011-01-06 18:11:31 +0100 Ole André Vadla Ravnås + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * .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 + + * 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 + + * 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 + + * 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 + + * libs/gst/base/gstbaseparse.c: + baseparse: minor variable name clean-up + +2011-04-08 15:31:14 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * libs/gst/base/gstbaseparse.h: + baseparse: re-indent header + +2011-03-12 15:34:33 +0000 Tim-Philipp Müller + + * 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 + + * libs/gst/base/Makefile.am: + libs: add GstBaseParse which was moved from -bad + +2011-02-23 17:24:14 -0800 David Schleef + + * libs/gst/base/gstbaseparse.c: + baseparse: make_metadata_writable() fix + +2011-02-21 13:24:03 +0000 Tim-Philipp Müller + + * 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 + + * libs/gst/base/gstbaseparse.c: + baseparse: trim trailing whitespace + +2011-02-18 15:05:03 +0200 Stefan Kost + + * libs/gst/base/gstbaseparse.c: + baseparse: use delta-unit flags instead of none + +2011-02-17 13:22:28 -0800 David Schleef + + * libs/gst/base/gstbaseparse.h: + baseparse: update documentation for API changes + +2010-10-13 15:39:55 -0700 David Schleef + + * 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 + + * 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 + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: reverse playback; mind keyframes for fragment boundary + +2011-01-12 14:40:37 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: ensure non-empty candidate frames + +2011-01-11 15:24:23 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: clarify some debug statements + +2011-01-11 15:24:02 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: properly track upstream timestamps + ... rather than with a delay. + +2011-01-11 15:23:29 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: need proper frame duration to obtain sensible frame bitrate + +2011-01-11 15:22:51 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: proper initial values for index tracking variables + +2011-01-11 12:05:13 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: arrange for consistent event handling + +2011-01-10 16:59:59 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.h: + baseparse: header style cleaning + +2011-01-10 17:07:38 +0100 Mark Nauwelaerts + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baesparse: fix refactor regression in loop based parsing + +2011-01-06 11:16:56 +0100 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: fix reverse playback handling + +2010-12-10 14:56:13 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: minor typo and debug statement cleanup + +2010-12-10 14:40:05 +0100 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: avoid loop in frame locating interpolation + +2011-01-14 16:30:11 -0300 Thiago Santos + + * 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 + + * gst/audioparsers/gstbaseparse.c: + docs: minor baseparse docs/comment fixes + Remove copy'n'paste leftovers. + +2010-11-08 19:58:31 +0100 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: avoid unexpected stray metadata + +2010-11-30 15:40:28 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: use proper _NONE output value when applicable + +2010-11-25 18:56:42 +0100 Edward Hervey + + * gst/audioparsers/gstbaseparse.c: + audioparsers: Remove dead assignments + +2010-11-25 17:14:23 +0100 Andoni Morales Alastruey + + * 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 + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: refactor frame scanning peformed by _loop + +2010-11-16 18:04:00 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: slightly optimize sending of pending newsegment events + +2010-11-16 17:04:35 +0100 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: use only upstream duration if it provides one + +2010-10-25 14:15:50 +0200 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: add some debug statements + +2010-10-11 17:49:46 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: perform bitrate handling and posting after newsegment sending + +2010-10-11 17:36:19 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: immediately post subclass provided bitrate + +2010-10-05 11:17:52 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: support reverse playback + ... in pull mode or upstream driven. + +2010-09-27 12:16:43 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: remove done TODOs and update documentation + +2010-09-25 14:40:54 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: use determined seekability in answering SEEKING query + +2010-09-25 14:32:06 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: add skip property + +2010-09-22 15:07:09 +0200 Mark Nauwelaerts + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: localize use of provided fps information + +2010-09-22 12:13:12 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: seek table and accurate seek support + +2010-09-21 13:57:10 +0200 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + * gst/audioparsers/gstbaseparse.h: + baseparse: add index support + +2010-09-21 09:59:56 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: refactor state reset + +2010-09-20 16:39:37 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: prevent indefinite resyncing + +2010-09-20 13:57:55 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: specific EOS handling if no output so far + +2010-09-20 13:31:57 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: adjust _set_frame_prop documentation and set default as claimed + +2010-09-20 13:30:54 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: fix bitrate copy-and-paste and update heuristic + +2010-09-17 18:33:29 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: post duration message if average bitrates is updated + +2010-09-17 18:24:22 +0200 Mark Nauwelaerts + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: 0 converts to 0 by default + +2010-09-16 18:56:46 +0200 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: streamline query handling + +2010-09-16 11:51:20 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + * gst/audioparsers/gstbaseparse.h: + baseparse: cleanup struct and remove unused member + +2010-09-22 16:07:24 +0530 Arun Raghavan + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: non-TIME seek event is simply not handled + +2010-06-15 15:34:05 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: fix seek event ref handling + +2010-06-15 15:33:37 +0200 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: prevent arithmetic overflows in pull mode buffer cache handling + +2010-06-15 15:32:34 +0200 Mark Nauwelaerts + + * 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 + + * 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 + + * 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 + + * 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 + + * gst/audioparsers/gstbaseparse.c: + * gst/audioparsers/gstbaseparse.h: + audioparsers: remove unused GstBaseParseClassPrivate structure + +2010-03-25 11:22:58 +0000 Arun Raghavan + + * 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 + + * gst/audioparsers/gstbaseparse.c: + audioparsers: rename baseparse GType name to avoid possible conflicts + +2010-01-05 15:05:05 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + audioparsers: documentation fixes + +2009-12-21 18:18:39 +0100 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: minor refactor cleanup + Also add some debug logging. + +2009-12-18 21:02:40 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: implement leftover draining in pull mode + +2009-12-16 18:38:33 +0100 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + baseparse: check for remaining data when draining in push mode + +2009-12-18 13:30:07 +0100 Mark Nauwelaerts + + * gst/audioparsers/gstbaseparse.c: + baseparse: fix pull mode cache size comparison + +2009-12-11 10:25:16 -0800 Michael Smith + + * gst/audioparsers/gstbaseparse.c: + audioparse: fix a format string as reported on irc. + +2009-10-29 15:18:37 +0100 Mark Nauwelaerts + + * 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 + + * gst/audioparsers/gstbaseparse.c: + audioparsers: reference GstBaseParse now lives here + +2009-11-28 18:13:31 +0100 Mark Nauwelaerts + + * 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 + + * gst/aacparse/gstbaseparse.c: + baseparse: reset passthrough mode to default (disabled) on activation + +2009-10-29 15:16:59 +0100 Mark Nauwelaerts + + * gst/aacparse/gstbaseparse.c: + baseparse: ensure buffer metadata is writable + +2009-10-28 14:06:13 +0100 Mark Nauwelaerts + + * 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 + + * 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 + + * gst/aacparse/gstbaseparse.c: + baseparse: documentation fixes + +2009-10-28 12:00:08 +0100 Mark Nauwelaerts + + * 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 + + * gst/aacparse/gstbaseparse.c: + aacparse: Fix compilation warnings + +2009-10-11 11:22:11 +0200 Josep Torra + + * gst/aacparse/gstbaseparse.c: + aacparse: fix warnings in macosx snow leopard + +2009-09-25 17:02:53 +0200 Mark Nauwelaerts + + * 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 + + * gst/aacparse/gstbaseparse.c: + baseparse: prevent infinite loop when draining + +2009-08-07 13:06:28 +0200 Mark Nauwelaerts + + * gst/aacparse/gstbaseparse.c: + baseparse: fix minor memory leak + +2009-07-14 14:08:04 +0200 Sebastian Dröge + + * 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 + + * gst/aacparse/gstbaseparse.c: + baseparse: Fix seek event leaking + +2009-06-01 13:56:18 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * gst/aacparse/gstbaseparse.c: + baseparse: fix debug category + +2009-04-27 22:39:15 +0200 Mark Nauwelaerts + + * gst/aacparse/gstbaseparse.c: + baseparse: fix (regression in) newsegment handling + (aacparse, amrparse, flacparse). Fixes #580133. + +2009-04-07 04:53:02 +0300 René Stadler + + * gst/aacparse/gstbaseparse.c: + baseparse: Fix slightly broken buffer-in-segment check (aacparse, amrparse, flacparse) + +2009-04-05 03:50:19 +0300 René Stadler + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * plugins/elements/gstinputselector.c: + inputselector: Protect against pad-parent disappearing + +2010-12-14 16:06:46 +0100 Stian Selnes + + * gst/gstiterator.c: + iterator: resync to avoid infinite loop + +2011-04-08 09:20:28 +0200 Sebastian Dröge + + * tests/check/gst/gstutils.c: + utils: Fix uninitialized variable compiler warnings + +2011-04-08 09:15:10 +0200 Sebastian Dröge + + * gst/gstbus.c: + bus: Removed unused GCond + +2011-04-08 09:07:59 +0200 Sebastian Dröge + + * 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 + + * 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 + + * 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 + + * 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 + + * plugins/elements/gstqueue2.c: + queue2: fix buffer leak on eos when using the ring buffer + +2011-01-11 14:27:35 +0100 Idar Tollefsen + + * 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 + + * plugins/elements/gstqueue2.c: + queue2: fix minor memory leak + +2011-04-07 17:34:10 +0100 Tim-Philipp Müller + + * plugins/elements/gstfunnel.c: + funnel: minor element description fix + +2011-04-07 16:08:34 +0300 Stefan Kost + + * 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 + + * 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 + + * libs/gst/base/gstbasesrc.c: + bla + +2011-04-07 10:29:41 +0200 Sebastian Dröge + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * tests/check/gst/gstvalue.c: + value: GstDate/GDate has a abbreviation now + +2011-04-03 16:11:50 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * gst/gststructure.c: + structure: Add date as a type abbreviation of GDate + See bug #646696. + +2011-04-04 15:56:30 +0300 Stefan Kost + + * common: + Automatic update of common submodule + From 1ccbe09 to c3cafe1 + +2011-04-04 03:33:46 +0200 Andoni Morales Alastruey + + * 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 + + * 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 + + * 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 + + * 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 + + * tests/check/elements/.gitignore: + checks: ignore new funnel unit test binary + +2011-04-02 14:51:18 +0100 Bastien Nocera + + * 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 + + * 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 + + * 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 + + * gst/gstelement.c: + element: strto[u]l() returns a g[u]long + +2011-03-31 19:25:30 +0100 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * gst/gstelement.c: + element: Fix sanity checks for request pad templates without % + +2011-03-29 11:57:58 +0200 Sebastian Dröge + + * 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 + + * 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 + + * 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 + + * plugins/elements/gstfunnel.c: + funnel: Add some more documentation about the behaviour of funnel + +2011-03-29 11:08:57 +0200 Sebastian Dröge + + * plugins/elements/gstfunnel.c: + funnel: Send a newsegment event after flush-stop + +2011-03-29 11:07:48 +0200 Sebastian Dröge + + * plugins/elements/gstfunnel.c: + funnel: Some random cleanup + +2011-03-29 10:56:00 +0200 Sebastian Dröge + + * 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 + + * 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 + + * 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 + + * 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 + + * common: + Automatic update of common submodule + From 193b717 to 1ccbe09 + +2011-03-25 14:55:39 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From b77e2bf to 193b717 + +2011-03-25 09:27:58 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From d8814b6 to b77e2bf + +2011-03-25 08:59:37 +0100 Sebastian Dröge + + * common: + Automatic update of common submodule + From 6aaa286 to d8814b6 + +2011-03-24 18:48:41 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 6aec6b9 to 6aaa286 + +2011-03-24 18:27:09 +0200 Stefan Kost + + * 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 + + * 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 + + * 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 + + * libs/gst/base/gstbasesink.c: + basesink: print flow return as a name in debug log + +2011-03-23 17:13:58 +0200 Stefan Kost + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * autogen.sh: + autogen: wingo signed comment + +2011-03-22 11:04:20 +0100 Sebastian Dröge + + * 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 + + * plugins/elements/gstmultiqueue.h: + multiqueue: Really remove unused variable + +2011-03-21 17:52:13 +0100 Sebastian Dröge + + * 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 + + * plugins/elements/gstmultiqueue.c: + multiqueue: Unblock all waiting pads when shutting down + +2011-03-21 12:39:34 +0100 Sebastian Dröge + + * plugins/elements/gstmultiqueue.c: + multiqueue: Remove unused variable + +2011-03-21 16:28:37 +0100 Sebastian Dröge + + * 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 + + * 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 + + * gst/gstevent.h: + event: Add since marker to GST_EVENT_SINK_MESSAGE + +2011-03-19 08:55:57 +0100 Sebastian Dröge + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/common/libgstreamer.def: + win32: Update .def file for API addition + +2011-03-09 16:15:33 +0200 Stefan Kost + + * docs/pwg/advanced-types.xml: + pwg: fix element name "videodrop" to "videorate" + +2011-03-08 12:11:08 +0200 Stefan Kost + + * tests/check/gst/gstelementfactory.c: + test: add tests for new element_factory api. + +2010-06-23 22:00:04 +0200 Thijs Vermeir + + * 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 + + * 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 + + * tests/check/gst/gstelementfactory.c: + tests: add test to create a factory + +2011-03-08 10:36:30 +0200 Stefan Kost + + * 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 + + * gst/gstpadtemplate.c: + padtemplate: add missing ; in example (and trim whitespace) + +2011-03-08 09:58:55 +0200 Stefan Kost + + * 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 + + * gst/gstcaps.c: + * gst/gststructure.c: + caps,structure: trim trailing whitespace + +2011-03-04 08:28:25 +1000 Jonathan Matthew + + * 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 + + * 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 + Fixes #424143 + +2011-03-02 13:55:36 +0530 Arun Raghavan + + * 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 + + * configure.ac: + configure.ac: export plugin description more platform independent + Fixes #642504. + +2011-02-28 18:32:07 +0100 Mark Nauwelaerts + + * common: + Automatic update of common submodule + From 1de7f6a to 6aec6b9 + +2011-02-28 15:01:54 +0000 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * tests/check/Makefile.am: + Makefile.am: add new abi headers to nodist_HEADERS + +2011-02-21 11:24:45 +0200 Stefan Kost + + * 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 + + * 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 + + * 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 + + * docs/gst/running.xml: + docs: tell that ORC_CODE can contain a list of flags + +2011-02-14 18:05:09 -0300 Thiago Santos + + * 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 + + * 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 + + * plugins/elements/gstfakesink.c: + fakesink: print new MEDIA4 flag as well + +2011-01-03 11:37:05 +0100 Robert Swain + + * 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 + + * 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 + + * 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 + + * gst/gstindex.c: + index: add FIXME-0.11: comments + +2011-02-15 10:57:08 +0200 Stefan Kost + + * gst/gstindex.c: + docs: improve index docs + +2011-02-18 17:09:14 +0200 Stefan Kost + + * docs/design/part-progress.txt: + docs: spell-check + +2011-02-15 19:15:16 -0800 David Schleef + + * plugins/elements/gstfakesink.c: + fakesink: print buffer flags + +2010-12-04 18:53:55 -0800 David Schleef + + * gst/gstelement.c: + element: Call ->release_pad() to clean up pad + Fixes #636011 and #402562. + +2011-02-17 14:50:40 +0200 Stefan Kost + + * 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 + + * 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 + + * 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 + + * 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 + + * win32/common/libgstreamer.def: + defs: fix defs file for new symbols + +2011-02-16 17:14:11 +0100 Wim Taymans + + * gst/gstatomicqueue.c: + atomicqueue: use correct array sizes + +2011-02-16 16:21:58 +0100 Wim Taymans + + * gst/gstatomicqueue.c: + atomicqueue: fix docs some more + +2011-02-16 16:19:46 +0100 Wim Taymans + + * 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 + + * gst/gstatomicqueue.c: + atomicqueue: make sure a min initial_size is used + +2010-10-28 16:02:39 +0100 Wim Taymans + + * 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 + + * tests/check/gst/gstbus.c: + check: fix a leak in the bus unit test + +2011-02-16 17:28:15 +0100 Wim Taymans + + * gst/gst.c: + deinit: add progress type class unref + +2011-02-16 15:13:05 +0200 Stefan Kost + + * gst/gstutils.c: + utils: tell also what pad a pad is already linked against + +2011-02-15 22:56:35 +0100 Sebastian Dröge + + * 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 + + * 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 + + * 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 + + * plugins/elements/gstfilesrc.c: + filesrc: Fix escaping of file uris + Fixes bug #642393. + +2011-02-15 18:26:00 +0100 Wim Taymans + + * 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 + + * docs/design/part-progress.txt: + design: mention timeout in the progress message + +2011-02-15 17:20:08 +0100 Wim Taymans + + * docs/design/draft-progress.txt: + * docs/design/part-progress.txt: + design: make progress draft official + +2011-01-06 18:55:43 +0100 Wim Taymans + + * 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 + + * gst/gstmessage.c: + message: add new message quark + +2011-01-06 15:58:23 +0100 Wim Taymans + + * docs/design/draft-progress.txt: + docs: add more standard categories + +2011-01-05 13:53:00 +0100 Wim Taymans + + * gst/gst.c: + gst: register new type + +2011-01-05 13:48:51 +0100 Wim Taymans + + * tests/check/gst/gstmessage.c: + check: add progress message unit test + +2011-01-05 13:41:08 +0100 Wim Taymans + + * 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 + + * 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 + + * 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 + + * 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 + +2011-02-14 17:31:25 +0100 Wim Taymans + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * gst/parse/grammar.y: + parse-launch: trim whitespaces + +2011-02-14 15:37:23 +0200 Stefan Kost + + * 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 + + * common: + Automatic update of common submodule + From f94d739 to 1de7f6a + +2011-02-13 22:56:15 +0000 Tim-Philipp Müller + + * tools/gst-launch.c: + gst-launch: pretty-print datetime tags + +2011-02-10 23:30:21 +0000 Tim-Philipp Müller + + * gstreamer.doap: + gstreamer.doap: update mailing list host + +2011-02-10 14:53:34 +0100 Wim Taymans + + * libs/gst/base/gstbasesink.c: + basesink: fix some comments + +2011-02-10 14:50:04 +0100 Wim Taymans + + * 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 + + * 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 + + * 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 + + * 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 + + * gst/gstclock.c: + clock: fix parameter docs + +2011-02-10 10:49:22 +0100 Wim Taymans + + * docs/design/part-qos.txt: + design: tweak docs a little + +2011-02-10 10:34:57 +0100 Wim Taymans + + * 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 + + * docs/design/draft-bufferpool.txt: + docs: fix some typos in the bufferpool draft + +2011-02-10 10:19:38 +0000 Tim-Philipp Müller + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * gst/gsttrace.c: + trace: ensure messages are \0 terminated + +2011-01-12 12:58:44 +0200 Stefan Kost + + * 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 + + * 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 + + * 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 + + * libs/gst/controller/gstcontroller.c: + docs: small controller api docs improvement + +2011-01-11 15:09:52 +0200 Stefan Kost + + * plugins/elements/gsttypefindelement.c: + typefind: canonicalize signal name + +2011-01-11 15:09:30 +0200 Stefan Kost + + * plugins/elements/gsttypefindelement.c: + docs: mention have-type signal in the docs. + +2011-01-25 09:15:49 +0000 Tim-Philipp Müller + + * 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 + + * 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 + + * docs/design/part-MT-refcounting.txt: + design docs: fix 2 typos in part-MT-refcounting + +2011-01-24 17:46:15 +0800 Yang Xichuan + + * docs/design/part-gstbin.txt: + design docs: part-gstbin.txt fix typo + Signed-off-by: Yang Xichuan + +2011-01-19 15:48:26 +0000 Vincent Penquerc'h + + * 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 + + * 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 + + * 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 + + * gst/gstbuffer.c: + buffer: clarify docs + +2011-01-11 10:33:32 +0100 Wim Taymans + + * docs/design/part-buffering.txt: + design: update buffering doc + Add strategies to buffering doc + +2011-01-24 11:53:12 +0200 Mart Raudsepp + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 diff --git a/NEWS b/NEWS index 1c40a3723f..283b60e5d0 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 3cfb820dde..2cad94a3ba 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 @@ core of the GStreamer streaming media framework. The 0.10.x series is a stable series targeted at end users. +It is not API or ABI compatible with the stable 0.8.x series. +It is, however, parallel installable with the 0.8.x series. + + +The 0.10.x series has been reworked for threadsafety. It also features +various feature additions and enhancements. This module, gstreamer, only contains core functionality. @@ -31,64 +37,14 @@ contains a set of less supported plug-ins that haven't passed the Features of this release - * GLib requirement is now >= 2.22 - * New core element: valve (moved from -bad) - * New core element: input-selector (N.B. without "select-all" property, use fsfunnel instead) (moved from -bad) - * New core element: output-selector (with different negotiation behaviour by default, set pad-negotiation-mode=active for previous behaviour) (moved from -bad) - * Performance improvements for many heavily-used code paths: GstPad, GstPoll, GstClock, GstTask, basesink, basesrc, queue2, multiqueue - * gobject-introspection: add annotations for most core API - * clock: make sync clock wait lockfree - * fdsrc/fdsink: reenable on MSVC - * registry: fix GStatBuf definition for win32 when building against older glib (fixes unnecessary rescanning of plugins at start-up) - * element: add a more flexible way to get request pads from elements - * multiqueue: return upon input when already eos - * object: fix creation of default name (when creating more than 100000 elements) - * pluginloader: fix hangs on OSX - * poll: fixes for (p)select backend (used e.g. on OSX) - * poll: refactor and make more lockfree; fixes for win32 and OSX (pselect backend) - * registry: don't replace valid existing plugins by blacklisted ones - * tags: don't produce duplicated entries when merging same value twice - * basesink: preroll fixes for async=false case - * basesink: rework position reporting code - * basetransform: handle downstream giving a buffer with new caps but invalid size + * Fix multiqueue thread-safety regression + * Don't set artificial 0-timestamp on first packet for TIME-based live sources + * Otherwise identical to the previous release (0.10.33) Bugs fixed in this release - * 635785 : basesrc: fix deadlock - * 638599 : GST_PTR_FORMAT causes crashes if GLib-internal printf is used but system provides register_printf_specifier - * 503592 : gstpad.c does many ref/unref of peer pad in dataflow - * 564056 : Protect against umask(0177) - * 607513 : input-selector segfaults in g_object_notify() - * 632168 : [gsttask] MSVC thread names for task debugging - * 632447 : reduce static memory allocated by the registry - * 632557 : [macros] Define restrict keyword if not available - * 632778 : Optimisations to GstBaseSink - * 632779 : gstdataqueue: Only emit g_cond_signal when needed - * 632780 : queue: Remove useless checks from e406f7 - * 633918 : [fakesink] [PATCH] print sink-message events like a message and its structure - * 634965 : sinks render buffers in state PAUSED when async is FALSE - * 635001 : basesink: fix position reporting in PAUSED - * 636268 : configure test fails on FreeBSD - * 636455 : basesrc: Avoid taking object locks for just checking tag presence - * 637057 : [plugin-scanner] gstpoll fails with select backend - * 637300 : [API] request pad based on caps - * 637549 : build fails: ./.libs/libgstbase-0.10.so: undefined reference to `gst_clock_single_shot_id_reinit' - * 637776 : merging the same tag values again produces lists containing duplicates - * 638381 : {input,output}-selector: double-check API before release - * 638399 : a few typos in GStreamer - * 638900 : [GstPoll] Doesn't compile with MinGW - * 638941 : registry scan/loading race and inconsistency - -API changed in this release - -- API additions: - - * gst_clock_single_shot_id_reinit() - * gst_element_request_pad() - * GstElementClass::request_new_pad_full() - * gst_poll_get_read_gpollfd() - * gst_value_list_merge() - * GST_CLOCK_DONE + * 649369 : basesrc: do not set first buffer timestamp to 0 for live sources + * 649878 : [multiqueue] regression: gst_single_queue_new not MT-safe Download @@ -113,31 +69,15 @@ subscribe to the gstreamer-devel list. If there is sufficient interest we will create more lists as necessary. +Applications + +Applications ported to GStreamer 0.10 include Totem, RhythmBox, Sound-Juicer, +Gnome Media, Flumotion, Amarok, Jamboree, Pitivi, Istanbul, AnnoAmp, Elisa, and others. +Let us know if you want to be added to this list. + + Contributors to this release - * Andoni Morales Alastruey - * Benjamin Gaignard - * Benjamin Otte - * David Hoyt - * David Schleef - * Edward Hervey - * Havard Graff - * Jan Schmidt - * Kipp Cannon - * Koop Mast - * Lasse Laukkanen * Mark Nauwelaerts - * Michael Smith - * Olivier Crete - * Olivier Crête - * Raimo Järvi - * Sebastian Dröge - * Stefan Kost - * Thiago Santos - * Tim-Philipp Müller - * Tommi Myöhänen - * Wim Taymans - * Zhang Wanming - * Christian Schaller - * Sjoerd Simons + * Vincent Penquerc'h   diff --git a/configure.ac b/configure.ac index 8bd2cbd90b..dc9c33e478 100644 --- a/configure.ac +++ b/configure.ac @@ -48,7 +48,7 @@ dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0 dnl - interfaces added -> increment AGE dnl - interfaces removed -> AGE = 0 dnl sets GST_LT_LDFLAGS -AS_LIBTOOL(GST, 28, 0, 28) +AS_LIBTOOL(GST, 29, 0, 29) dnl FIXME: this macro doesn't actually work; dnl the generated libtool script has no support for the listed tags. diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 2ddca0c507..311fb13ce1 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -933,14 +933,43 @@ gst_format_get_type
gstghostpad GstGhostPad +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 GstGhostPadClass GST_GHOST_PAD @@ -1393,6 +1422,7 @@ GstMiniObjectFlags GstMiniObjectCopyFunction GstMiniObjectDisposeFunction GstMiniObjectFreeFunction +GstMiniObjectWeakNotify GST_MINI_OBJECT_TYPE GST_MINI_OBJECT_FLAGS @@ -1413,6 +1443,9 @@ gst_mini_object_make_writable gst_mini_object_ref gst_mini_object_unref +gst_mini_object_weak_ref +gst_mini_object_weak_unref + gst_mini_object_replace @@ -1540,11 +1573,6 @@ gst_pad_new gst_pad_new_from_template gst_pad_new_from_static_template -gst_pad_alloc_buffer -gst_pad_alloc_buffer_and_set_caps -gst_pad_set_bufferalloc_function -GstPadBufferAllocFunction - gst_pad_set_chain_function GstPadChainFunction diff --git a/docs/plugins/gstreamer-plugins.args b/docs/plugins/gstreamer-plugins.args index c7f3571f14..5d965e6ae9 100644 --- a/docs/plugins/gstreamer-plugins.args +++ b/docs/plugins/gstreamer-plugins.args @@ -848,6 +848,16 @@ FALSE + +GstMultiQueue::sync-by-running-time +gboolean + +rw +Sync By Running Time +Synchronize deactivated or not-linked streams by running time. +FALSE + + GstBin::async-handling gboolean @@ -1068,3 +1078,13 @@ FALSE + +GstInputSelector::sync-streams +gboolean + +rw +Sync Streams +Synchronize inactive streams to the running time of the active stream. +FALSE + + diff --git a/docs/plugins/inspect/plugin-coreelements.xml b/docs/plugins/inspect/plugin-coreelements.xml index b7ca01a07f..aef69a7148 100644 --- a/docs/plugins/inspect/plugin-coreelements.xml +++ b/docs/plugins/inspect/plugin-coreelements.xml @@ -3,10 +3,10 @@ standard GStreamer elements ../../plugins/elements/.libs/libgstcoreelements.so libgstcoreelements.so - 0.10.32.4 + 0.10.34.1 LGPL gstreamer - GStreamer prerelease + GStreamer git Unknown package origin diff --git a/docs/plugins/inspect/plugin-coreindexers.xml b/docs/plugins/inspect/plugin-coreindexers.xml index 2ff2118770..e8d2401b20 100644 --- a/docs/plugins/inspect/plugin-coreindexers.xml +++ b/docs/plugins/inspect/plugin-coreindexers.xml @@ -3,10 +3,10 @@ GStreamer core indexers ../../plugins/indexers/.libs/libgstcoreindexers.so libgstcoreindexers.so - 0.10.32.4 + 0.10.34.1 LGPL gstreamer - GStreamer prerelease + GStreamer git Unknown package origin diff --git a/gst/gst_private.h b/gst/gst_private.h index cf0d152ff4..13f2590896 100644 --- a/gst/gst_private.h +++ b/gst/gst_private.h @@ -51,6 +51,9 @@ extern const char g_log_domain_gstreamer[]; /* for the pad cache */ #include "gstpad.h" +/* for GstElement */ +#include "gstelement.h" + G_BEGIN_DECLS /* used by gstparse.c and grammar.y */ @@ -115,6 +118,10 @@ gboolean _gst_plugin_loader_client_run (void); void _priv_gst_pad_invalidate_cache (GstPad *pad); +/* Used in GstBin for manual state handling */ +void _priv_gst_element_state_changed (GstElement *element, GstState oldstate, + GstState newstate, GstState pending); + /* used in both gststructure.c and gstcaps.c; numbers are completely made up */ #define STRUCTURE_ESTIMATED_STRING_LEN(s) (16 + gst_structure_n_fields(s) * 22) diff --git a/gst/gstbin.c b/gst/gstbin.c index 578c9db854..b25f96b5d4 100644 --- a/gst/gstbin.c +++ b/gst/gstbin.c @@ -222,6 +222,8 @@ static void gst_bin_get_property (GObject * object, guint prop_id, static GstStateChangeReturn gst_bin_change_state_func (GstElement * element, GstStateChange transition); +static void gst_bin_state_changed (GstElement * element, GstState oldstate, + GstState newstate, GstState pending); static GstStateChangeReturn gst_bin_get_state_func (GstElement * element, GstState * state, GstState * pending, GstClockTime timeout); static void bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret, @@ -468,6 +470,7 @@ gst_bin_class_init (GstBinClass * klass) gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_bin_change_state_func); + gstelement_class->state_changed = GST_DEBUG_FUNCPTR (gst_bin_state_changed); gstelement_class->get_state = GST_DEBUG_FUNCPTR (gst_bin_get_state_func); gstelement_class->get_index = GST_DEBUG_FUNCPTR (gst_bin_get_index_func); gstelement_class->set_index = GST_DEBUG_FUNCPTR (gst_bin_set_index_func); @@ -983,6 +986,7 @@ static gboolean is_eos (GstBin * bin, guint32 * seqnum) { gboolean result; + gint n_eos = 0; GList *walk, *msgs; result = TRUE; @@ -996,6 +1000,7 @@ is_eos (GstBin * bin, guint32 * seqnum) find_message (bin, GST_OBJECT_CAST (element), GST_MESSAGE_EOS))) { GST_DEBUG ("sink '%s' posted EOS", GST_ELEMENT_NAME (element)); *seqnum = gst_message_get_seqnum (GST_MESSAGE_CAST (msgs->data)); + n_eos++; } else { GST_DEBUG ("sink '%s' did not post EOS yet", GST_ELEMENT_NAME (element)); @@ -1004,7 +1009,13 @@ is_eos (GstBin * bin, guint32 * seqnum) } } } - return result; + /* FIXME: Some tests (e.g. elements/capsfilter) use + * pipelines with a dangling sinkpad but no sink element. + * These tests assume that no EOS message is ever + * posted on the bus so let's keep that behaviour. + * In valid pipelines this doesn't make a difference. + */ + return result && n_eos > 0; } static void @@ -2238,7 +2249,6 @@ activate_pads (const GValue * vpad, GValue * ret, gboolean * active) if (!(cont = gst_pad_set_active (pad, *active))) g_value_set_boolean (ret, FALSE); - /* unref the object that was reffed for us by _fold */ return cont; } @@ -2387,6 +2397,19 @@ gst_bin_do_latency_func (GstBin * bin) return res; } +static void +gst_bin_state_changed (GstElement * element, GstState oldstate, + GstState newstate, GstState pending) +{ + GstElementClass *pklass = (GstElementClass *) parent_class; + + if (newstate == GST_STATE_PLAYING && pending == GST_STATE_VOID_PENDING) + bin_do_eos (GST_BIN_CAST (element)); + + if (pklass->state_changed) + pklass->state_changed (element, oldstate, newstate, pending); +} + static GstStateChangeReturn gst_bin_change_state_func (GstElement * element, GstStateChange transition) { @@ -2621,8 +2644,6 @@ state_end: gst_element_state_get_name (GST_STATE (element)), gst_element_state_change_return_get_name (ret)); - bin_do_eos (bin); - return ret; /* ERRORS */ @@ -2736,8 +2757,6 @@ gst_bin_continue_func (BinContinueData * data) GST_STATE_UNLOCK (bin); GST_DEBUG_OBJECT (bin, "state continue done"); - bin_do_eos (bin); - gst_object_unref (bin); g_slice_free (BinContinueData, data); return; @@ -2832,9 +2851,8 @@ bin_handle_async_start (GstBin * bin, gboolean new_base_time) GST_OBJECT_UNLOCK (bin); /* post message */ - gst_element_post_message (GST_ELEMENT_CAST (bin), - gst_message_new_state_changed (GST_OBJECT_CAST (bin), - new_state, new_state, new_state)); + _priv_gst_element_state_changed (GST_ELEMENT_CAST (bin), new_state, new_state, + new_state); post_start: if (amessage) { @@ -2876,8 +2894,8 @@ bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret, GstState current, pending, target; GstStateChangeReturn old_ret; GstState old_state, old_next; - gboolean toplevel; - GstMessage *smessage = NULL, *amessage = NULL; + gboolean toplevel, state_changed = FALSE; + GstMessage *amessage = NULL; BinContinueData *cont = NULL; if (GST_STATE_RETURN (bin) == GST_STATE_CHANGE_FAILURE) @@ -2956,15 +2974,14 @@ bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret, if (old_next != GST_STATE_PLAYING) { if (old_state != old_next || old_ret == GST_STATE_CHANGE_ASYNC) { - smessage = gst_message_new_state_changed (GST_OBJECT_CAST (bin), - old_state, old_next, pending); + state_changed = TRUE; } } GST_OBJECT_UNLOCK (bin); - if (smessage) { - GST_DEBUG_OBJECT (bin, "posting state change message"); - gst_element_post_message (GST_ELEMENT_CAST (bin), smessage); + if (state_changed) { + _priv_gst_element_state_changed (GST_ELEMENT_CAST (bin), old_state, + old_next, pending); } if (amessage) { /* post our combined ASYNC_DONE when all is ASYNC_DONE. */ @@ -2972,9 +2989,6 @@ bin_handle_async_done (GstBin * bin, GstStateChangeReturn ret, gst_element_post_message (GST_ELEMENT_CAST (bin), amessage); } - if (!cont) - bin_do_eos (bin); - GST_OBJECT_LOCK (bin); if (cont) { /* toplevel, start continue state */ diff --git a/gst/gstelement.c b/gst/gstelement.c index d8afdbbb55..63b6dbcdf6 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -2227,6 +2227,28 @@ nothing_aborted: } } +/* Not static because GstBin has manual state handling too */ +void +_priv_gst_element_state_changed (GstElement * element, GstState oldstate, + GstState newstate, GstState pending) +{ + GstElementClass *klass = GST_ELEMENT_GET_CLASS (element); + GstMessage *message; + + GST_CAT_INFO_OBJECT (GST_CAT_STATES, element, + "notifying about state-changed %s to %s (%s pending)", + gst_element_state_get_name (oldstate), + gst_element_state_get_name (newstate), + gst_element_state_get_name (pending)); + + if (klass->state_changed) + klass->state_changed (element, oldstate, newstate, pending); + + message = gst_message_new_state_changed (GST_OBJECT_CAST (element), + oldstate, newstate, pending); + gst_element_post_message (element, message); +} + /** * gst_element_continue_state: * @element: a #GstElement to continue the state change of. @@ -2254,7 +2276,6 @@ gst_element_continue_state (GstElement * element, GstStateChangeReturn ret) GstStateChangeReturn old_ret; GstState old_state, old_next; GstState current, next, pending; - GstMessage *message; GstStateChange transition; GST_OBJECT_LOCK (element); @@ -2290,9 +2311,7 @@ gst_element_continue_state (GstElement * element, GstStateChangeReturn ret) gst_element_state_get_name (old_next), gst_element_state_get_name (pending), gst_element_state_get_name (next)); - message = gst_message_new_state_changed (GST_OBJECT_CAST (element), - old_state, old_next, pending); - gst_element_post_message (element, message); + _priv_gst_element_state_changed (element, old_state, old_next, pending); GST_CAT_INFO_OBJECT (GST_CAT_STATES, element, "continue state change %s to %s, final %s", @@ -2324,16 +2343,9 @@ complete: * previous return value. * We do signal the cond though as a _get_state() might be blocking * on it. */ - if (old_state != old_next || old_ret == GST_STATE_CHANGE_ASYNC) { - GST_CAT_INFO_OBJECT (GST_CAT_STATES, element, - "posting state-changed %s to %s", - gst_element_state_get_name (old_state), - gst_element_state_get_name (old_next)); - message = - gst_message_new_state_changed (GST_OBJECT_CAST (element), old_state, - old_next, GST_STATE_VOID_PENDING); - gst_element_post_message (element, message); - } + if (old_state != old_next || old_ret == GST_STATE_CHANGE_ASYNC) + _priv_gst_element_state_changed (element, old_state, old_next, + GST_STATE_VOID_PENDING); GST_STATE_BROADCAST (element); @@ -2402,9 +2414,7 @@ gst_element_lost_state (GstElement * element, gboolean new_base_time) GST_ELEMENT_START_TIME (element) = 0; GST_OBJECT_UNLOCK (element); - message = gst_message_new_state_changed (GST_OBJECT_CAST (element), - new_state, new_state, new_state); - gst_element_post_message (element, message); + _priv_gst_element_state_changed (element, new_state, new_state, new_state); message = gst_message_new_async_start (GST_OBJECT_CAST (element), new_base_time); @@ -2691,7 +2701,6 @@ activate_pads (const GValue * vpad, GValue * ret, gboolean * active) if (!(cont = gst_pad_set_active (pad, *active))) g_value_set_boolean (ret, FALSE); - /* unref the object that was reffed for us by _fold */ return cont; } diff --git a/gst/gstelement.h b/gst/gstelement.h index 7bd958c53c..fba69a686f 100644 --- a/gst/gstelement.h +++ b/gst/gstelement.h @@ -597,6 +597,7 @@ struct _GstElement * @get_query_types: get the supported #GstQueryType of this element * @query: perform a #GstQuery on the element * @request_new_pad_full: called when a new pad is requested. Since: 0.10.32. + * @state_changed: called immediately after a new state was set. Since: 0.10.35. * * GStreamer element class. Override the vmethods to implement the element * functionality. @@ -636,6 +637,8 @@ struct _GstElementClass GstState * pending, GstClockTime timeout); GstStateChangeReturn (*set_state) (GstElement *element, GstState state); GstStateChangeReturn (*change_state) (GstElement *element, GstStateChange transition); + void (*state_changed) (GstElement *element, GstState oldstate, + GstState newstate, GstState pending); /* bus */ void (*set_bus) (GstElement * element, GstBus * bus); diff --git a/gst/gstghostpad.c b/gst/gstghostpad.c index b33a241f34..8d6584e52b 100644 --- a/gst/gstghostpad.c +++ b/gst/gstghostpad.c @@ -73,7 +73,6 @@ struct _GstProxyPadPrivate G_DEFINE_TYPE (GstProxyPad, gst_proxy_pad, GST_TYPE_PAD); static GstPad *gst_proxy_pad_get_target (GstPad * pad); -static GstPad *gst_proxy_pad_get_internal (GstPad * pad); static void gst_proxy_pad_dispose (GObject * object); static void gst_proxy_pad_finalize (GObject * object); @@ -83,12 +82,26 @@ static void on_src_target_notify (GstPad * target, static GParamSpec *pspec_caps = NULL; -static const GstQueryType * -gst_proxy_pad_do_query_type (GstPad * pad) +/** + * gst_proxy_pad_query_type_default: + * @pad: a #GstPad. + * + * Invoke the default query type handler of the proxy pad. + * + * Returns: (transfer none) (array zero-terminated=1): a zero-terminated array + * of #GstQueryType. + * + * Since: 0.10.35 + */ +const GstQueryType * +gst_proxy_pad_query_type_default (GstPad * pad) { - GstPad *target = gst_proxy_pad_get_target (pad); + GstPad *target; const GstQueryType *res = NULL; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL); + + target = gst_proxy_pad_get_target (pad); if (target) { res = gst_pad_get_query_types (target); gst_object_unref (target); @@ -96,12 +109,28 @@ gst_proxy_pad_do_query_type (GstPad * pad) return res; } -static gboolean -gst_proxy_pad_do_event (GstPad * pad, GstEvent * event) +/** + * gst_proxy_pad_event_default: + * @pad: a #GstPad to push the event to. + * @event: (transfer full): the #GstEvent to send to the pad. + * + * Invoke the default event of the proxy pad. + * + * Returns: TRUE if the event was handled. + * + * Since: 0.10.35 + */ +gboolean +gst_proxy_pad_event_default (GstPad * pad, GstEvent * event) { gboolean res = FALSE; - GstPad *internal = gst_proxy_pad_get_internal (pad); + GstPad *internal; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE); + g_return_val_if_fail (GST_IS_EVENT (event), FALSE); + + internal = + GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad))); if (internal) { res = gst_pad_push_event (internal, event); gst_object_unref (internal); @@ -110,12 +139,27 @@ gst_proxy_pad_do_event (GstPad * pad, GstEvent * event) return res; } -static gboolean -gst_proxy_pad_do_query (GstPad * pad, GstQuery ** query) +/** + * gst_proxy_pad_query_default: + * @pad: a #GstPad to invoke the default query on. + * @query: (transfer none): the #GstQuery to perform. + * + * Invoke the default query function of the proxy pad. + * + * Returns: TRUE if the query could be performed. + * + * Since: 0.10.35 + */ +gboolean +gst_proxy_pad_query_default (GstPad * pad, GstQuery ** query) { gboolean res = FALSE; - GstPad *target = gst_proxy_pad_get_target (pad); + GstPad *target; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE); + g_return_val_if_fail (GST_IS_QUERY (query), FALSE); + + target = gst_proxy_pad_get_target (pad); if (target) { res = gst_pad_query (target, query); gst_object_unref (target); @@ -124,11 +168,27 @@ gst_proxy_pad_do_query (GstPad * pad, GstQuery ** query) return res; } -static GstIterator * -gst_proxy_pad_do_iterate_internal_links (GstPad * pad) +/** + * gst_proyx_pad_iterate_internal_links_default: + * @pad: the #GstPad to get the internal links of. + * + * Invoke the default iterate internal links function of the proxy pad. + * + * Returns: a #GstIterator of #GstPad, or NULL if @pad has no parent. Unref each + * returned pad with gst_object_unref(). + * + * Since: 0.10.35 + */ +GstIterator * +gst_proxy_pad_iterate_internal_links_default (GstPad * pad) { GstIterator *res = NULL; - GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); + GstPad *internal; + + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL); + + internal = + GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad))); if (internal) { GValue v = { 0, }; @@ -137,63 +197,142 @@ gst_proxy_pad_do_iterate_internal_links (GstPad * pad) g_value_set_object (&v, internal); res = gst_iterator_new_single (GST_TYPE_PAD, &v); g_value_unset (&v); + gst_object_unref (internal); } return res; } -static GstFlowReturn -gst_proxy_pad_do_chain (GstPad * pad, GstBuffer * buffer) +/** + * gst_proxy_pad_chain_default: + * @pad: a sink #GstPad, returns GST_FLOW_ERROR if not. + * @buffer: (transfer full): the #GstBuffer to send, return GST_FLOW_ERROR + * if not. + * + * Invoke the default chain function of the proxy pad. + * + * Returns: a #GstFlowReturn from the pad. + * + * Since: 0.10.35 + */ +GstFlowReturn +gst_proxy_pad_chain_default (GstPad * pad, GstBuffer * buffer) { GstFlowReturn res; - GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); + GstPad *internal; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR); + g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR); + + internal = GST_PROXY_PAD_INTERNAL (pad); res = gst_pad_push (internal, buffer); return res; } -static GstFlowReturn -gst_proxy_pad_do_chain_list (GstPad * pad, GstBufferList * list) +/** + * gst_proxy_pad_chain_list_default: + * @pad: a sink #GstPad, returns GST_FLOW_ERROR if not. + * @list: (transfer full): the #GstBufferList to send, return GST_FLOW_ERROR + * if not. + * + * Invoke the default chain list function of the proxy pad. + * + * Returns: a #GstFlowReturn from the pad. + * + * Since: 0.10.35 + */ +GstFlowReturn +gst_proxy_pad_chain_list_default (GstPad * pad, GstBufferList * list) { GstFlowReturn res; - GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); + GstPad *internal; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR); + g_return_val_if_fail (GST_IS_BUFFER_LIST (list), GST_FLOW_ERROR); + + internal = GST_PROXY_PAD_INTERNAL (pad); res = gst_pad_push_list (internal, list); return res; } -static GstFlowReturn -gst_proxy_pad_do_getrange (GstPad * pad, guint64 offset, guint size, +/** + * gst_proxy_pad_get_range_default: + * @pad: a src #GstPad, returns #GST_FLOW_ERROR if not. + * @offset: The start offset of the buffer + * @size: The length of the buffer + * @buffer: (out callee-allocates): a pointer to hold the #GstBuffer, + * returns #GST_FLOW_ERROR if %NULL. + * + * Invoke the default getrange function of the proxy pad. + * + * Returns: a #GstFlowReturn from the pad. + * + * Since: 0.10.35 + */ +GstFlowReturn +gst_proxy_pad_getrange_default (GstPad * pad, guint64 offset, guint size, GstBuffer ** buffer) { GstFlowReturn res; - GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); + GstPad *internal; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), GST_FLOW_ERROR); + g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR); + + internal = GST_PROXY_PAD_INTERNAL (pad); res = gst_pad_pull_range (internal, offset, size, buffer); return res; } -static gboolean -gst_proxy_pad_do_checkgetrange (GstPad * pad) +/** + * gst_proxy_pad_checkgetrange_default: + * @pad: a src #GstPad, returns #GST_FLOW_ERROR if not. + * + * Invoke the default checkgetrange function of the proxy pad. + * + * Returns: a #gboolean from the pad. + * + * Since: 0.10.35 + */ +gboolean +gst_proxy_pad_checkgetrange_default (GstPad * pad) { gboolean result; - GstPad *internal = GST_PROXY_PAD_INTERNAL (pad); + GstPad *internal; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE); + + internal = GST_PROXY_PAD_INTERNAL (pad); result = gst_pad_check_pull_range (internal); return result; } -static GstCaps * -gst_proxy_pad_do_getcaps (GstPad * pad, GstCaps * filter) +/** + * gst_proxy_pad_getcaps_default: + * @pad: a #GstPad to get the capabilities of. + * @filter: a #GstCaps filter. + * + * Invoke the default getcaps function of the proxy pad. + * + * Returns: (transfer full): the caps of the pad with incremented ref-count + * + * Since: 0.10.35 + */ +GstCaps * +gst_proxy_pad_getcaps_default (GstPad * pad, GstCaps * filter) { - GstPad *target = gst_proxy_pad_get_target (pad); + GstPad *target; GstCaps *res; - GstPadTemplate *templ = GST_PAD_PAD_TEMPLATE (pad); + GstPadTemplate *templ; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL); + + templ = GST_PAD_PAD_TEMPLATE (pad); + target = gst_proxy_pad_get_target (pad); if (target) { /* if we have a real target, proxy the call */ res = gst_pad_get_caps (target, filter); @@ -245,12 +384,27 @@ done: return res; } -static gboolean -gst_proxy_pad_do_acceptcaps (GstPad * pad, GstCaps * caps) +/** + * gst_proxy_pad_acceptcaps_default: + * @pad: a #GstPad to check + * @caps: a #GstCaps to check on the pad + * + * Invoke the default acceptcaps function of the proxy pad. + * + * Returns: TRUE if the pad can accept the caps. + * + * Since: 0.10.35 + */ +gboolean +gst_proxy_pad_acceptcaps_default (GstPad * pad, GstCaps * caps) { - GstPad *target = gst_proxy_pad_get_target (pad); + GstPad *target; gboolean res; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE); + g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE); + + target = gst_proxy_pad_get_target (pad); if (target) { res = gst_pad_accept_caps (target, caps); gst_object_unref (target); @@ -263,23 +417,52 @@ gst_proxy_pad_do_acceptcaps (GstPad * pad, GstCaps * caps) return res; } -static void -gst_proxy_pad_do_fixatecaps (GstPad * pad, GstCaps * caps) +/** + * gst_proxy_pad_fixatecaps_default: + * @pad: a #GstPad to fixate + * @caps: the #GstCaps to fixate + * + * Invoke the default fixatecaps function of the proxy pad. + * + * Since: 0.10.35 + */ +void +gst_proxy_pad_fixatecaps_default (GstPad * pad, GstCaps * caps) { - GstPad *target = gst_proxy_pad_get_target (pad); + GstPad *target; + g_return_if_fail (GST_IS_PROXY_PAD (pad)); + g_return_if_fail (GST_IS_CAPS (caps)); + + target = gst_proxy_pad_get_target (pad); if (target) { gst_pad_fixate_caps (target, caps); gst_object_unref (target); } } -static gboolean -gst_proxy_pad_do_setcaps (GstPad * pad, GstCaps * caps) +/** + * gst_proxy_pad_setcaps_default: + * @pad: a #GstPad to set the capabilities of. + * @caps: (transfer none): a #GstCaps to set. + * + * Invoke the default setcaps function of the proxy pad. + * + * Returns: TRUE if the caps could be set. FALSE if the caps were not fixed + * or bad parameters were provided to this function. + * + * Since: 0.10.35 + */ +gboolean +gst_proxy_pad_setcaps_default (GstPad * pad, GstCaps * caps) { - GstPad *target = gst_proxy_pad_get_target (pad); + GstPad *target; gboolean res; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE); + g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE); + + target = gst_proxy_pad_get_target (pad); if (target) { res = gst_pad_set_caps (target, caps); gst_object_unref (target); @@ -353,22 +536,46 @@ gst_proxy_pad_get_target (GstPad * pad) return target; } -static GstPad * -gst_proxy_pad_get_internal (GstPad * pad) +/** + * gst_proxy_pad_get_internal: + * @pad: the #GstProxyPad + * + * Get the internal pad of @pad. Unref target pad after usage. + * + * The internal pad of a #GstGhostPad is the internally used + * pad of opposite direction, which is used to link to the target. + * + * Returns: (transfer full): the target #GstProxyPad, can be NULL. + * Unref target pad after usage. + * + * Since: 0.10.35 + */ +GstProxyPad * +gst_proxy_pad_get_internal (GstProxyPad * pad) { GstPad *internal; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL); + GST_PROXY_LOCK (pad); internal = GST_PROXY_PAD_INTERNAL (pad); if (internal) gst_object_ref (internal); GST_PROXY_UNLOCK (pad); - return internal; + return GST_PROXY_PAD_CAST (internal); } -static void -gst_proxy_pad_do_unlink (GstPad * pad) +/** + * gst_proxy_pad_unlink_default: + * @pad: a #GstPad to unlink + * + * Invoke the default unlink function of the proxy pad. + * + * Since: 0.10.35 + */ +void +gst_proxy_pad_unlink_default (GstPad * pad) { GstPad *internal; @@ -396,19 +603,19 @@ gst_proxy_pad_class_init (GstProxyPadClass * klass) gobject_class->finalize = gst_proxy_pad_finalize; /* Register common function pointer descriptions */ - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_query_type); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_event); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_query); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_iterate_internal_links); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_getcaps); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_acceptcaps); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_fixatecaps); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_setcaps); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_unlink); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_chain); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_chain_list); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_getrange); - GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_do_checkgetrange); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_query_type_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_event_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_query_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_iterate_internal_links_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_getcaps_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_acceptcaps_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_fixatecaps_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_setcaps_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_unlink_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_chain_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_chain_list_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_getrange_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_proxy_pad_checkgetrange_default); } static void @@ -449,17 +656,17 @@ gst_proxy_pad_init (GstProxyPad * ppad) GST_TYPE_PROXY_PAD, GstProxyPadPrivate); GST_PROXY_GET_LOCK (pad) = g_mutex_new (); - gst_pad_set_query_type_function (pad, gst_proxy_pad_do_query_type); - gst_pad_set_event_function (pad, gst_proxy_pad_do_event); - gst_pad_set_query_function (pad, gst_proxy_pad_do_query); + gst_pad_set_query_type_function (pad, gst_proxy_pad_query_type_default); + gst_pad_set_event_function (pad, gst_proxy_pad_event_default); + gst_pad_set_query_function (pad, gst_proxy_pad_query_default); gst_pad_set_iterate_internal_links_function (pad, - gst_proxy_pad_do_iterate_internal_links); + gst_proxy_pad_iterate_internal_links_default); - gst_pad_set_getcaps_function (pad, gst_proxy_pad_do_getcaps); - gst_pad_set_acceptcaps_function (pad, gst_proxy_pad_do_acceptcaps); - gst_pad_set_fixatecaps_function (pad, gst_proxy_pad_do_fixatecaps); - gst_pad_set_setcaps_function (pad, gst_proxy_pad_do_setcaps); - gst_pad_set_unlink_function (pad, gst_proxy_pad_do_unlink); + gst_pad_set_getcaps_function (pad, gst_proxy_pad_getcaps_default); + gst_pad_set_acceptcaps_function (pad, gst_proxy_pad_acceptcaps_default); + gst_pad_set_fixatecaps_function (pad, gst_proxy_pad_fixatecaps_default); + gst_pad_set_setcaps_function (pad, gst_proxy_pad_setcaps_default); + gst_pad_set_unlink_function (pad, gst_proxy_pad_unlink_default); } @@ -482,13 +689,26 @@ G_DEFINE_TYPE (GstGhostPad, gst_ghost_pad, GST_TYPE_PROXY_PAD); static void gst_ghost_pad_dispose (GObject * object); -/* see gstghostpad design docs */ -static gboolean -gst_ghost_pad_internal_do_activate_push (GstPad * pad, gboolean active) +/** + * gst_ghost_pad_internal_activate_push_default: + * @pad: the #GstPad to activate or deactivate. + * @active: whether the pad should be active or not. + * + * Invoke the default activate push function of a proxy pad that is + * owned by a ghost pad. + * + * Returns: %TRUE if the operation was successful. + * + * Since: 0.10.35 + */ +gboolean +gst_ghost_pad_internal_activate_push_default (GstPad * pad, gboolean active) { gboolean ret; GstPad *other; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE); + GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, we're ok", (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad)); @@ -500,12 +720,26 @@ gst_ghost_pad_internal_do_activate_push (GstPad * pad, gboolean active) return ret; } -static gboolean -gst_ghost_pad_internal_do_activate_pull (GstPad * pad, gboolean active) +/** + * gst_ghost_pad_internal_activate_pull_default: + * @pad: the #GstPad to activate or deactivate. + * @active: whether the pad should be active or not. + * + * Invoke the default activate pull function of a proxy pad that is + * owned by a ghost pad. + * + * Returns: %TRUE if the operation was successful. + * + * Since: 0.10.35 + */ +gboolean +gst_ghost_pad_internal_activate_pull_default (GstPad * pad, gboolean active) { gboolean ret; GstPad *other; + g_return_val_if_fail (GST_IS_PROXY_PAD (pad), FALSE); + GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad)); @@ -513,7 +747,7 @@ gst_ghost_pad_internal_do_activate_pull (GstPad * pad, gboolean active) /* we are activated in pull mode by our peer element, which is a sinkpad * that wants to operate in pull mode. This activation has to propagate * upstream throught the pipeline. We call the internal activation function, - * which will trigger gst_ghost_pad_do_activate_pull, which propagates even + * which will trigger gst_ghost_pad_activate_pull_default, which propagates even * further upstream */ GST_LOG_OBJECT (pad, "pad is src, activate internal"); other = GST_PROXY_PAD_INTERNAL (pad); @@ -533,12 +767,25 @@ gst_ghost_pad_internal_do_activate_pull (GstPad * pad, gboolean active) return ret; } -static gboolean -gst_ghost_pad_do_activate_push (GstPad * pad, gboolean active) +/** + * gst_ghost_pad_activate_push_default: + * @pad: the #GstPad to activate or deactivate. + * @active: whether the pad should be active or not. + * + * Invoke the default activate push function of a ghost pad. + * + * Returns: %TRUE if the operation was successful. + * + * Since: 0.10.35 + */ +gboolean +gst_ghost_pad_activate_push_default (GstPad * pad, gboolean active) { gboolean ret; GstPad *other; + g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE); + GST_LOG_OBJECT (pad, "%sactivate push on %s:%s, proxy internal", (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad)); @@ -549,12 +796,25 @@ gst_ghost_pad_do_activate_push (GstPad * pad, gboolean active) return ret; } -static gboolean -gst_ghost_pad_do_activate_pull (GstPad * pad, gboolean active) +/** + * gst_ghost_pad_activate_pull_default: + * @pad: the #GstPad to activate or deactivate. + * @active: whether the pad should be active or not. + * + * Invoke the default activate pull function of a ghost pad. + * + * Returns: %TRUE if the operation was successful. + * + * Since: 0.10.35 + */ +gboolean +gst_ghost_pad_activate_pull_default (GstPad * pad, gboolean active) { gboolean ret; GstPad *other; + g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE); + GST_LOG_OBJECT (pad, "%sactivate pull on %s:%s", (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad)); @@ -580,12 +840,26 @@ gst_ghost_pad_do_activate_pull (GstPad * pad, gboolean active) return ret; } -static GstPadLinkReturn -gst_ghost_pad_do_link (GstPad * pad, GstPad * peer) +/** + * gst_ghost_pad_link_default: + * @pad: the #GstPad to link. + * @peer: the #GstPad peer + * + * Invoke the default link function of a ghost pad. + * + * Returns: #GstPadLinkReturn of the operation + * + * Since: 0.10.35 + */ +GstPadLinkReturn +gst_ghost_pad_link_default (GstPad * pad, GstPad * peer) { GstPadLinkReturn ret; GstPad *internal; + g_return_val_if_fail (GST_IS_GHOST_PAD (pad), GST_PAD_LINK_REFUSED); + g_return_val_if_fail (GST_IS_PAD (peer), GST_PAD_LINK_REFUSED); + GST_DEBUG_OBJECT (pad, "linking ghostpad"); internal = GST_PROXY_PAD_INTERNAL (pad); @@ -619,11 +893,21 @@ link_failed: } } -static void -gst_ghost_pad_do_unlink (GstPad * pad) +/** + * gst_ghost_pad_unlink_default: + * @pad: the #GstPad to link. + * + * Invoke the default unlink function of a ghost pad. + * + * Since: 0.10.35 + */ +void +gst_ghost_pad_unlink_default (GstPad * pad) { GstPad *internal; + g_return_if_fail (GST_IS_GHOST_PAD (pad)); + internal = GST_PROXY_PAD_INTERNAL (pad); GST_DEBUG_OBJECT (pad, "unlinking ghostpad"); @@ -722,31 +1006,27 @@ done: gst_caps_unref (caps); } -static gboolean -gst_ghost_pad_do_setcaps (GstPad * pad, GstCaps * caps) +/** + * gst_ghost_pad_setcaps_default: + * @pad: the #GstPad to link. + * @caps: (transfer none): the #GstCaps to set + * + * Invoke the default setcaps function of a ghost pad. + * + * Returns: %TRUE if the operation was successful + * + * Since: 0.10.35 + */ +gboolean +gst_ghost_pad_setcaps_default (GstPad * pad, GstCaps * caps) { + g_return_val_if_fail (GST_IS_GHOST_PAD (pad), FALSE); + g_return_val_if_fail (caps == NULL || GST_IS_CAPS (caps), FALSE); + if (GST_PAD_DIRECTION (pad) == GST_PAD_SRC) return TRUE; - return gst_proxy_pad_do_setcaps (pad, caps); -} - -static GstIterator * -gst_ghost_pad_do_iterate_internal_links (GstPad * pad) -{ - GstIterator *res = NULL; - GstPad *internal = GST_PROXY_PAD_INTERNAL (GST_GHOST_PAD_CAST (pad)); - - if (internal) { - GValue v = { 0, }; - - g_value_init (&v, GST_TYPE_PAD); - g_value_set_object (&v, internal); - res = gst_iterator_new_single (GST_TYPE_PAD, &v); - g_value_unset (&v); - } - - return res; + return gst_proxy_pad_setcaps_default (pad, caps); } static void @@ -760,10 +1040,10 @@ gst_ghost_pad_class_init (GstGhostPadClass * klass) gobject_class->dispose = gst_ghost_pad_dispose; - GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_setcaps); - GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_activate_pull); - GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_activate_push); - GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_do_link); + GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_setcaps_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_activate_pull_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_activate_push_default); + GST_DEBUG_REGISTER_FUNCPTR (gst_ghost_pad_link_default); } static void @@ -772,13 +1052,12 @@ gst_ghost_pad_init (GstGhostPad * pad) GST_GHOST_PAD_PRIVATE (pad) = G_TYPE_INSTANCE_GET_PRIVATE (pad, GST_TYPE_GHOST_PAD, GstGhostPadPrivate); - gst_pad_set_setcaps_function (GST_PAD_CAST (pad), gst_ghost_pad_do_setcaps); + gst_pad_set_setcaps_function (GST_PAD_CAST (pad), + gst_ghost_pad_setcaps_default); gst_pad_set_activatepull_function (GST_PAD_CAST (pad), - gst_ghost_pad_do_activate_pull); + gst_ghost_pad_activate_pull_default); gst_pad_set_activatepush_function (GST_PAD_CAST (pad), - gst_ghost_pad_do_activate_push); - gst_pad_set_iterate_internal_links_function (GST_PAD_CAST (pad), - gst_ghost_pad_do_iterate_internal_links); + gst_ghost_pad_activate_push_default); } static void @@ -795,7 +1074,7 @@ gst_ghost_pad_dispose (GObject * object) gst_ghost_pad_set_target (GST_GHOST_PAD (pad), NULL); /* Unlink here so that gst_pad_dispose doesn't. That would lead to a call to - * gst_ghost_pad_do_unlink when the ghost pad is in an inconsistent state */ + * gst_ghost_pad_unlink_default when the ghost pad is in an inconsistent state */ peer = gst_pad_get_peer (pad); if (peer) { if (GST_PAD_IS_SRC (pad)) @@ -859,16 +1138,17 @@ gst_ghost_pad_construct (GstGhostPad * gpad) /* Set directional padfunctions for ghostpad */ if (dir == GST_PAD_SINK) { - gst_pad_set_chain_function (pad, gst_proxy_pad_do_chain); - gst_pad_set_chain_list_function (pad, gst_proxy_pad_do_chain_list); + gst_pad_set_chain_function (pad, gst_proxy_pad_chain_default); + gst_pad_set_chain_list_function (pad, gst_proxy_pad_chain_list_default); } else { - gst_pad_set_getrange_function (pad, gst_proxy_pad_do_getrange); - gst_pad_set_checkgetrange_function (pad, gst_proxy_pad_do_checkgetrange); + gst_pad_set_getrange_function (pad, gst_proxy_pad_getrange_default); + gst_pad_set_checkgetrange_function (pad, + gst_proxy_pad_checkgetrange_default); } /* link/unlink functions */ - gst_pad_set_link_function (pad, gst_ghost_pad_do_link); - gst_pad_set_unlink_function (pad, gst_ghost_pad_do_unlink); + gst_pad_set_link_function (pad, gst_ghost_pad_link_default); + gst_pad_set_unlink_function (pad, gst_ghost_pad_unlink_default); /* INTERNAL PAD, it always exists and is child of the ghostpad */ otherdir = (dir == GST_PAD_SRC) ? GST_PAD_SINK : GST_PAD_SRC; @@ -887,12 +1167,13 @@ gst_ghost_pad_construct (GstGhostPad * gpad) /* Set directional padfunctions for internal pad */ if (dir == GST_PAD_SRC) { - gst_pad_set_chain_function (internal, gst_proxy_pad_do_chain); - gst_pad_set_chain_list_function (internal, gst_proxy_pad_do_chain_list); + gst_pad_set_chain_function (internal, gst_proxy_pad_chain_default); + gst_pad_set_chain_list_function (internal, + gst_proxy_pad_chain_list_default); } else { - gst_pad_set_getrange_function (internal, gst_proxy_pad_do_getrange); + gst_pad_set_getrange_function (internal, gst_proxy_pad_getrange_default); gst_pad_set_checkgetrange_function (internal, - gst_proxy_pad_do_checkgetrange); + gst_proxy_pad_checkgetrange_default); } GST_PROXY_LOCK (pad); @@ -924,9 +1205,9 @@ gst_ghost_pad_construct (GstGhostPad * gpad) /* special activation functions for the internal pad */ gst_pad_set_activatepull_function (internal, - gst_ghost_pad_internal_do_activate_pull); + gst_ghost_pad_internal_activate_pull_default); gst_pad_set_activatepush_function (internal, - gst_ghost_pad_internal_do_activate_push); + gst_ghost_pad_internal_activate_push_default); GST_PROXY_UNLOCK (pad); diff --git a/gst/gstghostpad.h b/gst/gstghostpad.h index f492a74b59..37d27a2ff4 100644 --- a/gst/gstghostpad.h +++ b/gst/gstghostpad.h @@ -59,6 +59,22 @@ struct _GstProxyPadClass GType gst_proxy_pad_get_type (void); +GstProxyPad* gst_proxy_pad_get_internal (GstProxyPad *pad); + + +const GstQueryType* gst_proxy_pad_query_type_default (GstPad *pad); +gboolean gst_proxy_pad_event_default (GstPad *pad, GstEvent *event); +gboolean gst_proxy_pad_query_default (GstPad *pad, GstQuery **query); +GstIterator* gst_proxy_pad_iterate_internal_links_default (GstPad *pad); +GstFlowReturn gst_proxy_pad_chain_default (GstPad *pad, GstBuffer *buf); +GstFlowReturn gst_proxy_pad_chain_list_default (GstPad *pad, GstBufferList *list); +GstFlowReturn gst_proxy_pad_getrange_default (GstPad *pad, guint64 offset, guint size, GstBuffer **buffer); +gboolean gst_proxy_pad_checkgetrange_default (GstPad *pad); +GstCaps* gst_proxy_pad_getcaps_default (GstPad *pad, GstCaps * filter); +gboolean gst_proxy_pad_acceptcaps_default (GstPad *pad, GstCaps *caps); +void gst_proxy_pad_fixatecaps_default (GstPad *pad, GstCaps *caps); +gboolean gst_proxy_pad_setcaps_default (GstPad *pad, GstCaps *caps); +void gst_proxy_pad_unlink_default (GstPad * pad); #define GST_TYPE_GHOST_PAD (gst_ghost_pad_get_type ()) #define GST_IS_GHOST_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GHOST_PAD)) @@ -106,6 +122,15 @@ gboolean gst_ghost_pad_set_target (GstGhostPad *gpad, GstPad *newtarget); gboolean gst_ghost_pad_construct (GstGhostPad *gpad); +gboolean gst_ghost_pad_setcaps_default (GstPad * pad, GstCaps * caps); +void gst_ghost_pad_unlink_default (GstPad * pad); +GstPadLinkReturn gst_ghost_pad_link_default (GstPad * pad, GstPad * peer); +gboolean gst_ghost_pad_activate_pull_default (GstPad * pad, gboolean active); +gboolean gst_ghost_pad_activate_push_default (GstPad * pad, gboolean active); + +gboolean gst_ghost_pad_internal_activate_push_default (GstPad * pad, gboolean active); +gboolean gst_ghost_pad_internal_activate_pull_default (GstPad * pad, gboolean active); + G_END_DECLS #endif /* __GST_GHOST_PAD_H__ */ diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c index 7ad817978a..198325e4cf 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 @@ gst_mini_object_init (GstMiniObject * mini_object, GType type, gsize size) mini_object->refcount = 1; mini_object->flags = 0; mini_object->size = size; + mini_object->n_weak_refs = 0; + mini_object->weak_refs = NULL; } /** @@ -223,6 +225,16 @@ gst_mini_object_ref (GstMiniObject * mini_object) return mini_object; } +static void +weak_refs_notify (GstMiniObject * obj) +{ + guint i; + + for (i = 0; i < obj->n_weak_refs; i++) + obj->weak_refs[i].notify (obj->weak_refs[i].data, obj); + g_free (obj->weak_refs); +} + /** * gst_mini_object_unref: * @mini_object: the mini-object @@ -253,6 +265,10 @@ gst_mini_object_unref (GstMiniObject * mini_object) /* decrement the refcount again, if the subclass recycled the object we don't * want to free the instance anymore */ if (G_LIKELY (g_atomic_int_dec_and_test (&mini_object->refcount))) { + /* The weak reference stack is freed in the notification function */ + if (mini_object->n_weak_refs) + weak_refs_notify (mini_object); + #ifndef GST_DISABLE_TRACE gst_alloc_trace_free (_gst_mini_object_trace, mini_object); #endif @@ -299,3 +315,95 @@ gst_mini_object_replace (GstMiniObject ** olddata, GstMiniObject * newdata) if (olddata_val) gst_mini_object_unref (olddata_val); } + +/** + * gst_mini_object_weak_ref: (skip) + * @mini_object: #GstMiniObject to reference weakly + * @notify: callback to invoke before the mini object is freed + * @data: extra data to pass to notify + * + * Adds a weak reference callback to a mini object. Weak references are + * used for notification when a mini object is finalized. They are called + * "weak references" because they allow you to safely hold a pointer + * to the mini object without calling gst_mini_object_ref() + * (gst_mini_object_ref() adds a strong reference, that is, forces the object + * to stay alive). + * + * Since: 0.10.35 + */ +void +gst_mini_object_weak_ref (GstMiniObject * object, + GstMiniObjectWeakNotify notify, gpointer data) +{ + guint i; + + g_return_if_fail (object != NULL); + g_return_if_fail (notify != NULL); + g_return_if_fail (GST_MINI_OBJECT_REFCOUNT_VALUE (object) >= 1); + + G_LOCK (weak_refs_mutex); + + if (object->n_weak_refs) { + /* Don't add the weak reference if it already exists. */ + for (i = 0; i < object->n_weak_refs; i++) { + if (object->weak_refs[i].notify == notify && + object->weak_refs[i].data == data) { + g_warning ("%s: Attempt to re-add existing weak ref %p(%p) failed.", + G_STRFUNC, notify, data); + goto found; + } + } + + i = object->n_weak_refs++; + object->weak_refs = + g_realloc (object->weak_refs, sizeof (object->weak_refs[0]) * i); + } else { + object->weak_refs = g_malloc0 (sizeof (object->weak_refs[0])); + object->n_weak_refs = 1; + i = 0; + } + object->weak_refs[i].notify = notify; + object->weak_refs[i].data = data; +found: + G_UNLOCK (weak_refs_mutex); +} + +/** + * gst_mini_object_weak_unref: (skip) + * @mini_object: #GstMiniObject to remove a weak reference from + * @notify: callback to search for + * @data: data to search for + * + * Removes a weak reference callback to a mini object. + * + * Since: 0.10.35 + */ +void +gst_mini_object_weak_unref (GstMiniObject * object, + GstMiniObjectWeakNotify notify, gpointer data) +{ + gboolean found_one = FALSE; + + g_return_if_fail (object != NULL); + g_return_if_fail (notify != NULL); + + G_LOCK (weak_refs_mutex); + + if (object->n_weak_refs) { + guint i; + + for (i = 0; i < object->n_weak_refs; i++) + if (object->weak_refs[i].notify == notify && + object->weak_refs[i].data == data) { + found_one = TRUE; + object->n_weak_refs -= 1; + if (i != object->n_weak_refs) + object->weak_refs[i] = object->weak_refs[object->n_weak_refs]; + + break; + } + } + G_UNLOCK (weak_refs_mutex); + if (!found_one) + g_warning ("%s: couldn't find weak ref %p(%p)", G_STRFUNC, notify, data); +} diff --git a/gst/gstminiobject.h b/gst/gstminiobject.h index fe0a1aafc4..ff69eb60b0 100644 --- a/gst/gstminiobject.h +++ b/gst/gstminiobject.h @@ -65,6 +65,22 @@ typedef void (*GstMiniObjectDisposeFunction) (GstMiniObject *obj); */ typedef void (*GstMiniObjectFreeFunction) (GstMiniObject *obj); + /** + * GstMiniObjectWeakNotify: + * @data: data that was provided when the weak reference was established + * @where_the_mini_object_was: the mini object being finalized + * + * A #GstMiniObjectWeakNotify function can be added to a mini object as a + * callback that gets triggered when the mini object is finalized. Since the + * mini object is already being finalized when the #GstMiniObjectWeakNotify is + * called, there's not much you could do with the object, apart from e.g. using + * its adress as hash-index or the like. + * + * Since: 0.10.35 + */ +typedef void (*GstMiniObjectWeakNotify) (gpointer data, + GstMiniObject * where_the_mini_object_was); + /** * GST_MINI_OBJECT_FLAGS: * @obj: MiniObject to return flags for. @@ -165,6 +181,15 @@ struct _GstMiniObject { GstMiniObjectCopyFunction copy; GstMiniObjectDisposeFunction dispose; GstMiniObjectFreeFunction free; + + /* < private > */ + /* Used to keep track of weak ref notifies */ + guint n_weak_refs; + struct + { + GstMiniObjectWeakNotify notify; + gpointer data; + } *weak_refs; }; GType gst_mini_object_register (const gchar *name); @@ -180,6 +205,13 @@ GstMiniObject* gst_mini_object_make_writable (GstMiniObject *mini_object); GstMiniObject* gst_mini_object_ref (GstMiniObject *mini_object); void gst_mini_object_unref (GstMiniObject *mini_object); +void gst_mini_object_weak_ref (GstMiniObject *object, + GstMiniObjectWeakNotify notify, + gpointer data); +void gst_mini_object_weak_unref (GstMiniObject *object, + GstMiniObjectWeakNotify notify, + gpointer data); + void gst_mini_object_replace (GstMiniObject **olddata, GstMiniObject *newdata); diff --git a/gst/gstsystemclock.c b/gst/gstsystemclock.c index 45d12698e0..fbd4c3b1e4 100644 --- a/gst/gstsystemclock.c +++ b/gst/gstsystemclock.c @@ -326,9 +326,16 @@ gst_system_clock_add_wakeup (GstSystemClock * sysclock) if (sysclock->priv->wakeup_count == 0) { GST_CAT_DEBUG (GST_CAT_CLOCK, "writing control"); while (!gst_poll_write_control (sysclock->priv->timer)) { - g_warning - ("gstsystemclock: write control failed in wakeup_async, trying again : %d:%s\n", - errno, g_strerror (errno)); + if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) { + g_warning + ("gstsystemclock: write control failed in wakeup_async, trying again: %d:%s\n", + errno, g_strerror (errno)); + } else { + g_critical + ("gstsystemclock: write control failed in wakeup_async: %d:%s\n", + errno, g_strerror (errno)); + return; + } } } sysclock->priv->wakeup_count++; diff --git a/gstreamer.doap b/gstreamer.doap index 041e8f3bf7..807322b06e 100644 --- a/gstreamer.doap +++ b/gstreamer.doap @@ -38,6 +38,28 @@ hierarchy, and a set of media-agnostic core elements. + + + 0.10.34 + 0.10 + Misfits + 2011-05-13 + + + + + + + + 0.10.33 + 0.10 + Prior Spaceflight Experience is an Advantage + 2011-05-10 + + + + + 0.10.32 diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c index 7c3407b81b..88b06e33c4 100644 --- a/libs/gst/base/gstbasesrc.c +++ b/libs/gst/base/gstbasesrc.c @@ -2112,7 +2112,7 @@ again: /* no timestamp set and we are at offset 0, we can timestamp with 0 */ if (offset == 0 && src->segment.time == 0 - && GST_BUFFER_TIMESTAMP (*buf) == -1) { + && GST_BUFFER_TIMESTAMP (*buf) == -1 && !src->is_live) { *buf = gst_buffer_make_writable (*buf); GST_BUFFER_TIMESTAMP (*buf) = 0; } diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c index 661557b674..3e116050c3 100644 --- a/plugins/elements/gstinputselector.c +++ b/plugins/elements/gstinputselector.c @@ -95,9 +95,12 @@ enum { PROP_0, PROP_N_PADS, - PROP_ACTIVE_PAD + PROP_ACTIVE_PAD, + PROP_SYNC_STREAMS }; +#define DEFAULT_SYNC_STREAMS FALSE + #define DEFAULT_PAD_ALWAYS_OK TRUE enum @@ -520,6 +523,105 @@ gst_input_selector_wait (GstInputSelector * self, GstSelectorPad * pad) return self->flushing; } +/* must be called with the SELECTOR_LOCK, will block until the running time + * of the active pad is after this pad or return TRUE when flushing */ +static gboolean +gst_input_selector_wait_running_time (GstInputSelector * sel, + GstSelectorPad * pad, GstBuffer * buf) +{ + GstPad *active_sinkpad; + GstSelectorPad *active_selpad; + GstSegment *seg, *active_seg; + GstClockTime running_time, active_running_time = -1; + + seg = &pad->segment; + + active_sinkpad = + gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (pad)); + active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); + active_seg = &active_selpad->segment; + + /* We can only sync if the segments are in time format or + * if the active pad had no newsegment event yet */ + if (seg->format != GST_FORMAT_TIME || + (active_seg->format != GST_FORMAT_TIME + && active_seg->format != GST_FORMAT_UNDEFINED)) + return FALSE; + + /* If we have no valid timestamp we can't sync this buffer */ + if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) + return FALSE; + + running_time = GST_BUFFER_TIMESTAMP (buf); + /* If possible try to get the running time at the end of the buffer */ + if (GST_BUFFER_DURATION_IS_VALID (buf)) + running_time += GST_BUFFER_DURATION (buf); + if (running_time > seg->stop) + running_time = seg->stop; + running_time = + gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time); + /* If this is outside the segment don't sync */ + if (running_time == -1) + return FALSE; + + /* Get active pad's running time, if no configured segment yet keep at -1 */ + if (active_seg->format == GST_FORMAT_TIME) + active_running_time = + gst_segment_to_running_time (active_seg, GST_FORMAT_TIME, + active_seg->position); + + /* Wait until + * a) this is the active pad + * b) the pad or the selector is flushing + * c) the selector is not blocked + * d) the active pad has no running time or the active + * pad's running time is before this running time + * e) the active pad has a non-time segment + */ + while (pad != active_selpad && !sel->flushing && !pad->flushing && + (sel->blocked || active_running_time == -1 + || running_time >= active_running_time)) { + if (!sel->blocked) + GST_DEBUG_OBJECT (pad, + "Waiting for active streams to advance. %" GST_TIME_FORMAT " >= %" + GST_TIME_FORMAT, GST_TIME_ARGS (running_time), + GST_TIME_ARGS (active_running_time)); + + GST_INPUT_SELECTOR_WAIT (sel); + + /* Get new active pad, it might have changed */ + active_sinkpad = + gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (pad)); + active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); + active_seg = &active_selpad->segment; + + /* If the active segment is configured but not to time format + * we can't do any syncing at all */ + if (active_seg->format != GST_FORMAT_TIME + && active_seg->format != GST_FORMAT_UNDEFINED) + break; + + /* Get the new active pad running time */ + if (active_seg->format == GST_FORMAT_TIME) + active_running_time = + gst_segment_to_running_time (active_seg, GST_FORMAT_TIME, + active_seg->position); + else + active_running_time = -1; + + if (!sel->blocked) + GST_DEBUG_OBJECT (pad, + "Waited for active streams to advance. %" GST_TIME_FORMAT " >= %" + GST_TIME_FORMAT, GST_TIME_ARGS (running_time), + GST_TIME_ARGS (active_running_time)); + + } + + /* Return TRUE if the selector or the pad is flushing */ + return (sel->flushing || pad->flushing); +} + + static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstBuffer * buf) { @@ -549,6 +651,16 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf) prev_active_sinkpad = sel->active_sinkpad; active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + /* In sync mode wait until the active pad has advanced + * after the running time of the current buffer */ + if (sel->sync_streams && active_sinkpad != pad) { + if (gst_input_selector_wait_running_time (sel, selpad, buf)) + goto flushing; + } + + /* Might have changed while waiting */ + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + /* update the segment on the srcpad */ start_time = GST_BUFFER_TIMESTAMP (buf); if (GST_CLOCK_TIME_IS_VALID (start_time)) { @@ -567,6 +679,10 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf) if (pad != active_sinkpad) goto ignore; + /* Tell all non-active pads that we advanced the running time */ + if (sel->sync_streams) + GST_INPUT_SELECTOR_BROADCAST (sel); + /* if we have a pending segment, push it out now */ if (G_UNLIKELY (selpad->segment_pending)) { GST_DEBUG_OBJECT (pad, @@ -763,6 +879,21 @@ gst_input_selector_class_init (GstInputSelectorClass * klass) "The currently active sink pad", GST_TYPE_PAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstInputSelector:sync-streams + * + * If set to %TRUE all inactive streams will be synced to the + * running time of the active stream. This makes sure that no + * buffers are dropped by input-selector that might be needed + * when switching the active pad. + * + * Since: 0.10.35 + */ + g_object_class_install_property (gobject_class, PROP_SYNC_STREAMS, + g_param_spec_boolean ("sync-streams", "Sync Streams", + "Synchronize inactive streams to the running time of the active stream", + DEFAULT_SYNC_STREAMS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** * GstInputSelector::block: * @inputselector: the #GstInputSelector @@ -864,6 +995,7 @@ gst_input_selector_init (GstInputSelector * sel) sel->active_sinkpad = NULL; sel->padcount = 0; gst_segment_init (&sel->segment, GST_FORMAT_UNDEFINED); + sel->sync_streams = DEFAULT_SYNC_STREAMS; sel->lock = g_mutex_new (); sel->cond = g_cond_new (); @@ -979,6 +1111,12 @@ gst_input_selector_set_active_pad (GstInputSelector * self, active_pad_p = &self->active_sinkpad; gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad)); + + /* Wake up all non-active pads in sync mode, they might be + * the active pad now */ + if (self->sync_streams) + GST_INPUT_SELECTOR_BROADCAST (self); + GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT, self->active_sinkpad); @@ -1004,6 +1142,13 @@ gst_input_selector_set_property (GObject * object, guint prop_id, GST_INPUT_SELECTOR_UNLOCK (sel); break; } + case PROP_SYNC_STREAMS: + { + GST_INPUT_SELECTOR_LOCK (sel); + sel->sync_streams = g_value_get_boolean (value); + GST_INPUT_SELECTOR_UNLOCK (sel); + break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1027,6 +1172,11 @@ gst_input_selector_get_property (GObject * object, guint prop_id, g_value_set_object (value, sel->active_sinkpad); GST_INPUT_SELECTOR_UNLOCK (object); break; + case PROP_SYNC_STREAMS: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_boolean (value, sel->sync_streams); + GST_INPUT_SELECTOR_UNLOCK (object); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h index 0ed7a4b3cb..f370999689 100644 --- a/plugins/elements/gstinputselector.h +++ b/plugins/elements/gstinputselector.h @@ -56,6 +56,7 @@ struct _GstInputSelector { GstPad *active_sinkpad; guint n_pads; guint padcount; + gboolean sync_streams; GstSegment segment; /* the output segment */ gboolean pending_close; /* if we should push a close first */ diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c index 3139df37f7..233225db9c 100644 --- a/plugins/elements/gstmultiqueue.c +++ b/plugins/elements/gstmultiqueue.c @@ -156,6 +156,8 @@ struct _GstSingleQueue guint32 nextid; /* ID of the next object waiting to be pushed */ guint32 oldid; /* ID of the last object pushed (last in a series) */ guint32 last_oldid; /* Previously observed old_id, reset to MAXUINT32 on flush */ + GstClockTime next_time; /* End running time of next buffer to be pushed */ + GstClockTime last_time; /* Start running time of last pushed buffer */ GCond *turn; /* SingleQueue turn waiting conditional */ }; @@ -179,6 +181,7 @@ static void gst_single_queue_free (GstSingleQueue * squeue); static void wake_up_next_non_linked (GstMultiQueue * mq); static void compute_high_id (GstMultiQueue * mq); +static void compute_high_time (GstMultiQueue * mq); static void single_queue_overrun_cb (GstDataQueue * dq, GstSingleQueue * sq); static void single_queue_underrun_cb (GstDataQueue * dq, GstSingleQueue * sq); @@ -224,6 +227,7 @@ enum #define DEFAULT_USE_BUFFERING FALSE #define DEFAULT_LOW_PERCENT 10 #define DEFAULT_HIGH_PERCENT 99 +#define DEFAULT_SYNC_BY_RUNNING_TIME FALSE enum { @@ -237,6 +241,7 @@ enum PROP_USE_BUFFERING, PROP_LOW_PERCENT, PROP_HIGH_PERCENT, + PROP_SYNC_BY_RUNNING_TIME, PROP_LAST }; @@ -382,6 +387,22 @@ gst_multi_queue_class_init (GstMultiQueueClass * klass) "High threshold for buffering to finish", 0, 100, DEFAULT_HIGH_PERCENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * GstMultiQueue:sync-by-running-time + * + * If enabled multiqueue will synchronize deactivated or not-linked streams + * to the activated and linked streams by taking the running time. + * Otherwise multiqueue will synchronize the deactivated or not-linked + * streams by keeping the order in which buffers and events arrived compared + * to active and linked streams. + * + * Since: 0.10.35 + */ + g_object_class_install_property (gobject_class, PROP_SYNC_BY_RUNNING_TIME, + g_param_spec_boolean ("sync-by-running-time", "Sync By Running Time", + "Synchronize deactivated or not-linked streams by running time", + DEFAULT_SYNC_BY_RUNNING_TIME, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gobject_class->finalize = gst_multi_queue_finalize; @@ -419,8 +440,11 @@ gst_multi_queue_init (GstMultiQueue * mqueue) mqueue->low_percent = DEFAULT_LOW_PERCENT; mqueue->high_percent = DEFAULT_HIGH_PERCENT; + mqueue->sync_by_running_time = DEFAULT_SYNC_BY_RUNNING_TIME; + mqueue->counter = 1; mqueue->highid = -1; + mqueue->high_time = GST_CLOCK_TIME_NONE; mqueue->qlock = g_mutex_new (); } @@ -493,6 +517,9 @@ gst_multi_queue_set_property (GObject * object, guint prop_id, case PROP_HIGH_PERCENT: mq->high_percent = g_value_get_int (value); break; + case PROP_SYNC_BY_RUNNING_TIME: + mq->sync_by_running_time = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -535,6 +562,9 @@ gst_multi_queue_get_property (GObject * object, guint prop_id, case PROP_HIGH_PERCENT: g_value_set_int (value, mq->high_percent); break; + case PROP_SYNC_BY_RUNNING_TIME: + g_value_set_boolean (value, mq->sync_by_running_time); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -737,8 +767,15 @@ gst_single_queue_flush (GstMultiQueue * mq, GstSingleQueue * sq, gboolean flush) sq->nextid = 0; sq->oldid = 0; sq->last_oldid = G_MAXUINT32; + sq->next_time = GST_CLOCK_TIME_NONE; + sq->last_time = GST_CLOCK_TIME_NONE; gst_data_queue_set_flushing (sq->queue, FALSE); + /* Reset high time to be recomputed next */ + GST_MULTI_QUEUE_MUTEX_LOCK (mq); + mq->high_time = GST_CLOCK_TIME_NONE; + GST_MULTI_QUEUE_MUTEX_UNLOCK (mq); + sq->flushing = FALSE; GST_LOG_OBJECT (mq, "SingleQueue %d : starting task", sq->id); @@ -932,6 +969,63 @@ apply_buffer (GstMultiQueue * mq, GstSingleQueue * sq, GstClockTime timestamp, GST_MULTI_QUEUE_MUTEX_UNLOCK (mq); } +static GstClockTime +get_running_time (GstSegment * segment, GstMiniObject * object, gboolean end) +{ + GstClockTime time = GST_CLOCK_TIME_NONE; + + if (GST_IS_BUFFER (object)) { + GstBuffer *buf = GST_BUFFER_CAST (object); + + if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { + time = GST_BUFFER_TIMESTAMP (buf); + if (end && GST_BUFFER_DURATION_IS_VALID (buf)) + time += GST_BUFFER_DURATION (buf); + if (time > segment->stop) + time = segment->stop; + time = gst_segment_to_running_time (segment, GST_FORMAT_TIME, time); + } + } else if (GST_IS_BUFFER_LIST (object)) { + GstBufferList *list = GST_BUFFER_LIST_CAST (object); + gint i, n; + GstBuffer *buf; + + n = gst_buffer_list_len (list); + for (i = 0; i < n; i++) { + buf = gst_buffer_list_get (list, i); + if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { + time = GST_BUFFER_TIMESTAMP (buf); + if (end && GST_BUFFER_DURATION_IS_VALID (buf)) + time += GST_BUFFER_DURATION (buf); + if (time > segment->stop) + time = segment->stop; + time = gst_segment_to_running_time (segment, GST_FORMAT_TIME, time); + if (!end) + goto done; + } else if (!end) { + goto done; + } + } + } else if (GST_IS_EVENT (object)) { + GstEvent *event = GST_EVENT_CAST (object); + + /* For newsegment events return the running time of the start position */ + if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) { + GstSegment new_segment = *segment; + + gst_event_parse_segment (event, &new_segment); + if (new_segment.format == GST_FORMAT_TIME) { + time = + gst_segment_to_running_time (&new_segment, GST_FORMAT_TIME, + new_segment.start); + } + } + } + +done: + return time; +} + static GstFlowReturn gst_single_queue_push_one (GstMultiQueue * mq, GstSingleQueue * sq, GstMiniObject * object) @@ -1070,6 +1164,7 @@ gst_multi_queue_loop (GstPad * pad) GstMiniObject *object = NULL; guint32 newid; GstFlowReturn result; + GstClockTime next_time; sq = (GstSingleQueue *) gst_pad_get_element_private (pad); mq = sq->mqueue; @@ -1091,6 +1186,9 @@ gst_multi_queue_loop (GstPad * pad) object = gst_multi_queue_item_steal_object (item); gst_multi_queue_item_destroy (item); + /* Get running time of the item. Events will have GST_CLOCK_TIME_NONE */ + next_time = get_running_time (&sq->src_segment, object, TRUE); + GST_LOG_OBJECT (mq, "SingleQueue %d : newid:%d , oldid:%d", sq->id, newid, sq->last_oldid); @@ -1099,9 +1197,9 @@ gst_multi_queue_loop (GstPad * pad) * or it's the first loop, or we just passed the previous highid, * we might need to wake some sleeping pad up, so there's extra work * there too */ - if (sq->srcresult == GST_FLOW_NOT_LINKED || - (sq->last_oldid == G_MAXUINT32) || (newid != (sq->last_oldid + 1)) || - sq->last_oldid > mq->highid) { + if (sq->srcresult == GST_FLOW_NOT_LINKED + || (sq->last_oldid == G_MAXUINT32) || (newid != (sq->last_oldid + 1)) + || sq->last_oldid > mq->highid) { GST_LOG_OBJECT (mq, "CHECKING sq->srcresult: %s", gst_flow_get_name (sq->srcresult)); @@ -1116,6 +1214,7 @@ gst_multi_queue_loop (GstPad * pad) /* Update the nextid so other threads know when to wake us up */ sq->nextid = newid; + sq->next_time = next_time; /* Update the oldid (the last ID we output) for highid tracking */ if (sq->last_oldid != G_MAXUINT32) @@ -1126,10 +1225,20 @@ gst_multi_queue_loop (GstPad * pad) /* Recompute the highid */ compute_high_id (mq); - while (newid > mq->highid && sq->srcresult == GST_FLOW_NOT_LINKED) { - GST_DEBUG_OBJECT (mq, "queue %d sleeping for not-linked wakeup with " - "newid %u and highid %u", sq->id, newid, mq->highid); + /* Recompute the high time */ + compute_high_time (mq); + while (((mq->sync_by_running_time && next_time != GST_CLOCK_TIME_NONE && + (mq->high_time == GST_CLOCK_TIME_NONE + || next_time >= mq->high_time)) + || (!mq->sync_by_running_time && newid > mq->highid)) + && sq->srcresult == GST_FLOW_NOT_LINKED) { + + GST_DEBUG_OBJECT (mq, + "queue %d sleeping for not-linked wakeup with " + "newid %u, highid %u, next_time %" GST_TIME_FORMAT + ", high_time %" GST_TIME_FORMAT, sq->id, newid, mq->highid, + GST_TIME_ARGS (next_time), GST_TIME_ARGS (mq->high_time)); /* Wake up all non-linked pads before we sleep */ wake_up_next_non_linked (mq); @@ -1143,8 +1252,13 @@ gst_multi_queue_loop (GstPad * pad) goto out_flushing; } + /* Recompute the high time */ + compute_high_time (mq); + GST_DEBUG_OBJECT (mq, "queue %d woken from sleeping for not-linked " - "wakeup with newid %u and highid %u", sq->id, newid, mq->highid); + "wakeup with newid %u, highid %u, next_time %" GST_TIME_FORMAT + ", high_time %" GST_TIME_FORMAT, sq->id, newid, mq->highid, + GST_TIME_ARGS (next_time), GST_TIME_ARGS (mq->high_time)); } /* Re-compute the high_id in case someone else pushed */ @@ -1154,8 +1268,9 @@ gst_multi_queue_loop (GstPad * pad) /* Wake up all non-linked pads */ wake_up_next_non_linked (mq); } - /* We're done waiting, we can clear the nextid */ + /* We're done waiting, we can clear the nextid and nexttime */ sq->nextid = 0; + sq->next_time = GST_CLOCK_TIME_NONE; GST_MULTI_QUEUE_MUTEX_UNLOCK (mq); } @@ -1166,6 +1281,18 @@ gst_multi_queue_loop (GstPad * pad) GST_LOG_OBJECT (mq, "BEFORE PUSHING sq->srcresult: %s", gst_flow_get_name (sq->srcresult)); + /* Update time stats */ + next_time = get_running_time (&sq->src_segment, object, FALSE); + if (next_time != GST_CLOCK_TIME_NONE) { + if (sq->last_time == GST_CLOCK_TIME_NONE || sq->last_time < next_time) + sq->last_time = next_time; + if (mq->high_time == GST_CLOCK_TIME_NONE || mq->high_time <= next_time) { + /* Wake up all non-linked pads now that we advanceed the high time */ + mq->high_time = next_time; + wake_up_next_non_linked (mq); + } + } + /* Try to push out the new object */ result = gst_single_queue_push_one (mq, sq, object); sq->srcresult = result; @@ -1179,6 +1306,7 @@ gst_multi_queue_loop (GstPad * pad) gst_flow_get_name (sq->srcresult)); sq->last_oldid = newid; + return; out_flushing: @@ -1499,7 +1627,10 @@ wake_up_next_non_linked (GstMultiQueue * mq) GstSingleQueue *sq = (GstSingleQueue *) tmp->data; if (sq->srcresult == GST_FLOW_NOT_LINKED) { - if (sq->nextid != 0 && sq->nextid <= mq->highid) { + if ((mq->sync_by_running_time && mq->high_time != GST_CLOCK_TIME_NONE + && sq->next_time != GST_CLOCK_TIME_NONE + && sq->next_time >= mq->high_time) + || (sq->nextid != 0 && sq->nextid <= mq->highid)) { GST_LOG_OBJECT (mq, "Waking up singlequeue %d", sq->id); g_cond_signal (sq->turn); } @@ -1550,6 +1681,49 @@ compute_high_id (GstMultiQueue * mq) lowest); } +/* WITH LOCK TAKEN */ +static void +compute_high_time (GstMultiQueue * mq) +{ + /* The high-id is either the highest id among the linked pads, or if all + * pads are not-linked, it's the lowest not-linked pad */ + GList *tmp; + GstClockTime highest = GST_CLOCK_TIME_NONE; + GstClockTime lowest = GST_CLOCK_TIME_NONE; + + for (tmp = mq->queues; tmp; tmp = g_list_next (tmp)) { + GstSingleQueue *sq = (GstSingleQueue *) tmp->data; + + GST_LOG_OBJECT (mq, + "inspecting sq:%d , next_time:%" GST_TIME_FORMAT ", last_time:%" + GST_TIME_FORMAT ", srcresult:%s", sq->id, GST_TIME_ARGS (sq->next_time), + GST_TIME_ARGS (sq->last_time), gst_flow_get_name (sq->srcresult)); + + if (sq->srcresult == GST_FLOW_NOT_LINKED) { + /* No need to consider queues which are not waiting */ + if (sq->next_time == GST_CLOCK_TIME_NONE) { + GST_LOG_OBJECT (mq, "sq:%d is not waiting - ignoring", sq->id); + continue; + } + + if (lowest == GST_CLOCK_TIME_NONE || sq->next_time < lowest) + lowest = sq->next_time; + } else if (sq->srcresult != GST_FLOW_UNEXPECTED) { + /* If we don't have a global highid, or the global highid is lower than + * this single queue's last outputted id, store the queue's one, + * unless the singlequeue is at EOS (srcresult = UNEXPECTED) */ + if (highest == GST_CLOCK_TIME_NONE || sq->last_time > highest) + highest = sq->last_time; + } + } + + mq->high_time = highest; + + GST_LOG_OBJECT (mq, + "High time is now : %" GST_TIME_FORMAT ", lowest non-linked %" + GST_TIME_FORMAT, GST_TIME_ARGS (mq->high_time), GST_TIME_ARGS (lowest)); +} + #define IS_FILLED(q, format, value) (((q)->max_size.format) != 0 && \ ((q)->max_size.format) <= (value)) @@ -1738,8 +1912,6 @@ gst_single_queue_new (GstMultiQueue * mqueue, gint id) sq->extra_size.bytes = mqueue->extra_size.bytes; sq->extra_size.time = mqueue->extra_size.time; - GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue); - GST_DEBUG_OBJECT (mqueue, "Creating GstSingleQueue id:%d", sq->id); sq->mqueue = mqueue; @@ -1755,6 +1927,8 @@ gst_single_queue_new (GstMultiQueue * mqueue, gint id) sq->nextid = 0; sq->oldid = 0; + sq->next_time = GST_CLOCK_TIME_NONE; + sq->last_time = GST_CLOCK_TIME_NONE; sq->turn = g_cond_new (); sq->sinktime = GST_CLOCK_TIME_NONE; @@ -1799,6 +1973,8 @@ gst_single_queue_new (GstMultiQueue * mqueue, gint id) gst_pad_set_element_private (sq->sinkpad, (gpointer) sq); gst_pad_set_element_private (sq->srcpad, (gpointer) sq); + GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue); + /* only activate the pads when we are not in the NULL state * and add the pad under the state_lock to prevend state changes * between activating and adding */ diff --git a/plugins/elements/gstmultiqueue.h b/plugins/elements/gstmultiqueue.h index b9c28cd442..bb3d840420 100644 --- a/plugins/elements/gstmultiqueue.h +++ b/plugins/elements/gstmultiqueue.h @@ -50,6 +50,8 @@ typedef struct _GstMultiQueueClass GstMultiQueueClass; struct _GstMultiQueue { GstElement element; + gboolean sync_by_running_time; + /* number of queues */ guint nbqueues; @@ -65,6 +67,7 @@ struct _GstMultiQueue { guint32 counter; /* incoming object counter, use atomic accesses */ guint32 highid; /* contains highest id of last outputted object */ + GstClockTime high_time; /* highest start running time */ GMutex * qlock; /* Global queue lock (vs object lock or individual */ /* queues lock). Protects nbqueues, queues, global */ diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c index a1e85ff03b..7704aecce7 100644 --- a/plugins/elements/gstqueue2.c +++ b/plugins/elements/gstqueue2.c @@ -855,6 +855,7 @@ reset_rate_timer (GstQueue2 * queue) queue->bytes_in = 0; queue->bytes_out = 0; queue->byte_in_rate = 0.0; + queue->byte_in_period = 0; queue->byte_out_rate = 0.0; queue->last_in_elapsed = 0.0; queue->last_out_elapsed = 0.0; @@ -867,8 +868,11 @@ reset_rate_timer (GstQueue2 * queue) /* Tuning for rate estimation. We use a large window for the input rate because * it should be stable when connected to a network. The output rate is less * stable (the elements preroll, queues behind a demuxer fill, ...) and should - * therefore adapt more quickly. */ -#define AVG_IN(avg,val) ((avg) * 15.0 + (val)) / 16.0 + * therefore adapt more quickly. + * However, initial input rate may be subject to a burst, and should therefore + * initially also adapt more quickly to changes, and only later on give higher + * weight to previous values. */ +#define AVG_IN(avg,val,w1,w2) ((avg) * (w1) + (val) * (w2)) / ((w1) + (w2)) #define AVG_OUT(avg,val) ((avg) * 3.0 + (val)) / 4.0 static void @@ -890,14 +894,20 @@ update_in_rates (GstQueue2 * queue) period = elapsed - queue->last_in_elapsed; GST_DEBUG_OBJECT (queue, - "rates: period %f, in %" G_GUINT64_FORMAT, period, queue->bytes_in); + "rates: period %f, in %" G_GUINT64_FORMAT ", global period %f", + period, queue->bytes_in, queue->byte_in_period); byte_in_rate = queue->bytes_in / period; if (queue->byte_in_rate == 0.0) queue->byte_in_rate = byte_in_rate; else - queue->byte_in_rate = AVG_IN (queue->byte_in_rate, byte_in_rate); + queue->byte_in_rate = AVG_IN (queue->byte_in_rate, byte_in_rate, + (double) queue->byte_in_period, period); + + /* another data point, cap at 16 for long time running average */ + if (queue->byte_in_period < 16 * RATE_INTERVAL) + queue->byte_in_period += period; /* reset the values to calculate rate over the next interval */ queue->last_in_elapsed = elapsed; diff --git a/plugins/elements/gstqueue2.h b/plugins/elements/gstqueue2.h index 358b43a47a..ccbead6a17 100644 --- a/plugins/elements/gstqueue2.h +++ b/plugins/elements/gstqueue2.h @@ -116,6 +116,7 @@ struct _GstQueue2 gdouble last_in_elapsed; guint64 bytes_in; gdouble byte_in_rate; + gdouble byte_in_period; GTimer *out_timer; gboolean out_timer_started; diff --git a/po/af.po b/po/af.po index f33ca75da8..a181e82b61 100644 --- a/po/af.po +++ b/po/af.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.9.7\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2005-12-05 11:45+0200\n" "Last-Translator: Petri Jooste \n" "Language-Team: Afrikaans \n" diff --git a/po/az.po b/po/az.po index e5aa7ab14f..4ce2582aa7 100644 --- a/po/az.po +++ b/po/az.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.8.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2004-03-19 18:40+0200\n" "Last-Translator: Metin Amiroff \n" "Language-Team: Azerbaijani \n" diff --git a/po/be.po b/po/be.po index 3653b71be1..dbd76abf8b 100644 --- a/po/be.po +++ b/po/be.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.9.7\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2006-01-18 22:26+0200\n" "Last-Translator: Ales Nyakhaychyk \n" "Language-Team: Belarusian \n" diff --git a/po/bg.po b/po/bg.po index 0d297fe236..4c9489d068 100644 --- a/po/bg.po +++ b/po/bg.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-27 11:27+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-04-26 22:40+0300\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" diff --git a/po/ca.po b/po/ca.po index 0e7c9598b7..0edb1bfb95 100644 --- a/po/ca.po +++ b/po/ca.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-11-04 19:41+0100\n" "Last-Translator: Jordi Mallach \n" "Language-Team: Catalan \n" diff --git a/po/cs.po b/po/cs.po index c4767aecc6..4e42da628e 100644 --- a/po/cs.po +++ b/po/cs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.20.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2008-10-12 12:12+0200\n" "Last-Translator: Miloslav Trmac \n" "Language-Team: Czech \n" diff --git a/po/da.po b/po/da.po index 5fade0ed99..813661a6d9 100644 --- a/po/da.po +++ b/po/da.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-11-06 22:52+0100\n" "Last-Translator: Mogens Jaeger \n" "Language-Team: Danish \n" diff --git a/po/de.po b/po/de.po index daa837177b..cc8741a0c4 100644 --- a/po/de.po +++ b/po/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-30 15:35+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-04-27 23:44+0200\n" "Last-Translator: Christian Kirbach \n" "Language-Team: German \n" diff --git a/po/el.po b/po/el.po index 1aa662b7db..c4409ca7bf 100644 --- a/po/el.po +++ b/po/el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-11-29 11:14+0200\n" "Last-Translator: Michael Kotsarinis \n" "Language-Team: Greek \n" diff --git a/po/en_GB.po b/po/en_GB.po index ba81f68be4..f77ab29856 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2004-04-26 10:36-0400\n" "Last-Translator: Gareth Owen \n" "Language-Team: English (British) \n" diff --git a/po/es.po b/po/es.po index 872b03fd64..c579819a88 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-11-01 18:11+0100\n" "Last-Translator: Jorge González González \n" "Language-Team: Spanish \n" diff --git a/po/eu.po b/po/eu.po index 663b9d9c60..529077fb5d 100644 --- a/po/eu.po +++ b/po/eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.26.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-03-25 13:10+0100\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Basque \n" diff --git a/po/fi.po b/po/fi.po index 2ec7471fbf..1add3ba935 100644 --- a/po/fi.po +++ b/po/fi.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-11-17 23:10+0200\n" "Last-Translator: Tommi Vainikainen \n" "Language-Team: Finnish \n" diff --git a/po/fr.po b/po/fr.po index 4891afe858..9641e7779e 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-30 15:35+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-04-28 09:34+0200\n" "Last-Translator: Claude Paroz \n" "Language-Team: French \n" diff --git a/po/gl.po b/po/gl.po index 6bae3e8bd9..a58aec8ac2 100644 --- a/po/gl.po +++ b/po/gl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.31.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-04-13 05:19+0000\n" "Last-Translator: Francisco Diéguez \n" "Language-Team: Galician \n" diff --git a/po/hu.po b/po/hu.po index 205af5993d..74b2fd76f1 100644 --- a/po/hu.po +++ b/po/hu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-11-01 13:39+0100\n" "Last-Translator: Gabor Kelemen \n" "Language-Team: Hungarian \n" diff --git a/po/id.po b/po/id.po index 44da03de5d..ea40ed1338 100644 --- a/po/id.po +++ b/po/id.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-06-29 21:55+0700\n" "Last-Translator: Andhika Padmawan \n" "Language-Team: Indonesian \n" diff --git a/po/it.po b/po/it.po index c041ecfafb..c48f6706f9 100644 --- a/po/it.po +++ b/po/it.po @@ -106,7 +106,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-10-25 10:03+0200\n" "Last-Translator: Luca Ferretti \n" "Language-Team: Italian \n" diff --git a/po/ja.po b/po/ja.po index 33afbfa00d..dc0d8c55bd 100644 --- a/po/ja.po +++ b/po/ja.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.20.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2008-10-16 19:57+0900\n" "Last-Translator: Makoto Kato \n" "Language-Team: Japanese \n" diff --git a/po/lt.po b/po/lt.po index dcd575a701..119cf67ef2 100644 --- a/po/lt.po +++ b/po/lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-07-16 00:50+0300\n" "Last-Translator: Žygimantas Beručka \n" "Language-Team: Lithuanian \n" diff --git a/po/nb.po b/po/nb.po index af44e1cac6..0fd1f5bb31 100644 --- a/po/nb.po +++ b/po/nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-10-24 21:36+0200\n" "Last-Translator: Kjartan Maraas \n" "Language-Team: Norwegian Bokmaal \n" diff --git a/po/nl.po b/po/nl.po index beea5857d4..65965491ea 100644 --- a/po/nl.po +++ b/po/nl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-27 11:27+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-04-26 23:10+0200\n" "Last-Translator: Freek de Kruijf \n" "Language-Team: Dutch \n" diff --git a/po/pl.po b/po/pl.po index 5f3860b1f5..aa1e2db30f 100644 --- a/po/pl.po +++ b/po/pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-27 11:27+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-04-26 17:54+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" diff --git a/po/pt_BR.po b/po/pt_BR.po index f31bb9a0e5..d144759925 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.31.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-01-08 01:36-0300\n" "Last-Translator: Fabrício Godoy \n" "Language-Team: Brazilian Portuguese \n" diff --git a/po/ro.po b/po/ro.po index a0c067791d..e7e7e3f966 100644 --- a/po/ro.po +++ b/po/ro.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-08-16 01:10+0300\n" "Last-Translator: Lucian Adrian Grijincu \n" "Language-Team: Romanian \n" diff --git a/po/ru.po b/po/ru.po index 1ad44b1697..2300900452 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-27 11:27+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-04-26 20:25+0400\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" diff --git a/po/rw.po b/po/rw.po index 8818bc89dc..6200b2fcf5 100644 --- a/po/rw.po +++ b/po/rw.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.8\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2005-04-04 10:55-0700\n" "Last-Translator: Steven Michael Murphy \n" "Language-Team: Kinyarwanda \n" diff --git a/po/sk.po b/po/sk.po index cb9c00e319..7c266a1fbb 100644 --- a/po/sk.po +++ b/po/sk.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-11-08 16:13+0100\n" "Last-Translator: Peter Tuhársky \n" "Language-Team: Slovak \n" diff --git a/po/sl.po b/po/sl.po index ab5cfa6022..20996f530c 100644 --- a/po/sl.po +++ b/po/sl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-09-18 20:21+0100\n" "Last-Translator: Matej Urbančič \n" "Language-Team: Slovenian \n" diff --git a/po/sq.po b/po/sq.po index dd89e544c2..2b35a23414 100644 --- a/po/sq.po +++ b/po/sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.4\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2004-08-07 23:46+0200\n" "Last-Translator: Laurent Dhima \n" "Language-Team: Albanian \n" diff --git a/po/sr.po b/po/sr.po index bc9d6ef2b5..272ed70bed 100644 --- a/po/sr.po +++ b/po/sr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.8\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2005-01-27 16:58+0100\n" "Last-Translator: Danilo Segan \n" "Language-Team: Serbian \n" diff --git a/po/sv.po b/po/sv.po index aaf92b04c5..adbde56217 100644 --- a/po/sv.po +++ b/po/sv.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.31.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2011-01-09 19:46+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" diff --git a/po/tr.po b/po/tr.po index 04c1941c09..a4c2a40c8f 100644 --- a/po/tr.po +++ b/po/tr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2004-04-03 03:14+0300\n" "Last-Translator: Baris Cicek \n" "Language-Team: Turkish \n" diff --git a/po/uk.po b/po/uk.po index d2369c6d6f..50b36d9c7d 100644 --- a/po/uk.po +++ b/po/uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.14\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2007-09-07 11:16+0300\n" "Last-Translator: Maxim V. Dziumanenko \n" "Language-Team: Ukrainian \n" diff --git a/po/vi.po b/po/vi.po index cda9a34a27..d95c7a04cc 100644 --- a/po/vi.po +++ b/po/vi.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-10-03 19:09+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" diff --git a/po/zh_CN.po b/po/zh_CN.po index 2c7a30e543..daaf2027bd 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.25.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2010-02-02 18:58+0800\n" "Last-Translator: Ji ZhengYu \n" "Language-Team: Chinese (simplified) \n" diff --git a/po/zh_TW.po b/po/zh_TW.po index 4dafa17ed8..4a83e21214 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.8\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2011-04-16 14:53+0100\n" +"POT-Creation-Date: 2011-05-10 08:32+0100\n" "PO-Revision-Date: 2005-04-27 14:55+0800\n" "Last-Translator: Abel Cheung \n" "Language-Team: Chinese (traditional) \n" diff --git a/tests/check/gst/gstghostpad.c b/tests/check/gst/gstghostpad.c index b5034f1c51..a6ed29bc69 100644 --- a/tests/check/gst/gstghostpad.c +++ b/tests/check/gst/gstghostpad.c @@ -255,7 +255,7 @@ GST_END_TEST; GST_START_TEST (test_link) { GstElement *b1, *b2, *src, *sink; - GstPad *srcpad, *sinkpad, *gpad; + GstPad *srcpad, *sinkpad, *gpad, *ppad, *tmp; GstPadLinkReturn ret; b1 = gst_element_factory_make ("pipeline", NULL); @@ -278,6 +278,14 @@ GST_START_TEST (test_link) /* now setup a ghostpad */ gpad = gst_ghost_pad_new ("sink", sinkpad); + + /* Check if the internal pads are set correctly */ + ppad = GST_PAD (gst_proxy_pad_get_internal (GST_PROXY_PAD (gpad))); + fail_unless (ppad == GST_PAD_PEER (sinkpad)); + tmp = GST_PAD (gst_proxy_pad_get_internal (GST_PROXY_PAD (ppad))); + fail_unless (tmp == gpad); + gst_object_unref (tmp); + gst_object_unref (ppad); gst_object_unref (sinkpad); /* need to ref as _add_pad takes ownership */ gst_object_ref (gpad); diff --git a/tests/check/gst/gstminiobject.c b/tests/check/gst/gstminiobject.c index b4ffcb8cbb..237f7e40ce 100644 --- a/tests/check/gst/gstminiobject.c +++ b/tests/check/gst/gstminiobject.c @@ -168,6 +168,33 @@ GST_START_TEST (test_unref_threaded) GST_END_TEST; +/* ======== weak ref test ======== */ + +static gboolean weak_ref_notify_succeeded = FALSE; + +static void +on_weak_ref_notify (gpointer data, GstMiniObject * where_object_was) +{ + weak_ref_notify_succeeded = TRUE; +} + +GST_START_TEST (test_weak_ref) +{ + GstBuffer *buffer; + + buffer = gst_buffer_new_and_alloc (4); + + gst_mini_object_weak_ref (GST_MINI_OBJECT (buffer), on_weak_ref_notify, + &buffer); + + gst_buffer_unref (buffer); + + fail_unless (weak_ref_notify_succeeded, + "No weak reference notification took place."); +} + +GST_END_TEST; + #if 0 /* ======== recycle test ======== */ @@ -434,6 +461,7 @@ gst_mini_object_suite (void) tcase_add_test (tc_chain, test_make_writable); tcase_add_test (tc_chain, test_ref_threaded); tcase_add_test (tc_chain, test_unref_threaded); + tcase_add_test (tc_chain, test_weak_ref); //tcase_add_test (tc_chain, test_recycle_threaded); tcase_add_test (tc_chain, test_value_collection); tcase_add_test (tc_chain, test_dup_null_mini_object); diff --git a/win32/common/config.h b/win32/common/config.h index fad9156990..74e6fc42f9 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 8b749c484d..be93d1ae33 100644 --- a/win32/common/gstversion.h +++ b/win32/common/gstversion.h @@ -57,14 +57,14 @@ G_BEGIN_DECLS * * The micro version of GStreamer at compile time: */ -#define GST_VERSION_MICRO (32) +#define GST_VERSION_MICRO (34) /** * GST_VERSION_NANO: * * The nano version of GStreamer at compile time: * Actual releases have 0, GIT versions have 1, prerelease versions have 2-... */ -#define GST_VERSION_NANO (4) +#define GST_VERSION_NANO (1) /** * GST_CHECK_VERSION: diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 06969d0936..e545769303 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -436,14 +436,21 @@ EXPORTS gst_fraction_get_type gst_fraction_range_get_type gst_g_error_get_type + gst_ghost_pad_activate_pull_default + gst_ghost_pad_activate_push_default gst_ghost_pad_construct gst_ghost_pad_get_target gst_ghost_pad_get_type + gst_ghost_pad_internal_activate_pull_default + gst_ghost_pad_internal_activate_push_default + gst_ghost_pad_link_default gst_ghost_pad_new gst_ghost_pad_new_from_template gst_ghost_pad_new_no_target gst_ghost_pad_new_no_target_from_template gst_ghost_pad_set_target + gst_ghost_pad_setcaps_default + gst_ghost_pad_unlink_default gst_implements_interface_cast gst_implements_interface_check gst_implements_interface_get_type @@ -613,6 +620,8 @@ EXPORTS gst_mini_object_register gst_mini_object_replace gst_mini_object_unref + gst_mini_object_weak_ref + gst_mini_object_weak_unref gst_object_check_uniqueness gst_object_default_deep_notify gst_object_default_error @@ -827,7 +836,22 @@ EXPORTS gst_print_element_args gst_print_pad_caps gst_progress_type_get_type + gst_proxy_pad_acceptcaps_default + gst_proxy_pad_bufferalloc_default + gst_proxy_pad_chain_default + gst_proxy_pad_chain_list_default + gst_proxy_pad_checkgetrange_default + gst_proxy_pad_event_default + gst_proxy_pad_fixatecaps_default + gst_proxy_pad_get_internal gst_proxy_pad_get_type + gst_proxy_pad_getcaps_default + gst_proxy_pad_getrange_default + gst_proxy_pad_iterate_internal_links_default + gst_proxy_pad_query_default + gst_proxy_pad_query_type_default + gst_proxy_pad_setcaps_default + gst_proxy_pad_unlink_default gst_qos_type_get_type gst_query_add_allocation_meta gst_query_add_buffering_range