Imported Upstream version 1.0.2 upstream/1.0.2
authorAnas Nashif <anas.nashif@intel.com>
Mon, 5 Nov 2012 16:03:31 +0000 (08:03 -0800)
committerAnas Nashif <anas.nashif@intel.com>
Mon, 5 Nov 2012 16:03:31 +0000 (08:03 -0800)
378 files changed:
ChangeLog
Makefile.in
NEWS
RELEASE
aclocal.m4
common/Makefile.in
common/m4/Makefile.in
common/m4/gst-feature.m4
common/upload-doc.mak
config.h.in
configure
configure.ac
docs/Makefile.in
docs/design/Makefile.am
docs/design/Makefile.in
docs/design/draft-klass.txt
docs/design/part-activation.txt
docs/design/part-block.txt [deleted file]
docs/design/part-buffering.txt
docs/design/part-negotiation.txt
docs/design/part-preroll.txt
docs/design/part-qos.txt
docs/design/part-sparsestreams.txt
docs/design/part-stream-status.txt
docs/design/part-synchronisation.txt
docs/faq/Makefile.in
docs/faq/dependencies.xml
docs/faq/getting.xml
docs/faq/troubleshooting.xml
docs/faq/using.xml
docs/gst/Makefile.in
docs/gst/gstreamer-sections.txt
docs/gst/html/GstBin.html
docs/gst/html/GstControlBinding.html
docs/gst/html/GstControlSource.html
docs/gst/html/GstElement.html
docs/gst/html/GstElementFactory.html
docs/gst/html/GstObject.html
docs/gst/html/GstPad.html
docs/gst/html/GstPadTemplate.html
docs/gst/html/GstPluginFeature.html
docs/gst/html/GstTagSetter.html
docs/gst/html/GstTypeFindFactory.html
docs/gst/html/gst-building.html
docs/gst/html/gst-running.html
docs/gst/html/gstreamer-Gst.html
docs/gst/html/gstreamer-GstBuffer.html
docs/gst/html/gstreamer-GstCaps.html
docs/gst/html/gstreamer-GstEvent.html
docs/gst/html/gstreamer-GstGError.html
docs/gst/html/gstreamer-GstInfo.html
docs/gst/html/gstreamer-GstIterator.html
docs/gst/html/gstreamer-GstMessage.html
docs/gst/html/gstreamer-GstQuery.html
docs/gst/html/gstreamer-GstSample.html
docs/gst/html/gstreamer-GstSegment.html
docs/gst/html/gstreamer-GstStructure.html
docs/gst/html/gstreamer-GstTagList.html
docs/gst/html/gstreamer-GstUriHandler.html
docs/gst/html/gstreamer-GstValue.html
docs/gst/html/gstreamer-GstVersion.html
docs/gst/html/gstreamer.devhelp2
docs/gst/html/index.html
docs/libs/Makefile.am
docs/libs/Makefile.in
docs/libs/gstreamer-libs-sections.txt
docs/libs/html/GstAdapter.html
docs/libs/html/GstBaseSink.html
docs/libs/html/GstBaseSrc.html
docs/libs/html/GstBaseTransform.html
docs/libs/html/GstCollectPads.html
docs/libs/html/GstInterpolationControlSource.html
docs/libs/html/GstLFOControlSource.html
docs/libs/html/GstNetClientClock.html
docs/libs/html/GstNetTimeProvider.html
docs/libs/html/GstPushSrc.html
docs/libs/html/GstTimedValueControlSource.html
docs/libs/html/GstTriggerControlSource.html
docs/libs/html/api-index-full.html
docs/libs/html/gstreamer-base.html
docs/libs/html/gstreamer-hierarchy.html
docs/libs/html/gstreamer-libs-GstBaseParse.html
docs/libs/html/gstreamer-libs-GstBufferStraw.html
docs/libs/html/gstreamer-libs-GstByteWriter.html
docs/libs/html/gstreamer-libs-GstCheck.html
docs/libs/html/gstreamer-libs-GstNetTimePacket.html
docs/libs/html/gstreamer-libs-GstStreamConsistency.html
docs/libs/html/gstreamer-libs-GstTypeFindHelper.html
docs/libs/html/gstreamer-libs.devhelp2
docs/libs/html/gstreamer-libs.html
docs/libs/html/index.html
docs/libs/html/index.sgml
docs/manual/Makefile.in
docs/manual/advanced-autoplugging.xml
docs/manual/advanced-buffering.xml [new file with mode: 0644]
docs/manual/advanced-clocks.xml
docs/manual/advanced-dataaccess.xml
docs/manual/advanced-interfaces.xml
docs/manual/advanced-metadata.xml
docs/manual/advanced-threads.xml
docs/manual/appendix-checklist.xml
docs/manual/appendix-compiling.xml [new file with mode: 0644]
docs/manual/appendix-integration.xml
docs/manual/appendix-porting.xml
docs/manual/appendix-programs.xml
docs/manual/basics-bins.xml
docs/manual/basics-bus.xml
docs/manual/basics-data.xml
docs/manual/basics-elements.xml
docs/manual/basics-helloworld.xml
docs/manual/basics-pads.xml
docs/manual/communication.png
docs/manual/gstreamer-overview.png
docs/manual/highlevel-components.xml [deleted file]
docs/manual/highlevel-playback.xml [new file with mode: 0644]
docs/manual/intro-basics.xml
docs/manual/intro-gstreamer.xml
docs/manual/manual.xml
docs/manual/mime-world.png
docs/manual/thread-buffering.png
docs/plugins/Makefile.in
docs/plugins/html/ch01.html
docs/plugins/html/ch02.html
docs/plugins/html/gstreamer-plugins-capsfilter.html
docs/plugins/html/gstreamer-plugins-fakesink.html
docs/plugins/html/gstreamer-plugins-fakesrc.html
docs/plugins/html/gstreamer-plugins-fdsink.html
docs/plugins/html/gstreamer-plugins-fdsrc.html
docs/plugins/html/gstreamer-plugins-filesink.html
docs/plugins/html/gstreamer-plugins-filesrc.html
docs/plugins/html/gstreamer-plugins-funnel.html
docs/plugins/html/gstreamer-plugins-identity.html
docs/plugins/html/gstreamer-plugins-input-selector.html
docs/plugins/html/gstreamer-plugins-multiqueue.html
docs/plugins/html/gstreamer-plugins-output-selector.html
docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
docs/plugins/html/gstreamer-plugins-queue.html
docs/plugins/html/gstreamer-plugins-queue2.html
docs/plugins/html/gstreamer-plugins-tee.html
docs/plugins/html/gstreamer-plugins-typefind.html
docs/plugins/html/gstreamer-plugins-valve.html
docs/plugins/html/gstreamer-plugins.devhelp2
docs/plugins/html/index.html
docs/plugins/inspect/plugin-coreelements.xml
docs/pwg/Makefile.in
docs/pwg/advanced-allocation.xml [new file with mode: 0644]
docs/pwg/advanced-clock.xml
docs/pwg/advanced-dparams.xml
docs/pwg/advanced-events.xml
docs/pwg/advanced-interfaces.xml
docs/pwg/advanced-negotiation.xml
docs/pwg/advanced-qos.xml [new file with mode: 0644]
docs/pwg/advanced-request.xml
docs/pwg/advanced-scheduling.xml
docs/pwg/advanced-tagging.xml
docs/pwg/advanced-types.xml
docs/pwg/appendix-checklist.xml
docs/pwg/appendix-porting.xml
docs/pwg/building-boiler.xml
docs/pwg/building-chainfn.xml
docs/pwg/building-eventfn.xml [new file with mode: 0644]
docs/pwg/building-pads.xml
docs/pwg/building-props.xml
docs/pwg/building-queryfn.xml [new file with mode: 0644]
docs/pwg/building-state.xml
docs/pwg/building-testapp.xml
docs/pwg/intro-basics.xml
docs/pwg/intro-preface.xml
docs/pwg/other-base.xml
docs/pwg/other-manager.xml
docs/pwg/other-ntoone.xml
docs/pwg/pwg.xml
docs/pwg/titlepage.xml
docs/slides/Makefile.in
docs/xsl/Makefile.in
gst/Makefile.in
gst/gst.c
gst/gstallocator.c
gst/gstbin.c
gst/gstelement.c
gst/gstelement.h
gst/gstelementfactory.c
gst/gstevent.c
gst/gstghostpad.c
gst/gstinfo.c
gst/gstmeta.c
gst/gstminiobject.c
gst/gstpad.c
gst/gstpad.h
gst/gstpipeline.c
gst/gstplugin.c
gst/gstpluginfeature.c
gst/gstpoll.c
gst/gstpreset.c
gst/gstquery.c
gst/gstsample.c
gst/gstsegment.h
gst/gsttaglist.c
gst/gsturi.c
gst/gstvalue.c
gst/parse/Makefile.in
gst/parse/grammar.tab.h
gstreamer.doap
gstreamer.spec
libs/Makefile.in
libs/gst/Makefile.in
libs/gst/base/Makefile.in
libs/gst/base/gstbaseparse.c
libs/gst/base/gstbasesink.c
libs/gst/base/gstbasesrc.c
libs/gst/base/gstbasesrc.h
libs/gst/base/gstbasetransform.c
libs/gst/base/gstbasetransform.h
libs/gst/base/gstcollectpads.c
libs/gst/base/gstcollectpads.h
libs/gst/base/gsttypefindhelper.c
libs/gst/check/Makefile.in
libs/gst/check/libcheck/Makefile.am
libs/gst/check/libcheck/Makefile.in
libs/gst/controller/Makefile.in
libs/gst/helpers/Makefile.in
libs/gst/net/Makefile.in
libs/gst/net/gstnetaddressmeta.c
m4/Makefile.in
m4/ax_pthread.m4 [new file with mode: 0644]
pkgconfig/Makefile.in
plugins/Makefile.in
plugins/elements/Makefile.in
plugins/elements/gstcapsfilter.c
plugins/elements/gstfakesink.c
plugins/elements/gstfakesrc.c
plugins/elements/gstidentity.c
plugins/elements/gstmultiqueue.c
plugins/elements/gsttee.c
plugins/elements/gsttypefindelement.c
plugins/elements/gsttypefindelement.h
po/af.gmo
po/af.po
po/az.gmo
po/az.po
po/be.gmo
po/be.po
po/bg.gmo
po/bg.po
po/ca.gmo
po/ca.po
po/cs.gmo
po/cs.po
po/da.gmo
po/da.po
po/de.gmo
po/de.po
po/el.gmo
po/el.po
po/en_GB.gmo
po/en_GB.po
po/eo.gmo
po/eo.po
po/es.gmo
po/es.po
po/eu.gmo
po/eu.po
po/fi.gmo
po/fi.po
po/fr.gmo
po/fr.po
po/gl.gmo
po/gl.po
po/gstreamer-1.0.pot
po/hu.gmo
po/hu.po
po/id.gmo
po/id.po
po/it.gmo
po/it.po
po/ja.gmo
po/ja.po
po/lt.gmo
po/lt.po
po/nb.gmo
po/nb.po
po/nl.gmo
po/nl.po
po/pl.gmo
po/pl.po
po/pt_BR.gmo
po/pt_BR.po
po/ro.gmo
po/ro.po
po/ru.gmo
po/ru.po
po/rw.gmo
po/rw.po
po/sk.gmo
po/sk.po
po/sl.gmo
po/sl.po
po/sq.gmo
po/sq.po
po/sr.gmo
po/sr.po
po/sv.gmo
po/sv.po
po/tr.gmo
po/tr.po
po/uk.gmo
po/uk.po
po/vi.gmo
po/vi.po
po/zh_CN.gmo
po/zh_CN.po
po/zh_TW.gmo
po/zh_TW.po
tests/Makefile.in
tests/benchmarks/Makefile.in
tests/benchmarks/complexity.c
tests/benchmarks/gstpollstress.c
tests/check/Makefile.am
tests/check/Makefile.in
tests/check/gst/gstabi.c [new file with mode: 0644]
tests/check/gst/gstcaps.c
tests/check/gst/gstghostpad.c
tests/check/gst/gstmemory.c
tests/check/gst/gstmeta.c
tests/check/gst/struct_arm.h
tests/check/gst/struct_hppa.h
tests/check/gst/struct_i386.h
tests/check/gst/struct_ppc32.h
tests/check/gst/struct_ppc64.h
tests/check/gst/struct_sparc.h
tests/check/gst/struct_x86_64.h
tests/check/libs/libsabi.c [new file with mode: 0644]
tests/check/libs/struct_arm.h
tests/check/libs/struct_hppa.h
tests/check/libs/struct_i386.h
tests/check/libs/struct_ppc32.h
tests/check/libs/struct_ppc64.h
tests/check/libs/struct_sparc.h
tests/check/libs/struct_x86_64.h
tests/examples/Makefile.in
tests/examples/adapter/Makefile.in
tests/examples/controller/Makefile.in
tests/examples/helloworld/Makefile.in
tests/examples/launch/Makefile.in
tests/examples/manual/Makefile.am
tests/examples/manual/Makefile.in
tests/examples/manual/appsink.c [new file with mode: 0644]
tests/examples/manual/appsrc.c [new file with mode: 0644]
tests/examples/manual/blockprobe.c [new file with mode: 0644]
tests/examples/manual/decodebin.c
tests/examples/manual/dynamic.c [deleted file]
tests/examples/manual/dynformat.c [new file with mode: 0644]
tests/examples/manual/effectswitch.c [new file with mode: 0644]
tests/examples/manual/fakesrc.c [deleted file]
tests/examples/manual/helloworld.c
tests/examples/manual/norebuffer.c [new file with mode: 0644]
tests/examples/manual/playbin.c
tests/examples/manual/playsink.c [new file with mode: 0644]
tests/examples/manual/probe.c [new file with mode: 0644]
tests/examples/manual/testrtpool.c [new file with mode: 0644]
tests/examples/memory/Makefile.in
tests/examples/metadata/Makefile.in
tests/examples/queue/Makefile.in
tests/examples/stepping/Makefile.in
tests/examples/streams/Makefile.am
tests/examples/streams/Makefile.in
tests/examples/typefind/Makefile.in
tests/misc/Makefile.in
tools/Makefile.in
tools/gst-launch.1.in
tools/gst-launch.c
tools/gst-plot-timeline.py
tools/gst-typefind.1.in
tools/tools.h
win32/common/config.h
win32/common/gstenumtypes.c
win32/common/gstversion.h
win32/common/libgstbase.def

index c3ada840c9b09e891e6a767b7640d5c083bbc5df..ef7250d77dcd21334c7ea4f0421392ada180db9f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+=== release 1.0.2 ===
+
+2012-10-25  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+         releasing 1.0.2
+
+2012-10-25 00:04:49 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-coreelements.xml:
+       * gstreamer.doap:
+       * win32/common/config.h:
+       * win32/common/gstversion.h:
+         Release 1.0.2
+
+2012-10-24 16:13:34 +0400  Руслан Ижбулатов <lrn1986@gmail.com>
+
+       * tests/examples/manual/Makefile.am:
+         examples: link testrtpool to pthreads
+         Fixes #686787
+
+2012-10-24 11:46:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstevent.c:
+         event: Allow GST_CLOCK_TIME_NONE as duration for GAP events
+
+2012-10-24 11:16:12 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasesrc.c:
+         basesrc: use new GCond for async state change
+         Use a new GCond, protected with the object lock, to signal completion
+         of the async state change. We can't reuse the live lock because that
+         one can be locked when the create function blocks.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686723
+
+2012-10-22 20:25:43 +0200  Miguel Angel Cabrera Moya <madmac2501@gmail.com>
+
+       * gst/gstallocator.c:
+         allocator: fix memory leak in _fallback_mem_copy
+         https://bugzilla.gnome.org/show_bug.cgi?id=686658
+
+2012-10-22 20:33:06 +0200  Miguel Angel Cabrera Moya <madmac2501@gmail.com>
+
+       * gst/gstpreset.c:
+         preset: remove variable not read
+         https://bugzilla.gnome.org/show_bug.cgi?id=686659
+
+2012-10-22 15:04:26 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * libs/gst/check/libcheck/Makefile.am:
+       * m4/ax_pthread.m4:
+       * tests/examples/streams/Makefile.am:
+         configure: Properly check for pthread
+         The old check failed on Android for example.
+
+2012-10-22 10:25:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstinfo.c:
+         info: Don't use GST_DEBUG() in gst_debug_add_log_function() and related functions unconditionally
+         If GStreamer was not initialized yet this will cause g_warnings().
+
+2012-10-20 19:44:43 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * libs/gst/base/gstcollectpads.h:
+         collectpads: fix g-i annotation for GstCollectPadsBufferFunction
+         We pass ownership of the buffer to the function.
+
+2012-10-20 12:54:06 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/libs/Makefile.am:
+       * gst/gst.c:
+         g_type_init() is no longer required and deprecated in glib >= 2.35.0
+         https://bugzilla.gnome.org/show_bug.cgi?id=686456
+
+2012-10-19 13:36:33 -0700  Michael Smith <msmith@rdio.com>
+
+       * gst/gstsample.c:
+         GstSample: fix typo in G-I annotations, allows creating GstSamples from bindings.
+
+2012-10-18 15:31:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstpoll.c:
+         poll: Fix compiler warning about constness
+         passing argument 1 of 'g_mutex_lock' discards 'const' qualifier from pointer target type
+         passing argument 1 of 'g_mutex_unlock' discards 'const' qualifier from pointer target type
+
+2012-10-17 16:49:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/gstbin.c:
+       * gst/gstpipeline.c:
+         bin, pipeline: use gst_element_class_set_static_metadata()
+         So the strings aren't copied.
+
+2012-10-16 12:31:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstelement.c:
+       * gst/gstelement.h:
+         element: API: Add GstElement::post_message() vfunc
+         Conflicts:
+         gst/gstelement.h
+
+2012-10-16 11:54:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-events.xml:
+         pwg: link to caps and qos chapters
+
+2012-10-16 11:20:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/building-boiler.xml:
+       * docs/pwg/building-queryfn.xml:
+       * docs/pwg/pwg.xml:
+         pwg: add section about query function
+
+2012-10-16 11:12:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/building-eventfn.xml:
+         pwg: fix event function
+
+2012-10-15 19:56:36 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * libs/gst/base/gstcollectpads.c:
+       * libs/gst/base/gstcollectpads.h:
+         collectpads: minor docs fixes
+
+2012-10-15 19:55:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * libs/gst/base/gstcollectpads.c:
+         collectpads: fix buffer leak in clip_time
+
+2012-10-15 18:44:52 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * libs/gst/base/gstcollectpads.c:
+         collectpads: call clip function with user data
+
+2012-10-15 14:06:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/pwg.xml:
+         pwg: reorder some chapters
+         Reorder some chapter so that they match the steps done in the
+         element.
+
+2012-10-15 13:59:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-negotiation.xml:
+         pwg: small tweaks to negotiation
+
+2012-10-15 13:44:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-negotiation.xml:
+         pwg: improve negotiation documentation some more
+
+2012-10-15 12:10:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-negotiation.txt:
+       * docs/pwg/advanced-negotiation.xml:
+         pwg: update negotiation part
+
+2012-10-15 12:10:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-synchronisation.txt:
+         docs: update synchronization docs
+
+2012-10-12 16:58:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-negotiation.xml:
+         pwg: work on rewriting caps negotiation docs
+
+2012-10-12 16:09:26 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-negotiation.txt:
+         design: rename passthrough negotiation
+         Rename passthrough negotiation to transform negotiation to avoid
+         confusion with passthrough operation.
+
+2012-10-12 13:15:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/basics-elements.xml:
+       * docs/manual/basics-pads.xml:
+         manual: no more new-decoded-pad
+
+2012-10-12 13:13:32 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+       * docs/manual/appendix-compiling.xml:
+       * docs/manual/manual.xml:
+         manual: move embedding elements to separate chapter
+
+2012-10-12 13:01:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-qos.xml:
+         pwg: small example for throttle
+
+2012-10-12 12:55:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-qos.xml:
+       * docs/pwg/pwg.xml:
+         pwg: add info about QoS
+
+2012-10-12 12:55:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/intro-basics.xml:
+         pwg: adds some more links
+
+2012-10-12 12:55:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-qos.txt:
+         qos: messages are posted, not dropped
+
+2012-10-12 10:35:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/communication.png:
+       * docs/manual/diagrams-general.svg:
+       * docs/manual/diagrams-pipelines.svg:
+       * docs/manual/gstreamer-overview.png:
+       * docs/manual/mime-world.png:
+       * docs/manual/thread-buffering.png:
+         manual: update graphics
+
+2012-10-11 17:10:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-buffering.xml:
+       * tests/examples/manual/.gitignore:
+       * tests/examples/manual/Makefile.am:
+         manual: add example of no-rebuffer buffering strategy
+
+2012-10-11 17:10:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/basics-bus.xml:
+       * docs/manual/intro-gstreamer.xml:
+         manual: small tweaks
+
+2012-10-11 17:09:29 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstquery.c:
+         query: buffering time left is in milliseconds
+
+2012-10-11 17:07:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/basics-bins.xml:
+         manual: add some text about bin state change order
+
+2012-10-10 16:43:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/highlevel-playback.xml:
+       * tests/examples/manual/Makefile.am:
+         manual: talk about playsink
+         Talk about playsink and give an example of its usage.
+
+2012-10-10 13:08:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-autoplugging.xml:
+       * docs/manual/highlevel-components.xml:
+       * docs/manual/highlevel-playback.xml:
+       * docs/manual/manual.xml:
+       * tests/examples/manual/Makefile.am:
+         manual: add something about uridecodebin
+
+2012-10-10 11:35:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * libs/gst/base/gstcollectpads.c:
+         collectpads: ensure all timestamps are in same time domain
+         ... by not only processing incoming buffers through a clip function,
+         but also other timestamps such as those coming from GAP event.
+
+2012-10-10 10:36:32 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * libs/gst/base/gstbaseparse.c:
+       * libs/gst/base/gstbasesrc.h:
+         docs: adjust some parameter mismatches
+
+2012-10-10 11:34:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstpad.c:
+         pad: Downgrade GST_WARNING to GST_INFO
+         It's usually not a problem if a query fails if there's no peer,
+         especially as it will happen during pad linking (caps query)
+         quite often and spams the logs.
+
+2012-10-09 17:06:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-autoplugging.xml:
+       * tests/examples/manual/.gitignore:
+       * tests/examples/manual/Makefile.am:
+         manual: remove outdated autoplugging section
+         Remove autoplugging chapter and point to decodebin/playbin examples.
+
+2012-10-09 16:12:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-threads.xml:
+       * tests/examples/manual/.gitignore:
+       * tests/examples/manual/Makefile.am:
+         manual: Talk about threading
+         Rework the threading chapter.
+         Talk about stream-status and give some examples on how to change
+         the thread priorities.
+
+2012-10-09 15:57:29 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-stream-status.txt:
+         design: improve stream-status document
+
+2012-10-09 15:31:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasesrc.c:
+         basesrc: retrieve the result from start_complete
+         gst_base_src_start_complete() can fail when the thread could not be
+         started, for example. Make sure it causes the state change to fail by
+         retrieving the result from _start_complete().
+
+2012-10-09 15:31:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasesrc.c:
+         basesrc: improve debug
+
+2012-10-09 10:24:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstpad.h:
+         pad: small docs fixes and remove a 0.11 fixme
+
+2012-10-08 16:42:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-buffering.txt:
+       * docs/manual/advanced-buffering.xml:
+       * docs/manual/manual.xml:
+         manual: talk a bit about buffering
+
+2012-10-08 13:22:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-clocks.xml:
+       * docs/pwg/advanced-clock.xml:
+         docs: improve clock chapter
+
+2012-10-08 10:39:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+       * tests/examples/manual/Makefile.am:
+         manual: add example for effect switching
+
+2012-10-08 09:11:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-preroll.txt:
+       * docs/design/part-sparsestreams.txt:
+         docs: small updates
+
+2012-10-07 16:48:25 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-coreelements.xml:
+       * win32/common/config.h:
+       * win32/common/gstversion.h:
+         Back to development (bug-fixing)
+
+=== release 1.0.1 ===
+
+2012-10-07 13:10:33 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-coreelements.xml:
+       * gstreamer.doap:
+       * win32/common/config.h:
+       * win32/common/gstenumtypes.c:
+       * win32/common/gstversion.h:
+         Release 1.0.1
+
+2012-10-07 00:15:49 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * tests/check/gst/struct_i386.h:
+       * tests/check/libs/struct_i386.h:
+         tests: update struct_i386.h for ABI checks
+         Fixes make check on 32-bit x86.
+
+2012-10-06 17:26:21 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * tests/check/gst/struct_ppc32.h:
+       * tests/check/libs/struct_ppc32.h:
+         tests: update struct_ppc32.h for ABI checks
+         Fixes make check on 32-bit PowerPC.
+
+2012-10-06 14:55:35 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From 6c0b52c to 6bb6951
+
+2012-10-06 12:08:34 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * tests/examples/manual/.gitignore:
+         examples: .gitignore more binaries from the manual
+
+2012-10-05 16:04:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/Makefile.am:
+       * docs/design/part-block.txt:
+       * docs/design/part-probes.txt:
+         docs: remove obsolete part-block document
+         Merge the part-block document into part-probes
+
+2012-10-05 09:42:59 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstpad.c:
+         pad: resend dropped events
+         If we try to push sticky events but a probe dropped them, we don't mark
+         the event as received and mark the pad as PENDING_EVENTS. This ensures
+         that we resend the event the next time. For this we need to let the
+         custom flow return from the probe trickle up to
+         gst_pad_push_event_unchecked() so that we can differentiate between
+         OK and DROPPED probe returns.
+
+2012-10-05 07:14:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstpad.c:
+         pad: don't store sticky events on flushing/EOS pads
+         Don't store sticky events on flushing or EOS pads. This was done
+         correctly for source pads but not for sink pads.
+
+2012-10-04 11:24:09 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/libs/gstreamer-libs-sections.txt:
+       * libs/gst/base/gstbasetransform.c:
+       * win32/common/libgstbase.def:
+         docs: add Since markers for new API and add it to docs and .def file
+
+2012-10-04 11:50:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+       * tests/examples/manual/Makefile.am:
+         manual: add dynamic capsfilter example
+
+2012-10-04 11:18:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * plugins/elements/gstcapsfilter.c:
+         capsfilter: don't prefer passthrough
+         Basetransform should not try to negotiate in passthrough mode but
+         respect the order of what we return in the transform_caps method.
+         A typical case is that you specify some specific new caps in the
+         caps property but also allow the current caps to pass.
+
+2012-10-04 11:15:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasetransform.c:
+       * libs/gst/base/gstbasetransform.h:
+         basetrans: add an option to prefer passthrough
+         Basetransform attempts to do passthrough mode regardless of the order of
+         the transform_caps method. Add a method to disable this.
+         This is needed for elements like capsfilter that want to transform caps
+         based on the order of the caps property.
+
+2012-10-04 10:01:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasetransform.c:
+         basetrans: improve some comments
+
+2012-10-03 17:17:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-autoplugging.xml:
+       * docs/manual/advanced-dataaccess.xml:
+         manual: talk some more about dynamic pipelines
+
+2012-10-03 13:49:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstmeta.c:
+         meta: don't put essential logic in g_return_val_*
+
+2012-10-03 13:45:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-allocation.xml:
+       * libs/gst/net/gstnetaddressmeta.c:
+       * tests/check/gst/gstmeta.c:
+         meta: do metadata registration threadsafe
+         We need to use g_once to register the metadata implementations
+         only once.
+         See https://bugzilla.gnome.org/show_bug.cgi?id=685332
+
+2012-10-03 13:35:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstmeta.c:
+         meta: handle multiple implementation registration
+         First check that we can actually register the implementation before
+         making a GstMetaInfo. If we can't register we would otherwise end
+         up with an undefined type and an invalid GstMetaInfo.
+         It's possible that type registration fails because another metadata
+         with the same implementation name was already registered.
+
+2012-10-03 13:12:44 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+         manual: use CDATA for code blocks
+         then we don't have to escape special token anymore.
+
+2012-10-03 13:09:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+       * tests/examples/manual/Makefile.am:
+         manual: add partial preroll example with probes
+
+2012-10-03 10:53:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+         manual: add more stuff about probes
+
+2012-10-02 17:23:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+         manual: start talking about dynamic pipeline changes
+
+2012-10-02 16:47:05 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+         manual: move section around
+
+2012-10-02 16:44:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+       * tests/examples/manual/Makefile.am:
+         pwg: add appsink docs
+
+2012-10-02 16:15:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-dataaccess.xml:
+       * tests/examples/manual/Makefile.am:
+         pwg: rewite data-access chapter
+         Rewrite the data-access chapter so that we talk about appsrc instead
+         of the fakesrc hacks.
+
+2012-10-02 13:22:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/draft-klass.txt:
+       * docs/manual/advanced-dataaccess.xml:
+       * docs/manual/advanced-metadata.xml:
+       * docs/manual/appendix-integration.xml:
+       * gst/gstpreset.c:
+       * po/README:
+       * tools/gst-plot-timeline.py:
+         docs: some 0.10 -> 1.0 changes
+
+2012-10-02 13:12:39 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-allocation.xml:
+         pwg: add allocation query example
+
+2012-10-02 12:49:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-allocation.xml:
+         pwg: add bufferpool docs
+
+2012-10-02 11:34:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/appendix-programs.xml:
+       * docs/manual/manual.xml:
+       * docs/pwg/advanced-allocation.xml:
+         pwg: flesh out allocation docs
+         Add more examples.
+         Add example for implementing new metadata.
+         Add programs to the docs (again?), it seems to contain useful info.
+
+2012-10-01 16:59:41 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/titlepage.xml:
+         pwg: add new author
+
+2012-10-01 16:55:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-allocation.xml:
+         pwg: add allocation docs
+
+2012-10-01 16:46:03 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-buffer.txt:
+       * docs/design/part-bufferpool.txt:
+       * docs/design/part-meta.txt:
+         docs: update design docs
+
+2012-10-01 13:28:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-bufferpool.txt:
+       * docs/design/part-memory.txt:
+       * docs/pwg/advanced-allocation.xml:
+       * docs/pwg/pwg.xml:
+         docs: more docs fixes
+         Fix allocator design doc
+         Add beginning of allocation chapter in the pwg
+
+2012-10-01 11:47:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/appendix-checklist.xml:
+       * docs/pwg/appendix-porting.xml:
+       * docs/pwg/other-manager.xml:
+       * docs/pwg/other-ntoone.xml:
+         pwg: final cleanups for 1.0
+
+2012-10-01 11:24:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-events.xml:
+       * docs/pwg/other-base.xml:
+         pwg: fix events and base classes
+
+2012-10-01 10:40:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-tagging.xml:
+         pwg: fixup tag docs
+
+2012-10-01 09:48:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-interfaces.xml:
+         pwg: patch up the section about interfaces
+
+2012-09-30 04:05:36 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+       * libs/gst/base/gstbasesrc.c:
+         basesrc: Fix seamless segment function
+         The 3rd parameter of gst_base_src_new_seamless_segment in
+         0.10 is the time associated with the start of the new segment,
+         not the position in the new segment. Fix the name of the parameter,
+         the docs, and the implementation to match the needs of the only
+         extant consumer: DVD playback.
+
+2012-09-29 14:35:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/gstvalue.c:
+       * tests/check/gst/gstcaps.c:
+         value: avoid duplicates when intersecting lists
+         Fixes negotiation taking a ridiculous amount of
+         time (multiple 10s of seconds on a core2) when
+         there are duplicate entries in lists.
+         Could have a negative performance impact on other
+         scenarios because we now have to iterate the
+         dest list to avoid duplicates, but we don't
+         have a lot of lists any more these days, and
+         they tend to be small anyway. The negatives
+         are hopefully countered by the positive effects
+         of reducing the list length early on in the
+         process. And in any case, it's the right thing
+         to do.
+         Based on patch by Andre Moreira Magalhaes.
+         https://bugzilla.gnome.org/show_bug.cgi?id=684981
+
+2012-09-29 00:27:03 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/pwg/building-boiler.xml:
+         pwg: minor update
+         https://bugzilla.gnome.org/show_bug.cgi?id=621121
+
+2012-09-28 23:53:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/faq/dependencies.xml:
+         faq: add missing </para> tag
+
+2012-09-28 15:17:27 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * gst/gstminiobject.c:
+       * tests/check/gst/gstmemory.c:
+         miniobject: Always reject WRITE locks on READONLY miniobjects
+         Verify that mapping a read-only memory as read doesnt make it writable
+
+2012-09-28 20:38:20 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/faq/dependencies.xml:
+       * docs/random/autotools:
+       * docs/random/moving-plugins:
+         docs: purge all mention of liboil, update FAQ
+         https://bugzilla.gnome.org/show_bug.cgi?id=673285
+
+2012-09-28 16:03:15 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-clock.xml:
+       * docs/pwg/advanced-dparams.xml:
+       * docs/pwg/advanced-interfaces.xml:
+         pwg: update for 1.0
+         Rewrite clock part.
+         start on interfaces
+
+2012-09-28 13:25:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-request.xml:
+         pwg: rework dynamic pads docs
+
+2012-09-28 13:25:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-scheduling.xml:
+         pwg: rework scheduling docs
+
+2012-09-28 13:24:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/building-props.xml:
+       * docs/pwg/other-base.xml:
+         pwg: remove some GST_BOILERPLATE
+
+2012-09-28 11:18:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/design/part-activation.txt:
+         docs: update activation design docs
+
+2012-09-28 10:41:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstpad.c:
+       * gst/gstpad.h:
+         pad: fix activate docs
+
+2012-09-28 10:04:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-negotiation.xml:
+         pwg: fix more negotiation for 1.0
+
+2012-09-27 16:59:04 +0200  Olivier Blin <olivier.blin@softathome.com>
+
+       * gst/gstinfo.c:
+         info: do not register printf extension for %p
+         This happened when glib was not using system printf, and caused the
+         internal gstreamer printf extensions to be used for all %p printfs,
+         causing crashes.
+         https://bugzilla.gnome.org/show_bug.cgi?id=684970
+
+2012-09-27 17:21:53 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/advanced-negotiation.xml:
+         pwg: fix some negotiation to 1.0
+
+2012-09-27 14:42:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/building-props.xml:
+       * docs/pwg/building-state.xml:
+       * docs/pwg/building-testapp.xml:
+         pwg: more updates for 1.0
+
+2012-09-27 13:57:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/building-chainfn.xml:
+       * docs/pwg/building-eventfn.xml:
+       * docs/pwg/building-pads.xml:
+       * docs/pwg/pwg.xml:
+         pwg: more updates for 1.0
+
+2012-09-27 11:53:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/building-boiler.xml:
+         pwg: update boiler to 1.0
+
+2012-09-27 11:06:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/gstghostpad.c:
+         ghostpad: also ref the internal pad for activate functions
+         Also take a ref to the internal pad in the activate functions
+
+2012-09-24 18:26:16 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * gst/gstghostpad.c:
+         proxypad: Hold a reference to the internal pad while pushing through it
+         https://bugzilla.gnome.org/show_bug.cgi?id=684809
+
+2012-09-25 14:44:54 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * tests/check/gst/gstghostpad.c:
+         tests: Test the case where ghost pads are removed while streaming
+         https://bugzilla.gnome.org/show_bug.cgi?id=684809
+
+2012-09-27 09:44:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/check/Makefile.am:
+       * tests/check/libs/libsabi.c:
+       * tests/check/libs/struct_arm.h:
+       * tests/check/libs/struct_hppa.h:
+       * tests/check/libs/struct_i386.h:
+       * tests/check/libs/struct_ppc32.h:
+       * tests/check/libs/struct_ppc64.h:
+       * tests/check/libs/struct_sparc.h:
+       * tests/check/libs/struct_x86_64.h:
+         tests: enable library abi checks
+
+2012-09-26 23:32:35 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * libs/gst/base/gstbasesink.c:
+       * libs/gst/base/gstbasesrc.c:
+         docs: fix up basesrc/basesink docs formatting
+
+2012-09-26 17:08:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/check/Makefile.am:
+       * tests/check/gst/struct_arm.h:
+       * tests/check/gst/struct_hppa.h:
+       * tests/check/gst/struct_i386.h:
+       * tests/check/gst/struct_ppc32.h:
+       * tests/check/gst/struct_ppc64.h:
+       * tests/check/gst/struct_sparc.h:
+       * tests/check/gst/struct_x86_64.h:
+         tests: add abi checks
+         Enable abi checks again.
+         Fix abi sizes for x86_64, copy the file to other archs.
+
+2012-09-26 16:26:48 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasesink.c:
+       * libs/gst/base/gstbasesrc.c:
+         update docs for 1.0 API
+
+2012-09-26 14:15:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/gsturi.c:
+         uri: use proper 'transfer floating' annotation
+         https://bugzilla.gnome.org/show_bug.cgi?id=664099
+
+2012-09-26 13:19:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * plugins/elements/gsttypefindelement.c:
+       * plugins/elements/gsttypefindelement.h:
+         typefind: send STREAM-START event
+         Send a STREAM_START event when we are operating in pull mode.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=684424
+
+2012-09-26 10:55:28 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/gstsegment.h:
+         segment: mark GstSegmentFlags as flags rather than enum
+         ... which really makes a difference when trying to serialize
+         a flags value which is a combination of flags, which is hard
+         to do as an enum type.
+
+2012-09-26 10:54:06 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * plugins/elements/gstidentity.c:
+         identity: retimestamp both pts and dts when doing so
+
+2012-09-26 15:01:42 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+       * libs/gst/base/gstbaseparse.c:
+         baseparse: Move some run of the mill debug statements to LOG level
+
+2012-09-26 14:23:52 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+       * libs/gst/base/gstbaseparse.c:
+         baseparse: Output timestamps after a seek.
+         Reinitialise the DTS after a seek so as to continue
+         generating timestamps when baseparse is not downstream
+         of a demuxer.
+         Fixes: #684538
+
+2012-09-25 17:06:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/appendix-programs.xml:
+       * docs/manual/basics-pads.xml:
+       * docs/pwg/advanced-types.xml:
+       * docs/pwg/building-boiler.xml:
+       * docs/pwg/building-pads.xml:
+       * docs/pwg/other-ntoone.xml:
+       * tools/gst-launch.1.in:
+       * tools/gst-typefind.1.in:
+         docs: updates
+         MIME-type -> Media type
+         Fix some old gst-inspect output
+
+2012-09-25 16:53:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/pwg/intro-basics.xml:
+       * docs/pwg/intro-preface.xml:
+         pwg: update for 1.0 API
+
+2012-09-25 15:11:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/gst/gstreamer-sections.txt:
+         docs: add section for metadata
+
+2012-09-25 13:09:38 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstelement.c:
+       * gst/gstelementfactory.c:
+         elementfactory: Fail if no valid element factory metadata is set
+
+2012-09-25 13:09:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstplugin.c:
+         plugin: Fail if no valid plugin metadata is set
+
+2012-09-25 15:06:43 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * plugins/elements/gstidentity.c:
+         identity: also track and store segment info in single segment mode
+
+2012-09-25 14:40:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/advanced-autoplugging.xml:
+       * docs/manual/advanced-dataaccess.xml:
+       * docs/manual/advanced-interfaces.xml:
+       * docs/manual/advanced-threads.xml:
+       * docs/manual/appendix-checklist.xml:
+       * docs/manual/appendix-integration.xml:
+       * docs/manual/appendix-porting.xml:
+       * docs/manual/basics-bins.xml:
+       * docs/manual/basics-bus.xml:
+       * docs/manual/basics-data.xml:
+       * docs/manual/basics-elements.xml:
+       * docs/manual/basics-helloworld.xml:
+       * docs/manual/highlevel-components.xml:
+       * docs/manual/intro-basics.xml:
+       * docs/manual/manual.xml:
+       * docs/random/porting-to-1.0.txt:
+       * tests/examples/manual/Makefile.am:
+         manual: fix up the manual
+         MIME-type -> media types
+         Fix up the manual in various places with the 1.0 way of doing things
+         such as probes, static elements, scheduling, ...
+         Add porting from 0.10 to 1.0 chapter.
+         Add probe example to build.
+         Remove some docs for remove components such as GstMixer and
+         GstPropertyProbe, XML...
+
+2012-09-24 16:50:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/manual/intro-gstreamer.xml:
+         docs: gst-python is no more
+         gst-python is no more and gst-libav is one of the main modules that
+         we release.
+
+2012-09-24 16:31:34 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasesink.c:
+         docs: fix basesink docs
+
+2012-09-24 16:25:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * docs/faq/getting.xml:
+       * docs/faq/troubleshooting.xml:
+       * docs/faq/using.xml:
+         docs: update FAQ
+         Change versions.
+         Use tools with version prefix.
+
+2012-09-25 13:15:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/be.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.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 for typo fix
+
+2012-09-25 13:14:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/gsttaglist.c:
+         taglist: fix typo in translated string
+         Spotted by Chris Leonard.
+         https://bugzilla.gnome.org/show_bug.cgi?id=684755
+
+2012-09-25 09:27:59 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstpluginfeature.c:
+         pluginfeature: Remove 0.11.9X->1.0.0 version mangling
+
+2012-09-25 01:02:03 +0100  Josep Torra Valles <n770galaxy@gmail.com>
+
+       * tests/benchmarks/complexity.c:
+       * tests/benchmarks/gstpollstress.c:
+         benchmarks: printf format fixes to make intel compiler happy
+         https://bugzilla.gnome.org/show_bug.cgi?id=552657
+
+2012-09-25 00:55:59 +0100  Josep Torra Valles <n770galaxy@gmail.com>
+
+       * libs/gst/base/gsttypefindhelper.c:
+       * plugins/elements/gstfakesink.c:
+       * plugins/elements/gstfakesrc.c:
+       * plugins/elements/gstmultiqueue.c:
+       * plugins/elements/gsttee.c:
+       * tools/gst-launch.c:
+       * tools/tools.h:
+         Make intel compiler happier
+         https://bugzilla.gnome.org/show_bug.cgi?id=552657
+
+2012-09-24 16:31:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-coreelements.xml:
+       * win32/common/config.h:
+       * win32/common/gstversion.h:
+         Back to development (bug fixing)
+
+=== release 1.0.0 ===
+
+2012-09-24 12:19:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-coreelements.xml:
+       * gstreamer.doap:
+       * win32/common/config.h:
+         Release 1.0.0
+
+2012-09-24 00:39:26 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/random/porting-to-1.0.txt:
+         docs: update 0.11 references in porting guide
+
+2012-09-24 00:37:27 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/random/porting-to-0.11.txt:
+       * docs/random/porting-to-1.0.txt:
+         docs: rename porting-to-0.11.txt to porting-to-1.0.txt
+
+2012-09-23 19:56:43 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * libs/gst/check/gstcheck.h:
+         check: fix FIXME printing for tcase_skip_broken_test()
+
+2012-09-23 17:30:50 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/random/release:
+         docs: update release doc
+         Create tags for releases without the ugly RELEASE- prefix.
+
+2012-09-23 12:42:01 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * libs/gst/base/gstcollectpads.c:
+         collectpads: don't forward random stream-start event
+         It's not right, and we don't know what extra properties
+         that event might have set in future (e.g. sparseness).
+         This change means collectpad users need to create their
+         own stream-start event now. We could add a utility
+         function that creates a stream-start event based on
+         the input stream-start events.
+
+2012-09-22 16:07:15 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From 4f962f7 to 6c0b52c
+
+2012-09-21 21:13:27 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * docs/manual/advanced-dparams.xml:
+         manual: update controller documentation
+
+2012-09-21 21:13:13 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/gstobject.c:
+         object: update controller documentation
+
+2012-09-18 15:22:03 +0200  Bastian Winkler <buz@netbuz.org>
+
+       * tools/gst-launch.1.in:
+         man: Fix syntax for value lists in caps strings
+         Value lists use curly brackets instead of parentheses
+         https://bugzilla.gnome.org/show_bug.cgi?id=684293
+
+2012-09-20 14:48:17 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * gst/gstpad.c:
+       * tests/check/gst/gstpad.c:
+         pad: Remove pad probes only once
+         Also add test to make sure that if a pad probe is removed while it's
+         callback is running, the cleanup_hook isn't called again if it
+         returns GST_PAD_PROBE_REMOVE
+
+2012-09-19 15:01:46 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * docs/gst/gstreamer-sections.txt:
+       * gst/gstpad.c:
+       * gst/gstpad.h:
+       * win32/common/libgstreamer.def:
+         pad: Add functions to safely access GstProbeInfo data pointer
+         This is so that introspection based bindings can access it.
+         https://bugzilla.gnome.org/show_bug.cgi?id=684402
+
+2012-09-19 23:25:54 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/manual/basics-bins.xml:
+         docs: remove reference to 0.8 GstBin API from manual
+         https://bugzilla.gnome.org/show_bug.cgi?id=684048
+
+2012-09-19 15:14:35 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * plugins/elements/gstidentity.c:
+         identity: transform GAP event in single segment mode
+
+2012-09-19 09:44:08 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * libs/gst/base/gstcollectpads.c:
+         docs: collectpads doc fixes
+
+2012-09-18 21:49:41 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasetransform.c:
+         basetransform: check acquire result value
+         Check the result value from _buffer_pool_acquire() and return the
+         value when allocation failed.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=684285
+
+2012-09-18 12:14:34 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstpad.c:
+         pad: Fix refcount bug by unreffing the correct variable
+
+=== release 0.11.99 ===
+
+2012-09-17 17:56:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-coreelements.xml:
+       * gstreamer.doap:
+       * win32/common/config.h:
+         Release 0.11.99
+
+2012-09-17 13:35:26 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * gst/Makefile.am:
+       * gst/gst.h:
+       * libs/gst/base/Makefile.am:
+       * libs/gst/check/Makefile.am:
+       * libs/gst/controller/Makefile.am:
+       * libs/gst/net/Makefile.am:
+       * win32/vs10/Common.props:
+         Remove GST_USE_UNSTABLE_API guard and defines
+
+2012-09-17 13:09:58 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/gstpad.c:
+       * gst/gstpad.h:
+       * tests/check/gst/gstghostpad.c:
+         pad: Add parent parameter to the link and unlink functions
+         Fixes part of bug #683995.
+
+2012-09-16 23:20:46 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * gst/gststructure.c:
+       * gst/gstvalue.c:
+       * tests/check/gst/gsttag.c:
+         sample: add serialisation/deserialisation functions for GstSample
+         Since these things are inside taglists now, it would be good to be
+         able to print them and deserialise them.
+         https://bugzilla.gnome.org/show_bug.cgi?id=681322
+
+2012-09-15 21:56:07 +0200  Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
+
+       * gstreamer.spec.in:
+         Switch to F18 naming of the package
+
+2012-09-15 18:43:39 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * docs/manual/advanced-autoplugging.xml:
+       * docs/manual/basics-elements.xml:
+       * tools/gst-inspect.c:
+         use gst_element_factory_get_metadata to replace obsolete API
+
+2012-09-14 17:52:14 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * docs/manual/advanced-metadata.xml:
+       * docs/manual/basics-bus.xml:
+         replace gst_tag_list_free with gst_tag_list_unref
+
+2012-09-14 17:00:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * tests/check/gst/gstcontroller.c:
+       * tests/check/gst/gstpreset.c:
+       * tests/check/libs/controller.c:
+       * tests/check/libs/test_transform.c:
+       * tests/check/pipelines/parse-launch.c:
+       * tests/examples/controller/control-sources.c:
+         replace gst_element_class_set_details_simple with gst_element_class_set_metadata
+
+2012-09-06 16:32:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * libs/gst/base/gstbasetransform.c:
+         basetrans: whitespace fix
+
+2012-09-14 14:08:18 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/plugins/gstreamer-plugins-docs.sgml:
+         docs: indexers are no more
+         https://bugzilla.gnome.org/show_bug.cgi?id=684018
+
+2012-09-14 13:34:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/examples/stepping/framestep1.c:
+         tests: fix for appsink return value addition
+
+2012-09-14 02:54:52 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+         Back to development
+
+=== release 0.11.94 ===
+
+2012-09-14 02:46:34 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ChangeLog:
+       * configure.ac:
+       * docs/plugins/gstreamer-plugins.args:
+       * docs/plugins/gstreamer-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-coreelements.xml:
+       * gstreamer.doap:
+       * win32/common/config.h:
+         Release 0.11.94
+
+2012-09-14 01:28:46 +0100  Olivier Crête <olivier.crete@collabora.com>
+
+       * gst/gstpad.c:
+         pad: don't try to pretty-print event after we've given away ownership
+         Might cause crashes with debug logging enabled.
+         https://bugzilla.gnome.org/show_bug.cgi?id=683996
+
+2012-09-14 01:17:54 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * po/af.po:
+       * po/az.po:
+       * po/be.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/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
+
 2012-09-14 00:30:37 +0100  Tim-Philipp Müller <tim@centricular.net>
 
        * gst/gstcompat.h:
index eb25a9487f3cf18e501b9a1d314fb5253227afbe..30e208b02393d05beaba1b69a9655ff81b04e310 100644 (file)
@@ -102,7 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -407,6 +407,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -443,6 +446,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/NEWS b/NEWS
index 440001fbfd56a251fcc5377185f96ed282345b45..8cbffdb5f0412f1deea0f3607234f11eead7bbe6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,43 @@
-This is GStreamer 1.0.0
+This is GStreamer 1.0.2
+
+Changes since 1.0.1:
+
+      * Parallel installability with 0.10.x series
+      * collectpads: ensure all timestamps are in same time domain
+      * gobject-introspection: fix GstSample annotations
+      * add GstElement::post_message() vfunc
+      * info: allow gst_debug_add_log_function() to be called before gst_init()
+      * event: allow GST_CLOCK_TIME_NONE as duration for GAP events
+      * documentation: new chapters and updates for the application development manual and the plugin writer's guide
+
+Bugs fixed since 1.0.1:
+
+      * 686456 : g_type_init is no longer required
+      * 686658 : allocator: fix memory leak in _fallback_mem_copy
+      * 686659 : preset: remove variable not read
+      * 686723 : basesrc: generic/states test in -base now hangs with appsrc
+      * 686787 : testrtpool must be linked to pthreads
+
+Changes since 1.0.0:
+
+      * Capsfilter prefers filter caps over passthrough now
+      * Application Development Manual, Plugin Writer's Guide and other documentation updated and extended for 1.0
+      * Bug fixes 
+
+Bugs fixed since 1.0.0:
+
+      * 680862 : identity with single-segment=true gives buffer.pts of CLOCK_TIME_NONE
+      * 684538 : baseparse: no timestamps after seeking in mp3 or aac
+      * 684755 : typo - whithin > within
+      * 684765 : Plugins without a klass in the metadata crashes autoaudiosink
+      * 684809 : proxypad don't hold a ref to their internal pad while streaming through it
+      * 684970 : Don't register printf extension for %p when glib is not using system printf
+      * 684981 : Pipeline hangs on PREROLLING negotiating caps
+      * 685072 : memory: map(READ)/unmap clears the READONLY status
+
+API additions since 1.0.0:
+
+      * gst_base_transform_set_prefer_passthrough()
 
 New features in 1.0.0:
 
diff --git a/RELEASE b/RELEASE
index b07303d0ac62760ab71fb00ae8d91cc925d8de95..7d37da9c60b91aee0ec6a5673851634723025b87 100644 (file)
--- a/RELEASE
+++ b/RELEASE
-Release notes for GStreamer 1.0.0
 
-The GStreamer project is pleased to announce the very first release of the
-new API and ABI-stable 1.x series of the GStreamer multimedia framework.
+Release notes for GStreamer 1.0.2
 
-The 1.x series is a stable series targeted at end users. It is not API or ABI
-compatible with the 0.10.x series. It can, however, be installed in parallel
-with the 0.10.x series and will not affect an existing 0.10.x installation.
 
-Major improvements include: more flexible memory handling; extensible and
-negotiable metadata for buffers; caps negotiation and renegotiation mechanisms,
-decoupled from buffer allocation; improved caps renegotiation; automatic
-re-sending of state for dynamic pipelines; reworked and more fine-grained pad
-probing; simpler and more descriptive audio and video caps; more efficient
-allocation of buffers, events and other mini objects; improved timestamp
-handling; support for gobject-inspection-based language bindings; countless
-other improvements.
+The GStreamer team is proud to announce a new bug-fix release
+in the 1.x stable series of the
+core of the GStreamer streaming media framework.
 
-Most of these changes involve the GStreamer plugin API. The application API
-has changed comparatively little, and most applications should be fairly easy
-to port to the new API. There is a porting guide available.
 
-The GStreamer team would like to thank everyone who helped bring this release
-about, whether by submitting patches, reporting bugs, testing, sponsoring
-development, attending hackfests, or simply supplying moral support.
+The 1.x series is a stable series targeted at end users.
+It is not API or ABI compatible with the stable 0.10.x series.
+It is, however, parallel installable with the 0.10.x series and
+will not affect an existing 0.10.x installation.
 
-This is the end of a long development process, but also the beginning of
-one. This release does not mark the pinnacle of perfection, but the point
-where the team is content with the API and stability and quality of the code
-base in general, especially compared to the old 0.10 series.
 
-There will be bugs to fix, and starting from this release there will be
-distinct bug-fixing and feature development cycles, with the goal of getting
-bug-fixes out quicker and unencumbered by other more risky changes. See
+The 1.x series has been reworked for more flexible memory handling, improved
+caps negotiation and re-negotiation, better handling of dynamic pipelines,
+and increased performance in general. It also features countless other feature
+additions and enhancements.
 
-  http://gstreamer.freedesktop.org/wiki/ReleasePlanning/RoadMap
 
-for a tentative road map and possible schedule.
+This module, gstreamer, only contains core functionality.
+For actual media playback, you will need other modules.
+
+gst-plugins-base
+contains a basic set of well-supported plugins
+gst-plugins-good
+contains a set of well-supported plugins under our preferred license
+gst-plugins-ugly
+contains a set of well-supported plugins, but might pose problems for
+    distributors
+gst-plugins-bad
+contains a set of less supported plugins that haven't passed the
+    rigorous quality testing we expect, or are still missing documentation
+    and/or unit tests
+gst-libav
+contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
 
-=== Modules
 
-This module, gstreamer, only contains core functionality.
-For actual media playback, you will also need other modules:
 
- gst-plugins-base : a basic set of well-supported plugins
- gst-plugins-good : a set of well-supported plugins under our preferred license
- gst-plugins-ugly : a set of well-supported plugins, but might pose problems
-                        for distributors
- gst-plugins-bad  : a set of less supported plugins that haven't passed the
-                        rigorous quality testing we expect
- gst-libav        : a set of codecs plugins based on libav (formerly gst-ffmpeg)
+  
 
-==== Download
+Features of this release
+    
+      * Parallel installability with 0.10.x series
+      * collectpads: ensure all timestamps are in same time domain
+      * gobject-introspection: fix GstSample annotations
+      * add GstElement::post_message() vfunc
+      * info: allow gst_debug_add_log_function() to be called before gst_init()
+      * event: allow GST_CLOCK_TIME_NONE as duration for GAP events
+      * documentation: new chapters and updates for the application development manual and the plugin writer's guide
 
-You can find source releases of gstreamer in the download directory:
+Bugs fixed in this release
+     
+      * 686456 : g_type_init is no longer required
+      * 686658 : allocator: fix memory leak in _fallback_mem_copy
+      * 686659 : preset: remove variable not read
+      * 686723 : basesrc: generic/states test in -base now hangs with appsrc
+      * 686787 : testrtpool must be linked to pthreads
 
-  http://gstreamer.freedesktop.org/src/gstreamer/
+==== Download ====
 
-==== GStreamer Homepage
+You can find source releases of gstreamer in the download
+directory: http://gstreamer.freedesktop.org/src/gstreamer/
 
-More details can be found on the project's website:
+The git repository and details how to clone it can be found at
+http://cgit.freedesktop.org/gstreamer/gstreamer/
 
-  http://gstreamer.freedesktop.org/
+==== Homepage ====
 
-==== Support and Bugs
+The project's website is http://gstreamer.freedesktop.org/
+
+==== Support and Bugs ====
 
 We use GNOME's bugzilla for bug reports and feature requests:
+http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer
+
+Please submit patches via bugzilla as well.
+
+For help and support, please subscribe to and send questions to the
+gstreamer-devel mailing list (see below for details).
+
+There is also a #gstreamer IRC channel on the Freenode IRC network.
+
+==== Developers ====
+
+GStreamer is stored in Git, hosted at git.freedesktop.org, and can be cloned
+from there (see link above).
+
+Interested developers of the core library, plugins, and applications should
+subscribe to the gstreamer-devel list.
 
-  http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer
- or
-  http://gstreamer.freedesktop.org/bugs/
-
-==== Developers
-
-GStreamer is stored in Git, hosted at git.freedesktop.org, and can be
-cloned from there. Interested developers of the core library, plugins, and
-applications should subscribe to the gstreamer-devel list and/or pop into
-our #gstreamer IRC channel on Freenode.
-
-==== Contributors to this release
-
-  Alban Browaeys 
-  Alessandro Decina 
-  Alexander Saprykin 
-  Andoni Morales Alastruey 
-  Andreas Frisch 
-  Andre Moreira Magalhaes (andrunko) 
-  Antoine Tremblay 
-  Anton Belka 
-  Arnaud Vrac 
-  Bastian Winkler 
-  Bastien Nocera 
-  Brian Cameron 
-  Christian Fredrik Kalager Schaller 
-  Christophe Fergeau 
-  Chun-wei Fan 
-  Colin Walters 
-  David Schleef 
-  David Svensson Fors 
-  Edward Hervey 
-  Evan Nemerson 
-  Fabrizio (Misto) Milo 
-  Havard Graff 
-  Idar Tollefsen 
-  Jan Schmidt 
-  Jason DeRose 
-  Jens Georg 
-  João Paulo Pizani Flor 
-  Johan Boulé 
-  Johan Dahlin 
-  Josep Torra 
-  Joshua M. Doe 
-  Koop Mast 
-  Lionel Landwerlin 
-  Luis de Bethencourt 
-  Mark Nauwelaerts 
-  Matej Knopp 
-  Miguel Angel Cabrera Moya 
-  Mike Ruprecht 
-  Oleksij Rempel 
-  Olivier Crête 
-  Peteris Krisjanis 
-  Philippe Normand 
-  Raimo Järvi 
-  René Stadler 
-  Reynaldo H. Verdejo Pinochet 
-  Ryan Lortie 
-  Sebastian Dröge 
-  Sebastian Rasmussen 
-  Sjoerd Simons 
-  Sreerenj Balachandran 
-  Stefan Kost 
-  Stefan Sauer 
-  Thiago Santos 
-  Thibault Saunier 
-  Thomas Vander Stichele 
-  Tim-Philipp Müller 
-  Víctor Manuel Jáquez Leal 
-  Vincent Penquerc'h 
-  Wim Taymans 
-  Youness Alaoui 
-  Руслан Ижбулатов
+        
+Contributors to this release
+    
+      * Mark Nauwelaerts
+      * Michael Smith
+      * Miguel Angel Cabrera Moya
+      * Sebastian Dröge
+      * Tim-Philipp Müller
+      * Wim Taymans
+      * Руслан Ижбулатов
\ No newline at end of file
index f989769c7bdc0050df6f57701263d41999f86611..3211f162ef8715def52ee5724d333af989e5e149 100644 (file)
@@ -1181,6 +1181,7 @@ m4_include([common/m4/gst.m4])
 m4_include([common/m4/gtk-doc.m4])
 m4_include([common/m4/introspection.m4])
 m4_include([common/m4/pkg.m4])
+m4_include([m4/ax_pthread.m4])
 m4_include([m4/check-checks.m4])
 m4_include([m4/gettext.m4])
 m4_include([m4/iconv.m4])
index 27dd5e0239078e9722da3d908a44be69303e19af..e38a0905d6e56771a7c1a426fa291d095036425e 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -339,6 +339,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -375,6 +378,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index ac9f4199d2041c5845f44284a54ead69c69047d2..05de253646e016f2abcf1c43164462d97262e583 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -299,6 +299,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -335,6 +338,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 6da0940b191ad6869a9bae57ed18ff721bc5afaf..876215ed477d89c3092ec08e7c86302dbdc4b619 100644 (file)
@@ -209,7 +209,7 @@ AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLE],
 
 dnl Parse gstconfig.h and defines add the symbols and substitions
 dnl
-dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h"
+dnl GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-1.0`"/gst/gstconfig.h"
 dnl AG_GST_PARSE_SUBSYSTEM_DISABLES(GST_CONFIGPATH)
 dnl
 AC_DEFUN([AG_GST_PARSE_SUBSYSTEM_DISABLES],
index 3bf9496730cdcfaf1c43184b5ac47f6ef70aef10..c1c49458e60651b0dcbc83a2d8decbe894c1486a 100644 (file)
@@ -44,14 +44,12 @@ upload: $(FORMATS)
        if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
        if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
        \
-       # upload releases to both 0.10.X/ and head/ subdirectories \
-       if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
-         export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
-         echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) mkdir -p $$DIR; \
-         rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
-       fi; \
+       # upload releases to both X.Y/ and head/ subdirectories \
+       export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
+       echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) mkdir -p $$DIR; \
+       rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
        \
        export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
        echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
index 514bd9dc40ebc11dadc97ef0a68e8e567904c40d..d92c89e17783853f2ac8e741f04bfb9ab149dbbe 100644 (file)
 /* Define to 1 if you have the `pselect' function. */
 #undef HAVE_PSELECT
 
-/* Define to 1 if you have the <pthread.h> header file. */
-#undef HAVE_PTHREAD_H
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
 
 /* Define if RDTSC is available */
 #undef HAVE_RDTSC
 /* directory where plugins are located */
 #undef PLUGINDIR
 
+/* Define to necessary symbol if this constant uses a non-standard name on
+   your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
 /* The size of `char', as computed by sizeof. */
 #undef SIZEOF_CHAR
 
index 26277c68ec59e8c8d0bd9a6e5f8dd2f37c155166..39797b41b33ab79628df509f2232435f3749a626 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer 1.0.0.
+# Generated by GNU Autoconf 2.69 for GStreamer 1.0.2.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='GStreamer'
 PACKAGE_TARNAME='gstreamer'
-PACKAGE_VERSION='1.0.0'
-PACKAGE_STRING='GStreamer 1.0.0'
+PACKAGE_VERSION='1.0.2'
+PACKAGE_STRING='GStreamer 1.0.2'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -699,8 +699,12 @@ GMP_LIBS
 WIN32_LIBS
 HAVE_WINSOCK2_H_FALSE
 HAVE_WINSOCK2_H_TRUE
-HAVE_PTHREAD_H_FALSE
-HAVE_PTHREAD_H_TRUE
+HAVE_PTHREAD_FALSE
+HAVE_PTHREAD_TRUE
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
 HAVE_SYS_TIMES_H_AND_UNISTD_H_FALSE
 HAVE_SYS_TIMES_H_AND_UNISTD_H_TRUE
 HAVE_SYS_SOCKET_H_FALSE
@@ -1633,7 +1637,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GStreamer 1.0.0 to adapt to many kinds of systems.
+\`configure' configures GStreamer 1.0.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1704,7 +1708,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer 1.0.0:";;
+     short | recursive ) echo "Configuration of GStreamer 1.0.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1881,7 +1885,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer configure 1.0.0
+GStreamer configure 1.0.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2654,7 +2658,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GStreamer $as_me 1.0.0, which was
+It was created by GStreamer $as_me 1.0.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3587,7 +3591,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='gstreamer'
- VERSION='1.0.0'
+ VERSION='1.0.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3710,9 +3714,9 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; }
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.0.0 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.0.0 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.0.0 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.0.2 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.0.2 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.0.2 | cut -d'.' -f3)
 
 
 
@@ -3723,7 +3727,7 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.0.0 | cut -d'.' -f4)
+  NANO=$(echo 1.0.2 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -3817,10 +3821,10 @@ fi
 AM_BACKSLASH='\'
 
 
-GST_VERSION_MAJOR=1
-GST_VERSION_MINOR=0
-GST_VERSION_MICRO=0
-GST_VERSION_NANO=0
+GST_VERSION_MAJOR=$PACKAGE_VERSION_MAJOR
+GST_VERSION_MINOR=$PACKAGE_VERSION_MINOR
+GST_VERSION_MICRO=$PACKAGE_VERSION_MICRO
+GST_VERSION_NANO=$PACKAGE_VERSION_NANO
 
 
 
@@ -8308,10 +8312,10 @@ fi
 done
 
 
-  GST_CURRENT=0
+  GST_CURRENT=2
   GST_REVISION=0
-  GST_AGE=0
-  GST_LIBVERSION=0:0:0
+  GST_AGE=2
+  GST_LIBVERSION=2:0:2
 
 
 
 done
 
 
-for ac_header in pthread.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_PTHREAD_H 1
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
+$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+  ;
+  return 0;
+}
 _ACEOF
- HAVE_PTHREAD_H=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test x"$ax_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case ${host_os} in
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
+
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ;;
+esac
+
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
+
+        case $flag in
+                none)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+                ;;
+
+                -*)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
+$as_echo_n "checking whether pthreads work with $flag... " >&6; }
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+                pthread-config)
+                # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ax_pthread_config"; then
+  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
 else
-  HAVE_PTHREAD_H=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ax_pthread_config="yes"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
+fi
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
+$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
 done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $attr; return attr /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  attr_name=$attr; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        done
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
+$as_echo "$attr_name" >&6; }
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $attr_name
+_ACEOF
+
+        fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
+$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
+        flag=no
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
+        esac
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
+$as_echo "${flag}" >&6; }
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+                    #include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+  ax_cv_PTHREAD_PRIO_INHERIT=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
+
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+
+fi
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: must compile with xlc_r or cc_r
+        if test x"$GCC" != xyes; then
+          for ac_prog in xlc_r cc_r
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PTHREAD_CC"; then
+  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PTHREAD_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
+
+        else
+          PTHREAD_CC=$CC
+        fi
+else
+        PTHREAD_CC="$CC"
+fi
+
+
+
+
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+        HAVE_PTHREAD=yes
+        :
+else
+        ax_pthread_ok=no
+        HAVE_PTHREAD=no
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 
- if test "x$HAVE_PTHREAD_H" = "xyes"; then
-  HAVE_PTHREAD_H_TRUE=
-  HAVE_PTHREAD_H_FALSE='#'
+ if test "x$HAVE_PTHREAD" = "xyes"; then
+  HAVE_PTHREAD_TRUE=
+  HAVE_PTHREAD_FALSE='#'
 else
-  HAVE_PTHREAD_H_TRUE='#'
-  HAVE_PTHREAD_H_FALSE=
+  HAVE_PTHREAD_TRUE='#'
+  HAVE_PTHREAD_FALSE=
 fi
 
 
@@ -26216,8 +26599,8 @@ if test -z "${HAVE_SYS_TIMES_H_AND_UNISTD_H_TRUE}" && test -z "${HAVE_SYS_TIMES_
   as_fn_error $? "conditional \"HAVE_SYS_TIMES_H_AND_UNISTD_H\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_PTHREAD_H_TRUE}" && test -z "${HAVE_PTHREAD_H_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_PTHREAD_H\" was never defined.
+if test -z "${HAVE_PTHREAD_TRUE}" && test -z "${HAVE_PTHREAD_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PTHREAD\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${HAVE_WINSOCK2_H_TRUE}" && test -z "${HAVE_WINSOCK2_H_FALSE}"; then
@@ -26641,7 +27024,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer $as_me 1.0.0, which was
+This file was extended by GStreamer $as_me 1.0.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -26707,7 +27090,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GStreamer config.status 1.0.0
+GStreamer config.status 1.0.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index d4728a2ac7569aaac7411a2794893298e23f6f50..9e5dd729fac2179af3a4e90fa95fc89d0da890b8 100644 (file)
@@ -4,7 +4,7 @@ dnl initialize autoconf
 dnl when going to/from release please set the nano (fourth number) right !
 dnl releases only do Wall, git and prerelease does Werror too
 dnl
-AC_INIT(GStreamer, 1.0.0,
+AC_INIT(GStreamer, 1.0.2,
     http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
     gstreamer)
 AG_GST_INIT
@@ -36,15 +36,10 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],
    AC_SUBST(AM_DEFAULT_VERBOSITY)])
 
 dnl GStreamer versioning, this is mostly informational
-dnl GST_VERSION_MAJOR=$PACKAGE_VERSION_MAJOR
-dnl GST_VERSION_MINOR=$PACKAGE_VERSION_MINOR
-dnl GST_VERSION_MICRO=$PACKAGE_VERSION_MICRO
-dnl GST_VERSION_NANO=$PACKAGE_VERSION_NANO
-dnl Change this to the above for non-pre
-GST_VERSION_MAJOR=1
-GST_VERSION_MINOR=0
-GST_VERSION_MICRO=0
-GST_VERSION_NANO=0
+GST_VERSION_MAJOR=$PACKAGE_VERSION_MAJOR
+GST_VERSION_MINOR=$PACKAGE_VERSION_MINOR
+GST_VERSION_MICRO=$PACKAGE_VERSION_MICRO
+GST_VERSION_NANO=$PACKAGE_VERSION_NANO
 AC_SUBST(GST_VERSION_MAJOR)
 AC_SUBST(GST_VERSION_MINOR)
 AC_SUBST(GST_VERSION_MICRO)
@@ -63,7 +58,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, 0, 0, 0)
+AS_LIBTOOL(GST, 2, 0, 2)
 
 dnl *** autotools stuff ****
 
@@ -318,8 +313,8 @@ dnl Check for stdio_ext.f for __fbufsize
 AC_CHECK_HEADERS([stdio_ext.h], [], [], [AC_INCLUDES_DEFAULT])
 
 dnl check for pthreads
-AC_CHECK_HEADERS([pthread.h], [HAVE_PTHREAD_H=yes], [HAVE_PTHREAD_H=no], [AC_INCLUDES_DEFAULT])
-AM_CONDITIONAL(HAVE_PTHREAD_H, test "x$HAVE_PTHREAD_H" = "xyes")
+AX_PTHREAD([HAVE_PTHREAD=yes], [HAVE_PTHREAD=no])
+AM_CONDITIONAL(HAVE_PTHREAD, test "x$HAVE_PTHREAD" = "xyes")
 
 dnl check for sys/prctl for setting thread name on Linux
 AC_CHECK_HEADERS([sys/prctl.h], [], [], [AC_INCLUDES_DEFAULT])
index e5b2015a8c235ee970b256f7441112aabd51a7db..9803127a3bc4b4f3e3f37dc10c6beaa944987677 100644 (file)
@@ -81,7 +81,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -339,6 +339,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -375,6 +378,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 60bd86bc6ca9e0133ce11019001d0b6089bab29d..ae107a3b94bacb2d4e838312fad099ca3e1f8f0f 100644 (file)
@@ -4,7 +4,6 @@ EXTRA_DIST = \
        draft-push-pull.txt \
        draft-tagreading.txt \
        part-activation.txt \
-       part-block.txt \
        part-buffering.txt \
        part-caps.txt \
        part-clocks.txt \
index 24d493f12cae6e65c22adbb30b63dd2c448389fe..29d2eff57a4390b47359ae36cab107e1fea1e916 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -299,6 +299,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -335,6 +338,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -389,7 +393,6 @@ EXTRA_DIST = \
        draft-push-pull.txt \
        draft-tagreading.txt \
        part-activation.txt \
-       part-block.txt \
        part-buffering.txt \
        part-caps.txt \
        part-clocks.txt \
index 2fae20b7518c82944d76136b6b5979864e3913cb..9443a40547b764689be57c2c7fdd3d8ac9c6bc17 100644 (file)
@@ -14,7 +14,7 @@ all video effect filters.
 The topic of defining the klass of elements should be based on use cases.
 
 A list of classes that are used in a installation can be generated using:
-gst-inspect-0.10 -a | grep -ho Class:.* | cut -c8- | sed "s/\//\\n/g" | sort | uniq
+gst-inspect-1.0 -a | grep -ho Class:.* | cut -c8- | sed "s/\//\\n/g" | sort | uniq
 
 Proposal
 ~~~~~~~~
index 47f033af92e0c0c2c80d8a363aac19700be4f071..bd020e9363e142b28db3f755d0022aea47d256a1 100644 (file)
@@ -27,49 +27,50 @@ function of the pad.
 Because the core does not know in which mode to activate a pad (PUSH or
 PULL), it delegates that choice to a method on the pad, activate(). The
 activate() function of a pad should choose whether to operate in PUSH or
-PULL mode. Once the choice is made, it should call one of the two
-mode-specific activation functions, activate_push() or activate_pull().
-The default activate() function will call activate_push(), as it is the
-default mechanism for data flow. A sink pad that supports either mode of
-operation might call activate_pull() if calling check_get_range()
-returns TRUE, and activate_push() otherwise.
+PULL mode. Once the choice is made, it should call activate_mode()
+with the selected activation mode.
+The default activate() function will call activate_mode() with
+#GST_PAD_MODE_PUSH, as it is the default mechanism for data flow.
+A sink pad that supports either mode of operation might call
+activate_mode(PULL) if the SCHEDULING query upstream contains the
+#GST_PAD_MODE_PULL scheduling mode, and activate_mode(PUSH) otherwise.
 
 Consider the case fakesrc ! fakesink, where fakesink is configured to
 operate in PULL mode. State changes in the pipeline will start with
 fakesink, which is the most downstream element. The core will call
 activate() on fakesink's sink pad. For fakesink to go into PULL mode, it
 needs to implement a custom activate() function that will call
-activate_pull() on its sink pad (because the default is to use PUSH
-mode). activate_pull() is then responsible for starting the task that
-pulls from fakesrc:src. Clearly, fakesrc needs to be notified that
-fakesrc is about to pull on its src pad, even though the pipeline has
-not yet changed fakesrc's state. For this reason, activate_pull() must
-first call activate_pull() on fakesink:sink's peer before starting
-fakesink's task.
+activate_mode(PULL) on its sink pad (because the default is to
+use PUSH mode). activate_mode(PULL) is then responsible for starting
+the task that pulls from fakesrc:src. Clearly, fakesrc needs to be
+notified that fakesrc is about to pull on its src pad, even though the
+pipeline has not yet changed fakesrc's state. For this reason,
+GStreamer will first call call activate_mode(PULL) on fakesink:sink's
+peer before calling activate_mode(PULL) on fakesink:sinks.
 
 In short, upstream elements operating in PULL mode must be ready to
-produce data in READY, after having activate_pull() called on their
-source pad. Also, a call to activate_pull() needs to propagate through
+produce data in READY, after having activate_mode(PULL) called on their
+source pad. Also, a call to activate_mode(PULL) needs to propagate through
 the pipeline to every pad that a gst_pad_pull() will reach. In the case
-fakesrc ! identity ! fakesink, calling activate_pull() on identity's
+fakesrc ! identity ! fakesink, calling activate_mode(PULL) on identity's
 source pad would need to activate its sink pad in pull mode as well,
 which should propagate all the way to fakesrc.
 
 If, on the other hand, fakesrc ! fakesink is operating in PUSH mode, the
 activation sequence is different. First, activate() on fakesink:sink
-calls activate_push() on fakesink:sink. Then fakesrc's pads are
+calls activate_mode(PUSH) on fakesink:sink. Then fakesrc's pads are
 activated: sources first, then sinks (of which fakesrc has none).
 fakesrc:src's activation function is then called.
 
 Note that it does not make sense to set an activation function on a
 source pad. The peer of a source pad is downstream, meaning it should
 have been activated first. If it was activated in PULL mode, the
-source pad should have already had activate_pull() called on it, and
+source pad should have already had activate_mode(PULL) called on it, and
 thus needs no further activation. Otherwise it should be in PUSH mode,
 which is the choice of the default activation function.
 
 So, in the PUSH case, the default activation function chooses PUSH mode,
-which calls activate_push(), which will then start a task on the source
+which calls activate_mode(PUSH), which will then start a task on the source
 pad and begin pushing. In this way PUSH scheduling is a bit easier,
 because it follows the order of state changes in a pipeline. fakesink is
 already in PAUSED with an active sink pad by the time fakesrc starts
@@ -81,8 +82,8 @@ Deactivation
 Pad deactivation occurs when its parent goes into the READY state or when the 
 pad is deactivated explicitly by the application or element. 
 gst_pad_set_active() is called with a FALSE argument, which then calls
-activate_push() or activate_pull() with a FALSE argument, depending on the
-activation mode of the pad.
+activate_mode(PUSH) or activate_mode(PULL) with a FALSE argument, depending
+on the current activation mode of the pad.
 
 Mode switching
 ~~~~~~~~~~~~~~
diff --git a/docs/design/part-block.txt b/docs/design/part-block.txt
deleted file mode 100644 (file)
index fe2ab6a..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-Pad block
----------
-
-The purpose of blocking a pad is to be notified of downstream dataflow
-and events. The notification can be used for
-
- - (Re)connecting/disconnecting the pad.
- - performing a seek 
- - inspecting the data/events on the pad
-
-The pad block is performed on a source pad (push based) or sink pad (pull based)
-and will succeed when the following events happen on the pad:
-
- - gst_pad_push()
- - gst_pad_alloc_buffer()
- - gst_pad_push_event() except for FLUSH_START and FLUSH_STOP events.
- - gst_pad_pull_range () (on a sinkpad)
-
-
-Flushing
-~~~~~~~~
-
-The flushing event is used to clear any data out of the
-downstream elements.
-
-Generic case
-^^^^^^^^^^^^
-
-Consider the following pipeline: 
-
- .-----.      .-------.      .-------.
- | src |      | elem1 |\/    | elem2 |
- |    src -> sink    src -> sink    src ....
- '-----'      '-------'/\    '-------'              
-
-Where elem1.src is blocked. If the pad block is taken (the callback
-is called or the sync block returned) no data is flowing in elem2.sink.
-In this situation, the streaming thread is blocked on a GCond and is
-waiting to be unblocked.
-
-When sending a flushing seek upstream on elem1.src, the FLUSH_START event
-will temporary unblock the streaming thread and make all pad functions that
-can trigger a block (_push/_query/_push_event/_pull_range) return
-GST_FLOW_FLUSHING. This will then eventually pause the streaming thread
-and release the STREAM_LOCK. 
-
-Since no STREAM lock is taken after the pad block it is not needed to send
-the FLUSH_START event further downstream.
-
-The FLUSH_STOP will set the srcpad to non-flushing again and is dropped 
-for the same reason. From then on, the new data after the flushing seek 
-will be queued when the pad block is taken again.
-
-Case where the stream is blocking downstream
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The example above is only valid if the elem1.src pad is really blocking
-(callback called or sync block returned).
-
-In the case where the stream is blocking further downstream (on elem2.src
-for example, or on a blocking queue), extra care has to be taken.
-
-Consider the following pipeline:
-
- .-----.      .-------.      .-------.
- | src |      | elem1 |\/    | elem2 |
- |    src -> sink    src -> sink    src .... Blocking somewhere downstream
- '-----'      '-------'/\    '-------'              
-
-A pad block has been requested by the user on elem1.src , but since the stream
-is blocking somewhere downstream, the callback is not called or the sync block
-does not return.
-
-In order for the block to happen, a FLUSH_START needs to be sent directly on
-the downstream blocking element/pad so that it releases the stream lock, and it
-gives a chance for the elem1.src pad to block.
-
-
-Use cases
-~~~~~~~~~
-
-Prerolling a partial pipeline
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
- .---------.      .---------.                .----------.
- | filesrc |      | demuxer |     .-----.    | decoder1 |
- |        src -> sink      src1 ->|queue|-> sink       src 
- '---------'      |         |     '-----'    '----------' X
-                  |         |                .----------.
-                  |         |     .-----.    | decoder2 |
-                  |        src2 ->|queue|-> sink       src
-                  '---------'     '-----'    '----------' X
-
-
-The purpose is to create the pipeline dynamically up to the
-decoders but not yet connect them to a sink and without losing
-any data.
-
-To do this, the source pads of the decoders is blocked so that no
-events or buffers can escape and we don't interrupt the stream.
-
-When all of the dynamic pad are created (no-more-pads emited by the
-branching point, ie, the demuxer or the queues filled) and the pads
-are blocked (blocked callback received) the pipeline is completely
-prerolled.
-
-It should then be possible to perform the following actions on the
-prerolled pipeline:
-
-- query duration/position
-- perform a flushing seek to preroll a new position
-- connect other elements and unblock the blocked pads.
-
-
-dynamically switching an element in a PLAYING pipeline
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
-  .----------.      .----------.      .----------.
-  | element1 |      | element2 |      | element3 |
- ...        src -> sink       src -> sink       ...
-  '----------'      '----------'      '----------'
-                    .----------.
-                    | element4 |
-                   sink       src                  
-                    '----------'                     
-
-The purpose is to replace element2 with element4 in the PLAYING 
-pipeline. 
-
-  1) block element1 src pad. This can be done async.
-  2) wait for block to happen. at that point nothing is flowing between
-     element1 and element2 and nothing will flow until unblocked.
-  3) unlink element1 and element2
-  4) optional step: make sure data is flushed out of element2:
-     4a) pad event probe on element2 src
-     4b) send EOS to element2, this makes sure that element2 flushes
-         out the last bits of data it holds.
-     4c) wait for EOS to appear in the probe, drop the EOS.
-     4d) remove the EOS pad event probe.
-  5) unlink element2 and element3
-     5a) optionally element2 can now be set to NULL and/or removed from the
-         pipeline.
-  6) link element4 and element3
-  7) link element1 and element4 (FIXME, how about letting element4 know
-     about the currently running segment?, see issues.)
-  8) make sure element4 is in the same state as the rest of the elements. The
-     element should at least be PAUSED.
-  9) unblock element1 src
-
-The same flow can be used to replace an element in a PAUSED pipeline. Only
-special care has to be taken when performing step 2) which has to be done
-async or it might deadlock. In the async callback one can then perform the
-steps from 3). In a playing pipeline one can of course use the async block
-as well, so that there is a generic method for both PAUSED and PLAYING.
-
-The same flow works as well for any chain of multiple elements and might 
-be implemented with a helper function in the future.
-
index c1b3fb6930562505a54a750c90fcf62c869b3c4e..c36f948329b4b23da4f4b2948afbd86b584cb795 100644 (file)
@@ -50,7 +50,7 @@ Some use cases:
 
   This buffering method is usable when the demuxer operates in push mode.
   Seeking in the stream requires the seek to happen in the network source.
-  It is mostly desirable when the total duration of the file is not know, such
+  It is mostly desirable when the total duration of the file is not known, such
   as in live streaming or when efficient seeking is not possible/required.
 
  * Incremental download
index bc94032590eb527cf1f15160e343f7c83c801587..0a89bb65300a1a94f0e6e02188bc82e784f175a6 100644 (file)
@@ -339,9 +339,10 @@ We can identify 3 patterns in negotiation:
       - A video/audio decoder
       - usually uses gst_pad_use_fixed_caps()
 
- 2) Passthrough
-      - Caps not modified
+ 2) Transform
+      - Caps not modified (passthrough)
       - can do caps transform based on element property
+      - fixed caps get transformed into fixed caps
       - videobox
 
  3) Dynamic : can choose output format 
@@ -349,3 +350,4 @@ We can identify 3 patterns in negotiation:
       - depends on downstream caps, needs to do a CAPS query to find
         transform.
       - usually prefers to use the identity transform
+      - fixed caps can be transformed into unfixed caps.
index 5b2630fcc139fbad7dc1b9cca2570acb8f7e463f..597c66141dd17417d0abd95dfda92af64af91515 100644 (file)
@@ -28,7 +28,8 @@ state could unqueue the buffer again.
 The state is commited in the following conditions:
 
  - a buffer is received on a sinkpad
- - an EOS is received on a sinkpad.
+ - an GAP event is received on a sinkpad.
+ - an EOS event is received on a sinkpad.
 
 We require the state change to be commited in EOS as well since an EOS means
 by definition that no buffer is going to arrive anymore.
index daffa0171b5e6c2130ce710e83027cba2fce67f6..e80a7a18464cafd6ad11d3b1b4ee198a92fe3bf4 100644 (file)
@@ -84,7 +84,7 @@ fast and does not significantly contribute to the QoS problems. Options to
 disable this feature could also be presented on elements.
 
 This message can be posted by a sink/src that performs synchronisation against the
-clock (live) or it could be dropped by an upstream element that performs QoS
+clock (live) or it could be posted by an upstream element that performs QoS
 because of QOS events received from a downstream element (!live).
 
 The GST_MESSAGE_QOS contains at least the following info:
index 269faa524804b37e11516bf93461e2d1eababc48..66b3d2f28cac3bcbd4182c21d17d2bb0427ba6c8 100644 (file)
@@ -11,6 +11,9 @@ elements could know not to expect any more data for that gap.
 In 0.10, segment information conveyed through SEGMENT events can be used
 for the same purpose.
 
+In 1.0, there is a GAP event that works in a similar fashion as the FILLER
+event in 0.8.
+
 Use cases
 ~~~~~~~~~
 
index d08538fa6d48236e6b25cf58b3b27a8331e90ea8..c7e1cd281de7cd9f17d72823d5ba8d6c1d6555db 100644 (file)
@@ -12,7 +12,7 @@ the threadpool to use.
 We accommodate for the following requirements:
 
  - Application is informed when a streaming thread is about to be created. It
-   should be possible for the application to suggest a custom GstTask.
+   should be possible for the application to suggest a custom GstTaskPool.
  - Application is informed when the status of a streaming thread is changed.
    This can be interesting for GUI application that want to visualize the status
    of the streaming threads (playing/paused/stopped)
@@ -42,9 +42,9 @@ Use cases
   - The application will usually react to the STREAM_STATUS messages with a sync
     bus handler.
 
-  - The application can create and configure a custom GstTask to manage the
-    streaming thread or it can ignore the message which will make the element
-    use its default GstTask.
+  - The application can configure the GstTask with a custom GstTaskPool to
+    manage the streaming thread or it can ignore the message which will make
+    the element use its default GstTaskPool.
 
   - The application can react to the ENTER/LEAVE stream status message to
     configure the thread right before it is started/stopped. This can be used to
@@ -86,8 +86,7 @@ Messages
       application and configure the thread appropriatly.
 
   - "object", G_TYPE, GstTask/GThread
-      A GstTask/GThread controlling this streaming thread. This can be NULL when
-      the object controlling the streaming thread is not yet created.
+      A GstTask/GThread controlling this streaming thread.
 
   - "flow-return", GstFlowReturn
       A status code for why the thread state changed. when threads are created
index 68ac0f0f43edf3815571b68994f390a8166ecf92..bdaa244817bdd49861e31d856dc4a0072f2ee836 100644 (file)
@@ -77,38 +77,38 @@ The following notation is used:
  B: GstBuffer 
   - B.timestamp = buffer timestamp (GST_BUFFER_TIMESTAMP)
 
NS:  SEGMENT event preceeding the buffers.
-  - NS.start: start field in the SEGMENT event
-  - NS.stop: stop field in the SEGMENT event
-  - NS.rate: rate field of SEGMENT event
-  - NS.abs_rate: absolute value of rate field of SEGMENT event
-  - NS.time: time field in the SEGMENT event
-  - NS.accum: total accumulated time of all previous SEGMENT events. This
-              field is kept in the GstSegment structure.
-
-Valid buffers for synchronisation are those with B.timestamp between NS.start
-and NS.stop. All other buffers outside this range should be dropped or clipped
-to these boundaries (see also part-segments.txt).
+ S:  SEGMENT event preceeding the buffers.
+  - S.start: start field in the SEGMENT event
+  - S.stop: stop field in the SEGMENT event
+  - S.rate: rate field of SEGMENT event
+  - S.abs_rate: absolute value of rate field of SEGMENT event
+  - S.time: time field in the SEGMENT event
+  - S.base: a base time for the time.
+  - S.offset: an offset to apply to S.start or S.stop
+
+Valid buffers for synchronisation are those with B.timestamp between S.start
+and S.stop (after applying the S.offset). All other buffers outside this range
+should be dropped or clipped to these boundaries (see also part-segments.txt).
 
 The following transformation to running_time exist:
 
-    if (NS.rate > 0.0)
-      B.running_time = (B.timestamp - NS.start) / NS.abs_rate + NS.accum
-    else
-      B.running_time = (NS.stop - B.timestamp) / NS.abs_rate + NS.accum
+  if (S.rate > 0.0)
+    B.running_time = (B.timestamp - (S.start + S.offset)) / S.abs_rate + S.base
+  else
+    B.running_time = ((S.stop - S.offset) - B.timestamp) / S.abs_rate + S.base
 
 We write B.running_time as the running_time obtained from the SEGMENT event
 and the buffers of that segment.
 
 The first displayable buffer will yield a value of 0 (since B.timestamp ==
-NS.start and NS.accum == 0).
+S.start and S.offset and S.base == 0).
 
-For NS.rate > 1.0, the timestamps will be scaled down to increase the playback
+For S.rate > 1.0, the timestamps will be scaled down to increase the playback
 rate. Likewise, a rate between 0.0 and 1.0 will slow down playback.
 
-For negative rates, timestamps are received stop NS.stop to NS.start so that the
+For negative rates, timestamps are received stop S.stop to S.start so that the
 first buffer received will be transformed into B.running_time of 0 (B.timestamp ==
-NS.stop and NS.accum == 0).
+S.stop and S.accum == 0).
 
 
 Synchronisation
@@ -123,7 +123,7 @@ As we have seen, we can get a running_time:
  - using the buffer timestamp and the preceeding SEGMENT event as (assuming
    positive playback rate):
 
-    B.running_time = (B.timestamp - NS.start) / NS.abs_rate + NS.accum
+    B.running_time = (B.timestamp - (S.start + S.offset)) / S.abs_rate + S.base
 
 We prefix C. and B. before the two running times to note how they were
 calculated.
@@ -175,9 +175,9 @@ It is the stream time that is used for:
 Stream time is calculated using the buffer times and the preceeding SEGMENT
 event as follows:
 
-    stream_time = (B.timestamp - NS.start) * NS.abs_applied_rate + NS.time
+    stream_time = (B.timestamp - S.start) * S.abs_applied_rate + S.time
  
-For negative rates, B.timestamp will go backwards from NS.stop to NS.start,
+For negative rates, B.timestamp will go backwards from S.stop to S.start,
 making the stream time go backwards.
 
 In the PLAYING state, it is also possible to use the pipeline clock to derive
@@ -187,21 +187,24 @@ Give the two formulas above to match the clock times with buffer timestamps
 allows us to rewrite the above formula for stream_time (and for positive rates).
 
     C.running_time = absolute_time - base_time
-    B.running_time = (B.timestamp - NS.start) / NS.abs_rate + NS.accum
+    B.running_time = (B.timestamp - (S.start + S.offset)) / S.abs_rate + S.base
 
   =>
-    (B.timestamp - NS.start) / NS.abs_rate + NS.accum = absolute_time - base_time;
+    (B.timestamp - (S.start + S.offset)) / S.abs_rate + S.base = absolute_time - base_time;
 
   =>
-    (B.timestamp - NS.start) / NS.abs_rate = absolute_time - base_time - NS.accum;
+    (B.timestamp - (S.start + S.offset)) / S.abs_rate = absolute_time - base_time - S.base;
 
   =>
-    (B.timestamp - NS.start) = (absolute_time - base_time - NS.accum) * NS.abs_rate
+    (B.timestamp - (S.start + S.offset)) = (absolute_time - base_time - S.base) * S.abs_rate
 
-  filling (B.timestamp - NS.start) in the above formule for stream time
+  =>
+    (B.timestamp - S.start) = S.offset + (absolute_time - base_time - S.base) * S.abs_rate
+
+  filling (B.timestamp - S.start) in the above formule for stream time
 
   =>
-    stream_time = (absolute_time - base_time - NS.accum) * NS.abs_rate * NS.abs_applied_rate + NS.time
+    stream_time = (S.offset + (absolute_time - base_time - S.base) * S.abs_rate) * S.abs_applied_rate + S.time
 
 This last formula is typically used in sinks to report the current position in
 an accurate and efficient way.
index 85b8aab48c8eb2ca57f2ec1d70fb0c7613fb18e7..312c2ffc5243f0435ffb1668cffb9977784d5a61 100644 (file)
@@ -105,7 +105,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -353,6 +353,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -389,6 +392,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -885,14 +889,12 @@ upload: $(FORMATS)
        if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
        if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
        \
-       # upload releases to both 0.10.X/ and head/ subdirectories \
-       if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
-         export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
-         echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) mkdir -p $$DIR; \
-         rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
-       fi; \
+       # upload releases to both X.Y/ and head/ subdirectories \
+       export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
+       echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) mkdir -p $$DIR; \
+       rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
        \
        export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
        echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
index 35c2eff9c52b62be2c1b608564a54233fe158894..9a85ac6da3af0f7624848369d8a3692483645cb9 100644 (file)
@@ -18,7 +18,7 @@ the code others have written.
         <para>
 However, do realize that in no way you are forced to have all dependencies
 installed.  None of the core developers has all of them installed.  GStreamer
-has only a few obligate dependencies : GLib 2.0, liboil, and very
+has only a few obligate dependencies : GLib 2.0, liborc, and very
 common stuff like glibc, a C compiler, and so on.  All of the other
 dependencies are optional.
         </para>
@@ -30,39 +30,6 @@ So, in closing, let's rephrase the question to
       </answer>
     </qandaentry>
 
-<qandaentry>
-      <question id="dependencies-glib">
-        <para>
-Does GStreamer use GTK+ 1.2/GLib 1.2 or GLib 2.0 ?
-        </para>
-      </question>
-
-      <answer>
-        <para>
-Since the 0.3.3 release of GStreamer, we use GLib 2.0 as the core library 
-for GStreamer, which features a move of GObject from GTK+ 2.0 to GLib 2.0.
-If you want to compile using GTK+ 1.2/GLib 1.2,  you need to get the 
-0.3.1 or earlier release.   It is of course not supported.
-        </para>
-      </answer>
-    </qandaentry>
-
-    <qandaentry>
-      <question id="dependencies-dxr">
-        <para>
-Does GStreamer offer support for DVD decoder cards like dxr2/3 ?
-        </para>
-      </question>
-
-      <answer>
-        <para>
-We do have support for the dxr3, although dxr2 support is unknown. 
-GStreamer can easily accommodate hardware acceleration by writing new
-device-specific elements.
-        </para>
-      </answer>
-    </qandaentry>
-
     <qandaentry>
       <question id="dependencies-x">
         <para>Is GStreamer X independent ?</para>
@@ -70,11 +37,11 @@ device-specific elements.
 
       <answer>
         <para>
-Yes, we have no X dependency in any of our core modules. There are GStreamer
-applications that run fine without any need for X.  However, until our Linux 
-Framebuffer or libsvga plugin is ready, you will not be able to play videos 
-without X. In the future, there will probably be lots of different output 
-plugins for video available.
+Yes, we have no hard X dependency in any of our modules. There are many
+GStreamer applications that run fine without any need for X, for example
+streaming servers, transcoding applications, or audio applications that
+don't output any video. Other applications output video to a framebuffer,
+custom-made hardware sinks, or via wayland.
         </para>
       </answer>
     </qandaentry>
@@ -106,23 +73,24 @@ MIDI applications very well however. If you are a developer interested in
 adding MIDI support to GStreamer we are very interested in getting in touch 
 with you.
         </para>
+        <para>
+MIDI playback is provided by plugins such as wildmidi and timidity.
+        </para>
       </answer>
     </qandaentry>
 
     <qandaentry>
       <question id="dependencies-gnome">
-        <para>Does GStreamer depend on GNOME ?</para>
+        <para>Does GStreamer depend on GNOME or GTK+ ?</para>
       </question>
 
       <answer>
         <para>
-No. But many of the applications developed for GStreamer do, including our 
-sample applications. There is nothing hindering people from developing 
-applications using other toolkits however and we would happily help promote 
-such efforts. A good example of an application using GStreamer, but which is 
-not using GNOME is the 
-<ulink url="http://mozstreamer.mozdev.org"><citetitle>
-Mozstreamer</citetitle></ulink> which uses Mozilla XUL.
+No. But many of the applications developed for GStreamer do, including some
+of our sample applications. Other applications use the Qt toolkit, or are
+written for Mac OS/X or Windows. We aim to provide API that is toolkit
+agnostic and can be used from any toolkit, desktop environment or operating
+system.
         </para>
       </answer>
     </qandaentry>
index c1246aaa921e76b0db4c5847bc3b6ef5cc64e686..b8c80aeca9b47c99eee070c8be2ea245b83f592e 100644 (file)
@@ -24,41 +24,39 @@ git</link></para></listitem>
 
    <qandaentry>
       <question id="gstreamer-versions-explained">
-        <para>There seem to be different GStreamer versions, like 0.8 and 0.10?
+        <para>There seem to be different GStreamer versions, like 0.10 and 1.0?
               What's up with that?</para>
       </question>
 
       <answer>
          <para>
-           GStreamer-0.8 and GStreamer-0.10 are the main version
+           GStreamer-0.10 and GStreamer-1.0 are the main version
            &apos;series&apos; currently in use.  For all practical purposes
            you should think of them as two completely different libraries
            which just happen to have a similar name.  They can be installed
            in parallel and are completely independent.
          </para>
          <para>
-           For the 0.8 version you will need the 0.8 plugins and bindings
-           (gst-plugins 0.8.x, gst-ffmpeg 0.8.x, gst-python 0.8.x etc.), while
-           for the 0.10 version you will need the 0.10 plugins and bindings
-           (ie. gst-plugins-base 0.10.x, gst-plugins-good 0.10.x,
-           gst-plugins-ugly 0.10.x, gst-plugins-bad 0.10.x, gst-ffmpeg 0.10.x,
-           gst-python 0.10.x).  The micro version for each main version does
+           For the 0.10 version you will need the 0.10 plugins and bindings
+           (gst-plugins 0.10.x, gst-ffmpeg 0.10.x, gst-python 0.10.x etc.), while
+           for the 1.0 version you will need the 1.0 plugins and bindings
+           (ie. gst-plugins-base 1.0.x, gst-plugins-good 1.0.x,
+           gst-plugins-ugly 1.0.x, gst-plugins-bad 1.0.x, gst-ffmpeg 1.0.x,
+           gst-python 1.0.x).  The micro version for each main version does
            not have to match exactly, only the major versions needs to be the
            same (ie. it may be that the current gst-plugins-good version is
-           0.10.6 and the current GStreamer core version is 0.10.13).
-           GStreamer-0.10 will not see or use any of the GStreamer-0.8 plugins
+           1.0.6 and the current GStreamer core version is 1.0.13).
+           GStreamer-1.0 will not see or use any of the GStreamer-0.10 plugins
            and vice versa.
          </para>
          <para>
            All GStreamer command line tools are suffixed with their main
-           version, e.g. gst-launch-0.8 and gst-launch-0.10, or gst-inspect-0.8
-           and gst-inspect-0.10.  The corresponding GStreamer command line
-           tools without a suffix (e.g. gst-launch) will default to the highest
-           major version.
+           version, e.g. gst-launch-0.10 and gst-launch-1.0, or gst-inspect-0.10
+           and gst-inspect-1.0.
          </para>
          <para>
-           Applications will use either GStreamer-0.8 or GStreamer-0.10, since
-           the 0.8 and 0.10 API/ABI are not compatible.
+           Applications will use either GStreamer-0.10 or GStreamer-1.0, since
+           the 0.10 and 1.0 API/ABI are not compatible.
          </para>
          <para>
            Odd-numbered versions such as 0.9.x, 0.11.x, etc. are unstable
@@ -74,10 +72,7 @@ git</link></para></listitem>
 
       <answer>
          <para>
-           You should download GStreamer-0.10.  GStreamer-0.8 is not developed
-           any longer and has not been maintained for almost two years (you
-           may still find it packaged for your disto though, but that's most
-           likely for legacy applications).           
+           You should download GStreamer-1.0.  GStreamer-0.10 is end-of-life.
          </para>
       </answer>
     </qandaentry>
index e52067baaa5dcbdeaf87230a5419771347b9480f..942432906b0ec4b38805e0f1e2eb070a8fd107d2 100644 (file)
@@ -13,7 +13,7 @@ Some application is telling me that I am missing a plug-in.  What do I do ?
         <para>
 Well, start by checking if you really are missing the plug-in.
   <programlisting>
-gst-inspect (plug-in)
+gst-inspect-1.0 (plug-in)
   </programlisting>
 and replace (plug-in) with the plug-in you think is missing.
 If this doesn't return any result, then you either don't have it or your
@@ -156,12 +156,12 @@ On my system there is no gst-register command.
 
       <answer>
         <para>
-GStreamer version 0.10 does not need this anymore. The registry will
+Since GStreamer version 0.10 this is not needed anymore. The registry will
 be rebuilt automatically. If you suspect the registry is broken, just delete the
-<filename>registry.*.xml</filename> files under <filename>$HOME/.gstreamer-0.X/</filename>
+<filename>registry.*.xml</filename> files under <filename>$HOME/.gstreamer-1.X/</filename>
 and run
 <programlisting>
-  gst-inspect
+  gst-inspect-1.0
 </programlisting>
 to rebuild the registry.
         </para>
index 939ff406406622df2bec13313523d0e661ff5f17..93984218b295af15a47de365529e76e2ee4790b3 100644 (file)
@@ -12,7 +12,7 @@
 First of all, verify that you have a working registry and that you can
 inspect them by typing
 <programlisting>
-$ gst-inspect fakesrc
+$ gst-inspect-1.0 fakesrc
 </programlisting>
 This should print out a bunch of information about this particular element.
 If this tells you that there is "no such element or plugin", you haven't
@@ -26,7 +26,7 @@ It's time to try out a few things.  Start with gst-launch and two plug-ins
 that you really should have : fakesrc and fakesink.  They do nothing except
 pass empty buffers. Type this at the command-line :
 <programlisting>
-$ gst-launch -v fakesrc num-buffers=3 ! fakesink
+$ gst-launch-1.0 -v fakesrc silent=0 num-buffers=3 ! fakesink silent=0
 </programlisting>
 This will print out output that looks similar to this :
 <programlisting>
@@ -56,24 +56,24 @@ You can test this by trying to play a sine tone.  For this, you need to
 link the audiotestsrc element to an output element that matches your hardware.
 A (non-complete) list of output plug-ins for audio is
 <itemizedlist>
+<listitem><para>pulsesink for Pulseaudio output</para></listitem>
 <listitem><para>osssink for OSS output</para></listitem>
 <listitem><para>esdsink for ESound output</para></listitem>
-<listitem><para>artsdsink for aRTs output (not ported to 0.10 yet)</para></listitem>
 <listitem><para>alsasink for ALSA output</para></listitem>
 <listitem><para>alsaspdifsink for ALSA S/PDIF output</para></listitem>
 <listitem><para>jackaudiosink for JACK output</para></listitem>
 </itemizedlist>
-First of all, run gst-inspect on the output plug-in you want to use to
-make sure you have it installed.  For example, if you use OSS, run
+First of all, run gst-inspect-1.0 on the output plug-in you want to use to
+make sure you have it installed.  For example, if you use Pulseaudio, run
 <programlisting>
-$ gst-inspect osssink
+$ gst-inspect-1.0 pulsesink
 </programlisting>
 and see if that prints out a bunch of properties for the plug-in.
         </para>
         <para>
 Then try to play the sine tone by running
 <programlisting>
-$ gst-launch audiotestsrc ! audioconvert ! audioresample ! osssink
+$ gst-launch-1.0 audiotestsrc ! audioconvert ! audioresample ! pulsesink
 </programlisting>
 and see if you hear something.  Make sure your volume is turned up,
 but also make sure it is not too loud and you are not wearing your headphones.
@@ -102,20 +102,16 @@ To do this you use the gst-inspect
 command-line tool, which comes standard with GStreamer.
 Invoked without any arguments,
 <programlisting>
-$ gst-inspect
+$ gst-inspect-1.0
 </programlisting>
 will print out a listing of installed plugins.
 To learn more about a particular plugin, pass its name on the command line. 
 For example,
 <programlisting>
-$ gst-inspect volume
+$ gst-inspect-1.0 volume
 </programlisting>
 will give you information about the volume plugin.
         </para>
-        <para>
-Also, if you install the gst-editor package, you will have a graphical 
-plugin browser available, gst-inspect-gui.
-        </para>
       </answer>
     </qandaentry>
 
@@ -168,27 +164,26 @@ provide us with the necessary gdb output.  See
       <answer>
         <para>
 You access the GStreamer command line interface using the command gst-launch.
-To decode an mp3 and play it through OSS, you could use
+To decode an mp3 and play it through Pulseaudio, you could use
 <programlisting>
-gst-launch filesrc location=thesong.mp3 ! mad ! audioconvert !
-audioresample ! osssink
+gst-launch-1.0 filesrc location=thesong.mp3 ! mad ! pulsesink
 </programlisting>.
 More examples can be found in the gst-launch man page.
         </para>
         <para>
 To automatically detect the right codec in a pipeline, try 
 <programlisting>
-gst-launch filesrc location=my-random-media-file.mpeg ! decodebin !
audioconvert ! pulsesink
+gst-launch-1.0 filesrc location=my-random-media-file.mpeg ! decodebin !
+ pulsesink
 </programlisting>.
 or
 <programlisting>
-gst-launch filesrc location=my-random-media-file.mpeg ! decodebin !
+gst-launch-1.0 filesrc location=my-random-media-file.mpeg ! decodebin !
  videoconvert ! xvimagesink
 </programlisting>
 Something more complicated:
 <programlisting>
-gst-launch filesrc location=my-random-media-file.mpeg ! decodebin name=decoder
+gst-launch-1.0 filesrc location=my-random-media-file.mpeg ! decodebin name=decoder
    decoder. ! videoconvert ! xvimagesink
    decoder. ! audioconvert ! pulsesink
 </programlisting>
@@ -197,7 +192,7 @@ gst-launch filesrc location=my-random-media-file.mpeg ! decodebin name=decoder
 We also have a basic media playing plugin that will take care of most things
 for you. This plugin is called playbin. Try this:
 <programlisting>
-gst-launch playbin uri=file:///home/joe/my-random-media-file.mpeg
+gst-launch-1.0 playbin uri=file:///home/joe/my-random-media-file.mpeg
 </programlisting>
 This should play the file if the format is supported, ie. you have all the
 necessary demuxing and decoding and some output plugins installed.
index 266666c5277027f4b0a74fb537d851c67a007ddb..3fe208f636a8b538299e81d442db1409063f7898 100644 (file)
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -322,6 +322,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -358,6 +361,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -763,14 +767,12 @@ upload: $(FORMATS)
        if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
        if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
        \
-       # upload releases to both 0.10.X/ and head/ subdirectories \
-       if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
-         export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
-         echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) mkdir -p $$DIR; \
-         rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
-       fi; \
+       # upload releases to both X.Y/ and head/ subdirectories \
+       export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
+       echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) mkdir -p $$DIR; \
+       rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
        \
        export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
        echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
index 05dc89d92b274ac151560f8b1220354d171c840c..5a6af74e568a7e9b961571ff6353446f94e1740b 100644 (file)
@@ -696,6 +696,7 @@ GST_ELEMENT_WARNING
 GST_ELEMENT_INFO
 GST_ELEMENT_IS_LOCKED_STATE
 
+<SUBSECTION element-metadata>
 GST_ELEMENT_METADATA_AUTHOR
 GST_ELEMENT_METADATA_DESCRIPTION
 GST_ELEMENT_METADATA_DOC_URI
index 21c25ca933432d818fd6165d044ac0af14805cbe..7e37397e4cf1a3fa8fa88584e579c5580d026647 100644 (file)
@@ -157,7 +157,7 @@ element is removed from the bin.
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9938176"></a><h3>Notes</h3>
+<a name="idp11985136"></a><h3>Notes</h3>
 <p>
 A <a class="link" href="GstBin.html" title="GstBin"><span class="type">GstBin</span></a> internally intercepts every <a class="link" href="gstreamer-GstMessage.html#GstMessage" title="struct GstMessage"><span class="type">GstMessage</span></a> posted by its children and
 implements the following default behaviour for each of them:
index cd779bcf51c4cfa17e955429e4fdcef5e1497f95..12e981edd1a06cde83b11d2e07535aa09ee4e86f 100644 (file)
@@ -197,7 +197,7 @@ Function to map a control-value to the target GValue.
                                                          <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> last_sync</code></em>);</pre>
 <p>
-Sets the property of the <em class="parameter"><code>object</code></em>, according to the <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSources</span></a> that
+Sets the property of the <em class="parameter"><code>object</code></em>, according to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSources</span></a> that
 handle them and for the given timestamp.
 </p>
 <p>
index f9895345c15f80a1c35d132634a6c48fed4ea4f0..e23b04e2fc6f011e43ded20c0b52faa57cd8a623 100644 (file)
@@ -77,17 +77,17 @@ struct              <a class="link" href="GstControlSource.html#GstTimedValue" t
 <a name="GstControlSource.description"></a><h2>Description</h2>
 <p>
 The <a class="link" href="GstControlSource.html" title="GstControlSource"><span class="type">GstControlSource</span></a> is a base class for control value sources that could
-be used by <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html"><span class="type">GstController</span></a> to get timestamp-value pairs.
+be used by <span class="type">GstController</span> to get timestamp-value pairs.
 </p>
 <p>
 A <a class="link" href="GstControlSource.html" title="GstControlSource"><span class="type">GstControlSource</span></a> is used by first getting an instance, binding it to a
-<a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> (for example by using <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html#gst-controller-set-control-source"><code class="function">gst_controller_set_control_source()</code></a>) and
-then by having it used by the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html"><span class="type">GstController</span></a> or calling
+<a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> (for example by using <code class="function">gst_controller_set_control_source()</code>) and
+then by having it used by the <span class="type">GstController</span> or calling
 <a class="link" href="GstControlSource.html#gst-control-source-get-value" title="gst_control_source_get_value ()"><code class="function">gst_control_source_get_value()</code></a> or <a class="link" href="GstControlSource.html#gst-control-source-get-value-array" title="gst_control_source_get_value_array ()"><code class="function">gst_control_source_get_value_array()</code></a>.
 </p>
 <p>
 For implementing a new <a class="link" href="GstControlSource.html" title="GstControlSource"><span class="type">GstControlSource</span></a> one has to implement a
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstControlSource.html#GstControlSourceBind"><span class="type">GstControlSourceBind</span></a> method, which will depending on the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> set up
+<span class="type">GstControlSourceBind</span> method, which will depending on the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-GParamSpec.html#GParamSpec"><span class="type">GParamSpec</span></a> set up
 the control source for use and sets the <a class="link" href="GstControlSource.html#GstControlSourceGetValue" title="GstControlSourceGetValue ()"><span class="type">GstControlSourceGetValue</span></a> and
 <a class="link" href="GstControlSource.html#GstControlSourceGetValueArray" title="GstControlSourceGetValueArray ()"><span class="type">GstControlSourceGetValueArray</span></a> functions. These are then used by
 <a class="link" href="GstControlSource.html#gst-control-source-get-value" title="gst_control_source_get_value ()"><code class="function">gst_control_source_get_value()</code></a> or <a class="link" href="GstControlSource.html#gst-control-source-get-value-array" title="gst_control_source_get_value_array ()"><code class="function">gst_control_source_get_value_array()</code></a>
index f0ea8176ecab279390344e92fd031cdccf263094..25cdeff945f58c49b32defbe5acb0ab034993d67 100644 (file)
@@ -87,6 +87,7 @@ enum                <a class="link" href="GstElement.html#GstStateChangeReturn"
                                                          text,
                                                          debug)
 #define             <a class="link" href="GstElement.html#GST-ELEMENT-IS-LOCKED-STATE:CAPS" title="GST_ELEMENT_IS_LOCKED_STATE()">GST_ELEMENT_IS_LOCKED_STATE</a>         (elem)
+
 #define             <a class="link" href="GstElement.html#GST-ELEMENT-METADATA-AUTHOR:CAPS" title="GST_ELEMENT_METADATA_AUTHOR">GST_ELEMENT_METADATA_AUTHOR</a>
 #define             <a class="link" href="GstElement.html#GST-ELEMENT-METADATA-DESCRIPTION:CAPS" title="GST_ELEMENT_METADATA_DESCRIPTION">GST_ELEMENT_METADATA_DESCRIPTION</a>
 #define             <a class="link" href="GstElement.html#GST-ELEMENT-METADATA-DOC-URI:CAPS" title="GST_ELEMENT_METADATA_DOC_URI">GST_ELEMENT_METADATA_DOC_URI</a>
@@ -526,6 +527,8 @@ state will yield the running_time against the clock.</td>
   gboolean              (*send_event)           (GstElement *element, GstEvent *event);
 
   gboolean              (*query)                (GstElement *element, GstQuery *query);
+
+  gboolean              (*post_message)         (GstElement *element, GstMessage *message);
 };
 </pre>
 <p>
@@ -604,6 +607,11 @@ functionality.
 <td><p><span class="term"><em class="structfield"><code><a name="GstElementClass.query"></a>query</code></em> ()</span></p></td>
 <td>perform a <a class="link" href="gstreamer-GstQuery.html#GstQuery" title="struct GstQuery"><span class="type">GstQuery</span></a> on the element</td>
 </tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code><a name="GstElementClass.post-message"></a>post_message</code></em> ()</span></p></td>
+<td>called when a message is posted on the element. Chain up to
+the parent class' handler to have it posted on the bus.</td>
+</tr>
 </tbody>
 </table></div>
 </div>
index 2c4cf3c00c00cd3ba1bc468c200b146f7c0b867e..e6f2bc26adef0804de61878c9f551e51dd7380f2 100644 (file)
@@ -141,7 +141,7 @@ The following code example shows you how to create a GstFileSrc element.
 <p>
 </p>
 <div class="example">
-<a name="idp18064352"></a><p class="title"><b>Example 6. Using an element factory</b></p>
+<a name="idp21432256"></a><p class="title"><b>Example 6. Using an element factory</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -163,11 +163,11 @@ The following code example shows you how to create a GstFileSrc element.
 GstElement <span class="gtkdoc opt">*</span>src<span class="gtkdoc opt">;</span>
 GstElementFactory <span class="gtkdoc opt">*</span>srcfactory<span class="gtkdoc opt">;</span>
 
-<span class="function"><a href="../gstreamer-1.0/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
 
-srcfactory <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElementFactory.html#gst-element-factory-find">gst_element_factory_find</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;filesrc&quot;</span><span class="gtkdoc opt">);</span>
+srcfactory <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-find">gst_element_factory_find</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;filesrc&quot;</span><span class="gtkdoc opt">);</span>
 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-return-if-fail">g_return_if_fail</a></span> <span class="gtkdoc opt">(</span>srcfactory <span class="gtkdoc opt">!=</span> NULL<span class="gtkdoc opt">);</span>
-src <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElementFactory.html#gst-element-factory-create">gst_element_factory_create</a></span> <span class="gtkdoc opt">(</span>srcfactory<span class="gtkdoc opt">,</span> <span class="string">&quot;src&quot;</span><span class="gtkdoc opt">);</span>
+src <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-create">gst_element_factory_create</a></span> <span class="gtkdoc opt">(</span>srcfactory<span class="gtkdoc opt">,</span> <span class="string">&quot;src&quot;</span><span class="gtkdoc opt">);</span>
 <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-return-if-fail">g_return_if_fail</a></span> <span class="gtkdoc opt">(</span>src <span class="gtkdoc opt">!=</span> NULL<span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">...</span></pre></td>
       </tr>
index 9779e338890fb3ae6d63c1690a4e814bbe1b8661..763b5ebff167b14a24b7a1853e5c2ba7f4752412 100644 (file)
@@ -186,7 +186,7 @@ of the object.
 <p>
 </p>
 <div class="refsect2">
-<a name="idp27685152"></a><h3>controlled properties</h3>
+<a name="idp28871792"></a><h3>controlled properties</h3>
 <p>
 Controlled properties offers a lightweight way to adjust gobject
 properties over stream-time. It works by using time-stamped value pairs that
@@ -999,7 +999,7 @@ if no control-rate was set.</td>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_object_sync_values              (<em class="parameter"><code><a class="link" href="GstObject.html" title="GstObject"><span class="type">GstObject</span></a> *object</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstClock.html#GstClockTime" title="GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
 <p>
-Sets the properties of the object, according to the <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSources</span></a> that
+Sets the properties of the object, according to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSources</span></a> that
 (maybe) handle them and for the given timestamp.
 </p>
 <p>
@@ -1082,8 +1082,8 @@ or not.</td>
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *property_name</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> disabled</code></em>);</pre>
 <p>
-This function is used to disable the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html"><span class="type">GstController</span></a> on a property for
-some time, i.e. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstController.html#gst-controller-sync-values"><code class="function">gst_controller_sync_values()</code></a> will do nothing for the
+This function is used to disable the <span class="type">GstController</span> on a property for
+some time, i.e. <code class="function">gst_controller_sync_values()</code> will do nothing for the
 property.
 </p>
 <div class="variablelist"><table border="0">
index f8ce32c16be1c69a6832cc9b53e4e145e2907089..7c7abe1c81986314a039098175519efe3caa196f 100644 (file)
@@ -400,7 +400,7 @@ dataflow on the pads.
 <a class="link" href="GstPad.html#gst-pad-get-parent" title="gst_pad_get_parent()"><code class="function">gst_pad_get_parent()</code></a> will retrieve the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a> that owns the pad.
 </p>
 <p>
-After two pads are retrieved from an element with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-pad"><code class="function">gst_element_get_pad()</code></a>,
+After two pads are retrieved from an element with <code class="function">gst_element_get_pad()</code>,
 the pads can be linked with <a class="link" href="GstPad.html#gst-pad-link" title="gst_pad_link ()"><code class="function">gst_pad_link()</code></a>. (For quick links,
 you can also use <a class="link" href="GstElement.html#gst-element-link" title="gst_element_link ()"><code class="function">gst_element_link()</code></a>, which will make the obvious
 link for you if it's straightforward.). Pads can be unlinked again with
@@ -1905,6 +1905,11 @@ The callback is allowed to modify the data pointer in <em class="parameter"><cod
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
 <td>the gpointer to optional user data.</td>
 </tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a <a class="link" href="GstPad.html#GstPadProbeReturn" title="enum GstPadProbeReturn"><span class="type">GstPadProbeReturn</span></a>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -2514,7 +2519,8 @@ contents of <em class="parameter"><code>buffer</code></em> is invalid for any ot
 <p>
 This function is installed on a source pad with
 <a class="link" href="GstPad.html#gst-pad-set-getrange-function" title="gst_pad_set_getrange_function()"><code class="function">gst_pad_set_getrange_function()</code></a> and can only be called on source pads after
-they are successfully activated with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-pull"><code class="function">gst_pad_activate_pull()</code></a>.
+they are successfully activated with <a class="link" href="GstPad.html#gst-pad-activate-mode" title="gst_pad_activate_mode ()"><code class="function">gst_pad_activate_mode()</code></a> with the
+<a class="link" href="GstPad.html#GST-PAD-MODE-PULL:CAPS"><span class="type">GST_PAD_MODE_PULL</span></a>.
 </p>
 <p>
 <em class="parameter"><code>offset</code></em> and <em class="parameter"><code>length</code></em> are always given in byte units. <em class="parameter"><code>offset</code></em> must normally be a value
@@ -2890,7 +2896,7 @@ the same caps.  Two such elements are tee and adder.
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_pad_proxy_query_accept_caps     (<em class="parameter"><code><a class="link" href="GstPad.html" title="GstPad"><span class="type">GstPad</span></a> *pad</code></em>,
                                                          <em class="parameter"><code><a class="link" href="gstreamer-GstQuery.html#GstQuery" title="struct GstQuery"><span class="type">GstQuery</span></a> *query</code></em>);</pre>
 <p>
-Calls <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-accept-caps"><code class="function">gst_pad_accept_caps()</code></a> for all internally linked pads of <em class="parameter"><code>pad</code></em> and
+Calls <code class="function">gst_pad_accept_caps()</code> for all internally linked pads of <em class="parameter"><code>pad</code></em> and
 returns the intersection of the results.
 </p>
 <p>
@@ -2948,8 +2954,8 @@ notify.
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> notify</code></em>);</pre>
 <p>
 Sets the given activate function for <em class="parameter"><code>pad</code></em>. The activate function will
-dispatch to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-push"><code class="function">gst_pad_activate_push()</code></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-pull"><code class="function">gst_pad_activate_pull()</code></a> to perform
-the actual activation. Only makes sense to set on sink pads.
+dispatch to <a class="link" href="GstPad.html#gst-pad-activate-mode" title="gst_pad_activate_mode ()"><code class="function">gst_pad_activate_mode()</code></a> to perform the actual activation.
+Only makes sense to set on sink pads.
 </p>
 <p>
 Call this function if your sink pad can start a pull-based task.
@@ -3727,7 +3733,7 @@ Check if the given pad accepts the caps.
 <p>
 Gets the capabilities this pad can produce or consume.
 Note that this method doesn't necessarily return the caps set by
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-set-caps"><code class="function">gst_pad_set_caps()</code></a> - use <a class="link" href="GstPad.html#gst-pad-get-current-caps" title="gst_pad_get_current_caps ()"><code class="function">gst_pad_get_current_caps()</code></a> for that instead.
+<code class="function">gst_pad_set_caps()</code> - use <a class="link" href="GstPad.html#gst-pad-get-current-caps" title="gst_pad_get_current_caps ()"><code class="function">gst_pad_get_current_caps()</code></a> for that instead.
 gst_pad_query_caps returns all possible caps a pad can operate with, using
 the pad's CAPS query function, If the query fails, this function will return
 <em class="parameter"><code>filter</code></em>, if not <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, otherwise ANY.
@@ -4650,9 +4656,8 @@ push or pull mode, just return. Otherwise dispatches to the pad's activate
 function to perform the actual activation.
 </p>
 <p>
-If not <em class="parameter"><code>active</code></em>, checks the pad's current mode and calls
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-push"><code class="function">gst_pad_activate_push()</code></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-pull"><code class="function">gst_pad_activate_pull()</code></a>, as appropriate, with a
-FALSE argument.
+If not <em class="parameter"><code>active</code></em>, calls <a class="link" href="GstPad.html#gst-pad-activate-mode" title="gst_pad_activate_mode ()"><code class="function">gst_pad_activate_mode()</code></a> with the pad's current mode
+and a FALSE argument.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
index 4df16cc9fd44b0ae39dac68bc63d38af540d8326..3d68044dbcdea8c7b007cbff6c1bbc8e3c750ff8 100644 (file)
@@ -132,7 +132,7 @@ or <a class="link" href="GstPad.html#gst-pad-new-from-static-template" title="gs
 The following code example shows the code to create a pad from a padtemplate.
 </p>
 <div class="example">
-<a name="idp27943152"></a><p class="title"><b>Example 11. Create a pad from a padtemplate</b></p>
+<a name="idp30562032"></a><p class="title"><b>Example 11. Create a pad from a padtemplate</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -155,11 +155,11 @@ The following code example shows the code to create a pad from a padtemplate.
 16
 17</pre></td>
         <td class="listing_code"><pre class="programlisting">GstStaticPadTemplate my_template <span class="gtkdoc opt">=</span>
-<span class="function"><a href="../gstreamer-1.0/GstPadTemplate.html#GST-STATIC-PAD-TEMPLATE:CAPS">GST_STATIC_PAD_TEMPLATE</a></span> <span class="gtkdoc opt">(</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GST-STATIC-PAD-TEMPLATE:CAPS">GST_STATIC_PAD_TEMPLATE</a></span> <span class="gtkdoc opt">(</span>
   <span class="string">&quot;sink&quot;</span><span class="gtkdoc opt">,</span>          <span class="gtkdoc slc">// the name of the pad</span>
   GST_PAD_SINK<span class="gtkdoc opt">,</span>    <span class="gtkdoc slc">// the direction of the pad</span>
   GST_PAD_ALWAYS<span class="gtkdoc opt">,</span>  <span class="gtkdoc slc">// when this pad will be present</span>
-  <span class="function"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GST-STATIC-CAPS">GST_STATIC_CAPS</a></span> <span class="gtkdoc opt">(</span>        <span class="gtkdoc slc">// the capabilities of the padtemplate</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GST-STATIC-CAPS">GST_STATIC_CAPS</a></span> <span class="gtkdoc opt">(</span>        <span class="gtkdoc slc">// the capabilities of the padtemplate</span>
     <span class="string">&quot;audio/x-raw, &quot;</span>
       <span class="string">&quot;channels = (int) [ 1, 6 ]&quot;</span>
   <span class="gtkdoc opt">)</span>
@@ -168,7 +168,7 @@ The following code example shows the code to create a pad from a padtemplate.
 <span class="function">my_method</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">void</span><span class="gtkdoc opt">)</span>
 <span class="gtkdoc opt">{</span>
   GstPad <span class="gtkdoc opt">*</span>pad<span class="gtkdoc opt">;</span>
-  pad <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstPad.html#gst-pad-new-from-static-template">gst_pad_new_from_static_template</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">,</span> <span class="string">&quot;sink&quot;</span><span class="gtkdoc opt">);</span>
+  pad <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-new-from-static-template">gst_pad_new_from_static_template</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">,</span> <span class="string">&quot;sink&quot;</span><span class="gtkdoc opt">);</span>
   <span class="gtkdoc opt">...</span>
 <span class="gtkdoc opt">}</span></pre></td>
       </tr>
@@ -200,8 +200,8 @@ element class, this is usually done in the class_init of the class:
 <span class="gtkdoc opt">{</span>
   GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
 
-  <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
-      <span class="function"><a href="../gstreamer-1.0/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">));</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
+      <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>my_template<span class="gtkdoc opt">));</span>
 <span class="gtkdoc opt">}</span></pre></td>
       </tr>
     </tbody>
index 719e65ba567637ef537a67866acbe471d93dfaba..b0082bcf9f58318fa0c1f05521d97d449801c803 100644 (file)
@@ -304,9 +304,9 @@ Normally this function is used like this:
 6</pre></td>
         <td class="listing_code"><pre class="programlisting">GstPluginFeature <span class="gtkdoc opt">*</span>loaded_feature<span class="gtkdoc opt">;</span>
 
-loaded_feature <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstPluginFeature.html#gst-plugin-feature-load">gst_plugin_feature_load</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
+loaded_feature <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPluginFeature.html#gst-plugin-feature-load">gst_plugin_feature_load</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
 <span class="gtkdoc slc">// presumably, we're no longer interested in the potentially-unloaded feature</span>
-<span class="function"><a href="../gstreamer-1.0/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>feature<span class="gtkdoc opt">);</span>
 feature <span class="gtkdoc opt">=</span> loaded_feature<span class="gtkdoc opt">;</span></pre></td>
       </tr>
     </tbody>
index 44e295568442fa92f3e2407a6cb14bbb3c78d939..ec594514ba95c625ab4f334192c50bf7a682df57 100644 (file)
@@ -149,17 +149,17 @@ GstTagList <span class="gtkdoc opt">*</span>result<span class="gtkdoc opt">;</sp
  
 tagsetter <span class="gtkdoc opt">=</span> <span class="function">GST_TAG_SETTER</span> <span class="gtkdoc opt">(</span>element<span class="gtkdoc opt">);</span>
  
-merge_mode <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstTagSetter.html#gst-tag-setter-get-tag-merge-mode">gst_tag_setter_get_tag_merge_mode</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
-application_tags <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstTagSetter.html#gst-tag-setter-get-tag-list">gst_tag_setter_get_tag_list</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
+merge_mode <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html#gst-tag-setter-get-tag-merge-mode">gst_tag_setter_get_tag_merge_mode</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
+application_tags <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagSetter.html#gst-tag-setter-get-tag-list">gst_tag_setter_get_tag_list</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">);</span>
 event_tags <span class="gtkdoc opt">= (</span><span class="gtkdoc kwb">const</span> GstTagList <span class="gtkdoc opt">*)</span> element<span class="gtkdoc opt">-&gt;</span>event_tags<span class="gtkdoc opt">;</span>
  
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;merging tags, merge mode = %d&quot;</span><span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;event tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">);</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;set   tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> application_tags<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;merging tags, merge mode = %d&quot;</span><span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;event tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;set   tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> application_tags<span class="gtkdoc opt">);</span>
  
-result <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstTagList.html#gst-tag-list-merge">gst_tag_list_merge</a></span> <span class="gtkdoc opt">(</span>application_tags<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
+result <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#gst-tag-list-merge">gst_tag_list_merge</a></span> <span class="gtkdoc opt">(</span>application_tags<span class="gtkdoc opt">,</span> event_tags<span class="gtkdoc opt">,</span> merge_mode<span class="gtkdoc opt">);</span>
  
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;final tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> result<span class="gtkdoc opt">);</span></pre></td>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG-OBJECT:CAPS">GST_LOG_OBJECT</a></span> <span class="gtkdoc opt">(</span>tagsetter<span class="gtkdoc opt">,</span> <span class="string">&quot;final tags: %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> result<span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
index 62ec442c3d402ee4be3e7a3d66d78dcbafb98f83..7dc4a70898b773b094aef7ecc5d18b9825b6c706 100644 (file)
@@ -73,7 +73,7 @@ the section <GTKDOCLINK HREF="gstreamer-Writing-typefind-functions">
 <p>
 </p>
 <div class="example">
-<a name="idp12151600"></a><p class="title"><b>Example 13. how to write a simple typefinder</b></p>
+<a name="idp27698816"></a><p class="title"><b>Example 13. how to write a simple typefinder</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -138,7 +138,7 @@ the section <GTKDOCLINK HREF="gstreamer-Writing-typefind-functions">
   MyTypeFind <span class="gtkdoc opt">*</span>find <span class="gtkdoc opt">= (</span>MyTypeFind <span class="gtkdoc opt">*)</span> data<span class="gtkdoc opt">;</span>
   <span class="keyword">if</span> <span class="gtkdoc opt">(</span>probability <span class="gtkdoc opt">&gt;</span> find<span class="gtkdoc opt">-&gt;</span>probability<span class="gtkdoc opt">) {</span>
     find<span class="gtkdoc opt">-&gt;</span>probability <span class="gtkdoc opt">=</span> probability<span class="gtkdoc opt">;</span>
-    <span class="function"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-replace">gst_caps_replace</a></span> <span class="gtkdoc opt">(&amp;</span>find<span class="gtkdoc opt">-&gt;</span>caps<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-replace">gst_caps_replace</a></span> <span class="gtkdoc opt">(&amp;</span>find<span class="gtkdoc opt">-&gt;</span>caps<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span>
   <span class="gtkdoc opt">}</span>
 <span class="gtkdoc opt">}</span>
 <span class="gtkdoc kwb">static</span> GstCaps <span class="gtkdoc opt">*</span>
@@ -147,11 +147,11 @@ the section <GTKDOCLINK HREF="gstreamer-Writing-typefind-functions">
   GList <span class="gtkdoc opt">*</span>walk<span class="gtkdoc opt">, *</span>type_list<span class="gtkdoc opt">;</span>
   MyTypeFind find <span class="gtkdoc opt">= {</span>data<span class="gtkdoc opt">,</span> size<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">};</span>
   GstTypeFind gst_find <span class="gtkdoc opt">= {</span>my_peek<span class="gtkdoc opt">,</span> my_suggest<span class="gtkdoc opt">, &amp;</span>find<span class="gtkdoc opt">, };</span>
-  walk <span class="gtkdoc opt">=</span> type_list <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstTypeFindFactory.html#gst-type-find-factory-get-list">gst_type_find_factory_get_list</a></span> <span class="gtkdoc opt">();</span>
+  walk <span class="gtkdoc opt">=</span> type_list <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTypeFindFactory.html#gst-type-find-factory-get-list">gst_type_find_factory_get_list</a></span> <span class="gtkdoc opt">();</span>
   <span class="keyword">while</span> <span class="gtkdoc opt">(</span>walk<span class="gtkdoc opt">) {</span>
     GstTypeFindFactory <span class="gtkdoc opt">*</span>factory <span class="gtkdoc opt">=</span> <span class="function">GST_TYPE_FIND_FACTORY</span> <span class="gtkdoc opt">(</span>walk<span class="gtkdoc opt">-&gt;</span>data<span class="gtkdoc opt">);</span>
     walk <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-next">g_list_next</a></span> <span class="gtkdoc opt">(</span>walk<span class="gtkdoc opt">)</span>
-    <span class="function"><a href="../gstreamer-1.0/GstTypeFindFactory.html#gst-type-find-factory-call-function">gst_type_find_factory_call_function</a></span> <span class="gtkdoc opt">(</span>factory<span class="gtkdoc opt">, &amp;</span>gst_find<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTypeFindFactory.html#gst-type-find-factory-call-function">gst_type_find_factory_call_function</a></span> <span class="gtkdoc opt">(</span>factory<span class="gtkdoc opt">, &amp;</span>gst_find<span class="gtkdoc opt">);</span>
   <span class="gtkdoc opt">}</span>
   <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-free">g_list_free</a></span> <span class="gtkdoc opt">(</span>type_list<span class="gtkdoc opt">);</span>
   <span class="keyword">return</span> find<span class="gtkdoc opt">.</span>caps<span class="gtkdoc opt">;</span>
index 778f0f699eb831327b39961d6a644572c48552af..e5085524251e210a45edd4f81e9826a2b31ed229 100644 (file)
@@ -31,7 +31,7 @@ How to build the GStreamer framework and applications using it.
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp9351824"></a><h2>Building GStreamer on UNIX</h2>
+<a name="idp7759168"></a><h2>Building GStreamer on UNIX</h2>
 <p>
     On UNIX, GStreamer uses the standard GNU build system,
     using <span class="application">autoconf</span> for package
@@ -92,7 +92,7 @@ How to build the GStreamer framework and applications using it.
   </p>
 </div>
 <div class="refsect1">
-<a name="idp9104480"></a><h2>Building GStreamer Applications</h2>
+<a name="idp8634800"></a><h2>Building GStreamer Applications</h2>
 <p>
 Applications and libraries can use <span class="command"><strong>pkg-config</strong></span> to get all the
 needed compiler and linker flags to build against GStreamer. Please note that
index 449e53fbe22b1d127672da029b41ff6e243d0185..da1fac78a06fc93aed7fb1ed3a19f7bdbd8cfca8 100644 (file)
@@ -31,9 +31,9 @@ How to run and debug your GStreamer application
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp11310672"></a><h2>Running and debugging GStreamer Applications</h2>
+<a name="idp3330784"></a><h2>Running and debugging GStreamer Applications</h2>
 <div class="refsect2">
-<a name="idp9674784"></a><h3>Environment variables</h3>
+<a name="idp8488400"></a><h3>Environment variables</h3>
 <p> 
 GStreamer inspects a few of environment variables in addition to standard
 variables like <code class="envar">LANG</code>, <code class="envar">PATH</code> or <code class="envar">HOME</code>. 
index 781fa1864a308c1a0362343e4ab8139e032d5cd0..299fba563b9655c3399d00deb3ba44b468d76fda 100644 (file)
@@ -83,7 +83,7 @@ options, as shown in the following example.
 <p>
 </p>
 <div class="example">
-<a name="idp8067584"></a><p class="title"><b>Example 1. Initializing the gstreamer library</b></p>
+<a name="idp11739936"></a><p class="title"><b>Example 1. Initializing the gstreamer library</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -99,7 +99,7 @@ options, as shown in the following example.
 <span class="function">main</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">int</span> argc<span class="gtkdoc opt">,</span> <span class="gtkdoc kwb">char</span> <span class="gtkdoc opt">*</span>argv<span class="gtkdoc opt">[])</span>
 <span class="gtkdoc opt">{</span>
   <span class="gtkdoc slc">// initialize the GStreamer library</span>
-  <span class="function"><a href="../gstreamer-1.0/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">);</span>
   <span class="gtkdoc opt">...</span>
 <span class="gtkdoc opt">}</span></pre></td>
       </tr>
@@ -119,7 +119,7 @@ You can also use GOption to initialize your own parameters as shown in
 the next code fragment:
 </p>
 <div class="example">
-<a name="idp10934368"></a><p class="title"><b>Example 2. Initializing own parameters when initializing gstreamer</b></p>
+<a name="idp8067152"></a><p class="title"><b>Example 2. Initializing own parameters when initializing gstreamer</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -162,9 +162,9 @@ the next code fragment:
    <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Deprecated-Thread-APIs.html#g-thread-init">g_thread_init</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">);</span>
  ctx <span class="gtkdoc opt">=</span> <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-new">g_option_context_new</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;[ADDITIONAL ARGUMENTS]&quot;</span><span class="gtkdoc opt">);</span>
  <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-add-main-entries">g_option_context_add_main_entries</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">,</span> options<span class="gtkdoc opt">,</span> GETTEXT_PACKAGE<span class="gtkdoc opt">);</span>
- <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-add-group">g_option_context_add_group</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-Gst.html#gst-init-get-option-group">gst_init_get_option_group</a></span> <span class="gtkdoc opt">());</span>
+ <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-add-group">g_option_context_add_group</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-Gst.html#gst-init-get-option-group">gst_init_get_option_group</a></span> <span class="gtkdoc opt">());</span>
  <span class="keyword">if</span> <span class="gtkdoc opt">(!</span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-parse">g_option_context_parse</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">, &amp;</span>argc<span class="gtkdoc opt">, &amp;</span>argv<span class="gtkdoc opt">, &amp;</span>err<span class="gtkdoc opt">)) {</span>
-   <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Error initializing: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-STR-NULL:CAPS">GST_STR_NULL</a></span> <span class="gtkdoc opt">(</span>err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">));</span>
+   <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Error initializing: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-STR-NULL:CAPS">GST_STR_NULL</a></span> <span class="gtkdoc opt">(</span>err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">));</span>
    <span class="function">exit</span> <span class="gtkdoc opt">(</span><span class="number">1</span><span class="gtkdoc opt">);</span>
  <span class="gtkdoc opt">}</span>
  <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Commandline-option-parser.html#g-option-context-free">g_option_context_free</a></span> <span class="gtkdoc opt">(</span>ctx<span class="gtkdoc opt">);</span>
index 75a5a9b823bd0c5e7bc18be518249837fa0f0426..4f470a350ba871cb9204b114dc99fd5011240179 100644 (file)
@@ -212,7 +212,7 @@ The following example creates a buffer that can hold a given video frame
 with a given width, height and bits per plane.
 </p>
 <div class="example">
-<a name="idp13459264"></a><p class="title"><b>Example 3. Creating a buffer for a video frame</b></p>
+<a name="idp14292944"></a><p class="title"><b>Example 3. Creating a buffer for a video frame</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -231,9 +231,9 @@ GstMemory <span class="gtkdoc opt">*</span>memory<span class="gtkdoc opt">;</spa
 gint size<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">,</span> bpp<span class="gtkdoc opt">;</span>
 <span class="gtkdoc opt">...</span>
 size <span class="gtkdoc opt">=</span> width <span class="gtkdoc opt">*</span> height <span class="gtkdoc opt">*</span> bpp<span class="gtkdoc opt">;</span>
-buffer <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-new">gst_buffer_new</a></span> <span class="gtkdoc opt">();</span>
-memory <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstAllocator.html#gst-allocator-alloc">gst_allocator_alloc</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">,</span> size<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-insert-memory">gst_buffer_insert_memory</a></span> <span class="gtkdoc opt">(</span>buffer<span class="gtkdoc opt">, -</span><span class="number">1</span><span class="gtkdoc opt">,</span> memory<span class="gtkdoc opt">);</span>
+buffer <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-new">gst_buffer_new</a></span> <span class="gtkdoc opt">();</span>
+memory <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#gst-allocator-alloc">gst_allocator_alloc</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">,</span> size<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-insert-memory">gst_buffer_insert_memory</a></span> <span class="gtkdoc opt">(</span>buffer<span class="gtkdoc opt">, -</span><span class="number">1</span><span class="gtkdoc opt">,</span> memory<span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">...</span></pre></td>
       </tr>
     </tbody>
@@ -295,7 +295,7 @@ only be made when it is necessary.
 <p>
 Several flags of the buffer can be set and unset with the
 <a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-SET:CAPS" title="GST_BUFFER_FLAG_SET()"><code class="function">GST_BUFFER_FLAG_SET()</code></a> and <a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-UNSET:CAPS" title="GST_BUFFER_FLAG_UNSET()"><code class="function">GST_BUFFER_FLAG_UNSET()</code></a> macros. Use
-<a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-IS-SET:CAPS" title="GST_BUFFER_FLAG_IS_SET()"><code class="function">GST_BUFFER_FLAG_IS_SET()</code></a> to test if a certain <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> is set.
+<a class="link" href="gstreamer-GstBuffer.html#GST-BUFFER-FLAG-IS-SET:CAPS" title="GST_BUFFER_FLAG_IS_SET()"><code class="function">GST_BUFFER_FLAG_IS_SET()</code></a> to test if a certain <span class="type">GstBufferFlag</span> is set.
 </p>
 <p>
 Buffers can be efficiently merged into a larger buffer with
@@ -490,7 +490,7 @@ A set of buffer flags used to describe properties of a <a class="link" href="gst
 <pre class="programlisting">#define GST_BUFFER_FLAGS(buf)                   GST_MINI_OBJECT_FLAGS(buf)
 </pre>
 <p>
-A flags word containing <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> flags set on this buffer.
+A flags word containing <span class="type">GstBufferFlag</span> flags set on this buffer.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -517,7 +517,7 @@ Gives the status of a specific flag on a buffer.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>flag</code></em> :</span></p></td>
-<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> to check.</td>
+<td>the <span class="type">GstBufferFlag</span> to check.</td>
 </tr>
 </tbody>
 </table></div>
@@ -539,7 +539,7 @@ Sets a buffer flag on a buffer.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>flag</code></em> :</span></p></td>
-<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> to set.</td>
+<td>the <span class="type">GstBufferFlag</span> to set.</td>
 </tr>
 </tbody>
 </table></div>
@@ -561,7 +561,7 @@ Clears a buffer flag.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>flag</code></em> :</span></p></td>
-<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBufferFlag"><span class="type">GstBufferFlag</span></a> to clear.</td>
+<td>the <span class="type">GstBufferFlag</span> to clear.</td>
 </tr>
 </tbody>
 </table></div>
index 101e27ff1397ac6ce4748f8f87f95290fbb0bec0..dbad46ccdf69c646e7965fb82a38f65bb4d1347a 100644 (file)
@@ -150,7 +150,7 @@ given pad can handle. They are also stored in the <a class="link" href="GstRegis
 a description of the <a class="link" href="GstElement.html" title="GstElement"><span class="type">GstElement</span></a>.
 </p>
 <p>
-Caps are exposed on the element pads using the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-caps"><code class="function">gst_pad_get_caps()</code></a> pad
+Caps are exposed on the element pads using the <code class="function">gst_pad_get_caps()</code> pad
 function. This function describes the possible types that the pad can
 handle or produce at runtime.
 </p>
@@ -160,7 +160,7 @@ A <a class="link" href="gstreamer-GstCaps.html#GstCaps" title="struct GstCaps"><
 <p>
 </p>
 <div class="example">
-<a name="idp17423056"></a><p class="title"><b>Example 4. Creating caps</b></p>
+<a name="idp18325072"></a><p class="title"><b>Example 4. Creating caps</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -174,7 +174,7 @@ A <a class="link" href="gstreamer-GstCaps.html#GstCaps" title="struct GstCaps"><
 7
 8</pre></td>
         <td class="listing_code"><pre class="programlisting">GstCaps <span class="gtkdoc opt">*</span>caps<span class="gtkdoc opt">;</span>
-caps <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-new-simple">gst_caps_new_simple</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;video/x-raw&quot;</span><span class="gtkdoc opt">,</span>
+caps <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-new-simple">gst_caps_new_simple</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;video/x-raw&quot;</span><span class="gtkdoc opt">,</span>
      <span class="string">&quot;format&quot;</span><span class="gtkdoc opt">,</span> G_TYPE_STRING<span class="gtkdoc opt">,</span> <span class="string">&quot;I420&quot;</span><span class="gtkdoc opt">,</span>
      <span class="string">&quot;framerate&quot;</span><span class="gtkdoc opt">,</span> GST_TYPE_FRACTION<span class="gtkdoc opt">,</span> <span class="number">25</span><span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">,</span>
      <span class="string">&quot;pixel-aspect-ratio&quot;</span><span class="gtkdoc opt">,</span> GST_TYPE_FRACTION<span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">,</span>
@@ -1582,7 +1582,7 @@ For debugging purposes its easier to do something like this:
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;caps are %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span></pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;caps are %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> caps<span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
index d992a2d2ba656bb760e5e13314d8122d9a84cd54..532687313cdff2a38d62d723edf8205e167e3a28 100644 (file)
@@ -206,7 +206,7 @@ To do that <a class="link" href="gstreamer-GstEvent.html#gst-event-new-seek" tit
 the needed parameters to specify seeking time and mode.
 </p>
 <div class="example">
-<a name="idp22881984"></a><p class="title"><b>Example 8. performing a seek on a pipeline</b></p>
+<a name="idp23273888"></a><p class="title"><b>Example 8. performing a seek on a pipeline</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -231,13 +231,13 @@ gboolean result<span class="gtkdoc opt">;</span>
 <span class="gtkdoc opt">...</span>
 <span class="gtkdoc slc">// construct a seek event to play the media from second 2 to 5, flush</span>
 <span class="gtkdoc slc">// the pipeline to decrease latency.</span>
-event <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstEvent.html#gst-event-new-seek">gst_event_new_seek</a></span> <span class="gtkdoc opt">(</span><span class="number">1.0</span><span class="gtkdoc opt">,</span> 
+event <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#gst-event-new-seek">gst_event_new_seek</a></span> <span class="gtkdoc opt">(</span><span class="number">1.0</span><span class="gtkdoc opt">,</span> 
    GST_FORMAT_TIME<span class="gtkdoc opt">,</span> 
    GST_SEEK_FLAG_FLUSH<span class="gtkdoc opt">,</span>
    GST_SEEK_TYPE_SET<span class="gtkdoc opt">,</span> <span class="number">2</span> <span class="gtkdoc opt">*</span> GST_SECOND<span class="gtkdoc opt">,</span>
    GST_SEEK_TYPE_SET<span class="gtkdoc opt">,</span> <span class="number">5</span> <span class="gtkdoc opt">*</span> GST_SECOND<span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">...</span>
-result <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-send-event">gst_element_send_event</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> event<span class="gtkdoc opt">);</span>
+result <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-send-event">gst_element_send_event</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> event<span class="gtkdoc opt">);</span>
 <span class="keyword">if</span> <span class="gtkdoc opt">(!</span>result<span class="gtkdoc opt">)</span>
   <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Message-Logging.html#g-warning">g_warning</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;seek failed&quot;</span><span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">...</span></pre></td>
index 3ebc12c95e769ee43711ca98c9287cbd717a3f1c..0038528688f8350c215879d5f31c0c17dc41bafa 100644 (file)
@@ -115,14 +115,14 @@ Elements throw errors using the <a class="link" href="GstElement.html#GST-ELEMEN
 <p>
 </p>
 <div class="example">
-<a name="idp9463952"></a><p class="title"><b>Example 7. Throwing an error</b></p>
+<a name="idp3647408"></a><p class="title"><b>Example 7. Throwing an error</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1
 2</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/GstElement.html#GST-ELEMENT-ERROR:CAPS">GST_ELEMENT_ERROR</a></span> <span class="gtkdoc opt">(</span>src<span class="gtkdoc opt">,</span> RESOURCE<span class="gtkdoc opt">,</span> NOT_FOUND<span class="gtkdoc opt">,</span>
+        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-ELEMENT-ERROR:CAPS">GST_ELEMENT_ERROR</a></span> <span class="gtkdoc opt">(</span>src<span class="gtkdoc opt">,</span> RESOURCE<span class="gtkdoc opt">,</span> NOT_FOUND<span class="gtkdoc opt">,</span>
   <span class="gtkdoc opt">(</span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#gettext-macro">_</a></span><span class="gtkdoc opt">(</span><span class="string">&quot;No file name specified for reading.&quot;</span><span class="gtkdoc opt">)), (</span>NULL<span class="gtkdoc opt">));</span></pre></td>
       </tr>
     </tbody>
index d6fb6f49568f3f6e8513d4f168bb44202b561fd4..e56d172446138bd4c6393b305943b527a9ba3ead 100644 (file)
@@ -250,7 +250,7 @@ the variables and set the default category.
       <tr>
         <td class="listing_lines" align="right"><pre>1
 2</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">);</span>     <span class="gtkdoc slc">// define category (statically)</span>
+        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">);</span>     <span class="gtkdoc slc">// define category (statically)</span>
 <span class="gtkdoc ppc">#define GST_CAT_DEFAULT my_category</span>     <span class="gtkdoc slc">// set as default</span><span class="gtkdoc ppc"></span></pre></td>
       </tr>
     </tbody>
@@ -266,7 +266,7 @@ After that you only need to initialize the category.
       <tr>
         <td class="listing_lines" align="right"><pre>1
 2</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">,</span> <span class="string">&quot;my category&quot;</span><span class="gtkdoc opt">,</span>
+        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>my_category<span class="gtkdoc opt">,</span> <span class="string">&quot;my category&quot;</span><span class="gtkdoc opt">,</span>
                          <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="string">&quot;This is my very own&quot;</span><span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
@@ -1272,12 +1272,12 @@ category is not found, but GST_CAT_DEFAULT is defined, that is assigned to
 4
 5
 6</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">);</span>
+        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">);</span>
 <span class="gtkdoc ppc">#define GST_CAT_DEFAULT gst_myplugin_debug</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-STATIC:CAPS">GST_DEBUG_CATEGORY_STATIC</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">...</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">,</span> <span class="string">&quot;myplugin&quot;</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="string">&quot;nice element&quot;</span><span class="gtkdoc opt">);</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-GET:CAPS">GST_DEBUG_CATEGORY_GET</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">,</span> <span class="string">&quot;GST_PERFORMANCE&quot;</span><span class="gtkdoc opt">);</span></pre></td>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-INIT:CAPS">GST_DEBUG_CATEGORY_INIT</a></span> <span class="gtkdoc opt">(</span>gst_myplugin_debug<span class="gtkdoc opt">,</span> <span class="string">&quot;myplugin&quot;</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="string">&quot;nice element&quot;</span><span class="gtkdoc opt">);</span>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-DEBUG-CATEGORY-GET:CAPS">GST_DEBUG_CATEGORY_GET</a></span> <span class="gtkdoc opt">(</span>GST_CAT_PERFORMANCE<span class="gtkdoc opt">,</span> <span class="string">&quot;GST_PERFORMANCE&quot;</span><span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -2440,7 +2440,7 @@ Example:
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function">printf</span><span class="gtkdoc opt">(</span><span class="string">&quot;%&quot;</span> GST_TIME_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span><span class="gtkdoc opt">(</span>ts<span class="gtkdoc opt">));</span></pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="function">printf</span><span class="gtkdoc opt">(</span><span class="string">&quot;%&quot;</span> GST_TIME_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span><span class="gtkdoc opt">(</span>ts<span class="gtkdoc opt">));</span></pre></td>
       </tr>
     </tbody>
   </table>
index 31bacea96b88437c276dcfd7c52da118e8879e75..6dcec3bbdebac1989c99e13ca0791afd70555bdb 100644 (file)
@@ -122,7 +122,7 @@ The basic use pattern of an iterator is as follows:
 <p>
 </p>
 <div class="example">
-<a name="idp21236752"></a><p class="title"><b>Example 9. Using an iterator</b></p>
+<a name="idp23894336"></a><p class="title"><b>Example 9. Using an iterator</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -153,14 +153,14 @@ The basic use pattern of an iterator is as follows:
         <td class="listing_code"><pre class="programlisting">it <span class="gtkdoc opt">=</span> <span class="function">_get_iterator</span><span class="gtkdoc opt">(</span>object<span class="gtkdoc opt">);</span>
 done <span class="gtkdoc opt">=</span> FALSE<span class="gtkdoc opt">;</span>
 <span class="keyword">while</span> <span class="gtkdoc opt">(!</span>done<span class="gtkdoc opt">) {</span>
-  <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstIterator.html#gst-iterator-next">gst_iterator_next</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">, &amp;</span>item<span class="gtkdoc opt">)) {</span>
+  <span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstIterator.html#gst-iterator-next">gst_iterator_next</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">, &amp;</span>item<span class="gtkdoc opt">)) {</span>
     <span class="keyword">case</span> GST_ITERATOR_OK<span class="gtkdoc opt">:</span>
       <span class="gtkdoc opt">...</span> use<span class="gtkdoc opt">/</span>change item here<span class="gtkdoc opt">...</span>
       <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-reset">g_value_reset</a></span> <span class="gtkdoc opt">(&amp;</span>item<span class="gtkdoc opt">);</span>
       <span class="keyword">break</span><span class="gtkdoc opt">;</span>
     <span class="keyword">case</span> GST_ITERATOR_RESYNC<span class="gtkdoc opt">:</span>
       <span class="gtkdoc opt">...</span>rollback changes to items<span class="gtkdoc opt">...</span>
-      <span class="function"><a href="../gstreamer-1.0/gstreamer-GstIterator.html#gst-iterator-resync">gst_iterator_resync</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span>
+      <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstIterator.html#gst-iterator-resync">gst_iterator_resync</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span>
       <span class="keyword">break</span><span class="gtkdoc opt">;</span>
     <span class="keyword">case</span> GST_ITERATOR_ERROR<span class="gtkdoc opt">:</span>
       <span class="gtkdoc opt">...</span>wrong parameters were given<span class="gtkdoc opt">...</span>
@@ -172,7 +172,7 @@ done <span class="gtkdoc opt">=</span> FALSE<span class="gtkdoc opt">;</span>
   <span class="gtkdoc opt">}</span>
 <span class="gtkdoc opt">}</span>
 <span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Generic-values.html#g-value-unset">g_value_unset</a></span> <span class="gtkdoc opt">(&amp;</span>item<span class="gtkdoc opt">);</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstIterator.html#gst-iterator-free">gst_iterator_free</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span></pre></td>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstIterator.html#gst-iterator-free">gst_iterator_free</a></span> <span class="gtkdoc opt">(</span>it<span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
index 7d129003f084ceb2c1a131b9c5bcf7a9f8f85ad7..6dc1a243694b10315602af9cc13a2945adb9632b 100644 (file)
@@ -273,13 +273,13 @@ The basic use pattern of posting a message on a <a class="link" href="GstBus.htm
 <p>
 </p>
 <div class="example">
-<a name="idp29705072"></a><p class="title"><b>Example 10. Posting a <a class="link" href="gstreamer-GstMessage.html#GstMessage" title="struct GstMessage"><span class="type">GstMessage</span></a></b></p>
+<a name="idp30603584"></a><p class="title"><b>Example 10. Posting a <a class="link" href="gstreamer-GstMessage.html#GstMessage" title="struct GstMessage"><span class="type">GstMessage</span></a></b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/GstBus.html#gst-bus-post">gst_bus_post</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-new-eos">gst_message_new_eos</a></span><span class="gtkdoc opt">());</span></pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html#gst-bus-post">gst_bus_post</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-new-eos">gst_message_new_eos</a></span><span class="gtkdoc opt">());</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -1082,14 +1082,14 @@ Typical usage of this function might be:
 16
 17</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">...</span>
-<span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
+<span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
   <span class="keyword">case</span> GST_MESSAGE_ERROR<span class="gtkdoc opt">: {</span>
     GError <span class="gtkdoc opt">*</span>err <span class="gtkdoc opt">=</span> NULL<span class="gtkdoc opt">;</span>
     gchar <span class="gtkdoc opt">*</span>dbg_info <span class="gtkdoc opt">=</span> NULL<span class="gtkdoc opt">;</span>
     
-    <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-parse-error">gst_message_parse_error</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>err<span class="gtkdoc opt">, &amp;</span>dbg_info<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-parse-error">gst_message_parse_error</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>err<span class="gtkdoc opt">, &amp;</span>dbg_info<span class="gtkdoc opt">);</span>
     <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-printerr">g_printerr</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;ERROR from element %s: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
-        <span class="function"><a href="../gstreamer-1.0/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span> err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">);</span>
+        <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span> err<span class="gtkdoc opt">-&gt;</span>message<span class="gtkdoc opt">);</span>
     <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-printerr">g_printerr</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Debugging info: %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">, (</span>dbg_info<span class="gtkdoc opt">)</span> ? dbg_info <span class="gtkdoc opt">:</span> <span class="string">&quot;none&quot;</span><span class="gtkdoc opt">);</span>
     <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#g-error-free">g_error_free</a></span> <span class="gtkdoc opt">(</span>err<span class="gtkdoc opt">);</span>
     <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span> <span class="gtkdoc opt">(</span>dbg_info<span class="gtkdoc opt">);</span>
@@ -1333,14 +1333,14 @@ Typical usage of this function might be:
 13
 14</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">...</span>
-<span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
+<span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
   <span class="keyword">case</span> GST_MESSAGE_TAG<span class="gtkdoc opt">: {</span>
     GstTagList <span class="gtkdoc opt">*</span>tags <span class="gtkdoc opt">=</span> NULL<span class="gtkdoc opt">;</span>
     
-    <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-parse-tag">gst_message_parse_tag</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>tags<span class="gtkdoc opt">);</span>
-    <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Got tags from element %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">));</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-parse-tag">gst_message_parse_tag</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>tags<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Got tags from element %s</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">));</span>
     <span class="function">handle_tags</span> <span class="gtkdoc opt">(</span>tags<span class="gtkdoc opt">);</span>
-    <span class="function"><a href="../gstreamer-1.0/gstreamer-GstTagList.html#gst-tag-list-unref">gst_tag_list_unref</a></span> <span class="gtkdoc opt">(</span>tags<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#gst-tag-list-unref">gst_tag_list_unref</a></span> <span class="gtkdoc opt">(</span>tags<span class="gtkdoc opt">);</span>
     <span class="keyword">break</span><span class="gtkdoc opt">;</span>
   <span class="gtkdoc opt">}</span>
   <span class="gtkdoc opt">...</span>
@@ -1591,15 +1591,15 @@ Typical usage of this function might be:
 14
 15</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">...</span>
-<span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
+<span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span>
   <span class="keyword">case</span> GST_MESSAGE_STATE_CHANGED<span class="gtkdoc opt">: {</span>
     GstState old_state<span class="gtkdoc opt">,</span> new_state<span class="gtkdoc opt">;</span>
     
-    <span class="function"><a href="../gstreamer-1.0/gstreamer-GstMessage.html#gst-message-parse-state-changed">gst_message_parse_state_changed</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>old_state<span class="gtkdoc opt">, &amp;</span>new_state<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#gst-message-parse-state-changed">gst_message_parse_state_changed</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>old_state<span class="gtkdoc opt">, &amp;</span>new_state<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
     <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Element %s changed state from %s to %s.</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span>
-        <span class="function"><a href="../gstreamer-1.0/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span>
-        <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>old_state<span class="gtkdoc opt">),</span>
-        <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>new_state<span class="gtkdoc opt">));</span>
+        <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GST-OBJECT-NAME:CAPS">GST_OBJECT_NAME</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">-&gt;</span>src<span class="gtkdoc opt">),</span>
+        <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>old_state<span class="gtkdoc opt">),</span>
+        <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-state-get-name">gst_element_state_get_name</a></span> <span class="gtkdoc opt">(</span>new_state<span class="gtkdoc opt">));</span>
     <span class="keyword">break</span><span class="gtkdoc opt">;</span>
   <span class="gtkdoc opt">}</span>
   <span class="gtkdoc opt">...</span>
index da24fd7bdcbe3686718a06e94ac7cce0a549956a..4a1a95305ae606948a1ebf3f626a2e1b27bad409 100644 (file)
@@ -284,7 +284,7 @@ The following example shows how to query the duration of a pipeline:
 <p>
 </p>
 <div class="example">
-<a name="idp39816480"></a><p class="title"><b>Example 12. Query duration on a pipeline</b></p>
+<a name="idp40600640"></a><p class="title"><b>Example 12. Query duration on a pipeline</b></p>
 <div class="example-contents">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -304,17 +304,17 @@ The following example shows how to query the duration of a pipeline:
 13</pre></td>
         <td class="listing_code"><pre class="programlisting">GstQuery <span class="gtkdoc opt">*</span>query<span class="gtkdoc opt">;</span>
 gboolean res<span class="gtkdoc opt">;</span>
-query <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstQuery.html#gst-query-new-duration">gst_query_new_duration</a></span> <span class="gtkdoc opt">(</span>GST_FORMAT_TIME<span class="gtkdoc opt">);</span>
-res <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-query">gst_element_query</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> query<span class="gtkdoc opt">);</span>
+query <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#gst-query-new-duration">gst_query_new_duration</a></span> <span class="gtkdoc opt">(</span>GST_FORMAT_TIME<span class="gtkdoc opt">);</span>
+res <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-query">gst_element_query</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> query<span class="gtkdoc opt">);</span>
 <span class="keyword">if</span> <span class="gtkdoc opt">(</span>res<span class="gtkdoc opt">) {</span>
   gint64 duration<span class="gtkdoc opt">;</span>
-  <span class="function"><a href="../gstreamer-1.0/gstreamer-GstQuery.html#gst-query-parse-duration">gst_query_parse_duration</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">, &amp;</span>duration<span class="gtkdoc opt">);</span>
-  <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;duration = %&quot;</span>GST_TIME_FORMAT<span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span> <span class="gtkdoc opt">(</span>duration<span class="gtkdoc opt">));</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#gst-query-parse-duration">gst_query_parse_duration</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">, &amp;</span>duration<span class="gtkdoc opt">);</span>
+  <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;duration = %&quot;</span>GST_TIME_FORMAT<span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-TIME-ARGS:CAPS">GST_TIME_ARGS</a></span> <span class="gtkdoc opt">(</span>duration<span class="gtkdoc opt">));</span>
 <span class="gtkdoc opt">}</span>
 <span class="keyword">else</span> <span class="gtkdoc opt">{</span>
   <span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;duration query failed...&quot;</span><span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">}</span>
-<span class="function"><a href="../gstreamer-1.0/gstreamer-GstQuery.html#gst-query-unref">gst_query_unref</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">);</span></pre></td>
+<span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#gst-query-unref">gst_query_unref</a></span> <span class="gtkdoc opt">(</span>query<span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -2034,7 +2034,7 @@ Configures the buffering stats values in <em class="parameter"><code>query</code
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>buffering_left</code></em> :</span></p></td>
-<td>amount of buffering time left</td>
+<td>amount of buffering time left in milliseconds</td>
 </tr>
 </tbody>
 </table></div>
@@ -2074,7 +2074,8 @@ Extracts the buffering stats values from <em class="parameter"><code>query</code
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>buffering_left</code></em> :</span></p></td>
-<td>amount of buffering time left, or NULL. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+<td>amount of buffering time left in
+milliseconds, or NULL. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
index e500b1c27af15ff76f563b0c1cfc9c0e652fdc04..23fba640e1d71dd68fa7512c2ac85dc877b30140 100644 (file)
@@ -198,7 +198,8 @@ Free-function: gst_sample_unref
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>segment</code></em> :</span></p></td>
-<td>transfer none) (allow-none): a <a class="link" href="gstreamer-GstSegment.html#GstSegment" title="struct GstSegment"><span class="type">GstSegment</span></a>, or NULL</td>
+<td>a <a class="link" href="gstreamer-GstSegment.html#GstSegment" title="struct GstSegment"><span class="type">GstSegment</span></a>, or NULL. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
index 1bb66e176c64f071d2195f8ceccfdc9714f2f95c..4c29d7a4696a1deec22b4d47e43e5c81d5cf5d36 100644 (file)
@@ -226,6 +226,7 @@ interest in a media file.
 <div class="refsect2">
 <a name="GstSegmentFlags"></a><h3>enum GstSegmentFlags</h3>
 <pre class="programlisting">typedef enum {
+ /*&lt; flags &gt;*/
   GST_SEGMENT_FLAG_NONE            = GST_SEEK_FLAG_NONE,
   GST_SEGMENT_FLAG_RESET           = GST_SEEK_FLAG_FLUSH,
   GST_SEGMENT_FLAG_SKIP            = GST_SEEK_FLAG_SKIP,
index 4d9d6190b17377c89d3031ae8224d09a501b3ae8..4538ac25e72eb7bbb8883adebe5e2683505ef7fb 100644 (file)
@@ -2022,7 +2022,7 @@ For debugging purposes its easier to do something like this:
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="../gstreamer-1.0/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;structure is %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> structure<span class="gtkdoc opt">);</span></pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstInfo.html#GST-LOG:CAPS">GST_LOG</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;structure is %&quot;</span> GST_PTR_FORMAT<span class="gtkdoc opt">,</span> structure<span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
index 020e9215618430e07b3553f97736e75297acee9e..c7c2beab5eb75d9f93f269d0f6bc40e39f5e78e8 100644 (file)
@@ -359,7 +359,7 @@ In the table below this is shown for the cases that a tag exists in the list
 <p>
 </p>
 <div class="table">
-<a name="idp44054384"></a><p class="title"><b>Table 1. merge mode</b></p>
+<a name="idp45324000"></a><p class="title"><b>Table 1. merge mode</b></p>
 <div class="table-contents"><table summary="merge mode" border="1">
 <colgroup>
 <col>
index 64024005c1895cd7cc3e60a3e790e4bed6133b43..6cd2789ef732ac8b5b9481a3582ae92dd40bb4a1 100644 (file)
@@ -494,7 +494,7 @@ Creates an element for handling the given URI.
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>a new element or NULL if none could be created. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+<td>a new element or NULL if none could be created. <span class="annotation">[transfer floating]</span>
 </td>
 </tr>
 </tbody>
index f9f0caa7bef0cc7f46fbaa10ca3679aef8c0efb6..88a6fc91cfea72ff2320a99822593002992e449e 100644 (file)
@@ -237,7 +237,7 @@ endianness.
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstValue.html#GST-MAKE-FOURCC:CAPS">GST_MAKE_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">'M'</span><span class="gtkdoc opt">,</span> <span class="string">'J'</span><span class="gtkdoc opt">,</span> <span class="string">'P'</span><span class="gtkdoc opt">,</span> <span class="string">'G'</span><span class="gtkdoc opt">);</span></pre></td>
+        <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#GST-MAKE-FOURCC:CAPS">GST_MAKE_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">'M'</span><span class="gtkdoc opt">,</span> <span class="string">'J'</span><span class="gtkdoc opt">,</span> <span class="string">'P'</span><span class="gtkdoc opt">,</span> <span class="string">'G'</span><span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -283,7 +283,7 @@ four characters.
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstValue.html#GST-STR-FOURCC:CAPS">GST_STR_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;MJPG&quot;</span><span class="gtkdoc opt">);</span></pre></td>
+        <td class="listing_code"><pre class="programlisting">guint32 fourcc <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#GST-STR-FOURCC:CAPS">GST_STR_FOURCC</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;MJPG&quot;</span><span class="gtkdoc opt">);</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -313,7 +313,7 @@ Can be used together with <a class="link" href="gstreamer-GstValue.html#GST-FOUR
     <tbody>
       <tr>
         <td class="listing_lines" align="right"><pre>1</pre></td>
-        <td class="listing_code"><pre class="programlisting"><span class="function">printf</span> <span class="gtkdoc opt">(</span><span class="string">&quot;fourcc: %&quot;</span> GST_FOURCC_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="../gstreamer-1.0/gstreamer-GstValue.html#GST-FOURCC-ARGS:CAPS">GST_FOURCC_ARGS</a></span> <span class="gtkdoc opt">(</span>fcc<span class="gtkdoc opt">));</span></pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="function">printf</span> <span class="gtkdoc opt">(</span><span class="string">&quot;fourcc: %&quot;</span> GST_FOURCC_FORMAT <span class="string">&quot;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#GST-FOURCC-ARGS:CAPS">GST_FOURCC_ARGS</a></span> <span class="gtkdoc opt">(</span>fcc<span class="gtkdoc opt">));</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -2199,7 +2199,7 @@ intersection value. May be NULL if the resulting set if not needed. <span class=
 Determines if intersecting two values will produce a valid result.
 Two values will produce a valid intersection if they have the same
 type, or if there is a method (registered by
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstValue.html#gst-value-register-intersect-func"><code class="function">gst_value_register_intersect_func()</code></a>) to calculate the intersection.
+<code class="function">gst_value_register_intersect_func()</code>) to calculate the intersection.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
index 1462ee89922785c89ad51d0dd7cd75db342031d9..4aab619ba9ebd6a664922cf62aa4213f79f536dc 100644 (file)
@@ -88,7 +88,7 @@ The minor version of GStreamer at compile time:
 <hr>
 <div class="refsect2">
 <a name="GST-VERSION-MICRO:CAPS"></a><h3>GST_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_VERSION_MICRO (0)
+<pre class="programlisting">#define GST_VERSION_MICRO (2)
 </pre>
 <p>
 The micro version of GStreamer at compile time:
index 92c14ec54ea3c7b0be0a4f3ef4dd1cea9be3ec27..a55a1961813a6857a7a8a686a76588b66196dc62 100644 (file)
@@ -71,7 +71,7 @@
     <sub name="Annotation Glossary" link="annotation-glossary.html"/>
   </chapters>
   <functions>
-    <keyword type="" name="Environment variables" link="gst-running.html#idp9674784"/>
+    <keyword type="" name="Environment variables" link="gst-running.html#idp8488400"/>
     <keyword type="function" name="gst_init ()" link="gstreamer-Gst.html#gst-init"/>
     <keyword type="function" name="gst_init_check ()" link="gstreamer-Gst.html#gst-init-check"/>
     <keyword type="function" name="gst_init_get_option_group ()" link="gstreamer-Gst.html#gst-init-get-option-group"/>
     <keyword type="function" name="gst_atomic_queue_peek ()" link="gstreamer-GstAtomicQueue.html#gst-atomic-queue-peek"/>
     <keyword type="function" name="gst_atomic_queue_pop ()" link="gstreamer-GstAtomicQueue.html#gst-atomic-queue-pop"/>
     <keyword type="function" name="gst_atomic_queue_length ()" link="gstreamer-GstAtomicQueue.html#gst-atomic-queue-length"/>
-    <keyword type="" name="Notes" link="GstBin.html#idp9938176"/>
+    <keyword type="" name="Notes" link="GstBin.html#idp11985136"/>
     <keyword type="struct" name="struct GstBin" link="GstBin.html#GstBin-struct"/>
     <keyword type="struct" name="struct GstBinClass" link="GstBin.html#GstBinClass"/>
     <keyword type="function" name="gst_bin_new ()" link="GstBin.html#gst-bin-new"/>
     <keyword type="function" name="gst_mini_object_replace ()" link="gstreamer-GstMiniObject.html#gst-mini-object-replace"/>
     <keyword type="function" name="gst_mini_object_take ()" link="gstreamer-GstMiniObject.html#gst-mini-object-take"/>
     <keyword type="function" name="gst_mini_object_steal ()" link="gstreamer-GstMiniObject.html#gst-mini-object-steal"/>
-    <keyword type="" name="controlled properties" link="GstObject.html#idp27685152"/>
+    <keyword type="" name="controlled properties" link="GstObject.html#idp28871792"/>
     <keyword type="struct" name="struct GstObject" link="GstObject.html#GstObject-struct"/>
     <keyword type="struct" name="struct GstObjectClass" link="GstObject.html#GstObjectClass"/>
     <keyword type="enum" name="enum GstObjectFlags" link="GstObject.html#GstObjectFlags"/>
index 171b87c4c5de112effea144a10716d1862f910e7..d93add7d2b9b8e5a65c9b4c12a1511b8e4e7f486 100644 (file)
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Core Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Core 1.0 (1.0.0)
+      for GStreamer Core 1.0 (1.0.2)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/</a>.
     </p></div>
index 60d7318a453b8fe72bd3ce6d1b268959b8470dc0..4c621b531d375bfcd0df1a00ad217021053b4af9 100644 (file)
@@ -37,7 +37,7 @@ HFILE_GLOB=$(top_srcdir)/libs/gst/*/*.h
 CFILE_GLOB=$(top_srcdir)/libs/gst/*/*.c
 
 # Extra options to pass to gtkdoc-scanobj or gtkdoc-scangobj.
-SCANOBJ_OPTIONS=--type-init-func="g_type_init();gst_init(&argc,&argv)"
+SCANOBJ_OPTIONS=--type-init-func="gst_init(&argc,&argv)"
 
 # Header files to ignore when scanning.
 IGNORE_HFILES = \
index be9c543ea2efa7101885e90ef3da9e81755e5996..7f559259af570bea538b5faaeb70d57fb8e83059 100644 (file)
@@ -101,7 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -322,6 +322,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -358,6 +361,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -446,7 +450,7 @@ HFILE_GLOB = $(top_srcdir)/libs/gst/*/*.h
 CFILE_GLOB = $(top_srcdir)/libs/gst/*/*.c
 
 # Extra options to pass to gtkdoc-scanobj or gtkdoc-scangobj.
-SCANOBJ_OPTIONS = --type-init-func="g_type_init();gst_init(&argc,&argv)"
+SCANOBJ_OPTIONS = --type-init-func="gst_init(&argc,&argv)"
 
 # Header files to ignore when scanning.
 IGNORE_HFILES = \
@@ -750,14 +754,12 @@ upload: $(FORMATS)
        if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
        if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
        \
-       # upload releases to both 0.10.X/ and head/ subdirectories \
-       if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
-         export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
-         echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) mkdir -p $$DIR; \
-         rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
-       fi; \
+       # upload releases to both X.Y/ and head/ subdirectories \
+       export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
+       echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) mkdir -p $$DIR; \
+       rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
        \
        export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
        echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
index 3a0694e14e69a77122e8a98cb0ba888eb3117dcb..642d7f1cdec48155eea6f46dbfcf0a0710876cfe 100644 (file)
@@ -293,6 +293,7 @@ GstBaseTransformClass
 
 gst_base_transform_is_passthrough
 gst_base_transform_set_passthrough
+gst_base_transform_set_prefer_passthrough
 gst_base_transform_is_in_place
 gst_base_transform_set_in_place
 gst_base_transform_is_qos_enabled
index 5573c8ae2bf96c29fc56dad201a10ee29c345594..cf4d62eda60a533d175fb33e32b09282911687dd 100644 (file)
@@ -46,7 +46,7 @@
 <a class="link" href="GstAdapter.html" title="GstAdapter"><span class="returnvalue">GstAdapter</span></a> *        <a class="link" href="GstAdapter.html#gst-adapter-new" title="gst_adapter_new ()">gst_adapter_new</a>                     (<em class="parameter"><code><span class="type">void</span></code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstAdapter.html#gst-adapter-clear" title="gst_adapter_clear ()">gst_adapter_clear</a>                   (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstAdapter.html#gst-adapter-push" title="gst_adapter_push ()">gst_adapter_push</a>                    (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="returnvalue">gconstpointer</span></a>       <a class="link" href="GstAdapter.html#gst-adapter-map" title="gst_adapter_map ()">gst_adapter_map</a>                     (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> size</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstAdapter.html#gst-adapter-unmap" title="gst_adapter_unmap ()">gst_adapter_unmap</a>                   (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);
 <span class="returnvalue">gsize</span>               <a class="link" href="GstAdapter.html#gst-adapter-available-fast" title="gst_adapter_available_fast ()">gst_adapter_available_fast</a>          (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>            <a class="link" href="GstAdapter.html#gst-adapter-take" title="gst_adapter_take ()">gst_adapter_take</a>                    (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstAdapter.html#gst-adapter-take-buffer" title="gst_adapter_take_buffer ()">gst_adapter_take_buffer</a>             (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstAdapter.html#gst-adapter-take-buffer" title="gst_adapter_take_buffer ()">gst_adapter_take_buffer</a>             (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             <a class="link" href="GstAdapter.html#gst-adapter-take-list" title="gst_adapter_take_list ()">gst_adapter_take_list</a>               (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);
-<a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstAdapter.html#gst-adapter-prev-pts" title="gst_adapter_prev_pts ()">gst_adapter_prev_pts</a>                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstAdapter.html#gst-adapter-prev-pts" title="gst_adapter_prev_pts ()">gst_adapter_prev_pts</a>                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);
-<a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstAdapter.html#gst-adapter-prev-dts" title="gst_adapter_prev_dts ()">gst_adapter_prev_dts</a>                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstAdapter.html#gst-adapter-prev-dts" title="gst_adapter_prev_dts ()">gst_adapter_prev_dts</a>                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);
 <span class="returnvalue">gsize</span>               <a class="link" href="GstAdapter.html#gst-adapter-masked-scan-uint32" title="gst_adapter_masked_scan_uint32 ()">gst_adapter_masked_scan_uint32</a>      (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">guint32</span> mask</code></em>,
@@ -154,21 +154,21 @@ in 512-byte chunks could be implemented like this:
   GstFlowReturn ret <span class="gtkdoc opt">=</span> GST_FLOW_OK<span class="gtkdoc opt">;</span>
 
   <span class="gtkdoc slc">// will give the element an extra ref; remember to drop it</span>
-  <span class="keyword">this</span> <span class="gtkdoc opt">=</span> <span class="function">MY_ELEMENT</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-1.0/GstPad.html#gst-pad-get-parent">gst_pad_get_parent</a></span> <span class="gtkdoc opt">(</span>pad<span class="gtkdoc opt">));</span>
+  <span class="keyword">this</span> <span class="gtkdoc opt">=</span> <span class="function">MY_ELEMENT</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-get-parent">gst_pad_get_parent</a></span> <span class="gtkdoc opt">(</span>pad<span class="gtkdoc opt">));</span>
   adapter <span class="gtkdoc opt">=</span> <span class="keyword">this</span><span class="gtkdoc opt">-&gt;</span>adapter<span class="gtkdoc opt">;</span>
 
   <span class="gtkdoc slc">// put buffer into adapter</span>
-  <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-push">gst_adapter_push</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> buffer<span class="gtkdoc opt">);</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-push">gst_adapter_push</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> buffer<span class="gtkdoc opt">);</span>
   <span class="gtkdoc slc">// while we can read out 512 bytes, process them</span>
-  <span class="keyword">while</span> <span class="gtkdoc opt">(</span><span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-available">gst_adapter_available</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">) &gt;=</span> <span class="number">512</span> <span class="gtkdoc opt">&amp;&amp;</span> ret <span class="gtkdoc opt">==</span> GST_FLOW_OK<span class="gtkdoc opt">) {</span>
-    <span class="gtkdoc kwb">const</span> guint8 <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-map">gst_adapter_map</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
+  <span class="keyword">while</span> <span class="gtkdoc opt">(</span><span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-available">gst_adapter_available</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">) &gt;=</span> <span class="number">512</span> <span class="gtkdoc opt">&amp;&amp;</span> ret <span class="gtkdoc opt">==</span> GST_FLOW_OK<span class="gtkdoc opt">) {</span>
+    <span class="gtkdoc kwb">const</span> guint8 <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-map">gst_adapter_map</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
     <span class="gtkdoc slc">// use flowreturn as an error value</span>
     ret <span class="gtkdoc opt">=</span> <span class="function">my_library_foo</span> <span class="gtkdoc opt">(</span>data<span class="gtkdoc opt">);</span>
-    <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-unmap">gst_adapter_unmap</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">);</span>
-    <span class="function"><a href="../gstreamer-libs-1.0/GstAdapter.html#gst-adapter-flush">gst_adapter_flush</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-unmap">gst_adapter_unmap</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-flush">gst_adapter_flush</a></span> <span class="gtkdoc opt">(</span>adapter<span class="gtkdoc opt">,</span> <span class="number">512</span><span class="gtkdoc opt">);</span>
   <span class="gtkdoc opt">}</span>
 
-  <span class="function"><a href="../gstreamer-1.0/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span><span class="keyword">this</span><span class="gtkdoc opt">);</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span><span class="keyword">this</span><span class="gtkdoc opt">);</span>
   <span class="keyword">return</span> ret<span class="gtkdoc opt">;</span>
 <span class="gtkdoc opt">}</span></pre></td>
       </tr>
@@ -186,7 +186,7 @@ is the libvisual element.
 An element using GstAdapter in its sink pad chain function should ensure that
 when the FLUSH_STOP event is received, that any queued data is cleared using
 <a class="link" href="GstAdapter.html#gst-adapter-clear" title="gst_adapter_clear ()"><code class="function">gst_adapter_clear()</code></a>. Data should also be cleared or processed on EOS and
-when changing state from <a href="../gstreamer-1.0/GstElement.html#GST-STATE-PAUSED:CAPS"><span class="type">GST_STATE_PAUSED</span></a> to <a href="../gstreamer-1.0/GstElement.html#GST-STATE-READY:CAPS"><span class="type">GST_STATE_READY</span></a>.
+when changing state from <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><span class="type">GST_STATE_PAUSED</span></a> to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-READY:CAPS"><span class="type">GST_STATE_READY</span></a>.
 </p>
 <p>
 Also check the GST_BUFFER_FLAG_DISCONT flag on the buffer. Some elements might
@@ -195,7 +195,7 @@ need to clear the adapter after a discontinuity.
 <p>
 The adapter will keep track of the timestamps of the buffers
 that were pushed. The last seen timestamp before the current position
-can be queried with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstAdapter.html#gst-adapter-prev-timestamp"><code class="function">gst_adapter_prev_timestamp()</code></a>. This function can
+can be queried with <code class="function">gst_adapter_prev_timestamp()</code>. This function can
 optionally return the amount of bytes between the start of the buffer that
 carried the timestamp and the current adapter position. The distance is
 useful when dealing with, for example, raw audio samples because it allows
@@ -219,7 +219,7 @@ serialized via the pad's STREAM_LOCK.
 </p>
 <p>
 Note that <a class="link" href="GstAdapter.html#gst-adapter-push" title="gst_adapter_push ()"><code class="function">gst_adapter_push()</code></a> takes ownership of the buffer passed. Use
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-ref"><code class="function">gst_buffer_ref()</code></a> before pushing it into the adapter if you still want to
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-ref"><code class="function">gst_buffer_ref()</code></a> before pushing it into the adapter if you still want to
 access the buffer later. The adapter will never modify the data in the
 buffer pushed in it.
 </p>
@@ -272,7 +272,7 @@ Removes all buffers from <em class="parameter"><code>adapter</code></em>.
 <div class="refsect2">
 <a name="gst-adapter-push"></a><h3>gst_adapter_push ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_adapter_push                    (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>);</pre>
 <p>
 Adds the data from <em class="parameter"><code>buf</code></em> to the data stored inside <em class="parameter"><code>adapter</code></em> and takes
 ownership of the buffer.
@@ -287,7 +287,7 @@ ownership of the buffer.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> to add to queue in the adapter. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> to add to queue in the adapter. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -303,13 +303,13 @@ Gets the first <em class="parameter"><code>size</code></em> bytes stored in the
 valid until the next function is called on the adapter.
 </p>
 <p>
-Note that setting the returned pointer as the data of a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> is
+Note that setting the returned pointer as the data of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> is
 incorrect for general-purpose plugins. The reason is that if a downstream
 element stores the buffer so that it has access to it outside of the bounds
 of its chain function, the buffer will have an invalid data pointer after
 your element flushes the bytes. In that case you should use
 <a class="link" href="GstAdapter.html#gst-adapter-take" title="gst_adapter_take ()"><code class="function">gst_adapter_take()</code></a>, which returns a freshly-allocated buffer that you can set
-as <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> malloc_data or the potentially more performant
+as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> malloc_data or the potentially more performant
 <a class="link" href="GstAdapter.html#gst-adapter-take-buffer" title="gst_adapter_take_buffer ()"><code class="function">gst_adapter_take_buffer()</code></a>.
 </p>
 <p>
@@ -506,17 +506,17 @@ Free-function: g_free
 <hr>
 <div class="refsect2">
 <a name="gst-adapter-take-buffer"></a><h3>gst_adapter_take_buffer ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_adapter_take_buffer             (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_adapter_take_buffer             (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> nbytes</code></em>);</pre>
 <p>
-Returns a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> bytes of the
+Returns a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> bytes of the
 <em class="parameter"><code>adapter</code></em>. The returned bytes will be flushed from the adapter.
 This function is potentially more performant than <a class="link" href="GstAdapter.html#gst-adapter-take" title="gst_adapter_take ()"><code class="function">gst_adapter_take()</code></a>
 since it can reuse the memory in pushed buffers by subbuffering
 or merging.
 </p>
 <p>
-Caller owns returned value. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> after usage.
+Caller owns returned value. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> after usage.
 </p>
 <p>
 Free-function: gst_buffer_unref
@@ -535,7 +535,7 @@ Free-function: gst_buffer_unref
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> of
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> containing the first <em class="parameter"><code>nbytes</code></em> of
 the adapter, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if <em class="parameter"><code>nbytes</code></em> bytes are not available. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
@@ -554,7 +554,7 @@ When the caller can deal with individual buffers, this function is more
 performant because no memory should be copied.
 </p>
 <p>
-Caller owns returned list and contained buffers. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> each
+Caller owns returned list and contained buffers. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a> each
 buffer in the list before freeing the list after usage.
 </p>
 <div class="variablelist"><table border="0">
@@ -582,7 +582,7 @@ are not available. <span class="annotation">[<acronym title="Generics and defini
 <hr>
 <div class="refsect2">
 <a name="gst-adapter-prev-pts"></a><h3>gst_adapter_prev_pts ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_adapter_prev_pts                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_adapter_prev_pts                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
 <p>
 Get the pts that was before the current byte in the adapter. When
@@ -618,7 +618,7 @@ and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.
 <hr>
 <div class="refsect2">
 <a name="gst-adapter-prev-dts"></a><h3>gst_adapter_prev_dts ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_adapter_prev_dts                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_adapter_prev_dts                (<em class="parameter"><code><a class="link" href="GstAdapter.html" title="GstAdapter"><span class="type">GstAdapter</span></a> *adapter</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> *distance</code></em>);</pre>
 <p>
 Get the dts that was before the current byte in the adapter. When
index 69d24512fdac9168fc136bae53e4e638062af89e..5ff9147f5c762a362187df6d19d8cce851d178d2 100644 (file)
@@ -35,7 +35,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="GstBaseSink.top_of_page"></a>GstBaseSink</span></h2>
-<p>GstBaseSink</p>
+<p>GstBaseSink — Base class for sink elements</p>
 </td>
 <td valign="top" align="right"></td>
 </tr></table></div>
@@ -49,15 +49,15 @@ struct              <a class="link" href="GstBaseSink.html#GstBaseSinkClass" tit
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseSink.html#gst-base-sink-query-latency" title="gst_base_sink_query_latency ()">gst_base_sink_query_latency</a>         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *upstream_live</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
-<a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstBaseSink.html#gst-base-sink-get-latency" title="gst_base_sink_get_latency ()">gst_base_sink_get_latency</a>           (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="GstBaseSink.html#gst-base-sink-do-preroll" title="gst_base_sink_do_preroll ()">gst_base_sink_do_preroll</a>            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="GstBaseSink.html#gst-base-sink-wait-preroll" title="gst_base_sink_wait_preroll ()">gst_base_sink_wait_preroll</a>          (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
-<a href="../gstreamer-1.0/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a>      <a class="link" href="GstBaseSink.html#gst-base-sink-wait-clock" title="gst_base_sink_wait_clock ()">gst_base_sink_wait_clock</a>            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstBaseSink.html#gst-base-sink-get-latency" title="gst_base_sink_get_latency ()">gst_base_sink_get_latency</a>           (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="GstBaseSink.html#gst-base-sink-do-preroll" title="gst_base_sink_do_preroll ()">gst_base_sink_do_preroll</a>            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="GstBaseSink.html#gst-base-sink-wait-preroll" title="gst_base_sink_wait_preroll ()">gst_base_sink_wait_preroll</a>          (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a>      <a class="link" href="GstBaseSink.html#gst-base-sink-wait-clock" title="gst_base_sink_wait_clock ()">gst_base_sink_wait_clock</a>            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSink.html#gst-base-sink-set-sync" title="gst_base_sink_set_sync ()">gst_base_sink_set_sync</a>              (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> sync</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseSink.html#gst-base-sink-get-sync" title="gst_base_sink_get_sync ()">gst_base_sink_get_sync</a>              (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
@@ -71,12 +71,12 @@ struct              <a class="link" href="GstBaseSink.html#GstBaseSinkClass" tit
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseSink.html#gst-base-sink-is-async-enabled" title="gst_base_sink_is_async_enabled ()">gst_base_sink_is_async_enabled</a>      (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSink.html#gst-base-sink-set-ts-offset" title="gst_base_sink_set_ts_offset ()">gst_base_sink_set_ts_offset</a>         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);
-<a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a>    <a class="link" href="GstBaseSink.html#gst-base-sink-get-ts-offset" title="gst_base_sink_get_ts_offset ()">gst_base_sink_get_ts_offset</a>         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a>    <a class="link" href="GstBaseSink.html#gst-base-sink-get-ts-offset" title="gst_base_sink_get_ts_offset ()">gst_base_sink_get_ts_offset</a>         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSink.html#gst-base-sink-set-render-delay" title="gst_base_sink_set_render_delay ()">gst_base_sink_set_render_delay</a>      (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);
-<a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstBaseSink.html#gst-base-sink-get-render-delay" title="gst_base_sink_get_render_delay ()">gst_base_sink_get_render_delay</a>      (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> *         <a class="link" href="GstBaseSink.html#gst-base-sink-get-last-sample" title="gst_base_sink_get_last_sample ()">gst_base_sink_get_last_sample</a>       (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        <a class="link" href="GstBaseSink.html#gst-base-sink-get-render-delay" title="gst_base_sink_get_render_delay ()">gst_base_sink_get_render_delay</a>      (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> *         <a class="link" href="GstBaseSink.html#gst-base-sink-get-last-sample" title="gst_base_sink_get_last_sample ()">gst_base_sink_get_last_sample</a>       (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSink.html#gst-base-sink-set-blocksize" title="gst_base_sink_set_blocksize ()">gst_base_sink_set_blocksize</a>         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> blocksize</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GstBaseSink.html#gst-base-sink-get-blocksize" title="gst_base_sink_get_blocksize ()">gst_base_sink_get_blocksize</a>         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);
@@ -99,8 +99,8 @@ struct              <a class="link" href="GstBaseSink.html#GstBaseSinkClass" tit
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstBaseSink
 </pre>
 </div>
@@ -110,7 +110,7 @@ struct              <a class="link" href="GstBaseSink.html#GstBaseSinkClass" tit
   "<a class="link" href="GstBaseSink.html#GstBaseSink--async" title='The "async" property'>async</a>"                    <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="GstBaseSink.html#GstBaseSink--blocksize" title='The "blocksize" property'>blocksize</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
   "<a class="link" href="GstBaseSink.html#GstBaseSink--enable-last-sample" title='The "enable-last-sample" property'>enable-last-sample</a>"       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
-  "<a class="link" href="GstBaseSink.html#GstBaseSink--last-sample" title='The "last-sample" property'>last-sample</a>"              <a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>*            : Read
+  "<a class="link" href="GstBaseSink.html#GstBaseSink--last-sample" title='The "last-sample" property'>last-sample</a>"              <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>*            : Read
   "<a class="link" href="GstBaseSink.html#GstBaseSink--max-lateness" title='The "max-lateness" property'>max-lateness</a>"             <span class="type">gint64</span>                : Read / Write
   "<a class="link" href="GstBaseSink.html#GstBaseSink--qos" title='The "qos" property'>qos</a>"                      <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="GstBaseSink.html#GstBaseSink--render-delay" title='The "render-delay" property'>render-delay</a>"             <span class="type">guint64</span>               : Read / Write
@@ -121,6 +121,166 @@ struct              <a class="link" href="GstBaseSink.html#GstBaseSinkClass" tit
 </div>
 <div class="refsect1">
 <a name="GstBaseSink.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> is the base class for sink elements in GStreamer, such as
+xvimagesink or filesink. It is a layer on top of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> that provides a
+simplified interface to plugin writers. <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> handles many details
+for you, for example: preroll, clock synchronization, state changes,
+activation in push or pull mode, and queries.
+</p>
+<p>
+In most cases, when writing sink elements, there is no need to implement
+class methods from <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> or to set functions on pads, because the
+<a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> infrastructure should be sufficient.
+</p>
+<p>
+<a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> provides support for exactly one sink pad, which should be
+named "sink". A sink implementation (subclass of <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a>) should
+install a pad template in its class_init function, like so:
+</p>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16</pre></td>
+        <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
+<span class="function">my_element_class_init</span> <span class="gtkdoc opt">(</span>GstMyElementClass <span class="gtkdoc opt">*</span>klass<span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">{</span>
+  GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
+
+  <span class="gtkdoc slc">// sinktemplate should be a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate">GstStaticPadTemplate</a> with direction</span>
+  <span class="gtkdoc slc">// <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-PAD-SINK:CAPS">GST_PAD_SINK</a> and name &quot;sink&quot;</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
+      <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>sinktemplate<span class="gtkdoc opt">));</span>
+
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-set-static-metadata">gst_element_class_set_static_metadata</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
+      <span class="string">&quot;Sink name&quot;</span><span class="gtkdoc opt">,</span>
+      <span class="string">&quot;Sink&quot;</span><span class="gtkdoc opt">,</span>
+      <span class="string">&quot;My Sink element&quot;</span><span class="gtkdoc opt">,</span>
+      <span class="string">&quot;The author &lt;my.sink&#64;my.email&gt;&quot;</span><span class="gtkdoc opt">);</span>
+<span class="gtkdoc opt">}</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p>
+</p>
+<p>
+<a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will handle the prerolling correctly. This means that it will
+return <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-CHANGE-ASYNC:CAPS"><span class="type">GST_STATE_CHANGE_ASYNC</span></a> from a state change to PAUSED until the first
+buffer arrives in this element. The base class will call the
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.preroll"><code class="function">GstBaseSinkClass.preroll()</code></a> vmethod with this preroll buffer and will then
+commit the state change to the next asynchronously pending state.
+</p>
+<p>
+When the element is set to PLAYING, <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will synchronise on the
+clock using the times returned from <a class="link" href="GstBaseSink.html#GstBaseSinkClass.get-times"><code class="function">GstBaseSinkClass.get_times()</code></a>. If this
+function returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a> for the start time, no synchronisation
+will be done. Synchronisation can be disabled entirely by setting the object
+<a class="link" href="GstBaseSink.html#GstBaseSink--sync" title='The "sync" property'><span class="type">"sync"</span></a> property to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.
+</p>
+<p>
+After synchronisation the virtual method <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> will be
+called. Subclasses should minimally implement this method.
+</p>
+<p>
+Subclasses that synchronise on the clock in the <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a>
+method are supported as well. These classes typically receive a buffer in
+the render method and can then potentially block on the clock while
+rendering. A typical example is an audiosink.
+These subclasses can use <a class="link" href="GstBaseSink.html#gst-base-sink-wait-preroll" title="gst_base_sink_wait_preroll ()"><code class="function">gst_base_sink_wait_preroll()</code></a> to perform the
+blocking wait.
+</p>
+<p>
+Upon receiving the EOS event in the PLAYING state, <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will wait
+for the clock to reach the time indicated by the stop time of the last
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.get-times"><code class="function">GstBaseSinkClass.get_times()</code></a> call before posting an EOS message. When the
+element receives EOS in PAUSED, preroll completes, the event is queued and an
+EOS message is posted when going to PLAYING.
+</p>
+<p>
+<a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will internally use the <span class="type">GST_EVENT_NEWSEGMENT</span> events to schedule
+synchronisation and clipping of buffers. Buffers that fall completely outside
+of the current segment are dropped. Buffers that fall partially in the
+segment are rendered (and prerolled). Subclasses should do any subbuffer
+clipping themselves when needed.
+</p>
+<p>
+<a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> will by default report the current playback position in
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><span class="type">GST_FORMAT_TIME</span></a> based on the current clock time and segment information.
+If no clock has been set on the element, the query will be forwarded
+upstream.
+</p>
+<p>
+The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.set-caps"><code class="function">GstBaseSinkClass.set_caps()</code></a> function will be called when the subclass
+should configure itself to process a specific media type.
+</p>
+<p>
+The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.start"><code class="function">GstBaseSinkClass.start()</code></a> and <a class="link" href="GstBaseSink.html#GstBaseSinkClass.stop"><code class="function">GstBaseSinkClass.stop()</code></a> virtual methods
+will be called when resources should be allocated. Any 
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.preroll"><code class="function">GstBaseSinkClass.preroll()</code></a>, <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> and
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.set-caps"><code class="function">GstBaseSinkClass.set_caps()</code></a> function will be called between the
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.start"><code class="function">GstBaseSinkClass.start()</code></a> and <a class="link" href="GstBaseSink.html#GstBaseSinkClass.stop"><code class="function">GstBaseSinkClass.stop()</code></a> calls.
+</p>
+<p>
+The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.event"><code class="function">GstBaseSinkClass.event()</code></a> virtual method will be called when an event is
+received by <a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a>. Normally this method should only be overriden by
+very specific elements (such as file sinks) which need to handle the
+newsegment event specially.
+</p>
+<p>
+The <a class="link" href="GstBaseSink.html#GstBaseSinkClass.unlock"><code class="function">GstBaseSinkClass.unlock()</code></a> method is called when the elements should
+unblock any blocking operations they perform in the
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> method. This is mostly useful when the
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> method performs a blocking write on a file
+descriptor, for example.
+</p>
+<p>
+The <a class="link" href="GstBaseSink.html#GstBaseSink--max-lateness" title='The "max-lateness" property'><span class="type">"max-lateness"</span></a> property affects how the sink deals with
+buffers that arrive too late in the sink. A buffer arrives too late in the
+sink when the presentation time (as a combination of the last segment, buffer
+timestamp and element base_time) plus the duration is before the current
+time of the clock.
+If the frame is later than max-lateness, the sink will drop the buffer
+without calling the render method.
+This feature is disabled if sync is disabled, the
+<a class="link" href="GstBaseSink.html#GstBaseSinkClass.get-times"><code class="function">GstBaseSinkClass.get_times()</code></a> method does not return a valid start time or
+max-lateness is set to -1 (the default).
+Subclasses can use <a class="link" href="GstBaseSink.html#gst-base-sink-set-max-lateness" title="gst_base_sink_set_max_lateness ()"><code class="function">gst_base_sink_set_max_lateness()</code></a> to configure the
+max-lateness value.
+</p>
+<p>
+The <a class="link" href="GstBaseSink.html#GstBaseSink--qos" title='The "qos" property'><span class="type">"qos"</span></a> property will enable the quality-of-service features of
+the basesink which gather statistics about the real-time performance of the
+clock synchronisation. For each buffer received in the sink, statistics are
+gathered and a QOS event is sent upstream with these numbers. This
+information can then be used by upstream elements to reduce their processing
+rate, for example.
+</p>
+<p>
+The <a class="link" href="GstBaseSink.html#GstBaseSink--async" title='The "async" property'><span class="type">"async"</span></a> property can be used to instruct the sink to never
+perform an ASYNC state change. This feature is mostly usable when dealing
+with non-synchronized streams or sparse streams.
+</p>
+<p>
+Last reviewed on 2007-08-29 (0.10.15)
+</p>
 </div>
 <div class="refsect1">
 <a name="GstBaseSink.details"></a><h2>Details</h2>
@@ -194,7 +354,7 @@ output/present buffers.
 <col align="left" valign="top">
 <tbody>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSinkClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSinkClass.parent-class"></a>parent_class</code></em>;</span></p></td>
 <td>Element parent class</td>
 </tr>
 <tr>
@@ -247,7 +407,7 @@ any state they set during <code class="function">unlock()</code>, such as cleari
 </tr>
 <tr>
 <td><p><span class="term"><em class="structfield"><code><a name="GstBaseSinkClass.query"></a>query</code></em> ()</span></p></td>
-<td>perform a <a href="../gstreamer-1.0/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> on the element.</td>
+<td>perform a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstQuery.html#GstQuery"><span class="type">GstQuery</span></a> on the element.</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="structfield"><code><a name="GstBaseSinkClass.event"></a>event</code></em> ()</span></p></td>
@@ -292,8 +452,8 @@ buffers.</td>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_sink_query_latency         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *upstream_live</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
 <p>
 Query the sink for the latency parameters. The latency will be queried from
 the upstream elements. <em class="parameter"><code>live</code></em> will be TRUE if <em class="parameter"><code>sink</code></em> is configured to
@@ -345,7 +505,7 @@ This function is mostly used by subclasses.
 <hr>
 <div class="refsect2">
 <a name="gst-base-sink-get-latency"></a><h3>gst_base_sink_get_latency ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_base_sink_get_latency           (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_base_sink_get_latency           (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
 <p>
 Get the currently configured latency.
 </p>
@@ -366,8 +526,8 @@ Get the currently configured latency.
 <hr>
 <div class="refsect2">
 <a name="gst-base-sink-do-preroll"></a><h3>gst_base_sink_do_preroll ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_sink_do_preroll            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_sink_do_preroll            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> *obj</code></em>);</pre>
 <p>
 If the <em class="parameter"><code>sink</code></em> spawns its own thread for pulling buffers from upstream it
 should call this method after it has pulled a buffer. If the element needed
@@ -392,7 +552,7 @@ This function should be called with the PREROLL_LOCK held.
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
 continue. Any other return value should be returned from the render vmethod.</td>
 </tr>
 </tbody>
@@ -401,7 +561,7 @@ continue. Any other return value should be returned from the render vmethod.</td
 <hr>
 <div class="refsect2">
 <a name="gst-base-sink-wait-preroll"></a><h3>gst_base_sink_wait_preroll ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_sink_wait_preroll          (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_sink_wait_preroll          (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
 <p>
 If the <a class="link" href="GstBaseSink.html#GstBaseSinkClass.render"><code class="function">GstBaseSinkClass.render()</code></a> method performs its own synchronisation
 against the clock it must unblock when going from PLAYING to the PAUSED state
@@ -409,9 +569,9 @@ and call this method before continuing to render the remaining data.
 </p>
 <p>
 This function will block until a state change to PLAYING happens (in which
-case this function returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
+case this function returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
 to a state change to READY or a FLUSH event (in which case this function
-returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
+returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
 </p>
 <p>
 This function should only be called with the PREROLL_LOCK held, like in the
@@ -427,7 +587,7 @@ render function.
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if the preroll completed and processing can
 continue. Any other return value should be returned from the render vmethod.</td>
 </tr>
 </tbody>
@@ -436,17 +596,17 @@ continue. Any other return value should be returned from the render vmethod.</td
 <hr>
 <div class="refsect2">
 <a name="gst-base-sink-wait-clock"></a><h3>gst_base_sink_wait_clock ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a>      gst_base_sink_wait_clock            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockReturn"><span class="returnvalue">GstClockReturn</span></a>      gst_base_sink_wait_clock            (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> time</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *jitter</code></em>);</pre>
 <p>
 This function will block until <em class="parameter"><code>time</code></em> is reached. It is usually called by
 subclasses that use their own internal synchronisation.
 </p>
 <p>
-If <em class="parameter"><code>time</code></em> is not valid, no sycnhronisation is done and <a href="../gstreamer-1.0/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is
+If <em class="parameter"><code>time</code></em> is not valid, no sycnhronisation is done and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is
 returned. Likewise, if synchronisation is disabled in the element or there
-is no clock, no synchronisation is done and <a href="../gstreamer-1.0/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is returned.
+is no clock, no synchronisation is done and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-BADTIME:CAPS"><span class="type">GST_CLOCK_BADTIME</span></a> is returned.
 </p>
 <p>
 This function should only be called with the PREROLL_LOCK held, like when
@@ -477,7 +637,7 @@ sink.
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td><a href="../gstreamer-1.0/GstClock.html#GstClockReturn"><span class="type">GstClockReturn</span></a></td>
+<td><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockReturn"><span class="type">GstClockReturn</span></a></td>
 </tr>
 </tbody>
 </table></div>
@@ -675,7 +835,7 @@ changes.</td>
 <div class="refsect2">
 <a name="gst-base-sink-set-ts-offset"></a><h3>gst_base_sink_set_ts_offset ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_sink_set_ts_offset         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> offset</code></em>);</pre>
 <p>
 Adjust the synchronisation of <em class="parameter"><code>sink</code></em> with <em class="parameter"><code>offset</code></em>. A negative value will
 render buffers earlier than their timestamp. A positive value will delay
@@ -699,7 +859,7 @@ buffers.
 <hr>
 <div class="refsect2">
 <a name="gst-base-sink-get-ts-offset"></a><h3>gst_base_sink_get_ts_offset ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a>    gst_base_sink_get_ts_offset         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="returnvalue">GstClockTimeDiff</span></a>    gst_base_sink_get_ts_offset         (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
 <p>
 Get the synchronisation offset of <em class="parameter"><code>sink</code></em>.
 </p>
@@ -721,7 +881,7 @@ Get the synchronisation offset of <em class="parameter"><code>sink</code></em>.
 <div class="refsect2">
 <a name="gst-base-sink-set-render-delay"></a><h3>gst_base_sink_set_render_delay ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_sink_set_render_delay      (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> delay</code></em>);</pre>
 <p>
 Set the render delay in <em class="parameter"><code>sink</code></em> to <em class="parameter"><code>delay</code></em>. The render delay is the time
 between actual rendering of a buffer and its synchronisation time. Some
@@ -753,7 +913,7 @@ This function is usually called by subclasses.
 <hr>
 <div class="refsect2">
 <a name="gst-base-sink-get-render-delay"></a><h3>gst_base_sink_get_render_delay ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_base_sink_get_render_delay      (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="returnvalue">GstClockTime</span></a>        gst_base_sink_get_render_delay      (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
 <p>
 Get the render delay of <em class="parameter"><code>sink</code></em>. see <a class="link" href="GstBaseSink.html#gst-base-sink-set-render-delay" title="gst_base_sink_set_render_delay ()"><code class="function">gst_base_sink_set_render_delay()</code></a> for more
 information about the render delay.
@@ -776,13 +936,13 @@ information about the render delay.
 <hr>
 <div class="refsect2">
 <a name="gst-base-sink-get-last-sample"></a><h3>gst_base_sink_get_last_sample ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> *         gst_base_sink_get_last_sample       (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="returnvalue">GstSample</span></a> *         gst_base_sink_get_last_sample       (<em class="parameter"><code><a class="link" href="GstBaseSink.html" title="GstBaseSink"><span class="type">GstBaseSink</span></a> *sink</code></em>);</pre>
 <p>
 Get the last sample that arrived in the sink and was used for preroll or for
 rendering. This property can be used to generate thumbnails.
 </p>
 <p>
-The <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> on the sample can be used to determine the type of the buffer.
+The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> on the sample can be used to determine the type of the buffer.
 </p>
 <p>
 Free-function: gst_sample_unref
@@ -796,7 +956,7 @@ Free-function: gst_sample_unref
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>. <a href="../gstreamer-1.0/gstreamer-GstSample.html#gst-sample-unref"><code class="function">gst_sample_unref()</code></a> after usage.
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#gst-sample-unref"><code class="function">gst_sample_unref()</code></a> after usage.
 This function returns NULL when no buffer has arrived in the sink yet
 or when the sink is not in PAUSED or PLAYING. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
@@ -905,7 +1065,7 @@ will render.
 <pre class="programlisting">#define GST_BASE_SINK_PAD(obj)          (GST_BASE_SINK_CAST (obj)-&gt;sinkpad)
 </pre>
 <p>
-Gives the pointer to the <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+Gives the pointer to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -1000,7 +1160,7 @@ as possible, eg. if you're using a buffer pool.
 <hr>
 <div class="refsect2">
 <a name="GstBaseSink--last-sample"></a><h3>The <code class="literal">"last-sample"</code> property</h3>
-<pre class="programlisting">  "last-sample"              <a href="../gstreamer-1.0/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>*            : Read</pre>
+<pre class="programlisting">  "last-sample"              <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html#GstSample"><span class="type">GstSample</span></a>*            : Read</pre>
 <p>
 The last buffer that arrived in the sink and was used for preroll or for
 rendering. This property can be used to generate thumbnails. This property
@@ -1063,6 +1223,10 @@ used to fix synchronisation in bad files.
 <p>Default value: 0</p>
 </div>
 </div>
+<div class="refsect1">
+<a name="GstBaseSink.see-also"></a><h2>See Also</h2>
+<a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a>, <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a>
+</div>
 </div>
 <div class="footer">
 <hr>
index b625884b80b98a754fad1025bbed6785ef36a656..b572cb3aeddf8b57eb0843d0371b0bd509c83cad 100644 (file)
 struct              <a class="link" href="GstBaseSrc.html#GstBaseSrc-struct" title="struct GstBaseSrc">GstBaseSrc</a>;
 struct              <a class="link" href="GstBaseSrc.html#GstBaseSrcClass" title="struct GstBaseSrcClass">GstBaseSrcClass</a>;
 enum                <a class="link" href="GstBaseSrc.html#GstBaseSrcFlags" title="enum GstBaseSrcFlags">GstBaseSrcFlags</a>;
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="GstBaseSrc.html#gst-base-src-wait-playing" title="gst_base_src_wait_playing ()">gst_base_src_wait_playing</a>           (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="GstBaseSrc.html#gst-base-src-wait-playing" title="gst_base_src_wait_playing ()">gst_base_src_wait_playing</a>           (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseSrc.html#gst-base-src-is-live" title="gst_base_src_is_live ()">gst_base_src_is_live</a>                (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSrc.html#gst-base-src-set-live" title="gst_base_src_set_live ()">gst_base_src_set_live</a>               (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> live</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSrc.html#gst-base-src-set-format" title="gst_base_src_set_format ()">gst_base_src_set_format</a>             (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseSrc.html#gst-base-src-query-latency" title="gst_base_src_query_latency ()">gst_base_src_query_latency</a>          (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GstBaseSrc.html#gst-base-src-get-blocksize" title="gst_base_src_get_blocksize ()">gst_base_src_get_blocksize</a>          (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSrc.html#gst-base-src-set-blocksize" title="gst_base_src_set_blocksize ()">gst_base_src_set_blocksize</a>          (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> blocksize</code></em>);
@@ -68,13 +68,13 @@ enum                <a class="link" href="GstBaseSrc.html#GstBaseSrcFlags" title
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseSrc.html#gst-base-src-new-seamless-segment" title="gst_base_src_new_seamless_segment ()">gst_base_src_new_seamless_segment</a>   (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> start</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> stop</code></em>,
-                                                         <em class="parameter"><code><span class="type">gint64</span> position</code></em>);
+                                                         <em class="parameter"><code><span class="type">gint64</span> time</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseSrc.html#gst-base-src-set-caps" title="gst_base_src_set_caps ()">gst_base_src_set_caps</a>               (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseSrc.html#gst-base-src-get-allocator" title="gst_base_src_get_allocator ()">gst_base_src_get_allocator</a>          (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     <a class="link" href="GstBaseSrc.html#gst-base-src-get-buffer-pool" title="gst_base_src_get_buffer_pool ()">gst_base_src_get_buffer_pool</a>        (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     <a class="link" href="GstBaseSrc.html#gst-base-src-get-buffer-pool" title="gst_base_src_get_buffer_pool ()">gst_base_src_get_buffer_pool</a>        (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);
 #define             <a class="link" href="GstBaseSrc.html#GST-BASE-SRC-PAD:CAPS" title="GST_BASE_SRC_PAD()">GST_BASE_SRC_PAD</a>                    (obj)
 </pre>
 </div>
@@ -83,8 +83,8 @@ enum                <a class="link" href="GstBaseSrc.html#GstBaseSrcFlags" title
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstBaseSrc
                            +----<a class="link" href="GstPushSrc.html" title="GstPushSrc">GstPushSrc</a>
 </pre>
@@ -112,17 +112,17 @@ types of sources are supported:
 <p>
 </p>
 <p>
-The source can be configured to operate in any <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> with the
+The source can be configured to operate in any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> with the
 <a class="link" href="GstBaseSrc.html#gst-base-src-set-format" title="gst_base_src_set_format ()"><code class="function">gst_base_src_set_format()</code></a> method. The currently set format determines
-the format of the internal <a href="../gstreamer-1.0/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> and any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GST-EVENT-NEWSEGMENT:CAPS"><span class="type">GST_EVENT_NEWSEGMENT</span></a>
-events. The default format for <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> is <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>.
+the format of the internal <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> and any <span class="type">GST_EVENT_NEWSEGMENT</span>
+events. The default format for <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> is <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>.
 </p>
 <p>
 <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> always supports push mode scheduling. If the following
 conditions are met, it also supports pull mode scheduling:
 </p>
 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem"><p>The format is set to <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a> (default).</p></li>
+<li class="listitem"><p>The format is set to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a> (default).</p></li>
 <li class="listitem"><p><a class="link" href="GstBaseSrc.html#GstBaseSrcClass.is-seekable"><code class="function">GstBaseSrcClass.is_seekable()</code></a> returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p></li>
 </ul></div>
 <p>
@@ -131,7 +131,7 @@ conditions are met, it also supports pull mode scheduling:
 If all the conditions are met for operating in pull mode, <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> is
 automatically seekable in push mode as well. The following conditions must
 be met to make the element seekable in push mode when the format is not
-<a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>:
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-BYTES:CAPS"><span class="type">GST_FORMAT_BYTES</span></a>:
 </p>
 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
 <li class="listitem"><p>
@@ -168,7 +168,7 @@ A live source does not produce data in the PAUSED state. This means that the
 <a class="link" href="GstBaseSrc.html#GstBaseSrcClass.create"><code class="function">GstBaseSrcClass.create()</code></a> method will not be called in PAUSED but only in
 PLAYING. To signal the pipeline that the element will not produce data, the
 return value from the READY to PAUSED state will be
-<a href="../gstreamer-1.0/GstElement.html#GST-STATE-CHANGE-NO-PREROLL:CAPS"><span class="type">GST_STATE_CHANGE_NO_PREROLL</span></a>.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-CHANGE-NO-PREROLL:CAPS"><span class="type">GST_STATE_CHANGE_NO_PREROLL</span></a>.
 </p>
 <p>
 A typical live source will timestamp the buffers it creates with the
@@ -218,17 +218,25 @@ should install a pad template in its class_init function, like so:
 8
 9
 10
-11</pre></td>
+11
+12
+13
+14
+15</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span>
 <span class="function">my_element_class_init</span> <span class="gtkdoc opt">(</span>GstMyElementClass <span class="gtkdoc opt">*</span>klass<span class="gtkdoc opt">)</span>
 <span class="gtkdoc opt">{</span>
   GstElementClass <span class="gtkdoc opt">*</span>gstelement_class <span class="gtkdoc opt">=</span> <span class="function">GST_ELEMENT_CLASS</span> <span class="gtkdoc opt">(</span>klass<span class="gtkdoc opt">);</span>
-  <span class="gtkdoc slc">// srctemplate should be a <a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate">GstStaticPadTemplate</a> with direction</span>
-  <span class="gtkdoc slc">// <a href="../gstreamer-1.0/GstPad.html#GST-PAD-SRC:CAPS">GST_PAD_SRC</a> and name &quot;src&quot;</span>
-  <span class="function"><a href="../gstreamer-1.0/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
-      <span class="function"><a href="../gstreamer-1.0/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>srctemplate<span class="gtkdoc opt">));</span>
-  <span class="gtkdoc slc">// see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#GstElementDetails">GstElementDetails</a></span>
-  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-set-details">gst_element_class_set_details</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">, &amp;</span>details<span class="gtkdoc opt">);</span>
+  <span class="gtkdoc slc">// srctemplate should be a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate">GstStaticPadTemplate</a> with direction</span>
+  <span class="gtkdoc slc">// <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-PAD-SRC:CAPS">GST_PAD_SRC</a> and name &quot;src&quot;</span>
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-add-pad-template">gst_element_class_add_pad_template</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
+      <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#gst-static-pad-template-get">gst_static_pad_template_get</a></span> <span class="gtkdoc opt">(&amp;</span>srctemplate<span class="gtkdoc opt">));</span>
+
+  <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-class-set-static-metadata">gst_element_class_set_static_metadata</a></span> <span class="gtkdoc opt">(</span>gstelement_class<span class="gtkdoc opt">,</span>
+     <span class="string">&quot;Source name&quot;</span><span class="gtkdoc opt">,</span>
+     <span class="string">&quot;Source&quot;</span><span class="gtkdoc opt">,</span>
+     <span class="string">&quot;My Source element&quot;</span><span class="gtkdoc opt">,</span>
+     <span class="string">&quot;The author &lt;my.sink&#64;my.email&gt;&quot;</span><span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">}</span></pre></td>
       </tr>
     </tbody>
@@ -240,7 +248,7 @@ should install a pad template in its class_init function, like so:
 <p>
 </p>
 <div class="refsect2">
-<a name="idp5184896"></a><h3>Controlled shutdown of live sources in applications</h3>
+<a name="idp6837152"></a><h3>Controlled shutdown of live sources in applications</h3>
 <p>
 Applications that record from a live source may want to stop recording
 in a controlled way, so that the recording is stopped, but the data
@@ -254,8 +262,8 @@ been processed and the pipeline can safely be stopped.
 <p>
 An application may send an EOS event to a source element to make it
 perform the EOS logic (send EOS event downstream or post a
-<a href="../gstreamer-1.0/gstreamer-GstMessage.html#GST-MESSAGE-SEGMENT-DONE:CAPS"><span class="type">GST_MESSAGE_SEGMENT_DONE</span></a> on the bus). This can typically be done
-with the <a href="../gstreamer-1.0/GstElement.html#gst-element-send-event"><code class="function">gst_element_send_event()</code></a> function on the element or its parent bin.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GST-MESSAGE-SEGMENT-DONE:CAPS"><span class="type">GST_MESSAGE_SEGMENT_DONE</span></a> on the bus). This can typically be done
+with the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-send-event"><code class="function">gst_element_send_event()</code></a> function on the element or its parent bin.
 </p>
 <p>
 After the EOS has been sent to the element, the application should wait for
@@ -354,7 +362,7 @@ buffers.
 <col align="left" valign="top">
 <tbody>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSrcClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseSrcClass.parent-class"></a>parent_class</code></em>;</span></p></td>
 <td>Element parent class</td>
 </tr>
 <tr>
@@ -470,7 +478,7 @@ passed buffer is guaranteed to hold the requested amount of bytes.</td>
 } GstBaseSrcFlags;
 </pre>
 <p>
-The <a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> flags that a basesrc element may have.
+The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> flags that a basesrc element may have.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -496,7 +504,7 @@ The <a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</sp
 <hr>
 <div class="refsect2">
 <a name="gst-base-src-wait-playing"></a><h3>gst_base_src_wait_playing ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_src_wait_playing           (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_src_wait_playing           (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
 <p>
 If the <a class="link" href="GstBaseSrc.html#GstBaseSrcClass.create"><code class="function">GstBaseSrcClass.create()</code></a> method performs its own synchronisation
 against the clock it must unblock when going from PLAYING to the PAUSED state
@@ -504,9 +512,9 @@ and call this method before continuing to produce the remaining data.
 </p>
 <p>
 This function will block until a state change to PLAYING happens (in which
-case this function returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
+case this function returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a>) or the processing must be stopped due
 to a state change to READY or a FLUSH event (in which case this function
-returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
+returns <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a>).
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -518,7 +526,7 @@ returns <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span clas
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if <em class="parameter"><code>src</code></em> is PLAYING and processing can
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> if <em class="parameter"><code>src</code></em> is PLAYING and processing can
 continue. Any other return value should be returned from the create vmethod.</td>
 </tr>
 </tbody>
@@ -580,7 +588,7 @@ be GST_STATE_CHANGE_NO_PREROLL.
 <div class="refsect2">
 <a name="gst-base-src-set-format"></a><h3>gst_base_src_set_format ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_src_set_format             (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>);</pre>
 <p>
 Sets the default format of the source. This will be the format used
 for sending NEW_SEGMENT events and for performing seeks.
@@ -590,7 +598,7 @@ If a format of GST_FORMAT_BYTES is set, the element will be able to
 operate in pull mode if the <a class="link" href="GstBaseSrc.html#GstBaseSrcClass.is-seekable"><code class="function">GstBaseSrcClass.is_seekable()</code></a> returns TRUE.
 </p>
 <p>
-This function must only be called in states &lt; <a href="../gstreamer-1.0/GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a>.
+This function must only be called in states &lt; <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a>.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -611,8 +619,8 @@ This function must only be called in states &lt; <a href="../gstreamer-1.0/GstEl
 <a name="gst-base-src-query-latency"></a><h3>gst_base_src_query_latency ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_src_query_latency          (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *live</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *min_latency</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> *max_latency</code></em>);</pre>
 <p>
 Query the source for the latency parameters. <em class="parameter"><code>live</code></em> will be TRUE when <em class="parameter"><code>src</code></em> is
 configured as a live source. <em class="parameter"><code>min_latency</code></em> will be set to the difference
@@ -771,7 +779,7 @@ read.
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_src_new_seamless_segment   (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> start</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> stop</code></em>,
-                                                         <em class="parameter"><code><span class="type">gint64</span> position</code></em>);</pre>
+                                                         <em class="parameter"><code><span class="type">gint64</span> time</code></em>);</pre>
 <p>
 Prepare a new seamless segment for emission downstream. This function must
 only be called by derived sub-classes, and only from the <code class="function">create()</code> function,
@@ -797,8 +805,8 @@ configured with <a class="link" href="GstBaseSrc.html#gst-base-src-set-format" t
 <td>Stop value for the new segment</td>
 </tr>
 <tr>
-<td><p><span class="term"><em class="parameter"><code>position</code></em> :</span></p></td>
-<td>The position value for the new segent</td>
+<td><p><span class="term"><em class="parameter"><code>time</code></em> :</span></p></td>
+<td>The new time value for the start of the new segent</td>
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
@@ -812,7 +820,7 @@ configured with <a class="link" href="GstBaseSrc.html#gst-base-src-set-format" t
 <div class="refsect2">
 <a name="gst-base-src-set-caps"></a><h3>gst_base_src_set_caps ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_src_set_caps               (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps</code></em>);</pre>
 <p>
 Set new caps on the basesrc source pad.
 </p>
@@ -826,7 +834,7 @@ Set new caps on the basesrc source pad.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>caps</code></em> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>
 </td>
 </tr>
 <tr>
@@ -841,8 +849,8 @@ Set new caps on the basesrc source pad.
 <div class="refsect2">
 <a name="gst-base-src-get-allocator"></a><h3>gst_base_src_get_allocator ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_src_get_allocator          (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
 <p>
 Lets <a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> sub-classes to know the memory <em class="parameter"><code>allocator</code></em>
 used by the base class and its <em class="parameter"><code>params</code></em>.
@@ -860,7 +868,7 @@ Unref the <em class="parameter"><code>allocator</code></em> after use it.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>allocator</code></em> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>
 used. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
@@ -876,7 +884,7 @@ used. <span class="annotation">[<acronym title="Parameter for returning results.
 <hr>
 <div class="refsect2">
 <a name="gst-base-src-get-buffer-pool"></a><h3>gst_base_src_get_buffer_pool ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     gst_base_src_get_buffer_pool        (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     gst_base_src_get_buffer_pool        (<em class="parameter"><code><a class="link" href="GstBaseSrc.html" title="GstBaseSrc"><span class="type">GstBaseSrc</span></a> *src</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -887,7 +895,7 @@ used. <span class="annotation">[<acronym title="Parameter for returning results.
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the instance of the <a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
+<td>the instance of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
 by the src; free it after use it. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
@@ -900,7 +908,7 @@ by the src; free it after use it. <span class="annotation">[<acronym title="Free
 <pre class="programlisting">#define GST_BASE_SRC_PAD(obj)                 (GST_BASE_SRC_CAST (obj)-&gt;srcpad)
 </pre>
 <p>
-Gives the pointer to the <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+Gives the pointer to the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
index 84f503fed3697e154cf96c9bbed07aebea46320e..210462727d461a9112de3fbbcb5f59ef9f05c561 100644 (file)
@@ -49,6 +49,9 @@ struct              <a class="link" href="GstBaseTransform.html#GstBaseTransform
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseTransform.html#gst-base-transform-is-passthrough" title="gst_base_transform_is_passthrough ()">gst_base_transform_is_passthrough</a>   (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseTransform.html#gst-base-transform-set-passthrough" title="gst_base_transform_set_passthrough ()">gst_base_transform_set_passthrough</a>  (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> passthrough</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="GstBaseTransform.html#gst-base-transform-set-prefer-passthrough" title="gst_base_transform_set_prefer_passthrough ()">gst_base_transform_set_prefer_passthrough</a>
+                                                        (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> prefer_passthrough</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstBaseTransform.html#gst-base-transform-is-in-place" title="gst_base_transform_is_in_place ()">gst_base_transform_is_in_place</a>      (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseTransform.html#gst-base-transform-set-in-place" title="gst_base_transform_set_in_place ()">gst_base_transform_set_in_place</a>     (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> in_place</code></em>);
@@ -57,14 +60,14 @@ struct              <a class="link" href="GstBaseTransform.html#GstBaseTransform
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> enabled</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseTransform.html#gst-base-transform-update-qos" title="gst_base_transform_update_qos ()">gst_base_transform_update_qos</a>       (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> proportion</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseTransform.html#gst-base-transform-set-gap-aware" title="gst_base_transform_set_gap_aware ()">gst_base_transform_set_gap_aware</a>    (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> gap_aware</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstBaseTransform.html#gst-base-transform-get-allocator" title="gst_base_transform_get_allocator ()">gst_base_transform_get_allocator</a>    (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     <a class="link" href="GstBaseTransform.html#gst-base-transform-get-buffer-pool" title="gst_base_transform_get_buffer_pool ()">gst_base_transform_get_buffer_pool</a>  (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     <a class="link" href="GstBaseTransform.html#gst-base-transform-get-buffer-pool" title="gst_base_transform_get_buffer_pool ()">gst_base_transform_get_buffer_pool</a>  (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);
 #define             <a class="link" href="GstBaseTransform.html#GST-BASE-TRANSFORM-SINK-NAME:CAPS" title="GST_BASE_TRANSFORM_SINK_NAME">GST_BASE_TRANSFORM_SINK_NAME</a>
 #define             <a class="link" href="GstBaseTransform.html#GST-BASE-TRANSFORM-SRC-NAME:CAPS" title="GST_BASE_TRANSFORM_SRC_NAME">GST_BASE_TRANSFORM_SRC_NAME</a>
 #define             <a class="link" href="GstBaseTransform.html#GST-BASE-TRANSFORM-SINK-PAD:CAPS" title="GST_BASE_TRANSFORM_SINK_PAD()">GST_BASE_TRANSFORM_SINK_PAD</a>         (obj)
@@ -77,8 +80,8 @@ struct              <a class="link" href="GstBaseTransform.html#GstBaseTransform
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstBaseTransform
 </pre>
 </div>
@@ -115,7 +118,7 @@ It provides for:
 <p>
 </p>
 <div class="refsect2">
-<a name="idp5388448"></a><h3>Use Cases</h3>
+<a name="idp6797872"></a><h3>Use Cases</h3>
 <p>
 </p>
 <div class="orderedlist"><ol class="orderedlist" type="1">
@@ -255,7 +258,7 @@ It provides for:
 </p>
 <hr>
 <div class="refsect2">
-<a name="idp6912544"></a><h3>Sub-class settable flags on GstBaseTransform</h3>
+<a name="idp9811680"></a><h3>Sub-class settable flags on GstBaseTransform</h3>
 <p>
 </p>
 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
@@ -392,7 +395,7 @@ same type and quantity) it should provide <em class="parameter"><code>transform_
 <col align="left" valign="top">
 <tbody>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseTransformClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseTransformClass.parent-class"></a>parent_class</code></em>;</span></p></td>
 <td>Element parent class</td>
 </tr>
 <tr>
@@ -607,6 +610,43 @@ MT safe.
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-base-transform-set-prefer-passthrough"></a><h3>gst_base_transform_set_prefer_passthrough ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_base_transform_set_prefer_passthrough
+                                                        (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> prefer_passthrough</code></em>);</pre>
+<p>
+If <em class="parameter"><code>prefer_passthrough</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> (the default), <em class="parameter"><code>trans</code></em> will check and
+prefer passthrough caps from the list of caps returned by the
+transform_caps vmethod.
+</p>
+<p>
+If set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, the element must order the caps returned from the
+transform_caps function in such a way that the prefered format is
+first in the list. This can be interesting for transforms that can do
+passthrough transforms but prefer to do something else, like a
+capsfilter.
+</p>
+<p>
+MT safe.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trans</code></em> :</span></p></td>
+<td>a <a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefer_passthrough</code></em> :</span></p></td>
+<td>New state</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.0.1</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-base-transform-is-in-place"></a><h3>gst_base_transform_is_in_place ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_transform_is_in_place      (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);</pre>
 <p>
@@ -714,8 +754,8 @@ MT safe.
 <a name="gst-base-transform-update-qos"></a><h3>gst_base_transform_update_qos ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_transform_update_qos       (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> proportion</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> diff</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
 <p>
 Set the QoS parameters in the transform. This function is called internally
 when a QOS event is received but subclasses can provide custom information
@@ -755,7 +795,7 @@ running_time.</td>
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> gap_aware</code></em>);</pre>
 <p>
 If <em class="parameter"><code>gap_aware</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> (the default), output buffers will have the
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GST-BUFFER-FLAG-GAP:CAPS"><code class="literal">GST_BUFFER_FLAG_GAP</code></a> flag unset.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GST-BUFFER-FLAG-GAP:CAPS"><code class="literal">GST_BUFFER_FLAG_GAP</code></a> flag unset.
 </p>
 <p>
 If set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, the element must handle output buffers with this flag set
@@ -784,8 +824,8 @@ MT safe.
 <div class="refsect2">
 <a name="gst-base-transform-get-allocator"></a><h3>gst_base_transform_get_allocator ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_transform_get_allocator    (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a> **allocator</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html#GstAllocationParams"><span class="type">GstAllocationParams</span></a> *params</code></em>);</pre>
 <p>
 Lets <a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> sub-classes to know the memory <em class="parameter"><code>allocator</code></em>
 used by the base class and its <em class="parameter"><code>params</code></em>.
@@ -803,7 +843,7 @@ Unref the <em class="parameter"><code>allocator</code></em> after use it.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>allocator</code></em> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/GstAllocator.html"><span class="type">GstAllocator</span></a>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>
 used. <span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>][<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>][<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
@@ -819,7 +859,7 @@ used. <span class="annotation">[<acronym title="Parameter for returning results.
 <hr>
 <div class="refsect2">
 <a name="gst-base-transform-get-buffer-pool"></a><h3>gst_base_transform_get_buffer_pool ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     gst_base_transform_get_buffer_pool  (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *     gst_base_transform_get_buffer_pool  (<em class="parameter"><code><a class="link" href="GstBaseTransform.html" title="GstBaseTransform"><span class="type">GstBaseTransform</span></a> *trans</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -830,7 +870,7 @@ used. <span class="annotation">[<acronym title="Parameter for returning results.
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the instance of the <a href="../gstreamer-1.0/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
+<td>the instance of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> used
 by <em class="parameter"><code>trans</code></em>; free it after use it. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
@@ -861,7 +901,7 @@ The name of the templates for the source pad.
 <pre class="programlisting">#define GST_BASE_TRANSFORM_SINK_PAD(obj) (GST_BASE_TRANSFORM_CAST (obj)-&gt;sinkpad)
 </pre>
 <p>
-Gives the pointer to the sink <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -877,7 +917,7 @@ Gives the pointer to the sink <a href="../gstreamer-1.0/GstPad.html"><span class
 <pre class="programlisting">#define GST_BASE_TRANSFORM_SRC_PAD(obj)            (GST_BASE_TRANSFORM_CAST (obj)-&gt;srcpad)
 </pre>
 <p>
-Gives the pointer to the source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -893,7 +933,7 @@ Gives the pointer to the source <a href="../gstreamer-1.0/GstPad.html"><span cla
 <pre class="programlisting">#define GST_BASE_TRANSFORM_FLOW_DROPPED   GST_FLOW_CUSTOM_SUCCESS
 </pre>
 <p>
-A <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from transform and transform_ip to
+A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from transform and transform_ip to
 indicate that no output buffer was generated.
 </p>
 </div>
index 0530657c01bcee3e39bf767aef2da44d7c162ca7..a25c9f08aa87d3e6155f622bfbb76eab85be6dd6 100644 (file)
 struct              <a class="link" href="GstCollectPads.html#GstCollectPads-struct" title="struct GstCollectPads">GstCollectPads</a>;
 struct              <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData">GstCollectData</a>;
 <span class="returnvalue">void</span>                (<a class="link" href="GstCollectPads.html#GstCollectDataDestroyNotify" title="GstCollectDataDestroyNotify ()">*GstCollectDataDestroyNotify</a>)      (<em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="GstCollectPads.html#GstCollectPadsBufferFunction" title="GstCollectPadsBufferFunction ()">*GstCollectPadsBufferFunction</a>)     (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="GstCollectPads.html#GstCollectPadsBufferFunction" title="GstCollectPadsBufferFunction ()">*GstCollectPadsBufferFunction</a>)     (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                (<a class="link" href="GstCollectPads.html#GstCollectPadsCompareFunction" title="GstCollectPadsCompareFunction ()">*GstCollectPadsCompareFunction</a>)    (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data1</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data2</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            (<a class="link" href="GstCollectPads.html#GstCollectPadsEventFunction" title="GstCollectPadsEventFunction ()">*GstCollectPadsEventFunction</a>)      (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *pad</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="GstCollectPads.html#GstCollectPadsClipFunction" title="GstCollectPadsClipFunction ()">*GstCollectPadsClipFunction</a>)       (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="GstCollectPads.html#GstCollectPadsClipFunction" title="GstCollectPadsClipFunction ()">*GstCollectPadsClipFunction</a>)       (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="GstCollectPads.html#GstCollectPadsFunction" title="GstCollectPadsFunction ()">*GstCollectPadsFunction</a>)           (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="GstCollectPads.html#GstCollectPadsFunction" title="GstCollectPadsFunction ()">*GstCollectPadsFunction</a>)           (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);
 enum                <a class="link" href="GstCollectPads.html#GstCollectPadsStateFlags" title="enum GstCollectPadsStateFlags">GstCollectPadsStateFlags</a>;
 #define             <a class="link" href="GstCollectPads.html#GST-COLLECT-PADS-STATE:CAPS" title="GST_COLLECT_PADS_STATE()">GST_COLLECT_PADS_STATE</a>              (data)
@@ -79,26 +79,26 @@ enum                <a class="link" href="GstCollectPads.html#GstCollectPadsStat
 #define             <a class="link" href="GstCollectPads.html#GST-COLLECT-PADS-STREAM-UNLOCK:CAPS" title="GST_COLLECT_PADS_STREAM_UNLOCK()">GST_COLLECT_PADS_STREAM_UNLOCK</a>      (pads)
 <a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="returnvalue">GstCollectPads</span></a> *    <a class="link" href="GstCollectPads.html#gst-collect-pads-new" title="gst_collect_pads_new ()">gst_collect_pads_new</a>                (<em class="parameter"><code><span class="type">void</span></code></em>);
 <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="returnvalue">GstCollectData</span></a> *    <a class="link" href="GstCollectPads.html#gst-collect-pads-add-pad" title="gst_collect_pads_add_pad ()">gst_collect_pads_add_pad</a>            (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectDataDestroyNotify" title="GstCollectDataDestroyNotify ()"><span class="type">GstCollectDataDestroyNotify</span></a> destroy_notify</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> lock</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstCollectPads.html#gst-collect-pads-remove-pad" title="gst_collect_pads_remove_pad ()">gst_collect_pads_remove_pad</a>         (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstCollectPads.html#gst-collect-pads-start" title="gst_collect_pads_start ()">gst_collect_pads_start</a>              (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstCollectPads.html#gst-collect-pads-stop" title="gst_collect_pads_stop ()">gst_collect_pads_stop</a>               (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GstCollectPads.html#gst-collect-pads-available" title="gst_collect_pads_available ()">gst_collect_pads_available</a>          (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GstCollectPads.html#gst-collect-pads-flush" title="gst_collect_pads_flush ()">gst_collect_pads_flush</a>              (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-peek" title="gst_collect_pads_peek ()">gst_collect_pads_peek</a>               (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-peek" title="gst_collect_pads_peek ()">gst_collect_pads_peek</a>               (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-pop" title="gst_collect_pads_pop ()">gst_collect_pads_pop</a>                (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-pop" title="gst_collect_pads_pop ()">gst_collect_pads_pop</a>                (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-read-buffer" title="gst_collect_pads_read_buffer ()">gst_collect_pads_read_buffer</a>        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-read-buffer" title="gst_collect_pads_read_buffer ()">gst_collect_pads_read_buffer</a>        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-take-buffer" title="gst_collect_pads_take_buffer ()">gst_collect_pads_take_buffer</a>        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="GstCollectPads.html#gst-collect-pads-take-buffer" title="gst_collect_pads_take_buffer ()">gst_collect_pads_take_buffer</a>        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstCollectPads.html#gst-collect-pads-set-buffer-function" title="gst_collect_pads_set_buffer_function ()">gst_collect_pads_set_buffer_function</a>
@@ -130,7 +130,7 @@ enum                <a class="link" href="GstCollectPads.html#GstCollectPadsStat
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----GstCollectPads
 </pre>
 </div>
@@ -168,7 +168,7 @@ is given to the manager of this object when all pads have data.
   </p></li>
 <li class="listitem"><p>
     Data can also be dequeued in byte units using the <a class="link" href="GstCollectPads.html#gst-collect-pads-available" title="gst_collect_pads_available ()"><code class="function">gst_collect_pads_available()</code></a>,
-    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstCollectPads.html#gst-collect-pads-read"><code class="function">gst_collect_pads_read()</code></a> and <a class="link" href="GstCollectPads.html#gst-collect-pads-flush" title="gst_collect_pads_flush ()"><code class="function">gst_collect_pads_flush()</code></a> calls.
+    <code class="function">gst_collect_pads_read()</code> and <a class="link" href="GstCollectPads.html#gst-collect-pads-flush" title="gst_collect_pads_flush ()"><code class="function">gst_collect_pads_flush()</code></a> calls.
   </p></li>
 <li class="listitem"><p>
     Elements should call <a class="link" href="GstCollectPads.html#gst-collect-pads-start" title="gst_collect_pads_start ()"><code class="function">gst_collect_pads_start()</code></a> and <a class="link" href="GstCollectPads.html#gst-collect-pads-stop" title="gst_collect_pads_stop ()"><code class="function">gst_collect_pads_stop()</code></a> in
@@ -178,8 +178,8 @@ is given to the manager of this object when all pads have data.
     no pad is blocked and the element can finish streaming.
   </p></li>
 <li class="listitem"><p>
-    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstCollectPads.html#gst-collect-pads-collect"><code class="function">gst_collect_pads_collect()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstCollectPads.html#gst-collect-pads-collect-range"><code class="function">gst_collect_pads_collect_range()</code></a> can be used by
-    elements that start a <a href="../gstreamer-1.0/GstTask.html"><span class="type">GstTask</span></a> to drive the collect_pads. This feature is however
+    <code class="function">gst_collect_pads_collect()</code> and <code class="function">gst_collect_pads_collect_range()</code> can be used by
+    elements that start a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTask.html"><span class="type">GstTask</span></a> to drive the collect_pads. This feature is however
     not yet implemented.
   </p></li>
 <li class="listitem"><p>
@@ -239,12 +239,12 @@ Structure used by the collect_pads.
 </td>
 </tr>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *<em class="structfield"><code><a name="GstCollectData.pad"></a>pad</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *<em class="structfield"><code><a name="GstCollectData.pad"></a>pad</code></em>;</span></p></td>
 <td>
-<a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> managed by this data</td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> managed by this data</td>
 </tr>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstCollectData.buffer"></a>buffer</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstCollectData.buffer"></a>buffer</code></em>;</span></p></td>
 <td>currently queued buffer.</td>
 </tr>
 <tr>
@@ -252,7 +252,7 @@ Structure used by the collect_pads.
 <td>position in the buffer</td>
 </tr>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> <em class="structfield"><code><a name="GstCollectData.segment"></a>segment</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSegment.html#GstSegment"><span class="type">GstSegment</span></a> <em class="structfield"><code><a name="GstCollectData.segment"></a>segment</code></em>;</span></p></td>
 <td>last segment received.</td>
 </tr>
 </tbody>
@@ -278,9 +278,9 @@ memory and resources allocated for it.
 <hr>
 <div class="refsect2">
 <a name="GstCollectPadsBufferFunction"></a><h3>GstCollectPadsBufferFunction ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstCollectPadsBufferFunction)     (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstCollectPadsBufferFunction)     (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 A function that will be called when a (considered oldest) buffer can be muxed.
@@ -300,7 +300,7 @@ and NULL <em class="parameter"><code>data</code></em>.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 <tr>
@@ -311,7 +311,7 @@ and NULL <em class="parameter"><code>data</code></em>.
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
 </tr>
 </tbody>
 </table></div>
@@ -321,9 +321,9 @@ and NULL <em class="parameter"><code>data</code></em>.
 <a name="GstCollectPadsCompareFunction"></a><h3>GstCollectPadsCompareFunction ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                (*GstCollectPadsCompareFunction)    (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data1</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp1</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data2</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp2</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 A function for comparing two timestamps of buffers or newsegments collected on one pad.
@@ -372,7 +372,7 @@ Integer greate than zero when second timestamp is deemed older than the first on
 <a name="GstCollectPadsEventFunction"></a><h3>GstCollectPadsEventFunction ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            (*GstCollectPadsEventFunction)      (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *pad</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> *event</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 A function that will be called while processing an event. It takes
@@ -389,11 +389,11 @@ being handled by the default handler).
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> that received an event</td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> that received an event</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>event</code></em> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> received</td>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstEvent.html#GstEvent"><span class="type">GstEvent</span></a> received</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
@@ -411,10 +411,10 @@ being handled by the default handler).
 <hr>
 <div class="refsect2">
 <a name="GstCollectPadsClipFunction"></a><h3>GstCollectPadsClipFunction ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstCollectPadsClipFunction)       (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstCollectPadsClipFunction)       (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *inbuffer</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **outbuffer</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 A function that will be called when <em class="parameter"><code>inbuffer</code></em> is received on the pad managed
@@ -443,12 +443,12 @@ This function takes ownership of <em class="parameter"><code>inbuffer</code></em
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>inbuffer</code></em> :</span></p></td>
-<td>the input <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+<td>the input <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>outbuffer</code></em> :</span></p></td>
-<td>the output <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
+<td>the output <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>
 </td>
 </tr>
 <tr>
@@ -457,7 +457,7 @@ This function takes ownership of <em class="parameter"><code>inbuffer</code></em
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that corresponds to the result of clipping.</td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that corresponds to the result of clipping.</td>
 </tr>
 </tbody>
 </table></div>
@@ -465,7 +465,7 @@ This function takes ownership of <em class="parameter"><code>inbuffer</code></em
 <hr>
 <div class="refsect2">
 <a name="GstCollectPadsFunction"></a><h3>GstCollectPadsFunction ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstCollectPadsFunction)           (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstCollectPadsFunction)           (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 A function that will be called when all pads have received data.
@@ -485,7 +485,7 @@ A function that will be called when all pads have received data.
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> for success</td>
 </tr>
 </tbody>
 </table></div>
@@ -695,7 +695,7 @@ MT safe.
 <div class="refsect2">
 <a name="gst-collect-pads-add-pad"></a><h3>gst_collect_pads_add_pad ()</h3>
 <pre class="programlisting"><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="returnvalue">GstCollectData</span></a> *    gst_collect_pads_add_pad            (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectDataDestroyNotify" title="GstCollectDataDestroyNotify ()"><span class="type">GstCollectDataDestroyNotify</span></a> destroy_notify</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> lock</code></em>);</pre>
@@ -768,7 +768,7 @@ if wrong parameters are supplied.</td>
 <div class="refsect2">
 <a name="gst-collect-pads-remove-pad"></a><h3>gst_collect_pads_remove_pad ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_collect_pads_remove_pad         (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
 <p>
 Remove a pad from the collection of collect pads. This function will also
 free the <a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> and all the resources that were allocated with
@@ -910,7 +910,7 @@ is 0 if the pad was end-of-stream.</td>
 <hr>
 <div class="refsect2">
 <a name="gst-collect-pads-peek"></a><h3>gst_collect_pads_peek ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_peek               (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_peek               (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);</pre>
 <p>
 Peek at the buffer currently queued in <em class="parameter"><code>data</code></em>. This function
@@ -942,7 +942,7 @@ should unref the buffer after usage.</td>
 <hr>
 <div class="refsect2">
 <a name="gst-collect-pads-pop"></a><h3>gst_collect_pads_pop ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_pop                (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_pop                (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>);</pre>
 <p>
 Pop the buffer currently queued in <em class="parameter"><code>data</code></em>. This function
@@ -975,7 +975,7 @@ queued. You should unref the buffer after usage. <span class="annotation">[<acro
 <hr>
 <div class="refsect2">
 <a name="gst-collect-pads-read-buffer"></a><h3>gst_collect_pads_read_buffer ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_read_buffer        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_read_buffer        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
 <p>
@@ -1016,7 +1016,7 @@ Unref the buffer after use. <span class="annotation">[<acronym title="Free data
 <hr>
 <div class="refsect2">
 <a name="gst-collect-pads-take-buffer"></a><h3>gst_collect_pads_take_buffer ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_take_buffer        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_collect_pads_take_buffer        (<em class="parameter"><code><a class="link" href="GstCollectPads.html" title="GstCollectPads"><span class="type">GstCollectPads</span></a> *pads</code></em>,
                                                          <em class="parameter"><code><a class="link" href="GstCollectPads.html#GstCollectData" title="struct GstCollectData"><span class="type">GstCollectData</span></a> *data</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>);</pre>
 <p>
@@ -1162,7 +1162,7 @@ MT safe.
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
 <p>
 Install a clipping function that is called right after a buffer is received
-on a pad managed by <em class="parameter"><code>pads</code></em>. See <span class="type">GstCollectPad2ClipFunction</span> for more info.
+on a pad managed by <em class="parameter"><code>pads</code></em>. See <a class="link" href="GstCollectPads.html#GstCollectPadsClipFunction" title="GstCollectPadsClipFunction ()"><span class="type">GstCollectPadsClipFunction</span></a> for more info.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
index b8244c9496b997a2d072a83096325f6df047b8f7..2b865b61df204afbcebfe728486fe29499c92312 100644 (file)
@@ -46,7 +46,7 @@
 
 struct              <a class="link" href="GstInterpolationControlSource.html#GstInterpolationControlSource-struct" title="struct GstInterpolationControlSource">GstInterpolationControlSource</a>;
 enum                <a class="link" href="GstInterpolationControlSource.html#GstInterpolationMode" title="enum GstInterpolationMode">GstInterpolationMode</a>;
-<a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  <a class="link" href="GstInterpolationControlSource.html#gst-interpolation-control-source-new" title="gst_interpolation_control_source_new ()">gst_interpolation_control_source_new</a>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  <a class="link" href="GstInterpolationControlSource.html#gst-interpolation-control-source-new" title="gst_interpolation_control_source_new ()">gst_interpolation_control_source_new</a>
                                                         (<em class="parameter"><code><span class="type">void</span></code></em>);
 </pre>
 </div>
@@ -55,8 +55,8 @@ enum                <a class="link" href="GstInterpolationControlSource.html#Gst
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
                      +----<a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
                            +----GstInterpolationControlSource
 </pre>
@@ -70,7 +70,7 @@ enum                <a class="link" href="GstInterpolationControlSource.html#Gst
 <div class="refsect1">
 <a name="GstInterpolationControlSource.description"></a><h2>Description</h2>
 <p>
-<a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource"><span class="type">GstInterpolationControlSource</span></a> is a <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>, that interpolates values between user-given
+<a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource"><span class="type">GstInterpolationControlSource</span></a> is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>, that interpolates values between user-given
 control points. It supports several interpolation modes and property types.
 </p>
 <p>
@@ -88,7 +88,7 @@ All functions are MT-safe.
 <a name="GstInterpolationControlSource-struct"></a><h3>struct GstInterpolationControlSource</h3>
 <pre class="programlisting">struct GstInterpolationControlSource;</pre>
 <p>
-The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
+The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
 </p>
 </div>
 <hr>
@@ -127,7 +127,7 @@ The various interpolation modes available.
 <hr>
 <div class="refsect2">
 <a name="gst-interpolation-control-source-new"></a><h3>gst_interpolation_control_source_new ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  gst_interpolation_control_source_new
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  gst_interpolation_control_source_new
                                                         (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>
 This returns a new, unbound <a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource"><span class="type">GstInterpolationControlSource</span></a>.
index bf44a2d82dd9d80402c32bd7f1820ae717258a23..143e430218716b7b186692b431edc22c6185d540 100644 (file)
@@ -46,7 +46,7 @@
 
 struct              <a class="link" href="GstLFOControlSource.html#GstLFOControlSource-struct" title="struct GstLFOControlSource">GstLFOControlSource</a>;
 enum                <a class="link" href="GstLFOControlSource.html#GstLFOWaveform" title="enum GstLFOWaveform">GstLFOWaveform</a>;
-<a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  <a class="link" href="GstLFOControlSource.html#gst-lfo-control-source-new" title="gst_lfo_control_source_new ()">gst_lfo_control_source_new</a>          (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  <a class="link" href="GstLFOControlSource.html#gst-lfo-control-source-new" title="gst_lfo_control_source_new ()">gst_lfo_control_source_new</a>          (<em class="parameter"><code><span class="type">void</span></code></em>);
 </pre>
 </div>
 <div class="refsect1">
@@ -54,8 +54,8 @@ enum                <a class="link" href="GstLFOControlSource.html#GstLFOWavefor
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
                      +----GstLFOControlSource
 </pre>
 </div>
@@ -72,7 +72,7 @@ enum                <a class="link" href="GstLFOControlSource.html#GstLFOWavefor
 <div class="refsect1">
 <a name="GstLFOControlSource.description"></a><h2>Description</h2>
 <p>
-<a class="link" href="GstLFOControlSource.html" title="GstLFOControlSource"><span class="type">GstLFOControlSource</span></a> is a <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>, that provides several periodic waveforms
+<a class="link" href="GstLFOControlSource.html" title="GstLFOControlSource"><span class="type">GstLFOControlSource</span></a> is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>, that provides several periodic waveforms
 as control values. It supports all fundamental, numeric GValue types as property.
 </p>
 <p>
@@ -90,7 +90,7 @@ All functions are MT-safe.
 <a name="GstLFOControlSource-struct"></a><h3>struct GstLFOControlSource</h3>
 <pre class="programlisting">struct GstLFOControlSource;</pre>
 <p>
-The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
+The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
 </p>
 </div>
 <hr>
@@ -141,7 +141,7 @@ The various waveform modes available.
 <hr>
 <div class="refsect2">
 <a name="gst-lfo-control-source-new"></a><h3>gst_lfo_control_source_new ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  gst_lfo_control_source_new          (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  gst_lfo_control_source_new          (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>
 This returns a new, unbound <a class="link" href="GstLFOControlSource.html" title="GstLFOControlSource"><span class="type">GstLFOControlSource</span></a>.
 </p>
index 005565113f25cccadc6ba9961046b6bffc86acc8..e4f308f05226ce748c829ecf6f5f8c76cd8b7cee 100644 (file)
 #include &lt;gst/net/gstnet.h&gt;
 
 struct              <a class="link" href="GstNetClientClock.html#GstNetClientClock-struct" title="struct GstNetClientClock">GstNetClientClock</a>;
-<a href="../gstreamer-1.0/GstClock.html"><span class="returnvalue">GstClock</span></a> *          <a class="link" href="GstNetClientClock.html#gst-net-client-clock-new" title="gst_net_client_clock_new ()">gst_net_client_clock_new</a>            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> *          <a class="link" href="GstNetClientClock.html#gst-net-client-clock-new" title="gst_net_client_clock_new ()">gst_net_client_clock_new</a>            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *remote_address</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> remote_port</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);
 </pre>
 </div>
 <div class="refsect1">
@@ -57,9 +57,9 @@ struct              <a class="link" href="GstNetClientClock.html#GstNetClientClo
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstClock.html">GstClock</a>
-                     +----<a href="../gstreamer-1.0/GstSystemClock.html">GstSystemClock</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html">GstClock</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSystemClock.html">GstSystemClock</a>
                            +----GstNetClientClock
 </pre>
 </div>
@@ -73,7 +73,7 @@ struct              <a class="link" href="GstNetClientClock.html#GstNetClientClo
 <div class="refsect1">
 <a name="GstNetClientClock.description"></a><h2>Description</h2>
 <p>
-This object implements a custom <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> that synchronizes its time
+This object implements a custom <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> that synchronizes its time
 to a remote time provider such as <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>.
 </p>
 <p>
@@ -86,12 +86,12 @@ This clock will poll the time provider and will update its calibration
 parameters based on the local and remote observations.
 </p>
 <p>
-Various parameters of the clock can be configured with the parent <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>
+Various parameters of the clock can be configured with the parent <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>
 "timeout", "window-size" and "window-threshold" object properties.
 </p>
 <p>
-A <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> is typically set on a <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a> with 
-<a href="../gstreamer-1.0/GstPipeline.html#gst-pipeline-use-clock"><code class="function">gst_pipeline_use_clock()</code></a>.
+A <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> is typically set on a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a> with 
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html#gst-pipeline-use-clock"><code class="function">gst_pipeline_use_clock()</code></a>.
 </p>
 <p>
 Last reviewed on 2005-11-23 (0.9.5)
@@ -109,10 +109,10 @@ Opaque <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><
 <hr>
 <div class="refsect2">
 <a name="gst-net-client-clock-new"></a><h3>gst_net_client_clock_new ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstClock.html"><span class="returnvalue">GstClock</span></a> *          gst_net_client_clock_new            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="returnvalue">GstClock</span></a> *          gst_net_client_clock_new            (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *remote_address</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> remote_port</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> base_time</code></em>);</pre>
 <p>
 Create a new <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> that will report the time
 provided by the <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> on <em class="parameter"><code>remote_address</code></em> and 
@@ -139,7 +139,7 @@ provided by the <a class="link" href="GstNetTimeProvider.html" title="GstNetTime
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>a new <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> that receives a time from the remote
+<td>a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> that receives a time from the remote
 clock.</td>
 </tr>
 </tbody>
@@ -165,7 +165,7 @@ clock.</td>
 </div>
 <div class="refsect1">
 <a name="GstNetClientClock.see-also"></a><h2>See Also</h2>
-<a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>, <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a>
 </div>
 </div>
 <div class="footer">
index 9c11fbc7ebc72e5942d650b02b7567770456b84c..33f4f9921913def635d8425c6b27d218af4e2f22 100644 (file)
@@ -46,7 +46,7 @@
 #include &lt;gst/net/gstnet.h&gt;
 
 struct              <a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider-struct" title="struct GstNetTimeProvider">GstNetTimeProvider</a>;
-<a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * <a class="link" href="GstNetTimeProvider.html#gst-net-time-provider-new" title="gst_net_time_provider_new ()">gst_net_time_provider_new</a>          (<em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
+<a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * <a class="link" href="GstNetTimeProvider.html#gst-net-time-provider-new" title="gst_net_time_provider_new ()">gst_net_time_provider_new</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> port</code></em>);
 </pre>
@@ -56,7 +56,7 @@ struct              <a class="link" href="GstNetTimeProvider.html#GstNetTimeProv
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
                +----GstNetTimeProvider
 </pre>
 </div>
@@ -65,25 +65,25 @@ struct              <a class="link" href="GstNetTimeProvider.html#GstNetTimeProv
 <pre class="synopsis">
   "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--active" title='The "active" property'>active</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--address" title='The "address" property'>address</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
-  "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--clock" title='The "clock" property'>clock</a>"                    <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>*             : Read / Write
+  "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--clock" title='The "clock" property'>clock</a>"                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>*             : Read / Write
   "<a class="link" href="GstNetTimeProvider.html#GstNetTimeProvider--port" title='The "port" property'>port</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
 </pre>
 </div>
 <div class="refsect1">
 <a name="GstNetTimeProvider.description"></a><h2>Description</h2>
 <p>
-This object exposes the time of a <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> on the network.
+This object exposes the time of a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> on the network.
 </p>
 <p>
 A <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> is created with <a class="link" href="GstNetTimeProvider.html#gst-net-time-provider-new" title="gst_net_time_provider_new ()"><code class="function">gst_net_time_provider_new()</code></a> which
-takes a <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, an address and a port number as arguments.
+takes a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, an address and a port number as arguments.
 </p>
 <p>
 After creating the object, a client clock such as <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a> can
 query the exposed clock over the network for its values.
 </p>
 <p>
-The <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> typically wraps the clock used by a <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a>.
+The <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a> typically wraps the clock used by a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a>.
 </p>
 <p>
 Last reviewed on 2005-11-23 (0.9.5)
@@ -101,7 +101,7 @@ Opaque <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"
 <hr>
 <div class="refsect2">
 <a name="gst-net-time-provider-new"></a><h3>gst_net_time_provider_new ()</h3>
-<pre class="programlisting"><a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * gst_net_time_provider_new          (<em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
+<pre class="programlisting"><a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="returnvalue">GstNetTimeProvider</span></a> * gst_net_time_provider_new          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> *clock</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *address</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> port</code></em>);</pre>
 <p>
@@ -112,7 +112,7 @@ Allows network clients to get the current time of <em class="parameter"><code>cl
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>clock</code></em> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a> to export over the network</td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> to export over the network</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>address</code></em> :</span></p></td>
@@ -149,7 +149,7 @@ to bind to all addresses</td>
 <hr>
 <div class="refsect2">
 <a name="GstNetTimeProvider--clock"></a><h3>The <code class="literal">"clock"</code> property</h3>
-<pre class="programlisting">  "clock"                    <a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>*             : Read / Write</pre>
+<pre class="programlisting">  "clock"                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>*             : Read / Write</pre>
 <p>The clock to export over the network.</p>
 </div>
 <hr>
@@ -163,7 +163,7 @@ to bind to all addresses</td>
 </div>
 <div class="refsect1">
 <a name="GstNetTimeProvider.see-also"></a><h2>See Also</h2>
-<a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a href="../gstreamer-1.0/GstPipeline.html"><span class="type">GstPipeline</span></a>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a>
 </div>
 </div>
 <div class="footer">
index 05c2c434462df46040d9d10d7cc34d5c3088300a..d6b1e3dba78d1cc4e4d223a90084075e44c40a1b 100644 (file)
@@ -50,8 +50,8 @@ struct              <a class="link" href="GstPushSrc.html#GstPushSrc-struct" tit
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----<a class="link" href="GstBaseSrc.html" title="GstBaseSrc">GstBaseSrc</a>
                            +----GstPushSrc
 </pre>
index b81d608c35cfb3bed1e3cea84b1e6851fb2191f0..832f03fb629361d96c7a67f4dd9d84c5e6827926 100644 (file)
@@ -45,9 +45,9 @@
 struct              <a class="link" href="GstTimedValueControlSource.html#GstTimedValueControlSource-struct" title="struct GstTimedValueControlSource">GstTimedValueControlSource</a>;
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Sequences.html#GSequenceIter"><span class="returnvalue">GSequenceIter</span></a> *     <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-find-control-point-iter" title="gst_timed_value_control_source_find_control_point_iter ()">gst_timed_value_control_source_find_control_point_iter</a>
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-set" title="gst_timed_value_control_source_set ()">gst_timed_value_control_source_set</a>  (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-set-from-list" title="gst_timed_value_control_source_set_from_list ()">gst_timed_value_control_source_set_from_list</a>
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
@@ -56,7 +56,7 @@ struct              <a class="link" href="GstTimedValueControlSource.html#GstTim
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-unset" title="gst_timed_value_control_source_unset ()">gst_timed_value_control_source_unset</a>
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-unset-all" title="gst_timed_value_control_source_unset_all ()">gst_timed_value_control_source_unset_all</a>
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="GstTimedValueControlSource.html#gst-timed-value-control-source-get-count" title="gst_timed_value_control_source_get_count ()">gst_timed_value_control_source_get_count</a>
@@ -70,8 +70,8 @@ struct              <a class="link" href="GstTimedValueControlSource.html#GstTim
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
                      +----GstTimedValueControlSource
                            +----<a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource">GstInterpolationControlSource</a>
                            +----<a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource">GstTriggerControlSource</a>
@@ -96,7 +96,7 @@ All functions are MT-safe.
 <a name="GstTimedValueControlSource-struct"></a><h3>struct GstTimedValueControlSource</h3>
 <pre class="programlisting">struct GstTimedValueControlSource;</pre>
 <p>
-The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
+The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
 </p>
 </div>
 <hr>
@@ -104,7 +104,7 @@ The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span
 <a name="gst-timed-value-control-source-find-control-point-iter"></a><h3>gst_timed_value_control_source_find_control_point_iter ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Sequences.html#GSequenceIter"><span class="returnvalue">GSequenceIter</span></a> *     gst_timed_value_control_source_find_control_point_iter
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
 <p>
 Find last value before given timestamp in control point list.
 If all values in the control point list come after the given
@@ -136,7 +136,7 @@ For use in control source implementations.
 <div class="refsect2">
 <a name="gst-timed-value-control-source-set"></a><h3>gst_timed_value_control_source_set ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_timed_value_control_source_set  (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);</pre>
 <p>
 Set the value of given controller-handled property at a certain time.
@@ -182,7 +182,7 @@ Sets multiple timed values at once.
 <tr>
 <td><p><span class="term"><em class="parameter"><code>timedvalues</code></em> :</span></p></td>
 <td>a list
-with <a href="../gstreamer-1.0/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> items. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstController.TimedValue]</span>
+with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> items. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstController.TimedValue]</span>
 </td>
 </tr>
 <tr>
@@ -198,7 +198,7 @@ with <a href="../gstreamer-1.0/GstControlSource.html#GstTimedValue"><span class=
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *             gst_timed_value_control_source_get_all
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>);</pre>
 <p>
-Returns a read-only copy of the list of <a href="../gstreamer-1.0/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> for the given property.
+Returns a read-only copy of the list of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html#GstTimedValue"><span class="type">GstTimedValue</span></a> for the given property.
 Free the list after done with it.
 </p>
 <div class="variablelist"><table border="0">
@@ -222,7 +222,7 @@ of the list, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Stand
 <a name="gst-timed-value-control-source-unset"></a><h3>gst_timed_value_control_source_unset ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_timed_value_control_source_unset
                                                         (<em class="parameter"><code><a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource"><span class="type">GstTimedValueControlSource</span></a> *self</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> timestamp</code></em>);</pre>
 <p>
 Used to remove the value of given controller-handled property at a certain
 time.
index b4a91d08db9a438af31e8a7b814d29a5423349e3..86e49757c991f430e3a33400f1968a3e1644efba 100644 (file)
@@ -45,7 +45,7 @@
 #include &lt;libs/controller/gsttriggercontrolsource.h&gt;
 
 struct              <a class="link" href="GstTriggerControlSource.html#GstTriggerControlSource-struct" title="struct GstTriggerControlSource">GstTriggerControlSource</a>;
-<a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  <a class="link" href="GstTriggerControlSource.html#gst-trigger-control-source-new" title="gst_trigger_control_source_new ()">gst_trigger_control_source_new</a>      (<em class="parameter"><code><span class="type">void</span></code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  <a class="link" href="GstTriggerControlSource.html#gst-trigger-control-source-new" title="gst_trigger_control_source_new ()">gst_trigger_control_source_new</a>      (<em class="parameter"><code><span class="type">void</span></code></em>);
 </pre>
 </div>
 <div class="refsect1">
@@ -53,8 +53,8 @@ struct              <a class="link" href="GstTriggerControlSource.html#GstTrigge
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
                      +----<a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
                            +----GstTriggerControlSource
 </pre>
@@ -68,7 +68,7 @@ struct              <a class="link" href="GstTriggerControlSource.html#GstTrigge
 <div class="refsect1">
 <a name="GstTriggerControlSource.description"></a><h2>Description</h2>
 <p>
-<a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource"><span class="type">GstTriggerControlSource</span></a> is a <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>, that returns values from user-given
+<a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource"><span class="type">GstTriggerControlSource</span></a> is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>, that returns values from user-given
 control points. It allows for a tolerance on the time-stamps.
 </p>
 <p>
@@ -86,13 +86,13 @@ All functions are MT-safe.
 <a name="GstTriggerControlSource-struct"></a><h3>struct GstTriggerControlSource</h3>
 <pre class="programlisting">struct GstTriggerControlSource;</pre>
 <p>
-The instance structure of <a href="../gstreamer-1.0/GstControlSource.html"><span class="type">GstControlSource</span></a>.
+The instance structure of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="type">GstControlSource</span></a>.
 </p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="gst-trigger-control-source-new"></a><h3>gst_trigger_control_source_new ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  gst_trigger_control_source_new      (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html"><span class="returnvalue">GstControlSource</span></a> *  gst_trigger_control_source_new      (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>
 This returns a new, unbound <a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource"><span class="type">GstTriggerControlSource</span></a>.
 </p>
index d565efb5080ebcf328b7eb6ee8c7583d960e1477..bfdf33a82a5b200e2f17a29a3ee621388fade7bd 100644 (file)
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstBaseTransform.html#gst-base-transform-set-prefer-passthrough" title="gst_base_transform_set_prefer_passthrough ()">gst_base_transform_set_prefer_passthrough</a>, function in <a class="link" href="GstBaseTransform.html" title="GstBaseTransform">GstBaseTransform</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstBaseTransform.html#gst-base-transform-set-qos-enabled" title="gst_base_transform_set_qos_enabled ()">gst_base_transform_set_qos_enabled</a>, function in <a class="link" href="GstBaseTransform.html" title="GstBaseTransform">GstBaseTransform</a>
 </dt>
 <dd></dd>
index 39700cad4deea469c764cc5e522f39bcb20143b6..0738a4cf7dbe0b6e70b027a697b135b8471cc7c1 100644 (file)
@@ -30,7 +30,7 @@
 <span class="refentrytitle"><a href="GstBaseSrc.html">GstBaseSrc</a></span><span class="refpurpose"> — Base class for getrange based source elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"> — Base class for sink elements</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="GstBaseTransform.html">GstBaseTransform</a></span><span class="refpurpose"> — Base class for simple transform filters</span>
index 41f305a0969d8aa3bae1791f3bb804e47ca392c8..144cbbe1a91de688b86ffe12b96e207e6786b862 100644 (file)
 <pre class="screen">
     <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
         <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-            <a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-                <a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+            <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                     <a class="link" href="GstBaseSrc.html" title="GstBaseSrc">GstBaseSrc</a>
                         <a class="link" href="GstPushSrc.html" title="GstPushSrc">GstPushSrc</a>
                     <a class="link" href="GstBaseSink.html" title="GstBaseSink">GstBaseSink</a>
                     <a class="link" href="GstBaseTransform.html" title="GstBaseTransform">GstBaseTransform</a>
-                <a href="../gstreamer-1.0/GstClock.html">GstClock</a>
-                    <a href="../gstreamer-1.0/GstSystemClock.html">GstSystemClock</a>
+                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html">GstClock</a>
+                    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSystemClock.html">GstSystemClock</a>
                         <a class="link" href="GstNetClientClock.html" title="GstNetClientClock">GstNetClientClock</a>
-                <a href="../gstreamer-1.0/GstControlSource.html">GstControlSource</a>
+                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstControlSource.html">GstControlSource</a>
                     <a class="link" href="GstTimedValueControlSource.html" title="GstTimedValueControlSource">GstTimedValueControlSource</a>
                         <a class="link" href="GstInterpolationControlSource.html" title="GstInterpolationControlSource">GstInterpolationControlSource</a>
                         <a class="link" href="GstTriggerControlSource.html" title="GstTriggerControlSource">GstTriggerControlSource</a>
index 64b8c0688810525de87fb12d85fa2785050a30fe..ec56968bcf3ed45bebfb6566fcb19940962747a7 100644 (file)
@@ -43,7 +43,7 @@
 struct              <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse">GstBaseParse</a>;
 struct              <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseClass" title="struct GstBaseParseClass">GstBaseParseClass</a>;
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-set-duration" title="gst_base_parse_set_duration ()">gst_base_parse_set_duration</a>         (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> duration</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> interval</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-set-average-bitrate" title="gst_base_parse_set_average_bitrate ()">gst_base_parse_set_average_bitrate</a>  (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
@@ -62,26 +62,26 @@ struct              <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBa
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> lead_in</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> lead_out</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-set-latency" title="gst_base_parse_set_latency ()">gst_base_parse_set_latency</a>          (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-convert-default" title="gst_base_parse_convert_default ()">gst_base_parse_convert_default</a>      (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> src_value</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> *dest_value</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-add-index-entry" title="gst_base_parse_add_index_entry ()">gst_base_parse_add_index_entry</a>      (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> key</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> force</code></em>);
                     <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame">GstBaseParseFrame</a>;
 enum                <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrameFlags" title="enum GstBaseParseFrameFlags">GstBaseParseFrameFlags</a>;
-<a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-new" title="gst_base_parse_frame_new ()">gst_base_parse_frame_new</a>            (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+<a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-new" title="gst_base_parse_frame_new ()">gst_base_parse_frame_new</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                                          <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrameFlags" title="enum GstBaseParseFrameFlags"><span class="type">GstBaseParseFrameFlags</span></a> flags</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> overhead</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-init" title="gst_base_parse_frame_init ()">gst_base_parse_frame_init</a>           (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-frame-free" title="gst_base_parse_frame_free ()">gst_base_parse_frame_free</a>           (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-push-frame" title="gst_base_parse_push_frame ()">gst_base_parse_push_frame</a>           (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-push-frame" title="gst_base_parse_push_frame ()">gst_base_parse_push_frame</a>           (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
                                                          <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);
 #define             <a class="link" href="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-DRAINING:CAPS" title="GST_BASE_PARSE_DRAINING()">GST_BASE_PARSE_DRAINING</a>             (parse)
 #define             <a class="link" href="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-FLAG-DRAINING:CAPS" title="GST_BASE_PARSE_FLAG_DRAINING">GST_BASE_PARSE_FLAG_DRAINING</a>
@@ -221,9 +221,9 @@ needs to set the fixed caps on srcpad, when the format is ensured (e.g.
 when base class calls subclass' <em class="parameter"><code>set_sink_caps</code></em> function).
 </p>
 <p>
-This base class uses <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> as a meaning of frames. So,
+This base class uses <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> as a meaning of frames. So,
 subclass conversion routine needs to know that conversion from
-<a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><span class="type">GST_FORMAT_TIME</span></a> to <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> must return the
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><span class="type">GST_FORMAT_TIME</span></a> to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><span class="type">GST_FORMAT_DEFAULT</span></a> must return the
 frame number that can be found from the given byte position.
 </p>
 <p>
@@ -292,7 +292,7 @@ The opaque <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse"
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody><tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> <em class="structfield"><code><a name="GstBaseParse.element"></a>element</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> <em class="structfield"><code><a name="GstBaseParse.element"></a>element</code></em>;</span></p></td>
 <td>the parent element.</td>
 </tr></tbody>
 </table></div>
@@ -347,7 +347,7 @@ overridden.
 <col align="left" valign="top">
 <tbody>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseParseClass.parent-class"></a>parent_class</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GstElementClass"><span class="type">GstElementClass</span></a> <em class="structfield"><code><a name="GstBaseParseClass.parent-class"></a>parent_class</code></em>;</span></p></td>
 <td>the parent class</td>
 </tr>
 <tr>
@@ -424,7 +424,7 @@ the stream format.</td>
 <div class="refsect2">
 <a name="gst-base-parse-set-duration"></a><h3>gst_base_parse_set_duration ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_parse_set_duration         (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> fmt</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> duration</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> interval</code></em>);</pre>
 <p>
@@ -445,7 +445,7 @@ frames.
 <tr>
 <td><p><span class="term"><em class="parameter"><code>fmt</code></em> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>.</td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>.</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>duration</code></em> :</span></p></td>
@@ -638,8 +638,8 @@ entirely filled upon decoding.
 <div class="refsect2">
 <a name="gst-base-parse-set-latency"></a><h3>gst_base_parse_set_latency ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_base_parse_set_latency          (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> min_latency</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> max_latency</code></em>);</pre>
 <p>
 Sets the minimum and maximum (which may likely be equal) latency introduced
 by the parsing process.  If there is such a latency, which depends on the
@@ -668,9 +668,9 @@ particular parsing of the format, it typically corresponds to 1 frame duration.
 <div class="refsect2">
 <a name="gst-base-parse-convert-default"></a><h3>gst_base_parse_convert_default ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_parse_convert_default      (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> src_format</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> src_value</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> dest_format</code></em>,
                                                          <em class="parameter"><code><span class="type">gint64</span> *dest_value</code></em>);</pre>
 <p>
 Default implementation of "convert" vmethod in <a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> class.
@@ -686,7 +686,7 @@ Default implementation of "convert" vmethod in <a class="link" href="gstreamer-l
 <tr>
 <td><p><span class="term"><em class="parameter"><code>src_format</code></em> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> describing the source format.</td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> describing the source format.</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>src_value</code></em> :</span></p></td>
@@ -695,7 +695,7 @@ Default implementation of "convert" vmethod in <a class="link" href="gstreamer-l
 <tr>
 <td><p><span class="term"><em class="parameter"><code>dest_format</code></em> :</span></p></td>
 <td>
-<a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> defining the converted format.</td>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> defining the converted format.</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>dest_value</code></em> :</span></p></td>
@@ -713,7 +713,7 @@ Default implementation of "convert" vmethod in <a class="link" href="gstreamer-l
 <a name="gst-base-parse-add-index-entry"></a><h3>gst_base_parse_add_index_entry ()</h3>
 <pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gst_base_parse_add_index_entry      (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> ts</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> key</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> force</code></em>);</pre>
 <p>
@@ -778,11 +778,11 @@ of each frame's processing, i.e. parsing virtual method invocation sequence.
 <col align="left" valign="top">
 <tbody>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.buffer"></a>buffer</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.buffer"></a>buffer</code></em>;</span></p></td>
 <td>input data to be parsed for frames.</td>
 </tr>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.out-buffer"></a>out_buffer</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstBaseParseFrame.out-buffer"></a>out_buffer</code></em>;</span></p></td>
 <td>(optional) (replacement) output data.</td>
 </tr>
 <tr>
@@ -871,7 +871,7 @@ Flags to be used in a <a class="link" href="gstreamer-libs-GstBaseParse.html#Gst
 <hr>
 <div class="refsect2">
 <a name="gst-base-parse-frame-new"></a><h3>gst_base_parse_frame_new ()</h3>
-<pre class="programlisting"><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * gst_base_parse_frame_new            (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+<pre class="programlisting"><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="returnvalue">GstBaseParseFrame</span></a> * gst_base_parse_frame_new            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                                          <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrameFlags" title="enum GstBaseParseFrameFlags"><span class="type">GstBaseParseFrameFlags</span></a> flags</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> overhead</code></em>);</pre>
 <p>
@@ -884,7 +884,7 @@ then use <a class="link" href="gstreamer-libs-GstBaseParse.html#gst-base-parse-f
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
 </td>
 </tr>
 <tr>
@@ -933,7 +933,7 @@ allocated on the stack.
 <hr>
 <div class="refsect2">
 <a name="gst-base-parse-push-frame"></a><h3>gst_base_parse_push_frame ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_parse_push_frame           (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       gst_base_parse_push_frame           (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParse" title="struct GstBaseParse"><span class="type">GstBaseParse</span></a> *parse</code></em>,
                                                          <em class="parameter"><code><a class="link" href="gstreamer-libs-GstBaseParse.html#GstBaseParseFrame" title="GstBaseParseFrame"><span class="type">GstBaseParseFrame</span></a> *frame</code></em>);</pre>
 <p>
 Pushes the frame's buffer downstream, sends any pending events and
@@ -958,7 +958,7 @@ This must be called with sinkpad STREAM_LOCK held.
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a></td>
+<td><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a></td>
 </tr>
 </tbody>
 </table></div>
@@ -998,7 +998,7 @@ the parser is now processing the frames at the end of the stream)
 <pre class="programlisting">#define GST_BASE_PARSE_FLOW_DROPPED     GST_FLOW_CUSTOM_SUCCESS
 </pre>
 <p>
-A <a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from parse_frame to
+A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that can be returned from parse_frame to
 indicate that no output buffer was generated, or from pre_push_frame to
 to forego pushing buffer.
 </p>
@@ -1025,7 +1025,7 @@ Obtains current sync status.
 <pre class="programlisting">#define GST_BASE_PARSE_SINK_PAD(obj)    (GST_BASE_PARSE_CAST (obj)-&gt;sinkpad)
 </pre>
 <p>
-Gives the pointer to the sink <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -1041,7 +1041,7 @@ Gives the pointer to the sink <a href="../gstreamer-1.0/GstPad.html"><span class
 <pre class="programlisting">#define GST_BASE_PARSE_SRC_PAD(obj)    (GST_BASE_PARSE_CAST (obj)-&gt;srcpad)
 </pre>
 <p>
-Gives the pointer to the source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> object of the element.
+Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
index b1a2ff00e0a5431fe5c9f47532d43ff9eda22c06..ae88b323f19fc3688a425985954489a61388966b 100644 (file)
 <pre class="synopsis">
 #include &lt;gst/check/gstbufferstraw.h&gt;
 
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-start-pipeline" title="gst_buffer_straw_start_pipeline ()">gst_buffer_straw_start_pipeline</a>     (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()">gst_buffer_straw_get_buffer</a>         (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-stop-pipeline" title="gst_buffer_straw_stop_pipeline ()">gst_buffer_straw_stop_pipeline</a>      (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-start-pipeline" title="gst_buffer_straw_start_pipeline ()">gst_buffer_straw_start_pipeline</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()">gst_buffer_straw_get_buffer</a>         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-stop-pipeline" title="gst_buffer_straw_stop_pipeline ()">gst_buffer_straw_stop_pipeline</a>      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
 </pre>
 </div>
 <div class="refsect1">
@@ -59,8 +59,8 @@ inside the 'check' directories of various GStreamer packages.
 <a name="gstreamer-libs-GstBufferStraw.details"></a><h2>Details</h2>
 <div class="refsect2">
 <a name="gst-buffer-straw-start-pipeline"></a><h3>gst_buffer_straw_start_pipeline ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_buffer_straw_start_pipeline     (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_buffer_straw_start_pipeline     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
 <p>
 Sets up a pipeline for buffer sucking. This will allow you to call
 <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()"><code class="function">gst_buffer_straw_get_buffer()</code></a> to access buffers as they pass over <em class="parameter"><code>pad</code></em>.
@@ -68,7 +68,7 @@ Sets up a pipeline for buffer sucking. This will allow you to call
 <p>
 This function is normally used in unit tests that want to verify that a
 particular element is outputting correct buffers. For example, you would make
-a pipeline via <a href="../gstreamer-1.0/gstreamer-GstParse.html#gst-parse-launch"><code class="function">gst_parse_launch()</code></a>, pull out the pad you want to monitor, then
+a pipeline via <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch"><code class="function">gst_parse_launch()</code></a>, pull out the pad you want to monitor, then
 call <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-get-buffer" title="gst_buffer_straw_get_buffer ()"><code class="function">gst_buffer_straw_get_buffer()</code></a> to get the buffers that pass through <em class="parameter"><code>pad</code></em>.
 The pipeline will block until you have sucked off the buffers.
 </p>
@@ -99,8 +99,8 @@ from libcheck, so you cannot use it outside unit tests.
 <hr>
 <div class="refsect2">
 <a name="gst-buffer-straw-get-buffer"></a><h3>gst_buffer_straw_get_buffer ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_buffer_straw_get_buffer         (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_buffer_straw_get_buffer         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
 <p>
 Get one buffer from <em class="parameter"><code>pad</code></em>. Implemented via buffer probes. This function will
 block until the pipeline passes a buffer over <em class="parameter"><code>pad</code></em>, so for robust behavior
@@ -126,7 +126,7 @@ You must have previously called <a class="link" href="gstreamer-libs-GstBufferSt
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the captured <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.</td>
+<td>the captured <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.</td>
 </tr>
 </tbody>
 </table></div>
@@ -134,10 +134,10 @@ You must have previously called <a class="link" href="gstreamer-libs-GstBufferSt
 <hr>
 <div class="refsect2">
 <a name="gst-buffer-straw-stop-pipeline"></a><h3>gst_buffer_straw_stop_pipeline ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_buffer_straw_stop_pipeline      (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_buffer_straw_stop_pipeline      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *bin</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
 <p>
-Set <em class="parameter"><code>bin</code></em> to <a href="../gstreamer-1.0/GstElement.html#GST-STATE-NULL:CAPS"><span class="type">GST_STATE_NULL</span></a> and release resource allocated in
+Set <em class="parameter"><code>bin</code></em> to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><span class="type">GST_STATE_NULL</span></a> and release resource allocated in
 <a class="link" href="gstreamer-libs-GstBufferStraw.html#gst-buffer-straw-start-pipeline" title="gst_buffer_straw_start_pipeline ()"><code class="function">gst_buffer_straw_start_pipeline()</code></a>.
 </p>
 <p>
index 590f22429fb301d5aa578a60d6c494483d5f5c61..5bb39f6a226e2b0ec0b3136bd2f3972839a7c3a9 100644 (file)
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> size</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> fixed</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free" title="gst_byte_writer_free ()">gst_byte_writer_free</a>                (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free-and-get-buffer" title="gst_byte_writer_free_and_get_buffer ()">gst_byte_writer_free_and_get_buffer</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free-and-get-buffer" title="gst_byte_writer_free_and_get_buffer ()">gst_byte_writer_free_and_get_buffer</a> (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
 <span class="returnvalue">guint8</span> *            <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-free-and-get-data" title="gst_byte_writer_free_and_get_data ()">gst_byte_writer_free_and_get_data</a>   (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset" title="gst_byte_writer_reset ()">gst_byte_writer_reset</a>               (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
 <span class="returnvalue">guint8</span> *            <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset-and-get-data" title="gst_byte_writer_reset_and_get_data ()">gst_byte_writer_reset_and_get_data</a>  (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset-and-get-buffer" title="gst_byte_writer_reset_and_get_buffer ()">gst_byte_writer_reset_and_get_buffer</a>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-reset-and-get-buffer" title="gst_byte_writer_reset_and_get_buffer ()">gst_byte_writer_reset_and_get_buffer</a>
                                                         (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-get-pos" title="gst_byte_writer_get_pos ()">gst_byte_writer_get_pos</a>             (<em class="parameter"><code>const <a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="gstreamer-libs-GstByteWriter.html#gst-byte-writer-set-pos" title="gst_byte_writer_set_pos ()">gst_byte_writer_set_pos</a>             (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>,
@@ -437,10 +437,10 @@ Frees <em class="parameter"><code>writer</code></em> and all memory allocated by
 <hr>
 <div class="refsect2">
 <a name="gst-byte-writer-free-and-get-buffer"></a><h3>gst_byte_writer_free_and_get_buffer ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_byte_writer_free_and_get_buffer (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_byte_writer_free_and_get_buffer (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);</pre>
 <p>
 Frees <em class="parameter"><code>writer</code></em> and all memory allocated by it except
-the current data, which is returned as <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.
+the current data, which is returned as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>.
 </p>
 <p>
 Free-function: gst_buffer_unref
@@ -456,7 +456,7 @@ Free-function: gst_buffer_unref
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the current data as buffer. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
+<td>the current data as buffer. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
 after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
@@ -538,7 +538,7 @@ usage. <span class="annotation">[<acronym title="Parameter points to an array of
 <hr>
 <div class="refsect2">
 <a name="gst-byte-writer-reset-and-get-buffer"></a><h3>gst_byte_writer_reset_and_get_buffer ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_byte_writer_reset_and_get_buffer
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="returnvalue">GstBuffer</span></a> *         gst_byte_writer_reset_and_get_buffer
                                                         (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstByteWriter.html#GstByteWriter" title="GstByteWriter"><span class="type">GstByteWriter</span></a> *writer</code></em>);</pre>
 <p>
 Resets <em class="parameter"><code>writer</code></em> and returns the current data as buffer.
@@ -556,7 +556,7 @@ Free-function: gst_buffer_unref
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the current data as buffer. <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
+<td>the current data as buffer. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#gst-buffer-unref"><code class="function">gst_buffer_unref()</code></a>
 after usage. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
index ed2a42ee80b9e166f0f27fd2dfe33e20d9113517..31b36ab845526777c564cf55b39e304803bff4c4 100644 (file)
                                                          c)
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-init" title="gst_check_init ()">gst_check_init</a>                      (<em class="parameter"><code><span class="type">int</span> *argc</code></em>,
                                                          <em class="parameter"><code><span class="type">char</span> **argv[]</code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-message-error" title="gst_check_message_error ()">gst_check_message_error</a>             (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-message-error" title="gst_check_message_error ()">gst_check_message_error</a>             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> domain</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> code</code></em>);
-<a href="../gstreamer-1.0/GstElement.html"><span class="returnvalue">GstElement</span></a> *        <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-element" title="gst_check_setup_element ()">gst_check_setup_element</a>             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);
-<a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad" title="gst_check_setup_sink_pad ()">gst_check_setup_sink_pad</a>            (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
-<a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad" title="gst_check_setup_src_pad ()">gst_check_setup_src_pad</a>             (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
-<a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad-by-name" title="gst_check_setup_sink_pad_by_name ()">gst_check_setup_sink_pad_by_name</a>    (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a> *        <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-element" title="gst_check_setup_element ()">gst_check_setup_element</a>             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad" title="gst_check_setup_sink_pad ()">gst_check_setup_sink_pad</a>            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad" title="gst_check_setup_src_pad ()">gst_check_setup_src_pad</a>             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-sink-pad-by-name" title="gst_check_setup_sink_pad_by_name ()">gst_check_setup_sink_pad_by_name</a>    (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
-<a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-by-name" title="gst_check_setup_src_pad_by_name ()">gst_check_setup_src_pad_by_name</a>     (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-setup-src-pad-by-name" title="gst_check_setup_src_pad_by_name ()">gst_check_setup_src_pad_by_name</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-pad-by-name" title="gst_check_teardown_pad_by_name ()">gst_check_teardown_pad_by_name</a>      (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-pad-by-name" title="gst_check_teardown_pad_by_name ()">gst_check_teardown_pad_by_name</a>      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-element" title="gst_check_teardown_element ()">gst_check_teardown_element</a>          (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-sink-pad" title="gst_check_teardown_sink_pad ()">gst_check_teardown_sink_pad</a>         (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-src-pad" title="gst_check_teardown_src_pad ()">gst_check_teardown_src_pad</a>          (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-element" title="gst_check_teardown_element ()">gst_check_teardown_element</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-sink-pad" title="gst_check_teardown_sink_pad ()">gst_check_teardown_sink_pad</a>         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-teardown-src-pad" title="gst_check_teardown_src_pad ()">gst_check_teardown_src_pad</a>          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-drop-buffers" title="gst_check_drop_buffers ()">gst_check_drop_buffers</a>              (<em class="parameter"><code><span class="type">void</span></code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-buffer-data" title="gst_check_buffer_data ()">gst_check_buffer_data</a>               (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-buffer-data" title="gst_check_buffer_data ()">gst_check_buffer_data</a>               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> data</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> size</code></em>);
-<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-caps-equal" title="gst_check_caps_equal ()">gst_check_caps_equal</a>                (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-caps-equal" title="gst_check_caps_equal ()">gst_check_caps_equal</a>                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-element-push-buffer-list" title="gst_check_element_push_buffer_list ()">gst_check_element_push_buffer_list</a>  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_in</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_out</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-element-push-buffer" title="gst_check_element_push_buffer ()">gst_check_element_push_buffer</a>       (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>                <a class="link" href="gstreamer-libs-GstCheck.html#gst-check-run-suite" title="gst_check_run_suite ()">gst_check_run_suite</a>                 (<em class="parameter"><code><span class="type">Suite</span> *suite</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *fname</code></em>);
@@ -459,15 +459,15 @@ macro is for use in unit tests.
 <hr>
 <div class="refsect2">
 <a name="gst-check-message-error"></a><h3>gst_check_message_error ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_message_error             (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_message_error             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessage"><span class="type">GstMessage</span></a> *message</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMessage.html#GstMessageType"><span class="type">GstMessageType</span></a> type</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> domain</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> code</code></em>);</pre>
 </div>
 <hr>
 <div class="refsect2">
 <a name="gst-check-setup-element"></a><h3>gst_check_setup_element ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstElement.html"><span class="returnvalue">GstElement</span></a> *        gst_check_setup_element             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="returnvalue">GstElement</span></a> *        gst_check_setup_element             (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *factory</code></em>);</pre>
 <p>
 setup an element for a filter test with mysrcpad and mysinkpad
 </p>
@@ -489,8 +489,8 @@ setup an element for a filter test with mysrcpad and mysinkpad
 <hr>
 <div class="refsect2">
 <a name="gst-check-setup-sink-pad"></a><h3>gst_check_setup_sink_pad ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_sink_pad            (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_sink_pad            (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -513,8 +513,8 @@ setup an element for a filter test with mysrcpad and mysinkpad
 <hr>
 <div class="refsect2">
 <a name="gst-check-setup-src-pad"></a><h3>gst_check_setup_src_pad ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_src_pad             (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_src_pad             (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -537,8 +537,8 @@ setup an element for a filter test with mysrcpad and mysinkpad
 <hr>
 <div class="refsect2">
 <a name="gst-check-setup-sink-pad-by-name"></a><h3>gst_check_setup_sink_pad_by_name ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_sink_pad_by_name    (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_sink_pad_by_name    (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -566,8 +566,8 @@ setup an element for a filter test with mysrcpad and mysinkpad
 <hr>
 <div class="refsect2">
 <a name="gst-check-setup-src-pad-by-name"></a><h3>gst_check_setup_src_pad_by_name ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_src_pad_by_name     (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a> *            gst_check_setup_src_pad_by_name     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPadTemplate.html#GstStaticPadTemplate"><span class="type">GstStaticPadTemplate</span></a> *tmpl</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -595,23 +595,23 @@ setup an element for a filter test with mysrcpad and mysinkpad
 <hr>
 <div class="refsect2">
 <a name="gst-check-teardown-pad-by-name"></a><h3>gst_check_teardown_pad_by_name ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_pad_by_name      (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_pad_by_name      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
 </div>
 <hr>
 <div class="refsect2">
 <a name="gst-check-teardown-element"></a><h3>gst_check_teardown_element ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_element          (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_element          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
 </div>
 <hr>
 <div class="refsect2">
 <a name="gst-check-teardown-sink-pad"></a><h3>gst_check_teardown_sink_pad ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_sink_pad         (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_sink_pad         (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
 </div>
 <hr>
 <div class="refsect2">
 <a name="gst-check-teardown-src-pad"></a><h3>gst_check_teardown_src_pad ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_src_pad          (<em class="parameter"><code><a href="../gstreamer-1.0/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_teardown_src_pad          (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>);</pre>
 </div>
 <hr>
 <div class="refsect2">
@@ -625,7 +625,7 @@ emptying the list.
 <hr>
 <div class="refsect2">
 <a name="gst-check-buffer-data"></a><h3>gst_check_buffer_data ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_buffer_data               (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_buffer_data               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"><span class="type">gconstpointer</span></a> data</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> size</code></em>);</pre>
 <p>
@@ -652,8 +652,8 @@ Compare the buffer contents with <em class="parameter"><code>data</code></em> an
 <hr>
 <div class="refsect2">
 <a name="gst-check-caps-equal"></a><h3>gst_check_caps_equal ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_caps_equal                (<em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);</pre>
+<pre class="programlisting"><span class="returnvalue">void</span>                gst_check_caps_equal                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps1</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps2</code></em>);</pre>
 <p>
 Compare two caps with gst_caps_is_equal and fail unless they are
 equal.
@@ -677,10 +677,10 @@ equal.
 <a name="gst-check-element-push-buffer-list"></a><h3>gst_check_element_push_buffer_list ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_check_element_push_buffer_list  (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_in</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *buffer_out</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> last_flow_return</code></em>);</pre>
 <p>
 Create an <em class="parameter"><code>element</code></em> with the factory with the name and push the buffers in
 <em class="parameter"><code>buffer_in</code></em> to this element. The element should create the buffers equal to
@@ -721,10 +721,10 @@ the element. <span class="annotation">[<acronym title="Generics and defining ele
 <div class="refsect2">
 <a name="gst-check-element-push-buffer"></a><h3>gst_check_element_push_buffer ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gst_check_element_push_buffer       (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *element_name</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_in</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_in</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buffer_out</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> *caps_out</code></em>);</pre>
 <p>
 Create an <em class="parameter"><code>element</code></em> with the factory with the name and push the
 <em class="parameter"><code>buffer_in</code></em> to this element. The element should create one buffer
index 3bf804c2eec8d34602d406aba39730ba97f3e4aa..b4d3d36423d9247679e2688510bdfbd0aaa35835 100644 (file)
@@ -80,11 +80,11 @@ Content of a <a class="link" href="gstreamer-libs-GstNetTimePacket.html#GstNetTi
 <col align="left" valign="top">
 <tbody>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.local-time"></a>local_time</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.local-time"></a>local_time</code></em>;</span></p></td>
 <td>the local time when this packet was sent</td>
 </tr>
 <tr>
-<td><p><span class="term"><a href="../gstreamer-1.0/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.remote-time"></a>remote_time</code></em>;</span></p></td>
+<td><p><span class="term"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> <em class="structfield"><code><a name="GstNetTimePacket.remote-time"></a>remote_time</code></em>;</span></p></td>
 <td>the remote time observation</td>
 </tr>
 </tbody>
@@ -110,7 +110,7 @@ caller is responsible for ensuring that <em class="parameter"><code>buffer</code
 </p>
 <p>
 If <em class="parameter"><code>buffer</code></em> is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, the local and remote times will be set to
-<a href="../gstreamer-1.0/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a>.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a>.
 </p>
 <p>
 MT safe. Caller owns return value (gst_net_time_packet_free to free).
@@ -235,7 +235,7 @@ MT safe. Caller owns return value (g_free to free).
 </div>
 <div class="refsect1">
 <a name="gstreamer-libs-GstNetTimePacket.see-also"></a><h2>See Also</h2>
-<a href="../gstreamer-1.0/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>, <a class="link" href="GstNetClientClock.html" title="GstNetClientClock"><span class="type">GstNetClientClock</span></a>, <a class="link" href="GstNetTimeProvider.html" title="GstNetTimeProvider"><span class="type">GstNetTimeProvider</span></a>
 </div>
 </div>
 <div class="footer">
index 314e510efe15e2e71bce19c6b86bd2f73656dd2b..408ba594f37da432abeee6bba5f64d11063fb6f1 100644 (file)
@@ -41,7 +41,7 @@
 #include &lt;gst/check/gstconsistencychecker.h&gt;
 
                     <a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency">GstStreamConsistency</a>;
-<a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-new" title="gst_consistency_checker_new ()">gst_consistency_checker_new</a>      (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
+<a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-new" title="gst_consistency_checker_new ()">gst_consistency_checker_new</a>      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-reset" title="gst_consistency_checker_reset ()">gst_consistency_checker_reset</a>       (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="type">GstStreamConsistency</span></a> *consist</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="gstreamer-libs-GstStreamConsistency.html#gst-consistency-checker-free" title="gst_consistency_checker_free ()">gst_consistency_checker_free</a>        (<em class="parameter"><code><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="type">GstStreamConsistency</span></a> *consist</code></em>);
 </pre>
@@ -65,7 +65,7 @@ Opaque consistency checker handle.
 <hr>
 <div class="refsect2">
 <a name="gst-consistency-checker-new"></a><h3>gst_consistency_checker_new ()</h3>
-<pre class="programlisting"><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * gst_consistency_checker_new      (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
+<pre class="programlisting"><a class="link" href="gstreamer-libs-GstStreamConsistency.html#GstStreamConsistency" title="GstStreamConsistency"><span class="returnvalue">GstStreamConsistency</span></a> * gst_consistency_checker_new      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *pad</code></em>);</pre>
 <p>
 Sets up a data probe on the given pad which will raise assertions if the
 data flow is inconsistent.
@@ -75,7 +75,7 @@ data flow is inconsistent.
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>pad</code></em> :</span></p></td>
-<td>The <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> on which the dataflow will be checked.</td>
+<td>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> on which the dataflow will be checked.</td>
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
index d17bf32abd1570766db18815cb1b588378a08f32..e99e96a50d780c6cc924156cb703733d0e5579d1 100644 (file)
 <pre class="synopsis">
 #include &lt;gst/base/gsttypefindhelper.h&gt;
 
-<a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper" title="gst_type_find_helper ()">gst_type_find_helper</a>                (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper" title="gst_type_find_helper ()">gst_type_find_helper</a>                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> size</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-buffer" title="gst_type_find_helper_for_buffer ()">gst_type_find_helper_for_buffer</a>     (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-extension" title="gst_type_find_helper_for_extension ()">gst_type_find_helper_for_extension</a>  (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-buffer" title="gst_type_find_helper_for_buffer ()">gst_type_find_helper_for_buffer</a>     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-extension" title="gst_type_find_helper_for_extension ()">gst_type_find_helper_for_extension</a>  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-data" title="gst_type_find_helper_for_data ()">gst_type_find_helper_for_data</a>       (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-for-data" title="gst_type_find_helper_for_data ()">gst_type_find_helper_for_data</a>       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
                                                          <em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> size</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
-<a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()">*GstTypeFindHelperGetRangeFunction</a>)
-                                                        (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (<a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()">*GstTypeFindHelperGetRangeFunction</a>)
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> length</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);
-<a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-get-range" title="gst_type_find_helper_get_range ()">gst_type_find_helper_get_range</a>      (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-get-range" title="gst_type_find_helper_get_range ()">gst_type_find_helper_get_range</a>      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
                                                          <em class="parameter"><code><a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()"><span class="type">GstTypeFindHelperGetRangeFunction</span></a> func</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> size</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);
 </pre>
 </div>
 <div class="refsect1">
@@ -78,10 +78,10 @@ typefinding in push mode from a chain function.
 <a name="gstreamer-libs-GstTypeFindHelper.details"></a><h2>Details</h2>
 <div class="refsect2">
 <a name="gst-type-find-helper"></a><h3>gst_type_find_helper ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper                (<em class="parameter"><code><a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper                (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> *src</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> size</code></em>);</pre>
 <p>
-Tries to find what type of data is flowing from the given source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>.
+Tries to find what type of data is flowing from the given source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>.
 </p>
 <p>
 Free-function: gst_caps_unref
@@ -91,7 +91,7 @@ Free-function: gst_caps_unref
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
-<td>A source <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>
+<td>A source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>
 </td>
 </tr>
 <tr>
@@ -100,8 +100,8 @@ Free-function: gst_caps_unref
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
-Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
+Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -110,17 +110,17 @@ Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macr
 <hr>
 <div class="refsect2">
 <a name="gst-type-find-helper-for-buffer"></a><h3>gst_type_find_helper_for_buffer ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_for_buffer     (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_for_buffer     (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> *buf</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
 <p>
-Tries to find what type of data is contained in the given <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>, the
+Tries to find what type of data is contained in the given <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>, the
 assumption being that the buffer represents the beginning of the stream or
 file.
 </p>
 <p>
 All available typefinders will be called on the data in order of rank. If
-a typefinding function returns a probability of <a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
+a typefinding function returns a probability of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
 typefinding is stopped immediately and the found caps will be returned
 right away. Otherwise, all available typefind functions will the tried,
 and the caps with the highest probability will be returned, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if
@@ -138,7 +138,7 @@ Free-function: gst_caps_unref
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>buf</code></em> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> with data to typefind. <span class="annotation">[<acronym title="Parameter for input. Default is transfer none."><span class="acronym">in</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> with data to typefind. <span class="annotation">[<acronym title="Parameter for input. Default is transfer none."><span class="acronym">in</span></acronym>][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
 </td>
 </tr>
 <tr>
@@ -149,9 +149,9 @@ caps, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Mac
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
 if no type could be found. The caller should free the caps returned
-with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -160,10 +160,10 @@ with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code clas
 <hr>
 <div class="refsect2">
 <a name="gst-type-find-helper-for-extension"></a><h3>gst_type_find_helper_for_extension ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_for_extension  (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_for_extension  (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>);</pre>
 <p>
-Tries to find the best <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> associated with <em class="parameter"><code>extension</code></em>.
+Tries to find the best <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> associated with <em class="parameter"><code>extension</code></em>.
 </p>
 <p>
 All available typefinders will be checked against the extension in order
@@ -187,9 +187,9 @@ Free-function: gst_caps_unref
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to <em class="parameter"><code>extension</code></em>, or
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to <em class="parameter"><code>extension</code></em>, or
 <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no type could be found. The caller should free the caps
-returned with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+returned with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -198,10 +198,10 @@ returned with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><
 <hr>
 <div class="refsect2">
 <a name="gst-type-find-helper-for-data"></a><h3>gst_type_find_helper_for_data ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_for_data       (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_for_data       (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
                                                          <em class="parameter"><code>const <span class="type">guint8</span> *data</code></em>,
                                                          <em class="parameter"><code><span class="type">gsize</span> size</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
 <p>
 Tries to find what type of data is contained in the given <em class="parameter"><code>data</code></em>, the
 assumption being that the data represents the beginning of the stream or
@@ -209,7 +209,7 @@ file.
 </p>
 <p>
 All available typefinders will be called on the data in order of rank. If
-a typefinding function returns a probability of <a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
+a typefinding function returns a probability of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GST-TYPE-FIND-MAXIMUM:CAPS"><span class="type">GST_TYPE_FIND_MAXIMUM</span></a>,
 typefinding is stopped immediately and the found caps will be returned
 right away. Otherwise, all available typefind functions will the tried,
 and the caps with the highest probability will be returned, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if
@@ -243,9 +243,9 @@ caps, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Mac
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>
 if no type could be found. The caller should free the caps returned
-with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a>. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
@@ -254,12 +254,12 @@ with <a href="../gstreamer-1.0/gstreamer-GstCaps.html#gst-caps-unref"><code clas
 <hr>
 <div class="refsect2">
 <a name="GstTypeFindHelperGetRangeFunction"></a><h3>GstTypeFindHelperGetRangeFunction ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstTypeFindHelperGetRangeFunction)
-                                                        (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>       (*GstTypeFindHelperGetRangeFunction)
+                                                        (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> offset</code></em>,
                                                          <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> length</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a> **buffer</code></em>);</pre>
 <p>
 This function will be called by <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper-get-range" title="gst_type_find_helper_get_range ()"><code class="function">gst_type_find_helper_get_range()</code></a> when
 typefinding functions request to peek at the data of a stream at certain
@@ -268,14 +268,14 @@ stored in <em class="parameter"><code>buffer</code></em>. The  contents of <em c
 return value.
 </p>
 <p>
-This function is supposed to behave exactly like a <a href="../gstreamer-1.0/GstPad.html#GstPadGetRangeFunction"><span class="type">GstPadGetRangeFunction</span></a>.
+This function is supposed to behave exactly like a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstPadGetRangeFunction"><span class="type">GstPadGetRangeFunction</span></a>.
 </p>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
-<td>a <a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> that will handle the getrange request</td>
+<td>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> that will handle the getrange request</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>parent</code></em> :</span></p></td>
@@ -303,12 +303,12 @@ This function is supposed to behave exactly like a <a href="../gstreamer-1.0/Gst
 <hr>
 <div class="refsect2">
 <a name="gst-type-find-helper-get-range"></a><h3>gst_type_find_helper_get_range ()</h3>
-<pre class="programlisting"><a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_get_range      (<em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a> *           gst_type_find_helper_get_range      (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *obj</code></em>,
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *parent</code></em>,
                                                          <em class="parameter"><code><a class="link" href="gstreamer-libs-GstTypeFindHelper.html#GstTypeFindHelperGetRangeFunction" title="GstTypeFindHelperGetRangeFunction ()"><span class="type">GstTypeFindHelperGetRangeFunction</span></a> func</code></em>,
                                                          <em class="parameter"><code><span class="type">guint64</span> size</code></em>,
                                                          <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *extension</code></em>,
-                                                         <em class="parameter"><code><a href="../gstreamer-1.0/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTypeFind.html#GstTypeFindProbability"><span class="type">GstTypeFindProbability</span></a> *prob</code></em>);</pre>
 <p>
 Utility function to do pull-based typefinding. Unlike <a class="link" href="gstreamer-libs-GstTypeFindHelper.html#gst-type-find-helper" title="gst_type_find_helper ()"><code class="function">gst_type_find_helper()</code></a>
 however, this function will use the specified function <em class="parameter"><code>func</code></em> to obtain the
@@ -332,7 +332,7 @@ Free-function: gst_caps_unref
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
-<td>A <a href="../gstreamer-1.0/GstObject.html"><span class="type">GstObject</span></a> that will be passed as first argument to <em class="parameter"><code>func</code></em>
+<td>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> that will be passed as first argument to <em class="parameter"><code>func</code></em>
 </td>
 </tr>
 <tr>
@@ -361,8 +361,8 @@ caps, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Mac
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
-<td>the <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
-Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
+<td>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> corresponding to the data stream.
+Returns <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> if no <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a> matches the data stream. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
 </td>
 </tr>
 </tbody>
index 764f7f9d1e160fbf6a2e30e306027edd7d6b2b69..9d5099a49c3fa2abe8a26c81ae40c14c7e342c4f 100644 (file)
@@ -64,7 +64,7 @@
     <keyword type="macro" name="GST_BASE_PARSE_LOST_SYNC()" link="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-LOST-SYNC:CAPS"/>
     <keyword type="macro" name="GST_BASE_PARSE_SINK_PAD()" link="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-SINK-PAD:CAPS"/>
     <keyword type="macro" name="GST_BASE_PARSE_SRC_PAD()" link="gstreamer-libs-GstBaseParse.html#GST-BASE-PARSE-SRC-PAD:CAPS"/>
-    <keyword type="" name="Controlled shutdown of live sources in applications" link="GstBaseSrc.html#idp5184896"/>
+    <keyword type="" name="Controlled shutdown of live sources in applications" link="GstBaseSrc.html#idp6837152"/>
     <keyword type="struct" name="struct GstBaseSrc" link="GstBaseSrc.html#GstBaseSrc-struct"/>
     <keyword type="struct" name="struct GstBaseSrcClass" link="GstBaseSrc.html#GstBaseSrcClass"/>
     <keyword type="enum" name="enum GstBaseSrcFlags" link="GstBaseSrc.html#GstBaseSrcFlags"/>
     <keyword type="property" name="The &quot;sync&quot; property" link="GstBaseSink.html#GstBaseSink--sync"/>
     <keyword type="property" name="The &quot;throttle-time&quot; property" link="GstBaseSink.html#GstBaseSink--throttle-time"/>
     <keyword type="property" name="The &quot;ts-offset&quot; property" link="GstBaseSink.html#GstBaseSink--ts-offset"/>
-    <keyword type="" name="Use Cases" link="GstBaseTransform.html#idp5388448"/>
-    <keyword type="" name="Sub-class settable flags on GstBaseTransform" link="GstBaseTransform.html#idp6912544"/>
+    <keyword type="" name="Use Cases" link="GstBaseTransform.html#idp6797872"/>
+    <keyword type="" name="Sub-class settable flags on GstBaseTransform" link="GstBaseTransform.html#idp9811680"/>
     <keyword type="struct" name="struct GstBaseTransform" link="GstBaseTransform.html#GstBaseTransform-struct"/>
     <keyword type="struct" name="struct GstBaseTransformClass" link="GstBaseTransform.html#GstBaseTransformClass"/>
     <keyword type="function" name="gst_base_transform_is_passthrough ()" link="GstBaseTransform.html#gst-base-transform-is-passthrough"/>
     <keyword type="function" name="gst_base_transform_set_passthrough ()" link="GstBaseTransform.html#gst-base-transform-set-passthrough"/>
+    <keyword type="function" name="gst_base_transform_set_prefer_passthrough ()" link="GstBaseTransform.html#gst-base-transform-set-prefer-passthrough" since="1.0.1"/>
     <keyword type="function" name="gst_base_transform_is_in_place ()" link="GstBaseTransform.html#gst-base-transform-is-in-place"/>
     <keyword type="function" name="gst_base_transform_set_in_place ()" link="GstBaseTransform.html#gst-base-transform-set-in-place"/>
     <keyword type="function" name="gst_base_transform_is_qos_enabled ()" link="GstBaseTransform.html#gst-base-transform-is-qos-enabled"/>
index 809bddf614be9d70f3d653b7b75ff0def8092e37..0f61876455e6f30f84feea81b5abfdac7403c48f 100644 (file)
@@ -34,7 +34,7 @@
 <span class="refentrytitle"><a href="GstBaseSrc.html">GstBaseSrc</a></span><span class="refpurpose"> — Base class for getrange based source elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"> — Base class for sink elements</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="GstBaseTransform.html">GstBaseTransform</a></span><span class="refpurpose"> — Base class for simple transform filters</span>
index ffc5c113730086a967cd5e0a8ddfa6c9d49e7cf5..98ba67c19286f765545b3ab7c4cff9fa91648962 100644 (file)
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Library Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Library 1.0 (1.0.0)
+      for GStreamer Library 1.0 (1.0.2)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/</a>.
     </p></div>
@@ -34,7 +34,7 @@
 <span class="refentrytitle"><a href="GstBaseSrc.html">GstBaseSrc</a></span><span class="refpurpose"> — Base class for getrange based source elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="GstBaseSink.html">GstBaseSink</a></span><span class="refpurpose"> — Base class for sink elements</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="GstBaseTransform.html">GstBaseTransform</a></span><span class="refpurpose"> — Base class for simple transform filters</span>
index 021eceb393dad6fda47a928f5616c759cf9cb813..323f0cdbf37f5793f9b4270985a0bb43c7e0cc4c 100644 (file)
 <ANCHOR id="GstBaseSink--sync" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--sync">
 <ANCHOR id="GstBaseSink--throttle-time" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--throttle-time">
 <ANCHOR id="GstBaseSink--ts-offset" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--ts-offset">
+<ANCHOR id="GstBaseSink.see-also" href="gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink.see-also">
 <ANCHOR id="GstBaseTransform" href="gstreamer-libs-1.0/GstBaseTransform.html">
 <ANCHOR id="GstBaseTransform.synopsis" href="gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransform.synopsis">
 <ANCHOR id="GstBaseTransform.object-hierarchy" href="gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransform.object-hierarchy">
 <ANCHOR id="GstBaseTransformClass" href="gstreamer-libs-1.0/GstBaseTransform.html#GstBaseTransformClass">
 <ANCHOR id="gst-base-transform-is-passthrough" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-is-passthrough">
 <ANCHOR id="gst-base-transform-set-passthrough" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-set-passthrough">
+<ANCHOR id="gst-base-transform-set-prefer-passthrough" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-set-prefer-passthrough">
 <ANCHOR id="gst-base-transform-is-in-place" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-is-in-place">
 <ANCHOR id="gst-base-transform-set-in-place" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-set-in-place">
 <ANCHOR id="gst-base-transform-is-qos-enabled" href="gstreamer-libs-1.0/GstBaseTransform.html#gst-base-transform-is-qos-enabled">
index ef9dd9361efb2f045441fe5a7ee7ec59e29f0d05..ba6774723a17c4f30a97113b6f455b42e0ea0319 100644 (file)
@@ -105,7 +105,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -353,6 +353,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -389,6 +392,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -888,14 +892,12 @@ upload: $(FORMATS)
        if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
        if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
        \
-       # upload releases to both 0.10.X/ and head/ subdirectories \
-       if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
-         export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
-         echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) mkdir -p $$DIR; \
-         rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
-       fi; \
+       # upload releases to both X.Y/ and head/ subdirectories \
+       export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
+       echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) mkdir -p $$DIR; \
+       rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
        \
        export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
        echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
index 177e5f8ffb36a6375573b858ae34550a6448cbed..5f7a0e0e67f24b3862b5b62857ae52dfcde79c64 100644 (file)
@@ -10,7 +10,7 @@
     by looking at all available elements in a system. This process is called
     autoplugging, and &GStreamer; contains high-quality autopluggers. If
     you're looking for an autoplugger, don't read any further and go to
-    <xref linkend="chapter-components"/>. This chapter will explain the
+    <xref linkend="chapter-playback-components"/>. This chapter will explain the
     <emphasis>concept</emphasis> of autoplugging and typefinding. It will
     explain what systems &GStreamer; includes to dynamically detect the
     type of a media stream, and how to generate a pipeline of decoder
     without needing any adaptations to its autopluggers.
   </para>
   <para>
-    We will first introduce the concept of MIME types as a dynamic and
+    We will first introduce the concept of Media types as a dynamic and
     extendible way of identifying media streams. After that, we will introduce
     the concept of typefinding to find the type of a media stream. Lastly,
     we will explain how autoplugging and the &GStreamer; registry can be
-    used to setup a pipeline that will convert media from one mimetype to
+    used to setup a pipeline that will convert media from one mediatype to
     another, for example for media decoding.
   </para>
 
-  <sect1 id="section-mime">
-    <title>MIME-types as a way to identify streams</title>
+  <sect1 id="section-media">
+    <title>Media types as a way to identify streams</title>
     <para>
       We have previously introduced the concept of capabilities as a way
       for elements (or, rather, pads) to agree on a media type when
       streaming data from one element to the next (see <xref
       linkend="section-caps"/>). We have explained that a capability is
-      a combination of a mimetype and a set of properties. For most
+      a combination of a media type and a set of properties. For most
       container formats (those are the files that you will find on your
       hard disk; Ogg, for example, is a container format), no properties
-      are needed to describe the stream. Only a MIME-type is needed. A
-      full list of MIME-types and accompanying properties can be found
+      are needed to describe the stream. Only a media type is needed. A
+      full list of media types and accompanying properties can be found
       in <ulink type="http"
       url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/section-types-definitions.html">the
       Plugin Writer's Guide</ulink>.
     </para> 
     <para>
-      An element must associate a MIME-type to its source and sink pads
+      An element must associate a media type to its source and sink pads
       when it is loaded into the system. &GStreamer; knows about the
       different elements and what type of data they expect and emit through
       the &GStreamer; registry. This allows for very dynamic and extensible
 
     <para>
       In <xref linkend="chapter-helloworld"/>, we've learned to build a
-      music player for Ogg/Vorbis files. Let's look at the MIME-types
+      music player for Ogg/Vorbis files. Let's look at the media types
       associated with each pad in this pipeline. <xref
-      linkend="section-mime-img"/> shows what MIME-type belongs to each
+      linkend="section-mime-img"/> shows what media type belongs to each
       pad in this pipeline.
     </para>
 
     <figure float="1" id="section-mime-img">
-      <title>The Hello world pipeline with MIME types</title>
+      <title>The Hello world pipeline with media types</title>
       <mediaobject>
         <imageobject>
           <imagedata scale="75" fileref="images/mime-world.&image;" format="&IMAGE;"/>
     <para>
       Plugins in &GStreamer; can, as mentioned before, implement typefinder
       functionality. A plugin implementing this functionality will submit
-      a mimetype, optionally a set of file extensions commonly used for this
+      a media type, optionally a set of file extensions commonly used for this
       media type, and a typefind function. Once this typefind function inside
       the plugin is called, the plugin will see if the data in this media
       stream matches a specific pattern that marks the media type identified
-      by that mimetype. If it does, it will notify the typefind element of
+      by that media type. If it does, it will notify the typefind element of
       this fact, telling which mediatype was recognized and how certain we
       are that this stream is indeed that mediatype. Once this run has been
       completed for all plugins implementing a typefind functionality, the
@@ -233,391 +233,10 @@ main (gint   argc,
   </sect1>
 
   <sect1 id="section-dynamic">
-    <title>Plugging together dynamic pipelines</title>
-    <warning><para>
-      The code in this section is broken, outdated and overly complicated.
-      Also, you should use decodebin, playbin or uridecodebin to get
-      decoders plugged automatically.
-    </para></warning>
-    <para> 
-      In this chapter we will see how you can create a dynamic pipeline. A
-      dynamic pipeline is a pipeline that is updated or created while data
-     is flowing through it. We will create a partial pipeline first and add
-      more elements while the pipeline is playing. The basis of this player
-      will be the application that we wrote in the previous section (<xref
-      linkend="section-typefinding"/>) to identify unknown media streams.
-    </para>
-    <!-- example-begin dynamic.c a --><!--
-#include &lt;gst/gst.h&gt;
-
-GstElement *pipeline;
-    --><!-- example-end dynamic.c a -->
-    <para>
-      Once the type of the media has been found, we will find elements in
-      the registry that can decode this streamtype. For this, we will get
-      all element factories (which we've seen before in <xref
-      linkend="section-elements-create"/>) and find the ones with the
-      given MIME-type and capabilities on their sinkpad. Note that we will
-      only use parsers, demuxers and decoders. We will not use factories for
-      any other element types, or we might get into a loop of encoders and
-      decoders. For this, we will want to build a list of <quote>allowed</quote>
-      factories right after initializing &GStreamer;.
-    </para>
-    <programlisting><!-- example-begin dynamic.c b -->
-static GList *factories;
-
-/*
- * This function is called by the registry loader. Its return value
- * (TRUE or FALSE) decides whether the given feature will be included
- * in the list that we're generating further down.
- */
-
-static gboolean
-cb_feature_filter (GstPluginFeature *feature,
-                  gpointer          data)
-{
-  const gchar *klass;
-  guint rank;
-
-  /* we only care about element factories */
-  if (!GST_IS_ELEMENT_FACTORY (feature))
-    return FALSE;
-
-  /* only parsers, demuxers and decoders */
-  klass = gst_element_factory_get_metadata (GST_ELEMENT_FACTORY (feature), GST_ELEMENT_METADATA_KLASS);
-  if (g_strrstr (klass, "Demux") == NULL &amp;&amp;
-      g_strrstr (klass, "Decoder") == NULL &amp;&amp;
-      g_strrstr (klass, "Parse") == NULL)
-    return FALSE;
-
-  /* only select elements with autoplugging rank */
-  rank = gst_plugin_feature_get_rank (feature);
-  if (rank &lt; GST_RANK_MARGINAL)
-    return FALSE;
-
-  return TRUE;
-}
-
-/*
- * This function is called to sort features by rank.
- */
-
-static gint
-cb_compare_ranks (GstPluginFeature *f1,
-                 GstPluginFeature *f2)
-{
-  return gst_plugin_feature_get_rank (f2) - gst_plugin_feature_get_rank (f1);
-}
-
-static void
-init_factories (void)
-{
-  /* first filter out the interesting element factories */
-  factories = gst_registry_feature_filter (
-      gst_registry_get (),
-      (GstPluginFeatureFilter) cb_feature_filter, FALSE, NULL);
-
-  /* sort them according to their ranks */
-  factories = g_list_sort (factories, (GCompareFunc) cb_compare_ranks);
-}
-    <!-- example-end dynamic.c b --></programlisting>
-    <para>
-      From this list of element factories, we will select the one that most
-      likely will help us decoding a media stream to a given output type.
-      For each newly created element, we will again try to autoplug new
-      elements to its source pad(s). Also, if the element has dynamic pads
-      (which we've seen before in <xref linkend="section-pads-dynamic"/>),
-      we will listen for newly created source pads and handle those, too.
-      The following code replaces the <function>cb_type_found</function>
-      from the previous section with a function to initiate autoplugging,
-      which will continue with the above approach.
-    </para>
-    <programlisting><!-- example-begin dynamic.c c -->
-static void try_to_plug (GstPad *pad, GstCaps *caps);
-
-static GstElement *audiosink;
-
-static void
-cb_newpad (GstElement *element,
-          GstPad     *pad,
-          gpointer    data)
-{
-  GstCaps *caps;
-
-  caps = gst_pad_query_caps (pad, NULL);
-  try_to_plug (pad, caps);
-  gst_caps_unref (caps);
-}
-
-static void
-close_link (GstPad      *srcpad,
-           GstElement  *sinkelement,
-           const gchar *padname,
-           const GList *templlist)
-{
-  GstPad *pad;
-  gboolean has_dynamic_pads = FALSE;
-
-  g_print ("Plugging pad %s:%s to newly created %s:%s\n",
-          gst_object_get_name (GST_OBJECT (gst_pad_get_parent (srcpad))),
-          gst_pad_get_name (srcpad),
-          gst_object_get_name (GST_OBJECT (sinkelement)), padname);
-
-  /* add the element to the pipeline and set correct state */
-  if (sinkelement != audiosink) {
-    gst_bin_add (GST_BIN (pipeline), sinkelement);
-    gst_element_set_state (sinkelement, GST_STATE_READY);
-  }
-  pad = gst_element_get_static_pad (sinkelement, padname);
-  gst_pad_link (srcpad, pad);
-  if (sinkelement != audiosink) {
-    gst_element_set_state (sinkelement, GST_STATE_PAUSED);
-  }
-  gst_object_unref (GST_OBJECT (pad));
-
-  /* if we have static source pads, link those. If we have dynamic
-   * source pads, listen for pad-added signals on the element */
-  for ( ; templlist != NULL; templlist = templlist->next) {
-    GstStaticPadTemplate *templ = templlist->data;
-
-    /* only sourcepads, no request pads */
-    if (templ->direction != GST_PAD_SRC ||
-        templ->presence == GST_PAD_REQUEST) {
-      continue;
-    }
-
-    switch (templ->presence) {
-      case GST_PAD_ALWAYS: {
-        GstPad *pad = gst_element_get_static_pad (sinkelement, templ->name_template);
-        GstCaps *caps = gst_pad_query_caps (pad, NULL);
-
-        /* link */
-        try_to_plug (pad, caps);
-        gst_object_unref (GST_OBJECT (pad));
-        gst_caps_unref (caps);
-        break;
-      }
-      case GST_PAD_SOMETIMES:
-        has_dynamic_pads = TRUE;
-        break;
-      default:
-        break;
-    }
-  }
-
-  /* listen for newly created pads if this element supports that */
-  if (has_dynamic_pads) {
-    g_signal_connect (sinkelement, "pad-added", G_CALLBACK (cb_newpad), NULL);
-  }
-}
-
-static void
-try_to_plug (GstPad        *pad,
-            GstCaps       *caps)
-{
-  GstObject *parent = GST_OBJECT (GST_OBJECT_PARENT (pad));
-  const gchar *mime;
-  const GList *item;
-  GstCaps *res, *audiocaps;
-
-  /* don't plug if we're already plugged - FIXME: memleak for pad */
-  if (GST_PAD_IS_LINKED (gst_element_get_static_pad (audiosink, "sink"))) {
-    g_print ("Omitting link for pad %s:%s because we're already linked\n",
-            GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
-    return;
-  }
-
-  /* as said above, we only try to plug audio... Omit video */
-  mime = gst_structure_get_name (gst_caps_get_structure (caps, 0));
-  if (g_strrstr (mime, "video")) {
-    g_print ("Omitting link for pad %s:%s because mimetype %s is non-audio\n",
-            GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad), mime);
-    return;
-  }
-
-  /* can it link to the audiopad? */
-  audiocaps = gst_pad_query_caps (gst_element_get_static_pad (audiosink, "sink"),
-  NULL);
-  res = gst_caps_intersect (caps, audiocaps);
-  if (res &amp;&amp; !gst_caps_is_empty (res)) {
-    g_print ("Found pad to link to audiosink - plugging is now done\n");
-    close_link (pad, audiosink, "sink", NULL);
-    gst_caps_unref (audiocaps);
-    gst_caps_unref (res);
-    return;
-  }
-  gst_caps_unref (audiocaps);
-  gst_caps_unref (res);
-
-  /* try to plug from our list */
-  for (item = factories; item != NULL; item = item->next) {
-    GstElementFactory *factory = GST_ELEMENT_FACTORY (item->data);
-    const GList *pads;
-
-    for (pads = gst_element_factory_get_static_pad_templates (factory);
-         pads != NULL; pads = pads->next) {
-      GstStaticPadTemplate *templ = pads->data;
-
-      /* find the sink template - need an always pad*/
-      if (templ->direction != GST_PAD_SINK ||
-          templ->presence != GST_PAD_ALWAYS) {
-        continue;
-      }
-
-      /* can it link? */
-      res = gst_caps_intersect (caps,
-          gst_static_caps_get (&amp;templ->static_caps));
-      if (res &amp;&amp; !gst_caps_is_empty (res)) {
-        GstElement *element;
-        gchar *name_template = g_strdup (templ->name_template);
-
-        /* close link and return */
-        gst_caps_unref (res);
-        element = gst_element_factory_create (factory, NULL);
-        close_link (pad, element, name_template,
-                   gst_element_factory_get_static_pad_templates (factory));
-        g_free (name_template);
-        return;
-      }
-      gst_caps_unref (res);
-
-      /* we only check one sink template per factory, so move on to the
-       * next factory now */
-      break;
-    }
-  }
-
-  /* if we get here, no item was found */
-  g_print ("No compatible pad found to decode %s on %s:%s\n",
-          mime, GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
-}
-
-static void
-cb_typefound (GstElement *typefind,
-             guint       probability,
-             GstCaps    *caps,
-             gpointer    data)
-{
-  gchar *s;
-  GstPad *pad;
-
-  s = gst_caps_to_string (caps);
-  g_print ("Detected media type %s\n", s);
-  g_free (s);
-
-  /* actually plug now */
-  pad = gst_element_get_static_pad (typefind, "src");
-  try_to_plug (pad, caps);
-  gst_object_unref (GST_OBJECT (pad));
-}
-    <!-- example-end dynamic.c c --></programlisting>
-    <para>
-      By doing all this, we will be able to make a simple autoplugger that
-      can automatically setup a pipeline for any media type. In the example
-      above, we did this for audio only. However, we can also do this
-      for video to create a player that plays both audio and video.
-    </para>
-    <!-- example-begin dynamic.c d --><!--
-static gboolean
-my_bus_callback (GstBus     *bus,
-                 GstMessage *message,
-                 gpointer    data)
-{
-  GMainLoop *loop = data;
-
-  switch (GST_MESSAGE_TYPE (message)) {
-    case GST_MESSAGE_ERROR: {
-      GError *err;
-      gchar *debug;
-
-      gst_message_parse_error (message, &amp;err, &amp;debug);
-      g_print ("Error: %s\n", err-&gt;message);
-      g_error_free (err);
-      g_free (debug);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    case GST_MESSAGE_EOS:
-      /* end-of-stream */
-      g_main_loop_quit (loop);
-      break;
-    default:
-      break;
-  }
-
-  /* remove from queue */
-  return TRUE;
-}
-
-gint
-main (gint   argc,
-      gchar *argv[])
-{
-  GMainLoop *loop;
-  GstElement *typefind, *realsink;
-  GstBus *bus;
-  GError *err = NULL;
-  gchar *p;
-
-  /* init GStreamer and ourselves */
-  gst_init (&amp;argc, &amp;argv);
-  loop = g_main_loop_new (NULL, FALSE);
-  init_factories ();
-
-  /* args */
-  if (argc != 2) {
-    g_print ("Usage: %s &lt;filename&gt;\n", argv[0]);
-    return -1;
-  }
-
-  /* pipeline */
-  p = g_strdup_printf ("filesrc location=\"%s\" ! typefind name=tf", argv[1]);
-  pipeline = gst_parse_launch (p, &amp;err);
-  g_free (p);
-
-  if (err) {
-    g_error ("Could not construct pipeline: %s", err-&gt;message);
-    g_error_free (err);
-    return -1;
-  }
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, my_bus_callback, NULL);
-  gst_object_unref (bus);
-
-  typefind = gst_bin_get_by_name (GST_BIN (pipeline), "tf");
-  g_signal_connect (typefind, "have-type", G_CALLBACK (cb_typefound), NULL);
-  gst_object_unref (GST_OBJECT (typefind));
-  audiosink = gst_element_factory_make ("audioconvert", "aconv");
-  realsink = gst_element_factory_make ("alsasink", "audiosink");
-  gst_bin_add_many (GST_BIN (pipeline), audiosink, realsink, NULL);
-  gst_element_link (audiosink, realsink);
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-
-  /* run */
-  g_main_loop_run (loop);
-
-  /* exit */
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
-    --><!-- example-end dynamic.c d -->
+    <title>Dynamically autoplugging a pipeline</title>
     <para>
-      The example above is a good first try for an autoplugger. Next steps
-      would be to listen for <quote>pad-removed</quote> signals, so we
-      can dynamically change the plugged pipeline if the stream changes
-      (this happens for DVB or Ogg radio). Also, you might want special-case
-      code for input with known content (such as a DVD or an audio-CD),
-      and much, much more. Moreover, you'll want many checks to prevent
-      infinite loops during autoplugging, maybe you'll want to implement
-      shortest-path-finding to make sure the most optimal pipeline is chosen,
-      and so on. Basically, the features that you implement in an autoplugger
-      depend on what you want to use it for. For full-blown implementations,
-      see the <quote>playbin</quote> and <quote>decodebin</quote> elements in
-      <xref linkend="chapter-components"/>.
+      See <xref linkend="chapter-playback-components"/> for using the high
+      level object that you can use to dynamically construct pipelines.
     </para>
   </sect1>
 </chapter>
diff --git a/docs/manual/advanced-buffering.xml b/docs/manual/advanced-buffering.xml
new file mode 100644 (file)
index 0000000..6d1660f
--- /dev/null
@@ -0,0 +1,450 @@
+<chapter id="chapter-buffering">
+  <title>Buffering</title>
+  <para>
+    The purpose of buffering is to accumulate enough data in a pipeline so that
+    playback can occur smoothly and without interruptions. It is typically done
+    when reading from a (slow) and non-live network source but can also be
+    used for live sources.
+  </para>
+  <para>
+    &GStreamer; provides support for the following use cases:
+    <itemizedlist>
+      <listitem>
+        <para>
+          Buffering up to a specific amount of data, in memory, before starting
+          playback so that network fluctuations are minimized.
+          See <xref linkend="section-buffering-stream"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Download of the network file to a local disk with fast seeking in the
+          downloaded data. This is similar to the quicktime/youtube players.
+          See <xref linkend="section-buffering-download"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Caching of (semi)-live streams to a local, on disk, ringbuffer with
+          seeking in the cached area. This is similar to tivo-like timeshifting.
+          See <xref linkend="section-buffering-timeshift"/>.
+        </para>
+      </listitem>
+    </itemizedlist>
+  </para>
+  <para>
+    &GStreamer; can provide the application with progress reports about the
+    current buffering state as well as let the application decide on how
+    to buffer and when the buffering stops.
+  </para>
+  <para>
+    In the most simple case, the application has to listen for BUFFERING
+    messages on the bus. If the percent indicator inside the BUFFERING message
+    is smaller than 100, the pipeline is buffering. When a message is
+    received with 100 percent, buffering is complete. In the buffering state,
+    the application should keep the pipeline in the PAUSED state. When buffering
+    completes, it can put the pipeline (back) in the PLAYING state.
+  </para>
+  <para>
+    What follows is an example of how the message handler could deal with
+    the BUFFERING messages. We will see more advanced methods in
+    <xref linkend="section-buffering-strategies"/>.
+  </para>
+  <programlisting>
+<![CDATA[
+  [...]
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_BUFFERING:{
+      gint percent;
+
+      /* no state management needed for live pipelines */
+      if (is_live)
+        break;
+
+      gst_message_parse_buffering (message, &percent);
+
+      if (percent == 100) {
+        /* a 100% message means buffering is done */
+        buffering = FALSE;
+        /* if the desired state is playing, go back */
+        if (target_state == GST_STATE_PLAYING) {
+          gst_element_set_state (pipeline, GST_STATE_PLAYING);
+        }
+      } else {
+        /* buffering busy */
+        if (buffering == FALSE && target_state == GST_STATE_PLAYING) {
+          /* we were not buffering but PLAYING, PAUSE  the pipeline. */
+          gst_element_set_state (pipeline, GST_STATE_PAUSED);
+        }
+        buffering = TRUE;
+      }
+      break;
+    case ...
+
+  [...]
+]]>
+  </programlisting>
+
+  <sect1 id="section-buffering-stream">
+    <title>Stream buffering </title>
+    <programlisting>
+      +---------+     +---------+     +-------+
+      | httpsrc |     | buffer  |     | demux |
+      |        src - sink      src - sink     ....
+      +---------+     +---------+     +-------+
+    </programlisting>
+    <para>
+      In this case we are reading from a slow network source into a buffer
+      element (such as queue2).
+    </para>
+    <para>
+      The buffer element has a low and high watermark expressed in bytes. The
+      buffer uses the watermarks as follows:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          The buffer element will post BUFFERING messages until the high
+          watermark is hit. This instructs the application to keep the pipeline
+          PAUSED, which will eventually block the srcpad from pushing while
+          data is prerolled in the sinks.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          When the high watermark is hit, a BUFFERING message with 100% will be
+          posted, which instructs the application to continue playback.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          When during playback, the low watermark is hit, the queue will start
+          posting BUFFERING messages again, making the application PAUSE the
+          pipeline again until the high watermark is hit again. This is called
+          the rebuffering stage.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          During playback, the queue level will fluctuate between the high and
+          the low watermark as a way to compensate for network irregularities.
+        </para>
+      </listitem>
+   </itemizedlist>
+   <para>
+     This buffering method is usable when the demuxer operates in push mode.
+     Seeking in the stream requires the seek to happen in the network source.
+     It is mostly desirable when the total duration of the file is not known,
+     such as in live streaming or when efficient seeking is not
+     possible/required.
+   </para>
+   <para>
+     The problem is configuring a good low and high watermark. Here are some
+     ideas:
+   </para>
+   <itemizedlist>
+      <listitem>
+        <para>
+          It is possible to measure the network bandwidth and configure the
+          low/high watermarks in such a way that buffering takes a fixed
+          amount of time.
+        </para>
+        <para>
+          The queue2 element in &GStreamer; core has the max-size-time property
+          that, together with the use-rate-estimate property, does exactly
+          that. Also the playbin buffer-duration property uses the rate estimate
+          to scale the amount of data that is buffered.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Based on the codec bitrate, it is also possible to set the watermarks
+          in such a way that a fixed amount of data is buffered before playback
+          starts. Normally, the buffering element doesn't know about the
+          bitrate of the stream but it can get this with a query.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Start with a fixed amount of bytes, measure the time between
+          rebuffering and increase the queue size until the time between
+          rebuffering is within the application's chosen limits.
+        </para>
+      </listitem>
+   </itemizedlist>
+   <para>
+     The buffering element can be inserted anywhere in the pipeline. You could,
+     for example, insert the buffering element before a decoder. This would
+     make it possible to set the low/high watermarks based on time.
+   </para>
+   <para>
+     The buffering flag on playbin, performs buffering on the parsed data.
+     Another advantage of doing the buffering at a later stage is that you can
+     let the demuxer operate in pull mode. When reading data from a slow
+     network drive (with filesrc) this can be an interesting way to buffer.
+   </para>
+  </sect1>
+
+  <sect1 id="section-buffering-download">
+    <title>Download buffering </title>
+    <programlisting>
+      +---------+     +---------+     +-------+
+      | httpsrc |     | buffer  |     | demux |
+      |        src - sink      src - sink     ....
+      +---------+     +----|----+     +-------+
+                           V
+                          file
+    </programlisting>
+    <para>
+      If we know the server is streaming a fixed length file to the client,
+      the application can choose to download the entire file on disk. The
+      buffer element will provide a push or pull based srcpad to the demuxer
+      to navigate in the downloaded file.
+    </para>
+    <para>
+      This mode is only suitable when the client can determine the length of
+      the file on the server.
+    </para>
+    <para>
+      In this case, buffering messages will be emited as usual when the
+      requested range is not within the downloaded area + buffersize. The
+      buffering message will also contain an indication that incremental
+      download is being performed. This flag can be used to let the application
+      control the buffering in a more intelligent way, using the BUFFERING
+      query, for example. See <xref linkend="section-buffering-strategies"/>.
+    </para>
+  </sect1>
+
+  <sect1 id="section-buffering-timeshift">
+    <title>Timeshift buffering </title>
+    <programlisting>
+      +---------+     +---------+     +-------+
+      | httpsrc |     | buffer  |     | demux |
+      |        src - sink      src - sink     ....
+      +---------+     +----|----+     +-------+
+                           V
+                       file-ringbuffer
+    </programlisting>
+    <para>
+      In this mode, a fixed size ringbuffer is kept to download the server
+      content.  This allows for seeking in the buffered data. Depending on the
+      size of the ringbuffer one can seek further back in time.
+    </para>
+    <para>
+      This mode is suitable for all live streams. As with the incremental
+      download mode, buffering messages are emited along with an indication
+      that timeshifting download is in progress.
+    </para>
+  </sect1>
+
+  <sect1 id="section-buffering-live">
+    <title>Live buffering </title>
+    <para>
+      In live pipelines we usually introduce some fixed latency between the
+      capture and the playback elements. This latency can be introduced by
+      a queue (such as a jitterbuffer) or by other means (in the audiosink).
+    </para>
+    <para>
+      Buffering messages can be emited in those live pipelines as well and
+      serve as an indication to the user of the latency buffering. The
+      application usually does not react to these buffering messages with a
+      state change.
+    </para>
+  </sect1>
+
+  <sect1 id="section-buffering-strategies">
+    <title>Buffering strategies </title>
+    <para>
+      What follows are some ideas for implementing different buffering
+      strategies based on the buffering messages and buffering query.
+    </para>
+
+    <sect2 id="section-buffering-norebuffer">
+      <title>No-rebuffer strategy </title>
+      <para>
+        We would like to buffer enough data in the pipeline so that playback
+        continues without interruptions. What we need to know to implement
+        this is know the total remaining playback time in the file and the
+        total remaining download time. If the buffering time is less than the
+        playback time, we can start playback without interruptions.
+      </para>
+      <para>
+        We have all this information available with the DURATION, POSITION and
+        BUFFERING queries. We need to periodically execute the buffering query
+        to get the current buffering status. We also need to have a large
+        enough buffer to hold the complete file, worst case. It is best to
+        use this buffering strategy with download buffering (see
+        <xref linkend="section-buffering-download"/>).
+      </para>
+      <para>
+        This is what the code would look like:
+      </para>
+      <programlisting>
+<!-- example-begin norebuffer.c a -->
+<![CDATA[
+#include <gst/gst.h>
+
+GstState target_state;
+static gboolean is_live;
+static gboolean is_buffering;
+
+static gboolean
+buffer_timeout (gpointer data)
+{
+  GstElement *pipeline = data;
+  GstQuery *query;
+  gboolean busy;
+  gint percent;
+  gint64 estimated_total;
+  gint64 position, duration;
+  guint64 play_left;
+
+  query = gst_query_new_buffering (GST_FORMAT_TIME);
+
+  if (!gst_element_query (pipeline, query))
+    return TRUE;
+
+  gst_query_parse_buffering_percent (query, &busy, &percent);
+  gst_query_parse_buffering_range (query, NULL, NULL, NULL, &estimated_total);
+
+  if (estimated_total == -1)
+    estimated_total = 0;
+
+  /* calculate the remaining playback time */
+  if (!gst_element_query_position (pipeline, GST_FORMAT_TIME, &position))
+    position = -1;
+  if (!gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration))
+    duration = -1;
+
+  if (duration != -1 && position != -1)
+    play_left = GST_TIME_AS_MSECONDS (duration - position);
+  else
+    play_left = 0;
+
+  g_message ("play_left %" G_GUINT64_FORMAT", estimated_total %" G_GUINT64_FORMAT
+      ", percent %d", play_left, estimated_total, percent);
+
+  /* we are buffering or the estimated download time is bigger than the
+   * remaining playback time. We keep buffering. */
+  is_buffering = (busy || estimated_total * 1.1 > play_left);
+
+  if (!is_buffering)
+    gst_element_set_state (pipeline, target_state);
+
+  return is_buffering;
+}
+
+static void
+on_message_buffering (GstBus *bus, GstMessage *message, gpointer user_data)
+{
+  GstElement *pipeline = user_data;
+  gint percent;
+
+  /* no state management needed for live pipelines */
+  if (is_live)
+    return;
+
+  gst_message_parse_buffering (message, &percent);
+
+  if (percent < 100) {
+    /* buffering busy */
+    if (is_buffering == FALSE) {
+      is_buffering = TRUE;
+      if (target_state == GST_STATE_PLAYING) {
+        /* we were not buffering but PLAYING, PAUSE  the pipeline. */
+        gst_element_set_state (pipeline, GST_STATE_PAUSED);
+      }
+    }
+  }
+}
+
+static void
+on_message_async_done (GstBus *bus, GstMessage *message, gpointer user_data)
+{
+  GstElement *pipeline = user_data;
+
+  if (is_buffering == FALSE)
+    gst_element_set_state (pipeline, target_state);
+  else
+    g_timeout_add (500, buffer_timeout, pipeline);
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GstElement *pipeline;
+  GMainLoop *loop;
+  GstBus *bus;
+  GstStateChangeReturn ret;
+
+  /* init GStreamer */
+  gst_init (&amp;argc, &amp;argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* make sure we have a URI */
+  if (argc != 2) {
+    g_print ("Usage: %s &lt;URI&gt;\n", argv[0]);
+    return -1;
+  }
+
+  /* set up */
+  pipeline = gst_element_factory_make ("playbin", "pipeline");
+  g_object_set (G_OBJECT (pipeline), "uri", argv[1], NULL);
+  g_object_set (G_OBJECT (pipeline), "flags", 0x697 , NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::buffering",
+    (GCallback) on_message_buffering, pipeline);
+  g_signal_connect (bus, "message::async-done",
+    (GCallback) on_message_async_done, pipeline);
+  gst_object_unref (bus);
+
+  is_buffering = FALSE;
+  target_state = GST_STATE_PLAYING;
+  ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+
+  switch (ret) {
+    case GST_STATE_CHANGE_SUCCESS:
+      is_live = FALSE;
+      break;
+
+    case GST_STATE_CHANGE_FAILURE:
+      g_warning ("failed to PAUSE");
+      return -1;
+
+    case GST_STATE_CHANGE_NO_PREROLL:
+      is_live = TRUE;
+      break;
+
+    default:
+      break;
+  }
+
+  /* now run */
+  g_main_loop_run (loop);
+
+  /* also clean up */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (GST_OBJECT (pipeline));
+  g_main_loop_unref (loop);
+
+  return 0;
+}
+]]>
+<!-- example-end norebuffer.c a -->
+      </programlisting>
+      <para>
+        See how we set the pipeline to the PAUSED state first. We will receive
+        buffering messages during the preroll state when buffering is needed.
+        When we are prerolled (on_message_async_done) we see if buffering is
+        going on, if not, we start playback. If buffering was going on, we start
+        a timeout to poll the buffering state. If the estimated time to download
+        is less than the remaining playback time, we start playback.
+      </para>
+    </sect2>
+  </sect1>
+</chapter>
index c23cf3cc6ecdb28081ec7775764166c477a92126..d6c800712303663b2f3edb377b3c52b7414b16ea 100644 (file)
 <chapter id="chapter-clocks">
-  <title>Clocks in GStreamer</title>
+  <title>Clocks and synchronization in &GStreamer;</title>
 
   <para>
-    To maintain sync in pipeline playback (which is the only case where this
-    really matters), &GStreamer; uses <emphasis>clocks</emphasis>. Clocks
-    are exposed by some elements, whereas other elements are merely clock
-    slaves. The primary task of a clock is to represent the time progress
-    according to the element exposing the clock, based on its own playback
-    rate. If no clock provider is available in a pipeline, the system clock
-    is used instead.
+    When playing complex media, each sound and video sample must be played in a
+    specific order at a specific time. For this purpose, GStreamer provides a
+    synchronization mechanism.
   </para>
-  
   <para>
-    &GStreamer; derives several <emphasis>time value</emphasis> from the clock
-    and the playback state.
-    It is important to note, that a  <emphasis>clock-time</emphasis> is
-    monotonically rising, but the value itself is not meaningful.
-    Subtracting the <emphasis>base-time</emphasis> yields the
-    <emphasis>running-time</emphasis>. It is the same as the
-    <emphasis>stream-time</emphasis> if one plays from start to end at original
-    rate. The <emphasis>stream-time</emphasis> indicates the position in the
-    media. The <emphasis>running-time</emphasis> is (re-)set to 0 when the 
-    pipeline starts to play and also after <emphasis>flushing</emphasis> seeks.
+    &GStreamer; provides support for the following use cases:
+    <itemizedlist>
+      <listitem>
+        <para>
+          Non-live sources with access faster than playback rate. This is
+          the case where one is reading media from a file and playing it
+          back in a synchronized fashion. In this case, multiple streams need
+          to be synchronized, like audio, video and subtitles.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Capture and synchronized muxing/mixing of media from multiple live
+          sources. This is a typical use case where you record audio and
+          video from a microphone/camera and mux it into a file for 
+          storage.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Streaming from (slow) network streams with buffering. This is the
+          typical web streaming case where you access content from a streaming
+          server with http.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Capture from live source and and playback to live source with
+          configurable latency. This is used when, for example, capture from
+          a camera, apply an effect and display the result. It is also used
+          when streaming low latency content over a network with UDP.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Simultaneous live capture and playback from prerecorded content.
+          This is used in audio recording cases where you play a previously
+          recorded audio and record new samples, the purpose is to have the
+          new audio perfectly in sync with the previously recorded data.
+        </para>
+      </listitem>
+    </itemizedlist>
   </para>
+  <para>
+    &GStreamer; uses a <classname>GstClock</classname> object, buffer
+    timestamps and a SEGMENT event to synchronize streams in a pipeline
+    as we will see in the next sections.
+  </para>
+
+  <sect1 id="section-clock-time-types" xreflabel="Clock running-time">
+    <title>Clock running-time </title>
+    <para>
+      In a typical computer, there are many sources that can be used as a
+      time source, e.g., the system time, soundcards, CPU performance
+      counters, ... For this reason, there are many
+      <classname>GstClock</classname> implementations available in &GStreamer;.
+      The clock time doesn't always start from 0 or from some known value.
+      Some clocks start counting from some known start date, other clocks start
+      counting since last reboot, etc...
+    </para>
+    <para>
+      A <classname>GstClock</classname> returns the
+      <emphasis role="strong">absolute-time</emphasis>
+      according to that clock with <function>gst_clock_get_time ()</function>.
+      The absolute-time (or clock time) of a clock is monotonically increasing.
+      From the absolute-time is a <emphasis role="strong">running-time</emphasis>
+      calculated, which is simply the difference between a previous snapshot
+      of the absolute-time called the <emphasis role="strong">base-time</emphasis>.
+      So:
+    </para>
+    <para>
+      running-time = absolute-time - base-time
+    </para>
+    <para>
+      A &GStreamer; <classname>GstPipeline</classname> object maintains a
+      <classname>GstClock</classname> object and a base-time when it goes
+      to the PLAYING state.  The pipeline gives a handle to the selected
+      <classname>GstClock</classname> to each element in the pipeline along
+      with selected base-time. The pipeline will select a base-time in such
+      a way that the running-time reflects the total time spent in the
+      PLAYING state. As a result, when the pipeline is PAUSED, the
+      running-time stands still.
+    </para>
+    <para>
+      Because all objects in the pipeline have the same clock and base-time,
+      they can thus all calculate the running-time according to the pipeline
+      clock.
+    </para>
+  </sect1>
+
+  <sect1 id="section-buffer-running-time" xreflabel="Buffer running-time">
+    <title>Buffer running-time</title>
+    <para>
+      To calculate a buffer running-time, we need a buffer timestamp and
+      the SEGMENT event that preceeded the buffer. First we can convert
+      the SEGMENT event into a <classname>GstSegment</classname> object
+      and then we can use the
+      <function>gst_segment_to_running_time ()</function> function to
+      perform the calculation of the buffer running-time.
+    </para>
+    <para>
+      Synchronization is now a matter of making sure that a buffer with a
+      certain running-time is played when the clock reaches the same
+      running-time. Usually this task is done by sink elements. Sink also
+      have to take into account the latency configured in the pipeline and
+      add this to the buffer running-time before synchronizing to the
+      pipeline clock.
+    </para>
+    <para>
+      Non-live sources timestamp buffers with a running-time starting
+      from 0. After a flushing seek, they will produce buffers again
+      from a running-time of 0.
+    </para>
+    <para>
+      Live sources need to timestamp buffers with a running-time matching
+      the pipeline running-time when the first byte of the buffer was
+      captured.
+    </para>
+  </sect1>
+
+  <sect1 id="section-buffer-stream-time" xreflabel="Buffer stream-time">
+    <title>Buffer stream-time</title>
+    <para>
+      The buffer stream-time, also known as the position in the stream,
+      is calculated from the buffer timestamps and the preceeding SEGMENT
+      event. It represents the time inside the media as a value between
+      0 and the total duration of the media.
+    </para>
+    <para>
+      The stream-time is used in:
+      <itemizedlist>
+        <listitem>
+          <para>
+            Report the current position in the stream with the POSITION
+            query.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The position used in the seek events and queries.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The position used to synchronize controlled values.
+          </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+    <para>
+      The stream-time is never used to synchronize streams, this is only
+      done with the running-time.
+    </para>
+  </sect1>
 
-  <figure float="1" id="chapter-clock-img">
-    <title>&GStreamer; clock and various times</title>
-    <mediaobject>
-      <imageobject>
-        <imagedata scale="75" fileref="images/clocks.&image;" format="&IMAGE;" />
-      </imageobject>
-    </mediaobject>  
-  </figure>
+  <sect1 id="section-time-overview" xreflabel="Time overview">
+    <title>Time overview</title>
+    <para>
+      Here is an overview of the various timelines used in &GStreamer;.
+    </para>
+    <para>
+      The image below represents the different times in the pipeline when
+      playing a 100ms sample and repeating the part between 50ms and
+      100ms. 
+    </para>
+
+    <figure float="1" id="chapter-clock-img">
+      <title>&GStreamer; clock and various times</title>
+      <mediaobject>
+        <imageobject>
+          <imagedata scale="75" fileref="images/clocks.&image;" format="&IMAGE;" />
+        </imageobject>
+      </mediaobject>  
+    </figure>
+
+    <para>
+      You can see how the running-time of a buffer always increments
+      monotonically along with the clock-time. Buffers are played when their
+      running-time is equal to the clock-time - base-time. The stream-time
+      represents the position in the stream and jumps backwards when
+      repeating.
+    </para>
+  </sect1>
 
   <sect1 id="section-clocks-providers">
     <title>Clock providers</title>
-
+    <para>
+      A clock provider is an element in the pipeline that can provide
+      a <classname>GstClock</classname> object. The clock object needs to
+      report an absoulute-time that is monotonocally increasing when the
+      element is in the PLAYING state. It is allowed to pause the clock
+      while the element is PAUSED.
+    </para>
     <para>
       Clock providers exist because they play back media at some rate, and
       this rate is not necessarily the same as the system clock rate. For
       example, a soundcard may playback at 44,1 kHz, but that doesn't mean
       that after <emphasis>exactly</emphasis> 1 second <emphasis>according
       to the system clock</emphasis>, the soundcard has played back 44.100
-      samples. This is only true by approximation. Therefore, generally,
-      pipelines with an audio output use the audiosink as clock provider.
-      This ensures that one second of video will be played back at the same
-      rate as that the soundcard plays back 1 second of audio.
+      samples. This is only true by approximation. In fact, the audio
+      device has an internal clock based on the number of samples played
+      that we can expose.
     </para>
     <para>
-      Whenever some part of the pipeline requires to know the current clock
-      time, it will be requested from the clock through
-      <function>gst_clock_get_time ()</function>. The clock-time does not
-      need to start at 0. The pipeline, which contains the global clock that
-      all elements in the pipeline will use, in addition has a <quote>base
-      time</quote>, which is the clock time at the point where the
-      pipeline went to the PLAYING state. Each element can subtract the
-      <quote>base time</quote> from the clock-time to know the current
-      running time.
+      If an element with an internal clock needs to synchronize, it needs
+      to estimate when a time according to the pipeline clock will take
+      place according to the internal clock. To estimate this, it needs
+      to slave its clock to the pipeline clock.
     </para>
     <para>
-      The clock provider is responsible for making sure that the clock time
-      always represents the current media time as closely as possible; it
-      has to take care of things such as playback latencies, buffering in
-      audio-kernel modules, and so on, since all those could affect a/v sync
-      and thus decrease the user experience.
+      If the pipeline clock is exactly the internal clock of an element,
+      the element can skip the slaving step and directly use the pipeline
+      clock to schedule playback. This can be both faster and more
+      accurate.
+      Therefore, generally, elements with an internal clock like audio
+      input or output devices will be a clock provider for the pipeline.
     </para>
-  </sect1>
-
-  <sect1 id="section-clocks-slaves">
-    <title>Clock slaves</title>
     <para>
-      Clock slaves get assigned a clock by their containing pipeline. Their
-      task is to make sure that media playback follows the time progress as
-      represented by this clock as closely as possible. For most elements,
-      that will simply mean to wait until the buffer running-time is reached
-      before playing back their current sample.
+      When the pipeline goes to the PLAYING state, it will go over all
+      elements in the pipeline from sink to source and ask each element
+      if they can provide a clock. The last element that can provide a
+      clock will be used as the clock provider in the pipeline.
+      This algorithm prefers a clock from an audio sink in a typical
+      playback pipeline and a clock from source elements in a typical
+      capture pipeline.
     </para>
     <para>
-      The buffer running-time is derived from the buffer timestamp and the
-      newsegment event preceeding the buffer. A buffer is played synchronized
-      with the clock when the clock's running-time has reached exactly the
-      buffer running-time; this can be done with the function
-      <function>gst_clock_id_wait ()</function>.
+      There exist some bus messages to let you know about the clock and
+      clock providers in the pipeline. You can see what clock is selected
+      in the pipeline by looking at the NEW_CLOCK message on the bus.
+      When a clock provider is removed from the pipeline, a CLOCK_LOST
+      message is posted and the application should go to PAUSED and back
+      to PLAYING to select a new clock.
+    </para>
+  </sect1>
+
+  <sect1 id="section-clocks-latency">
+    <title>Latency</title>
+    <para>
+      The latency is the time it takes for a sample captured at timestamp X
+      to reach the sink. This time is measured against the clock in the
+      pipeline. For pipelines where the only elements that synchronize against
+      the clock are the sinks, the latency is always 0 since no other element
+      is delaying the buffer.
     </para>
     <para>
-      For more information on how to write elements that conform to this
-      required behaviour, see the Plugin Writer's Guide.
+      For pipelines with live sources, a latency is introduced, mostly because
+      of the way a live source works. Consider an audio source, it will start
+      capturing the first sample at time 0. If the source pushes buffers with
+      44100 samples at a time at 44100Hz it will have collected the buffer at
+      second 1.  Since the timestamp of the buffer is 0 and the time of the
+      clock is now >= 1 second, the sink will drop this buffer because it is
+      too late.  Without any latency compensation in the sink, all buffers will
+      be dropped.
     </para>
+
+    <sect2 id="section-latency-compensation">
+      <title>Latency compensation</title>
+      <para>
+        Before the pipeline goes to the PLAYING state, it will, in addition to
+        selecting a clock and calculating a base-time, calculate the latency
+        in the pipeline. It does this by doing a LATENCY query on all the sinks
+        in the pipeline. The pipeline then selects the maximum latency in the
+        pipeline and configures this with a LATENCY event.
+      </para>
+      <para>
+        All sink elements will delay playback by the value in the LATENCY event.
+        Since all sinks delay with the same amount of time, they will be
+        relative in sync.
+      </para>
+    </sect2>
+
+    <sect2 id="section-latency-dynamic">
+      <title>Dynamic Latency</title>
+      <para>
+        Adding/removing elements to/from a pipeline or changing element
+        properties can change the latency in a pipeline. An element can
+        request a latency change in the pipeline by posting a LATENCY
+        message on the bus. The application can then decide to query and
+        redistribute a new latency or not. Changing the latency in a
+        pipeline might cause visual or audible glitches and should
+        therefore only be done by the application when it is allowed.
+      </para>
+    </sect2>
   </sect1>
 </chapter>
index be56564859d23260e027a0dcd2c51976e6213c40..983d7571839d5e7a6862150322a0d62bf2756735 100644 (file)
@@ -2,9 +2,9 @@
   <title>Pipeline manipulation</title>
   <para>
     This chapter will discuss how you can manipulate your pipeline in several
-    ways from your application on. Parts of this chapter are downright
-    hackish, so be assured that you'll need some programming knowledge
-    before you start reading this.
+    ways from your application on. Parts of this chapter are very
+    lowlevel, so be assured that you'll need some programming knowledge
+    and a good understanding of &GStreamer; before you start reading this.
   </para>
   <para>
     Topics that will be discussed here include how you can insert data into
     to listen to a pipeline's data processing.
   </para>
 
-  <sect1 id="section-data-probe">
-    <title>Data probing</title>
+  <sect1 id="section-using-probes">
+    <title>Using probes</title>
     <para>
       Probing is best envisioned as a pad listener. Technically, a probe is
-      nothing more than a signal callback that can be attached to a pad.
-      Those signals are by default not fired at all (since that may have a
-      negative impact on performance), but can be enabled by attaching a
-      probe using <function>gst_pad_add_buffer_probe ()</function>,
-      <function>gst_pad_add_event_probe ()</function>, or
-      <function>gst_pad_add_data_probe ()</function>.
-      Those functions attach the signal handler and
-      enable the actual signal emission. Similarly, one can use the
-      <function>gst_pad_remove_buffer_probe ()</function>,
-      <function>gst_pad_remove_event_probe ()</function>, or
-      <function>gst_pad_remove_data_probe ()</function>
-      to remove the signal handlers again.
+      nothing more than a callback that can be attached to a pad.
+      You can attach a probe using <function>gst_pad_add_probe ()</function>.
+      Similarly, one can use the
+      <function>gst_pad_remove_probe ()</function>
+      to remove the callback again. The probe notifies you of any activity
+      that happens on the pad, like buffers, events and queries. You can
+      define what kind of notifications you are interested in when you
+      add the probe.
     </para>
     <para>
-      Probes run in pipeline threading context, so callbacks should try to
-      not block and generally not do any weird stuff, since this could
-      have a negative impact on pipeline performance or, in case of bugs,
-      cause deadlocks or crashes. More precisely, one should usually not
-      call any GUI-related functions from within a probe callback, nor try
-      to change the state of the pipeline.  An application may post custom
-      messages on the pipeline's bus though to communicate with the main
-      application thread and have it do things like stop the pipeline.
+      The probe can notify you of the following activity on pads:
     </para>
-    <para>
-      In any case, most common buffer operations
-      that elements can do in <function>_chain ()</function> functions, can
-      be done in probe callbacks as well. The example below gives a short
-      impression on how to use them (even if this usage is not entirely
-      correct, but more on that below):
-    </para>
-    <programlisting><!-- example-begin probe.c -->
-#include &lt;gst/gst.h&gt;
+    <itemizedlist>
+      <listitem>
+        <para>
+          A buffer is pushed or pulled. You want to specify the
+          GST_PAD_PROBE_TYPE_BUFFER when registering the probe. Because the
+          pad can be scheduled in different ways, it is possible to also
+          specify in what scheduling mode you are interested with the
+          optional GST_PAD_PROBE_TYPE_PUSH and GST_PAD_PROBE_TYPE_PULL
+          flags.
+        </para>
+        <para>
+          You can use this probe to inspect, modify or drop the buffer.
+          See <xref linkend="section-data-probes"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          A bufferlist is pushed. Use the GST_PAD_PROBE_TYPE_BUFFER_LIST
+          when registering the probe.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          An event travels over a pad. Use the GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM
+          and GST_PAD_PROBE_TYPE_EVENT_UPSTREAM flags to select downstream
+          and upstream events. There is also a convenience
+          GST_PAD_PROBE_TYPE_EVENT_BOTH to be notified of events going both
+          upstream and downstream. By default, flush events do not cause
+          a notification. You need to explicitly enable GST_PAD_PROBE_TYPE_EVENT_FLUSH
+          to receive callbacks from flushing events. Events are always
+          only notified in push mode.
+        </para>
+        <para>
+          You can use this probe to inspect, modify or drop the event.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          A query travels over a pad. Use the GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM
+          and GST_PAD_PROBE_TYPE_QUERY_UPSTREAM flags to select downstream
+          and upstream queries. The convenience GST_PAD_PROBE_TYPE_QUERY_BOTH
+          can also be used to select both directions. Query probes will be
+          notified twice, once when the query travels upstream/downstream and
+          once when the query result is returned. You can select in what stage
+          the callback will be called with the GST_PAD_PROBE_TYPE_PUSH and
+          GST_PAD_PROBE_TYPE_PULL, respectively when the query is performed
+          and when the query result is returned.
+        </para>
+        <para>
+          You can use this probe to inspect or modify the query. You can also
+          answer the query in the probe callback by placing the result value
+          in the query and by returning GST_PAD_PROBE_DROP from the 
+          callback.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          In addition to notifying you of dataflow, you can also ask the
+          probe to block the dataflow when the callback returns. This is
+          called a blocking probe and is activated by specifying the
+          GST_PAD_PROBE_TYPE_BLOCK flag. You can use this flag with the
+          other flags to only block dataflow on selected activity. A pad
+          becomes unblocked again if you remove the probe or when you return
+          GST_PAD_PROBE_REMOVE from the callback. You can let only the
+          currently blocked item pass by returning GST_PAD_PROBE_PASS
+          from the callback, it will block again on the next item.
+        </para>
+        <para>
+          Blocking probes are used to temporarily block pads because they
+          are unlinked or because you are going to unlink them. If the
+          dataflow is not blocked, the pipeline would go into an error
+          state if data is pushed on an unlinked pad. We will se how
+          to use blocking probes to partially preroll a pipeline.
+          See also <xref linkend="section-preroll-probes"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Be notified when no activity is happening on a pad. You install
+          this probe with the GST_PAD_PROBE_TYPE_IDLE flag. You can specify
+          GST_PAD_PROBE_TYPE_PUSH and/or GST_PAD_PROBE_TYPE_PULL to 
+          only be notified depending on the pad scheduling mode.
+          The IDLE probe is also a blocking probe in that it will not let
+          any data pass on the pad for as long as the IDLE probe is
+          installed.
+        </para>
+        <para>
+          You can use idle probes to dynamically relink a pad.  We will see
+          how to use idle probes to replace an element in the pipeline.
+          See also <xref linkend="section-dynamic-pipelines"/>.
+        </para>
+      </listitem>
+    </itemizedlist>
 
-static gboolean
-cb_have_data (GstPad    *pad,
-             GstBuffer *buffer,
-             gpointer   u_data)
+    <sect2 id="section-data-probes">
+      <title>Data probes</title>
+      <para>
+        Data probes allow you to be notified when there is data passing
+        on a pad. When adding the probe, specify the GST_PAD_PROBE_TYPE_BUFFER
+        and/or GST_PAD_PROBE_TYPE_BUFFER_LIST. 
+      </para>
+      <para>
+        Data probes run in pipeline streaming thread context, so callbacks
+        should try to not block and generally not do any weird stuff, since
+        this could have a negative impact on pipeline performance or, in case
+        of bugs, cause deadlocks or crashes. More precisely, one should usually
+        not call any GUI-related functions from within a probe callback, nor try
+        to change the state of the pipeline.  An application may post custom
+        messages on the pipeline's bus though to communicate with the main
+        application thread and have it do things like stop the pipeline.
+      </para>
+      <para>
+        In any case, most common buffer operations
+        that elements can do in <function>_chain ()</function> functions, can
+        be done in probe callbacks as well. The example below gives a short
+        impression on how to use them.
+      </para>
+      <programlisting>
+<!-- example-begin probe.c -->
+<![CDATA[
+#include <gst/gst.h>
+
+static GstPadProbeReturn
+cb_have_data (GstPad          *pad,
+              GstPadProbeInfo *info,
+              gpointer         user_data)
 {
   gint x, y;
-  GstMapInfo info;
+  GstMapInfo map;
   guint16 *ptr, t;
+  GstBuffer *buffer;
+
+  buffer = GST_PAD_PROBE_INFO_BUFFER (info);
+
+  buffer = gst_buffer_make_writable (buffer);
   
-  gst_buffer_map (buffer, &amp;info, GST_MAP_WRITE);
+  gst_buffer_map (buffer, &map, GST_MAP_WRITE);
 
-  ptr = info.data;
+  ptr = (guint16 *) map.data;
   /* invert data */
-  for (y = 0; y &lt; 288; y++) {
-    for (x = 0; x &lt; 384 / 2; x++) {
+  for (y = 0; y < 288; y++) {
+    for (x = 0; x < 384 / 2; x++) {
       t = ptr[384 - 1 - x];
       ptr[384 - 1 - x] = ptr[x];
       ptr[x] = t;
     }
     ptr += 384;
   }
-  gst_buffer_unmap (buffer, &amp;info);
+  gst_buffer_unmap (buffer, &map);
 
-  return TRUE;
+  GST_PAD_PROBE_INFO_DATA (info) = buffer;
+
+  return GST_PAD_PROBE_OK;
 }
 
 gint
@@ -86,7 +194,7 @@ main (gint   argc,
   GstPad *pad;
 
   /* init GStreamer */
-  gst_init (&amp;argc, &amp;argv);
+  gst_init (&argc, &argv);
   loop = g_main_loop_new (NULL, FALSE);
 
   /* build */
@@ -120,8 +228,9 @@ main (gint   argc,
   g_object_set (G_OBJECT (filter), "caps", filtercaps, NULL);
   gst_caps_unref (filtercaps);
 
-  pad = gst_element_get_pad (src, "src");
-  gst_pad_add_buffer_probe (pad, G_CALLBACK (cb_have_data), NULL);
+  pad = gst_element_get_static_pad (src, "src");
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
+      (GstPadProbeCallback) cb_have_data, NULL, NULL);
   gst_object_unref (pad);
 
   /* run */
@@ -141,41 +250,275 @@ main (gint   argc,
 
   return 0;
 }
-    <!-- example-end probe.c --></programlisting>
-    <para>
-      Compare that output with the output of <quote>gst-launch-0.10
-      videotestsrc ! xvimagesink</quote>, just so you know what you're
-      looking for.
-    </para>
-    <para>
-      The above example is not really correct though.  Strictly speaking, a
-      pad probe callback is only allowed to modify the buffer content if the
-      buffer is writable, and it is only allowed to modify buffer metadata like
-      timestamps, caps, etc. if the buffer metadata is writable.  Whether this
-      is the case or not depends a lot on the pipeline and the elements
-      involved.  Often enough, this is the case, but sometimes it is not,
-      and if it is not then unexpected modification of the data or metadata
-      can introduce bugs that are very hard to debug and track down. You can
-      check if a buffer and its metadata are writable with
-      <function>gst_buffer_is_writable ()</function> and
-      <function>gst_buffer_is_metadata_writable ()</function>.  Since you
-      can't pass back a different buffer than the one passed in, there is no
-      point of making a buffer writable in the callback function.
-    </para>
-    <para>
-      Pad probes are suited best for looking at data as it passes through
-      the pipeline. If you need to modify data, you should write your own
-      GStreamer element. Base classes like GstAudioFilter, GstVideoFilter or
-      GstBaseTransform make this fairly easy.
-    </para>
-    <para>
-      If you just want to inspect buffers as they pass through the pipeline,
-      you don't even need to set up pad probes. You could also just insert
-      an identity element into the pipeline and connect to its "handoff"
-      signal. The identity element also provides a few useful debugging tools
-      like the "dump" property or the "last-message" property (the latter is
-      enabled by passing the '-v' switch to gst-launch).
-    </para>
+]]>
+<!-- example-end probe.c -->
+      </programlisting>
+      <para>
+        Compare that output with the output of <quote>gst-launch-1.0
+        videotestsrc ! xvimagesink</quote>, just so you know what you're
+        looking for.
+      </para>
+      <para>
+        Strictly speaking, a pad probe callback is only allowed to modify the
+        buffer content if the buffer is writable.  Whether this is the case or
+        not depends a lot on the pipeline and the elements involved.  Often
+        enough, this is the case, but sometimes it is not, and if it is not
+        then unexpected modification of the data or metadata can introduce
+        bugs that are very hard to debug and track down. You can check if a
+        buffer is writable with <function>gst_buffer_is_writable ()</function>.
+        Since you can pass back a different buffer than the one passed in,
+        it is a good idea to make the buffer writable in the callback function
+        with <function>gst_buffer_make_writable ()</function>.
+      </para>
+      <para>
+        Pad probes are suited best for looking at data as it passes through
+        the pipeline. If you need to modify data, you should better write your
+        own GStreamer element. Base classes like GstAudioFilter, GstVideoFilter or
+        GstBaseTransform make this fairly easy.
+      </para>
+      <para>
+        If you just want to inspect buffers as they pass through the pipeline,
+        you don't even need to set up pad probes. You could also just insert
+        an identity element into the pipeline and connect to its "handoff"
+        signal. The identity element also provides a few useful debugging tools
+        like the "dump" property or the "last-message" property (the latter is
+        enabled by passing the '-v' switch to gst-launch and by setting the
+        silent property on the identity to FALSE).
+      </para>
+    </sect2>
+
+    <sect2 id="section-preroll-probes">
+      <title>Play a region of a media file</title>
+      <para>
+        In this example we will show you how to play back a region of
+        a media file. The goal is to only play the part of a file
+        from 2 seconds to 5 seconds and then EOS.
+      </para>
+      <para>
+        In a first step we will set a uridecodebin element to the PAUSED
+        state and make sure that we block all the source pads that are
+        created. When all the source pads are blocked, we have data on
+        all source pads and we say that the uridecodebin is prerolled.
+      </para>
+      <para>
+        In a prerolled pipeline we can ask for the duration of the media
+        and we can also perform seeks. We are interested in performing a
+        seek operation on the pipeline to select the range of media
+        that we are interested in.
+      </para>
+      <para>
+        After we configure the region we are interested in, we can link
+        the sink element, unblock the source pads and set the pipeline to
+        the playing state. You will see that exactly the requested
+        region is played by the sink before it goes to EOS.
+        What follows
+      </para>
+      <para>
+        What follows is an example application that loosly follows this
+        algorithm.
+      </para>
+      <programlisting>
+<!-- example-begin blockprobe.c -->
+<![CDATA[
+#include <gst/gst.h>
+
+static GMainLoop *loop;
+static volatile gint counter;
+static GstBus *bus;
+static gboolean prerolled = FALSE;
+static GstPad *sinkpad;
+
+static void
+dec_counter (GstElement * pipeline)
+{
+  if (prerolled)
+    return;
+
+  if (g_atomic_int_dec_and_test (&counter)) {
+    /* all probes blocked and no-more-pads signaled, post
+     * message on the bus. */
+    prerolled = TRUE;
+
+    gst_bus_post (bus, gst_message_new_application (
+          GST_OBJECT_CAST (pipeline),
+          gst_structure_new_empty ("ExPrerolled")));
+  }
+}
+
+/* called when a source pad of uridecodebin is blocked */
+static GstPadProbeReturn
+cb_blocked (GstPad          *pad,
+            GstPadProbeInfo *info,
+            gpointer         user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  if (prerolled)
+    return GST_PAD_PROBE_REMOVE;
+
+  dec_counter (pipeline);
+
+  return GST_PAD_PROBE_OK;
+}
+
+/* called when uridecodebin has a new pad */
+static void
+cb_pad_added (GstElement *element,
+              GstPad     *pad,
+              gpointer    user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  if (prerolled)
+    return;
+
+  g_atomic_int_inc (&counter);
+
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+      (GstPadProbeCallback) cb_blocked, pipeline, NULL);
+
+  /* try to link to the video pad */
+  gst_pad_link (pad, sinkpad);
+}
+
+/* called when uridecodebin has created all pads */
+static void
+cb_no_more_pads (GstElement *element,
+                 gpointer    user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  if (prerolled)
+    return;
+
+  dec_counter (pipeline);
+}
+
+/* called when a new message is posted on the bus */
+static void
+cb_message (GstBus     *bus,
+            GstMessage *message,
+            gpointer    user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+      g_print ("we received an error!\n");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_EOS:
+      g_print ("we reached EOS\n");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_APPLICATION:
+    {
+      if (gst_message_has_name (message, "ExPrerolled")) {
+        /* it's our message */
+        g_print ("we are all prerolled, do seek\n");
+        gst_element_seek (pipeline,
+            1.0, GST_FORMAT_TIME,
+            GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
+            GST_SEEK_TYPE_SET, 2 * GST_SECOND,
+            GST_SEEK_TYPE_SET, 5 * GST_SECOND);
+
+        gst_element_set_state (pipeline, GST_STATE_PLAYING);
+      }
+      break;
+    }
+    default:
+      break;
+  }
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GstElement *pipeline, *src, *csp, *vs, *sink;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri>", argv[0]);
+    return -1;
+  }
+
+  /* build */
+  pipeline = gst_pipeline_new ("my-pipeline");
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch (bus);
+  g_signal_connect (bus, "message", (GCallback) cb_message,
+      pipeline);
+
+  src = gst_element_factory_make ("uridecodebin", "src");
+  if (src == NULL)
+    g_error ("Could not create 'uridecodebin' element");
+
+  g_object_set (src, "uri", argv[1], NULL);
+
+  csp = gst_element_factory_make ("videoconvert", "csp");
+  if (csp == NULL)
+    g_error ("Could not create 'videoconvert' element");
+
+  vs = gst_element_factory_make ("videoscale", "vs");
+  if (csp == NULL)
+    g_error ("Could not create 'videoscale' element");
+
+  sink = gst_element_factory_make ("autovideosink", "sink");
+  if (sink == NULL)
+    g_error ("Could not create 'autovideosink' element");
+
+  gst_bin_add_many (GST_BIN (pipeline), src, csp, vs, sink, NULL);
+
+  /* can't link src yet, it has no pads */
+  gst_element_link_many (csp, vs, sink, NULL);
+
+  sinkpad = gst_element_get_static_pad (csp, "sink");
+
+  /* for each pad block that is installed, we will increment
+   * the counter. for each pad block that is signaled, we
+   * decrement the counter. When the counter is 0 we post
+   * an app message to tell the app that all pads are
+   * blocked. Start with 1 that is decremented when no-more-pads
+   * is signaled to make sure that we only post the message
+   * after no-more-pads */
+  g_atomic_int_set (&counter, 1);
+
+  g_signal_connect (src, "pad-added",
+      (GCallback) cb_pad_added, pipeline);
+  g_signal_connect (src, "no-more-pads",
+      (GCallback) cb_no_more_pads, pipeline);
+
+  gst_element_set_state (pipeline, GST_STATE_PAUSED);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  gst_object_unref (sinkpad);
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+  g_main_loop_unref (loop);
+
+  return 0;
+}
+]]>
+<!-- example-end blockprobe.c -->
+</programlisting>
+      <para>
+        Note that we use a custom application message to signal the
+        main thread that the uridecidebin is prerolled. The main thread
+        will then issue a flushing seek to the requested region. The
+        flush will temporarily unblock the pad and reblock them when
+        new data arrives again. We detect this second block to remove
+        the probes. Then we set the pipeline to PLAYING and it should
+        play from 2 to 5 seconds, then EOS and exit the application.
+      </para>
+    </sect2>
   </sect1>
 
   <sect1 id="section-data-spoof">
@@ -184,153 +527,254 @@ main (gint   argc,
       Many people have expressed the wish to use their own sources to inject
       data into a pipeline. Some people have also expressed the wish to grab
       the output in a pipeline and take care of the actual output inside
-      their application. While either of these methods are stongly
-      discouraged, &GStreamer; offers hacks to do this. <emphasis>However,
-      there is no support for those methods.</emphasis> If it doesn't work,
-      you're on your own. Also, synchronization, thread-safety and other
-      things that you've been able to take for granted so far are no longer
-      guaranteed if you use any of those methods. It's always better to
-      simply write a plugin and have the pipeline schedule and manage it.
+      their application. While either of these methods are strongly
+      discouraged, &GStreamer; offers support for this.
+      <emphasis>Beware! You need to know what you are doing.</emphasis> Since
+      you don't have any support from a base class you need to thoroughly
+      understand state changes and synchronization. If it doesn't work,
+      there are a million ways to shoot yourself in the foot.  It's always
+      better to simply write a plugin and have the base class manage it.
       See the Plugin Writer's Guide for more information on this topic. Also
       see the next section, which will explain how to embed plugins statically
       in your application.
     </para>
-    <note><para>
-       <ulink type="http"
-         url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gstreamer-app.html">New
-         API</ulink> was developed to make data insertion and extraction easy
-       for applications. It can be found as GstAppSrc and GstAppSink in the
-       <ulink type="http"
-         url="http://gstreamer.freedesktop.org/modules/gst-plugins-base.html">
-         gst-plugins-base</ulink> module.
-    </para></note>
     <para>
-      After all those disclaimers, let's start. There's three possible
-      elements that you can use for the above-mentioned purposes. Those are
-      called <quote>fakesrc</quote> (an imaginary source),
-      <quote>fakesink</quote> (an imaginary sink) and <quote>identity</quote>
-      (an imaginary filter). The same method applies to each of those
-      elements. Here, we will discuss how to use those elements to insert
-      (using fakesrc) or grab (using fakesink or identity) data from a
+      There's two possible elements that you can use for the above-mentioned
+      purposes. Those are called <quote>appsrc</quote> (an imaginary source)
+      and <quote>appsink</quote> (an imaginary sink). The same method applies
+      to each of those elements. Here, we will discuss how to use those
+      elements to insert (using appsrc) or grab (using appsink) data from a
       pipeline, and how to set negotiation.
     </para>
     <para>
-      Those who're paying close attention will notice that the purpose
-      of identity is almost identical to that of probes. Indeed, this is
-      true. Probes allow for the same purpose, and a bunch more, and
-      with less overhead plus dynamic removing/adding of handlers, but
-      apart from those, probes and identity have the same purpose, just
-      in a completely different implementation type.
+      Both appsrc and appsink provide 2 sets of API. One API uses standard
+      GObject (action) signals and properties. The same API is also
+      available as a regular C api. The C api is more performant but
+      requires you to link to the app library in order to use the elements.
     </para>
 
-    <sect2 id="section-spoof-handoff">
-      <title>Inserting or grabbing data</title>
+    <sect2 id="section-spoof-appsrc">
+      <title>Inserting data with appsrc</title>
       <para>
-        The three before-mentioned elements (fakesrc, fakesink and identity)
-        each have a <quote>handoff</quote> signal that will be called in
-        the <function>_get ()</function>- (fakesrc) or <function>_chain
-        ()</function>-function (identity, fakesink). In the signal handler,
-        you can set (fakesrc) or get (identity, fakesink) data to/from the
-        provided buffer. Note that in the case of fakesrc, you have to set
-        the size of the provided buffer using the <quote>sizemax</quote>
-        property. For both fakesrc and fakesink, you also have to set the
-        <quote>signal-handoffs</quote> property for this method to work.
+        First we look at some examples for appsrc, which lets you insert data
+        into the pipeline from the application. Appsrc has some configuration
+        options that define how it will operate. You should decide about the
+        following configurations:
       </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            Will the appsrc operate in push or pull mode. The stream-type
+            property can be used to control this. stream-type of
+            <quote>random-access</quote> will activate pull mode scheduling
+            while the other stream-types activate push mode.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The caps of the buffers that appsrc will push out. This needs to
+            be configured with the caps property. The caps must be set to a
+            fixed caps and will be used to negotiate a format downstream.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            It the appsrc operates in live mode or not. This can be configured
+            with the is-live property. When operating in live-mode it is
+            important to configure the min-latency and max-latency in appsrc.
+            The min-latency should be set to the amount of time it takes between
+            capturing a buffer and when it is pushed inside appsrc.
+            In live mode, you should timestamp the buffers with the pipeline
+            running-time when the first byte of the buffer was captured before
+            feeding them to appsrc. You can let appsrc do the timestaping with
+            the do-timestamp property (but then the min-latency must be set
+            to 0 because it timestamps based on the running-time when the buffer
+            entered appsrc).
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The format of the SEGMENT event that appsrc will push. The format
+            has implications for how the running-time of the buffers will
+            be calculated so you must be sure you understand this. For
+            live sources you probably want to set the format property to
+            GST_FORMAT_TIME. For non-live source it depends on the media type
+            that you are handling. If you plan to timestamp the buffers, you
+            should probably put a GST_FORMAT_TIME format, otherwise
+            GST_FORMAT_BYTES might be appropriate.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            If appsrc operates in random-access mode, it is important to configure
+            the size property of appsrc with the number of bytes in the stream.
+            This will allow downstream elements to know the size of the media and
+            alows them to seek to the end of the stream when needed.
+          </para>
+        </listitem>
+      </itemizedlist>
       <para>
-        Note that your handoff function should <emphasis>not</emphasis>
-        block, since this will block pipeline iteration. Also, do not try
-        to use all sort of weird hacks in such functions to accomplish
-        something that looks like synchronization or so; it's not the right
-        way and will lead to issues elsewhere. If you're doing any of this,
-        you're basically misunderstanding the &GStreamer; design.
+        The main way of handling data to appsrc is by using the function
+        <function>gst_app_src_push_buffer ()</function> or by emiting the
+        push-buffer action signal.  This will put the buffer onto a queue from
+        which appsrc will read from in its streaming thread. It is important
+        to note that data transport will not happen from the thread that
+        performed the push-buffer call.
       </para>
-    </sect2>
-
-    <sect2 id="section-spoof-format">
-      <title>Forcing a format</title>
-      <para>
-        Sometimes, when using fakesrc as a source in your pipeline, you'll
-        want to set a specific format, for example a video size and format
-        or an audio bitsize and number of channels. You can do this by
-        forcing a specific <classname>GstCaps</classname> on the pipeline,
-        which is possible by using <emphasis>filtered caps</emphasis>. You
-        can set a filtered caps on a link by using the
-        <quote>capsfilter</quote> element in between the two elements, and
-        specifying a <classname>GstCaps</classname> as
-        <quote>caps</quote> property on this element. It will then
-        only allow types matching that specified capability set for
-       negotiation.  See also <xref linkend="section-caps-filter"/>.
+      <para>
+        The <quote>max-bytes</quote> property controls how much data can be
+        queued in appsrc before appsrc considers the queue full. A filled
+        internal queue will always signal the <quote>enough-data</quote>
+        signal, which signals the application that it should stop pushing
+        data into appsrc. The <quote>block</quote> property will cause appsrc to
+        block the push-buffer method until free data becomes available again.
+      </para>
+      <para>
+        When the internal queue is running out of data, the
+        <quote>need-data</quote> signal is emitted, which signals the application
+        that it should start pushing more data into appsrc.
+      </para>
+      <para>
+        In addition to the <quote>need-data</quote> and <quote>enough-data</quote>
+        signals, appsrc can emit the <quote>seek-data</quote> signal when the
+        <quote>stream-mode</quote> property is set to <quote>seekable</quote>
+        or <quote>random-access</quote>. The signal argument will contain the
+        new desired position in the stream expressed in the unit set with the
+        <quote>format</quote> property. After receiving the seek-data signal,
+        the application should push-buffers from the new position.
+      </para>
+      <para>
+        When the last byte is pushed into appsrc, you must call
+        <function>gst_app_src_end_of_stream ()</function> to make it send
+        an EOS downstream.
       </para>
-    </sect2>
-
-    <sect2 id="section-spoof-example">
-      <title>Example application</title>
       <para>
-        This example application will generate black/white (it switches
-        every second) video to an X-window output by using fakesrc as a
-        source and using filtered caps to force a format. Since the depth
-        of the image depends on your X-server settings, we use a colorspace
-        conversion element to make sure that the output to your X server
-        will have the correct bitdepth. You can also set timestamps on the
-        provided buffers to override the fixed framerate.
+        These signals allow the application to operate appsrc in push and
+        pull mode as will be explained next.
       </para>
-      <programlisting><!-- example-begin fakesrc.c -->
-#include &lt;string.h&gt; /* for memset () */
-#include &lt;gst/gst.h&gt;
+
+      <sect3 id="section-spoof-appsrc-push">
+        <title>Using appsrc in push mode</title>
+        <para>
+          When appsrc is configured in push mode (stream-type is stream or
+          seekable), the application repeatedly calls the push-buffer method
+          with a new buffer. Optionally, the queue size in the appsrc can be
+          controlled with the enough-data and need-data signals by respectively
+          stopping/starting the push-buffer calls. The value of the
+          min-percent property defines how empty the internal appsrc queue
+          needs to be before the need-data signal will be fired. You can set
+          this to some value >0 to avoid completely draining the queue.
+        </para>
+        <para>
+          When the stream-type is set to seekable, don't forget to implement
+          a seek-data callback.
+        </para>
+        <para>
+          Use this model when implementing various network protocols or
+          hardware devices.
+        </para>
+      </sect3>
+
+      <sect3 id="section-spoof-appsrc-pull">
+        <title>Using appsrc in pull mode</title>
+        <para>
+          In the pull model, data is fed to appsrc from the need-data signal
+          handler. You should push exactly the amount of bytes requested in the
+          need-data signal. You are only allowed to push less bytes when you are
+          at the end of the stream.
+        </para>
+        <para>
+          Use this model for file access or other randomly accessable sources.
+        </para>
+      </sect3>
+
+      <sect3 id="section-spoof-appsrc-ex">
+        <title>Appsrc example</title>
+        <para>
+          This example application will generate black/white (it switches
+          every second) video to an Xv-window output by using appsrc as a
+          source with caps to force a format. We use a colorspace
+          conversion element to make sure that we feed the right format to
+          your X server. We configure a video stream with a variable framerate
+          (0/1) and we set the timestamps on the outgoing buffers in such
+          a way that we play 2 frames per second.
+        </para>
+        <para>
+          Note how we use the pull mode method of pushing new buffers into
+          appsrc although appsrc is running in push mode. 
+        </para>
+        <programlisting>
+<!-- example-begin appsrc.c -->
+<![CDATA[
+#include <gst/gst.h>
+
+static GMainLoop *loop;
 
 static void
-cb_handoff (GstElement *fakesrc,
-           GstBuffer  *buffer,
-           GstPad     *pad,
-           gpointer    user_data)
+cb_need_data (GstElement *appsrc,
+             guint       unused_size,
+             gpointer    user_data)
 {
   static gboolean white = FALSE;
-  GstMapInfo info;
-  
-  gst_buffer_map (buffer, &amp;info, GST_MAP_WRITE);
+  static GstClockTime timestamp = 0;
+  GstBuffer *buffer;
+  guint size;
+  GstFlowReturn ret;
+
+  size = 385 * 288 * 2;
+
+  buffer = gst_buffer_new_allocate (NULL, size, NULL);
 
   /* this makes the image black/white */
-  memset (info.data, white ? 0xff : 0x0, info.size);
+  gst_buffer_memset (buffer, 0, white ? 0xff : 0x0, size);
+  
   white = !white;
 
-  gst_buffer_unmap (buffer, &amp;info);
+  GST_BUFFER_PTS (buffer) = timestamp;
+  GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (1, GST_SECOND, 2);
+
+  timestamp += GST_BUFFER_DURATION (buffer);
+
+  g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);
+
+  if (ret != GST_FLOW_OK) {
+    /* something wrong, stop pushing */
+    g_main_loop_quit (loop);
+  }
 }
 
 gint
 main (gint   argc,
       gchar *argv[])
 {
-  GstElement *pipeline, *fakesrc, *flt, *conv, *videosink;
-  GMainLoop *loop;
+  GstElement *pipeline, *appsrc, *conv, *videosink;
 
   /* init GStreamer */
-  gst_init (&amp;argc, &amp;argv);
+  gst_init (&argc, &argv);
   loop = g_main_loop_new (NULL, FALSE);
 
   /* setup pipeline */
   pipeline = gst_pipeline_new ("pipeline");
-  fakesrc = gst_element_factory_make ("fakesrc", "source");
-  flt = gst_element_factory_make ("capsfilter", "flt");
+  appsrc = gst_element_factory_make ("appsrc", "source");
   conv = gst_element_factory_make ("videoconvert", "conv");
   videosink = gst_element_factory_make ("xvimagesink", "videosink");
 
   /* setup */
-  g_object_set (G_OBJECT (flt), "caps",
+  g_object_set (G_OBJECT (appsrc), "caps",
                gst_caps_new_simple ("video/x-raw",
                                     "format", G_TYPE_STRING, "RGB16",
                                     "width", G_TYPE_INT, 384,
                                     "height", G_TYPE_INT, 288,
-                                    "framerate", GST_TYPE_FRACTION, 1, 1,
+                                    "framerate", GST_TYPE_FRACTION, 0, 1,
                                     NULL), NULL);
-  gst_bin_add_many (GST_BIN (pipeline), fakesrc, flt, conv, videosink, NULL);
-  gst_element_link_many (fakesrc, flt, conv, videosink, NULL);
+  gst_bin_add_many (GST_BIN (pipeline), appsrc, conv, videosink, NULL);
+  gst_element_link_many (appsrc, conv, videosink, NULL);
 
-  /* setup fake source */
-  g_object_set (G_OBJECT (fakesrc),
-               "signal-handoffs", TRUE,
-               "sizemax", 384 * 288 * 2,
-               "sizetype", 2, NULL);
-  g_signal_connect (fakesrc, "handoff", G_CALLBACK (cb_handoff), NULL);
+  /* setup appsrc */
+  g_object_set (G_OBJECT (appsrc),
+               "stream-type", 0,
+               "format", GST_FORMAT_TIME, NULL);
+  g_signal_connect (appsrc, "need-data", G_CALLBACK (cb_need_data), NULL);
 
   /* play */
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
@@ -339,68 +783,793 @@ main (gint   argc,
   /* clean up */
   gst_element_set_state (pipeline, GST_STATE_NULL);
   gst_object_unref (GST_OBJECT (pipeline));
+  g_main_loop_unref (loop);
 
   return 0;
+  }
+]]>
+<!-- example-end appsrc.c -->
+        </programlisting>
+      </sect3>
+    </sect2>
+
+    <sect2 id="section-spoof-appsink">
+      <title>Grabbing data with appsink</title>
+      <para>
+        Unlike appsrc, appsink is a little easier to use. It also supports
+        a pull and push based model of getting data from the pipeline.
+      </para>
+      <para>
+        The normal way of retrieving samples from appsink is by using the
+        <function>gst_app_sink_pull_sample()</function> and
+        <function>gst_app_sink_pull_preroll()</function> methods or by using
+        the <quote>pull-sample</quote> and <quote>pull-preroll</quote>
+        signals.  These methods block until a sample becomes available in the
+        sink or when the sink is shut down or reaches EOS.
+      </para>
+      <para>
+        Appsink will internally use a queue to collect buffers from the
+        streaming thread. If the application is not pulling samples fast
+        enough, this queue will consume a lot of memory over time. The
+        <quote>max-buffers</quote> property can be used to limit the queue
+        size. The <quote>drop</quote> property controls whether the
+        streaming thread blocks or if older buffers are dropped when the
+        maximum queue size is reached. Note that blocking the streaming thread
+        can negatively affect real-time performance and should be avoided.
+      </para>
+      <para>
+        If a blocking behaviour is not desirable, setting the 
+        <quote>emit-signals</quote> property to TRUE will make appsink emit
+        the <quote>new-sample</quote> and <quote>new-preroll</quote> signals
+        when a sample can be pulled without blocking.
+      </para>
+      <para>
+        The <quote>caps</quote> property on appsink can be used to control
+        the formats that appsink can receive. This property can contain
+        non-fixed caps, the format of the pulled samples can be obtained by
+        getting the sample caps.
+      </para>
+      <para>
+        If one of the pull-preroll or pull-sample methods return NULL, the
+        appsink is stopped or in the EOS state. You can check for the EOS state
+        with the <quote>eos</quote> property or with the
+        <function>gst_app_sink_is_eos()</function> method.
+      </para>
+      <para>
+        The eos signal can also be used to be informed when the EOS state is
+        reached to avoid polling.
+      </para>
+      <para>
+        Consider configuring the following properties in the appsink:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            The <quote>sync</quote> property if you want to have the sink
+            base class synchronize the buffer against the pipeline clock
+            before handing you the sample.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Enable Quality-of-Service with the <quote>qos</quote> property.
+            If you are dealing with raw video frames and let the base class
+            sycnhronize on the clock, it might be a good idea to also let
+            the base class send QOS events upstream.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The caps property that contains the accepted caps. Upstream elements
+            will try to convert the format so that it matches the configured
+            caps on appsink. You must still check the
+            <classname>GstSample</classname> to get the actual caps of the
+            buffer.
+          </para>
+        </listitem>
+      </itemizedlist>
+
+      <sect3 id="section-spoof-appsink-ex">
+        <title>Appsink example</title>
+        <para>
+          What follows is an example on how to capture a snapshot of a video
+          stream using appsink.
+        </para>
+        <programlisting>
+<!-- example-begin appsink.c -->
+<![CDATA[
+#include <gst/gst.h>
+#ifdef HAVE_GTK
+#include <gtk/gtk.h>
+#endif
+
+#include <stdlib.h>
+
+#define CAPS "video/x-raw,format=RGB,width=160,pixel-aspect-ratio=1/1"
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *pipeline, *sink;
+  gint width, height;
+  GstSample *sample;
+  gchar *descr;
+  GError *error = NULL;
+  gint64 duration, position;
+  GstStateChangeReturn ret;
+  gboolean res;
+  GstMapInfo map;
+
+  gst_init (&argc, &argv);
+
+  if (argc != 2) {
+    g_print ("usage: %s <uri>\n Writes snapshot.png in the current directory\n",
+        argv[0]);
+    exit (-1);
+  }
+
+  /* create a new pipeline */
+  descr =
+      g_strdup_printf ("uridecodebin uri=%s ! videoconvert ! videoscale ! "
+      " appsink name=sink caps=\"" CAPS "\"", argv[1]);
+  pipeline = gst_parse_launch (descr, &error);
+
+  if (error != NULL) {
+    g_print ("could not construct pipeline: %s\n", error->message);
+    g_error_free (error);
+    exit (-1);
+  }
+
+  /* get sink */
+  sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
+
+  /* set to PAUSED to make the first frame arrive in the sink */
+  ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  switch (ret) {
+    case GST_STATE_CHANGE_FAILURE:
+      g_print ("failed to play the file\n");
+      exit (-1);
+    case GST_STATE_CHANGE_NO_PREROLL:
+      /* for live sources, we need to set the pipeline to PLAYING before we can
+       * receive a buffer. We don't do that yet */
+      g_print ("live sources not supported yet\n");
+      exit (-1);
+    default:
+      break;
+  }
+  /* This can block for up to 5 seconds. If your machine is really overloaded,
+   * it might time out before the pipeline prerolled and we generate an error. A
+   * better way is to run a mainloop and catch errors there. */
+  ret = gst_element_get_state (pipeline, NULL, NULL, 5 * GST_SECOND);
+  if (ret == GST_STATE_CHANGE_FAILURE) {
+    g_print ("failed to play the file\n");
+    exit (-1);
+  }
+
+  /* get the duration */
+  gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration);
+
+  if (duration != -1)
+    /* we have a duration, seek to 5% */
+    position = duration * 5 / 100;
+  else
+    /* no duration, seek to 1 second, this could EOS */
+    position = 1 * GST_SECOND;
+
+  /* seek to the a position in the file. Most files have a black first frame so
+   * by seeking to somewhere else we have a bigger chance of getting something
+   * more interesting. An optimisation would be to detect black images and then
+   * seek a little more */
+  gst_element_seek_simple (pipeline, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_FLUSH, position);
+
+  /* get the preroll buffer from appsink, this block untils appsink really
+   * prerolls */
+  g_signal_emit_by_name (sink, "pull-preroll", &sample, NULL);
+
+  /* if we have a buffer now, convert it to a pixbuf. It's possible that we
+   * don't have a buffer because we went EOS right away or had an error. */
+  if (sample) {
+    GstBuffer *buffer;
+    GstCaps *caps;
+    GstStructure *s;
+
+    /* get the snapshot buffer format now. We set the caps on the appsink so
+     * that it can only be an rgb buffer. The only thing we have not specified
+     * on the caps is the height, which is dependant on the pixel-aspect-ratio
+     * of the source material */
+    caps = gst_sample_get_caps (sample);
+    if (!caps) {
+      g_print ("could not get snapshot format\n");
+      exit (-1);
+    }
+    s = gst_caps_get_structure (caps, 0);
+
+    /* we need to get the final caps on the buffer to get the size */
+    res = gst_structure_get_int (s, "width", &width);
+    res |= gst_structure_get_int (s, "height", &height);
+    if (!res) {
+      g_print ("could not get snapshot dimension\n");
+      exit (-1);
+    }
+
+    /* create pixmap from buffer and save, gstreamer video buffers have a stride
+     * that is rounded up to the nearest multiple of 4 */
+    buffer = gst_sample_get_buffer (sample);
+    gst_buffer_map (buffer, &map, GST_MAP_READ);
+#ifdef HAVE_GTK
+    pixbuf = gdk_pixbuf_new_from_data (map.data,
+        GDK_COLORSPACE_RGB, FALSE, 8, width, height,
+        GST_ROUND_UP_4 (width * 3), NULL, NULL);
+
+    /* save the pixbuf */
+    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+#endif
+    gst_buffer_unmap (buffer, &map);
+  } else {
+    g_print ("could not make snapshot\n");
+  }
+
+  /* cleanup and exit */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  exit (0);
 }
-      <!-- example-end fakesrc.c --></programlisting>
+]]>
+<!-- example-end appsink.c -->
+</programlisting>
+      </sect3>
     </sect2>
   </sect1>
 
-  <sect1 id="section-data-manager">
-    <title>Embedding static elements in your application</title>
+  <sect1 id="section-spoof-format">
+    <title>Forcing a format</title>
     <para>
-      The <ulink type="http"
-      url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html">Plugin
-      Writer's Guide</ulink> describes in great detail how to write elements
-      for the &GStreamer; framework. In this section, we will solely discuss
-      how to embed such elements statically in your application. This can be
-      useful for application-specific elements that have no use elsewhere in
-      &GStreamer;.
+      Sometimes you'll want to set a specific format, for example a video
+      size and format or an audio bitsize and number of channels. You can
+      do this by forcing a specific <classname>GstCaps</classname> on
+      the pipeline, which is possible by using
+      <emphasis>filtered caps</emphasis>. You can set a filtered caps on
+      a link by using the <quote>capsfilter</quote> element in between the
+      two elements, and specifying a <classname>GstCaps</classname> as
+      <quote>caps</quote> property on this element. It will then
+      only allow types matching that specified capability set for
+      negotiation.  See also <xref linkend="section-caps-filter"/>.
     </para>
+
+    <sect2 id="section-dynamic-format">
+      <title>Changing format in a PLAYING pipeline</title>
+      <para>
+        It is also possible to dynamically change the format in a pipeline
+        while PLAYING. This can simply be done by changing the caps 
+        property on a capsfilter. The capsfilter will send a RECONFIGURE
+        event upstream that will make the upstream element attempt to
+        renegotiate a new format and allocator. This only works if
+        the upstream element is not using fixed caps on the source pad.
+      </para>
+      <para>
+        Below is an example of how you can change the caps of a pipeline
+        while in the PLAYING state:
+      </para>
+      <programlisting>
+<!-- example-begin dynformat.c -->
+<![CDATA[
+#include <stdlib.h>
+
+#include <gst/gst.h>
+
+#define MAX_ROUND 100
+
+int
+main (int argc, char **argv)
+{
+  GstElement *pipe, *filter;
+  GstCaps *caps;
+  gint width, height;
+  gint xdir, ydir;
+  gint round;
+  GstMessage *message;
+
+  gst_init (&argc, &argv);
+
+  pipe = gst_parse_launch_full ("videotestsrc ! capsfilter name=filter ! "
+             "ximagesink", NULL, GST_PARSE_FLAG_NONE, NULL);
+  g_assert (pipe != NULL);
+
+  filter = gst_bin_get_by_name (GST_BIN (pipe), "filter");
+  g_assert (filter);
+
+  width = 320;
+  height = 240;
+  xdir = ydir = -10;
+
+  for (round = 0; round < MAX_ROUND; round++) {
+    gchar *capsstr;
+    g_print ("resize to %dx%d (%d/%d)   \r", width, height, round, MAX_ROUND);
+
+    /* we prefer our fixed width and height but allow other dimensions to pass
+     * as well */
+    capsstr = g_strdup_printf ("video/x-raw, width=(int)%d, height=(int)%d",
+        width, height);
+
+    caps = gst_caps_from_string (capsstr);
+    g_free (capsstr);
+    g_object_set (filter, "caps", caps, NULL);
+    gst_caps_unref (caps);
+
+    if (round == 0)
+      gst_element_set_state (pipe, GST_STATE_PLAYING);
+
+    width += xdir;
+    if (width >= 320)
+      xdir = -10;
+    else if (width < 200)
+      xdir = 10;
+
+    height += ydir;
+    if (height >= 240)
+      ydir = -10;
+    else if (height < 150)
+      ydir = 10;
+
+    message =
+        gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR,
+        50 * GST_MSECOND);
+    if (message) {
+      g_print ("got error           \n");
+
+      gst_message_unref (message);
+    }
+  }
+  g_print ("done                    \n");
+
+  gst_object_unref (filter);
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+
+  return 0;
+}
+]]>
+<!-- example-end dynformat.c -->
+      </programlisting>
+      <para>
+        Note how we use <function>gst_bus_poll()</function> with a
+        small timeout to get messages and also introduce a short
+        sleep.
+      </para>
+      <para>
+        It is possible to set multiple caps for the capsfilter separated
+        with a ;. The capsfilter will try to renegotiate to the first
+        possible format from the list.
+      </para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="section-dynamic-pipelines">
+    <title>Dynamically changing the pipeline</title>
     <para>
-      Dynamically loaded plugins contain a structure that's defined using
-      <function>GST_PLUGIN_DEFINE ()</function>. This structure is loaded
-      when the plugin is loaded by the &GStreamer; core. The structure
-      contains an initialization function (usually called
-      <function>plugin_init</function>) that will be called right after that.
-      It's purpose is to register the elements provided by the plugin with
-      the &GStreamer; framework. If you want to embed elements directly in
-      your application, the only thing you need to do is to replace
-         <function>GST_PLUGIN_DEFINE ()</function> with
-         <function>GST_PLUGIN_DEFINE_STATIC ()</function>. This will cause the
-      elements to be registered when your application loads, and the elements
-      will from then on be available like any other element, without them
-      having to be dynamically loadable libraries. In the example below, you
-      would be able to call <function>gst_element_factory_make
-      ("my-element-name", "some-name")</function> to create an instance of the
-      element.
+      In this section we talk about some techniques for dynamically
+      modifying the pipeline. We are talking specifically about changing
+      the pipeline while it is in the PLAYING state without interrupting
+      the flow.
     </para>
+    <para>
+      There are some important things to consider when building dynamic
+      pipelines:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          When removing elements from the pipeline, make sure that there
+          is no dataflow on unlinked pads because that will cause a fatal
+          pipeline error. Always block source pads (in push mode) or
+          sink pads (in pull mode) before unlinking pads.
+          See also <xref linkend="section-dynamic-changing"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          When adding elements to a pipeline, make sure to put the element
+          into the right state, usually the same state as the parent, before
+          allowing dataflow the element. When an element is newly created,
+          it is in the NULL state and will return an error when it
+          receives data.
+          See also <xref linkend="section-dynamic-changing"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          When adding elements to a pipeline, &GStreamer; will by default
+          set the clock and base-time on the element to the current values
+          of the pipeline. This means that the element will be able to
+          construct the same pipeline running-time as the other elements
+          in the pipeline. This means that sinks will synchronize buffers
+          like the other sinks in the pipeline and that sources produce
+          buffers with a running-time that matches the other sources.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          When unlinking elements from an upstream chain, always make sure
+          to flush any queued data in the element by sending an EOS event
+          down the element sink pad(s) and by waiting that the EOS leaves
+          the elements (with an event probe).
+          See also <xref linkend="section-dynamic-changing"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          A live source will produce buffers with a running-time of the
+          current running-time in the pipeline.
+        </para>
+        <para>
+          A pipeline without a live source produces buffers with a
+          running-time starting from 0. Likewise, after a flushing seek,
+          those pipelines reset the running-time back to 0.
+        </para>
+        <para>
+          The running-time can be changed with
+          <function>gst_pad_set_offset ()</function>. It is important to
+          know the running-time of the elements in the pipeline in order
+          to maintain synchronization.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Adding elements might change the state of the pipeline. Adding a
+          non-prerolled sink, for example, brings the pipeline back to the
+          prerolling state. Removing a non-prerolled sink, for example, might
+          change the pipeline to PAUSED and PLAYING state.
+        </para>
+        <para>
+          Adding a live source cancels the preroll stage and put the pipeline
+          to the playing state. Adding a live source or other live elements
+          might also change the latency of a pipeline.
+        </para>
+        <para>
+          Adding or removing elements to the pipeline might change the clock
+          selection of the pipeline. If the newly added element provides a clock,
+          it might be worth changing the clock in the pipeline to the new
+          clock. If, on the other hand, the element that provides the clock
+          for the pipeline is removed, a new clock has to be selected.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Adding and removing elements might cause upstream or downstream
+          elements to renegotiate caps and or allocators. You don't really
+          need to do anything from the application, plugins largely
+          adapt themself to the new pipeline topology in order to optimize
+          their formats and allocation strategy.
+        </para>
+        <para>
+          What is important is that when you add, remove or change elements
+          in the pipeline, it is possible that the pipeline needs to
+          negotiate a new format and this can fail. Usually you can fix this
+          by inserting the right converter elements where needed.
+          See also <xref linkend="section-dynamic-changing"/>.
+        </para>
+      </listitem>
+    </itemizedlist>
+
+    <para>
+      &GStreamer; offers support for doing about any dynamic pipeline
+      modification but it requires you to know a bit of details before
+      you can do this without causing pipeline errors. In the following
+      sections we will demonstrate a couple of typical use-cases.
+    </para>
+
+    <sect2 id="section-dynamic-changing">
+      <title>Changing elements in a pipeline</title>
+      <para>
+        In the next example we look at the following chain of elements:
+      </para>
+      <programlisting>
+            - ----.      .----------.      .---- -
+         element1 |      | element2 |      | element3
+                src -> sink       src -> sink
+            - ----'      '----------'      '---- -
+      </programlisting>
+      <para>
+        We want to change element2 by element4 while the pipeline is in
+        the PLAYING state. Let's say that element2 is a visualization and
+        that you want to switch the visualization in the pipeline.
+      </para>
+      <para>
+        We can't just unlink element2's sinkpad from element1's source
+        pad because that would leave element1's source pad
+        unlinked and would cause a streaming error in the pipeline when
+        data is pushed on the source pad.
+        The technique is to block the dataflow from element1's source pad
+        before we change element2 by element4 and then resume dataflow
+        as shown in the following steps:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            Block element1's source pad with a blocking pad probe. When the
+            pad is blocked, the probe callback will be called.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Inside the block callback nothing is flowing between element1
+            and element2 and nothing will flow until unblocked.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Unlink element1 and element2.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Make sure data is flushed out of element2. Some elements might
+            internally keep some data, you need to make sure not to lose data
+            by forcing it out of element2. You can do this by pushing EOS into
+            element2, like this:
+          </para>
+          <itemizedlist>
+            <listitem>
+              <para>
+                Put an event probe on element2's source pad.
+              </para>
+            </listitem>
+            <listitem>
+              <para>
+                Send EOS to element2's sinkpad. This makes sure the all the
+                data inside element2 is forced out.
+              </para>
+            </listitem>
+            <listitem>
+              <para>
+                Wait for the EOS event to appear on element2's source pad.
+                When the EOS is received, drop it and remove the event
+                probe.
+              </para>
+            </listitem>
+          </itemizedlist>
+        </listitem>
+        <listitem>
+          <para>
+            Unlink element2 and element3. You can now also remove element2
+            from the pipeline and set the state to NULL.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Add element4 to the pipeline, if not already added. Link element4
+            and element3. Link element1 and element4.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Make sure element4 is in the same state as the rest of the elements
+            in the pipeline. It should be at least in the PAUSED state before
+            it can receive buffers and events.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Unblock element1's source pad probe. This will let new data into
+            element4 and continue streaming.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        The above algorithm works when the source pad is blocked, i.e. when
+        there is dataflow in the pipeline. If there is no dataflow, there is
+        also no point in changing the element (just yet) so this algorithm can
+        be used in the PAUSED state as well.
+      </para>
+      <para>
+        Let show you how this works with an example. This example changes the
+        video effect on a simple pipeline every second.
+      </para>
+      <programlisting>
+<!-- example-begin effectswitch.c -->
+<![CDATA[
+#include <gst/gst.h>
+
+static gchar *opt_effects = NULL;
+
+#define DEFAULT_EFFECTS "identity,exclusion,navigationtest," \
+    "agingtv,videoflip,vertigotv,gaussianblur,shagadelictv,edgetv"
+
+static GstPad *blockpad;
+static GstElement *conv_before;
+static GstElement *conv_after;
+static GstElement *cur_effect;
+static GstElement *pipeline;
+
+static GQueue effects = G_QUEUE_INIT;
+
+static GstPadProbeReturn
+event_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GMainLoop *loop = user_data;
+  GstElement *next;
+
+  if (GST_EVENT_TYPE (GST_PAD_PROBE_INFO_DATA (info)) != GST_EVENT_EOS)
+    return GST_PAD_PROBE_OK;
+
+  gst_pad_remove_probe (pad, GST_PAD_PROBE_INFO_ID (info));
+
+  /* push current event back into the queue */
+  g_queue_push_tail (&effects, gst_object_ref (cur_effect));
+  /* take next effect from the queue */
+  next = g_queue_pop_head (&effects);
+  if (next == NULL) {
+    GST_DEBUG_OBJECT (pad, "no more effects");
+    g_main_loop_quit (loop);
+    return GST_PAD_PROBE_DROP;
+  }
+
+  g_print ("Switching from '%s' to '%s'..\n", GST_OBJECT_NAME (cur_effect),
+      GST_OBJECT_NAME (next));
+
+  gst_element_set_state (cur_effect, GST_STATE_NULL);
+
+  /* remove unlinks automatically */
+  GST_DEBUG_OBJECT (pipeline, "removing %" GST_PTR_FORMAT, cur_effect);
+  gst_bin_remove (GST_BIN (pipeline), cur_effect);
+
+  GST_DEBUG_OBJECT (pipeline, "adding   %" GST_PTR_FORMAT, next);
+  gst_bin_add (GST_BIN (pipeline), next);
 
-    <programlisting>
-/*
- * Here, you would write the actual plugin code.
- */
+  GST_DEBUG_OBJECT (pipeline, "linking..");
+  gst_element_link_many (conv_before, next, conv_after, NULL);
 
-[..]
+  gst_element_set_state (next, GST_STATE_PLAYING);
+
+  cur_effect = next;
+  GST_DEBUG_OBJECT (pipeline, "done");
+
+  return GST_PAD_PROBE_DROP;
+}
+
+static GstPadProbeReturn
+pad_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstPad *srcpad, *sinkpad;
+
+  GST_DEBUG_OBJECT (pad, "pad is blocked now");
+
+  /* remove the probe first */
+  gst_pad_remove_probe (pad, GST_PAD_PROBE_INFO_ID (info));
+
+  /* install new probe for EOS */
+  srcpad = gst_element_get_static_pad (cur_effect, "src");
+  gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_BLOCK |
+      GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, event_probe_cb, user_data, NULL);
+  gst_object_unref (srcpad);
+
+  /* push EOS into the element, the probe will be fired when the
+   * EOS leaves the effect and it has thus drained all of its data */
+  sinkpad = gst_element_get_static_pad (cur_effect, "sink");
+  gst_pad_send_event (sinkpad, gst_event_new_eos ());
+  gst_object_unref (sinkpad);
+
+  return GST_PAD_PROBE_OK;
+}
 
 static gboolean
-register_elements (GstPlugin *plugin)
+timeout_cb (gpointer user_data)
 {
-  return gst_element_register (plugin, "my-element-name",
-                              GST_RANK_NONE, MY_PLUGIN_TYPE);
+  gst_pad_add_probe (blockpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+      pad_probe_cb, user_data, NULL);
+
+  return TRUE;
 }
 
-GST_PLUGIN_DEFINE_STATIC (
-  GST_VERSION_MAJOR,
-  GST_VERSION_MINOR,
-  "my-private-plugins",
-  "Private elements of my application",
-  register_elements,
-  VERSION,
-  "LGPL",
-  "my-application",
-  "http://www.my-application.net/"
-)
-    </programlisting>
+static gboolean
+bus_cb (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GMainLoop *loop = user_data;
+
+  switch (GST_MESSAGE_TYPE (msg)) {
+    case GST_MESSAGE_ERROR:{
+      GError *err = NULL;
+      gchar *dbg;
+
+      gst_message_parse_error (msg, &err, &dbg);
+      gst_object_default_error (msg->src, err, dbg);
+      g_error_free (err);
+      g_free (dbg);
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char **argv)
+{
+  GOptionEntry options[] = {
+    {"effects", 'e', 0, G_OPTION_ARG_STRING, &opt_effects,
+        "Effects to use (comma-separated list of element names)", NULL},
+    {NULL}
+  };
+  GOptionContext *ctx;
+  GError *err = NULL;
+  GMainLoop *loop;
+  GstElement *src, *sink;
+  gchar **effect_names, **e;
+
+  ctx = g_option_context_new ("");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", err->message);
+    return 1;
+  }
+  g_option_context_free (ctx);
+
+  if (opt_effects != NULL)
+    effect_names = g_strsplit (opt_effects, ",", -1);
+  else
+    effect_names = g_strsplit (DEFAULT_EFFECTS, ",", -1);
+
+  for (e = effect_names; e != NULL && *e != NULL; ++e) {
+    GstElement *el;
+
+    el = gst_element_factory_make (*e, NULL);
+    if (el) {
+      g_print ("Adding effect '%s'\n", *e);
+      g_queue_push_tail (&effects, el);
+    }
+  }
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  src = gst_element_factory_make ("videotestsrc", NULL);
+  g_object_set (src, "is-live", TRUE, NULL);
+
+  blockpad = gst_element_get_static_pad (src, "src");
+
+  conv_before = gst_element_factory_make ("videoconvert", NULL);
+
+  cur_effect = g_queue_pop_head (&effects);
+
+  conv_after = gst_element_factory_make ("videoconvert", NULL);
+
+  sink = gst_element_factory_make ("ximagesink", NULL);
+
+  gst_bin_add_many (GST_BIN (pipeline), src, conv_before, cur_effect,
+      conv_after, sink, NULL);
+
+  gst_element_link_many (src, conv_before, cur_effect, conv_after,
+      sink, NULL);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  gst_bus_add_watch (GST_ELEMENT_BUS (pipeline), bus_cb, loop);
+
+  g_timeout_add_seconds (1, timeout_cb, loop);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
+]]>
+<!-- example-end effectswitch.c -->
+      </programlisting>
+      <para>
+        Note how we added videoconvert elements before and after the effect.
+        This is needed because some elements might operate in different
+        colorspaces than other elements. By inserting the conversion elements
+        you ensure that the right format can be negotiated at any time.
+      </para>
+    </sect2>
   </sect1>
+
 </chapter>
index 1fa58975c56a9b175d903a2baabd8c9ac458bce3..ef41f4caee332819813ae0f7d3423b9298eeaa94 100644 (file)
     </para>
   </sect1>
 
-  <sect1 id="section-interfaces-mixer">
-    <title>The Mixer interface</title>
-
-    <para>
-      The mixer interface provides a uniform way to control the volume on a
-      hardware (or software) mixer. The interface is primarily intended to
-      be implemented by elements for audio inputs and outputs that talk
-      directly to the hardware (e.g. OSS or ALSA plugins).
-    </para>
-    <para>
-      Using this interface, it is possible to control a list of tracks
-      (such as Line-in, Microphone, etc.) from a mixer element. They can
-      be muted, their volume can be changed and, for input tracks, their
-      record flag can be set as well.
-    </para>
-    <para>
-      Example plugins implementing this interface include the OSS elements
-      (osssrc, osssink, ossmixer) and the ALSA plugins (alsasrc, alsasink
-      and alsamixer).
-    </para>
-    <para>
-      You should not use this interface for volume control in a playback
-      application. Either use a <classname>volume</classname> element or use
-      <classname>playbin</classname>'s <quote>volume</quote> property, or use
-      the <classname>audiosink</classname>'s <quote>volume</quote> property (if it has one).
-    </para>
-    <note>
-      <para>
-       In order for the <ulink type="http"
-         url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstmixer.html"><classname>GstMixer</classname></ulink>
-       interface to be
-        usable, the element implementing it needs to be in the right state,
-        so that the underlying mixer device is open. This usually means the
-        element needs to be at least in <classname>GST_STATE_READY</classname>
-        before you can use this interface. You will get confusing warnings
-        if the element is not in the right state when the interface is used.
-      </para>
-    </note>
-  </sect1>
-
-  <sect1 id="section-interfaces-tuner">
-    <title>The Tuner interface</title>
-
-    <para>
-      The tuner interface is a uniform way to control inputs and outputs
-      on a multi-input selection device. This is primarily used for input
-      selection on elements for TV- and capture-cards.
-    </para>
-    <para>
-      Using this interface, it is possible to select one track from a list
-      of tracks supported by that tuner-element. The tuner will then select
-      that track for media-processing internally. This can, for example, be
-      used to switch inputs on a TV-card (e.g. from Composite to S-video).
-    </para>
-    <para>
-      This interface is currently only implemented by the Video4linux and
-      Video4linux2 elements.
-    </para>
-    <note>
-      <para>
-       In order for the <ulink type="http"
-         url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gsttuner.html"><classname>GstTuner</classname></ulink>
-       interface to be
-        usable, the element implementing it needs to be in the right state,
-        so that the underlying device is open. This usually means the
-        element needs to be at least in <classname>GST_STATE_READY</classname>
-        before you can use this interface. You will get confusing warnings
-        if the element is not in the right state when the interface is used.
-      </para>
-    </note>
-  </sect1>
-
   <sect1 id="section-interfaces-colorbalance">
     <title>The Color Balance interface</title>
 
     </para>
     <para>
       The colorbalance interface is implemented by several plugins, including
-      xvimagesink and the Video4linux and Video4linux2 elements.
-    </para>
-  </sect1>
-
-  <sect1 id="section-interfaces-proprobe">
-    <title>The Property Probe interface</title>
-
-    <para>
-      The property probe is a way to autodetect allowed values for a
-      <classname>GObject</classname> property. It's primary use is to autodetect
-      devices in several elements. For example, the OSS elements use this
-      interface to detect all OSS devices on a system. Applications can then
-      <quote>probe</quote> this property and get a list of detected devices.
-    </para>
-    <note>
-      <para>
-        Given the overlap between HAL and the practical implementations of this
-        interface, this might in time be deprecated in favour of HAL.
-      </para>
-    </note>
-    <para>
-      This interface is currently implemented by many elements, including
-      the ALSA, OSS, XVideo, Video4linux and Video4linux2 elements.
+      xvimagesink and the Video4linux2 elements.
     </para>
   </sect1>
 
-  <sect1 id="section-interfaces-xoverlay">
-    <title>The X Overlay interface</title>
+  <sect1 id="section-interfaces-videooverlay">
+    <title>The Video Overlay interface</title>
 
     <para>
-      The X Overlay interface was created to solve the problem of embedding
+      The Video Overlay interface was created to solve the problem of embedding
       video streams in an application window. The application provides an
-      X-window to the element implementing this interface to draw on, and
-      the element will then use this X-window to draw on rather than creating
+      window handle to the element implementing this interface to draw on, and
+      the element will then use this window handle to draw on rather than creating
       a new toplevel window. This is useful to embed video in video players.
     </para>
     <para>
-      This interface is implemented by, amongst others, the Video4linux and
-      Video4linux2 elements and by ximagesink, xvimagesink and sdlvideosink.
+      This interface is implemented by, amongst others, the Video4linux2
+      elements and by ximagesink, xvimagesink and sdlvideosink.
     </para>
   </sect1>
 </chapter>
index 6a25e19f747df938674df3641e7b78b19641f59e..ec34a2eff634c90925f8f1193f22d9be9e062aee 100644 (file)
@@ -47,7 +47,7 @@
     </para>
     <programlisting>
 /* compile with:
- * gcc -o tags tags.c `pkg-config --cflags --libs gstreamer-0.10` */
+ * gcc -o tags tags.c `pkg-config --cflags --libs gstreamer-1.0` */
 #include &lt;gst/gst.h&gt;
 
 static void
index 218606e8dfce043b00d6cd9c0ebcd19df49abf03..5925640310db04f732f6e63092f190872cf2c54b 100644 (file)
     may want to have influence on some parts of those. &GStreamer; allows
     applications to force the use of multiple threads over some parts of
     a pipeline.
+    See <xref linkend="section-threads-uses"/>.
   </para>
+  <para> 
+    &GStreamer; can also notify you when threads are created so that you can
+    configure things such as the thread priority or the threadpool to use.
+    See <xref linkend="section-threads-status"/>.
+  </para>
+
+  <sect1 id="section-threads-scheduling">
+    <title>Scheduling in &GStreamer;</title>
+    <para>
+      Each element in the &GStreamer; pipeline decides how it is going to
+      be scheduled. Elements can choose if their pads are to be scheduled
+      push-based or pull-based. An element can, for example, choose to start
+      a thread to start pulling from the sink pad or/and start pushing on
+      the source pad. An element can also choose to use the upstream or
+      downstream thread for its data processing in push and pull mode
+      respectively. &GStreamer; does not pose any restrictions on how the
+      element chooses to be scheduled. See the Plugin Writer Guide for more
+      details.
+    </para>
+    <para>
+      What will happen in any case is that some elements will start a thread
+      for their data processing, called the <quote>streaming threads</quote>. 
+      The streaming threads, or <classname>GstTask</classname> objects, are
+      created from a <classname>GstTaskPool</classname> when the element
+      needs to make a streaming thread. In the next section we see how we
+      can receive notifications of the tasks and pools.
+    </para>
+  </sect1>
+
+  <sect1 id="section-threads-status">
+    <title>Configuring Threads in &GStreamer;</title>
+    <para>
+      A STREAM_STATUS message is posted on the bus to inform you about the
+      status of the streaming threads. You will get the following information
+      from the message:
+      <itemizedlist>
+        <listitem>
+          <para>
+            When a new thread is about to be created, you will be notified
+            of this with a GST_STREAM_STATUS_TYPE_CREATE type. It is then
+            possible to configure a <classname>GstTaskPool</classname> in
+            the <classname>GstTask</classname>. The custom taskpool will
+            provide custom threads for the task to implement the streaming
+            threads.
+          </para>
+          <para>
+            This message needs to be handled synchronously if you want to
+            configure a custom taskpool. If you don't configure the taskpool
+            on the task when this message returns, the task will use its
+            default pool.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            When a thread is entered or left. This is the moment where you
+            could configure thread priorities. You also get a notification
+            when a thread is destroyed.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            You get messages when the thread starts, pauses and stops. This
+            could be used to visualize the status of streaming threads in
+            a gui application.
+          </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+    <para>
+    </para>
+    <para>
+      We will now look at some examples in the next sections.
+    </para>
+
+    <sect2 id="section-threads-rt">
+      <title>Boost priority of a thread</title>
+      <programlisting>
+        .----------.    .----------.
+        | faksesrc |    | fakesink |
+        |         src->sink        |
+        '----------'    '----------'
+      </programlisting>
+      <para>
+        Let's look at the simple pipeline above. We would like to boost
+        the priority of the streaming thread.
+        It will be the fakesrc element that starts the streaming thread for
+        generating the fake data pushing them to the peer fakesink.
+        The flow for changing the priority would go like this:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            When going from READY to PAUSED state, udpsrc will require a
+            streaming thread for pushing data into the depayloader. It will
+            post a STREAM_STATUS message indicating its requirement for a
+            streaming thread.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The application will react to the STREAM_STATUS messages with a
+            sync bus handler. It will then configure a custom
+            <classname>GstTaskPool</classname> on the
+            <classname>GstTask</classname> inside the message. The custom
+            taskpool is responsible for creating the threads. In this
+            example we will make a thread with a higher priority.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Alternatively, since the sync message is called in the thread
+            context, you can use thread ENTER/LEAVE notifications to
+            change the priority or scheduling pollicy of the current thread.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        In a first step we need to implement a custom
+        <classname>GstTaskPool</classname> that we can configure on the task.
+        Below is the implementation of a <classname>GstTaskPool</classname>
+        subclass that uses pthreads to create a SCHED_RR real-time thread.
+        Note that creating real-time threads might require extra priveleges.
+      </para>
+      <programlisting>
+<!-- example-begin testrtpool.c a -->
+<!--
+#include <gst/gst.h>
+
+#define TEST_TYPE_RT_POOL             (test_rt_pool_get_type ())
+#define TEST_RT_POOL(pool)            (G_TYPE_CHECK_INSTANCE_CAST ((pool), TEST_TYPE_RT_POOL, TestRTPool))
+#define TEST_IS_RT_POOL(pool)         (G_TYPE_CHECK_INSTANCE_TYPE ((pool), TEST_TYPE_RT_POOL))
+#define TEST_RT_POOL_CLASS(pclass)    (G_TYPE_CHECK_CLASS_CAST ((pclass), TEST_TYPE_RT_POOL, TestRTPoolClass))
+#define TEST_IS_RT_POOL_CLASS(pclass) (G_TYPE_CHECK_CLASS_TYPE ((pclass), TEST_TYPE_RT_POOL))
+#define TEST_RT_POOL_GET_CLASS(pool)  (G_TYPE_INSTANCE_GET_CLASS ((pool), TEST_TYPE_RT_POOL, TestRTPoolClass))
+#define TEST_RT_POOL_CAST(pool)       ((TestRTPool*)(pool))
+
+typedef struct _TestRTPool TestRTPool;
+typedef struct _TestRTPoolClass TestRTPoolClass;
+
+struct _TestRTPool {
+  GstTaskPool    object;
+};
+
+struct _TestRTPoolClass {
+  GstTaskPoolClass parent_class;
+};
+
+GType           test_rt_pool_get_type    (void);
+
+GstTaskPool *   test_rt_pool_new         (void);
+
+-->
+<!-- example-end testrtpool.c a-->
+<!-- example-begin testrtpool.c b -->
+<![CDATA[
+#include <pthread.h>
+
+typedef struct
+{
+  pthread_t thread;
+} TestRTId;
+
+G_DEFINE_TYPE (TestRTPool, test_rt_pool, GST_TYPE_TASK_POOL);
+
+static void
+default_prepare (GstTaskPool * pool, GError ** error)
+{
+  /* we don't do anything here. We could construct a pool of threads here that
+   * we could reuse later but we don't */
+}
+
+static void
+default_cleanup (GstTaskPool * pool)
+{
+}
+
+static gpointer
+default_push (GstTaskPool * pool, GstTaskPoolFunction func, gpointer data,
+    GError ** error)
+{
+  TestRTId *tid;
+  gint res;
+  pthread_attr_t attr;
+  struct sched_param param;
+
+  tid = g_slice_new0 (TestRTId);
+
+  pthread_attr_init (&attr);
+  if ((res = pthread_attr_setschedpolicy (&attr, SCHED_RR)) != 0)
+    g_warning ("setschedpolicy: failure: %p", g_strerror (res));
+
+  param.sched_priority = 50;
+  if ((res = pthread_attr_setschedparam (&attr, &param)) != 0)
+    g_warning ("setschedparam: failure: %p", g_strerror (res));
+
+  if ((res = pthread_attr_setinheritsched (&attr, PTHREAD_EXPLICIT_SCHED)) != 0)
+    g_warning ("setinheritsched: failure: %p", g_strerror (res));
+
+  res = pthread_create (&tid->thread, &attr, (void *(*)(void *)) func, data);
+
+  if (res != 0) {
+    g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN,
+        "Error creating thread: %s", g_strerror (res));
+    g_slice_free (TestRTId, tid);
+    tid = NULL;
+  }
+
+  return tid;
+}
+
+static void
+default_join (GstTaskPool * pool, gpointer id)
+{
+  TestRTId *tid = (TestRTId *) id;
+
+  pthread_join (tid->thread, NULL);
+
+  g_slice_free (TestRTId, tid);
+}
+
+static void
+test_rt_pool_class_init (TestRTPoolClass * klass)
+{
+  GstTaskPoolClass *gsttaskpool_class;
+
+  gsttaskpool_class = (GstTaskPoolClass *) klass;
+
+  gsttaskpool_class->prepare = default_prepare;
+  gsttaskpool_class->cleanup = default_cleanup;
+  gsttaskpool_class->push = default_push;
+  gsttaskpool_class->join = default_join;
+}
+
+static void
+test_rt_pool_init (TestRTPool * pool)
+{
+}
+
+GstTaskPool *
+test_rt_pool_new (void)
+{
+  GstTaskPool *pool;
+
+  pool = g_object_new (TEST_TYPE_RT_POOL, NULL);
+
+  return pool;
+}
+]]>
+<!-- example-end testrtpool.c b -->
+      </programlisting>
+      <para>
+        The important function to implement when writing an taskpool is the
+        <quote>push</quote> function. The implementation should start a thread
+        that calls the given function. More involved implementations might
+        want to keep some threads around in a pool because creating and
+        destroying threads is not always the fastest operation.
+      </para>
+      <para>
+        In a next step we need to actually configure the custom taskpool when
+        the fakesrc needs it. For this we intercept the STREAM_STATUS messages
+        with a sync handler.
+      </para>
+      <programlisting>
+<!-- example-begin testrtpool.c c -->
+<![CDATA[
+static GMainLoop* loop;
+
+static void
+on_stream_status (GstBus     *bus,
+                  GstMessage *message,
+                  gpointer    user_data)
+{
+  GstStreamStatusType type;
+  GstElement *owner;
+  const GValue *val;
+  GstTask *task = NULL;
+
+  gst_message_parse_stream_status (message, &type, &owner);
+
+  val = gst_message_get_stream_status_object (message);
+
+  /* see if we know how to deal with this object */
+  if (G_VALUE_TYPE (val) == GST_TYPE_TASK) {
+    task = g_value_get_object (val);
+  }
+
+  switch (type) {
+    case GST_STREAM_STATUS_TYPE_CREATE:
+      if (task) {
+        GstTaskPool *pool;
+
+        pool = test_rt_pool_new();
+
+        gst_task_set_pool (task, pool);
+      }
+      break;
+    default:
+      break;
+  }
+}
+
+static void
+on_error (GstBus     *bus,
+          GstMessage *message,
+          gpointer    user_data)
+{
+  g_message ("received ERROR");
+  g_main_loop_quit (loop);
+}
+
+static void
+on_eos (GstBus     *bus,
+        GstMessage *message,
+        gpointer    user_data)
+{
+  g_main_loop_quit (loop);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *bin, *fakesrc, *fakesink;
+  GstBus *bus;
+  GstStateChangeReturn ret;
+  
+  gst_init (&argc, &argv);
+
+  /* create a new bin to hold the elements */
+  bin = gst_pipeline_new ("pipeline");
+  g_assert (bin);
+
+  /* create a source */
+  fakesrc = gst_element_factory_make ("fakesrc", "fakesrc");
+  g_assert (fakesrc);
+  g_object_set (fakesrc, "num-buffers", 50, NULL);
+
+  /* and a sink */
+  fakesink = gst_element_factory_make ("fakesink", "fakesink");
+  g_assert (fakesink);
+
+  /* add objects to the main pipeline */
+  gst_bin_add_many (GST_BIN (bin), fakesrc, fakesink, NULL);
+
+  /* link the elements */
+  gst_element_link (fakesrc, fakesink);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* get the bus, we need to install a sync handler */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
+  gst_bus_enable_sync_message_emission (bus);
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "sync-message::stream-status",
+      (GCallback) on_stream_status, NULL);
+  g_signal_connect (bus, "message::error",
+      (GCallback) on_error, NULL);
+  g_signal_connect (bus, "message::eos",
+      (GCallback) on_eos, NULL);
+
+  /* start playing */
+  ret = gst_element_set_state (bin, GST_STATE_PLAYING);
+  if (ret != GST_STATE_CHANGE_SUCCESS) {
+    g_message ("failed to change state");
+    return -1;
+  }
+
+  /* Run event loop listening for bus messages until EOS or ERROR */
+  g_main_loop_run (loop);
+
+  /* stop the bin */
+  gst_element_set_state (bin, GST_STATE_NULL);
+  gst_object_unref (bus);
+  g_main_loop_unref (loop);
+
+  return 0;
+}
+]]>
+<!-- example-end testrtpool.c c -->
+      </programlisting>
+      <para>
+        Note that this program likely needs root permissions in order to
+        create real-time threads. When the thread can't be created, the
+        state change function will fail, which we catch in the application
+        above.
+      </para>
+      <para>
+        When there are multiple threads in the pipeline, you will receive
+        multiple STREAM_STATUS messages. You should use the owner of the
+        message, which is likely the pad or the element that starts the
+        thread, to figure out what the function of this thread is in the
+        context of the application.
+      </para>
+    </sect2>
+  </sect1>
 
   <sect1 id="section-threads-uses">
     <title>When would you want to force a thread?</title>
+    <para>
+      We have seen that threads are created by elements but it is also
+      possible to insert elements in the pipeline for the sole purpose of
+      forcing a new thread in the pipeline.
+    </para>
     <para>
       There are several reasons to force the use of threads. However,
       for performance reasons, you never want to use one thread for every
           Data buffering, for example when dealing with network streams or
           when recording data from a live stream such as a video or audio
           card. Short hickups elsewhere in the pipeline will not cause data
-          loss.
+          loss. See also <xref linkend="section-buffering-stream"/> about network
+          buffering with queue2.
         </para>
        <figure float="1" id="section-thread-buffering-img">
          <title>Data buffering, from a networked source</title>
       Above, we've mentioned the <quote>queue</quote> element several times
       now. A queue is the thread boundary element through which you can
       force the use of threads. It does so by using a classic
-      provider/receiver model as learned in threading classes at
+      provider/consumer model as learned in threading classes at
       universities all around the world. By doing this, it acts both as a
       means to make data throughput between threads threadsafe, and it can
       also act as a buffer. Queues have several <classname>GObject</classname>
     </para>
   </sect1>
 
-  <sect1 id="section-threads-scheduling">
-    <title>Scheduling in &GStreamer;</title>
-
-    <para>
-      Scheduling of pipelines in &GStreamer; is done by using a thread for
-      each <quote>group</quote>, where a group is a set of elements separated
-      by <quote>queue</quote> elements. Within such a group, scheduling is
-      either push-based or pull-based, depending on which mode is supported
-      by the particular element. If elements support random access to data,
-      such as file sources, then elements downstream in the pipeline become
-      the entry point of this group (i.e. the element controlling the
-      scheduling of other elements). The entry point pulls data from upstream
-      and pushes data downstream, thereby calling data handling functions on
-      either type of element.
-    </para>
-    <para>
-      In practice, most elements in &GStreamer;, such as decoders, encoders,
-      etc. only support push-based scheduling, which means that in practice,
-      &GStreamer; uses a push-based scheduling model.
-    </para>
-  </sect1>
 </chapter>
index f6e01436f3387cdcc878f854e98d9ff4d9394aea..8022a5c9bf5527213be91695e6f6a36e69003e93 100644 (file)
@@ -74,7 +74,7 @@
       For example, <option>--gst-debug=oggdemux:5</option> would turn
       on debugging for the Ogg demuxer element. You can use wildcards as
       well. A debugging level of 0 will turn off all debugging, and a level
-      of 5 will turn on all debugging. Intermediate values only turn on
+      of 9 will turn on all debugging. Intermediate values only turn on
       some debugging (based on message severity; 2, for example, will only
       display errors and warnings). Here's a list of all available options:
     </para>
       </para>
     </sect2>
 
-    <sect2 id="section-applications-gst-editor">
-      <title>GstEditor</title>
-      <para> 
-        GstEditor is a set of widgets to display a graphical representation of a 
-        pipeline.
-      </para> 
-    </sect2>
-
   </sect1>
 </chapter>
diff --git a/docs/manual/appendix-compiling.xml b/docs/manual/appendix-compiling.xml
new file mode 100644 (file)
index 0000000..2d83c98
--- /dev/null
@@ -0,0 +1,76 @@
+<chapter id="chapter-compiling">
+  <title>Compiling</title>
+  <para>
+    This section talks about the different things you can do when building
+    and shipping your applications and plugins.
+  </para>
+
+  <sect1 id="section-compiling-embedding">
+    <title>Embedding static elements in your application</title>
+    <para>
+      The <ulink type="http"
+      url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html">Plugin
+      Writer's Guide</ulink> describes in great detail how to write elements
+      for the &GStreamer; framework. In this section, we will solely discuss
+      how to embed such elements statically in your application. This can be
+      useful for application-specific elements that have no use elsewhere in
+      &GStreamer;.
+    </para>
+    <para>
+      Dynamically loaded plugins contain a structure that's defined using
+      <function>GST_PLUGIN_DEFINE ()</function>. This structure is loaded
+      when the plugin is loaded by the &GStreamer; core. The structure
+      contains an initialization function (usually called
+      <function>plugin_init</function>) that will be called right after that.
+      It's purpose is to register the elements provided by the plugin with
+      the &GStreamer; framework. 
+      If you want to embed elements directly in
+      your application, the only thing you need to do is to replace
+         <function>GST_PLUGIN_DEFINE ()</function> with a call to
+          <function>gst_plugin_register_static ()</function>. As soon as you
+      call <function>gst_plugin_register_static ()</function>, the elements
+      will from then on be available like any other element, without them
+      having to be dynamically loadable libraries. In the example below, you
+      would be able to call <function>gst_element_factory_make
+      ("my-element-name", "some-name")</function> to create an instance of the
+      element.
+    </para>
+
+    <programlisting>
+<![CDATA[
+/*
+ * Here, you would write the actual plugin code.
+ */
+
+[..]
+
+static gboolean
+register_elements (GstPlugin *plugin)
+{
+  return gst_element_register (plugin, "my-element-name",
+                              GST_RANK_NONE, MY_PLUGIN_TYPE);
+}
+
+static
+my_code_init (void)
+{
+  ...
+
+  gst_plugin_register_static (
+    GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "my-private-plugins",
+    "Private elements of my application",
+    register_elements,
+    VERSION,
+    "LGPL",
+    "my-application-source",
+    "my-application",
+    "http://www.my-application.net/")
+
+  ...
+}
+]]>
+    </programlisting>
+  </sect1>
+</chapter>
index c55edb8f560245591acba1731f8adbf35c7805e3..b16c427a7b93a4d6c10f2629e9224a7090b6494e 100644 (file)
         <para>
           For audio input and output, &GStreamer; provides input and
           output elements for several audio subsystems. Amongst others,
-          &GStreamer; includes elements for ALSA (alsasrc, alsamixer,
-          alsasink), OSS (osssrc, ossmixer, osssink) and Sun audio
-          (sunaudiosrc, sunaudiomixer, sunaudiosink).
+          &GStreamer; includes elements for ALSA (alsasrc,
+          alsasink), OSS (osssrc, osssink) Pulesaudio (pulsesrc, pulsesink)
+          and Sun audio (sunaudiosrc, sunaudiomixer, sunaudiosink).
         </para>
       </listitem>
       <listitem>
         <para>
           For video input, &GStreamer; contains source elements for
-          Video4linux (v4lsrc, v4lmjpegsrc, v4lelement and v4lmjpegisnk)
-          and Video4linux2 (v4l2src, v4l2element).
+          Video4linux2 (v4l2src, v4l2element, v4l2sink).
         </para>
       </listitem>
       <listitem>
@@ -236,7 +235,7 @@ main (gint argc, gchar **argv)
 
     <warning>
 <para>
-Note: this section is out of date. GStreamer-0.10 has much better
+Note: this section is out of date. GStreamer-1.0 has much better
 support for win32 than previous versions though and should usually compile
 and work out-of-the-box both using MSYS/MinGW or Microsoft compilers. The
 <ulink url="http://gstreamer.freedesktop.org">GStreamer web site</ulink> and the
@@ -273,7 +272,7 @@ available in your system PATH.</para>
 <listitem><para>libiconv</para></listitem>
 </itemizedlist>
 
-<para>Work is being done to provide pre-compiled GStreamer-0.10 libraries as
+<para>Work is being done to provide pre-compiled GStreamer-1.0 libraries as
 a packages for win32. Check the <ulink url="http://gstreamer.freedesktop.org">
 GStreamer web site</ulink> and check our
 <ulink url="http://news.gmane.org/gmane.comp.video.gstreamer.devel">mailing list
@@ -301,7 +300,7 @@ for convenience (people who don't want to install GNU tools).</para>
   <sect2 id="section-win32-install">
 <title>Installation on the system</title>
 
-<para>FIXME: This section needs be updated for GStreamer-0.10.</para>
+<para>FIXME: This section needs be updated for GStreamer-1.0.</para>
 
 <!--
 <para>By default, GStreamer needs a registry. You have to generate it using "gst-register.exe". It will create
index fe2c8cb410c443cf6ae2234389900c3c23c31e0d..107db3e591e9968916d761d54444dbbaf8702b10 100644 (file)
     </itemizedlist>
   </sect1>
 </chapter>
+<chapter id="chapter-porting-1.0">
+  <title>Porting 0.10 applications to 1.0</title>
+  <para>
+    This section of the appendix will discuss shortly what changes to
+    applications will be needed to quickly and conveniently port most
+    applications from &GStreamer;-0.10 to &GStreamer;-1.0, with references
+    to the relevant sections in this Application Development Manual
+    where needed. With this list, it should be possible to port simple
+    applications to &GStreamer;-1.0 in less than a day.
+  </para>
+
+  <sect1 id="section-porting-objects-1.0">
+    <title>List of changes</title>
+    <itemizedlist>
+      <listitem>
+        <para>
+          All deprecated methods were removed. Recompile against 0.10 with
+          DISABLE_DEPRECATED and fix issues before attempting to port to 1.0.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          "playbin2" has been renamed to "playbin", with similar API
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          "decodebin2" has been renamed to "decodebin", with similar API. Note
+          that there is no longer a "new-decoded-pad" signal, just use GstElement's
+          "pad-added" signal instead (but don't forget to remove the 'gboolean last'
+          argument from your old signal callback functino signature).
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          the names of some "formatted" pad templates has been changed from e.g.
+          "src%d" to "src%u" or "src_%u" or similar, since we don't want to see
+          negative numbers in pad names. This mostly affects applications that
+          create request pads from elements.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          some elements that used to have a single dynamic source pad have a
+          source pad now. Example: wavparse, id3demux, iceydemux, apedemux.
+          (This does not affect applications using decodebin or playbin).
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          playbin now proxies the GstVideoOverlay (former GstXOverlay) interface,
+          so most applications can just remove the sync bus handler where they
+          would set the window ID, and instead just set the window ID on playbin
+          from the application thread before starting playback.
+        </para>
+        <para>
+          playbin also proxies the GstColorBalance and GstNavigation interfaces,
+          so applications that use this don't need to go fishing for elements
+          that may implement those any more, but can just use them unconditionally.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          multifdsink, tcpclientsink, tcpclientsrc, tcpserversrc the protocol property
+          is removed, use gdppay and gdpdepay.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          XML serialization was removed.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Probes and pad blocking was merged into new pad probes.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Position, duration and convert functions no longer use an inout parameter
+          for the destination format.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Video and audio caps were simplified. audio/x-raw-int and audio/x-raw-float
+          are now all under the audio/x-raw media type. Similarly, video/x-raw-rgb
+          and video/x-raw-yuv are now video/x-raw.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          ffmpegcolorspace was removed and replaced with videoconvert.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          GstMixerInterface / GstTunerInterface were removed without replacement.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          The GstXOverlay interface was renamed to GstVideoOverlay, and now part
+          of the video library in gst-plugins-base, as the interfaces library
+          no longer exists.
+        </para>
+        <para>
+          The name of the GstXOverlay "prepare-xwindow-id" message has changed
+          to "prepare-window-handle" (and GstXOverlay has been renamed to
+          GstVideoOverlay). Code that checks for the string directly should be
+          changed to use gst_is_video_overlay_prepare_window_handle_message(message)
+          instead.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          The GstPropertyProbe interface was removed. the is no replacement yet,
+          but a more featureful replacement for device discovery and feature
+          querying is planned, see https://bugzilla.gnome.org/show_bug.cgi?id=678402
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          gst_uri_handler_get_uri() and the get_uri vfunc now return a copy of
+          the URI string
+        </para>
+        <para>
+          gst_uri_handler_set_uri() and the set_uri vfunc now take an additional
+          GError argument so the handler can notify the caller why it didn't
+          accept a particular URI.
+        </para>
+        <para>
+          gst_uri_handler_set_uri() now checks if the protocol of the URI passed
+          is one of the protocols advertised by the uri handler, so set_uri vfunc
+          implementations no longer need to check that as well.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          GstTagList is now an opaque mini object instead of being typedefed to a
+          GstStructure. While it was previously okay (and in some cases required because of
+          missing taglist API) to cast a GstTagList to a GstStructure or use
+          gst_structure_* API on taglists, you can no longer do that. Doing so will
+          cause crashes.
+        </para>
+        <para>
+          Also, tag lists are refcounted now, and can therefore not be freely
+          modified any longer. Make sure to call gst_tag_list_make_writable (taglist)
+          before adding, removing or changing tags in the taglist.
+        </para>
+        <para>
+          GST_TAG_IMAGE, GST_TAG_PREVIEW_IMAGE, GST_TAG_ATTACHMENT: many tags that
+          used to be of type GstBuffer are now of type GstSample (which is basically
+          a struct containing a buffer alongside caps and some other info).
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          GstController has now been merged into GstObject. It does not exists as an
+          individual object anymore. In addition core contains a GstControlSource base
+          class and the GstControlBinding. The actual control sources are in the controller
+          library as before. The 2nd big change is that control sources generate
+          a sequence of gdouble values and those are mapped to the property type and
+          value range by GstControlBindings.
+        </para>
+        <para>
+          The whole gst_controller_* API is gone and now available in simplified form
+          under gst_object_*. ControlSources are now attached via GstControlBinding
+          to properties. There are no GValue arguments used anymore when programming
+          control sources.
+        </para>
+      </listitem>
+    </itemizedlist>
+  </sect1>
+</chapter>
index ca8eb11b875190482aeb70f5d717ba343f5cecfa..b888a1726c4c33d02027fa9c3a85e31b549cbb7f 100644 (file)
@@ -79,7 +79,7 @@ main (int argc, char *argv[])
       GError *err = NULL; /* error to show to users                 */
       gchar *dbg = NULL;  /* additional debug string for developers */
 
-      gst_message_parse_error (msg, &err, &dbg);
+      gst_message_parse_error (msg, &amp;err, &amp;dbg);
       if (err) {
         g_printerr ("ERROR: %s\n", err-&gt;message);
         g_error_free (err);
@@ -193,76 +193,140 @@ gst-inspect mad
     </para> 
 
     <screen>
+<![CDATA[
 Factory Details:
-  Long name:   Audio Sink (OSS)
-  Class:       Sink/Audio
-  Description: Output to a sound card via OSS
-  Version:     0.3.3.1
-  Author(s):   Erik Walthinsen &lt;omega@cse.ogi.edu&gt;, Wim Taymans &lt;wim.taymans@chello.be&gt;
-  Copyright:   (C) 1999
+  Rank:         secondary (128)
+  Long-name:            Audio Sink (OSS)
+  Klass:                Sink/Audio
+  Description:          Output to a sound card via OSS
+  Author:               Erik Walthinsen <omega@cse.ogi.edu>, Wim Taymans <wim.taymans@chello.be>
+
+Plugin Details:
+  Name:                 ossaudio
+  Description:          OSS (Open Sound System) support for GStreamer
+  Filename:             /home/wim/gst/head/gst-plugins-good/sys/oss/.libs/libgstossaudio.so
+  Version:              1.0.0.1
+  License:              LGPL
+  Source module:        gst-plugins-good
+  Source release date:  2012-09-25 12:52 (UTC)
+  Binary package:       GStreamer Good Plug-ins git
+  Origin URL:           Unknown package origin
 
 GObject
- +----GstObject
-       +----GstElement
-             +----GstOssSink
+ +----GInitiallyUnowned
+       +----GstObject
+             +----GstElement
+                   +----GstBaseSink
+                         +----GstAudioBaseSink
+                               +----GstAudioSink
+                                     +----GstOssSink
 
 Pad Templates:
   SINK template: 'sink'
     Availability: Always
     Capabilities:
-      'osssink_sink':
-        MIME type: 'audio/raw':
-        format: String: int
-        endianness: Integer: 1234
-        width: List:
-          Integer: 8
-          Integer: 16
-        depth: List:
-          Integer: 8
-          Integer: 16
-        channels: Integer range: 1 - 2
-        law: Integer: 0
-        signed: List:
-          Boolean: FALSE
-          Boolean: TRUE
-        rate: Integer range: 1000 - 48000
+      audio/x-raw
+                 format: { S16LE, U16LE, S8, U8 }
+                 layout: interleaved
+                   rate: [ 1, 2147483647 ]
+               channels: 1
+      audio/x-raw
+                 format: { S16LE, U16LE, S8, U8 }
+                 layout: interleaved
+                   rate: [ 1, 2147483647 ]
+               channels: 2
+           channel-mask: 0x0000000000000003
 
 
 Element Flags:
-  GST_ELEMENT_THREADSUGGESTED
+  no flags set
 
 Element Implementation:
-  No loopfunc(), must be chain-based or not configured yet
-  Has change_state() function: gst_osssink_change_state
-  Has custom save_thyself() function: gst_element_save_thyself
-  Has custom restore_thyself() function: gst_element_restore_thyself
+  Has change_state() function: gst_audio_base_sink_change_state
 
 Clocking Interaction:
-  element requires a clock
-  element provides a clock: GstOssClock
+  element is supposed to provide a clock but returned NULL
+
+Element has no indexing capabilities.
+Element has no URI handling capabilities.
 
 Pads:
   SINK: 'sink'
     Implementation:
-      Has chainfunc(): 0x40056fc0
+      Has chainfunc(): gst_base_sink_chain
+      Has custom eventfunc(): gst_base_sink_event
+      Has custom queryfunc(): gst_base_sink_sink_query
+      Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default
     Pad Template: 'sink'
 
-Element Arguments:
-  name                                    : String (Default "element")
-  device                                  : String (Default "/dev/dsp")
-  mute                                    : Boolean (Default false)
-  format                                  : Integer (Default 16)
-  channels                                : Enum "GstAudiosinkChannels" (default 1)
-    (0):       Silence
-    (1):       Mono
-    (2):       Stereo
-  frequency                               : Integer (Default 11025)
-  fragment                                : Integer (Default 6)
-  buffer-size                             : Integer (Default 4096)
-
-Element Signals:
-  "handoff" :   void user_function (GstOssSink* object, 
-                               gpointer user_data);
+Element Properties:
+  name                : The name of the object
+                        flags: readable, writable
+                        String. Default: "osssink0"
+  parent              : The parent of the object
+                        flags: readable, writable
+                        Object of type "GstObject"
+  sync                : Sync on the clock
+                        flags: readable, writable
+                        Boolean. Default: true
+  max-lateness        : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited)
+                        flags: readable, writable
+                        Integer64. Range: -1 - 9223372036854775807 Default: -1 
+  qos                 : Generate Quality-of-Service events upstream
+                        flags: readable, writable
+                        Boolean. Default: false
+  async               : Go asynchronously to PAUSED
+                        flags: readable, writable
+                        Boolean. Default: true
+  ts-offset           : Timestamp offset in nanoseconds
+                        flags: readable, writable
+                        Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0 
+  enable-last-sample  : Enable the last-sample property
+                        flags: readable, writable
+                        Boolean. Default: false
+  last-sample         : The last sample received in the sink
+                        flags: readable
+                        Boxed pointer of type "GstSample"
+  blocksize           : Size in bytes to pull per buffer (0 = default)
+                        flags: readable, writable
+                        Unsigned Integer. Range: 0 - 4294967295 Default: 4096 
+  render-delay        : Additional render delay of the sink in nanoseconds
+                        flags: readable, writable
+                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
+  throttle-time       : The time to keep between rendered buffers
+                        flags: readable, writable
+                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
+  buffer-time         : Size of audio buffer in microseconds, this is the minimum latency that the sink reports
+                        flags: readable, writable
+                        Integer64. Range: 1 - 9223372036854775807 Default: 200000 
+  latency-time        : The minimum amount of data to write in each iteration in microseconds
+                        flags: readable, writable
+                        Integer64. Range: 1 - 9223372036854775807 Default: 10000 
+  provide-clock       : Provide a clock to be used as the global pipeline clock
+                        flags: readable, writable
+                        Boolean. Default: true
+  slave-method        : Algorithm to use to match the rate of the masterclock
+                        flags: readable, writable
+                        Enum "GstAudioBaseSinkSlaveMethod" Default: 1, "skew"
+                           (0): resample         - GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE
+                           (1): skew             - GST_AUDIO_BASE_SINK_SLAVE_SKEW
+                           (2): none             - GST_AUDIO_BASE_SINK_SLAVE_NONE
+  can-activate-pull   : Allow pull-based scheduling
+                        flags: readable, writable
+                        Boolean. Default: false
+  alignment-threshold : Timestamp alignment threshold in nanoseconds
+                        flags: readable, writable
+                        Unsigned Integer64. Range: 1 - 18446744073709551614 Default: 40000000 
+  drift-tolerance     : Tolerance for clock drift in microseconds
+                        flags: readable, writable
+                        Integer64. Range: 1 - 9223372036854775807 Default: 40000 
+  discont-wait        : Window of time in nanoseconds to wait before creating a discontinuity
+                        flags: readable, writable
+                        Unsigned Integer64. Range: 0 - 18446744073709551614 Default: 1000000000 
+  device              : OSS device (usually /dev/dspN)
+                        flags: readable, writable
+                        String. Default: "/dev/dsp"
+]]>
     </screen>
 
     <para> 
index af736eedb2ced5e11bdbee8650a76efa599e8df5..882f3d153cf5fac83ace8190b6884fb216335c9b 100644 (file)
     </para>
     <para> 
       The bin will also manage the elements contained in it. It will
-      figure out how the data will flow in the bin and generate an
-      optimal plan for that data flow. Plan generation is one of the
-      most complicated procedures in &GStreamer;. You will learn more
-      about this process, called scheduling, in <xref
-      linkend="section-threads-scheduling"/>.
+      perform state changes on the elements as well as collect and
+      forward bus messages.
     </para>
 
     <figure float="1" id="section-bin-img">
     <itemizedlist>
       <listitem>
         <para>
-          A pipeline: a generic container that allows scheduling of the
-          containing elements.  The toplevel bin has to be a pipeline,
-          every application thus needs at least one of these. Pipelines will
-          automatically run themselves in a background thread when started.
+          A pipeline: a generic container that manages the synchronization
+          and bus messages of the contained elements. The toplevel bin has
+          to be a pipeline, every application thus needs at least one of
+          these.
         </para>
       </listitem>
     </itemizedlist>
@@ -139,17 +136,17 @@ main (int   argc,
     </programlisting>
     <para>
       (This is a silly example of course, there already exists a much more
-      powerful and versatile custom bin like this: the playbin2 element.)
+      powerful and versatile custom bin like this: the playbin element.)
     </para>
     <para>
-      Custom bins can be created with a plugin or an XML description. You
+      Custom bins can be created with a plugin or from the application. You
       will find more information about creating custom bin in the <ulink
       type="http"
       url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html">Plugin
       Writers Guide</ulink>.
     </para>
     <para>
-      Examples of such custom bins are the playbin2 and uridecodebin elements from<ulink
+      Examples of such custom bins are the playbin and uridecodebin elements from<ulink
       type="http"
       url="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/index.html">
       gst-plugins-base</ulink>.
@@ -165,9 +162,18 @@ main (int   argc,
       to this state. This means it's usually only necessary to set the state
       of the top-level pipeline to start up the pipeline or shut it down.
     </para>
+    <para>
+      The bin will perform the state changes on all its children from the
+      sink element to the source element. This ensures that the downstream
+      element is ready to receive data when the upstream element is brought
+      to PAUSED or PLAYING. Similarly when shutting down, the sink elements
+      will be set to READY or NULL first, which will cause the upstream
+      elements to receive a FLUSHING error and stop the streaming threads
+      before the elements are set to the READY or NULL state.
+    </para>
     <para>
       Note, however, that if elements are added to a bin or pipeline that's
-      already running, , e.g. from within a "pad-added" or "new-decoded-pad"
+      already running, , e.g. from within a "pad-added"
       signal callback, its state will not automatically be brought in line with
       the current state or target state of the bin or pipeline it was added to.
       Instead, you have to need to set it to the desired target state yourself
index 867826dcd82d093294ac94f9d7bf097fbcd99dd9..d040c8dcbd3066b1419ef0c96d9d48643c54186e 100644 (file)
@@ -2,7 +2,7 @@
   <title>Bus</title>
   <para>
     A bus is a simple system that takes care of forwarding messages from
-    the pipeline threads to an application in its own thread context. The
+    the streaming threads to an application in its own thread context. The
     advantage of a bus is that an application does not need to be
     thread-aware in order to use &GStreamer;, even though &GStreamer;
     itself is heavily threaded.
@@ -97,6 +97,7 @@ main (gint   argc,
 {
   GstElement *pipeline;
   GstBus *bus;
+  guint bus_watch_id;
 
   /* init */
   gst_init (&amp;argc, &amp;argv);
@@ -109,7 +110,7 @@ main (gint   argc,
    * GLib main loop is attached to below
    */
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, my_bus_callback, NULL);
+  bus_watch_id = gst_bus_add_watch (bus, my_bus_callback, NULL);
   gst_object_unref (bus);
 <!-- example-end bus.c a -->
 [..]<!-- example-begin bus.c b -->
@@ -127,6 +128,7 @@ main (gint   argc,
   /* clean up */
   gst_element_set_state (pipeline, GST_STATE_NULL);
   gst_object_unref (pipeline);
+  g_source_remove (bus_watch_id);
   g_main_loop_unref (loop);
 
   return 0;
@@ -253,7 +255,7 @@ g_signal_connect (bus, "message::eos", G_CALLBACK (cb_message_eos), NULL);
           manually extract the progress (in percent) from the message by
           extracting the <quote>buffer-percent</quote> property from the
           structure returned by <function>gst_message_get_structure
-          ()</function>.
+            ()</function>. See also <xref linkend="chapter-buffering"/>.
         </para>
       </listitem>
       <listitem>
index bbdb4a6893e9b991735c3fbf6c16423d659b1ced..d8972e057ccf57d48f548000d8d40b31ca90ed3c 100644 (file)
     <itemizedlist>
       <listitem>
         <para>
-          A pointer to a piece of memory.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          The size of the memory.
+          Pointers to memory objects. Memory objects encapsulate a region
+          in the memory.
         </para>
       </listitem>
       <listitem>
index f0479819659e53b2dc0f84cff0b1ab3838100265..8f81493548d3d915eee6eeb2dea297241afe8eb3 100644 (file)
@@ -289,7 +289,7 @@ main (int   argc,
        The Glib Object system</ulink>.
     </para>
     <para>
-      A <ulink type="http" url="&URLAPI;GstElementFactory.html">
+      A <ulink type="http" url="&URLAPI;GstElement.html">
       <classname>GstElement</classname></ulink> also provides various 
       <classname>GObject</classname> signals that can be used as a flexible
       callback mechanism. Here, too, you can use <command>gst-inspect</command>
@@ -303,17 +303,14 @@ main (int   argc,
     <title>More about element factories</title>
     <para>
       In the previous section, we briefly introduced the <ulink type="http"
-      url="&URLAPI;GstElement.html"><classname>GstElementFactory</classname></ulink>
+      url="&URLAPI;GstElementFactory.html"><classname>GstElementFactory</classname></ulink>
       object already as a way to create instances of an element. Element
       factories, however, are much more than just that. Element factories
       are the basic types retrieved from the &GStreamer; registry, they
       describe all plugins and elements that &GStreamer; can create. This
       means that element factories are useful for automated element
       instancing, such as what autopluggers do, and for creating lists
-      of available elements, such as what pipeline editing applications
-      (e.g. <ulink type="http"
-      url="http://gstreamer.freedesktop.org/modules/gst-editor.html">&GStreamer;
-      Editor</ulink>) do.
+      of available elements.
     </para>
     
     <sect2 id="section-elements-factories-details">
@@ -560,7 +557,7 @@ main (int   argc,
       automatically, so it's usually only necessary to set the state of the
       top-level pipeline to start up the pipeline or shut it down. However,
       when adding elements dynamically to an already-running pipeline, e.g.
-      from within a "pad-added" or "new-decoded-pad" signal callback, you
+      from within a "pad-added" signal callback, you
       need to set it to the desired target state yourself using
       <function>gst_element_set_state ()</function> or
       <function>gst_element_sync_state_with_parent ()</function>.
index 46360ddaf92a33465f8d6489aa4c409c2acb82e2..9097b203f2d535a7fbd358cb9155b862a40b7890 100644 (file)
@@ -44,8 +44,8 @@
     </para>
     <para>
       The last thing left to do is to add all elements into a container
-      element, a <classname>GstPipeline</classname>, and iterate this
-      pipeline until we've played the whole song. We've previously
+      element, a <classname>GstPipeline</classname>, and wait until
+      we've played the whole song. We've previously
       learned how to add elements to a container bin in <xref
       linkend="chapter-bins"/>, and we've learned about element states
       in <xref linkend="section-elements-states"/>. We will also attach
@@ -125,6 +125,7 @@ main (int   argc,
 
   GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink;
   GstBus *bus;
+  guint bus_watch_id;
 
   /* Initialisation */
   gst_init (&amp;argc, &amp;argv);
@@ -159,7 +160,7 @@ main (int   argc,
 
   /* we add a message handler */
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
+  bus_watch_id = gst_bus_add_watch (bus, bus_call, loop);
   gst_object_unref (bus);
 
   /* we add all elements into the pipeline */
@@ -197,6 +198,8 @@ main (int   argc,
 
   g_print ("Deleting pipeline\n");
   gst_object_unref (GST_OBJECT (pipeline));
+  g_source_remove (bus_watch_id);
+  g_main_loop_unref (loop);
 
   return 0;
 }
index 96459b71d18ec2f1e520a4a2e5982d62df98f538..c490a25f77242e2793a1e5685c17a1453c4d0540 100644 (file)
@@ -120,7 +120,7 @@ main (int   argc,
       <!-- example-end pad.c d --></programlisting>
       <para>
         It is not uncommon to add elements to the pipeline only from within
-        the "pad-added" or "new-decoded-pad" callback. If you do this, don't
+        the "pad-added" callback. If you do this, don't
         forget to set the state of the newly-added elements to the target
         state of the pipeline using
         <function>gst_element_set_state ()</function> or
@@ -241,10 +241,10 @@ link_to_multiplexer (GstPad     *tolink_pad,
         <command>gst-inspect vorbisdec</command>. You will see two pads:
         a source and a sink pad. Both of these pads are always available,
         and both have capabilities attached to them. The sink pad will
-        accept vorbis-encoded audio data, with the mime-type
+        accept vorbis-encoded audio data, with the media type
         <quote>audio/x-vorbis</quote>. The source pad will be used
         to send raw (decoded) audio samples to the next element, with
-        a raw audio mime-type (in this case,
+        a raw audio media type (in this case,
        <quote>audio/x-raw</quote>).  The source pad will also
         contain properties for the audio samplerate and the amount of
         channels, plus some more that you don't need to worry about
index 2d136c6fe55d980c0513dd3050135ffef471ce41..2b11ed5bdddcbd94f11c671c92047f6da9e46cdd 100644 (file)
Binary files a/docs/manual/communication.png and b/docs/manual/communication.png differ
index b762ab2575b9bd472c47f92e7c7392721104e7eb..bb2df9b2763b2e9bdee59905b37881485fe7d59b 100644 (file)
Binary files a/docs/manual/gstreamer-overview.png and b/docs/manual/gstreamer-overview.png differ
diff --git a/docs/manual/highlevel-components.xml b/docs/manual/highlevel-components.xml
deleted file mode 100644 (file)
index 1981ee4..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-<chapter id="chapter-components">
-  <title>Components</title>
-
-  <para>
-    &GStreamer; includes several higher-level components to simplify an
-    application developer's life. All of the components discussed here (for now) are
-    targetted at media playback. The idea of each of these components is
-    to integrate as closely as possible with a &GStreamer; pipeline, but
-    to hide the complexity of media type detection and several other
-    rather complex topics that have been discussed in <xref
-    linkend="part-advanced"/>.
-  </para>
-
-  <para>
-    We currently recommend people to use either playbin (see <xref
-    linkend="section-components-playbin"/>) or decodebin (see <xref
-    linkend="section-components-decodebin"/>), depending on their needs.
-    Playbin is the recommended solution for everything related to simple
-    playback of media that should just work. Decodebin is a more flexible
-    autoplugger that could be used to add more advanced features, such
-    as playlist support, crossfading of audio tracks and so on. Its
-    programming interface is more low-level than that of playbin, though.
-  </para>
-
-  <sect1 id="section-components-playbin">
-    <title>Playbin</title>
-
-    <para>
-      Playbin is an element that can be created using the standard &GStreamer;
-      API (e.g. <function>gst_element_factory_make ()</function>). The factory
-      is conveniently called <quote>playbin</quote>. By being a
-      <classname>GstPipeline</classname> (and thus a
-      <classname>GstElement</classname>), playbin automatically supports all
-      of the features of this class, including error handling, tag support,
-      state handling, getting stream positions, seeking, and so on.
-    </para>
-
-    <para>
-      Setting up a playbin pipeline is as simple as creating an instance of
-      the playbin element, setting a file location using the
-      <quote>uri</quote> property on playbin, and then setting the element
-      to the <classname>GST_STATE_PLAYING</classname> state (the location has to be a valid
-      URI, so <quote>&lt;protocol&gt;://&lt;location&gt;</quote>, e.g.
-      file:///tmp/my.ogg or http://www.example.org/stream.ogg). Internally,
-      playbin will set up a pipeline to playback the media location.
-    </para>
-
-    <programlisting><!-- example-begin playbin.c a -->
-#include &lt;gst/gst.h&gt;
-<!-- example-end playbin.c a -->
-[.. my_bus_callback goes here ..]<!-- example-begin playbin.c b --><!--
-static gboolean
-my_bus_callback (GstBus     *bus,
-                GstMessage *message,
-                gpointer    data)
-{
-  GMainLoop *loop = data;
-
-  switch (GST_MESSAGE_TYPE (message)) {
-    case GST_MESSAGE_ERROR: {
-      GError *err;
-      gchar *debug;
-
-      gst_message_parse_error (message, &amp;err, &amp;debug);
-      g_print ("Error: %s\n", err-&gt;message);
-      g_error_free (err);
-      g_free (debug);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    case GST_MESSAGE_EOS:
-      /* end-of-stream */
-      g_main_loop_quit (loop);
-      break;
-    default:
-      /* unhandled message */
-      break;
-  }
-
-  /* remove message from the queue */
-  return TRUE;
-}
---><!-- example-end playbin.c b -->
-<!-- example-begin playbin.c c -->
-gint
-main (gint   argc,
-      gchar *argv[])
-{
-  GMainLoop *loop;
-  GstElement *play;
-  GstBus *bus;
-
-  /* init GStreamer */
-  gst_init (&amp;argc, &amp;argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* make sure we have a URI */
-  if (argc != 2) {
-    g_print ("Usage: %s &lt;URI&gt;\n", argv[0]);
-    return -1;
-  }
-
-  /* set up */
-  play = gst_element_factory_make ("playbin", "play");
-  g_object_set (G_OBJECT (play), "uri", argv[1], NULL);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (play));
-  gst_bus_add_watch (bus, my_bus_callback, loop);
-  gst_object_unref (bus);
-
-  gst_element_set_state (play, GST_STATE_PLAYING);
-
-  /* now run */
-  g_main_loop_run (loop);
-
-  /* also clean up */
-  gst_element_set_state (play, GST_STATE_NULL);
-  gst_object_unref (GST_OBJECT (play));
-
-  return 0;
-}
-    <!-- example-end playbin.c c --></programlisting>
-
-    <para>
-      Playbin has several features that have been discussed previously:
-    </para>
-    <itemizedlist>
-      <listitem>
-        <para>
-          Settable video and audio output (using the <quote>video-sink</quote>
-          and <quote>audio-sink</quote> properties).
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Mostly controllable and trackable as a
-          <classname>GstElement</classname>, including error handling, eos
-          handling, tag handling, state handling (through the
-          <classname>GstBus</classname>), media position handling and
-          seeking.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Buffers network-sources, with buffer fullness notifications being
-          passed through the <classname>GstBus</classname>.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Supports visualizations for audio-only media.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Supports subtitles, both in the media as well as from separate
-          files. For separate subtitle files, use the <quote>suburi</quote>
-          property.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Supports stream selection and disabling. If your media has
-          multiple audio or subtitle tracks, you can dynamically choose
-          which one to play back, or decide to turn it off altogether
-          (which is especially useful to turn off subtitles). For each
-          of those, use the <quote>current-text</quote> and other related
-          properties.
-        </para>
-      </listitem>
-    </itemizedlist>
-    <para>
-      For convenience, it is possible to test <quote>playbin</quote> on
-      the commandline, using the command <quote>gst-launch-0.10 playbin
-      uri=file:///path/to/file</quote>.
-    </para>
-    <para>
-      New applications should use playbin2 instead of the old playbin.
-    </para>
-  </sect1>
-
-  <sect1 id="section-components-decodebin">
-    <title>Decodebin</title>
-
-    <para>
-      Decodebin is the actual autoplugger backend of playbin, which was
-      discussed in the previous section. Decodebin will, in short, accept
-      input from a source that is linked to its sinkpad and will try to
-      detect the media type contained in the stream, and set up decoder
-      routines for each of those. It will automatically select decoders.
-      For each decoded stream, it will emit the <quote>new-decoded-pad</quote>
-      signal, to let the client know about the newly found decoded stream.
-      For unknown streams (which might be the whole stream), it will emit
-      the <quote>unknown-type</quote> signal. The application is then
-      responsible for reporting the error to the user.
-    </para>
-    <programlisting><!-- example-begin decodebin.c a -->
-#include &lt;gst/gst.h&gt;
-<!-- example-end decodebin.c a -->
-[.. my_bus_callback goes here ..]<!-- example-begin decodebin.c b --><!--
-static gboolean
-my_bus_callback (GstBus     *bus,
-                GstMessage *message,
-                gpointer    data)
-{
-  GMainLoop *loop = data;
-
-  switch (GST_MESSAGE_TYPE (message)) {
-    case GST_MESSAGE_ERROR: {
-      GError *err;
-      gchar *debug;
-
-      gst_message_parse_error (message, &amp;err, &amp;debug);
-      g_print ("Error: %s\n", err-&gt;message);
-      g_error_free (err);
-      g_free (debug);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    case GST_MESSAGE_EOS:
-      /* end-of-stream */
-      g_main_loop_quit (loop);
-      break;
-    default:
-      /* unhandled message */
-      break;
-  }
-
-  /* remove message from the queue */
-  return TRUE;
-}
---><!-- example-end decodebin.c b -->
-<!-- example-begin decodebin.c c -->
-GstElement *pipeline, *audio;
-
-static void
-cb_newpad (GstElement *decodebin,
-          GstPad     *pad,
-          gboolean    last,
-          gpointer    data)
-{
-  GstCaps *caps;
-  GstStructure *str;
-  GstPad *audiopad;
-
-  /* only link once */
-  audiopad = gst_element_get_static_pad (audio, "sink");
-  if (GST_PAD_IS_LINKED (audiopad)) {
-    g_object_unref (audiopad);
-    return;
-  }
-
-  /* check media type */
-  caps = gst_pad_query_caps (pad, NULL);
-  str = gst_caps_get_structure (caps, 0);
-  if (!g_strrstr (gst_structure_get_name (str), "audio")) {
-    gst_caps_unref (caps);
-    gst_object_unref (audiopad);
-    return;
-  }
-  gst_caps_unref (caps);
-
-  /* link'n'play */
-  gst_pad_link (pad, audiopad);
-
-  g_object_unref (audiopad);
-}
-
-gint
-main (gint   argc,
-      gchar *argv[])
-{
-  GMainLoop *loop;
-  GstElement *src, *dec, *conv, *sink;
-  GstPad *audiopad;
-  GstBus *bus;
-
-  /* init GStreamer */
-  gst_init (&amp;argc, &amp;argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* make sure we have input */
-  if (argc != 2) {
-    g_print ("Usage: %s &lt;filename&gt;\n", argv[0]);
-    return -1;
-  }
-
-  /* setup */
-  pipeline = gst_pipeline_new ("pipeline");
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, my_bus_callback, loop);
-  gst_object_unref (bus);
-
-  src = gst_element_factory_make ("filesrc", "source");
-  g_object_set (G_OBJECT (src), "location", argv[1], NULL);
-  dec = gst_element_factory_make ("decodebin", "decoder");
-  g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad), NULL);
-  gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
-  gst_element_link (src, dec);
-
-  /* create audio output */
-  audio = gst_bin_new ("audiobin");
-  conv = gst_element_factory_make ("audioconvert", "aconv");
-  audiopad = gst_element_get_static_pad (conv, "sink");
-  sink = gst_element_factory_make ("alsasink", "sink");
-  gst_bin_add_many (GST_BIN (audio), conv, sink, NULL);
-  gst_element_link (conv, sink);
-  gst_element_add_pad (audio,
-      gst_ghost_pad_new ("sink", audiopad));
-  gst_object_unref (audiopad);
-  gst_bin_add (GST_BIN (pipeline), audio);
-
-  /* run */
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_main_loop_run (loop);
-
-  /* cleanup */
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
-    <!-- example-end decodebin.c c --></programlisting>
-
-    <para>
-      Decodebin, similar to playbin, supports the following features:
-    </para>
-    <itemizedlist>
-      <listitem>
-        <para>
-          Can decode an unlimited number of contained streams to decoded
-          output pads.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Is handled as a <classname>GstElement</classname> in all ways,
-          including tag or error forwarding and state handling.
-        </para>
-      </listitem>
-    </itemizedlist>
-    <para>
-      Although decodebin is a good autoplugger, there's a whole lot of
-      things that it does not do and is not intended to do:
-    </para>
-    <itemizedlist>
-      <listitem>
-        <para>
-          Taking care of input streams with a known media type (e.g. a DVD,
-          an audio-CD or such).
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Selection of streams (e.g. which audio track to play in case of
-          multi-language media streams).
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Overlaying subtitles over a decoded video stream.
-        </para>
-      </listitem>
-    </itemizedlist>
-    <para>
-      Decodebin can be easily tested on the commandline, e.g. by using the
-      command <command>gst-launch-0.10 filesrc location=file.ogg ! decodebin
-      ! audioconvert ! audioresample ! autoaudiosink</command>.
-    </para>
-    <para>
-      New applications should use decodebin2 instead of the old decodebin.
-    </para>
-    <para>
-      The uridecodebin element is very similar to decodebin2, only that it
-      automatically plugs a source plugin based on the protocol of the URI
-      given.
-    </para>
-  </sect1>
-
-</chapter>
diff --git a/docs/manual/highlevel-playback.xml b/docs/manual/highlevel-playback.xml
new file mode 100644 (file)
index 0000000..27d2d1f
--- /dev/null
@@ -0,0 +1,617 @@
+<chapter id="chapter-playback-components">
+  <title>Playback Components</title>
+
+  <para>
+    &GStreamer; includes several higher-level components to simplify an
+    application developer's life. All of the components discussed here (for now) are
+    targetted at media playback. The idea of each of these components is
+    to integrate as closely as possible with a &GStreamer; pipeline, but
+    to hide the complexity of media type detection and several other
+    rather complex topics that have been discussed in <xref
+    linkend="part-advanced"/>.
+  </para>
+
+  <para>
+    We currently recommend people to use either playbin (see <xref
+    linkend="section-components-playbin"/>) or decodebin (see <xref
+    linkend="section-components-decodebin"/>), depending on their needs.
+    Playbin is the recommended solution for everything related to simple
+    playback of media that should just work. Decodebin is a more flexible
+    autoplugger that could be used to add more advanced features, such
+    as playlist support, crossfading of audio tracks and so on. Its
+    programming interface is more low-level than that of playbin, though.
+  </para>
+
+  <sect1 id="section-components-playbin">
+    <title>Playbin</title>
+
+    <para>
+      Playbin is an element that can be created using the standard &GStreamer;
+      API (e.g. <function>gst_element_factory_make ()</function>). The factory
+      is conveniently called <quote>playbin</quote>. By being a
+      <classname>GstPipeline</classname> (and thus a
+      <classname>GstElement</classname>), playbin automatically supports all
+      of the features of this class, including error handling, tag support,
+      state handling, getting stream positions, seeking, and so on.
+    </para>
+
+    <para>
+      Setting up a playbin pipeline is as simple as creating an instance of
+      the playbin element, setting a file location using the
+      <quote>uri</quote> property on playbin, and then setting the element
+      to the <classname>GST_STATE_PLAYING</classname> state (the location has to be a valid
+      URI, so <quote>&lt;protocol&gt;://&lt;location&gt;</quote>, e.g.
+      file:///tmp/my.ogg or http://www.example.org/stream.ogg). Internally,
+      playbin will set up a pipeline to playback the media location.
+    </para>
+
+    <programlisting><!-- example-begin playbin.c a -->
+#include &lt;gst/gst.h&gt;
+<!-- example-end playbin.c a -->
+[.. my_bus_callback goes here ..]<!-- example-begin playbin.c b --><!--
+static gboolean
+my_bus_callback (GstBus     *bus,
+                GstMessage *message,
+                gpointer    data)
+{
+  GMainLoop *loop = data;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR: {
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &amp;err, &amp;debug);
+      g_print ("Error: %s\n", err-&gt;message);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+
+  /* remove message from the queue */
+  return TRUE;
+}
+--><!-- example-end playbin.c b -->
+<!-- example-begin playbin.c c -->
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GMainLoop *loop;
+  GstElement *play;
+  GstBus *bus;
+
+  /* init GStreamer */
+  gst_init (&amp;argc, &amp;argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* make sure we have a URI */
+  if (argc != 2) {
+    g_print ("Usage: %s &lt;URI&gt;\n", argv[0]);
+    return -1;
+  }
+
+  /* set up */
+  play = gst_element_factory_make ("playbin", "play");
+  g_object_set (G_OBJECT (play), "uri", argv[1], NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (play));
+  gst_bus_add_watch (bus, my_bus_callback, loop);
+  gst_object_unref (bus);
+
+  gst_element_set_state (play, GST_STATE_PLAYING);
+
+  /* now run */
+  g_main_loop_run (loop);
+
+  /* also clean up */
+  gst_element_set_state (play, GST_STATE_NULL);
+  gst_object_unref (GST_OBJECT (play));
+
+  return 0;
+}
+    <!-- example-end playbin.c c --></programlisting>
+
+    <para>
+      Playbin has several features that have been discussed previously:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          Settable video and audio output (using the <quote>video-sink</quote>
+          and <quote>audio-sink</quote> properties).
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Mostly controllable and trackable as a
+          <classname>GstElement</classname>, including error handling, eos
+          handling, tag handling, state handling (through the
+          <classname>GstBus</classname>), media position handling and
+          seeking.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Buffers network-sources, with buffer fullness notifications being
+          passed through the <classname>GstBus</classname>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Supports visualizations for audio-only media.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Supports subtitles, both in the media as well as from separate
+          files. For separate subtitle files, use the <quote>suburi</quote>
+          property.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Supports stream selection and disabling. If your media has
+          multiple audio or subtitle tracks, you can dynamically choose
+          which one to play back, or decide to turn it off altogether
+          (which is especially useful to turn off subtitles). For each
+          of those, use the <quote>current-text</quote> and other related
+          properties.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>
+      For convenience, it is possible to test <quote>playbin</quote> on
+      the commandline, using the command <quote>gst-launch-1.0 playbin
+      uri=file:///path/to/file</quote>.
+    </para>
+  </sect1>
+
+  <sect1 id="section-components-decodebin">
+    <title>Decodebin</title>
+
+    <para>
+      Decodebin is the actual autoplugger backend of playbin, which was
+      discussed in the previous section. Decodebin will, in short, accept
+      input from a source that is linked to its sinkpad and will try to
+      detect the media type contained in the stream, and set up decoder
+      routines for each of those. It will automatically select decoders.
+      For each decoded stream, it will emit the <quote>pad-added</quote>
+      signal, to let the client know about the newly found decoded stream.
+      For unknown streams (which might be the whole stream), it will emit
+      the <quote>unknown-type</quote> signal. The application is then
+      responsible for reporting the error to the user.
+    </para>
+    <programlisting><!-- example-begin decodebin.c a -->
+<![CDATA[
+#include <gst/gst.h>
+]]>
+<!-- example-end decodebin.c a -->
+[.. my_bus_callback goes here ..]<!-- example-begin decodebin.c b -->
+<!--
+static gboolean
+my_bus_callback (GstBus     *bus,
+                GstMessage *message,
+                gpointer    data)
+{
+  GMainLoop *loop = data;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR: {
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &amp;err, &amp;debug);
+      g_print ("Error: %s\n", err-&gt;message);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+
+  /* remove message from the queue */
+  return TRUE;
+}
+--><!-- example-end decodebin.c b -->
+<!-- example-begin decodebin.c c -->
+<![CDATA[
+GstElement *pipeline, *audio;
+
+static void
+cb_newpad (GstElement *decodebin,
+          GstPad     *pad,
+          gpointer    data)
+{
+  GstCaps *caps;
+  GstStructure *str;
+  GstPad *audiopad;
+
+  /* only link once */
+  audiopad = gst_element_get_static_pad (audio, "sink");
+  if (GST_PAD_IS_LINKED (audiopad)) {
+    g_object_unref (audiopad);
+    return;
+  }
+
+  /* check media type */
+  caps = gst_pad_query_caps (pad, NULL);
+  str = gst_caps_get_structure (caps, 0);
+  if (!g_strrstr (gst_structure_get_name (str), "audio")) {
+    gst_caps_unref (caps);
+    gst_object_unref (audiopad);
+    return;
+  }
+  gst_caps_unref (caps);
+
+  /* link'n'play */
+  gst_pad_link (pad, audiopad);
+
+  g_object_unref (audiopad);
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GMainLoop *loop;
+  GstElement *src, *dec, *conv, *sink;
+  GstPad *audiopad;
+  GstBus *bus;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* make sure we have input */
+  if (argc != 2) {
+    g_print ("Usage: %s <filename>\n", argv[0]);
+    return -1;
+  }
+
+  /* setup */
+  pipeline = gst_pipeline_new ("pipeline");
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, my_bus_callback, loop);
+  gst_object_unref (bus);
+
+  src = gst_element_factory_make ("filesrc", "source");
+  g_object_set (G_OBJECT (src), "location", argv[1], NULL);
+  dec = gst_element_factory_make ("decodebin", "decoder");
+  g_signal_connect (dec, "pad-added", G_CALLBACK (cb_newpad), NULL);
+  gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
+  gst_element_link (src, dec);
+
+  /* create audio output */
+  audio = gst_bin_new ("audiobin");
+  conv = gst_element_factory_make ("audioconvert", "aconv");
+  audiopad = gst_element_get_static_pad (conv, "sink");
+  sink = gst_element_factory_make ("alsasink", "sink");
+  gst_bin_add_many (GST_BIN (audio), conv, sink, NULL);
+  gst_element_link (conv, sink);
+  gst_element_add_pad (audio,
+      gst_ghost_pad_new ("sink", audiopad));
+  gst_object_unref (audiopad);
+  gst_bin_add (GST_BIN (pipeline), audio);
+
+  /* run */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  g_main_loop_run (loop);
+
+  /* cleanup */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (GST_OBJECT (pipeline));
+
+  return 0;
+}
+]]>
+    <!-- example-end decodebin.c c --></programlisting>
+    <para>
+      Decodebin, similar to playbin, supports the following features:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          Can decode an unlimited number of contained streams to decoded
+          output pads.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Is handled as a <classname>GstElement</classname> in all ways,
+          including tag or error forwarding and state handling.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>
+      Although decodebin is a good autoplugger, there's a whole lot of
+      things that it does not do and is not intended to do:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          Taking care of input streams with a known media type (e.g. a DVD,
+          an audio-CD or such).
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Selection of streams (e.g. which audio track to play in case of
+          multi-language media streams).
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Overlaying subtitles over a decoded video stream.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>
+      Decodebin can be easily tested on the commandline, e.g. by using the
+      command <command>gst-launch-1.0 filesrc location=file.ogg ! decodebin
+      ! audioconvert ! audioresample ! autoaudiosink</command>.
+    </para>
+  </sect1>
+
+  <sect1 id="section-components-uridecodebin">
+    <title>URIDecodebin</title>
+    <para>
+      The uridecodebin element is very similar to decodebin, only that it
+      automatically plugs a source plugin based on the protocol of the URI
+      given.
+    </para>
+    <para>
+      Uridecodebin will also automatically insert buffering elements when
+      the uri is a slow network source. The buffering element will post
+      BUFFERING messages that the application needs to handle as explained
+      in <xref linkend="chapter-buffering"/>.     
+      The following properties can be used to configure the buffering method:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          The buffer-size property allows you to configure a maximum size in
+          bytes for the buffer element.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          The buffer-duration property allows you to configure a maximum size
+          in time for the buffer element. The time will be estimated based on
+          the bitrate of the network.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          With the download property you can enable the download buffering
+          method as described in <xref linkend="section-buffering-download"/>.
+          Setting this option to TRUE will only enable download buffering
+          for selected formats such as quicktime, flash video, avi and
+          webm.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          You can also enable buffering on the parsed/demuxed data with the
+          use-buffering property. This is interesting to enable buffering
+          on slower random access media such as a network file server.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>
+      URIDecodebin can be easily tested on the commandline, e.g. by using the
+      command <command>gst-launch-1.0 uridecodebin uri=file:///file.ogg !
+      ! audioconvert ! audioresample ! autoaudiosink</command>.
+    </para>
+  </sect1>
+
+  <sect1 id="section-components-playsink">
+    <title>Playsink</title>
+    <para>
+      The playsink element is a powerful sink element. It has request pads
+      for raw decoded audio, video and text and it will configure itself to
+      play the media streams. It has the following features:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          It exposes GstStreamVolume, GstVideoOverlay, GstNavigation and
+          GstColorBalance interfaces and automatically plugs software
+          elements to implement the interfaces when needed.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          It will automatically plug conversion elements.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Can optionally render visualizations when there is no video input.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Configurable sink elements.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Configurable audio/video sync offset to fine-tune synchronization
+          in badly muxed files.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Support for taking a snapshot of the last video frame.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>
+      Below is an example of how you can use playsink. We use a uridecodebin
+      element to decode into raw audio and video streams which we then link
+      to the playsink request pads. We only link the first audio and video
+      pads, you could use an input-selector to link all pads.
+    </para>
+    <programlisting>
+<!-- example-begin playsink.c a -->
+<![CDATA[
+#include <gst/gst.h>
+]]>
+<!-- example-end playsink.c a -->
+[.. my_bus_callback goes here ..]
+<!-- example-begin playsink.c b -->
+<!--
+static gboolean
+my_bus_callback (GstBus     *bus,
+                GstMessage *message,
+                gpointer    data)
+{
+  GMainLoop *loop = data;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR: {
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &amp;err, &amp;debug);
+      g_print ("Error: %s\n", err-&gt;message);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+
+  /* remove message from the queue */
+  return TRUE;
+}
+-->
+<!-- example-end playsink.c b -->
+<!-- example-begin playsink.c c -->
+<![CDATA[
+GstElement *pipeline, *sink;
+
+static void
+cb_pad_added (GstElement *dec,
+             GstPad     *pad,
+             gpointer    data)
+{
+  GstCaps *caps;
+  GstStructure *str;
+  const gchar *name;
+  GstPadTemplate *templ;
+  GstElementClass *klass;
+
+  /* check media type */
+  caps = gst_pad_query_caps (pad, NULL);
+  str = gst_caps_get_structure (caps, 0);
+  name = gst_structure_get_name (str);
+
+  klass = GST_ELEMENT_GET_CLASS (sink);
+
+  if (g_str_has_prefix (name, "audio")) {
+    templ = gst_element_class_get_pad_template (klass, "audio_sink");
+  } else if (g_str_has_prefix (name, "video")) {
+    templ = gst_element_class_get_pad_template (klass, "video_sink");
+  } else if (g_str_has_prefix (name, "text")) {
+    templ = gst_element_class_get_pad_template (klass, "text_sink");
+  } else {
+    templ = NULL;
+  }
+
+  if (templ) {
+    GstPad *sinkpad;
+
+    sinkpad = gst_element_request_pad (sink, templ, NULL, NULL);
+
+    if (!gst_pad_is_linked (sinkpad))
+      gst_pad_link (pad, sinkpad);
+
+    gst_object_unref (sinkpad);
+  }
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GMainLoop *loop;
+  GstElement *dec;
+  GstBus *bus;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* make sure we have input */
+  if (argc != 2) {
+    g_print ("Usage: %s <uri>\n", argv[0]);
+    return -1;
+  }
+
+  /* setup */
+  pipeline = gst_pipeline_new ("pipeline");
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, my_bus_callback, loop);
+  gst_object_unref (bus);
+
+  dec = gst_element_factory_make ("uridecodebin", "source");
+  g_object_set (G_OBJECT (dec), "uri", argv[1], NULL);
+  g_signal_connect (dec, "pad-added", G_CALLBACK (cb_pad_added), NULL);
+
+  /* create audio output */
+  sink = gst_element_factory_make ("playsink", "sink");
+  gst_util_set_object_arg (G_OBJECT (sink), "flags",  
+      "soft-colorbalance+soft-volume+vis+text+audio+video");
+  gst_bin_add_many (GST_BIN (pipeline), dec, sink, NULL);
+
+  /* run */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  g_main_loop_run (loop);
+
+  /* cleanup */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (GST_OBJECT (pipeline));
+
+  return 0;
+}
+]]>
+<!-- example-end playsink.c c -->
+    </programlisting>
+    <para>
+      This example will show audio and video depending on what you
+      give it. Try this example on an audio file and you will see that
+      it shows visualizations. You can change the visualization at runtime by
+      changing the vis-plugin property.
+    </para>
+  </sect1>
+</chapter>
index b0c2806133d22b49fb35fb8571b1160c0aeb3a91..0c385b1a1c863d76a74495aba9822d3da2b73159 100644 (file)
       through one or more <emphasis>sink pads</emphasis>. Source and sink
       elements have only source and sink pads, respectively. Data usually
       means buffers (described by the <ulink type="http"
-      url="&URLAPI;gstreamer-GstBuffer.html"><classname>GstBuffer
-      </classname></ulink> object) and events (described by the <ulink
-      type="http" url="&URLAPI;gstreamer-GstEvent.html"><classname>
-      GstEvent</classname></ulink> object).
+        url="&URLAPI;gstreamer-GstBuffer.html">
+      <classname>GstBuffer</classname></ulink> object) and events (described
+      by the <ulink type="http" url="&URLAPI;gstreamer-GstEvent.html">
+      <classname>GstEvent</classname></ulink> object).
     </para>
   </sect1>
 
@@ -71,8 +71,7 @@
 
     <para>
       A <emphasis>bin</emphasis> is a container for a collection of elements.
-      A <emphasis>pipeline</emphasis> is a special subtype of a bin that allows execution of all
-      of its contained child elements. Since bins are subclasses of elements
+      Since bins are subclasses of elements
       themselves, you can mostly control a bin as if it were an element,
       thereby abstracting away a lot of complexity for your application. You
       can, for example change state on all elements in a bin by changing the
       contained children (such as error messages, tag messages or EOS messages).
     </para>
     <para>
-      A <emphasis>pipeline</emphasis> is a top-level bin. As you set it to PAUSED or PLAYING state,
-      data flow will start and media processing will take place. Once started,
-      pipelines will run in a separate thread until you stop them or the end
+      A <emphasis>pipeline</emphasis> is a top-level bin. It provides a bus for
+      the application and manages the synchronization for its children. 
+      As you set it to PAUSED or PLAYING state, data flow will start and media
+      processing will take place. Once started, pipelines will run in a
+      separate thread until you stop them or the end
       of the data stream is reached.
     </para>
 
index c5af97da8c8293ed0c701e40ebff100962ac19f6..38329e8cd6b6e93a4411a6f17107f865cd9c6e4f 100644 (file)
@@ -55,7 +55,8 @@
         <listitem><para>a plugin architecture</para></listitem>
         <listitem><para>a pipeline architecture</para></listitem>
         <listitem><para>a mechanism for media type handling/negotiation</para></listitem>
-        <listitem><para>over 150 plug-ins</para></listitem>
+        <listitem><para>a mechanism for synchronization</para></listitem>
+        <listitem><para>over 250 plug-ins providing more than 1000 elements</para></listitem>
         <listitem><para>a set of tools</para></listitem>
       </itemizedlist>
     </para> 
@@ -89,7 +90,7 @@
         <listitem><para>gst-plugins-good: a set of good-quality plug-ins under LGPL</para></listitem>
         <listitem><para>gst-plugins-ugly: a set of good-quality plug-ins that might pose distribution problems</para></listitem>
         <listitem><para>gst-plugins-bad: a set of plug-ins that need more quality</para></listitem>
-        <listitem><para>gst-python: the python bindings</para></listitem>
+        <listitem><para>gst-libav: a set of plug-ins that wrap libav for decoding and encoding</para></listitem>
         <listitem><para>a few others packages</para></listitem>
       </itemizedlist>
     </para> 
index af6466e6b8426cab528f4be687143cfdc7065def..6462cccc0f7be8d9e7df2451b188e4c3a1856a6a 100644 (file)
 <!ENTITY METADATA             SYSTEM "advanced-metadata.xml">
 <!ENTITY INTERFACES           SYSTEM "advanced-interfaces.xml">
 <!ENTITY CLOCKS               SYSTEM "advanced-clocks.xml">
+<!ENTITY BUFFERING            SYSTEM "advanced-buffering.xml">
 <!ENTITY DPARAMS              SYSTEM "advanced-dparams.xml">
 <!ENTITY THREADS              SYSTEM "advanced-threads.xml">
 <!ENTITY AUTOPLUGGING         SYSTEM "advanced-autoplugging.xml">
 <!ENTITY DATAACCESS           SYSTEM "advanced-dataaccess.xml">
 
 <!-- Part 4: Higher-level interfaces -->
-<!ENTITY XML                  SYSTEM "highlevel-xml.xml">
-<!ENTITY COMPONENTS           SYSTEM "highlevel-components.xml">
+<!ENTITY PLAYBACK             SYSTEM "highlevel-playback.xml">
 
 <!-- Appendices -->
+<!ENTITY PROGRAMS             SYSTEM "appendix-programs.xml">
+<!ENTITY COMPILING            SYSTEM "appendix-compiling.xml">
 <!ENTITY CHECKLIST            SYSTEM "appendix-checklist.xml">
 <!ENTITY PORTING              SYSTEM "appendix-porting.xml">
 <!ENTITY INTEGRATION          SYSTEM "appendix-integration.xml">
     &METADATA;
     &INTERFACES;
     &CLOCKS;
+    &BUFFERING;
     &DPARAMS;
     &THREADS;
     &AUTOPLUGGING;
         much control (and as much code), but will prefer to use a standard
         playback interface that does most of the difficult internals for
         them. In this chapter, we will introduce you into the concept of
-        autopluggers, playback managing elements, XML-based pipelines and
-        other such things. Those higher-level interfaces are intended to
+        autopluggers, playback managing elements and other such things.
+        Those higher-level interfaces are intended to
         simplify &GStreamer;-based application programming. They do, however,
         also reduce the flexibility. It is up to the application developer
         to choose which interface he will want to use.
       </para>
     </partintro>
 
-    &COMPONENTS;
-    &XML;
+    &PLAYBACK;
 
   </part>
 
       </para>
       <para>
         In addition, we also provide a porting guide which will explain
-        easily how to port &GStreamer;-0.8 applications to &GStreamer;-0.10.
+        easily how to port &GStreamer;-0.10 applications to &GStreamer;-1.0.
       </para>
     </partintro>
 
      - table please...
     -->
 
+    &PROGRAMS;
+    &COMPILING;
     &CHECKLIST;
     &PORTING;
     &INTEGRATION;
index 97b9557b955f51a1792e1a841518549d3c32cf32..f1e51f2cccafeacd20cc3ac18fc2733e41296809 100644 (file)
Binary files a/docs/manual/mime-world.png and b/docs/manual/mime-world.png differ
index e0886c1c111d1da1efc28adeec22d2ed3d926975..006c602f8194daeadcc0f95af6dd7d0e4475ccdd 100644 (file)
Binary files a/docs/manual/thread-buffering.png and b/docs/manual/thread-buffering.png differ
index b00400d740b5e917b73082af6af2063729d027ee..0e29152066b280792ef66e93a4229d1d5ef40f6b 100644 (file)
@@ -99,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -318,6 +318,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -354,6 +357,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -810,14 +814,12 @@ upload: $(FORMATS)
        if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
        if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
        \
-       # upload releases to both 0.10.X/ and head/ subdirectories \
-       if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
-         export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
-         echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) mkdir -p $$DIR; \
-         rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
-       fi; \
+       # upload releases to both X.Y/ and head/ subdirectories \
+       export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
+       echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) mkdir -p $$DIR; \
+       rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
        \
        export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
        echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
index 4da569edce9a1d352f4d7cfc73770b3b3e1602e4..7f28375e8fa5c98ab3aad16c9fadd644a5368fe9 100644 (file)
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="idp4395232"></a>gstreamer Elements</h2></div></div></div>
+<a name="idp4169040"></a>gstreamer Elements</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="gstreamer-plugins-capsfilter.html">capsfilter</a></span><span class="refpurpose"> — Pass data without modification, limiting formats</span>
index 9eb027899270623e023fcf74081965c20178c2ed..1c560977532596cd01374441905799d79d2520f9 100644 (file)
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="idp179376"></a>gstreamer Plugins</h2></div></div></div>
+<a name="idp273520"></a>gstreamer Plugins</h2></div></div></div>
 <div class="toc"><dl><dt>
 <span class="refentrytitle"><a href="gstreamer-plugins-plugin-coreelements.html">coreelements</a></span><span class="refpurpose"> — <a name="plugin-coreelements"></a> GStreamer core elements</span>
 </dt></dl></div>
index 5ef2676c12a330270293f2a71b5a9f4e0b39bc57..b8601669bed0f6c0faebb170745977cc9d50fe55 100644 (file)
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseTransform.html">GstBaseTransform</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
                            +----GstCapsFilter
 </pre>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-capsfilter.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="gstreamer-plugins-capsfilter.html#GstCapsFilter--caps" title='The "caps" property'>caps</a>"                     <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
+  "<a class="link" href="gstreamer-plugins-capsfilter.html#GstCapsFilter--caps" title='The "caps" property'>caps</a>"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
 </pre>
 </div>
 <div class="refsect1">
@@ -70,7 +70,7 @@ data format.
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9006336"></a><h3>Example launch line</h3>
+<a name="idp6769312"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -88,7 +88,7 @@ data format.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9217088"></a><h3>Element Information</h3>
+<a name="idp8040384"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -111,7 +111,7 @@ data format.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp32112"></a><h3>Element Pads</h3>
+<a name="idm8384"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -173,7 +173,7 @@ The opaque <a class="link" href="gstreamer-plugins-capsfilter.html#GstCapsFilter
 <a name="gstreamer-plugins-capsfilter.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GstCapsFilter--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
-<pre class="programlisting">  "caps"                     <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
+<pre class="programlisting">  "caps"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
 <p>Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object.</p>
 </div>
 </div>
index 0bfdaf16ede2874e383f41e2df71e0a9541650ac..e9747b96d9d2c9e9e71725d2154d2a58de4806d0 100644 (file)
@@ -52,9 +52,9 @@ enum                <a class="link" href="gstreamer-plugins-fakesink.html#GstFak
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseSink.html">GstBaseSink</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
                            +----GstFakeSink
 </pre>
 </div>
@@ -86,7 +86,7 @@ Dummy sink that swallows everything.
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9474080"></a><h3>Example launch line</h3>
+<a name="idp5610160"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -104,7 +104,7 @@ Dummy sink that swallows everything.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6125200"></a><h3>Element Information</h3>
+<a name="idp10697840"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -127,7 +127,7 @@ Dummy sink that swallows everything.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6132624"></a><h3>Element Pads</h3>
+<a name="idp10705376"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -285,8 +285,8 @@ Possible state change errors for the state-error property.
 <div class="refsect2">
 <a name="GstFakeSink-handoff"></a><h3>The <code class="literal">"handoff"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gstreamer-plugins-fakesink.html#GstFakeSink"><span class="type">GstFakeSink</span></a> *fakesink,
-                                                        <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>   *buffer,
-                                                        <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>      *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>   *buffer,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>      *pad,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
 <p>
 This signal gets emitted before unreffing the buffer.
@@ -317,8 +317,8 @@ This signal gets emitted before unreffing the buffer.
 <div class="refsect2">
 <a name="GstFakeSink-preroll-handoff"></a><h3>The <code class="literal">"preroll-handoff"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gstreamer-plugins-fakesink.html#GstFakeSink"><span class="type">GstFakeSink</span></a> *fakesink,
-                                                        <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>   *buffer,
-                                                        <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>      *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>   *buffer,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>      *pad,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
 <p>
 This signal gets emitted before unreffing the buffer.
index d7b13ff61401ba657a782ceb58f43045bd3c352e..1e53ccab83c7dc9fe06531a43c42cd1be98df60e 100644 (file)
@@ -55,9 +55,9 @@ enum                <a class="link" href="gstreamer-plugins-fakesrc.html#GstFake
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseSrc.html">GstBaseSrc</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
                            +----GstFakeSrc
 </pre>
 </div>
@@ -80,7 +80,7 @@ enum                <a class="link" href="gstreamer-plugins-fakesrc.html#GstFake
   "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--sizemin" title='The "sizemin" property'>sizemin</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read / Write
   "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--sizetype" title='The "sizetype" property'>sizetype</a>"                 <a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrcSizeType" title="enum GstFakeSrcSizeType"><span class="type">GstFakeSrcSizeType</span></a>    : Read / Write
   "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--sync" title='The "sync" property'>sync</a>"                     <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
-  "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--format" title='The "format" property'>format</a>"                   <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>             : Read / Write
+  "<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc--format" title='The "format" property'>format</a>"                   <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>             : Read / Write
 </pre>
 </div>
 <div class="refsect1">
@@ -102,7 +102,7 @@ basic <span class="application">GStreamer</span> core functionality is:
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9730432"></a><h3>Example launch line</h3>
+<a name="idp8917984"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -124,7 +124,7 @@ Last reviewed on 2008-06-20 (0.10.21)
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9733616"></a><h3>Element Information</h3>
+<a name="idp8921168"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -147,7 +147,7 @@ Last reviewed on 2008-06-20 (0.10.21)
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9741024"></a><h3>Element Pads</h3>
+<a name="idp8928576"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -472,7 +472,7 @@ The different size of the allocated buffers.
 <hr>
 <div class="refsect2">
 <a name="GstFakeSrc--format"></a><h3>The <code class="literal">"format"</code> property</h3>
-<pre class="programlisting">  "format"                   <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>             : Read / Write</pre>
+<pre class="programlisting">  "format"                   <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a>             : Read / Write</pre>
 <p>
 Set the format of the newsegment events to produce.
 </p>
@@ -484,8 +484,8 @@ Set the format of the newsegment events to produce.
 <div class="refsect2">
 <a name="GstFakeSrc-handoff"></a><h3>The <code class="literal">"handoff"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gstreamer-plugins-fakesrc.html#GstFakeSrc"><span class="type">GstFakeSrc</span></a> *fakesrc,
-                                                        <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>  *buffer,
-                                                        <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>     *pad,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>  *buffer,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>     *pad,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
 <p>
 This signal gets emitted before sending the buffer.
index 141aedfec3172f3f3cf4e77ca6e72c2a7a7ed8a6..81aa805a7da325ed6aa2a6f47be1a257076521a4 100644 (file)
@@ -51,9 +51,9 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseSink.html">GstBaseSink</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
                            +----GstFdSink
 </pre>
 </div>
@@ -61,7 +61,7 @@
 <a name="gstreamer-plugins-fdsink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstFdSink implements
- <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-fdsink.properties"></a><h2>Properties</h2>
@@ -77,7 +77,7 @@ Write data to a unix file descriptor.
 <p>
 This element will synchronize on the clock before writing the data on the
 socket. For file descriptors where this does not make sense (files, ...) the
-<a href="../gstreamer-libs-1.0/GstBaseSink.html#GstBaseSink--sync"><span class="type">"sync"</span></a> property can be used to disable synchronisation.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html#GstBaseSink--sync"><span class="type">"sync"</span></a> property can be used to disable synchronisation.
 </p>
 <p>
 Last reviewed on 2006-04-28 (0.10.6)
@@ -85,7 +85,7 @@ Last reviewed on 2006-04-28 (0.10.6)
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp9024688"></a><h3>Element Information</h3>
+<a name="idp6257216"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -108,7 +108,7 @@ Last reviewed on 2006-04-28 (0.10.6)
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp7652304"></a><h3>Element Pads</h3>
+<a name="idp5945264"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index e761269a344142619f8953a8df6004f341bc02d3..b40e4c458fd6a00edca5802f29a841aab1979d62 100644 (file)
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseSrc.html">GstBaseSrc</a>
-                           +----<a href="../gstreamer-libs-1.0/GstPushSrc.html">GstPushSrc</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                           +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
                                  +----GstFdSrc
 </pre>
 </div>
@@ -62,7 +62,7 @@
 <a name="gstreamer-plugins-fdsrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstFdSrc implements
- <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-fdsrc.properties"></a><h2>Properties</h2>
@@ -97,7 +97,7 @@ The message's structure contains one field:
 <p>
 </p>
 <div class="refsect2">
-<a name="idp6773120"></a><h3>Example launch line</h3>
+<a name="idp5656528"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -119,7 +119,7 @@ Last reviewed on 2008-06-20 (0.10.21)
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6776272"></a><h3>Element Information</h3>
+<a name="idp5659632"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -142,7 +142,7 @@ Last reviewed on 2008-06-20 (0.10.21)
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp6783728"></a><h3>Element Pads</h3>
+<a name="idp8604976"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index b0de009259e3b8af558e41812c51491701c9c0c9..f6fb9070911b093f69254d1682b80bc419fd14d1 100644 (file)
@@ -51,9 +51,9 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseSink.html">GstBaseSink</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
                            +----GstFileSink
 </pre>
 </div>
@@ -61,7 +61,7 @@
 <a name="gstreamer-plugins-filesink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstFileSink implements
- <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-filesink.properties"></a><h2>Properties</h2>
@@ -80,7 +80,7 @@ Write incoming data to a file in the local file system.
 <p>
 </p>
 <div class="refsect2">
-<a name="idp5037280"></a><h3>Example launch line</h3>
+<a name="idp5970928"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +98,7 @@ Write incoming data to a file in the local file system.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10876976"></a><h3>Element Information</h3>
+<a name="idp5973488"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -121,7 +121,7 @@ Write incoming data to a file in the local file system.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10924704"></a><h3>Element Pads</h3>
+<a name="idp5980896"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index 7d00f22297eb617080735a1b57a1855c25599b46..a9c98eb5ca362c4288e432258811f8db52e3cf17 100644 (file)
@@ -51,9 +51,9 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseSrc.html">GstBaseSrc</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
                            +----GstFileSrc
 </pre>
 </div>
@@ -61,7 +61,7 @@
 <a name="gstreamer-plugins-filesrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstFileSrc implements
- <a href="../gstreamer-1.0/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
+ <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstUriHandler.html#GstURIHandler">GstURIHandler</a>.</p>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-filesrc.properties"></a><h2>Properties</h2>
@@ -82,7 +82,7 @@ Read data from a file in the local file system.
 <p>
 </p>
 <div class="refsect2">
-<a name="idp6869664"></a><h3>Example launch line</h3>
+<a name="idp8226560"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -100,7 +100,7 @@ Read data from a file in the local file system.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6872272"></a><h3>Element Information</h3>
+<a name="idp8229168"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -123,7 +123,7 @@ Read data from a file in the local file system.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10528784"></a><h3>Element Pads</h3>
+<a name="idp8236624"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index 8604fe89b7004b68ea550a71ed195976d9e8298d..bbcde4424113725c5a96081e3110cbbb2d7e878b 100644 (file)
@@ -47,8 +47,8 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstFunnel
 </pre>
 </div>
@@ -59,7 +59,7 @@ Takes packets from various input sinks into one output source.
 </p>
 <p>
 funnel always outputs a single, open ended segment from
-0 with in <a href="../gstreamer-1.0/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> and outputs the buffers of the
+0 with in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> and outputs the buffers of the
 different sinkpads with timestamps that are set to the
 running time for that stream. funnel does not synchronize
 the different input streams but simply forwards all buffers
@@ -68,7 +68,7 @@ immediately when they arrive.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp7728896"></a><h3>Element Information</h3>
+<a name="idp7509888"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -91,7 +91,7 @@ immediately when they arrive.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp9964400"></a><h3>Element Pads</h3>
+<a name="idp7802976"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index 066ce4ef3ee9956d576c5385069b9903ea8c7bd9..a431f82f9b0dd56bc9c169963100ffd540243367 100644 (file)
@@ -51,9 +51,9 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
-                     +----<a href="../gstreamer-libs-1.0/GstBaseTransform.html">GstBaseTransform</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                     +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
                            +----GstIdentity
 </pre>
 </div>
@@ -90,7 +90,7 @@ useful diagnostic functions, such as offset and timestamp checking.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10744592"></a><h3>Element Information</h3>
+<a name="idp11020544"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -113,7 +113,7 @@ useful diagnostic functions, such as offset and timestamp checking.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10752048"></a><h3>Element Pads</h3>
+<a name="idp11028000"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -274,7 +274,7 @@ When set to <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-
 <div class="refsect2">
 <a name="GstIdentity-handoff"></a><h3>The <code class="literal">"handoff"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gstreamer-plugins-identity.html#GstIdentity"><span class="type">GstIdentity</span></a> *identity,
-                                                        <a href="../gstreamer-1.0/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>   *buffer,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBuffer.html#GstBuffer"><span class="type">GstBuffer</span></a>   *buffer,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
 <p>
 This signal gets emitted before passing the buffer downstream.
index be1192fe1672b35ac044a062ac424f030630f128..fe14fca6ed5de26ac2428f9f0168120721644957 100644 (file)
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstInputSelector
 </pre>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-input-selector.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--active-pad" title='The "active-pad" property'>active-pad</a>"               <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write
+  "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--active-pad" title='The "active-pad" property'>active-pad</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write
   "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--n-pads" title='The "n-pads" property'>n-pads</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read
   "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--select-all" title='The "select-all" property'>select-all</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector--sync-streams" title='The "sync-streams" property'>sync-streams</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
@@ -90,14 +90,14 @@ properties, which users may find useful, namely:
 "running-time": Running time of stream on pad (<span class="type">gint64</span>)
 </li>
 <li class="listitem">
-"tags": The currently active tags on the pad (<a href="../gstreamer-1.0/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>, boxed type)
+"tags": The currently active tags on the pad (<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstTagList.html#GstTagList"><span class="type">GstTagList</span></a>, boxed type)
 </li>
 <li class="listitem">
 "active": If the pad is currently active (<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>)
 </li>
 <li class="listitem">
-"always-ok" : Make an inactive pads return <a href="../gstreamer-1.0/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> instead of
-<a href="../gstreamer-1.0/GstPad.html#GST-FLOW-NOT-LINKED:CAPS"><span class="type">GST_FLOW_NOT_LINKED</span></a>
+"always-ok" : Make an inactive pads return <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> instead of
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-NOT-LINKED:CAPS"><span class="type">GST_FLOW_NOT_LINKED</span></a>
 </li>
 </ul></div>
 <p>
@@ -105,7 +105,7 @@ properties, which users may find useful, namely:
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11251280"></a><h3>Element Information</h3>
+<a name="idp11352080"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -128,7 +128,7 @@ properties, which users may find useful, namely:
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11258816"></a><h3>Element Pads</h3>
+<a name="idp11359616"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -189,7 +189,7 @@ properties, which users may find useful, namely:
 <a name="gstreamer-plugins-input-selector.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GstInputSelector--active-pad"></a><h3>The <code class="literal">"active-pad"</code> property</h3>
-<pre class="programlisting">  "active-pad"               <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write</pre>
+<pre class="programlisting">  "active-pad"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write</pre>
 <p>The currently active sink pad.</p>
 </div>
 <hr>
@@ -284,7 +284,7 @@ active pad or the current active pad never received data.
 <div class="refsect2">
 <a name="GstInputSelector-switch"></a><h3>The <code class="literal">"switch"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gstreamer-plugins-input-selector.html#GstInputSelector"><span class="type">GstInputSelector</span></a> *gstinputselector,
-                                                        <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>           *arg1,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>           *arg1,
                                                         <span class="type">gint64</span>            arg2,
                                                         <span class="type">gint64</span>            arg3,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>          user_data)             : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
index 298cd2a9ca6c82da586b005139e65263a3d97bc4..cc0f183a368a9cdc0d91e51d1f61d893dff7f88a 100644 (file)
@@ -51,8 +51,8 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstMultiQueue
 </pre>
 </div>
@@ -83,7 +83,7 @@
 <p>
 </p>
 <div class="refsect2">
-<a name="idp9289440"></a><p>
+<a name="idp9147568"></a><p>
 Multiqueue is similar to a normal <a class="link" href="gstreamer-plugins-queue.html#GstQueue"><span class="type">GstQueue</span></a> with the following additional
 features:
 </p>
@@ -97,7 +97,7 @@ features:
     'sometimes' src pads (src%d).
   </p>
 <p>
-    When requesting a given sinkpad with <a href="../gstreamer-1.0/GstElement.html#gst-element-get-request-pad"><code class="function">gst_element_get_request_pad()</code></a>,
+    When requesting a given sinkpad with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-get-request-pad"><code class="function">gst_element_get_request_pad()</code></a>,
     the associated srcpad for that stream will be created.
     Example: requesting sink1 will generate src1.
   </p>
@@ -173,7 +173,7 @@ Last reviewed on 2008-01-25 (0.10.17)
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11520688"></a><h3>Element Information</h3>
+<a name="idp11591264"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -196,7 +196,7 @@ Last reviewed on 2008-01-25 (0.10.17)
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11528144"></a><h3>Element Pads</h3>
+<a name="idp11598720"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index 3a944620c48fe9a6953feaf8d3c161e66d16a2f2..6850e8ae70a979515374335980a46e417eabd3bc 100644 (file)
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstOutputSelector
 </pre>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-output-selector.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--active-pad" title='The "active-pad" property'>active-pad</a>"               <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write
+  "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--active-pad" title='The "active-pad" property'>active-pad</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write
   "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--resend-latest" title='The "resend-latest" property'>resend-latest</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="gstreamer-plugins-output-selector.html#GstOutputSelector--pad-negotiation-mode" title='The "pad-negotiation-mode" property'>pad-negotiation-mode</a>"     <span class="type">GstOutputSelectorPadNegotiationMode</span>  : Read / Write
 </pre>
@@ -70,7 +70,7 @@ Direct input stream to one out of N output pads.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp4955616"></a><h3>Element Information</h3>
+<a name="idp10673888"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -93,7 +93,7 @@ Direct input stream to one out of N output pads.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11458256"></a><h3>Element Pads</h3>
+<a name="idp5443200"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -154,7 +154,7 @@ Direct input stream to one out of N output pads.
 <a name="gstreamer-plugins-output-selector.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GstOutputSelector--active-pad"></a><h3>The <code class="literal">"active-pad"</code> property</h3>
-<pre class="programlisting">  "active-pad"               <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write</pre>
+<pre class="programlisting">  "active-pad"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write</pre>
 <p>Currently active src pad.</p>
 </div>
 <hr>
index 0004318812e994dd2923aee180415ca8835b2426..1fd3126fe01665552bf0ea417cd5096013b4dc89 100644 (file)
@@ -28,7 +28,7 @@
 <td valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="idp8723328"></a><h2>Plugin Information</h2>
+<a name="idp11737760"></a><h2>Plugin Information</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -38,7 +38,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>0.11.99</td>
+<td>1.0.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -56,7 +56,7 @@
 </table></div>
 </div>
 <div class="refsect1">
-<a name="idp8851280"></a><h2>Elements</h2>
+<a name="idp8002864"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index 7d85501e8963c6c7cfdebfbc05716854b31b9c21..371aa6a9f3b42345572d0b780ccbf90f99e72e4f 100644 (file)
@@ -52,8 +52,8 @@ enum                <a class="link" href="gstreamer-plugins-queue.html#GstQueueL
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstQueue
 </pre>
 </div>
@@ -122,7 +122,7 @@ up. Both signals are emitted from the context of the streaming thread.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp11359504"></a><h3>Element Information</h3>
+<a name="idp11887200"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -145,7 +145,7 @@ up. Both signals are emitted from the context of the streaming thread.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp11366960"></a><h3>Element Pads</h3>
+<a name="idp11894656"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index f32511cf2ccb87509dd7a247a381b98d1e4ce410..286ab0568ab6729eb87922c86257b8eeaef21c85 100644 (file)
@@ -49,8 +49,8 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstQueue2
 </pre>
 </div>
@@ -110,7 +110,7 @@ Last reviewed on 2009-07-10 (0.10.24)
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12163568"></a><h3>Element Information</h3>
+<a name="idp12065680"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -133,7 +133,7 @@ Last reviewed on 2009-07-10 (0.10.24)
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12170976"></a><h3>Element Pads</h3>
+<a name="idp12073088"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index eec6bfccca76513c6ce9d8ac08b029682056077f..0698ad7492173193ca4fdcc4e1325c3ce3463a76 100644 (file)
@@ -50,8 +50,8 @@ enum                <a class="link" href="gstreamer-plugins-tee.html#GstTeePullM
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstTee
 </pre>
 </div>
@@ -64,7 +64,7 @@ enum                <a class="link" href="gstreamer-plugins-tee.html#GstTeePullM
   "<a class="link" href="gstreamer-plugins-tee.html#GstTee--num-src-pads" title='The "num-src-pads" property'>num-src-pads</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>                  : Read
   "<a class="link" href="gstreamer-plugins-tee.html#GstTee--silent" title='The "silent" property'>silent</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write / Construct
   "<a class="link" href="gstreamer-plugins-tee.html#GstTee--pull-mode" title='The "pull-mode" property'>pull-mode</a>"                <a class="link" href="gstreamer-plugins-tee.html#GstTeePullMode" title="enum GstTeePullMode"><span class="type">GstTeePullMode</span></a>        : Read / Write / Construct
-  "<a class="link" href="gstreamer-plugins-tee.html#GstTee--alloc-pad" title='The "alloc-pad" property'>alloc-pad</a>"                <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write
+  "<a class="link" href="gstreamer-plugins-tee.html#GstTee--alloc-pad" title='The "alloc-pad" property'>alloc-pad</a>"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write
 </pre>
 </div>
 <div class="refsect1">
@@ -83,7 +83,7 @@ branch would stall the other branches.
 <p>
 </p>
 <div class="refsect2">
-<a name="idp6592416"></a><h3>Example launch line</h3>
+<a name="idp11758608"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -102,7 +102,7 @@ element.
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp6595136"></a><h3>Element Information</h3>
+<a name="idp11761328"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -125,7 +125,7 @@ element.
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12121312"></a><h3>Element Pads</h3>
+<a name="idp12171152"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -258,7 +258,7 @@ disables pull mode.
 <hr>
 <div class="refsect2">
 <a name="GstTee--alloc-pad"></a><h3>The <code class="literal">"alloc-pad"</code> property</h3>
-<pre class="programlisting">  "alloc-pad"                <a href="../gstreamer-1.0/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write</pre>
+<pre class="programlisting">  "alloc-pad"                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>*               : Read / Write</pre>
 <p>The pad used for gst_pad_alloc_buffer.</p>
 </div>
 </div>
index 7b34a7d807ce8ad295f253ff729cf4f67ba9f390..84edaa7afce1e9e39635a7daaad79c38a9dff1db 100644 (file)
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstTypeFindElement
 </pre>
 </div>
 <div class="refsect1">
 <a name="gstreamer-plugins-typefind.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--caps" title='The "caps" property'>caps</a>"                     <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read
+  "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--caps" title='The "caps" property'>caps</a>"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read
   "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--maximum" title='The "maximum" property'>maximum</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
   "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--minimum" title='The "minimum" property'>minimum</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
-  "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--force-caps" title='The "force-caps" property'>force-caps</a>"               <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
+  "<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement--force-caps" title='The "force-caps" property'>force-caps</a>"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write
 </pre>
 </div>
 <div class="refsect1">
@@ -85,12 +85,12 @@ emitted, either from the streaming thread or the application thread
 state change function).
 </p>
 <p>
-Plugins can register custom typefinders by using <a href="../gstreamer-1.0/GstTypeFindFactory.html"><span class="type">GstTypeFindFactory</span></a>.
+Plugins can register custom typefinders by using <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTypeFindFactory.html"><span class="type">GstTypeFindFactory</span></a>.
 </p>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp12038496"></a><h3>Element Information</h3>
+<a name="idp8383824"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -113,7 +113,7 @@ Plugins can register custom typefinders by using <a href="../gstreamer-1.0/GstTy
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp12045904"></a><h3>Element Pads</h3>
+<a name="idp8391232"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -175,7 +175,7 @@ Opaque <a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement"
 <a name="gstreamer-plugins-typefind.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GstTypeFindElement--caps"></a><h3>The <code class="literal">"caps"</code> property</h3>
-<pre class="programlisting">  "caps"                     <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read</pre>
+<pre class="programlisting">  "caps"                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read</pre>
 <p>detected capabilities in stream.</p>
 </div>
 <hr>
@@ -197,7 +197,7 @@ Opaque <a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement"
 <hr>
 <div class="refsect2">
 <a name="GstTypeFindElement--force-caps"></a><h3>The <code class="literal">"force-caps"</code> property</h3>
-<pre class="programlisting">  "force-caps"               <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
+<pre class="programlisting">  "force-caps"               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>*              : Read / Write</pre>
 <p>force caps without doing a typefind.</p>
 </div>
 </div>
@@ -207,7 +207,7 @@ Opaque <a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement"
 <a name="GstTypeFindElement-have-type"></a><h3>The <code class="literal">"have-type"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="gstreamer-plugins-typefind.html#GstTypeFindElement"><span class="type">GstTypeFindElement</span></a> *typefind,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>               probability,
-                                                        <a href="../gstreamer-1.0/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>            *caps,
+                                                        <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>            *caps,
                                                         <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>            user_data)        : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS"><code class="literal">Run First</code></a></pre>
 <p>
 This signal gets emitted when the type and its probability has
index 790cb04ab35ef0c708ea3cf0f97d3f442ff592fc..f7a6e8afe4c724e61b48acb0c9ee234f958bb88e 100644 (file)
@@ -49,8 +49,8 @@
 <pre class="synopsis">
   <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-         +----<a href="../gstreamer-1.0/GstObject.html">GstObject</a>
-               +----<a href="../gstreamer-1.0/GstElement.html">GstElement</a>
+         +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+               +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
                      +----GstValve
 </pre>
 </div>
@@ -68,7 +68,7 @@ property is set to <a href="http://library.gnome.org/devel/glib/unstable/glib-St
 </p>
 <p>
 Any downstream error received while the <a class="link" href="gstreamer-plugins-valve.html#GstValve--drop" title='The "drop" property'><span class="type">"drop"</span></a> property is <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
-is ignored. So downstream element can be set to  <a href="../gstreamer-1.0/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a> and removed,
+is ignored. So downstream element can be set to  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a> and removed,
 without using pad blocking.
 </p>
 <p>
@@ -81,7 +81,7 @@ Documentation last reviewed on 2010-12-30 (0.10.31)
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="idp10150096"></a><h3>Element Information</h3>
+<a name="idp7026960"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -104,7 +104,7 @@ Documentation last reviewed on 2010-12-30 (0.10.31)
 </div>
 <hr>
 <div class="refsect2">
-<a name="idp10589120"></a><h3>Element Pads</h3>
+<a name="idp6648192"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
index 60b4b672bf46ea7c52543f761561ef88bca4b4fa..5ffdc59b73170d5347562045fbe81bef9ac2b08e 100644 (file)
     </sub>
   </chapters>
   <functions>
-    <keyword type="" name="Example launch line" link="gstreamer-plugins-capsfilter.html#idp9006336"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-capsfilter.html#idp9217088"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-capsfilter.html#idp32112"/>
+    <keyword type="" name="Example launch line" link="gstreamer-plugins-capsfilter.html#idp6769312"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-capsfilter.html#idp8040384"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-capsfilter.html#idm8384"/>
     <keyword type="struct" name="struct GstCapsFilter" link="gstreamer-plugins-capsfilter.html#GstCapsFilter-struct"/>
     <keyword type="property" name="The &quot;caps&quot; property" link="gstreamer-plugins-capsfilter.html#GstCapsFilter--caps"/>
-    <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesrc.html#idp9730432"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-fakesrc.html#idp9733616"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesrc.html#idp9741024"/>
+    <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesrc.html#idp8917984"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-fakesrc.html#idp8921168"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesrc.html#idp8928576"/>
     <keyword type="struct" name="struct GstFakeSrc" link="gstreamer-plugins-fakesrc.html#GstFakeSrc-struct"/>
     <keyword type="enum" name="enum GstFakeSrcDataType" link="gstreamer-plugins-fakesrc.html#GstFakeSrcDataType"/>
     <keyword type="enum" name="enum GstFakeSrcFillType" link="gstreamer-plugins-fakesrc.html#GstFakeSrcFillType"/>
@@ -57,9 +57,9 @@
     <keyword type="property" name="The &quot;sync&quot; property" link="gstreamer-plugins-fakesrc.html#GstFakeSrc--sync"/>
     <keyword type="property" name="The &quot;format&quot; property" link="gstreamer-plugins-fakesrc.html#GstFakeSrc--format"/>
     <keyword type="signal" name="The &quot;handoff&quot; signal" link="gstreamer-plugins-fakesrc.html#GstFakeSrc-handoff"/>
-    <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesink.html#idp9474080"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-fakesink.html#idp6125200"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesink.html#idp6132624"/>
+    <keyword type="" name="Example launch line" link="gstreamer-plugins-fakesink.html#idp5610160"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-fakesink.html#idp10697840"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-fakesink.html#idp10705376"/>
     <keyword type="struct" name="struct GstFakeSink" link="gstreamer-plugins-fakesink.html#GstFakeSink-struct"/>
     <keyword type="enum" name="enum GstFakeSinkStateError" link="gstreamer-plugins-fakesink.html#GstFakeSinkStateError"/>
     <keyword type="property" name="The &quot;can-activate-pull&quot; property" link="gstreamer-plugins-fakesink.html#GstFakeSink--can-activate-pull"/>
     <keyword type="property" name="The &quot;num-buffers&quot; property" link="gstreamer-plugins-fakesink.html#GstFakeSink--num-buffers"/>
     <keyword type="signal" name="The &quot;handoff&quot; signal" link="gstreamer-plugins-fakesink.html#GstFakeSink-handoff"/>
     <keyword type="signal" name="The &quot;preroll-handoff&quot; signal" link="gstreamer-plugins-fakesink.html#GstFakeSink-preroll-handoff"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-fdsink.html#idp9024688"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsink.html#idp7652304"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-fdsink.html#idp6257216"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsink.html#idp5945264"/>
     <keyword type="struct" name="struct GstFdSink" link="gstreamer-plugins-fdsink.html#GstFdSink-struct"/>
     <keyword type="property" name="The &quot;fd&quot; property" link="gstreamer-plugins-fdsink.html#GstFdSink--fd"/>
-    <keyword type="" name="Example launch line" link="gstreamer-plugins-fdsrc.html#idp6773120"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-fdsrc.html#idp6776272"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsrc.html#idp6783728"/>
+    <keyword type="" name="Example launch line" link="gstreamer-plugins-fdsrc.html#idp5656528"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-fdsrc.html#idp5659632"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-fdsrc.html#idp8604976"/>
     <keyword type="struct" name="struct GstFdSrc" link="gstreamer-plugins-fdsrc.html#GstFdSrc-struct"/>
     <keyword type="property" name="The &quot;fd&quot; property" link="gstreamer-plugins-fdsrc.html#GstFdSrc--fd"/>
     <keyword type="property" name="The &quot;timeout&quot; property" link="gstreamer-plugins-fdsrc.html#GstFdSrc--timeout"/>
-    <keyword type="" name="Example launch line" link="gstreamer-plugins-filesrc.html#idp6869664"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-filesrc.html#idp6872272"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-filesrc.html#idp10528784"/>
+    <keyword type="" name="Example launch line" link="gstreamer-plugins-filesrc.html#idp8226560"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-filesrc.html#idp8229168"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-filesrc.html#idp8236624"/>
     <keyword type="struct" name="struct GstFileSrc" link="gstreamer-plugins-filesrc.html#GstFileSrc-struct"/>
     <keyword type="property" name="The &quot;fd&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--fd"/>
     <keyword type="property" name="The &quot;location&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--location"/>
     <keyword type="property" name="The &quot;touch&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--touch"/>
     <keyword type="property" name="The &quot;use-mmap&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--use-mmap"/>
     <keyword type="property" name="The &quot;sequential&quot; property" link="gstreamer-plugins-filesrc.html#GstFileSrc--sequential"/>
-    <keyword type="" name="Example launch line" link="gstreamer-plugins-filesink.html#idp5037280"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-filesink.html#idp10876976"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-filesink.html#idp10924704"/>
+    <keyword type="" name="Example launch line" link="gstreamer-plugins-filesink.html#idp5970928"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-filesink.html#idp5973488"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-filesink.html#idp5980896"/>
     <keyword type="struct" name="struct GstFileSink" link="gstreamer-plugins-filesink.html#GstFileSink-struct"/>
     <keyword type="property" name="The &quot;location&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--location"/>
     <keyword type="property" name="The &quot;buffer-mode&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--buffer-mode"/>
     <keyword type="property" name="The &quot;buffer-size&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--buffer-size"/>
     <keyword type="property" name="The &quot;append&quot; property" link="gstreamer-plugins-filesink.html#GstFileSink--append"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-funnel.html#idp7728896"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-funnel.html#idp9964400"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-funnel.html#idp7509888"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-funnel.html#idp7802976"/>
     <keyword type="struct" name="struct GstFunnel" link="gstreamer-plugins-funnel.html#GstFunnel-struct"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-identity.html#idp10744592"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-identity.html#idp10752048"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-identity.html#idp11020544"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-identity.html#idp11028000"/>
     <keyword type="struct" name="struct GstIdentity" link="gstreamer-plugins-identity.html#GstIdentity-struct"/>
     <keyword type="property" name="The &quot;check-perfect&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--check-perfect"/>
     <keyword type="property" name="The &quot;datarate&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--datarate"/>
     <keyword type="property" name="The &quot;check-imperfect-timestamp&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--check-imperfect-timestamp"/>
     <keyword type="property" name="The &quot;signal-handoffs&quot; property" link="gstreamer-plugins-identity.html#GstIdentity--signal-handoffs"/>
     <keyword type="signal" name="The &quot;handoff&quot; signal" link="gstreamer-plugins-identity.html#GstIdentity-handoff"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-input-selector.html#idp11251280"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-input-selector.html#idp11258816"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-input-selector.html#idp11352080"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-input-selector.html#idp11359616"/>
     <keyword type="struct" name="struct GstInputSelector" link="gstreamer-plugins-input-selector.html#GstInputSelector-struct"/>
     <keyword type="property" name="The &quot;active-pad&quot; property" link="gstreamer-plugins-input-selector.html#GstInputSelector--active-pad"/>
     <keyword type="property" name="The &quot;n-pads&quot; property" link="gstreamer-plugins-input-selector.html#GstInputSelector--n-pads"/>
     <keyword type="property" name="The &quot;sync-mode&quot; property" link="gstreamer-plugins-input-selector.html#GstInputSelector--sync-mode"/>
     <keyword type="signal" name="The &quot;block&quot; signal" link="gstreamer-plugins-input-selector.html#GstInputSelector-block"/>
     <keyword type="signal" name="The &quot;switch&quot; signal" link="gstreamer-plugins-input-selector.html#GstInputSelector-switch"/>
-    <keyword type="" name="" link="gstreamer-plugins-multiqueue.html#idp9289440"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-multiqueue.html#idp11520688"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-multiqueue.html#idp11528144"/>
+    <keyword type="" name="" link="gstreamer-plugins-multiqueue.html#idp9147568"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-multiqueue.html#idp11591264"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-multiqueue.html#idp11598720"/>
     <keyword type="struct" name="struct GstMultiQueue" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-struct"/>
     <keyword type="property" name="The &quot;extra-size-buffers&quot; property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--extra-size-buffers"/>
     <keyword type="property" name="The &quot;extra-size-bytes&quot; property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--extra-size-bytes"/>
     <keyword type="property" name="The &quot;sync-by-running-time&quot; property" link="gstreamer-plugins-multiqueue.html#GstMultiQueue--sync-by-running-time"/>
     <keyword type="signal" name="The &quot;overrun&quot; signal" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-overrun"/>
     <keyword type="signal" name="The &quot;underrun&quot; signal" link="gstreamer-plugins-multiqueue.html#GstMultiQueue-underrun"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-output-selector.html#idp4955616"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-output-selector.html#idp11458256"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-output-selector.html#idp10673888"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-output-selector.html#idp5443200"/>
     <keyword type="struct" name="struct GstOutputSelector" link="gstreamer-plugins-output-selector.html#GstOutputSelector-struct"/>
     <keyword type="property" name="The &quot;active-pad&quot; property" link="gstreamer-plugins-output-selector.html#GstOutputSelector--active-pad"/>
     <keyword type="property" name="The &quot;resend-latest&quot; property" link="gstreamer-plugins-output-selector.html#GstOutputSelector--resend-latest"/>
     <keyword type="property" name="The &quot;pad-negotiation-mode&quot; property" link="gstreamer-plugins-output-selector.html#GstOutputSelector--pad-negotiation-mode"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-queue.html#idp11359504"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-queue.html#idp11366960"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-queue.html#idp11887200"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-queue.html#idp11894656"/>
     <keyword type="struct" name="struct GstQueue" link="gstreamer-plugins-queue.html#GstQueue-struct"/>
     <keyword type="enum" name="enum GstQueueLeaky" link="gstreamer-plugins-queue.html#GstQueueLeaky"/>
     <keyword type="property" name="The &quot;current-level-buffers&quot; property" link="gstreamer-plugins-queue.html#GstQueue--current-level-buffers"/>
     <keyword type="signal" name="The &quot;running&quot; signal" link="gstreamer-plugins-queue.html#GstQueue-running"/>
     <keyword type="signal" name="The &quot;underrun&quot; signal" link="gstreamer-plugins-queue.html#GstQueue-underrun"/>
     <keyword type="signal" name="The &quot;pushing&quot; signal" link="gstreamer-plugins-queue.html#GstQueue-pushing"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-queue2.html#idp12163568"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-queue2.html#idp12170976"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-queue2.html#idp12065680"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-queue2.html#idp12073088"/>
     <keyword type="struct" name="struct GstQueue2" link="gstreamer-plugins-queue2.html#GstQueue2-struct"/>
     <keyword type="property" name="The &quot;current-level-buffers&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--current-level-buffers"/>
     <keyword type="property" name="The &quot;current-level-bytes&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--current-level-bytes"/>
     <keyword type="property" name="The &quot;use-rate-estimate&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--use-rate-estimate"/>
     <keyword type="property" name="The &quot;temp-remove&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--temp-remove"/>
     <keyword type="property" name="The &quot;ring-buffer-max-size&quot; property" link="gstreamer-plugins-queue2.html#GstQueue2--ring-buffer-max-size"/>
-    <keyword type="" name="Example launch line" link="gstreamer-plugins-tee.html#idp6592416"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-tee.html#idp6595136"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-tee.html#idp12121312"/>
+    <keyword type="" name="Example launch line" link="gstreamer-plugins-tee.html#idp11758608"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-tee.html#idp11761328"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-tee.html#idp12171152"/>
     <keyword type="struct" name="struct GstTee" link="gstreamer-plugins-tee.html#GstTee-struct"/>
     <keyword type="enum" name="enum GstTeePullMode" link="gstreamer-plugins-tee.html#GstTeePullMode"/>
     <keyword type="property" name="The &quot;has-chain&quot; property" link="gstreamer-plugins-tee.html#GstTee--has-chain"/>
     <keyword type="property" name="The &quot;silent&quot; property" link="gstreamer-plugins-tee.html#GstTee--silent"/>
     <keyword type="property" name="The &quot;pull-mode&quot; property" link="gstreamer-plugins-tee.html#GstTee--pull-mode"/>
     <keyword type="property" name="The &quot;alloc-pad&quot; property" link="gstreamer-plugins-tee.html#GstTee--alloc-pad"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-typefind.html#idp12038496"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-typefind.html#idp12045904"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-typefind.html#idp8383824"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-typefind.html#idp8391232"/>
     <keyword type="struct" name="struct GstTypeFindElement" link="gstreamer-plugins-typefind.html#GstTypeFindElement-struct"/>
     <keyword type="property" name="The &quot;caps&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--caps"/>
     <keyword type="property" name="The &quot;maximum&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--maximum"/>
     <keyword type="property" name="The &quot;minimum&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--minimum"/>
     <keyword type="property" name="The &quot;force-caps&quot; property" link="gstreamer-plugins-typefind.html#GstTypeFindElement--force-caps"/>
     <keyword type="signal" name="The &quot;have-type&quot; signal" link="gstreamer-plugins-typefind.html#GstTypeFindElement-have-type"/>
-    <keyword type="" name="Element Information" link="gstreamer-plugins-valve.html#idp10150096"/>
-    <keyword type="" name="Element Pads" link="gstreamer-plugins-valve.html#idp10589120"/>
+    <keyword type="" name="Element Information" link="gstreamer-plugins-valve.html#idp7026960"/>
+    <keyword type="" name="Element Pads" link="gstreamer-plugins-valve.html#idp6648192"/>
     <keyword type="struct" name="struct GstValve" link="gstreamer-plugins-valve.html#GstValve-struct"/>
     <keyword type="property" name="The &quot;drop&quot; property" link="gstreamer-plugins-valve.html#GstValve--drop"/>
     <keyword type="constant" name="FAKE_SRC_DATA_ALLOCATE" link="gstreamer-plugins-fakesrc.html#FAKE-SRC-DATA-ALLOCATE:CAPS"/>
index 57b0c49cb64403f2c50902d16184009bac638d6e..76907b7f2cbaaef571ed71fb8ed4c6f5fa085707 100644 (file)
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Core Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Core Plugins 1.0 (1.0.0)
+      for GStreamer Core Plugins 1.0 (1.0.2)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/</a>.
     </p></div>
index b02f4d1b8d1952f66b993778472cc8e2b62be022..ed31aa31f668249fe78b66a5d84cdfd4ac8f4ccf 100644 (file)
@@ -3,7 +3,7 @@
   <description> GStreamer core elements</description>
   <filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
   <basename>libgstcoreelements.so</basename>
-  <version>1.0.0</version>
+  <version>1.0.2</version>
   <license>LGPL</license>
   <source>gstreamer</source>
   <package>GStreamer source release</package>
index e273c6585e455b1c644fe0a625c819d8010487f1..473b2cb5e1e0f0239d3513572181cfaae9d31486 100644 (file)
@@ -105,7 +105,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -353,6 +353,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -389,6 +392,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -885,14 +889,12 @@ upload: $(FORMATS)
        if echo $(FORMATS) | grep ps > /dev/null; then export SRC="$$SRC $(DOC).ps"; fi; \
        if echo $(FORMATS) | grep pdf > /dev/null; then export SRC="$$SRC $(DOC).pdf"; fi; \
        \
-       # upload releases to both 0.10.X/ and head/ subdirectories \
-       if test "x$(PACKAGE_VERSION_NANO)" = x0; then \
-         export DIR=$(DOC_BASE)/gstreamer/$(VERSION)/$(DOC); \
-         echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) mkdir -p $$DIR; \
-         rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
-         ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
-       fi; \
+       # upload releases to both X.Y/ and head/ subdirectories \
+       export DIR=$(DOC_BASE)/gstreamer/$(PACKAGE_VERSION_MAJOR).$(PACKAGE_VERSION_MINOR)/$(DOC); \
+       echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) mkdir -p $$DIR; \
+       rsync -rv -e ssh --delete $$SRC $(DOC_SERVER):$$DIR; \
+       ssh $(DOC_SERVER) chmod -R g+w $$DIR; \
        \
        export DIR=$(DOC_BASE)/gstreamer/head/$(DOC); \
        echo Uploading $$SRC to $(DOC_SERVER):$$DIR; \
diff --git a/docs/pwg/advanced-allocation.xml b/docs/pwg/advanced-allocation.xml
new file mode 100644 (file)
index 0000000..625e76e
--- /dev/null
@@ -0,0 +1,812 @@
+<chapter id="chapter-allocation" xreflabel="Memory allocation">
+  <title>Memory allocation</title>
+  <para>
+    Memory allocation and management is a very important topic in
+    multimedia. High definition video uses many magabytes to store
+    one single frame of video. It is important to reuse the memory
+    when possible instead of constantly allocating and freeing
+    the memory.
+  </para>
+  <para>
+    Multimedia systems usually use special purpose chips, such as
+    DSPs or GPUs to perform the heavy lifting (especially for video).
+    These special purpose chips have usually strict requirements
+    for the memory that they can operate on and how the memory
+    is accessed.
+  </para>
+  <para>
+    This chapter talks about the memory management features that
+    &GStreamer; plugins can use. We will first talk about the
+    lowlevel <classname>GstMemory</classname> object that manages
+    access to a piece of memory. We then continue with
+    <classname>GstBuffer</classname> that is used to exchange data
+    between plugins (and the application) and that uses
+    <classname>GstMemory</classname>. We talk about
+    <classname>GstMeta</classname> that can be placed on buffers to
+    give extra info about the buffer and its memory.
+    For efficiently managing buffers of the same size, we take a
+    look at <classname>GstBufferPool</classname>. To conclude this
+    chapter we take a look at the GST_QUERY_ALLOCATION query that
+    is used to negotiate memory management options between elements.
+  </para>
+
+  <sect1 id="section-allocation-memory" xreflabel="GstMemory">
+    <title>GstMemory</title>
+    <para>
+      <classname>GstMemory</classname> is an object that manages a region
+      of memory. The memory object points to a region of memory of
+      <quote>maxsize</quote>. The area in this memory starting at
+      <quote>offset</quote> and for <quote>size</quote> bytes is the
+      accessible region in the memory. the maxsize of the memory can
+      never be changed after the object is created, however, the offset
+      and size can be changed.
+    </para>
+    <para>
+      <classname>GstMemory</classname> objects are created by a
+      <classname>GstAllocator</classname> object. To implement support
+      for a new kind of memory type, you must implement a new allocator
+      object.
+    </para>
+    <sect2 id="section-allocation-memory-ex" xreflabel="GstMemory-ex">
+      <title>GstMemory API example</title>
+      <para>
+        Data access to the memory wrapped by the <classname>GstMemory</classname>
+        object is always protected with a <function>gst_memory_map()</function>
+        and <function>gst_memory_unmap()</function> pair. An access mode
+        (read/write) must be given when mapping memory. The map
+        function returns a pointer to the valid memory region that can
+        then be accessed according to the requested access mode. 
+      </para>
+      <para>
+        Below is an example of making a <classname>GstMemory</classname>
+        object and using the <function>gst_memory_map()</function> to
+        access the memory region.
+      </para>
+      <programlisting>
+<![CDATA[
+[...]
+
+  GstMemory *mem;
+  GstMapInfo info;
+  gint i;
+
+  /* allocate 100 bytes */
+  mem = gst_allocator_alloc (NULL, 100, NULL);
+
+  /* get access to the memory in write mode */
+  gst_memory_map (mem, &info, GST_MAP_WRITE);
+
+  /* fill with pattern */
+  for (i = 0; i < info.size; i++)
+    info.data[i] = i;
+
+  /* release memory */
+  gst_memory_unmap (mem, &info);
+
+[...]
+]]>
+      </programlisting>
+    </sect2>
+
+    <sect2 id="section-allocation-allocator" xreflabel="GstAllocator">
+      <title>Implementing a GstAllocator</title>
+      <para>
+        WRITEME
+      </para>
+    </sect2>
+
+  </sect1>
+
+  <sect1 id="section-allocation-buffer" xreflabel="GstBuffer">
+    <title>GstBuffer</title>
+    <para>
+      A <classname>GstBuffer</classname> is an lightweight object that
+      is passed from an upstream to a downstream element and contains
+      memory and metadata. It represents the multimedia content that
+      is pushed or pull downstream by elements.
+    </para>
+    <para>
+      The buffer contains one or more <classname>GstMemory</classname>
+      objects thet represent the data in the buffer.
+    </para>
+    <para>
+      Metadata in the buffer consists of:
+    </para>
+    <itemizedlist mark="opencircle">
+      <listitem>
+        <para>
+          DTS and PTS timestamps. These represent the decoding and
+          presentation timestamps of the buffer content and is used by
+          synchronizing elements to schedule buffers. Both these timestamps
+          can be GST_CLOCK_TIME_NONE when unknown/undefined.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          The duration of the buffer contents. This duration can be
+          GST_CLOCK_TIME_NONE when unknown/undefined.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Media specific offsets and offset_end. For video this is the 
+          frame number in the stream and for audio the sample number. Other
+          definitions for other media exist. 
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Arbitrary structures via <classname>GstMeta</classname>, see below.
+        </para>
+      </listitem>
+    </itemizedlist>
+
+    <sect2 id="section-allocation-writability" xreflabel="GstBuffer-write">
+      <title>GstBuffer writability</title>
+      <para>
+        A buffer is writable when the refcount of the object is exactly 1, meaning
+        that only one object is holding a ref to the buffer. You can only
+        modify anything in the buffer when the buffer is writable. This means
+        that you need to call <function>gst_buffer_make_writable()</function>
+        before changing the timestamps, offsets, metadata or adding and
+        removing memory blocks.
+      </para>
+    </sect2>
+    <sect2 id="section-allocation-buffer-ex" xreflabel="GstBuffer-ex">
+      <title>GstBuffer API examples</title>
+      <para>
+        You can create a buffer with <function>gst_buffer_new ()</function>
+        and then add memory objects to it or you can use a convenience function
+        <function>gst_buffer_new_allocate ()</function> which combines the
+        two. It's also possible to wrap existing memory with 
+        <function>gst_buffer_new_wrapped_full () </function> where you can
+        give the function to call when the memory should be freed.
+      </para>
+      <para>
+        You can access the memory of the buffer by getting and mapping the 
+        <classname>GstMemory</classname> objects individually or by using
+        <function>gst_buffer_map ()</function>. The latter merges all the
+        memory into one big block and then gives you a pointer to this block.
+      </para>
+      <para>
+        Below is an example of how to create a buffer and access its memory.
+      </para>
+      <programlisting>
+<![CDATA[
+[...]
+  GstBuffer *buffer;
+  GstMemory *mem;
+  GstMapInfo info;
+
+  /* make empty buffer */
+  buffer = gst_buffer_new ();
+
+  /* make memory holding 100 bytes */
+  mem = gst_allocator_alloc (NULL, 100, NULL);
+
+  /* add the the buffer */
+  gst_buffer_append_memory (buffer, mem);
+
+[...]
+
+  /* get WRITE access to the memory and fill with 0xff */
+  gst_buffer_map (buffer, &info, GST_MAP_WRITE);
+  memset (info.data, 0xff, info.size);
+  gst_buffer_unmap (buffer, &info);
+
+[...]
+
+  /* free the buffer */
+  gst_buffer_unref (buffer);
+
+[...]
+]]>
+      </programlisting>
+    </sect2>
+  </sect1>
+
+  <sect1 id="section-allocation-meta" xreflabel="GstMeta">
+    <title>GstMeta</title>
+    <para>
+      With the <classname>GstMeta</classname> system you can add arbitrary
+      structures of on buffers. These structures describe extra properties
+      of the buffer such as cropping, stride, region of interest etc.
+    </para>
+    <para>
+      Metadata is also used to store, for example, the X image that is
+      backing up the memory of the buffer. This makes it easier for elements
+      to locate the X image from the buffer.
+    </para>
+    <para>
+      The metadata system separates API specification (what the metadata
+      and its API look like) and the implementation (how it works). This makes
+      it possible to make different implementations of the same API,
+      for example, depending on the hardware you are running on.
+    </para>
+
+    <sect2 id="section-allocation-meta-ex" xreflabel="GstMeta-ex">
+      <title>GstMeta API example</title>
+      <para>
+        After allocating a new buffer, you can add metadata to the buffer
+        with the metadata specific API. This means that you will need to
+        link to the header file where the metadata is defined to use
+        its API.
+      </para>
+      <para>
+        By convention, a metadata API with name <classname>FooBar</classname>
+        should provide two methods, a
+        <function>gst_buffer_add_foo_bar_meta ()</function> and a
+        <function>gst_buffer_get_foo_bar_meta ()</function>. Both functions
+        should return a pointer to a <classname>FooBarMeta</classname>
+        structure that contains the metadata fields. Some of the
+        <function>_add_*_meta ()</function> can have extra parameters that
+        will usually be used to configure the metadata structure for you.
+      </para>
+      <para>
+        Let's have a look at the metadata that is used to specify a cropping
+        region for video frames.
+      </para>
+      <programlisting>
+<![CDATA[
+#include <gst/video/gstvideometa.h>
+
+[...]
+  GstVideoCropMeta *meta;
+
+  /* buffer points to a video frame, add some cropping metadata */
+  meta = gst_buffer_add_video_crop_meta (buffer);
+
+  /* configure the cropping metadata */
+  meta->x = 8;
+  meta->y = 8;
+  meta->width = 120;
+  meta->height = 80;
+[...]
+]]>
+      </programlisting>
+      <para>
+        An element can then use the metadata on the buffer when rendering
+        the frame like this:
+      </para>
+      <programlisting>
+<![CDATA[
+#include <gst/video/gstvideometa.h>
+
+[...]
+  GstVideoCropMeta *meta;
+
+  /* buffer points to a video frame, get the cropping metadata */
+  meta = gst_buffer_get_video_crop_meta (buffer);
+
+  if (meta) {
+    /* render frame with cropping */
+    _render_frame_cropped (buffer, meta->x, meta->y, meta->width, meta->height);
+  } else {
+    /* render frame */
+    _render_frame (buffer);
+  }
+[...]
+
+]]>
+      </programlisting>
+    </sect2>
+
+    <sect2 id="section-allocation-meta-new" xreflabel="GstMeta-new">
+      <title>Implementing new GstMeta</title>
+      <para>
+        In the next sections we show how you can add new metadata to the
+        system and use it on buffers.
+      </para>
+
+      <sect3 id="section-allocation-meta-api" xreflabel="GstMeta-api">
+        <title>Define the metadata API</title>
+        <para>
+          First we need to define what our API will look like and we
+          will have to register this API to the system. This is important
+          because this API definition will be used when elements negotiate
+          what kind of metadata they will exchange. The API definition
+          also contains arbitrary tags that give hints about what the
+          metadata contains. This is important when we see how metadata
+          is preserved when buffers pass through the pipeline.
+        </para>
+        <para>
+          If you are making a new implementation of an existing API,
+          you can skip this step and move on to the implementation step.
+        </para>
+        <para>
+          First we start with making the
+          <filename>my-example-meta.h</filename> header file that will contain
+          the definition of the API and structure for our metadata.
+        </para>
+        <programlisting>
+<![CDATA[
+#include <gst/gst.h>
+
+typedef struct _MyExampleMeta MyExampleMeta;
+
+struct _MyExampleMeta {
+  GstMeta       meta;
+
+  gint          age;
+  gchar        *name;
+};
+
+GType my_example_meta_api_get_type (void);
+#define MY_EXAMPLE_META_API_TYPE (my_example_meta_api_get_type())
+
+#define gst_buffer_get_my_example_meta(b) \
+  ((MyExampleMeta*)gst_buffer_get_meta((b),MY_EXAMPLE_META_API_TYPE))
+]]>
+        </programlisting>
+        <para>
+          The metadata API definition consists of the definition of the
+          structure that holds a gint and a string. The first field in
+          the structure must be <classname>GstMeta</classname>.
+        </para>
+        <para>
+          We also define a <function>my_example_meta_api_get_type ()</function>
+          function that will register out metadata API definition. We
+          also define a convenience macro 
+          <function>gst_buffer_get_my_example_meta ()</function> that simply
+          finds and returns the metadata with our new API.
+        </para>
+        <para>
+          Next let's have a look at how the
+          <function>my_example_meta_api_get_type ()</function> function is
+          implemented in the <filename>my-example-meta.c</filename> file.
+        </para>
+        <programlisting>
+<![CDATA[
+#include "my-example-meta.h"
+
+GType
+my_example_meta_api_get_type (void)
+{
+  static volatile GType type;
+  static const gchar *tags[] = { "foo", "bar", NULL };
+
+  if (g_once_init_enter (&type)) {
+    GType _type = gst_meta_api_type_register ("MyExampleMetaAPI", tags);
+    g_once_init_leave (&type, _type);
+  }
+  return type;
+}
+]]>
+        </programlisting>
+        <para>
+          As you can see, it simply uses the
+          <function>gst_meta_api_type_register ()</function> function to
+          register a name for the api and some tags. The result is a
+          new pointer GType that defines the newly registered API.
+        </para>
+      </sect3>
+
+      <sect3 id="section-allocation-meta-impl" xreflabel="GstMeta-impl">
+        <title>Implementing a metadata API</title>
+        <para>
+          Next we can make an implementation for a registered metadata
+          API GType. The implementation detail of a metadata API
+          are kept in a <classname>GstMetaInfo</classname> structure
+          that you will make available to the users of your metadata
+          API implementation with a <function>my_example_meta_get_info ()</function>
+          function and a convenience <function>MY_EXAMPLE_META_INFO</function>
+          macro. You will also make a method to add your metadata
+          implementation to a <classname>GstBuffer</classname>.
+          Your <filename>my-example-meta.h</filename> header file will
+          need thse additions:
+        </para>
+        <programlisting>
+<![CDATA[
+[...]
+
+/* implementation */
+const GstMetaInfo *my_example_meta_get_info (void);
+#define MY_EXAMPLE_META_INFO (my_example_meta_get_info())
+
+MyExampleMeta * gst_buffer_add_my_example_meta (GstBuffer      *buffer,
+                                                gint            age,
+                                                const gchar    *name);
+]]>
+        </programlisting>
+        <para>
+          Let's have a look at how these functions are
+          implemented in the <filename>my-example-meta.c</filename> file.
+        </para>
+        <programlisting>
+<![CDATA[
+[...]
+
+static gboolean
+my_example_meta_init (GstMeta * meta, gpointer params, GstBuffer * buffer)
+{
+  MyExampleMeta *emeta = (MyExampleMeta *) meta;
+
+  emeta->age = 0;
+  emeta->name = NULL;
+
+  return TRUE;
+}
+
+static gboolean
+my_example_meta_transform (GstBuffer * transbuf, GstMeta * meta,
+    GstBuffer * buffer, GQuark type, gpointer data)
+{
+  MyExampleMeta *emeta = (MyExampleMeta *) meta;
+
+  /* we always copy no matter what transform */
+  gst_buffer_add_my_example_meta (transbuf, emeta->age, emeta->name);
+
+  return TRUE;
+}
+
+static void
+my_example_meta_free (GstMeta * meta, GstBuffer * buffer)
+{
+  MyExampleMeta *emeta = (MyExampleMeta *) meta;
+
+  g_free (emeta->name)
+  emeta->name = NULL;
+}
+
+const GstMetaInfo *
+my_example_meta_get_info (void)
+{
+  static const GstMetaInfo *meta_info = NULL;
+
+  if (g_once_init_enter (&meta_info)) {
+    const GstMetaInfo *mi = gst_meta_register (MY_EXAMPLE_META_API_TYPE,
+        "MyExampleMeta",
+        sizeof (MyExampleMeta),
+        my_example_meta_init,
+        my_example_meta_free,
+        my_example_meta_transform);
+    g_once_init_leave (&meta_info, mi);
+  }
+  return meta_info;
+}
+
+MyExampleMeta *
+gst_buffer_add_my_example_meta (GstBuffer   *buffer,
+                                gint         age,
+                                const gchar *name)
+{
+  MyExampleMeta *meta;
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);
+
+  meta = (MyExampleMeta *) gst_buffer_add_meta (buffer,
+      MY_EXAMPLE_META_INFO, NULL);
+
+  meta->age = age;
+  meta->name = g_strdup (name);
+
+  return meta;
+}
+]]>
+        </programlisting>
+        <para>
+          <function>gst_meta_register ()</function> registers the implementation
+          details, like the API that you implement and the size of the
+          metadata structure along with methods to initialize and free the
+          memory area. You can also implement a transform function that will
+          be called when a certain transformation (identified by the quark and
+          quark specific data) is performed on a buffer.
+        </para>
+        <para>
+          Lastly, you implement a <function>gst_buffer_add_*_meta()</function>
+          that adds the metadata implementation to a buffer and sets the
+          values of the metadata.
+        </para>
+      </sect3>
+    </sect2>
+
+  </sect1>
+
+  <sect1 id="section-allocation-bufferpool" xreflabel="GstBufferPool">
+    <title>GstBufferPool</title>
+    <para>
+      The <classname>GstBufferPool</classname> object provides a convenient
+      base class for managing lists of reusable buffers. Essential for this
+      object is that all the buffers have the same properties such as size,
+      padding, metadata and alignment.
+    </para>
+    <para>
+      A bufferpool object can be configured to manage a minimum and maximum
+      amount of buffers of a specific size. A bufferpool can also be
+      configured to use a specific <classname>GstAllocator</classname> for
+      the memory of the buffers. There is support in the bufferpool to enable
+      bufferpool specific options, such as adding <classname>GstMeta</classname>
+      to the buffers in the pool or such as enabling specific padding on
+      the memory in the buffers.
+    </para>
+    <para>
+      A Bufferpool can be inactivate and active. In the inactive state,
+      you can configure the pool. In the active state, you can't change
+      the configuration anymore but you can acquire and release buffers
+      from/to the pool.
+    </para>
+    <para>
+      In the following sections we take a look at how you can use
+      a bufferpool. 
+    </para>
+
+    <sect2 id="section-allocation-pool-ex" xreflabel="GstBufferPool-ex">
+      <title>GstBufferPool API example</title>
+      <para>
+        Many different bufferpool implementations can exist; they are all
+        subclasses of the base class <classname>GstBufferPool</classname>.
+        For this example, we will assume we somehow have access to a
+        bufferpool, either because we created it ourselves or because
+        we were given one as a result of the ALLOCATION query as we will
+        see below.
+      </para>
+      <para>
+        The bufferpool is initially in the inactive state so that we can
+        configure it. Trying to configure a bufferpool that is not in the
+        inactive state will fail. Likewise, trying to activate a bufferpool
+        that is not configured will fail.
+      </para>
+      <programlisting>
+<![CDATA[
+  GstStructure *config;
+
+[...]
+
+  /* get config structure */
+  config = gst_buffer_pool_get_config (pool);
+
+  /* set caps, size, minimum and maximum buffers in the pool */
+  gst_buffer_pool_config_set_params (config, caps, size, min, max);
+
+  /* configure allocator and parameters */
+  gst_buffer_pool_config_set_allocator (config, allocator, &params);
+
+  /* store the updated configuration again */
+  gst_buffer_pool_set_config (pool, config);
+
+[...]
+]]>
+      </programlisting>
+      <para>
+        The configuration of the bufferpool is maintained in a generic
+        <classname>GstStructure</classname> that can be obtained with
+        <function>gst_buffer_pool_get_config()</function>. Convenience
+        methods exist to get and set the configuration options in this
+        structure. After updating the structure, it is set as the current
+        configuration in the bufferpool again with
+        <function>gst_buffer_pool_set_config()</function>.
+      </para>
+      <para>
+        The following options can be configured on a bufferpool:
+      </para>
+      <itemizedlist mark="opencircle">
+        <listitem>
+          <para>
+            The caps of the buffers to allocate.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The size of the buffers. This is the suggested size of the
+            buffers in the pool. The pool might decide to allocate larger
+            buffers to add padding.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The minimum and maximum amount of buffers in the pool. When
+            minimum is set to > 0, the bufferpool will pre-allocate this
+            amount of buffers. When maximum is not 0, the bufferpool
+            will allocate up to maximum amount of buffers.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            The allocator and parameters to use. Some bufferpools might
+            ignore the allocator and use its internal one.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Other arbitrary bufferpool options identified with a string.
+            a bufferpool lists the supported options with
+            <function>gst_buffer_pool_get_options()</function> and you 
+            can ask if an option is supported with
+            <function>gst_buffer_pool_has_option()</function>. The option
+            can be enabled by adding it to the configuration structure
+            with <function>gst_buffer_pool_config_add_option ()</function>.
+            These options are used to enable things like letting the
+            pool set metadata on the buffers or to add extra configuration
+            options for padding, for example.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        After the configuration is set on the bufferpool, the pool can
+        be activated with
+        <function>gst_buffer_pool_set_active (pool, TRUE)</function>. From
+        that point on you can use
+        <function>gst_buffer_pool_acquire_buffer ()</function> to retrieve
+        a buffer from the pool, like this:
+      </para>
+      <programlisting>
+<![CDATA[
+  [...]
+
+  GstFlowReturn ret;
+  GstBuffer *buffer;
+
+  ret = gst_buffer_pool_acquire_buffer (pool, &buffer, NULL);
+  if (G_UNLIKELY (ret != GST_FLOW_OK))
+    goto pool_failed;
+
+  [...]
+]]>
+      </programlisting>
+      <para>
+        It is important to check the return value of the acquire function
+        because it is possible that it fails: When your
+        element shuts down, it will deactivate the bufferpool and then
+        all calls to acquire will return GST_FLOW_FLUSHNG.
+      </para>
+      <para>
+        All buffers that are acquired from the pool will have their pool
+        member set to the original pool. When the last ref is decremented
+        on the buffer, &GStreamer; will automatically call
+        <function>gst_buffer_pool_release_buffer()</function> to release
+        the buffer back to the pool. You (or any other downstream element)
+        don't need to know if a buffer came from a pool, you can just
+        unref it.
+      </para>
+    </sect2>
+
+    <sect2 id="section-allocation-pool-impl" xreflabel="GstBufferPool-impl">
+      <title>Implementing a new GstBufferPool</title>
+      <para>
+        WRITEME
+      </para>
+    </sect2>
+
+  </sect1>
+
+  <sect1 id="section-allocation-query" xreflabel="GST_QUERY_ALLOCATION">
+    <title>GST_QUERY_ALLOCATION</title>
+    <para>
+      The ALLOCATION query is used to negotiate
+      <classname>GstMeta</classname>, <classname>GstBufferPool</classname>
+      and <classname>GstAllocator</classname> between elements. Negotiation
+      of the allocation strategy is always initiated and decided by a srcpad
+      after it has negotiated a format and before it decides to push buffers.
+      A sinkpad can suggest an allocation strategy but it is ultimately the
+      source pad that will decide based on the suggestions of the downstream
+      sink pad.
+    </para>
+    <para>
+      The source pad will do a GST_QUERY_ALLOCATION with the negotiated caps
+      as a parameter. This is needed so that the downstream element knows
+      what media type is being handled. A downstream sink pad can answer the
+      allocation query with the following results:
+    </para>
+    <itemizedlist mark="opencircle">
+      <listitem>
+        <para>
+          An array of possible <classname>GstBufferPool</classname> suggestions
+          with suggested size, minimum and maximum amount of buffers.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          An array of GstAllocator objects along with suggested allocation
+          parameters such as flags, prefix, alignment and padding. These
+          allocators can also be configured in a bufferpool when this is
+          supported by the bufferpool.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          An array of supported <classname>GstMeta</classname> implementations
+          along with metadata specific parameters.
+          It is important that the upstream element knows what kind of
+          metadata is supported downstream before it places that metadata
+          on buffers.
+        </para>
+      </listitem>
+    </itemizedlist>
+    <para>
+      When the GST_QUERY_ALLOCATION returns, the source pad will select
+      from the available bufferpools, allocators and metadata how it will
+      allocate buffers.
+    </para>
+
+    <sect2 id="section-allocation-query-ex" xreflabel="Allocation-ex">
+      <title>ALLOCATION query example</title>
+      <para>
+        Below is an example of the ALLOCATION query.
+      </para>
+      <programlisting>
+<![CDATA[
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+  GstCaps *caps;
+  GstQuery *query;
+  GstStructure *structure;
+  GstBufferPool *pool;
+  GstStructure *config;
+  guint size, min, max;
+
+[...]
+
+  /* find a pool for the negotiated caps now */
+  query = gst_query_new_allocation (caps, TRUE);
+
+  if (!gst_pad_peer_query (scope->srcpad, query)) {
+    /* query failed, not a problem, we use the query defaults */
+  }
+
+  if (gst_query_get_n_allocation_pools (query) > 0) {
+    /* we got configuration from our peer, parse them */
+    gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+  } else {
+    pool = NULL;
+    size = 0;
+    min = max = 0;
+  }
+
+  if (pool == NULL) {
+    /* we did not get a pool, make one ourselves then */
+    pool = gst_video_buffer_pool_new ();
+  }
+
+  config = gst_buffer_pool_get_config (pool);
+  gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+  gst_buffer_pool_config_set_params (config, caps, size, min, max);
+  gst_buffer_pool_set_config (pool, config);
+
+  /* and activate */
+  gst_buffer_pool_set_active (pool, TRUE);
+
+[...]
+]]>
+      </programlisting>
+      <para>
+        This particular implementation will make a custom
+        <classname>GstVideoBufferPool</classname> object that is specialized
+        in allocating video buffers. You can also enable the pool to
+        put <classname>GstVideoMeta</classname> metadata on the buffers from
+        the pool doing
+        <function>gst_buffer_pool_config_add_option (config,
+          GST_BUFFER_POOL_OPTION_VIDEO_META)</function>.
+      </para>
+    </sect2>
+
+    <sect2 id="section-allocation-query-base" xreflabel="Allocation-base">
+      <title>The ALLOCATION query in base classes</title>
+      <para>
+        In many baseclasses you will see the following virtual methods for
+        influencing the allocation strategy:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            <function>propose_allocation ()</function> should suggest
+            allocation parameters for the upstream element.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            <function>decide_allocation ()</function> should decide the
+            allocation parameters from the suggestions received from
+            downstream.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        Implementors of these methods should modify the given
+        <classname>GstQuery</classname> object by updating the pool options
+        and allocation options.
+      </para>
+    </sect2>
+  </sect1>
+</chapter>
index 4f8ae39b44c4839f1b571377607a58237ed56841..89c1f29e4e34c1b7dba7284033b1e6ad909a349c 100644 (file)
@@ -7,83 +7,80 @@
     synchronization mechanism.
   </para>
 
-  <sect1 id="section-clock-time-types" xreflabel="Types of time"> 
-    <title> Types of time </title>
-
-    <para>
-      There are two kinds of time in GStreamer. <emphasis
-       role="strong">Clock time</emphasis> is an absolute time. By contrast,
-      <emphasis role="strong">element time</emphasis> is the relative time,
-      usually to the start of the current media stream. The element time
-      represents the time that should have a media sample that is being
-      processed by the element at this time. The element time is calculated by
-      adding an offset to the clock time.
-    </para>
-  </sect1>
   <sect1 id="section-clocks" xreflabel="Clocks">
     <title>Clocks</title>
     <para>
-      GStreamer can use different clocks. Though the system time can be used
-      as a clock, soundcards and other devices provides a better time source. For
-      this reason some elements provide a clock. The method
-      <function>get_clock</function> is implemented in elements that provide
-      one.
+      Time in &GStreamer; is defined as the value returned from a particular 
+      <classname>GstClock</classname> object from the method
+      <function>gst_clock_get_time ()</function>. 
+    </para>
+    <para>
+      In a typical computer, there are many sources that can be used as a
+      time source, e.g., the system time, soundcards, CPU performance
+      counters, ... For this reason, there are many
+      <classname>GstClock</classname> implementations available in &GStreamer;.
+      The clock time doesn't always start from 0 or from some known value.
+      Some clocks start counting from some known start date, other clocks start
+      counting since last reboot, etc...
     </para>
-    
     <para>
       As clocks return an absolute measure of time, they are not usually used
-      directly. Instead, a reference to a clock is stored in any element that needs
-      it, and it is used internally by GStreamer to calculate the element time.
+      directly. Instead, differences between two clock times are used to
+      measure elapsed time according to a clock.
     </para>
   </sect1>
-  
-  <sect1 id="section-time-data-flow" xreflabel="Flow of data between elements
-    and time">
-    <title>
-      Flow of data between elements and time
-    </title>
+
+  <sect1 id="section-clock-time-types" xreflabel="Clock running-time"> 
+    <title> Clock running-time </title>
     <para>
-      Now we will see how time information travels the pipeline in different states.
+      A clock returns the <emphasis role="strong">absolute-time</emphasis>
+      according to that clock with <function>gst_clock_get_time ()</function>.
+      From the absolute-time is a <emphasis role="strong">running-time</emphasis>
+      calculated, which is simply the difference between a previous snapshot
+      of the absolute-time called the <emphasis role="strong">base-time</emphasis>.
+      So:
+    </para>
+    <para>
+      running-time = absolute-time - base-time
     </para>
-    
     <para>
-      The pipeline starts playing.
-      The source element typically knows the time of each sample. 
-      <footnote> 
-       <para>
-         Sometimes it
-         is a parser element the one that knows the time, for instance if a pipeline
-         contains a filesrc element connected to a MPEG decoder element, the former 
-         is the one that knows the time of each sample, because the knowledge of
-         when to play each sample is embedded in the MPEG format. In this case this
-         element will be regarded as the source element for this discussion.
-       </para>
-      </footnote> 
-      First, the source element sends a newsegment event. This event carries information
-      about the current relative time of the next sample. This relative time is
-      arbitrary, but it must be consistent with the timestamp that will be
-      placed in buffers. It is expected to be the relative time to the start
-      of the media stream, or whatever makes sense in the case of each media.
-      When receiving it, the other elements adjust their offset of the element time so that this
-      time matches the time written in the event.
+      A &GStreamer; <classname>GstPipeline</classname> object maintains a 
+      <classname>GstClock</classname> object and a base-time when it goes
+      to the PLAYING state.  The pipeline gives a handle to the selected
+      <classname>GstClock</classname> to each element in the pipeline along
+      with selected base-time. The pipeline will select a base-time in such
+      a way that the running-time reflects the total time spent in the
+      PLAYING state. As a result, when the pipeline is PAUSED, the
+      running-time stands still.
     </para>
+    <para>
+      Because all objects in the pipeline have the same clock and base-time,
+      they can thus all calculate the running-time according to the pipeline
+      clock.
+    </para>
+  </sect1>
 
+  <sect1 id="section-buffer-time-types" xreflabel="Buffer running-time"> 
+    <title> Buffer running-time </title>
     <para>
-      Then the source element sends media samples in buffers. This element places a
-      timestamp in each buffer saying when the sample should be played. When the
-      buffer reaches the sink pad of the last element, this element compares the
-      current element time with the timestamp of the buffer. If the timestamp is
-      higher or equal it plays the buffer, otherwise it waits until the time to
-      place the buffer arrives with <function>gst_element_wait()</function>.
+      To calculate a buffer running-time, we need a buffer timestamp and
+      the SEGMENT event that preceeded the buffer. First we can convert
+      the SEGMENT event into a <classname>GstSegment</classname> object
+      and then we can use the
+      <function>gst_segment_to_running_time ()</function> function to
+      perform the calculation of the buffer running-time.
     </para>
-    
-    
     <para>
-      If the stream is seeked, the next samples sent will have a timestamp that
-      is not adjusted with the element time. Therefore, the source element must
-      send a newsegment event.
+      Synchronization is now a matter of making sure that a buffer with a
+      certain running-time is played when the clock reaches the same
+      running-time. Usually this task is done by sink elements. Sink also
+      have to take into account the latency configured in the pipeline and
+      add this to the buffer running-time before synchronizing to the
+      pipeline clock.
     </para>
   </sect1>
+  
+  
   <sect1 id="section-clock-obligations-of-each-element" xreflabel="Obligations
     of each element">
     <title>
     </para>
     
     <sect2>
-      <title>Source elements </title>
+      <title>Non-live source elements </title>
+      <para>
+        Non-live source elements must place a timestamp in each buffer that
+        they deliver when this is possible.  They must choose the timestamps
+        and the values of the SEGMENT event in such a way that the
+        running-time of the buffer starts from 0.
+      </para>
+      <para>
+        Some sources, such as filesrc, is not able to generate timestamps
+        on all buffers. It can and must however create a timestamp on the
+        first buffer (with a running-time of 0).
+      </para>
+      <para>
+        The source then pushes out the SEGMENT event followed by the
+        timestamped buffers.
+      </para>
+    </sect2>
+
+    <sect2>
+      <title>Live source elements </title>
+      <para>
+        Live source elements must place a timestamp in each buffer that
+        they deliver. They must choose the timestamps and the values of the
+        SEGMENT event in such a way that the running-time of the buffer
+        matches exactly the running-time of the pipeline clock when the first 
+        byte in the buffer was captured.
+      </para>
+    </sect2>
+
+    <sect2>
+      <title>Parser/Decoder/Encoder elements </title>
       <para>
-       Source elements (or parsers of formats that provide notion of time, such
-       as MPEG, as explained above) must place a timestamp in each buffer that
-       they deliver. The origin of the time used is arbitrary, but it must
-       match the time delivered in the newsegment event (see below).
-       However, it is expected that the origin is the origin of the media
-       stream.
+        Parser/Decoder elements must use the incomming timestamps and transfer
+        those to the resulting output buffers. They are allowed to interpolate
+        or reconstruct timestamps on missing input buffers when they can.
       </para>
+    </sect2>
+
+    <sect2>
+      <title>Demuxer elements </title>
       <para>
-       In order to initialize the element time of the rest of the pipeline, a
-       source element must send a newsegment event before starting to play.
-       In addition, after seeking, a newsegment event must be sent, because
-       the timestamp of the next element does not match the element time of the
-       rest of the pipeline.
+        Demuxer elements can usually set the timestamps stored inside the media
+        file onto the outgoing buffers. They need to make sure that outgoing
+        buffers that are to be played at the same time have the same
+        running-time. Demuxers also need to take into account the incomming
+        timestamps on buffers and use that to calculate an offset on the outgoing
+        buffer timestamps.
+      </para>
+    </sect2>
+
+    <sect2>
+      <title>Muxer elements</title>
+      <para>
+        Muxer elements should use the incomming buffer running-time to mux the
+        different streams together. They should copy the incomming running-time
+        to the outgoing buffers.
       </para>
-      
     </sect2>
     
-    <sect2> <title> Sink elements </title>
+    <sect2>
+      <title>Sink elements</title>
       <para>
        If the element is intended to emit samples at a specific time (real time
        playing), the element should require a clock, and thus implement the
        method <function>set_clock</function>.
       </para>
-      
       <para>
-       In addition, before playing each sample, if the current element time is
-       less than the timestamp in the sample, it wait until the current time
-       arrives should call <function>gst_element_wait()</function>
-       <footnote>
-         <para>
-           With some schedulers, <function>gst_element_wait()</function> 
-           blocks the pipeline. For instance, if there is one audio sink element
-           and one video sink element, while the audio element is waiting for a
-           sample the video element cannot play other sample. This behaviour is
-           under discussion, and might change in a future release.
-         </para>
-       </footnote>
+        The sink should then make sure that the sample with running-time is played
+        exactly when the pipeline clock reaches that running-time + latency.
+        Some elements might use the clock API such as
+        <function>gst_clock_id_wait()</function>
+        to perform this action. Other sinks might need to use other means of
+        scheduling timely playback of the data.
       </para>
     </sect2>
   </sect1>
index 70b4694bbc4286b3a11d2e316487c81cb0aeaf9d..8a196c23820735464fdca3df1d9ef954924a74ae 100644 (file)
@@ -3,6 +3,9 @@
 
 <chapter id="chapter-dparams">
   <title>Supporting Dynamic Parameters</title>
+  <para>
+    Warning, this part describes 0.10 and is outdated.
+  </para>
   <para>
     Sometimes object properties are not powerful enough to control the
     parameters that affect the behaviour of your element.
index b755452a668a4a5adec7842f419191d13ae043fa..997d5b36432a7b79bcc1d552f4fc419c40aa392b 100644 (file)
       instantly, possibly not in the same thread as the streaming thread that
       is processing the buffers, skipping ahead of buffers being processed
       or queued in the pipeline). The most common downstream events
-      (NEWSEGMENT, EOS, TAG) are all serialised with the buffer flow.
+      (SEGMENT, CAPS, TAG, EOS) are all serialised with the buffer flow.
     </para>
     <para>
       Here is a typical event function:
     </para>
     <programlisting>
 static gboolean
-gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
+gst_my_filter_sink_event (GstPad  *pad, GstObject * parent, GstEvent * event)
 {
   GstMyFilter *filter;
   gboolean ret;
 
-  filter = GST_MY_FILTER (gst_pad_get_parent (pad));
+  filter = GST_MY_FILTER (parent);
   ...
 
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_NEWSEGMENT:
+    case GST_EVENT_SEGMENT:
       /* maybe save and/or update the current segment (e.g. for output
        * clipping) or convert the event into one in a different format
-       * (e.g. BYTES to TIME) or drop it and set a flag to send a newsegment
+       * (e.g. BYTES to TIME) or drop it and set a flag to send a segment
        * event in a different format later */
       ret = gst_pad_push_event (filter-&gt;src_pad, event);
       break;
@@ -54,19 +54,18 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
       ret = gst_pad_push_event (filter-&gt;src_pad, event);
       break;      
     default:
-      ret = gst_pad_event_default (pad, event);
+      ret = gst_pad_event_default (pad, parent, event);
       break;
   }
 
   ...
-  gst_object_unref (filter);
   return ret;
 }
     </programlisting>
   <para>
     If your element is chain-based, you will almost always have to implement
     a sink event function, since that is how you are notified about
-    new segments and the end of the stream.
+    segments, caps and the end of the stream.
   </para>
   <para>
     If your element is exclusively loop-based, you may or may not want a
@@ -92,18 +91,19 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
       will then in turn generate an upstream seek event.
     </para>
     <para>
-      The most common upstream events are seek events and Quality-of-Service
-      (QoS) events.
+      The most common upstream events are seek events, Quality-of-Service
+      (QoS) and reconfigure events.
     </para>
     <para>
       An upstream event can be sent using the
       <function>gst_pad_send_event</function> function. This
       function simply call the default event handler of that pad. The default
       event handler of pads is <function>gst_pad_event_default</function>, and
-      it basically sends the event to the peer pad. So upstream events always
-      arrive on the src pad of your element and are handled by the default event
-      handler except if you override that handler to handle it yourself. There
-      are some specific cases where you have to do that :
+      it basically sends the event to the peer of the internally linked pad.
+      So upstream events always arrive on the src pad of your element and are
+      handled by the default event handler except if you override that handler
+      to handle it yourself. There are some specific cases where you have to
+      do that :
     </para>
     <itemizedlist mark="opencircle">
       <listitem>
@@ -130,8 +130,9 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
     <itemizedlist mark="opencircle">
       <listitem>
         <para>
-          Always forward events you won't handle upstream using the default 
-          <function>gst_pad_event_default</function> method.
+          Always handle events you won't handle using the default 
+          <function>gst_pad_event_default</function> method. This method will
+          depending on the event, forward the event or drop it. 
         </para>
       </listitem>
       <listitem>
@@ -152,10 +153,7 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
         <para>
           Remember that the event handler might be called from a different
           thread than the streaming thread, so make sure you use
-          appropriate locking everywhere and at the beginning of the function
-          obtain a reference to your element via the
-          <function>gst_pad_get_parent()</function> (and release it again at
-          the end of the function with <function>gst_object_unref ()</function>.
+          appropriate locking everywhere.
         </para>
       </listitem>
     </itemizedlist>
@@ -173,13 +171,18 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
       In this chapter, we will discuss the following events:
     </para>
     <itemizedlist>
+      <listitem><para><xref linkend="section-events-stream-start"/></para></listitem>
+      <listitem><para><xref linkend="section-events-caps"/></para></listitem>
+      <listitem><para><xref linkend="section-events-segment"/></para></listitem>
+      <listitem><para><xref linkend="section-events-tag"/></para></listitem>
       <listitem><para><xref linkend="section-events-eos"/></para></listitem>
+      <listitem><para><xref linkend="section-events-toc"/></para></listitem>
+      <listitem><para><xref linkend="section-events-gap"/></para></listitem>
       <listitem><para><xref linkend="section-events-flush-start"/></para></listitem>
       <listitem><para><xref linkend="section-events-flush-stop"/></para></listitem>
-      <listitem><para><xref linkend="section-events-newsegment"/></para></listitem>
+      <listitem><para><xref linkend="section-events-qos"/></para></listitem>
       <listitem><para><xref linkend="section-events-seek"/></para></listitem>
       <listitem><para><xref linkend="section-events-nav"/></para></listitem>
-      <listitem><para><xref linkend="section-events-tag"/></para></listitem>
     </itemizedlist>
     <para>
       For more comprehensive information about events and how they should be
@@ -187,6 +190,90 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
       design documentation. This section only gives a general overview.      
     </para>
 
+    <sect2 id="section-events-stream-start" xreflabel="Stream Start">
+      <title>Stream Start</title>
+      <para>
+        WRITEME
+      </para>
+    </sect2>
+
+    <sect2 id="section-events-caps" xreflabel="Caps">
+      <title>Caps</title>
+      <para>
+        The CAPS event contains the format description of the following
+        buffers. See <xref linkend="chapter-negotiation"/> for more
+        information about negotiation.
+      </para>
+    </sect2>
+
+    <sect2 id="section-events-segment" xreflabel="Segment">
+      <title>Segment</title>
+      <para>
+        A segment event is sent downstream to announce the range of valid
+        timestamps in the stream and how they should be transformed into
+        running-time and stream-time. A segment event must always be sent
+        before the first buffer of data and after a flush (see above).
+      </para>
+      <para>
+        The first segment event is created by the element driving the 
+        pipeline, like a source operating in push-mode or a demuxer/decoder
+        operating pull-based. This segment event then travels down the
+        pipeline and may be transformed on the way (a decoder, for example,
+        might receive a segment event in BYTES format and might transform
+        this into a segment event in TIMES format based on the average
+        bitrate).
+      </para>
+      <para>
+        Depending on the element type, the event can simply be forwarded using
+        <function>gst_pad_event_default ()</function>, or it should be parsed
+        and a modified event should be sent on. The last is true for demuxers,
+        which generally have a byte-to-time conversion concept. Their input
+        is usually byte-based, so the incoming event will have an offset in
+        byte units (<symbol>GST_FORMAT_BYTES</symbol>), too. Elements
+        downstream, however, expect segment events in time units, so that
+        it can be used to synchronize against the pipeline clock. Therefore,
+        demuxers and similar elements should not forward the event, but parse
+        it, free it and send a segment event (in time units,
+        <symbol>GST_FORMAT_TIME</symbol>) further downstream.
+      </para>
+      <para>
+        The segment event is created using the function
+        <function>gst_event_new_segment ()</function>. See the API
+        reference and design document for details about its parameters. 
+      </para>
+      <para>
+        Elements parsing this event can use gst_event_parse_segment()
+        to extract the event details. Elements may find the GstSegment
+        API useful to keep track of the current segment (if they want to use
+        it for output clipping, for example).
+      </para>
+    </sect2>
+
+    <sect2 id="section-events-tag" xreflabel="Tag (metadata)">
+      <title>Tag (metadata)</title>
+      <para>
+        Tagging events are being sent downstream to indicate the tags as parsed
+        from the stream data. This is currently used to preserve tags during
+        stream transcoding from one format to the other. Tags are discussed
+        extensively in <xref linkend="chapter-advanced-tagging"/>. Most
+        elements will simply forward the event by calling
+        <function>gst_pad_event_default ()</function>.
+      </para>
+      <para>
+        The tag event is created using the function
+        <function>gst_event_new_tag ()</function>, but more often elements will
+        send a tag event downstream that will be converted into a message
+        on the bus by sink elements.
+        All of these functions require a filled-in taglist as
+        argument, which they will take ownership of.
+      </para>
+      <para>
+        Elements parsing this event can use the function
+        <function>gst_event_parse_tag ()</function> to acquire the
+        taglist that the event contains.
+      </para>
+    </sect2>
+
     <sect2 id="section-events-eos" xreflabel="End of Stream (EOS)">
       <title>End of Stream (EOS)</title>
       <para>
@@ -217,16 +304,31 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
         on the bus depending on the mode of operation). If you are implementing
         your own source element, you also do not need to ever manually send
         an EOS event, you should also just return GST_FLOW_EOS in
-        your create function (assuming your element derives from GstBaseSrc
-        or GstPushSrc).
+        your create or fill function (assuming your element derives from
+        GstBaseSrc or GstPushSrc).
+      </para>
+    </sect2>
+
+    <sect2 id="section-events-toc" xreflabel="Table Of Contents">
+      <title>Table Of Contents</title>
+      <para>
+        WRITEME
+      </para>
+    </sect2>
+
+    <sect2 id="section-events-gap" xreflabel="Gap">
+      <title>Gap</title>
+      <para>
+        WRITEME
       </para>
     </sect2>
 
     <sect2 id="section-events-flush-start" xreflabel="Flush Start">
       <title>Flush Start</title>
       <para>
-        The flush start event is sent downstream if all buffers and caches
-        in the pipeline should be emptied. <quote>Queue</quote> elements will
+        The flush start event is sent downstream (in push mode) or upstream
+        (in pull mode) if all buffers and caches in the pipeline should be
+        emptied. <quote>Queue</quote> elements will
         empty their internal list of buffers when they receive this event, for
         example. File sink elements (e.g. <quote>filesink</quote>) will flush
         the kernel-to-disk cache (<function>fdatasync ()</function> or
@@ -259,7 +361,7 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
         The flush-stop event is sent by an element driving the pipeline
         after a flush-start and tells pads and elements downstream that
         they should accept events and buffers again (there will be at
-        least a NEWSEGMENT event before any buffers first though).
+        least a SEGMENT event before any buffers first though).
       </para>
       <para>
         If your element keeps temporary caches of stream data, it should
@@ -268,58 +370,19 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
       </para>
       <para>
         The flush-stop event is created with
-        <function>gst_event_new_flush_stop ()</function>. Like the EOS event,
-        it has no properties.
+        <function>gst_event_new_flush_stop ()</function>. It has one
+        parameter that controls if the running-time of the pipeline should
+        be reset to 0 or not. Normally aftera flushing seek, the
+        running_time is set back to 0.
       </para>
     </sect2>
 
-    <sect2 id="section-events-newsegment" xreflabel="New Segment">
-      <title>New Segment</title>
-      <para>
-        A new segment event is sent downstream to either announce a new
-        segment of data in the data stream or to update the current segment
-        with new values. A new segment event must always be sent before the
-        first buffer of data and after a flush (see above).
-      </para>
-      <para>
-        The first new segment event is created by the element driving the 
-        pipeline, like a source operating in push-mode or a demuxer/decoder
-        operating pull-based. This new segment event then travels down the
-        pipeline and may be transformed on the way (a decoder, for example,
-        might receive a new-segment event in BYTES format and might transform
-        this into a new-segment event in TIMES format based on the average
-        bitrate).
-      </para>
+    <sect2 id="section-events-qos" xreflabel="Quality Of Service (QOS)">
+      <title>Quality Of Service (QOS)</title>
       <para>
-        New segment events may also be used to indicate 'gaps' in the stream,
-        like in a subtitle stream for example where there may not be any
-        data at all for a considerable amount of (stream) time. This is done
-        by updating the segment start of the current segment (see the design
-        documentation for more details).
-      </para>
-      <para>
-        Depending on the element type, the event can simply be forwarded using
-        <function>gst_pad_event_default ()</function>, or it should be parsed
-        and a modified event should be sent on. The last is true for demuxers,
-        which generally have a byte-to-time conversion concept. Their input
-        is usually byte-based, so the incoming event will have an offset in
-        byte units (<symbol>GST_FORMAT_BYTES</symbol>), too. Elements
-        downstream, however, expect new segment events in time units, so that
-        it can be used to update the pipeline clock. Therefore, demuxers and
-        similar elements should not forward the event, but parse it, free it
-        and send a new newsegment event (in time units,
-        <symbol>GST_FORMAT_TIME</symbol>) further downstream.
-      </para>
-      <para>
-        The newsegment event is created using the function
-        <function>gst_event_new_new_segment ()</function>. See the API
-        reference and design document for details about its parameters. 
-      </para>
-      <para>
-        Elements parsing this event can use gst_event_parse_new_segment_full()
-        to extract the event details. Elements may find the GstSegment
-        API useful to keep track of the current segment (if they want to use
-        it for output clipping, for example).
+        The QOS event contains a report about the current real-time
+        performance of the stream. See more info in 
+        <xref linkend="chapter-advanced-qos"/>.
       </para>
     </sect2>
 
@@ -330,9 +393,9 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
         This new position can be set in several formats (time, bytes or
         <quote>default units</quote> [a term indicating frames for video,
         channel-independent samples for audio, etc.]). Seeking can be done with
-        respect to the end-of-file, start-of-file or current position, and
+        respect to the end-of-file or start-of-file, and
         usually happens in upstream direction (downstream seeking is done by
-        sending a NEWSEGMENT event with the appropriate offsets for elements
+        sending a SEGMENT event with the appropriate offsets for elements
         that support that, like filesink).
       </para>
       <para>
@@ -347,10 +410,10 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
         Seek events are built up using positions in specified formats (time,
         bytes, units). They are created using the function
         <function>gst_event_new_seek ()</function>. Note that many plugins do
-        not support seeking from the end of the stream or from the current
-        position. An element not driving the pipeline and forwarding a seek
+        not support seeking from the end of the stream.
+        An element not driving the pipeline and forwarding a seek
         request should not assume that the seek succeeded or actually happened,
-        it should operate based on the NEWSEGMENT events it receives.
+        it should operate based on the SEGMENT events it receives.
       </para>
       <para>
         Elements parsing this event can do this using
@@ -375,30 +438,5 @@ gst_my_filter_sink_event (GstPad  *pad, GstEvent * event)
       </para>
     </sect2>
 
-    <sect2 id="section-events-tag" xreflabel="Tag (metadata)">
-      <title>Tag (metadata)</title>
-      <para>
-        Tagging events are being sent downstream to indicate the tags as parsed
-        from the stream data. This is currently used to preserve tags during
-        stream transcoding from one format to the other. Tags are discussed
-        extensively in <xref linkend="chapter-advanced-tagging"/>. Most
-        elements will simply forward the event by calling
-        <function>gst_pad_event_default ()</function>.
-      </para>
-      <para>
-        The tag event is created using the function
-        <function>gst_event_new_tag ()</function>, but more often elements will
-        use either the <function>gst_element_found_tags ()</function> function
-        or the <function>gst_element_found_tags_for_pad ()</function>, which
-        will do both: post a tag message on the bus and send a tag event
-        downstream. All of these functions require a filled-in taglist as
-        argument, which they will take ownership of.
-      </para>
-      <para>
-        Elements parsing this event can use the function
-        <function>gst_event_parse_tag ()</function> to acquire the
-        taglist that the event contains.
-      </para>
-    </sect2>
   </sect1>
 </chapter>
index 0fb959e6522d6cec5f2cff72b4683e108495d922..7be34b67878450c3e084133fdad54c8b885d6de0 100644 (file)
     to achieve this. The basis of this all is the glib
     <classname>GTypeInterface</classname> type. For each case where we think
     it's useful, we've created interfaces which can be implemented by elements
-    at their own will. We've also created a small extension to
-    <classname>GTypeInterface</classname> (which is static itself, too) which
-    allows us to query for interface availability based on runtime properties.
-    This extension is called <ulink type="http"
-    url="../../gstreamer/html/GstImplementsInterface.html"><classname>
-    GstImplementsInterface</classname></ulink>.
+    at their own will. 
   </para>
   <para>
     One important note: interfaces do <emphasis>not</emphasis> replace
     properties. Rather, interfaces should be built <emphasis>next to</emphasis>
     properties. There are two important reasons for this. First of all, 
-    properties
-    can be saved in XML files. Second, properties can be specified on the
-    commandline (<filename>gst-launch</filename>).
+    properties can be more easily introspected. Second, properties can be
+    specified on the commandline (<filename>gst-launch</filename>).
   </para>
 
   <sect1 id="section-iface-general" xreflabel="How to Implement Interfaces">
       registered the type itself. Some interfaces have dependencies on other
       interfaces or can only be registered by certain types of elements. You
       will be notified of doing that wrongly when using the element: it will
-      quit with failed assertions, which will explain what went wrong. In the
-      case of GStreamer, the only dependency that <emphasis>some</emphasis>
-      interfaces have is <ulink type="http"
-      url="../../gstreamer/html/GstImplementsInterface.html"><classname>
-      GstImplementsInterface</classname></ulink>. Per
-      interface, we will indicate clearly when it depends on this extension.
+      quit with failed assertions, which will explain what went wrong.
       If it does, you need to register support for <emphasis>that</emphasis>
       interface before registering support for the interface that you're
       wanting to support. The example below explains how to add support for a
-      simple interface with no further dependencies. For a small explanation
-      on <ulink type="http" url="../../gstreamer/html/GstImplementsInterface.html">
-      <classname>GstImplementsInterface</classname></ulink>, see the next section
-      about the mixer interface: <xref linkend="section-iface-mixer"/>.
+      simple interface with no further dependencies.
     </para>
     <programlisting>
 static void    gst_my_filter_some_interface_init       (GstSomeInterface *iface);
@@ -83,7 +69,7 @@ gst_my_filter_get_type (void)
   if (!my_filter_type) {
     static const GTypeInfo my_filter_info = {
       sizeof (GstMyFilterClass),
-      (GBaseInitFunc) gst_my_filter_base_init,
+      NULL,
       NULL,
       (GClassInitFunc) gst_my_filter_class_init,
       NULL,
@@ -99,7 +85,7 @@ gst_my_filter_get_type (void)
     };
 
     my_filter_type =
-       g_type_register_static (GST_TYPE_MY_FILTER,
+       g_type_register_static (GST_TYPE_ELEMENT,
                                "GstMyFilter",
                                &amp;my_filter_info, 0);
     g_type_add_interface_static (my_filter_type,
@@ -116,333 +102,23 @@ gst_my_filter_some_interface_init (GstSomeInterface *iface)
   /* here, you would set virtual function pointers in the interface */
 }
     </programlisting>
-  </sect1>
-
-  <sect1 id="section-iface-uri" xreflabel="URI interface">
-    <title>URI interface</title>
-    <para>
-      WRITEME
-    </para>
-  </sect1>
-
-  <sect1 id="section-iface-mixer" xreflabel="Mixer Interface">
-    <title>Mixer Interface</title>
-    <para>
-      The goal of the mixer interface is to provide a simple yet powerful API
-      to applications for audio hardware mixer/volume control. Most soundcards
-      have hardware mixers, where volume can be changed, they can be muted,
-      inputs can be modified to mix their content into what will be read from
-      the device by applications (in our case: audio source plugins). The
-      mixer interface is the way to control those. The mixer interface can
-      also be used for volume control in software (e.g. the <quote>volume</quote>
-      element). The end goal of this interface is to allow development of
-      hardware volume control applications and for the control of audio volume
-      and input/output settings.
-    </para>
     <para>
-      The mixer interface requires the <ulink type="http"
-      url="../../gstreamer/html/GstImplementsInterface.html"><classname>
-      GstImplementsInterface</classname></ulink>
-      interface to be implemented by the element. The example below will
-      feature both, so it serves as an example for the <ulink type="http"
-      url="../../gstreamer/html/GstImplementsInterface.html"><classname>
-      GstImplementsInterface</classname></ulink>, too. In this
-      interface, it is required to set a function pointer for the <function>
-      supported ()</function> function.
-      If you don't, this function will always return FALSE (default
-      implementation) and the mixer interface implementation will not work. For
-      the mixer interface, the only required function is
-      <function>list_tracks ()</function>. All other function pointers in the
-      mixer interface are optional, although it is strongly recommended to set
-      function pointers for at least the <function>get_volume ()</function> and
-      <function>set_volume ()</function> functions. The API reference for this
-      interface documents the goal of each function, so we will limit ourselves
-      to the implementation here.
-    </para>
-    <para>
-      The following example shows a mixer implementation for a software N-to-1
-      element. It does not show the actual process of stream mixing, that is
-      far too complicated for this guide.
+      Or more conveniently:
     </para>
     <programlisting>
-#include &lt;gst/mixer/mixer.h&gt;
-
-typedef struct _GstMyFilter {
-[..]
-  gint volume;
-  GList *tracks;
-} GstMyFilter;
-
-static void    gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface);
-static void    gst_my_filter_mixer_interface_init      (GstMixerClass *iface);
-
-GType
-gst_my_filter_get_type (void)
-{
-[..]
-    static const GInterfaceInfo implements_interface_info = {
-      (GInterfaceInitFunc) gst_my_filter_implements_interface_init,
-      NULL,
-      NULL
-    };
-    static const GInterfaceInfo mixer_interface_info = {
-      (GInterfaceInitFunc) gst_my_filter_mixer_interface_init,
-      NULL,
-      NULL
-    };
-[..]
-    g_type_add_interface_static (my_filter_type,
-                                GST_TYPE_IMPLEMENTS_INTERFACE,
-                                &amp;implements_interface_info);
-    g_type_add_interface_static (my_filter_type,
-                                GST_TYPE_MIXER,
-                                &amp;mixer_interface_info);
-[..]
-}
-
-static void
-gst_my_filter_init (GstMyFilter *filter)
-{
-  GstMixerTrack *track = NULL;
-[..]
-  filter->volume = 100;
-  filter->tracks = NULL;
-  track = g_object_new (GST_TYPE_MIXER_TRACK, NULL);
-  track->label = g_strdup ("MyTrack");
-  track->num_channels = 1;
-  track->min_volume = 0;
-  track->max_volume = 100;
-  track->flags = GST_MIXER_TRACK_SOFTWARE;
-  filter->tracks = g_list_append (filter->tracks, track);
-}
-
-static gboolean
-gst_my_filter_interface_supported (GstImplementsInterface *iface,
-                                  GType                   iface_type)
-{
-  g_return_val_if_fail (iface_type == GST_TYPE_MIXER, FALSE);
-
-  /* for the sake of this example, we'll always support it. However, normally,
-   * you would check whether the device you've opened supports mixers. */
-  return TRUE;
-}
-
-static void
-gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface)
-{
-  iface->supported = gst_my_filter_interface_supported;
-}
-
-/*
- * This function returns the list of support tracks (inputs, outputs)
- * on this element instance. Elements usually build this list during
- * _init () or when going from NULL to READY.
- */
-
-static const GList *
-gst_my_filter_mixer_list_tracks (GstMixer *mixer)
-{
-  GstMyFilter *filter = GST_MY_FILTER (mixer);
-
-  return filter->tracks;
-}
-
-/*
- * Set volume. volumes is an array of size track->num_channels, and
- * each value in the array gives the wanted volume for one channel
- * on the track.
- */
-
-static void
-gst_my_filter_mixer_set_volume (GstMixer      *mixer,
-                               GstMixerTrack *track,
-                               gint          *volumes)
-{
-  GstMyFilter *filter = GST_MY_FILTER (mixer);
-
-  filter->volume = volumes[0];
-
-  g_print ("Volume set to %d\n", filter->volume);
-}
-
-static void
-gst_my_filter_mixer_get_volume (GstMixer      *mixer,
-                               GstMixerTrack *track,
-                               gint          *volumes)
-{
-  GstMyFilter *filter = GST_MY_FILTER (mixer);
-
-  volumes[0] = filter->volume;
-}
+static void    gst_my_filter_some_interface_init       (GstSomeInterface *iface);
 
-static void
-gst_my_filter_mixer_interface_init (GstMixerClass *iface)
-{
-  /* the mixer interface requires a definition of the mixer type:
-   * hardware or software? */
-  GST_MIXER_TYPE (iface) = GST_MIXER_SOFTWARE;
+G_DEFINE_TYPE_WITH_CODE (GstMyFilter, gst_my_filter,GST_TYPE_ELEMENT,
+     G_IMPLEMENT_INTERFACE (GST_TYPE_SOME_INTERFACE,
+            gst_my_filter_some_interface_init));
 
-  /* virtual function pointers */
-  iface->list_tracks = gst_my_filter_mixer_list_tracks;
-  iface->set_volume  = gst_my_filter_mixer_set_volume;
-  iface->get_volume  = gst_my_filter_mixer_get_volume;
-}
     </programlisting>
-    <para>
-      The mixer interface is very audio-centric. However, with the software
-      flag set, the mixer can be used to mix any kind of stream in a N-to-1
-      element to join (not aggregate!) streams together into one output stream.
-      Conceptually, that's called mixing too. You can always use the element
-      factory's <quote>category</quote> to indicate type of your element. In
-      a software element that mixes random streams, you would not be required
-      to implement the <function>_get_volume ()</function> or
-      <function>_set_volume ()</function> functions. Rather, you would only
-      implement the <function>_set_record ()</function> to enable or disable
-      tracks in the output stream. to make sure that a mixer-implementing
-      element is of a certain type, check the element factory's category.
-    </para>
   </sect1>
 
-  <sect1 id="section-iface-tuner" xreflabel="Tuner Interface">
-    <title>Tuner Interface</title>
-    <para>
-      As opposed to the mixer interface, that's used to join together N streams
-      into one output stream by mixing all streams together, the tuner
-      interface is used in N-to-1 elements too, but instead of mixing the input
-      streams, it will select one stream and push the data of that stream to
-      the output stream. It will discard the data of all other streams. There
-      is a flag that indicates whether this is a software-tuner (in which case
-      it is a pure software implementation, with N sink pads and 1 source pad)
-      or a hardware-tuner, in which case it only has one source pad, and the
-      whole stream selection process is done in hardware. The software case can
-      be used in elements such as <emphasis>switch</emphasis>. The hardware
-      case can be used in elements with channel selection, such as video source
-      elements (v4lsrc, v4l2src, etc.). If you need a specific element type,
-      use the element factory's <quote>category</quote> to make sure that the
-      element is of the type that you need. Note that the interface itself is
-      highly analog-video-centric.
-    </para>
-    <para>
-      This interface requires the <ulink type="http"
-      url="../../gstreamer/html/GstImplementsInterface.html"><classname>
-      GstImplementsInterface</classname></ulink>
-      interface to work correctly.
-    </para>
-    <para>
-      The following example shows how to implement the tuner interface in an
-      element. It does not show the actual process of stream selection, that
-      is irrelevant for this section.
-    </para>
-    <programlisting>
-#include &lt;gst/tuner/tuner.h&gt;
-
-typedef struct _GstMyFilter {
-[..]
-  gint active_input;
-  GList *channels;
-} GstMyFilter;
-
-static void    gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface);
-static void    gst_my_filter_tuner_interface_init      (GstTunerClass *iface);
-
-GType
-gst_my_filter_get_type (void)
-{
-[..]
-    static const GInterfaceInfo implements_interface_info = {
-      (GInterfaceInitFunc) gst_my_filter_implements_interface_init,
-      NULL,
-      NULL
-    };
-    static const GInterfaceInfo tuner_interface_info = {
-      (GInterfaceInitFunc) gst_my_filter_tuner_interface_init,
-      NULL,
-      NULL
-    };
-[..]
-    g_type_add_interface_static (my_filter_type,
-                                GST_TYPE_IMPLEMENTS_INTERFACE,
-                                &amp;implements_interface_info);
-    g_type_add_interface_static (my_filter_type,
-                                GST_TYPE_TUNER,
-                                &amp;tuner_interface_info);
-[..]
-}
-
-static void
-gst_my_filter_init (GstMyFilter *filter)
-{
-  GstTunerChannel *channel = NULL;
-[..]
-  filter->active_input = 0;
-  filter->channels = NULL;
-  channel = g_object_new (GST_TYPE_TUNER_CHANNEL, NULL);
-  channel->label = g_strdup ("MyChannel");
-  channel->flags = GST_TUNER_CHANNEL_INPUT;
-  filter->channels = g_list_append (filter->channels, channel);
-}
-
-static gboolean
-gst_my_filter_interface_supported (GstImplementsInterface *iface,
-                                  GType                   iface_type)
-{
-  g_return_val_if_fail (iface_type == GST_TYPE_TUNER, FALSE);
-
-  /* for the sake of this example, we'll always support it. However, normally,
-   * you would check whether the device you've opened supports tuning. */
-  return TRUE;
-}
-
-static void
-gst_my_filter_implements_interface_init (GstImplementsInterfaceClass *iface)
-{
-  iface->supported = gst_my_filter_interface_supported;
-}
-
-static const GList *
-gst_my_filter_tuner_list_channels (GstTuner *tuner)
-{
-  GstMyFilter *filter = GST_MY_FILTER (tuner);
-
-  return filter->channels;
-}
-
-static GstTunerChannel *
-gst_my_filter_tuner_get_channel (GstTuner *tuner)
-{
-  GstMyFilter *filter = GST_MY_FILTER (tuner);
-
-  return g_list_nth_data (filter->channels,
-                         filter->active_input);
-}
-
-static void
-gst_my_filter_tuner_set_channel (GstTuner        *tuner,
-                                GstTunerChannel *channel)
-{
-  GstMyFilter *filter = GST_MY_FILTER (tuner);
-
-  filter->active_input = g_list_index (filter->channels, channel);
-  g_assert (filter->active_input >= 0);
-}
-
-static void
-gst_my_filter_tuner_interface_init (GstTunerClass *iface)
-{
-  iface->list_channels = gst_my_filter_tuner_list_channels;
-  iface->get_channel   = gst_my_filter_tuner_get_channel;
-  iface->set_channel   = gst_my_filter_tuner_set_channel;
-}
-    </programlisting>
+  <sect1 id="section-iface-uri" xreflabel="URI interface">
+    <title>URI interface</title>
     <para>
-      As said, the tuner interface is very analog video-centric. It features
-      functions for selecting an input or output, and on inputs, it features
-      selection of a tuning frequency if the channel supports frequency-tuning
-      on that input. Likewise, it allows signal-strength-acquiring if the input
-      supports that. Frequency tuning can be used for radio or cable-TV tuning.
-      Signal-strength is an indication of the signal and can be used for
-      visual feedback to the user or for autodetection. Next to that, it also
-      features norm selection, which is only useful for analog video elements.
+      WRITEME
     </para>
   </sect1>
 
@@ -453,198 +129,45 @@ gst_my_filter_tuner_interface_init (GstTunerClass *iface)
     </para>
   </sect1>
 
-  <sect1 id="section-iface-propprobe" xreflabel="Property Probe Interface">
-    <title>Property Probe Interface</title>
-    <para>
-      Property probing is a generic solution to the problem that properties'
-      value lists in an enumeration are static. We've shown enumerations in
-      <xref linkend="chapter-building-args"/>. Property probing tries to accomplish
-      a goal similar to enumeration lists: to have a limited, explicit list of
-      allowed values for a property. There are two differences between
-      enumeration lists and probing. Firstly, enumerations only allow strings
-      as values; property probing works for any value type. Secondly, the
-      contents of a probed list of allowed values may change during the life
-      of an element. The contents of an enumeration list are static. Currently,
-      property probing is being used for detection of devices (e.g. for OSS
-      elements, Video4linux elements, etc.). It could - in theory - be used
-      for any property, though.
-    </para>
-    <para>
-      Property probing stores the list of allowed (or recommended) values in a
-      <classname>GValueArray</classname> and returns that to the user.
-      <symbol>NULL</symbol> is a valid return value, too. The process of
-      property probing is separated over two virtual functions: one for probing
-      the property to create a <classname>GValueArray</classname>, and one to
-      retrieve the current <classname>GValueArray</classname>. Those two are
-      separated because probing might take a long time (several seconds). Also,
-      this simplifies interface implementation in elements. For the application,
-      there are functions that wrap those two. For more information on this,
-      have a look at the API reference for the
-      <!-- FIXME: add link, but this is in ./gst-plugins/gst-libs/gst/propertyprobe/propertyprobe.c-->
-      <classname>GstPropertyProbe</classname> interface.
-    </para>
-    <para>
-      Below is a example of property probing for the audio filter element; it
-      will probe for allowed values for the <quote>silent</quote> property.
-      Indeed, this value is a <type>gboolean</type> so it doesn't
-      make much sense. Then again, it's only an example.
-    </para>
-    <programlisting>
-#include &lt;gst/propertyprobe/propertyprobe.h&gt;
-
-static void    gst_my_filter_probe_interface_init      (GstPropertyProbeInterface *iface);
-
-GType
-gst_my_filter_get_type (void)
-{
-[..]
-    static const GInterfaceInfo probe_interface_info = {
-      (GInterfaceInitFunc) gst_my_filter_probe_interface_init,
-      NULL,
-      NULL
-    };
-[..]
-    g_type_add_interface_static (my_filter_type,
-                                GST_TYPE_PROPERTY_PROBE,
-                                &amp;probe_interface_info);
-[..]
-}
-
-static const GList *
-gst_my_filter_probe_get_properties (GstPropertyProbe *probe)
-{
-  GObjectClass *klass = G_OBJECT_GET_CLASS (probe);
-  static GList *props = NULL;
-
-  if (!props) {
-    GParamSpec *pspec;
-
-    pspec = g_object_class_find_property (klass, "silent");
-    props = g_list_append (props, pspec);
-  }
-
-  return props;
-}
-
-static gboolean
-gst_my_filter_probe_needs_probe (GstPropertyProbe *probe,
-                                guint             prop_id,
-                                const GParamSpec *pspec)
-{
-  gboolean res = FALSE;
-
-  switch (prop_id) {
-    case ARG_SILENT:
-      res = FALSE;
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
-      break;
-  }
-
-  return res;
-}
-
-static void
-gst_my_filter_probe_probe_property (GstPropertyProbe *probe,
-                                   guint             prop_id,
-                                   const GParamSpec *pspec)
-{
-  switch (prop_id) {
-    case ARG_SILENT:
-      /* don't need to do much here... */
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
-      break;
-  }
-}
-
-static GValueArray *
-gst_my_filter_get_silent_values (GstMyFilter *filter)
-{
-  GValueArray *array = g_value_array_new (2);
-  GValue value = { 0 };
-
-  g_value_init (&amp;value, G_TYPE_BOOLEAN);
-
-  /* add TRUE */
-  g_value_set_boolean (&amp;value, TRUE);
-  g_value_array_append (array, &amp;value);
-
-  /* add FALSE */
-  g_value_set_boolean (&amp;value, FALSE);
-  g_value_array_append (array, &amp;value);
-
-  g_value_unset (&amp;value);
-
-  return array;
-}
-
-static GValueArray *
-gst_my_filter_probe_get_values (GstPropertyProbe *probe,
-                               guint             prop_id,
-                               const GParamSpec *pspec)
-{
-  GstMyFilter *filter = GST_MY_FILTER (probe);
-  GValueArray *array = NULL;
-
-  switch (prop_id) {
-    case ARG_SILENT:
-      array = gst_my_filter_get_silent_values (filter);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (probe, prop_id, pspec);
-      break;
-  }
-
-  return array;
-}
-
-static void
-gst_my_filter_probe_interface_init (GstPropertyProbeInterface *iface)
-{
-  iface->get_properties = gst_my_filter_probe_get_properties;
-  iface->needs_probe    = gst_my_filter_probe_needs_probe;
-  iface->probe_property = gst_my_filter_probe_probe_property;
-  iface->get_values     = gst_my_filter_probe_get_values;
-}
-    </programlisting>
-    <para>
-      You don't need to support any functions for getting or setting values.
-      All that is handled via the standard <classname>GObject</classname>
-      <function>_set_property ()</function> and <function>_get_property ()</function>
-      functions.
-    </para>
-  </sect1>
-
-  <sect1 id="section-iface-xoverlay" xreflabel="X Overlay Interface">
-    <title>X Overlay Interface</title>
-    <para>
-      An X Overlay is basically a video output in a XFree86 drawable. Elements
-      implementing this interface will draw video in a X11 window. Through this
-      interface, applications will be proposed 2 different modes to work with
-      a plugin implementing it. The first mode is a passive mode where the plugin
-      owns, creates and destroys the X11 window. The second mode is an active
-      mode where the application handles the X11 window creation and then tell
-      the plugin where it should output video. Let's get a bit deeper in those
-      modes...
-    </para>
-    <para>
-      A plugin drawing video output in a X11 window will need to have that
+  <sect1 id="section-iface-xoverlay" xreflabel="Video Overlay Interface">
+    <title>Video Overlay Interface</title>
+    <para>
+      The #GstVideoOverlay interface is used for 2 main purposes :
+      <itemizedlist>
+        <listitem>
+          <para>
+      To get a grab on the Window where the video sink element is going to render.
+      This is achieved by either being informed about the Window identifier that
+      the video sink element generated, or by forcing the video sink element to use
+      a specific Window identifier for rendering.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+      To force a redrawing of the latest video frame the video sink element
+      displayed on the Window. Indeed if the #GstPipeline is in #GST_STATE_PAUSED
+      state, moving the Window around will damage its content. Application
+      developers will want to handle the Expose events themselves and force the
+      video sink element to refresh the Window's content.
+          </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+    <para>
+      A plugin drawing video output in a video window will need to have that
       window at one stage or another. Passive mode simply means that no window
       has been given to the plugin before that stage, so the plugin created the
       window by itself. In that case the plugin is responsible of destroying
       that window when it's not needed any more and it has to tell the
       applications that a window has been created so that the application can
-      use it. This is done using the <classname>have_xwindow_id</classname>
-      signal that can be emitted from the plugin with the
-      <function>gst_x_overlay_got_xwindow_id</function> method.
+      use it. This is done using the <classname>have-window-handle</classname>
+      message that can be posted from the plugin with the
+      <function>gst_video_overlay_got_window_handle</function> method.
     </para>
     <para>
-      As you probably guessed already active mode just means sending a X11
+      As you probably guessed already active mode just means sending a video
       window to the plugin so that video output goes there. This is done using
-      the <function>gst_x_overlay_set_xwindow_id</function> method.
+      the <function>gst_video_overlay_set_window_handle</function> method.
     </para>
     <para>
       It is possible to switch from one mode to another at any moment, so the
@@ -654,36 +177,25 @@ gst_my_filter_probe_interface_init (GstPropertyProbeInterface *iface)
     </para>
     <programlisting><![CDATA[
 static void
-gst_my_filter_set_xwindow_id (GstXOverlay *overlay, XID xwindow_id)
+gst_my_filter_set_window_handle (GstVideoOverlay *overlay, guintptr handle)
 {
   GstMyFilter *my_filter = GST_MY_FILTER (overlay);
 
   if (my_filter->window)
     gst_my_filter_destroy_window (my_filter->window);
     
-  my_filter->window = xwindow_id;
-}
-
-static void
-gst_my_filter_get_desired_size (GstXOverlay *overlay,
-                                guint *width, guint *height)
-{
-  GstMyFilter *my_filter = GST_MY_FILTER (overlay);
-
-  *width = my_filter->width;
-  *height = my_filter->height;
+  my_filter->window = handle;
 }
 
 static void
-gst_my_filter_xoverlay_init (GstXOverlayClass *iface)
+gst_my_filter_xoverlay_init (GstVideoOverlayClass *iface)
 {
-  iface->set_xwindow_id = gst_my_filter_set_xwindow_id;
-  iface->get_desired_size = gst_my_filter_get_desired_size;
+  iface->set_window_handle = gst_my_filter_set_window_handle;
 }
     ]]></programlisting>
     <para>
-      You will also need to use the interface methods to fire signals when 
-      needed such as in the pad link function where you will know the video
+      You will also need to use the interface methods to post messages when 
+      needed such as when receiving a CAPS event where you will know the video
       geometry and maybe create the window.
     </para>
     <programlisting><![CDATA[
@@ -692,25 +204,25 @@ gst_my_filter_window_create (GstMyFilter *my_filter, gint width, gint height)
 {
   MyFilterWindow *window = g_new (MyFilterWindow, 1);
   ...
-  gst_x_overlay_got_xwindow_id (GST_X_OVERLAY (my_filter), window->win);
+  gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (my_filter), window->win);
 }
 
-static GstPadLinkReturn
-gst_my_filter_sink_link (GstPad *pad, const GstCaps *caps)
+/* called from the event handler for CAPS events */
+static gboolean
+gst_my_filter_sink_set_caps (GstMyFilter *my_filter, GstCaps *caps)
 {
-  GstMyFilter *my_filter = GST_MY_FILTER (overlay);
   gint width, height;
   gboolean ret;
   ...
   ret = gst_structure_get_int (structure, "width", &width);
   ret &= gst_structure_get_int (structure, "height", &height);
-  if (!ret) return GST_PAD_LINK_REFUSED;
+  if (!ret) return FALSE;
+
+  gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (my_filter));
   
   if (!my_filter->window)
     my_filter->window = gst_my_filter_create_window (my_filter, width, height);
 
-  gst_x_overlay_got_desired_size (GST_X_OVERLAY (my_filter),
-                                  width, height);
   ...
 }
     ]]></programlisting>
index 1bae8b2b1ecf3b6fccfd58269fc2d8e38c7c47f5..bc0ecbb8aac6ee5ee37d44c4996da494a113f5df 100644 (file)
 <chapter id="chapter-negotiation" xreflabel="Caps negotiation">
   <title>Caps negotiation</title>
   <para>
-    Caps negotiation is the process where elements configure themselves
-    and each other for streaming a particular media format over their pads.
-    Since different types of elements have different requirements for the
-    media formats they can negotiate to, it is important that this process
-    is generic and implements all those use cases correctly.
-  </para>
-  <para>
-    In this chapter, we will discuss downstream negotiation and upstream
-    negotiation from a pipeline perspective, implicating the responsibilities
-    of different types of elements in a pipeline, and we will introduce the
-    concept of <emphasis>fixed caps</emphasis>.
+    Caps negotiation is the act of finding a media format (GstCaps) between
+    elements that they can handle. This process in &GStreamer; can in most
+    cases find an optimal solution for the complete pipeline. In this section
+    we explain how this works.
   </para>
 
-  <sect1 id="section-nego-requirements" xreflabel="Caps negotiation use cases">
-    <title>Caps negotiation use cases</title>
-    <para>
-      Let's take the case of a file source, linked to a demuxer, linked to a
-      decoder, linked to a converter with a caps filter and finally an audio
-      output. When data flow originally starts, the demuxer will parse the
-      file header (e.g. the Ogg headers), and notice that there is, for
-      example, a Vorbis stream in this Ogg file. Noticing that, it will
-      create an output pad for the Vorbis elementary stream and set a
-      Vorbis-caps on it. Lastly, it adds the pad. As of this point, the pad
-      is ready to be used to stream data, and so the Ogg demuxer is now done.
-      This pad is <emphasis>not</emphasis> re-negotiable, since the type of
-      the data stream is embedded within the data.
-    </para>
-    <para>
-      The Vorbis decoder will decode the Vorbis headers and the Vorbis data
-      coming in on its sinkpad. Now, some decoders may be able to output in
-      multiple output formats, for example both 16-bit integer output and
-      floating-point output, whereas other decoders may be able to only decode
-      into one specific format, e.g. only floating-point (32-bit) audio. Those
-      two cases have consequences for how caps negotiation should be
-      implemented in this decoder element. In the one case, it is possible to
-      use fixed caps, and you're done. In the other case, however, you should
-      implement the possibility for <emphasis>renegotiation</emphasis> in this
-      element, which is the possibility for the data format to be changed to
-      another format at some point in the future. We will discuss how to do
-      this in one of the sections further on in this chapter.
-    </para>
+  <sect1 id="section-nego-basics">
+    <title>Caps negotiation basics</title>
     <para>
-      The filter can be used by applications to force, for example, a specific
-      channel configuration (5.1/surround or 2.0/stereo), on the pipeline, so
-      that the user can enjoy sound coming from all its speakers. The audio
-      sink, in this example, is a standard ALSA output element (alsasink).
-      The converter element supports any-to-any, and the filter will make sure
-      that only a specifically wanted channel configuration streams through
-      this link (as provided by the user's channel configuration preference).
-      By changing this preference while the pipeline is running, some elements
-      will have to renegotiate <emphasis>while the pipeline is
-      running</emphasis>. This is done through upstream caps renegotiation.
-      That, too, will be discussed in detail in a section further below.
+      In &GStreamer;, negotiation of the media format always follows the
+      following simple rules:
     </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          A downstream element suggest a format on its sinkpad and places the
+          suggestion in the result of the CAPS query performed on the sinkpad.
+          See also <xref linkend="section-nego-getcaps"/>.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          An upstream element decides on a format. It sends the selected media
+          format downstream on its source pad with a CAPS event. Downstream
+          elements reconfigure themselves to handle the media type in the CAPS
+          event on the sinkpad.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          An upstream element can inform downstream that it would like to
+          suggest a new format by sending a RECONFIGURE event upstream. The
+          RECONFIGURE event simply instructs an upstream element to restart
+          the negotiation phase. Because the element that sent out the
+          RECONFIGURE event is now suggesting another format, the format
+          in the pipeline might change.
+        </para>
+      </listitem>
+    </itemizedlist>
     <para>
-      In order for caps negotiation on non-fixed links to work correctly,
-      pads can optionally implement a function that tells peer elements what
-      formats it supports and/or prefers. When upstream renegotiation is
-      triggered, this becomes important.
+      In addition to the CAPS and RECONFIGURE event and the CAPS query, there
+      is an ACCEPT_CAPS query to quickly check if a certain caps can
+      be accepted by an element.
     </para>
     <para>
-      Downstream elements are notified of a newly set caps only when data
-      is actually passing their pad. This is because caps is attached to
-      buffers during data flow. So when the vorbis decoder sets a caps on
-      its source pad (to configure the output format), the converter will
-      not yet be notified. Instead, the converter will only be notified
-      when the decoder pushes a buffer over its source pad to the converter.
-      Right before calling the chain-function in the converter, &GStreamer;
-      will check whether the format that was previously negotiated still
-      applies to this buffer. If not, it first calls the setcaps-function
-      of the converter to configure it for the new format. Only after that
-      will it call the chain function of the converter.
+      All negotiation follows these simple rules. Let's take a look at some
+      typical uses cases and how negotiation happens.
     </para>
   </sect1>
 
-  <sect1 id="section-nego-fixedcaps" xreflabel="Fixed caps">
-    <title>Fixed caps</title>
+  <sect1 id="section-nego-usecases">
+    <title>Caps negotiation use cases</title>
     <para>
-      The simplest way in which to do caps negotiation is setting a fixed
-      caps on a pad. After a fixed caps has been set, the pad can not be
-      renegotiated from the outside. The only way to reconfigure the pad
-      is for the element owning the pad to set a new fixed caps on the pad.
-      Fixed caps is a setup property for pads, called when creating the pad:
+      In what follows we will look at some use cases for push-mode scheduling.
+      The pull-mode scheduling negotiation phase is discussed in
+      <xref linkend="section-nego-pullmode"/> and is actually similar as we
+      will see. 
     </para>
-    <programlisting>
-[..]
-  pad = gst_pad_new_from_template (..);
-  gst_pad_use_fixed_caps (pad);
-[..]
-    </programlisting>
     <para>
-      The fixed caps can then be set on the pad by calling
-      <function>gst_pad_set_caps ()</function>.
-    </para>
-    <programlisting>
-[..]
-  caps = gst_caps_new_simple ("audio/x-raw",
-      "format", G_TYPE_STRING, GST_AUDIO_NE(F32),
-      "buffer-frames", G_TYPE_INT, &lt;bytes-per-frame&gt;,
-      "rate", G_TYPE_INT, &lt;samplerate&gt;,
-      "channels", G_TYPE_INT, &lt;num-channels&gt;, NULL);
-  if (!gst_pad_set_caps (pad, caps)) {
-    GST_ELEMENT_ERROR (element, CORE, NEGOTIATION, (NULL),
-        ("Some debug information here"));
-    return GST_FLOW_ERROR;
-  }
-[..]
-    </programlisting>
-    <para>
-      Elements that could implement fixed caps (on their source pads) are,
-      in general, all elements that are not renegotiable. Examples include:
+      Since the sink pads only suggest formats and the source pads need to
+      decide, the most complicated work is done in the source pads.
+      We can identify 3 caps negotiation use cases for the source pads:
     </para>
     <itemizedlist>
       <listitem>
         <para>
-          A typefinder, since the type found is part of the actual data stream
-          and can thus not be re-negotiated.
+          Fixed negotiation. An element can output one format only.
+          See <xref linkend="section-nego-fixed"/>.
         </para>
       </listitem>
       <listitem>
         <para>
-          Pretty much all demuxers, since the contained elementary data
-          streams are defined in the file headers, and thus not
-          renegotiable.
+          Transform negotiation. There is a (fixed) transform between the
+          input and output format of the element, usually based on some
+          element property. The caps that the element will produce depend
+          on the upstream caps and the caps that the element can accept
+          depend on the downstream caps.
+          See <xref linkend="section-nego-transform"/>.
         </para>
       </listitem>
       <listitem>
         <para>
-          Some decoders, where the format is embedded in the data stream
-          and not part of the peercaps <emphasis>and</emphasis> where the
-          decoder itself is not reconfigurable, too.
+          Dynamic negotiation. An element can output many formats.
+          See <xref linkend="section-nego-dynamic"/>.
         </para>
       </listitem>
     </itemizedlist>
-    <para>
-      All other elements that need to be configured for the format should
-      implement full caps negotiation, which will be explained in the next
-      few sections.
-    </para>
-  </sect1>
 
-  <sect1 id="section-nego-downstream" xreflabel="Downstream caps negotiation">
-    <title>Downstream caps negotiation</title>
-    <para>
-      Downstream negotiation takes place when a format needs to be set on a
-      source pad to configure the output format, but this element allows
-      renegotiation because its format is configured on the sinkpad caps,
-      or because it supports multiple formats. The requirements for doing
-      the actual negotiation differ slightly.
-    </para>
+    <sect2 id="section-nego-fixed">
+      <title>Fixed negotiation</title>
+      <para>
+        In this case, the source pad can only produce a fixed format. Usually
+        this format is encoded inside the media. No downstream element can
+        ask for a different format, the only way that the source pad will
+        renegotiate is when the element decides to change the caps itself.
+      </para>
+      <para>
+        Elements that could implement fixed caps (on their source pads) are,
+        in general, all elements that are not renegotiable. Examples include:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            A typefinder, since the type found is part of the actual data stream
+            and can thus not be re-negotiated. The typefinder will look at the
+            stream of bytes, figure out the type, send a CAPS event with the
+            caps and then push buffers of the type.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Pretty much all demuxers, since the contained elementary data
+            streams are defined in the file headers, and thus not
+            renegotiable.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Some decoders, where the format is embedded in the data stream
+            and not part of the peercaps <emphasis>and</emphasis> where the
+            decoder itself is not reconfigurable, too.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Some sources that produce a fixed format.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        <function>gst_pad_use_fixed_caps()</function> is used on the source
+        pad with fixed caps. As long as the pad is not negotiated, the default
+        CAPS query will return the caps presented in the padtemplate. As soon
+        as the pad is negotiated, the CAPS query will return the negotiated
+        caps (and nothing else). These are the relevant code snippets for fixed
+        caps source pads.
+      </para>
+      <programlisting>
+<![CDATA[
+[..]
+  pad = gst_pad_new_from_static_template (..);
+  gst_pad_use_fixed_caps (pad);
+[..]
+]]>
+      </programlisting>
+      <para>
+        The fixed caps can then be set on the pad by calling
+        <function>gst_pad_set_caps ()</function>.
+      </para>
+      <programlisting>
+<![CDATA[
+[..]
+    caps = gst_caps_new_simple ("audio/x-raw",
+        "format", G_TYPE_STRING, GST_AUDIO_NE(F32),
+        "rate", G_TYPE_INT, <samplerate>,
+        "channels", G_TYPE_INT, <num-channels>, NULL);
+    if (!gst_pad_set_caps (pad, caps)) {
+      GST_ELEMENT_ERROR (element, CORE, NEGOTIATION, (NULL),
+          ("Some debug information here"));
+      return GST_FLOW_ERROR;
+    }
+[..]
+]]>
+      </programlisting>
+      <para>
+        These types of elements also don't have a relation between the input
+        format and the output format, the input caps simply don't contain the
+        information needed to produce the output caps.
+      </para>
+      <para>
+        All other elements that need to be configured for the format should
+        implement full caps negotiation, which will be explained in the next
+        few sections.
+      </para>
+    </sect2>
 
-    <sect2 id="section-nego-downstream-embed"
-        xreflabel="Negotiating caps embedded in input caps">
-      <title>Negotiating caps embedded in input caps</title>
+    <sect2 id="section-nego-transform">
+      <title>Transform negotiation</title>
       <para>
-        Many elements, particularly effects and converters, will be able
-        to parse the format of the stream from their input caps, and decide
-        the output format right at that time already. When renegotiation
-        takes place, some may merely need to "forward" the renegotiation
-        backwards upstream (more on that later). For those elements, all
-        (downstream) caps negotiation can be done in something that we
-        call the <function>_setcaps ()</function> function. This function is
-        called when a buffer is pushed over a pad, but the format on this
-        buffer is not the same as the format that was previously negotiated
-        (or, similarly, no format was negotiated yet so far).
+        In this negotiation technique, there is a fixed transform between
+        the element input caps and the output caps. This transformation
+        could be parameterized by element properties but not by the
+        content of the stream (see <xref linkend="section-nego-fixed"/>
+        for that use-case).
       </para>
       <para>
-        In the <function>_setcaps ()</function>-function, the element can
-        forward the caps to the next element and, if that pad accepts the
-        format too, the element can parse the relevant parameters from the
-        caps and configure itself internally. The caps passed to this function
-        is <emphasis>always</emphasis> a subset of the template caps, so
-        there's no need for extensive safety checking. The following example
-        should give a clear indication of how such a function can be
-        implemented:
+        The caps that the element can accept depend on the (fixed
+        transformation) downstream caps. The caps that the element can
+        produce depend on the (fixed transformation of) the upstream
+        caps.
       </para>
-      <programlisting><!-- example-begin forwardcaps.c a --><!--
-#include "init.func"
-static GstCaps *
-gst_my_filter_getcaps (GstPad * pad)
-{
-  return  NULL;
-}
---><!-- example-end forwardcaps.c a -->
-<!-- example-begin forwardcaps.c b -->
+      <para>
+        This type of element can usually set caps on its source pad from
+        the <function>_event()</function> function on the sink pad when
+        it received the CAPS event. This means that the caps transform
+        function transforms a fixed caps into another fixed caps.
+        Examples of elements include:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            Videobox. It adds configurable border around a video frame
+            depending on object properties.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Identity elements. All elements that don't change the format
+            of the data, only the content. Video and audio effects are an
+            example. Other examples include elements that inspect the
+            stream.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Some decoders and encoders, where the output format is defined
+            by input format, like mulawdec and mulawenc. These decoders
+            usually have no headers that define the content of the stream.
+            They are usually more like conversion elements.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        Below is an example of a negotiation steps of a typical transform 
+        element. In the sink pad CAPS event handler, we compute the caps
+        for the source pad and set those.
+      </para>
+      <programlisting>
+<![CDATA[
+  [...]
+
 static gboolean
-gst_my_filter_setcaps (GstPad  *pad,
+gst_my_filter_setcaps (GstMyFilter *filter,
                       GstCaps *caps)
 {
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
-  GstStructure *s;
+  GstStructure *structure;
+  int rate, channels;
+  gboolean ret;
+  GstCaps *outcaps;
 
-  /* forward-negotiate */
-  if (!gst_pad_set_caps (filter-&gt;srcpad, caps))
+  structure = gst_caps_get_structure (caps, 0);
+  ret = gst_structure_get_int (structure, "rate", &rate);
+  ret = ret && gst_structure_get_int (structure, "channels", &channels);
+  if (!ret)
     return FALSE;
 
-  /* negotiation succeeded, so now configure ourselves */
-  s = gst_caps_get_structure (caps, 0);
-  gst_structure_get_int (s, "rate", &amp;filter-&gt;samplerate);
-  gst_structure_get_int (s, "channels", &amp;filter-&gt;channels);
+  outcaps = gst_caps_new_simple ("audio/x-raw",
+      "format", G_TYPE_STRING, GST_AUDIO_NE(S16),
+      "rate", G_TYPE_INT, samplerate,
+      "channels", G_TYPE_INT, channels, NULL);
+  ret = gst_pad_set_caps (filter->srcpad, outcaps);
+  gst_caps_unref (outcaps);
 
-  return TRUE;
+  return ret;
+}
+
+static gboolean
+gst_my_filter_sink_event (GstPad    *pad,
+                         GstObject *parent,
+                         GstEvent  *event)
+{
+  gboolean ret;
+  GstMyFilter *filter = GST_MY_FILTER (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_my_filter_setcaps (filter, caps);
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+  return ret;
 }
-<!-- example-end forwardcaps.c b -->
-<!-- example-begin forwardcaps.c c --><!--
-#include "chain.func"
-#include "state.func"
-#include "register.func"
-      --><!-- example-end forwardcaps.c c --></programlisting>
+
+  [...]
+]]>
+      </programlisting>
+    </sect2>
+
+    <sect2 id="section-nego-dynamic">
+      <title>Dynamic negotiation</title>
+      <para>
+        A last negotiation method is the most complex and powerful dynamic
+        negotiation.
+      </para>
+      <para>
+        Like with the transform negotiation in 
+        <xref linkend="section-nego-transform"/>, dynamic negotiation will
+        perform a transformation on the downstream/upstream caps. Unlike the
+        transform negotiation, this transform will convert fixed caps to
+        unfixed caps. This means that the sink pad input caps can be converted
+        into unfixed (multiple) formats. The source pad will have to choose a
+        format from all the possibilities. It would usually like to choose a
+        format that requires the least amount of effort to produce but it does
+        not have to be. The selection of the format should also depend on the
+        caps that can be accepted downstream (see a QUERY_CAPS function in
+        <xref linkend="section-nego-getcaps"/>).
+      </para>
       <para>
-        There may also be cases where the filter actually is able to
-        <emphasis>change</emphasis> the format of the stream. In those cases,
-        it will negotiate a new format. Obviously, the element should first
-        attempt to configure <quote>pass-through</quote>, which means that
-        it does not change the stream's format. However, if that fails,
-        then it should call <function>gst_pad_get_allowed_caps ()</function>
-        on its sourcepad to get a list of supported formats on the outputs,
-        and pick the first. The return value of that function is guaranteed
-        to be a subset of the template caps.
+        A typical flow goes like this:
       </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            Caps are received on the sink pad of the element.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            If the element prefers to operate in passthrough mode, check
+            if downstream accepts the caps with the ACCEPT_CAPS query. If it
+            does, we can complete negotiation and we can operate in
+            passthrough mode.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Calculate the possible caps for the source pad.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Query the downstream peer pad for the list of possible
+            caps.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Select from the downstream list the first caps that you can
+            transform to and set this as the output caps. You might have to
+            fixate the caps to some reasonable defaults to construct
+            fixed caps.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        Examples of this type of elements include:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            Converter elements such as videoconvert, audioconvert, audioresample,
+            videoscale, ...
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Source elements such as audiotestsrc, videotestsrc, v4l2src,
+            pulsesrc, ...
+          </para>
+        </listitem>
+      </itemizedlist>
       <para>
         Let's look at the example of an element that can convert between
         samplerates, so where input and output samplerate don't have to be
         the same:
       </para>
-      <programlisting><!-- example-begin convertcaps.c a --><!--
-#include "init.func"
-static GstCaps *
-gst_my_filter_getcaps (GstPad * pad)
-{
-  return NULL;
-}
-static GstBuffer *
-gst_my_filter_convert (GstMyFilter *filter, GstBuffer *in)
-{
-  return NULL;
-}
-static gboolean
-gst_my_filter_event (GstPad * pad, GstEvent * event)
-{
-  return gst_pad_event_default (pad, event);
-}
---><!-- example-end convertcaps.c a -->
-<!-- example-begin convertcaps.c b -->
+      <programlisting>
+<![CDATA[
 static gboolean
-gst_my_filter_setcaps (GstPad  *pad,
+gst_my_filter_setcaps (GstMyFilter *filter,
                       GstCaps *caps)
 {
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
-
-  if (gst_pad_set_caps (filter-&gt;sinkpad, caps)) {
-    filter-&gt;passthrough = TRUE;
+  if (gst_pad_set_caps (filter->sinkpad, caps)) {
+    filter->passthrough = TRUE;
   } else {
     GstCaps *othercaps, *newcaps;
     GstStructure *s = gst_caps_get_structure (caps, 0), *others;
 
     /* no passthrough, setup internal conversion */
-    gst_structure_get_int (s, "channels", &amp;filter-&gt;channels);
-    othercaps = gst_pad_get_allowed_caps (filter-&gt;srcpad);
+    gst_structure_get_int (s, "channels", &filter->channels);
+    othercaps = gst_pad_get_allowed_caps (filter->srcpad);
     others = gst_caps_get_structure (othercaps, 0);
     gst_structure_set (others,
-        "channels", G_TYPE_INT, filter-&gt;channels, NULL);
+      "channels", G_TYPE_INT, filter->channels, NULL);
 
     /* now, the samplerate value can optionally have multiple values, so
      * we "fixate" it, which means that one fixed value is chosen */
     newcaps = gst_caps_copy_nth (othercaps, 0);
     gst_caps_unref (othercaps);
-    gst_pad_fixate_caps (filter-&gt;srcpad, newcaps);
-    if (!gst_pad_set_caps (filter-&gt;srcpad, newcaps))
+    gst_pad_fixate_caps (filter->srcpad, newcaps);
+    if (!gst_pad_set_caps (filter->srcpad, newcaps))
       return FALSE;
 
     /* we are now set up, configure internally */
-    filter-&gt;passthrough = FALSE;
-    gst_structure_get_int (s, "rate", &amp;filter-&gt;from_samplerate);
+    filter->passthrough = FALSE;
+    gst_structure_get_int (s, "rate", &filter->from_samplerate);
     others = gst_caps_get_structure (newcaps, 0);
-    gst_structure_get_int (others, "rate", &amp;filter-&gt;to_samplerate);
+    gst_structure_get_int (others, "rate", &filter->to_samplerate);
   }
 
   return TRUE;
 }
 
+static gboolean
+gst_my_filter_sink_event (GstPad    *pad,
+                         GstObject *parent,
+                         GstEvent  *event)
+{
+  gboolean ret;
+  GstMyFilter *filter = GST_MY_FILTER (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_my_filter_setcaps (filter, caps);
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+  return ret;
+}
+
 static GstFlowReturn
 gst_my_filter_chain (GstPad    *pad,
+                    GstObject *parent,
                     GstBuffer *buf)
 {
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
+  GstMyFilter *filter = GST_MY_FILTER (parent);
   GstBuffer *out;
 
   /* push on if in passthrough mode */
-  if (filter-&gt;passthrough)
-    return gst_pad_push (filter-&gt;srcpad, buf);
+  if (filter->passthrough)
+    return gst_pad_push (filter->srcpad, buf);
 
   /* convert, push */
   out = gst_my_filter_convert (filter, buf);
   gst_buffer_unref (buf);
 
-  return gst_pad_push (filter-&gt;srcpad, out);
+  return gst_pad_push (filter->srcpad, out);
 }
-<!-- example-end convertcaps.c b -->
-<!-- example-begin convertcaps.c c --><!--
-#include "state.func"
-#include "register.func"
-      --><!-- example-end convertcaps.c c --></programlisting>
-    </sect2>
-
-    <sect2 id="section-nego-downstream-parse"
-        xreflabel="Parsing and setting caps">
-      <title>Parsing and setting caps</title>
-      <para>
-        Other elements, such as certain types of decoders, will not be able
-        to parse the caps from their input, simply because the input format
-        does not contain the information required to know the output format
-        yet; rather, the data headers need to be parsed, too. In many cases,
-        fixed-caps will be enough, but in some cases, particularly in cases
-        where such decoders are renegotiable, it is also possible to use
-        full caps negotiation.
-      </para>
-      <para>
-        Fortunately, the code required to do so is very similar to the last
-        code example in <xref linkend="section-nego-downstream-embed"/>, with
-        the difference being that the caps is selected in the <function>_chain
-        ()</function>-function rather than in the <function>_setcaps
-        ()</function>-function. The rest, as for getting all allowed caps from
-        the source pad, fixating and such, is all the same. Re-negotiation,
-        which will be handled in the next section, is very different for such
-        elements, though.
-      </para>
+]]>
+      </programlisting>
     </sect2>
   </sect1>
 
@@ -341,13 +458,14 @@ gst_my_filter_chain (GstPad    *pad,
       or because the audio channel configuration changed.
     </para>
     <para>
-      Upstream caps renegotiation is done in the <function>gst_pad_alloc_buffer
-      ()</function>-function. The idea here is that an element requesting a
-      buffer from downstream, has to specify the type of that buffer. If
-      renegotiation is to take place, this type will no longer apply, and the
-      downstream element will set a new caps on the provided buffer. The element
-      should then reconfigure itself to push buffers with the returned caps. The
-      source pad's setcaps will be called once the buffer is pushed.
+      Upstream caps renegotiation is requested by sending a GST_EVENT_RECONFIGURE
+      event upstream. The idea is that it will instruct the upstream element
+      to reconfigure its caps by doing a new query for the allowed caps and then
+      choosing a new caps. The element that sends out the RECONFIGURE event
+      would influence the selection of the new caps by returning the new
+      prefered caps from its GST_QUERY_CAPS query function. The RECONFIGURE
+      event will set the GST_PAD_FLAG_NEED_RECONFIGURE on all pads that it
+      travels over.
     </para>
     <para>
       It is important to note here that different elements actually have
@@ -356,78 +474,123 @@ gst_my_filter_chain (GstPad    *pad,
     <itemizedlist>
       <listitem>
         <para>
-          Elements should implement a <quote>padalloc</quote>-function in
-          order to be able to change format on renegotiation. This is also
-          true for filters and converters.
+          Elements that want to propose a new format upstream need to first
+          check if the new caps are acceptable upstream with an ACCEPT_CAPS
+          query. Then they would send a RECONFIGURE event and be prepared to
+          answer the CAPS query with the new prefered format. It should be
+          noted that when there is no upstream element that can (or wants)
+          to renegotiate, the element needs to deal with the currently
+          configured format.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          Elements that operate in transform negotiation according to
+          <xref linkend="section-nego-transform"/> pass the RECONFIGURE
+          event upstream. Because these elements simply do a fixed transform
+          based on the upstream caps, they need to send the event upstream
+          so that it can select a new format.
         </para>
       </listitem>
       <listitem>
         <para>
-          Elements should allocate new buffers using
-          <function>gst_pad_alloc_buffer ()</function>.
+          Elements that operate in fixed negotiation 
+          (<xref linkend="section-nego-fixed"/>) drop the RECONFIGURE event.
+          These elements can't reconfigure and their output caps don't depend
+          on the upstream caps so the event can be dropped.
         </para>
       </listitem>
       <listitem>
         <para>
-          Elements that are renegotiable should implement a
-          <quote>setcaps</quote>-function on their sourcepad as well.
+          Elements that can be reconfigured on the source pad (source pads
+          implementing dynamic negotiation in
+          <xref linkend="section-nego-dynamic"/>) should check its
+          NEED_RECONFIGURE flag with
+          <function>gst_pad_check_reconfigure ()</function> and it should
+          start renegotiation when the function returns TRUE.
         </para>
       </listitem>
     </itemizedlist>
-    <para>
-      Unfortunately, not all details here have been worked out yet, so this
-      documentation is incomplete. FIXME.
-    </para>
   </sect1>
 
-  <sect1 id="section-nego-getcaps" xreflabel="Implementing a getcaps function">
-    <title>Implementing a getcaps function</title>
+  <sect1 id="section-nego-getcaps" xreflabel="Implementing a CAPS query function">
+    <title>Implementing a CAPS query function</title>
     <para>
-      A <function>_getcaps ()</function>-function is called when a peer
-      element would like to know which formats this element supports, and
-      in what order of preference. The return value should be all formats
-      that this elements supports, taking into account limitations of peer
-      elements further downstream or upstream, sorted by order of preference,
-      highest preference first.
+      A <function>_query ()</function>-function with the GST_QUERY_CAPS query
+      type is called when a peer element would like to know which formats
+      this pad supports, and in what order of preference. The return value
+      should be all formats that this elements supports, taking into account
+      limitations of peer elements further downstream or upstream, sorted by
+      order of preference, highest preference first.
     </para>
     <para>
     </para>
-    <programlisting><!-- example-begin getcaps.c a --><!--
-#include "init.func"
---><!-- example-end getcaps.c a -->
-<!-- example-begin getcaps.c b -->
-static GstCaps *
-gst_my_filter_getcaps (GstPad *pad)
-{
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
-  GstPad *otherpad = (pad == filter-&gt;srcpad) ? filter-&gt;sinkpad :
-                                                 filter-&gt;srcpad;
-  GstCaps *othercaps = gst_pad_get_allowed_caps (otherpad), *caps;
-  gint i;
-
-  /* We support *any* samplerate, indifferent from the samplerate
-   * supported by the linked elements on both sides. */
-  for (i = 0; i &lt; gst_caps_get_size (othercaps); i++) {
-    GstStructure *structure = gst_caps_get_structure (othercaps, i);
-
-    gst_structure_remove_field (structure, "rate");
-  }
-  caps = gst_caps_intersect (othercaps, gst_pad_get_pad_template_caps (pad));
-  gst_caps_unref (othercaps);
-
-  return caps;
-}
-<!-- example-end getcaps.c b -->
-<!-- example-begin getcaps.c c --><!--
+    <programlisting>
+<![CDATA[
 static gboolean
-gst_my_filter_setcaps (GstPad * pad, GstCaps * caps)
+gst_my_filter_query (GstPad *pad, GstObject * parent, GstQuery * query)
 {
-  return FALSE;
+  gboolean ret;
+  GstMyFilter *filter = GST_MY_FILTER (parent);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_CAPS
+    {
+      GstPad *otherpad;
+      GstCaps *temp, *caps, *filter, *tcaps;
+      gint i;
+
+      otherpad = (pad == filter->srcpad) ? filter->sinkpad :
+                                           filter->srcpad;
+      caps = gst_pad_get_allowed_caps (otherpad);
+
+      gst_query_parse_caps (query, &filter);
+
+      /* We support *any* samplerate, indifferent from the samplerate
+       * supported by the linked elements on both sides. */
+      for (i = 0; i < gst_caps_get_size (caps); i++) {
+        GstStructure *structure = gst_caps_get_structure (caps, i);
+
+        gst_structure_remove_field (structure, "rate");
+      }
+
+      /* make sure we only return results that intersect our
+       * padtemplate */
+      tcaps = gst_pad_get_pad_template_caps (pad);
+      if (tcaps) {
+        temp = gst_caps_intersect (caps, tcaps);
+        gst_caps_unref (caps);
+        gst_caps_unref (tcaps);
+        caps = temp;
+      }
+      /* filter against the query filter when needed */
+      if (filter) {
+        temp = gst_caps_intersect (caps, filter);
+        gst_caps_unref (caps);
+        caps = temp;
+      }
+      gst_query_set_caps_result (query, caps);
+      gst_caps_unref (caps);
+      ret = TRUE;
+      break;
+    }
+    default:
+      ret = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+  return ret;
 }
-#include "chain.func"
-#include "state.func"
-#include "register.func"
-    --><!-- example-end getcaps.c c --></programlisting>
+]]>
+    </programlisting>
+  </sect1>
+
+  <sect1 id="section-nego-pullmode">
+    <title>Pull-mode Caps negotiation</title>
+    <para>
+      WRITEME, the mechanism of pull-mode negotiation is not yet fully
+      understood.
+    </para>
+
     <para>
       Using all the knowledge you've acquired by reading this chapter, you
       should be able to write an element that does correct caps negotiation.
diff --git a/docs/pwg/advanced-qos.xml b/docs/pwg/advanced-qos.xml
new file mode 100644 (file)
index 0000000..a6561bc
--- /dev/null
@@ -0,0 +1,283 @@
+<chapter id="chapter-advanced-qos">
+  <title>Quality Of Service (QoS)</title>
+
+  <para>
+    Quality of Service in &GStreamer; is about measuring and ajusting
+    the real-time performance of a pipeline. The real-time performance is
+    always measured relative to the pipeline clock and typically happens in
+    the sinks when they synchronize buffers against the clock.
+  </para>
+  <para>
+    When buffers arrive late in the sink, i.e. when their running-time is
+    smaller than that of the clock, we say that the pipeline is having a
+    quality of service problem. These are a few possible reasons:
+  </para>
+  <itemizedlist>
+    <listitem>
+      <para>
+        High CPU load, there is not enough CPU power to handle the stream,
+        causing buffers to arrive late in the sink.
+      </para>
+    </listitem>
+    <listitem>
+      <para>
+        Network problems
+      </para>
+    </listitem>
+    <listitem>
+      <para>
+        Other resource problems such as disk load, memory bottlenecks etc
+      </para>
+    </listitem>
+  </itemizedlist>
+  <para>
+    The measurements result in QOS events that aim to adjust the datarate
+    in one or more upstream elements. Two types of adjustments can be
+    made:
+  </para>
+  <itemizedlist>
+    <listitem>
+      <para>
+        Short time "emergency" corrections based on latest observation in
+        the sinks.
+      </para>
+      <para>
+        Long term rate corrections based on trends observed in the sinks.
+      </para>
+    </listitem>
+  </itemizedlist>
+  <para>
+    It is also possible for the application to artificially introduce delay
+    between synchronized buffers, this is called throttling. It can be used
+    to limit or reduce the framerate, for example.
+  </para>
+
+  <sect1 id="section-measuring">
+    <title>Measuring QoS</title>
+    <para>
+      Elements that synchronize buffers on the pipeline clock will usually
+      measure the current QoS. They will also need to keep some statistics
+      in order to generate the QOS event.
+    </para>
+    <para>
+      For each buffer that arrives in the sink, the element needs to calculate
+      how late or how early it was. This is called the jitter. Negative jitter
+      values mean that the buffer was early, positive values mean that the
+      buffer was late. the jitter value gives an indication of how early/late
+      a buffer was.
+    </para>
+    <para>
+      A synchronizing element will also need to calculate how much time
+      elapsed between receiving two consecutive buffers. We call this the
+      processing time because that is the amount of time it takes for the
+      upstream element to produce/process the buffer. We can compare this
+      processing time to the duration of the buffer to have a measurement
+      of how fast upstream can produce data, called the proportion.
+      If, for example, upstream can produce a buffer in 0.5 seconds of 1
+      second long, it is operating at twice the required speed. If, on the
+      other hand, it takes 2 seconds to produce a buffer with 1 seconds worth
+      of data, upstream is producing buffers too slow and we won't be able to
+      keep sycnhronization. Usually, a running average is kept of the
+      proportion.
+    </para>
+    <para>
+      A synchronizing element also needs to measure its own performance in
+      order to figure out if the performace problem is upstream of itself.
+    </para>
+    <para>
+      These measurements are used to construct a QOS event that is sent
+      upstream. Note that a QoS event is sent for each buffer that arrives
+      in the sink.
+    </para>
+  </sect1>
+
+  <sect1 id="section-handling">
+    <title>Handling QoS</title>
+    <para>
+      An element will have to install an event function on its source pads
+      in order to receive QOS events. Usually, the element will need to
+      store the value of the QOS event and use them in the data processing
+      function. The element will need to use a lock to protect these QoS
+      values as shown in the example below. Also make sure to pass the
+      QoS event upstream.
+    </para>
+    <programlisting>
+<![CDATA[
+    [...]
+
+    case GST_EVENT_QOS:
+    {
+      GstQOSType type;
+      gdouble proportion;
+      GstClockTimeDiff diff;
+      GstClockTime timestamp;
+
+      gst_event_parse_qos (event, &type, &proportion, &diff, &timestamp);
+
+      GST_OBJECT_LOCK (decoder);
+      priv->qos_proportion = proportion;
+      priv->qos_timestamp = timestamp;
+      priv->qos_diff = diff;
+      GST_OBJECT_UNLOCK (decoder);
+
+      res = gst_pad_push_event (decoder->sinkpad, event);
+      break;
+    }
+
+    [...]
+]]>
+    </programlisting>
+    <para>
+      With the QoS values, there are two types of corrections that an element
+      can do:
+    </para>
+
+    <sect2 id="section-handling-short">
+      <title>Short term correction</title>
+      <para>
+        The timestamp and the jitter value in the QOS event can be used to
+        perform a short term correction. If the jitter is positive, the
+        previous buffer arrived late and we can be sure that a buffer with
+        a timestamp &lt; timestamp + jitter is also going to be late. We
+        can thus drop all buffers with a timestamp less than timestamp +
+        jitter.
+      </para>
+      <para>
+        If the buffer duration is known, a better estimation for the next
+        likely timestamp as: timestamp + 2 * jitter + duration.
+      </para>
+      <para>
+        A possible algorithm typically looks like this:
+      </para>
+      <programlisting>
+<![CDATA[
+  [...]
+
+  GST_OBJECT_LOCK (dec);
+  qos_proportion = priv->qos_proportion;
+  qos_timestamp = priv->qos_timestamp;
+  qos_diff = priv->qos_diff;
+  GST_OBJECT_UNLOCK (dec);
+
+  /* calculate the earliest valid timestamp */
+  if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (qos_timestamp))) {
+    if (G_UNLIKELY (qos_diff > 0)) {
+      earliest_time = qos_timestamp + 2 * qos_diff + frame_duration;
+    } else {
+      earliest_time = qos_timestamp + qos_diff;
+    }
+  } else {
+    earliest_time = GST_CLOCK_TIME_NONE;
+  }
+
+  /* compare earliest_time to running-time of next buffer */
+  if (earliest_time > timestamp)
+    goto drop_buffer;
+
+  [...]
+]]>
+      </programlisting>
+    </sect2>
+
+    <sect2 id="section-handling-long">
+      <title>Long term correction</title>
+      <para>
+        Long term corrections are a bit more difficult to perform. They
+        rely on the value of the propertion in the QOS event. Elements should
+        reduce the amount of resources they comsume by the proportion 
+        field in the QoS message.
+      </para>
+      <para>
+        Here are some possible strategies to achieve this:
+      </para>
+      <itemizedlist>
+        <listitem>
+          <para>
+            Permanently dropping frames or reducing the CPU or bandwidth
+            requirements of the element. Some decoders might be able to
+            skip decoding of B frames.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Switch to lower quality processing or reduce the algorithmic
+            complexity. Care should be taken that this doesn't introduce
+            disturbing visual or audible glitches.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Switch to a lower quality source to reduce network bandwidth.
+          </para>
+        </listitem>
+        <listitem>
+          <para>
+            Assign more CPU cycles to critical parts of the pipeline. This
+            could, for example, be done by increasing the thread priority.
+          </para>
+        </listitem>
+      </itemizedlist>
+      <para>
+        In all cases, elements should be prepared to go back to their normal
+        processing rate when the proportion member in the QOS event approaches
+        the ideal proportion of 1.0 again.
+      </para>
+    </sect2>
+  </sect1>
+
+  <sect1 id="section-throttle">
+    <title>Throttling</title>
+    <para>
+      Elements synchronizing to the clock should expose a property to configure
+      them in throttle mode. In throttle mode, the time distance between buffers
+      is kept to a configurable throttle interval. This means that effectively
+      the buffer rate is limited to 1 buffer per throttle interval. This can be
+      used to limit the framerate, for example.
+    </para>
+    <para>
+      When an element is configured in throttling mode (this is usually only
+      implemented on sinks) it should produce QoS events upstream with the jitter
+      field set to the throttle interval. This should instruct upstream elements to
+      skip or drop the remaining buffers in the configured throttle interval.
+    </para>
+    <para>
+      The proportion field is set to the desired slowdown needed to get the
+      desired throttle interval. Implementations can use the QoS Throttle type,
+      the proportion and the jitter member to tune their implementations.
+    </para>
+    <para>
+      The default sink base class, has the <quote>throttle-time</quote>
+      property for this feature. You can test this with: 
+      <command>gst-launch-1.0 videotestsrc !
+        xvimagesink throttle-time=500000000</command>
+    </para>
+  </sect1>
+
+  <sect1 id="section-messages">
+    <title>QoS Messages</title>
+    <para>
+      In addition to the QOS events that are sent between elements in the
+      pipeline, there are also QOS messages posted on the pipeline bus to
+      inform the application of QoS decisions. The QOS message contains
+      the timestamps of when something was dropped along with the amount
+      of dropped vs processed items.  Elements must post a QOS
+      message under these conditions:
+    </para>
+    <itemizedlist>
+      <listitem>
+        <para>
+          The element dropped a buffer because of QoS reasons.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
+          An element changes its processing strategy because of QoS reasons
+          (quality). This could include a decoder that decides to drop every
+          B frame to increase its processing speed or an effect element
+          switching to a lower quality algorithm.
+        </para>
+      </listitem>
+    </itemizedlist>
+  </sect1>
+  
+</chapter>
index dc71d82b65be90ceab1de67f3d1145c7a22e39d0..8ef98977c6582cf85b7ced02d0684a56588f4045 100644 (file)
@@ -53,17 +53,18 @@ typedef struct _GstMyFilter {
   GList *srcpadlist;
 } GstMyFilter;
 
+static GstStaticPadTemplate src_factory =
+GST_STATIC_PAD_TEMPLATE (
+  "src_%u",
+  GST_PAD_SRC,
+  GST_PAD_SOMETIMES,
+  GST_STATIC_CAPS ("ANY")
+);
+
 static void
-gst_my_filter_base_init (GstMyFilterClass *klass)
+gst_my_filter_class_init (GstMyFilterClass *klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  static GstStaticPadTemplate src_factory =
-  GST_STATIC_PAD_TEMPLATE (
-    "src_%02d",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS ("ANY")
-  );
 [..]
   gst_element_class_add_pad_template (element_class,
        gst_static_pad_template_get (&src_factory));
@@ -96,11 +97,11 @@ gst_my_filter_getline (GstMyFilter *filter)
 
     /* newline? */
     if (data[n] == '\n') {
-      GstBuffer *buf = gst_buffer_new_and_alloc (n + 1);
+      GstBuffer *buf = gst_buffer_new_allocate (NULL, n + 1, NULL);
 
       gst_bytestream_peek_bytes (filter->bs, &data, n);
-      memcpy (GST_BUFFER_DATA (buf), data, n);
-      GST_BUFFER_DATA (buf)[n] = '\0';
+      gst_buffer_fill (buf, 0, data, n);
+      gst_buffer_memset (buf, n, '\0', 1);
       gst_bytestream_flush_fast (filter->bs, n + 1);
 
       return buf;
@@ -114,31 +115,33 @@ gst_my_filter_loopfunc (GstElement *element)
   GstMyFilter *filter = GST_MY_FILTER (element);
   GstBuffer *buf;
   GstPad *pad;
+  GstMapInfo map;
   gint num, n;
 
   /* parse header */
   if (filter->firstrun) {
-    GstElementClass *klass;
-    GstPadTemplate *templ;
     gchar *padname;
+    guint8 id;
 
     if (!(buf = gst_my_filter_getline (filter))) {
       gst_element_error (element, STREAM, READ, (NULL),
                         ("Stream contains no header"));
       return;
     }
-    num = atoi (GST_BUFFER_DATA (buf));
+    gst_buffer_extract (buf, 0, &id, 1);
+    num = atoi (id);
     gst_buffer_unref (buf);
 
     /* for each of the streams, create a pad */
-    klass = GST_ELEMENT_GET_CLASS (filter);
-    templ = gst_element_class_get_pad_template (klass, "src_%02d");
     for (n = 0; n < num; n++) {
-      padname = g_strdup_printf ("src_%02d", n);
-      pad = gst_pad_new_from_template (templ, padname);
+      padname = g_strdup_printf ("src_%u", n);
+      pad = gst_pad_new_from_static_template (src_factory, padname);
       g_free (padname);
 
-      /* here, you would set _getcaps () and _link () functions */
+      /* here, you would set _event () and _query () functions */
+
+      /* need to activate the pad before adding */
+      gst_pad_set_active (pad, TRUE);
 
       gst_element_add_pad (element, pad);
       filter->srcpadlist = g_list_append (filter->srcpadlist, pad);
@@ -153,36 +156,37 @@ gst_my_filter_loopfunc (GstElement *element)
     for (padlist = srcpadlist;
          padlist != NULL; padlist = g_list_next (padlist)) {
       pad = GST_PAD (padlist->data);
-      gst_event_ref (event);
-      gst_pad_push (pad, GST_DATA (event));
+      gst_pad_push_event (pad, gst_event_ref (event));
     }
     gst_event_unref (event);
-    gst_element_set_eos (element);
-
+    /* pause the task here */
     return;
   }
 
   /* parse stream number and go beyond the ':' in the data */
-  num = atoi (GST_BUFFER_DATA (buf));
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  num = atoi (map.data[0]);
   if (num >= 0 && num < g_list_length (filter->srcpadlist)) {
     pad = GST_PAD (g_list_nth_data (filter->srcpadlist, num);
 
     /* magic buffer parsing foo */
-    for (n = 0; GST_BUFFER_DATA (buf)[n] != ':' &&
-                GST_BUFFER_DATA (buf)[n] != '\0'; n++) ;
-    if (GST_BUFFER_DATA (buf)[n] != '\0') {
+    for (n = 0; map.data[n] != ':' &&
+                map.data[n] != '\0'; n++) ;
+    if (map.data[n] != '\0') {
       GstBuffer *sub;
 
-      /* create subbuffer that starts right past the space. The reason
+      /* create region copy that starts right past the space. The reason
        * that we don't just forward the data pointer is because the
        * pointer is no longer the start of an allocated block of memory,
        * but just a pointer to a position somewhere in the middle of it.
        * That cannot be freed upon disposal, so we'd either crash or have
-       * a memleak. Creating a subbuffer is a simple way to solve that. */
-      sub = gst_buffer_create_sub (buf, n + 1, GST_BUFFER_SIZE (buf) - n - 1);
-      gst_pad_push (pad, GST_DATA (sub));
+       * a memleak. Creating a region copy is a simple way to solve that. */
+      sub = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
+          n + 1, map.size - n - 1);
+      gst_pad_push (pad, sub);
     }
   }
+  gst_buffer_unmap (buf, &map);
   gst_buffer_unref (buf);
 }
 ]]>
@@ -207,46 +211,52 @@ gst_my_filter_loopfunc (GstElement *element)
       where - for each elementary stream that is to be placed in the output
       system stream - one sink pad will be requested. It can also be used in
       elements with a variable number of input or outputs pads, such as the
-      <classname>tee</classname> (multi-output), <classname>switch</classname>
-      or <classname>aggregator</classname> (both multi-input) elements. At the
-      time of writing this, it is unclear to me who is responsible for cleaning
-      up the created pad and how or when that should be done. Below is a simple
-      example of an aggregator based on request pads.
+      <classname>tee</classname> (multi-output) or
+      <classname>input-selector</classname> (multi-input) elements.
+    </para>
+    <para>
+      To implement request pads, you need to provide a padtemplate with a
+      GST_PAD_REQUEST presence and implement the
+      <function>request_new_pad</function> virtual method in
+      <classname>GstElement</classname>.
+      To clean up, you will need to implement the
+      <function>release_pad</function> virtual method.
     </para>
     <programlisting>
 <![CDATA[
 static GstPad *        gst_my_filter_request_new_pad   (GstElement     *element,
                                                 GstPadTemplate *templ,
-                                                const gchar    *name);
+                                                 const gchar    *name,
+                                                 const GstCaps  *caps);
+
+static void gst_my_filter_release_pad (GstElement *element,
+                                       GstPad *pad);
+
+static GstStaticPadTemplate sink_factory =
+GST_STATIC_PAD_TEMPLATE (
+  "sink_%u",
+  GST_PAD_SINK,
+  GST_PAD_REQUEST,
+  GST_STATIC_CAPS ("ANY")
+);
 
 static void
-gst_my_filter_base_init (GstMyFilterClass *klass)
+gst_my_filter_class_init (GstMyFilterClass *klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  static GstStaticPadTemplate sink_factory =
-  GST_STATIC_PAD_TEMPLATE (
-    "sink_%d",
-    GST_PAD_SINK,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("ANY")
-  );
 [..]
   gst_element_class_add_pad_template (klass,
        gst_static_pad_template_get (&sink_factory));
-}
-
-static void
-gst_my_filter_class_init (GstMyFilterClass *klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 [..]
   element_class->request_new_pad = gst_my_filter_request_new_pad;
+  element_class->release_pad = gst_my_filter_release_pad;
 }
 
 static GstPad *
 gst_my_filter_request_new_pad (GstElement     *element,
                               GstPadTemplate *templ,
-                              const gchar    *name)
+                              const gchar    *name,
+                               const GstCaps  *caps)
 {
   GstPad *pad;
   GstMyFilterInputContext *context;
@@ -255,12 +265,25 @@ gst_my_filter_request_new_pad (GstElement     *element,
   pad = gst_pad_new_from_template (templ, name);
   gst_pad_set_element_private (pad, context);
 
-  /* normally, you would set _link () and _getcaps () functions here */
+  /* normally, you would set _chain () and _event () functions here */
 
   gst_element_add_pad (element, pad);
 
   return pad;
 }
+
+static void
+gst_my_filter_release_pad (GstElement *element,
+                           GstPad *pad)
+{
+  GstMyFilterInputContext *context;
+
+  context = gst_pad_get_element_private (pad);
+  g_free (context);
+
+  gst_element_remove_pad (element, pad);
+}
+
 ]]>
     </programlisting>
   </sect1>
index bf7932c4702fd316b075c471321fae7ecba243ee..cd88288939610a33f2a5e13ca67c6794e852fe0b 100644 (file)
@@ -1,85 +1,93 @@
 <chapter id="chapter-scheduling" xreflabel="Different scheduling modes">
   <title>Different scheduling modes</title>
   <para>
-    Scheduling is, in short, a method for making sure that every element gets
-    called once in a while to process data and prepare data for the next
-    element. Likewise, a kernel has a scheduler for processes, and your
-    brain is a very complex scheduler too in a way.
-    Randomly calling elements' chain functions won't bring us far, however, so
-    you'll understand that the schedulers in &GStreamer; are a bit more complex
-    than this. However, as a start, it's a nice picture.
+    The scheduling mode of a pad defines how data is retrieved from (source)
+    or given to (sink) pads. &GStreamer; can operate in two scheduling
+    mode, called push- and pull-mode. &GStreamer; supports elements with pads
+    in any of the scheduling modes where not all pads need to be operating
+    in the same mode.
   </para>
   <para>
     So far, we have only discussed <function>_chain ()</function>-operating
     elements, i.e. elements that have a chain-function set on their sink pad
-    and push buffers on their source pad(s). Pads (or elements) can also operate
-    in two other scheduling modes, however. In this chapter, we will discuss
-    what those scheduling modes are, how they can be enabled and in what
-    cases they are useful. The other two scheduling modes are random access
-    (<function>_getrange ()</function>-based) or task-runner (which means
-    that this element is the driving force in the pipeline) mode.
+    and push buffers on their source pad(s). We call this the push-mode
+    because a peer element will use <function>gst_pad_push ()</function> on
+    a srcpad, which will cause our <function>_chain ()</function>-function
+    to be called, which in turn causes our element to push out a buffer on
+    the source pad. The initiative to start the dataflow happens somewhere
+    upstream when it pushes out a buffer and all downstream elements get
+    scheduled when their <function>_chain ()</function>-functions are
+    called in turn.
+  </para>
+  <para>
+    Before we explain pull-mode scheduling, let's first understand how the
+    different scheduling modes are selected and activated on a pad.
   </para>
 
   <sect1 id="section-scheduling-activation"
-      xreflabel="The pad actication stage">
+      xreflabel="The pad activation stage">
     <title>The pad activation stage</title>
     <para>
-      The stage in which &GStreamer; decides in what scheduling mode the
-      various elements will operate, is called the pad-activation stage. In
-      this stage, &GStreamer; will query the scheduling capabilities (i.e.
-      it will see in what modes each particular element/pad can operate) and
-      decide on the optimal scheduling composition for the pipeline. Next,
-      each pad will be notified of the scheduling mode that was assigned to
-      it, and after that the pipeline will start running.
+      During the element state change of READY->PAUSED, the pads of an
+      element will be activated. This happens first on the source pads and
+      then on the sink pads of the element. &GStreamer; calls the
+      <function>_activate ()</function> of a pad. By default this function
+      will activate the pad in push-mode by calling
+      <function>gst_pad_activate_mode ()</function> with the GST_PAD_MODE_PUSH
+      scheduling mode.
+      It is possible to override the <function>_activate ()</function> of a pad
+      and decide on a different scheduling mode. You can know in what
+      scheduling mode a pad is activated by overriding the
+      <function>_activate_mode ()</function>-function.
     </para>
     <para>
-      Pads can be assigned one of three modes, each mode putting several
-      prerequisites on the pads. Pads should implement a notification
-      function (<function>gst_pad_set_activatepull_function ()</function> and
-      <function>gst_pad_set_activatepush_function ()</function>) to be
-      notified of the scheduling mode assignment. Also, sinkpads assigned
-      to do pull-based scheduling mode should start and stop their task
-      in this function.
+      &GStreamer; allows the different pads of an element to operate in
+      different scheduling modes. This allows for many different possible
+      use-cases. What follows is an overview of some typical use-cases.
     </para>
     <itemizedlist>
       <listitem>
         <para>
-          If all pads of an element are assigned to do
-          <quote>push</quote>-based scheduling, then this means that data
-          will be pushed by upstream elements to this element using the
-          sinkpads <function>_chain ()</function>-function. Prerequisites
-          for this scheduling mode are that a chain-function was set for
-          each sinkpad using<function>gst_pad_set_chain_function ()</function>
-          and that all downstream elements operate in the same mode. Pads are
-          assigned to do push-based scheduling in sink-to-source element
-          order, and within an element first sourcepads and then sinkpads.
-          Sink elements can operate in this mode if their sinkpad is activated
-          for push-based scheduling. Source elements cannot be chain-based.
+          If all pads of an element are activated in push-mode scheduling,
+          the element as a whole is operating in push-mode. 
+          For source elements this means that they will have to start a
+          task that pushes out buffers on the source pad to the downstream
+          elements.
+          Downstream elements will have data pushed to them by upstream elements
+          using the sinkpads <function>_chain ()</function>-function which will
+          push out buffers on the source pads.
+          Prerequisites for this scheduling mode are that a chain-function was
+          set for each sinkpad using <function>gst_pad_set_chain_function ()</function>
+          and that all downstream elements operate in the same mode.
         </para>
       </listitem>
       <listitem>
         <para>
           Alternatively, sinkpads can be the driving force behind a pipeline
-          by operating in <quote>pull</quote>-based mode, while the sourcepads
-          of the element still operate in push-based mode. In order to be the
+          by operating in pull-mode, while the sourcepads
+          of the element still operate in push-mode. In order to be the
           driving force, those pads start a <classname>GstTask</classname>
           when they are activated. This task is a thread, which
           will call a function specified by the element. When called, this
           function will have random data access (through
-          <function>gst_pad_get_range ()</function>) over all sinkpads, and
+          <function>gst_pad_pull_range ()</function>) over all sinkpads, and
           can push data over the sourcepads, which effectively means that
           this element controls data flow in the pipeline. Prerequisites for
-          this mode are that all downstream elements can act in chain-based
-          mode, and that all upstream elements allow random access (see below).
-          Source elements can be told to act in this mode if their sourcepads
-          are activated in push-based fashion. Sink elements can be told to
-          act in this mode when their sinkpads are activated in pull-mode.
+          this mode are that all downstream elements can act in push
+          mode, and that all upstream elements operate in pull-mode (see below).
+        </para>
+        <para>
+          Source pads can be activated in PULL mode by a downstream element
+          when they return GST_PAD_MODE_PULL from the GST_QUERY_SCHEDULING
+          query. Prerequisites for this scheduling mode are that a
+          getrange-function was set for the source pad using
+          <function>gst_pad_set_getrange_function ()</function>.
         </para>
       </listitem>
       <listitem>
         <para>
-          lastly, all pads in an element can be assigned to act in pull-mode.
-          too. However, contrary to the above, this does not mean that they
+          Lastly, all pads in an element can be activated in PULL-mode.
+          However, contrary to the above, this does not mean that they
           start a task on their own. Rather, it means that they are pull
           slave for the downstream element, and have to provide random data
           access to it from their <function>_get_range ()</function>-function.
           ()</function>-function was set on this pad using the function
           <function>gst_pad_set_getrange_function ()</function>. Also, if
           the element has any sinkpads, all those pads (and thereby their
-          peers) need to operate in random access mode, too. Note that the
-          element is supposed to activate those elements itself! &GStreamer;
-          will not do that for you.
+          peers) need to operate in PULL access mode, too.
+        </para>
+        <para>
+          When a sink element is activated in PULL mode, it should start a
+          task that calls <function>gst_pad_pull_range ()</function> on its
+          sinkpad. It can only do this when the upstream SCHEDULING query
+          returns support for the GST_PAD_MODE_PULL scheduling mode.
         </para>
       </listitem>
     </itemizedlist>
     <para>
-      In the next two sections, we will go closer into pull-based scheduling
+      In the next two sections, we will go closer into pull-mode scheduling
       (elements/pads driving the pipeline, and elements/pads providing random
       access), and some specific use cases will be given.
     </para>
   <sect1 id="section-scheduling-loop" xreflabel="Pads driving the pipeline">
     <title>Pads driving the pipeline</title>
     <para>
-      Sinkpads assigned to operate in pull-based mode, while none of its
-      sourcepads operate in pull-based mode (or it has no sourcepads), can
-      start a task that will drive the pipeline data flow. Within this
-      function, those elements have random access over all of their sinkpads,
-      and push data over their sourcepads. This can come in useful for
-      several different kinds of elements:
+      Sinkpads operating in pull-mode, with the sourcepads operating in
+      push-mode (or it has no sourcepads when it is a sink), can start a task
+      that will drive the pipeline data flow.
+      Within this task function, you have random access over all of the sinkpads,
+      and push data over the sourcepads.
+      This can come in useful for several different kinds of elements:
     </para>
     <itemizedlist>
       <listitem>
           Demuxers, parsers and certain kinds of decoders where data comes
           in unparsed (such as MPEG-audio or video streams), since those will
           prefer byte-exact (random) access from their input. If possible,
-          however, such elements should be prepared to operate in chain-based
+          however, such elements should be prepared to operate in push-mode
           mode, too.
         </para>
       </listitem>
       </listitem>
     </itemizedlist>
     <para>
-      In order to start this task, you will need to create it in the
-      activation function.
+      First you need to perform a SCHEDULING query to check if the upstream
+      element(s) support pull-mode scheduling. If that is possible, you
+      can activate the sinkpad in pull-mode. Inside the activate_mode
+      function you can then start the task.
     </para>
     <programlisting><!-- example-begin task.c a -->
 #include "filter.h"
 #include &lt;string.h&gt;
 
-static gboolean        gst_my_filter_activate  (GstPad      * pad);
-static gboolean        gst_my_filter_activate_pull (GstPad  * pad,
-                                        gboolean      active);
-static void    gst_my_filter_loop      (GstMyFilter * filter);
+static gboolean        gst_my_filter_activate      (GstPad      * pad,
+                                             GstObject   * parent);
+static gboolean        gst_my_filter_activate_mode (GstPad      * pad,
+                                             GstObject   * parent,
+                                             GstPadMode    mode
+                                            gboolean      active);
+static void    gst_my_filter_loop          (GstMyFilter * filter);
 
-GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
 <!-- example-end task.c a -->
-<!-- example-begin task.c b --><!--
-static gboolean        gst_my_filter_setcaps   (GstPad  *pad,
-                                        GstCaps *caps);
-static GstCaps *gst_my_filter_getcaps  (GstPad  *pad);
-
-static void
-gst_my_filter_base_init (gpointer klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  static GstElementDetails my_filter_details = {
-    "An example plugin",
-    "Example/FirstExample",
-    "Shows the basic structure of a plugin",
-    "your name <your.name@your.isp>"
-  };
-  static GstStaticPadTemplate sink_factory =
-  GST_STATIC_PAD_TEMPLATE (
-    "sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("ANY")
-  );
-  static GstStaticPadTemplate src_factory =
-  GST_STATIC_PAD_TEMPLATE (
-    "src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("ANY")
-  );
-
-  gst_element_class_set_details (element_class, &my_filter_details);
-  gst_element_class_add_pad_template (element_class,
-        gst_static_pad_template_get (&src_factory));
-  gst_element_class_add_pad_template (element_class,
-        gst_static_pad_template_get (&sink_factory));
-}
-
-static void
-gst_my_filter_class_init (GstMyFilterClass * klass)
-{
-}
---><!-- example-begin task.c b -->
 <!-- example-begin task.c c -->
 static void
 gst_my_filter_init (GstMyFilter * filter)
 {
 <!-- example-end task.c c -->
 [..]<!-- example-begin task.c d --><!--
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (filter);
-
-  filter-&gt;sinkpad = gst_pad_new_from_template (
-        gst_element_class_get_pad_template (klass, "sink"), "sink");
-  gst_pad_set_setcaps_function (filter-&gt;sinkpad, gst_my_filter_setcaps);
-  gst_pad_set_getcaps_function (filter-&gt;sinkpad, gst_my_filter_getcaps);
 --><!-- example-end task.c d -->
 <!-- example-begin task.c e -->
   gst_pad_set_activate_function (filter-&gt;sinkpad, gst_my_filter_activate);
-  gst_pad_set_activatepull_function (filter-&gt;sinkpad,
-      gst_my_filter_activate_pull);
+  gst_pad_set_activatemode_function (filter-&gt;sinkpad,
+      gst_my_filter_activate_mode);
 <!-- example-end task.c e -->
 <!-- example-begin task.c f --><!--
   gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;sinkpad);
 
-  filter-&gt;srcpad = gst_pad_new_from_template (
-        gst_element_class_get_pad_template (klass, "src"), "src");
   gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;srcpad);
 --><!-- example-end task.c f -->
 [..]<!-- example-begin task.c g -->
@@ -217,35 +184,73 @@ gst_my_filter_init (GstMyFilter * filter)
 --><!-- example-end task.c h -->
 <!-- example-begin task.c i -->
 static gboolean
-gst_my_filter_activate (GstPad * pad)
+gst_my_filter_activate (GstPad * pad, GstObject * parent)
 {
-  if (gst_pad_check_pull_range (pad)) {
-    return gst_pad_activate_pull (pad, TRUE);
-  } else {
-    return FALSE;
+  GstQuery *query;
+  gboolean pull_mode;
+
+  /* first check what upstream scheduling is supported */
+  query = gst_query_new_scheduling ();
+
+  if (!gst_pad_peer_query (pad, query)) {
+    gst_query_unref (query);
+    goto activate_push;
+  }
+
+  /* see if pull-mode is supported */
+  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
+  gst_query_unref (query);
+
+  if (!pull_mode)
+    goto activate_push;
+
+  /* now we can activate in pull-mode. GStreamer will also
+   * activate the upstream peer in pull-mode */
+  return gst_pad_activate_mode (pad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+  {
+    /* something not right, we fallback to push-mode */
+    return gst_pad_activate_mode (pad, GST_PAD_MODE_PUSH, TRUE);
   }
 }
 
 static gboolean
-gst_my_filter_activate_pull (GstPad  *pad,
-                            gboolean active)
+gst_my_filter_activate_pull (GstPad    * pad,
+                            GstObject * parent,
+                            GstPadMode  mode,
+                            gboolean    active)
 {
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
+  gboolean res;
+  GstMyFilter *filter = GST_MY_FILTER (parent);
 
-  if (active) {
-    filter->offset = 0;
-    return gst_pad_start_task (pad,
-        (GstTaskFunction) gst_my_filter_loop, filter);
-  } else {
-    return gst_pad_stop_task (pad);
+  switch (mode) {
+    case GST_PAD_MODE_PUSH:
+      res = TRUE;
+      break;
+    case GST_PAD_MODE_PULL:
+      if (active) {
+        filter->offset = 0;
+        res = gst_pad_start_task (pad,
+            (GstTaskFunction) gst_my_filter_loop, filter, NULL);
+      } else {
+        res = gst_pad_stop_task (pad);
+      }
+      break;
+    default:
+      /* unknown scheduling mode */
+      res = FALSE;
+      break;
   }
+  return res;
 }
     <!-- example-end task.c i --></programlisting>
     <para>
       Once started, your task has full control over input and output. The
       most simple case of a task function is one that reads input and pushes
       that over its source pad. It's not all that useful, but provides some
-      more flexibility than the old chain-based case that we've been looking
+      more flexibility than the old push-mode case that we've been looking
       at so far.
     </para>
     <programlisting><!-- example-begin task.c j -->
@@ -259,7 +264,7 @@ gst_my_filter_loop (GstMyFilter * filter)
   GstFormat fmt = GST_FORMAT_BYTES;
   GstBuffer *buf = NULL;
 
-  if (!gst_pad_query_duration (filter-&gt;sinkpad, &amp;fmt, &amp;len)) {
+  if (!gst_pad_query_duration (filter-&gt;sinkpad, fmt, &amp;len)) {
     GST_DEBUG_OBJECT (filter, "failed to query duration, pausing");
     goto stop;
   }
@@ -307,16 +312,15 @@ stop:
     <title>Providing random access</title>
     <para>
       In the previous section, we have talked about how elements (or pads)
-      that are assigned to drive the pipeline using their own task, have
-      random access over their sinkpads. This means that all elements linked
-      to those pads (recursively) need to provide random access functions.
-      Requesting random access is done using the function
-      <function>gst_pad_pull_range ()</function>, which requests a buffer of
-      a specified size and offset. Source pads implementing and assigned to
-      do random access will have a <function>_get_range ()</function>-function
-      set using <function>gst_pad_set_getrange_function ()</function>, and
-      that function will be called when the peer pad requests some data. The
-      element is then responsible for seeking to the right offset and
+      that are activated to drive the pipeline using their own task, must use
+      pull-mode scheduling on their sinkpads. This means that all pads linked
+      to those pads need to be activated in pull-mode.
+      Source pads activated in pull-mode must implement a
+      <function>_get_range ()</function>-function set using
+      <function>gst_pad_set_getrange_function ()</function>, and
+      that function will be called when the peer pad requests some data with
+      <function>gst_pad_pull_range ()</function>.
+      The element is then responsible for seeking to the right offset and
       providing the requested data. Several elements can implement random
       access:
     </para>
@@ -329,17 +333,14 @@ stop:
       </listitem>
       <listitem>
         <para>
-          Filters that would like to provide a pull-based-like scheduling
-          mode over the whole pipeline. Note that elements assigned to do
-          random access-based scheduling are themselves responsible for
-          assigning this scheduling mode to their upstream peers! &GStreamer;
-          will not do that for you.
+          Filters that would like to provide a pull-mode scheduling
+          over the whole pipeline. 
         </para>
       </listitem>
       <listitem>
         <para>
           Parsers who can easily provide this by skipping a small part of
-          their input and are thus essentially "forwarding" random access
+          their input and are thus essentially "forwarding" getrange
           requests literally without any own processing involved. Examples
           include tag readers (e.g. ID3) or single output parsers, such as
           a WAVE parser.
@@ -354,15 +355,16 @@ stop:
 #include "filter.h"
 static GstFlowReturn
                gst_my_filter_get_range (GstPad     * pad,
+                                        GstObject  * parent,
                                         guint64      offset,
                                         guint        length,
                                         GstBuffer ** buf);
 
-GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
 <!-- example-end range.c a -->
 <!-- example-begin range.c b --><!--
 static void
-gst_my_filter_base_init (gpointer klass)
+gst_my_filter_class_init (gpointer klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
   static GstElementDetails my_filter_details = {
@@ -393,25 +395,32 @@ gst_my_filter_class_init (GstMyFilterClass * klass)
 static void
 gst_my_filter_init (GstMyFilter * filter)
 {
+<!-- example-end task.c c --><!--
   GstElementClass *klass = GST_ELEMENT_GET_CLASS (filter);
 
   filter-&gt;srcpad = gst_pad_new_from_template (
         gst_element_class_get_pad_template (klass, "src"), "src");
+-->
+[..]<!-- example-begin task.c d --><!--
+--><!-- example-end task.c d -->
+<!-- example-begin task.c e -->
   gst_pad_set_getrange_function (filter-&gt;srcpad,
       gst_my_filter_get_range);
+<!-- example-end range.c c --><!--
   gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;srcpad);
-<!-- example-end range.c c -->
+-->
 [..]<!-- example-begin range.c d -->
 }
 
-static gboolean
+static GstFlowReturn
 gst_my_filter_get_range (GstPad     * pad,
+                        GstObject  * parent,
                         guint64      offset,
                         guint        length,
                         GstBuffer ** buf)
 {
 <!-- example-end range.c d -->
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
+  GstMyFilter *filter = GST_MY_FILTER (parent);
 
   [.. here, you would fill *buf ..]
 <!-- example-begin range.c e -->
@@ -423,15 +432,14 @@ gst_my_filter_get_range (GstPad     * pad,
     --><!-- example-end range.c f --></programlisting>
     <para>
       In practice, many elements that could theoretically do random access,
-      may in practice often be assigned to do push-based scheduling anyway,
+      may in practice often be activated in push-mode scheduling anyway,
       since there is no downstream element able to start its own task.
       Therefore, in practice, those elements should implement both a
       <function>_get_range ()</function>-function and a <function>_chain
       ()</function>-function (for filters and parsers) or a <function>_get_range
       ()</function>-function and be prepared to start their own task by
       providing <function>_activate_* ()</function>-functions (for
-      source elements), so that &GStreamer; can decide for the optimal
-      scheduling mode and have it just work fine in practice.
+      source elements).
     </para>
   </sect1>
 </chapter>
index 7c91c0193cef6faee1b7fc255c55457130866138..082d7325161f2422df3bc2c827039918ef17fe8d 100644 (file)
       of the type the tag was registered as (the API documentation for each
       predefined tag should contain the type). Be sure to use functions like
       <function>gst_value_transform ()</function>
-      to make sure that your data is of the right type. After data reading, the
-      application can be notified of the new taglist by calling
-      <function>gst_element_found_tags ()</function> or
-      <function>gst_element_found_tags_for_pad ()</function> (if they only
-      refer to a specific sub-stream). These functions will post a tag message
-      on the pipeline's GstBus for the application to pick up, but also send
-      tag events downstream, either over all source pad or the pad specified.
+      to make sure that your data is of the right type.
+      After data reading, you can send the tags downstream with the TAG event.
+      When the TAG event reaches the sink, it will post the TAG message on
+      the pipeline's GstBus for the application to pick up.
     </para>
     <para>
       We currently require the core to know the GType of tags before they are
@@ -112,7 +109,7 @@ gst_my_filter_class_init (GstMyFilterClass *klass)
       TagSetter interface (which is just a layer). Pipeline tags are tags
       provided to the element from within the pipeline. The element receives
       such tags via the <symbol>GST_EVENT_TAG</symbol> event, which means
-      that tags writers should automatically be event aware. The tag writer is
+      that tags writers should implment an event handler. The tag writer is
       responsible for combining all these three into one list and writing them
       to the output stream.
     </para>
@@ -122,6 +119,10 @@ gst_my_filter_class_init (GstMyFilterClass *klass)
       setter so applications can set tags, and retrieves pipeline tags from
       incoming events.
     </para>
+    <para>
+      Warning, this example is outdated and doesn't work with the 1.0 version
+      of &GStreamer; anymore.
+    </para>
     <programlisting>
 <![CDATA[
 GType
@@ -143,7 +144,6 @@ gst_my_filter_get_type (void)
 static void
 gst_my_filter_init (GstMyFilter *filter)
 {
-  GST_FLAG_SET (filter, GST_ELEMENT_EVENT_AWARE);
 [..]
 }
 
@@ -165,14 +165,18 @@ gst_my_filter_write_tag (const GstTagList *taglist,
   g_value_init (&to, G_TYPE_STRING);
 
   for (n = 0; n < num_values; n++) {
+    guint8 * data;
+    gsize size;
+
     from = gst_tag_list_get_value_index (taglist, tagname, n);
     g_value_transform (from, &to);
 
-    buf = gst_buffer_new ();
-    GST_BUFFER_DATA (buf) = g_strdup_printf ("%s:%s", tagname,
-                                            g_value_get_string (&to));
-    GST_BUFFER_SIZE (buf) = strlen (GST_BUFFER_DATA (buf));
-    gst_pad_push (filter->srcpad, GST_DATA (buf));
+    data = g_strdup_printf ("%s:%s", tagname,
+               g_value_get_string (&to));
+    size = strlen (data);
+
+    buf = gst_buffer_new_wrapped (data, size);
+    gst_pad_push (filter->srcpad, buf);
   }
 
   g_value_unset (&to);
@@ -223,8 +227,7 @@ gst_my_filter_task_func (GstElement *element)
   gst_tag_list_foreach (taglist, gst_my_filter_write_tag, filter);
 
   /* signal EOS */
-  gst_pad_push (filter->srcpad, GST_DATA (gst_event_new (GST_EVENT_EOS)));
-  gst_element_set_eos (element);
+  gst_pad_push (filter->srcpad, gst_event_new (GST_EVENT_EOS));
 }
 ]]>
     </programlisting>
index a5b25b5d2251e98d76f323ba0e1b851a41821695..9898476d7fdc778034e02a71201f556b16c72457 100644 (file)
     <para>
       If you need a new format that has not yet been defined in our <xref
       linkend="section-types-definitions"/>, you will want to have some general
-      guidelines on mimetype naming, properties and such. A mimetype would
-      ideally be one defined by IANA; else, it should be in the form
-      type/x-name, where type is the sort of data this mimetype handles (audio,
-      video, ...) and name should be something specific for this specific type.
-      Audio and video mimetypes should try to support the general audio/video
-      properties (see the list), and can use their own properties, too. To get
-      an idea of what properties we think are useful, see (again) the list.
+      guidelines on media type naming, properties and such. A media type would
+      ideally be equivalent to the Mime-type defined by IANA; else, it should
+      be in the form type/x-name, where type is the sort of data this media type
+      handles (audio, video, ...) and name should be something specific for
+      this specific type.  Audio and video media types should try to support the
+      general audio/video properties (see the list), and can use their own
+      properties, too. To get an idea of what properties we think are useful,
+      see (again) the list.
     </para>
     <para>
       Take your time to find the right set of properties for your type. There
@@ -206,7 +207,7 @@ plugin_init (GstPlugin *plugin)
 
         <thead>
           <row>
-            <entry>Mime Type</entry>
+            <entry>Media Type</entry>
             <entry>Description</entry>
             <entry>Property</entry>
             <entry>Property Type</entry>
@@ -634,7 +635,7 @@ plugin_init (GstPlugin *plugin)
 
         <thead>
           <row>
-            <entry>Mime Type</entry>
+            <entry>Media Type</entry>
             <entry>Description</entry>
             <entry>Property</entry>
             <entry>Property Type</entry>
@@ -878,7 +879,7 @@ plugin_init (GstPlugin *plugin)
             <entry>1, 2 or 4</entry>
             <entry>
               Version of the MPEG codec that this stream was encoded with.
-              Note that we have different mimetypes for 3ivx, XviD, DivX and
+              Note that we have different media types for 3ivx, XviD, DivX and
               "standard" ISO MPEG-4. This is <emphasis>not</emphasis> a good
               thing and we're fully aware of this. However, we do not have a
               solution yet.
@@ -1021,7 +1022,7 @@ plugin_init (GstPlugin *plugin)
             <entry></entry>
             <entry>
               There are currently no specific properties defined or needed for
-              this type. Note that we have different mimetypes for VP-3 and
+              this type. Note that we have different media types for VP-3 and
               Theora, which is not necessarily a good idea. This could probably
               be improved.
             </entry>
@@ -1132,7 +1133,7 @@ plugin_init (GstPlugin *plugin)
 
         <thead>
           <row>
-            <entry>Mime Type</entry>
+            <entry>Media Type</entry>
             <entry>Description</entry>
             <entry>Property</entry>
             <entry>Property Type</entry>
@@ -1281,7 +1282,7 @@ plugin_init (GstPlugin *plugin)
 
         <thead>
           <row>
-            <entry>Mime Type</entry>
+            <entry>Media Type</entry>
             <entry>Description</entry>
             <entry>Property</entry>
             <entry>Property Type</entry>
@@ -1317,7 +1318,7 @@ plugin_init (GstPlugin *plugin)
 
         <thead>
           <row>
-            <entry>Mime Type</entry>
+            <entry>Media Type</entry>
             <entry>Description</entry>
             <entry>Property</entry>
             <entry>Property Type</entry>
index 503031fc111f6ba9ed352f02db77693eeb1540cc..336d3da7620c241bbd4c11631a26c9a8fae378e1 100644 (file)
@@ -133,7 +133,7 @@ gst_pad_set_event_func (myelement->srcpad,
       <listitem>
         <para>
           Elements should make sure they forward events they do not
-          handle with gst_pad_event_default (pad, event) instead of
+          handle with gst_pad_event_default (pad, parent, event) instead of
           just dropping them. Events should never be dropped unless
           specifically intended.
         </para>
@@ -141,20 +141,10 @@ gst_pad_set_event_func (myelement->srcpad,
       <listitem>
         <para>
           Elements should make sure they forward queries they do not
-          handle with gst_pad_query_default (pad, query) instead of
+          handle with gst_pad_query_default (pad, parent, query) instead of
           just dropping them.
         </para>
       </listitem>
-      <listitem>
-        <para>
-          Elements should use gst_pad_get_parent() in event and query
-          functions, so that they hold a reference to the element while they
-          are operating. Note that gst_pad_get_parent() increases the
-          reference count of the element, so you must be very careful to call
-          gst_object_unref (element) before returning from your query or
-          event function, otherwise you will leak memory.
-        </para>
-      </listitem>
     </itemizedlist>
   </sect1>
 
@@ -168,8 +158,8 @@ gst_pad_set_event_func (myelement->srcpad,
           tool to show that your element is finished. Applications such as
           Rhythmbox and Totem (for GNOME) or AmaroK (for KDE)
           <emphasis>are</emphasis>. <command>gst-launch</command> will not
-          test various things such as proper clean-up on reset, interrupt
-          event handling, querying and so on.
+          test various things such as proper clean-up on reset, event
+          handling, querying and so on.
         </para>
       </listitem>
       <listitem>
index d7a3ec4a68af0dbc1205778275194ce44b7ca6e2..ab457a8ce7f6b104aed5ac973fd986d985707035 100644 (file)
     </itemizedlist>
   </sect1>
 </chapter>
+
+<chapter id="chapter-porting-1_0">
+  <title>Porting 0.10 plug-ins to 1.0</title>
+  <para>
+    You can find the list of changes in the
+    <ulink url="http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/random/porting-to-1.0.txt">Porting to 1.0</ulink> document.
+  </para>
+</chapter>
index 3476005a9850326342981ccbe7e2d6c62e6202b7..77d78ce73f3f08827e6e49300a64789bc91ad9e8 100644 (file)
@@ -113,8 +113,8 @@ Resolving deltas: 100% (240/240), done.
     </note>
     <para>
       The last command creates two files:
-      <filename>gstexamplefilter.c</filename> and
-      <filename>gstexamplefilter.h</filename>.
+      <filename>gstmyfilter.c</filename> and
+      <filename>gstmyfilter.h</filename>.
     </para>
     <note>
       <para>
@@ -135,9 +135,17 @@ Resolving deltas: 100% (240/240), done.
         Be aware that by default <filename>autogen.sh</filename> and 
         <filename>configure</filename> would choose <filename class="directory">/usr/local</filename>
         as a default location. One would need to add
-        <filename class="directory">/usr/local/lib/gstreamer-0.10</filename>
+        <filename class="directory">/usr/local/lib/gstreamer-1.0</filename>
         to <symbol>GST_PLUGIN_PATH</symbol> in order to make the new plugin
-        show up in gstreamer.
+        show up in a gstreamer that's been installed from packages.
+      </para>
+    </note>
+    <note>
+      <para>
+        FIXME: this section is slightly outdated. gst-template is still useful
+        as an example for a minimal plugin build system skeleton. However, for
+        creating elements the tool gst-element-maker from gst-plugins-bad is
+        recommended these days.
       </para>
     </note>
   </sect1>
@@ -206,17 +214,19 @@ GType gst_my_filter_get_type (void);
     <programlisting><!-- example-begin boilerplate.c a -->
 #include "filter.h"
 
-GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
     <!-- example-end boilerplate.c a --></programlisting>
   </sect1>
 
   <!-- ############ sect1 ############# -->
 
   <sect1 id="section-boiler-details">
-    <title>GstElementDetails</title>
+    <title>Element metadata</title>
     <para>
-      The GstElementDetails structure provides a hierarchical type for element
-      information. The entries are:
+      The Element metadata provides extra element information. It is configured
+      with <function>gst_element_class_set_metadata</function> or
+      <function>gst_element_class_set_static_metadata</function> which takes the
+      following parameters:
     </para>
     <itemizedlist>
       <listitem><para>
@@ -234,33 +244,32 @@ GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
     <para>
       For example:
     </para>
-    <programlisting><!-- example-begin boilerplate.c b -->
-static const GstElementDetails my_filter_details = {
+    <programlisting>
+gst_element_class_set_static_metadata (klass,
   "An example plugin",
   "Example/FirstExample",
   "Shows the basic structure of a plugin",
-  "your name &lt;your.name@your.isp&gt;"
-};
-    <!-- example-end boilerplate.c b --></programlisting>
+  "your name &lt;your.name@your.isp&gt;");
+    </programlisting>
     <para>
       The element details are registered with the plugin during
-      the <function>_base_init ()</function> function, which is part of
-      the GObject system. The <function>_base_init ()</function> function
+      the <function>_class_init ()</function> function, which is part of
+      the GObject system. The <function>_class_init ()</function> function
       should be set for this GObject in the function where you register
       the type with GLib.
     </para>
     <programlisting><!-- example-begin boilerplate.c c -->
 static void
-gst_my_filter_base_init (gpointer klass)
+gst_my_filter_class_init (GstMyFilterClass * klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 <!-- example-end boilerplate.c c -->
-  static const GstElementDetails my_filter_details = {
-[..]
-  };
-
 [..]<!-- example-begin boilerplate.c d -->
-  gst_element_class_set_details (element_class, &amp;my_filter_details);
+  gst_element_class_set_static_metadata (element_klass,
+    "An example plugin",
+    "Example/FirstExample",
+    "Shows the basic structure of a plugin",
+    "your name &lt;your.name@your.isp&gt;");
 <!-- example-end boilerplate.c d -->
 }
     </programlisting>
@@ -317,13 +326,19 @@ GST_STATIC_PAD_TEMPLATE (
       </programlisting>
     <para>
       Those pad templates are registered during the
-      <function>_base_init ()</function> function. Pads are created from these
-      templates in the element's <function>_init ()</function> function using
-      <function>gst_pad_new_from_template ()</function>. The template can be
-      retrieved from the element class using
-      <function>gst_element_class_get_pad_template ()</function>. See below
-      for more details on this. In order to create a new pad from this
-      template using <function>gst_pad_new_from_template ()</function>, you
+      <function>_class_init ()</function> function with the
+      <function>gst_element_class_add_pad_template ()</function>. For this
+      function you need a handle the the <classname>GstPadTemplate</classname>
+      which you can create from the static pad template with
+      <function>gst_static_pad_template_get ()</function>. See below for more
+      details on this.
+    </para>
+    <para>
+      Pads are created from these static templates in the element's 
+      <function>_init ()</function> function using
+      <function>gst_pad_new_from_static_template ()</function>.
+      In order to create a new pad from this
+      template using <function>gst_pad_new_from_static_template ()</function>, you
       will need to declare the pad template as a global variable. More on
       this subject in <xref linkend="chapter-building-pads"/>.
     </para>
@@ -332,7 +347,7 @@ static GstStaticPadTemplate sink_factory = [..],
     src_factory = [..];
 
 static void
-gst_my_filter_base_init (gpointer klass)
+gst_my_filter_class_init (GstMyFilterClass * klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
 [..]
@@ -344,11 +359,6 @@ gst_my_filter_base_init (gpointer klass)
 }
 <!-- example-end boilerplate.c g -->
 <!-- example-begin boilerplate.c h --><!--
-static void
-gst_my_filter_class_init (GstMyFilterClass * klass)
-{
-}
-
 static void
 gst_my_filter_init (GstMyFilter * filter)
 {
@@ -360,14 +370,15 @@ gst_my_filter_init (GstMyFilter * filter)
       The last argument in a template is its type
       or list of supported types. In this example, we use 'ANY', which means
       that this element will accept all input. In real-life situations, you
-      would set a mimetype and optionally a set of properties to make sure
+      would set a media type and optionally a set of properties to make sure
       that only supported input will come in. This representation should be
-      a string that starts with a mimetype, then a set of comma-separates
+      a string that starts with a media type, then a set of comma-separates
       properties with their supported values. In case of an audio filter that
       supports raw integer 16-bit audio, mono or stereo at any samplerate, the
       correct template would look like this:
     </para>
     <programlisting>
+<![CDATA[
 static GstStaticPadTemplate sink_factory =
 GST_STATIC_PAD_TEMPLATE (
   "sink",
@@ -380,6 +391,7 @@ GST_STATIC_PAD_TEMPLATE (
       "rate = (int) [ 8000, 96000 ]"
   )
 );
+]]>
     </programlisting>
     <para>
       Values surrounded by curly brackets (<quote>{</quote> and
@@ -397,10 +409,8 @@ GST_STATIC_PAD_TEMPLATE (
   <sect1 id="section-boiler-constructors">
     <title>Constructor Functions</title>
     <para>
-      Each element has three functions which are used for construction of an
-      element. These are the <function>_base_init()</function> function which
-      is meant to initialize class and child class properties during each new
-      child class creation; the <function>_class_init()</function> function,
+      Each element has two functions which are used for construction of an
+      element. The <function>_class_init()</function> function,
       which is used to initialise the class only once (specifying what signals,
       arguments and virtual functions the class has and setting up global
       state); and the <function>_init()</function> function, which is used to
@@ -420,7 +430,9 @@ GST_STATIC_PAD_TEMPLATE (
       Also, in this function, any supported element type in the plugin should
       be registered.
     </para>
-    <programlisting><!-- example-begin register.func -->
+    <programlisting>
+<!-- example-begin register.func -->
+<![CDATA[
 static gboolean
 plugin_init (GstPlugin *plugin)
 {
@@ -440,7 +452,9 @@ GST_PLUGIN_DEFINE (
   "GStreamer",
   "http://gstreamer.net/"
 )
-    <!-- example-end register.func --></programlisting>
+]]>
+<!-- example-end register.func -->
+    </programlisting>
     <para>
       Note that the information returned by the plugin_init() function will be
       cached in a central registry. For this reason, it is important that the
index a9460804fc319b2c1e6e28e192a0b179d8999b94..137ca496322d1252d730e9539524628f08773948 100644 (file)
 #include "init.func"
 #include "caps.func"
 static gboolean
-gst_my_filter_event (GstPad * pad, GstEvent * event)
+gst_my_filter_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
-  return gst_pad_event_default (pad, event);
+  return gst_pad_event_default (pad, parent, event);
 }
 --><!-- example-end chain.c a -->
 <!-- example-begin chain.c b -->
+static GstFlowReturn gst_my_filter_chain (GstPad    *pad,
+                                          GstObject *parent,
+                                          GstBuffer *buf);
+
+[..]
+
+static void
+gst_my_filter_init (GstMyFilter * filter)
+{
+[..]
+  /* configure chain function on the pad before adding
+   * the pad to the element */
+  gst_pad_set_chain_function (filter-&gt;sinkpad,
+      gst_my_filter_chain);
+[..]
+}
+
 static GstFlowReturn
 gst_my_filter_chain (GstPad    *pad,
+                     GstObject *parent,
                     GstBuffer *buf)
 {
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
+  GstMyFilter *filter = GST_MY_FILTER (parent);
 
   if (!filter->silent)
-    g_print ("Have data of size %u bytes!\n", GST_BUFFER_SIZE (buf));
+    g_print ("Have data of size %" G_GSIZE_FORMAT" bytes!\n",
+        gst_buffer_get_size (buf));
 
   return gst_pad_push (filter->srcpad, buf);
 }
@@ -44,10 +63,12 @@ gst_my_filter_change_state (GstElement * element, GstStateChange transition)
   <para>
     Obviously, the above doesn't do much useful. Instead of printing that the
     data is in, you would normally process the data there. Remember, however,
-    that buffers are not always writeable. In more advanced elements (the ones
-    that do event processing), you may want to additionally specify an event
-    handling function, which will be called when stream-events are sent (such
-    as end-of-stream, newsegment, tags, etc.).
+    that buffers are not always writeable.
+  </para>
+  <para>
+    In more advanced elements (the ones that do event processing), you may want
+    to additionally specify an event handling function, which will be called
+    when stream-events are sent (such as caps, end-of-stream, newsegment, tags, etc.).
   </para>
   <programlisting>
 static void
@@ -55,7 +76,7 @@ gst_my_filter_init (GstMyFilter * filter)
 {
 [..]
   gst_pad_set_event_function (filter-&gt;sinkpad,
-      gst_my_filter_event);
+      gst_my_filter_sink_event);
 [..]
 }
 <!-- example-begin chain2.c a --><!--
@@ -77,12 +98,16 @@ gst_my_filter_process_data (GstMyFilter * filter, const GstBuffer * buf)
 --><!-- example-end chain.func a -->
 <!-- example-begin chain.func b -->
 static gboolean
-gst_my_filter_event (GstPad   *pad,
-                    GstEvent *event)
+gst_my_filter_sink_event (GstPad    *pad,
+                         GstObject *parent,
+                         GstEvent  *event)
 {
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
+  GstMyFilter *filter = GST_MY_FILTER (parent);
 
   switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+      /* we should handle the format here */
+      break;
     case GST_EVENT_EOS:
       /* end-of-stream, we should close down all stream leftovers here */
       gst_my_filter_stop_processing (filter);
@@ -91,14 +116,15 @@ gst_my_filter_event (GstPad   *pad,
       break;
   }
 
-  return gst_pad_event_default (pad, event);
+  return gst_pad_event_default (pad, parent, event);
 }
 
 static GstFlowReturn
 gst_my_filter_chain (GstPad    *pad,
+                    GstObject *parent,
                     GstBuffer *buf)
 {
-  GstMyFilter *filter = GST_MY_FILTER (gst_pad_get_parent (pad));
+  GstMyFilter *filter = GST_MY_FILTER (parent);
   GstBuffer *outbuf;
 
   outbuf = gst_my_filter_process_data (filter, buf);
diff --git a/docs/pwg/building-eventfn.xml b/docs/pwg/building-eventfn.xml
new file mode 100644 (file)
index 0000000..b72e376
--- /dev/null
@@ -0,0 +1,72 @@
+
+<!-- ############ chapter ############# -->
+
+<chapter id="chapter-building-eventfn">
+  <title>The event function</title>
+  <para>
+    The event function notifies you of special events that happen in
+    the datastream (such as caps, end-of-stream, newsegment, tags, etc.).
+    Events can travel both upstream and downstream, so you can receive them
+    on sink pads as well as source pads. 
+  </para>
+  <para>
+    Below follows a very simple event function that we install on the sink
+    pad of our element.
+  </para>
+  <programlisting>
+<![CDATA[
+static gboolean gst_my_filter_sink_event (GstPad    *pad,
+                                          GstObject *parent,
+                                          GstEvent  *event);
+
+[..]
+
+static void
+gst_my_filter_init (GstMyFilter * filter)
+{
+[..]
+  /* configure event function on the pad before adding
+   * the pad to the element */
+  gst_pad_set_event_function (filter->sinkpad,
+      gst_my_filter_sink_event);
+[..]
+}
+
+static gboolean
+gst_my_filter_sink_event (GstPad    *pad,
+                         GstObject *parent,
+                         GstEvent  *event)
+{
+  gboolean ret;
+  GstMyFilter *filter = GST_MY_FILTER (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+      /* we should handle the format here */
+
+      /* push the event downstream */
+      ret = gst_pad_push_event (filter->srcpad, event);
+      break;
+    case GST_EVENT_EOS:
+      /* end-of-stream, we should close down all stream leftovers here */
+      gst_my_filter_stop_processing (filter);
+
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+    default:
+      /* just call the default handler */
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+  return ret;
+}
+]]>
+  </programlisting>
+  <para>
+    It is a good idea to call the default event handler
+    <function>gst_pad_event_default ()</function> for unknown events.
+    Depending on the event type, the default handler will forward 
+    the event or simply unref it. The CAPS event is by default not
+    forwarded so we need to do this in the event handler ourselves.
+  </para>
+</chapter>
index 06b32737926424997e407b53ab88823cf5569bbb..5e3164859691ed6a94178dce43d48d5e6ddd1566 100644 (file)
@@ -8,17 +8,18 @@
     of your element, and that makes them a very important item in the process
     of element creation. In the boilerplate code, we have seen how static pad
     templates take care of registering pad templates with the element class.
-    Here, we will see how to create actual elements, use a <function>_setcaps
-    ()</function>-functions to configure for a particular format and how to
+    Here, we will see how to create actual elements, use an <function>_event
+    ()</function>-function to configure for a particular format and how to
     register functions to let data flow through the element.
   </para>
   <para>
     In the element <function>_init ()</function> function, you create the pad
     from the pad template that has been registered with the element class in
-    the <function>_base_init ()</function> function. After creating the pad,
-    you have to set a <function>_setcaps ()</function> function pointer and
-    optionally a <function>_getcaps ()</function> function pointer. Also, you
-    have to set a <function>_chain ()</function> function pointer.
+    the <function>_class_init ()</function> function. After creating the pad,
+    you have to set a <function>_chain ()</function> function pointer that will
+    receive and process the input data on the sinkpad.
+    You can optionally also set an <function>_event ()</function> function
+    pointer and a <function>_query ()</function> function pointer.
     Alternatively, pads can also operate in looping mode, which means that they
     can pull data themselves. More on this topic later. After that, you have
     to register the pad with the element. This happens like this:
 static GstStateChangeReturn
 gst_my_filter_change_state (GstElement * element, GstStateChange transition);
 
-GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
 
 static void
-gst_my_filter_base_init (gpointer klass)
+gst_my_filter_class_init (gpointer klass)
 {
   GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  static GstElementDetails my_filter_details = {
-    "An example plugin",
-    "Example/FirstExample",
-    "Shows the basic structure of a plugin",
-    "your name <your.name@your.isp>"
-  };
-  static GstStaticPadTemplate sink_factory =
+  static GstStaticPadTemplate sink_template =
   GST_STATIC_PAD_TEMPLATE (
     "sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS ("ANY")
   );
-  static GstStaticPadTemplate src_factory =
+  static GstStaticPadTemplate src_template =
   GST_STATIC_PAD_TEMPLATE (
     "src",
     GST_PAD_SRC,
@@ -57,11 +52,16 @@ gst_my_filter_base_init (gpointer klass)
     GST_STATIC_CAPS ("ANY")
   );
 
-  gst_element_class_set_details (element_class, &my_filter_details);
+  gst_element_class_set_static_metadata (element_class,
+    "An example plugin",
+    "Example/FirstExample",
+    "Shows the basic structure of a plugin",
+    "your name <your.name@your.isp>");
+
   gst_element_class_add_pad_template (element_class,
-        gst_static_pad_template_get (&src_factory));
+        gst_static_pad_template_get (&src_template));
   gst_element_class_add_pad_template (element_class,
-        gst_static_pad_template_get (&sink_factory));
+        gst_static_pad_template_get (&sink_template));
 }
 
 static void
@@ -70,43 +70,45 @@ gst_my_filter_class_init (GstMyFilterClass * klass)
   GST_ELEMENT_CLASS (klass)->change_state = gst_my_filter_change_state;
 }
 --><!-- example-end init.func a -->
-<!-- example-begin init.func b -->
-static gboolean                gst_my_filter_setcaps   (GstPad        *pad,
-                                                GstCaps       *caps);
-static GstFlowReturn   gst_my_filter_chain     (GstPad        *pad,
-                                                GstBuffer     *buf);
-<!-- example-end init.func b -->
 <!-- example-begin init.func c --><!--
-static GstCaps *       gst_my_filter_getcaps   (GstPad        *pad);
-static gboolean                gst_my_filter_event     (GstPad        *pad,
-                                                GstEvent      *event);
+static GstFlowReturn   gst_my_filter_chain      (GstPad        *pad,
+                                                  GstObject     *parent,
+                                                 GstBuffer     *buf);
+static gboolean                gst_my_filter_sink_event (GstPad        *pad,
+                                                  GstObject     *parent,
+                                                 GstEvent      *event);
+static gboolean        gst_my_filter_src_query  (GstPad        *pad,
+                                                  GstObject     *parent,
+                                                  GstQuery      *query);
+static gboolean        gst_my_filter_sink_query (GstPad        *pad,
+                                                  GstObject     *parent,
+                                                  GstQuery      *query);
 --><!-- example-end init.func c -->
 <!-- example-begin init.func d -->
 
 static void
-gst_my_filter_init (GstMyFilter *filter, GstMyFilterClass *filter_klass)
+gst_my_filter_init (GstMyFilter *filter)
 {
-  GstElementClass *klass = GST_ELEMENT_CLASS (filter_klass);
-
   /* pad through which data comes in to the element */
-  filter-&gt;sinkpad = gst_pad_new_from_template (
-       gst_element_class_get_pad_template (klass, "sink"), "sink");
-  gst_pad_set_setcaps_function (filter-&gt;sinkpad, gst_my_filter_setcaps);
-  gst_pad_set_chain_function (filter-&gt;sinkpad, gst_my_filter_chain);
+  filter-&gt;sinkpad = gst_pad_new_from_static_template (
+       &amp;sink_template, "sink");
+  /* pads are configured here with gst_pad_set_*_function () */
 <!-- example-end init.func d -->
 <!-- example-begin init.func e --><!--
-  gst_pad_set_getcaps_function (filter-&gt;sinkpad, gst_my_filter_getcaps);
-  gst_pad_set_event_function (filter-&gt;sinkpad, gst_my_filter_event);
+  gst_pad_set_chain_function (filter-&gt;sinkpad, gst_my_filter_chain);
+  gst_pad_set_event_function (filter-&gt;sinkpad, gst_my_filter_sink_event);
+  gst_pad_set_query_function (filter-&gt;sinkpad, gst_my_filter_sink_query);
 --><!-- example-end init.func e -->
 <!-- example-begin init.func f -->
   gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;sinkpad);
 
   /* pad through which data goes out of the element */
-  filter-&gt;srcpad = gst_pad_new_from_template (
-       gst_element_class_get_pad_template (klass, "src"), "src");
+  filter-&gt;srcpad = gst_pad_new_from_static_template (
+       &amp;src_template, "src");
+  /* pads are configured here with gst_pad_set_*_function () */
 <!-- example-end init.func f -->
 <!-- example-begin init.func g --><!--
-  gst_pad_set_getcaps_function (filter-&gt;srcpad, gst_my_filter_getcaps);
+  gst_pad_set_query_function (filter-&gt;srcpad, gst_my_filter_src_query);
 --><!-- example-end init.func g -->
 <!-- example-begin init.func h -->
   gst_element_add_pad (GST_ELEMENT (filter), filter-&gt;srcpad);
@@ -116,105 +118,19 @@ gst_my_filter_init (GstMyFilter *filter, GstMyFilterClass *filter_klass)
 }
   <!-- example-end init.func h --></programlisting>
 
-  <sect1 id="section-pads-linkfn" xreflabel="The link function">
-  <title>The setcaps-function</title>
-  <para>
-    The <function>_setcaps ()</function>-function is called during caps
-    negotiation, which is discussed in great detail in <xref
-    linkend="chapter-negotiation"/>. This is the process where the linked
-    pads decide on the streamtype that will transfer between them. A full
-    list of type-definitions can be found in <xref
-    linkend="chapter-building-types"/>. A <function>_link ()</function>
-    receives a pointer to a <ulink type="http"
-    url="../../gstreamer/html/gstreamer-GstCaps.html"><classname>GstCaps</classname></ulink>
-    struct that defines the proposed streamtype, and can respond with
-    either <quote>yes</quote> (<symbol>TRUE</symbol>) or <quote>no</quote>
-    (<symbol>FALSE</symbol>). If the element responds positively towards
-    the streamtype, that type will be used on the pad. An example:
-  </para>
-  <programlisting><!-- example-begin caps.func a -->
-static gboolean
-gst_my_filter_setcaps (GstPad  *pad,
-                      GstCaps *caps)
-{
-  GstStructure *structure = gst_caps_get_structure (caps, 0);
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
-  const gchar *mime;
-
-  /* Since we're an audio filter, we want to handle raw audio
-   * and from that audio type, we need to get the samplerate and
-   * number of channels. */
-  mime = gst_structure_get_name (structure);
-  if (strcmp (mime, "audio/x-raw") != 0) {
-    GST_WARNING ("Wrong mimetype %s provided, we only support %s",
-                mime, "audio/x-raw");
-    return FALSE;
-  }
-
-  /* we're a filter and don't touch the properties of the data.
-   * That means we can set the given caps unmodified on the next
-   * element, and use that negotiation return value as ours. */
-  if (!gst_pad_set_caps (filter-&gt;srcpad, caps))
-    return FALSE;
-
-  /* Capsnego succeeded, get the stream properties for internal
-   * usage and return success. */
-  gst_structure_get_int (structure, "rate", &amp;filter-&gt;samplerate);
-  gst_structure_get_int (structure, "channels", &amp;filter-&gt;channels);
-
-  g_print ("Caps negotiation succeeded with %d Hz @ %d channels\n",
-          filter-&gt;samplerate, filter-&gt;channels);
-
-  return TRUE;
-}
-<!-- example-end caps.func a -->
-<!-- example-begin caps.func b --><!--
-static GstCaps *
-gst_my_filter_getcaps (GstPad * pad)
-{
-  GstMyFilter *filter = GST_MY_FILTER (GST_OBJECT_PARENT (pad));
-  GstPad *otherpad = (pad == filter-&gt;srcpad) ? filter-&gt;sinkpad :
-                                                 filter-&gt;srcpad;
-  GstCaps *othercaps = gst_pad_get_allowed_caps (otherpad);
-
-  return othercaps;
-}
-  --><!-- example-end caps.func b --></programlisting>
-  <para>
-    In here, we check the mimetype of the provided caps. Normally, you don't
-    need to do that in your own plugin/element, because the core does that
-    for you. We simply use it to show how to retrieve the mimetype from a
-    provided set of caps. Types are stored in <ulink type="http"
-    url="../../gstreamer/html/gstreamer-GstStructure.html"><classname>GstStructure
-    </classname></ulink> internally. A <ulink
-    type="http" url="../../gstreamer/html/gstreamer-GstCaps.html"><classname>GstCaps
-    </classname></ulink> is nothing more than a small
-    wrapper for 0 or more structures/types. From the structure, you can also
-    retrieve properties, as is shown above with the function
-    <function>gst_structure_get_int ()</function>.
-  </para>
-  <para>
-    If your <function>_link ()</function> function does not need to perform
-    any specific operation (i.e. it will only forward caps), you can set it
-    to <function>gst_pad_proxy_link ()</function>. This is a link forwarding
-    function implementation provided by the core. It is useful for elements
-    such as <classname>identity</classname>.
-  </para>
-  </sect1>
 <!-- example-begin pads.c --><!--
 #include "init.func"
-#include "caps.func"
 
 static gboolean
-gst_my_filter_event (GstPad * pad, GstEvent * event)
+gst_my_filter_event (GstPad * pad, GstObject * parent, GstEvent * event)
 {
-  return gst_pad_event_default (pad, event);
+  return gst_pad_event_default (pad, parent, event);
 }
 
 static GstFlowReturn
-gst_my_filter_chain (GstPad * pad, GstBuffer * buf)
+gst_my_filter_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 {
-  return gst_pad_push (GST_MY_FILTER (GST_OBJECT_PARENT (pad))->srcpad, buf);
+  return gst_pad_push (GST_MY_FILTER (parent)->srcpad, buf);
 }
 
 static GstStateChangeReturn
index 9907b882387d3086a6c54a14a4b334690609d041..10f7d77b4c6aff3bb8bbebe81a07f625f6247afa 100644 (file)
@@ -1,7 +1,7 @@
 <!-- ############ chapter ############# -->
 
-<chapter id="chapter-building-args" xreflabel="Adding Arguments">
-  <title>Adding Arguments</title>
+<chapter id="chapter-building-args" xreflabel="Adding Properties">
+  <title>Adding Properties</title>
   <para>
     The primary and most important way of controlling how an element behaves,
     is through GObject properties. GObject properties are defined in the
     and can then fill in the value or take action required for that property
     to change value internally.
   </para>
+  <para>
+    You probably also want to keep an instance variable around
+    with the currently configured value of the property that you use in the
+    get and set functions. 
+    Note that <classname>GObject</classname> will not automatically set your
+    instance variable to the default value, you will have to do that in the
+    <function>_init ()</function> function of your element.
+  </para>
   <programlisting><!-- example-begin properties.c a --><!--
 #include "filter.h"
-GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMyFilter, gst_my_filter, GST_TYPE_ELEMENT);
 static void
-gst_my_filter_base_init (gpointer klass)
+gst_my_filter_class_init (gpointer klass)
 {
 }
 static void
@@ -27,8 +35,8 @@ gst_my_filter_init (GstMyFilter * filter)
 <!-- example-begin properties.c b -->
 /* properties */
 enum {
-  ARG_0,
-  ARG_SILENT
+  PROP_0,
+  PROP_SILENT
   /* FILL ME */
 };
 
@@ -46,15 +54,15 @@ gst_my_filter_class_init (GstMyFilterClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  /* define virtual function pointers */
+  object_class->set_property = gst_my_filter_set_property;
+  object_class->get_property = gst_my_filter_get_property;
+
   /* define properties */
-  g_object_class_install_property (object_class, ARG_SILENT,
+  g_object_class_install_property (object_class, PROP_SILENT,
     g_param_spec_boolean ("silent", "Silent",
                          "Whether to be very verbose or not",
                          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /* define virtual function pointers */
-  object_class->set_property = gst_my_filter_set_property;
-  object_class->get_property = gst_my_filter_get_property;
 }
 
 static void
@@ -66,7 +74,7 @@ gst_my_filter_set_property (GObject      *object,
   GstMyFilter *filter = GST_MY_FILTER (object);
 
   switch (prop_id) {
-    case ARG_SILENT:
+    case PROP_SILENT:
       filter->silent = g_value_get_boolean (value);
       g_print ("Silent argument was changed to %s\n",
               filter->silent ? "true" : "false");
@@ -86,7 +94,7 @@ gst_my_filter_get_property (GObject    *object,
   GstMyFilter *filter = GST_MY_FILTER (object);
                                                                                 
   switch (prop_id) {
-    case ARG_SILENT:
+    case PROP_SILENT:
       g_value_set_boolean (value, filter->silent);
       break;
     default:
@@ -99,10 +107,10 @@ gst_my_filter_get_property (GObject    *object,
 #include "register.func"
   --><!-- example-end properties.c c --></programlisting>
   <para>
-    The above is a very simple example of how arguments are used. Graphical
-    applications - for example GStreamer Editor - will use these properties
-    and will display a user-controllable widget with which these properties
-    can be changed. This means that - for the property to be as user-friendly
+    The above is a very simple example of how properties are used. Graphical
+    applications will use these properties and will display a
+    user-controllable widget with which these properties can be changed.
+    This means that - for the property to be as user-friendly
     as possible - you should be as exact as possible in the definition of the
     property. Not only in defining ranges in between which valid properties
     can be located (for integers, floats, etc.), but also in using very
@@ -150,11 +158,11 @@ static void
 gst_videotestsrc_class_init (GstvideotestsrcClass *klass)
 {
 [..]
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TYPE,
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PATTERN,
     g_param_spec_enum ("pattern", "Pattern",
                       "Type of test pattern to generate",
-                      GST_TYPE_VIDEOTESTSRC_PATTERN, 1, G_PARAM_READWRITE |
-                           G_PARAM_STATIC_STRINGS));
+                       GST_TYPE_VIDEOTESTSRC_PATTERN, GST_VIDEOTESTSRC_SMPTE,
+                       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 [..]
 }
   </programlisting>
diff --git a/docs/pwg/building-queryfn.xml b/docs/pwg/building-queryfn.xml
new file mode 100644 (file)
index 0000000..ad2e943
--- /dev/null
@@ -0,0 +1,72 @@
+
+<!-- ############ chapter ############# -->
+
+<chapter id="chapter-building-queryfn">
+  <title>The query function</title>
+  <para>
+    Through the query function, your element will receive queries that it
+    has to reply to. These are queries like position, duration but also
+    about the supported formats and scheduling modes your element supports.
+    Queries can travel both upstream and downstream, so you can receive them
+    on sink pads as well as source pads. 
+  </para>
+  <para>
+    Below follows a very simple query function that we install on the source
+    pad of our element.
+  </para>
+  <programlisting>
+<![CDATA[
+static gboolean gst_my_filter_src_query (GstPad    *pad,
+                                         GstObject *parent,
+                                         GstQuery  *query);
+
+[..]
+
+static void
+gst_my_filter_init (GstMyFilter * filter)
+{
+[..]
+  /* configure event function on the pad before adding
+   * the pad to the element */
+  gst_pad_set_event_function (filter->srcpad,
+      gst_my_filter_src_event);
+[..]
+}
+
+static gboolean
+gst_my_filter_src_query (GstPad    *pad,
+                        GstObject *parent,
+                        GstQuery  *query)
+{
+  gboolean ret;
+  GstMyFilter *filter = GST_MY_FILTER (parent);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+      /* we should report the current position */
+      [...]
+      break;
+    case GST_QUERY_DURATION:
+      /* we should report the duration here */
+      [...]
+      break;
+    case GST_QUERY_CAPS:
+      /* we should report the supported caps here */
+      [...]
+      break;
+    default:
+      /* just call the default handler */
+      ret = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+  return ret;
+}
+]]>
+  </programlisting>
+  <para>
+    It is a good idea to call the default query handler
+    <function>gst_pad_query_default ()</function> for unknown queries.
+    Depending on the query type, the default handler will forward 
+    the query or simply unref it.
+  </para>
+</chapter>
index b5011f5db7f77acfd136c7fb901bdccdbf491e21..f07ccefbbc4f2548a88d37dac7c569d85ec8bd8c 100644 (file)
@@ -86,8 +86,8 @@
     GstElement or some other class not built on top of a base class, you 
     will most likely have to implement your own state change function to
     be notified of state changes. This is definitively necessary if your
-    plugin is a decoder or an encoder, as there are no base classes for
-    decoders or encoders yet.
+    plugin is a demuxer or a muxer, as there are no base classes for
+    muxers or demuxers yet.
   </para>
   <para>
     An element can be notified of state changes through a virtual function
index 2172a190e0b4f69cfbd1e898d54a54dbe0af99de..43a16f9575f35d5b713c4b82a3ce2a46bb190661 100644 (file)
@@ -4,7 +4,7 @@
   <title>Building a Test Application</title>
   <para>
     Often, you will want to test your newly written plugin in an as small
-    setting as possible. Usually, <filename>gst-launch</filename> is a
+    setting as possible. Usually, <filename>gst-launch-1.0</filename> is a
     good first step at testing a plugin. If you have not installed your
     plugin in a directory that GStreamer searches, then you will need to
     set the plugin path. Either set GST_PLUGIN_PATH to the directory
     If you based your plugin off of the gst-plugin template, then this
     will look something like
     <command>
-    gst-launch --gst-plugin-path=$HOME/gst-template/gst-plugin/src/.libs TESTPIPELINE
+    gst-launch-1.0 --gst-plugin-path=$HOME/gst-template/gst-plugin/src/.libs TESTPIPELINE
     </command>
     However, you will often need more
-    testing features than gst-launch can provide, such as seeking, events,
+    testing features than gst-launch-1.0 can provide, such as seeking, events,
     interactivity and more. Writing your own small testing program is the
     easiest way to accomplish this. This section explains - in a few words
     - how to do that. For a complete application development guide, see the
@@ -26,9 +26,9 @@
     <para>
       At the start, you need to initialize the &GStreamer; core library by
       calling <function>gst_init ()</function>. You can alternatively call
-      <function>gst_init_with_popt_tables ()</function>, which will return
-      a pointer to popt tables. You can then use libpopt to handle the
-      given argument table, and this will finish the &GStreamer; initialization.
+      <function>gst_init_get_option_group ()</function>, which will return
+      a pointer to GOptionGroup. You can then use GOption to handle the
+      initialization, and this will finish the &GStreamer; initialization.
     </para>
 
     <para>
       application. Also, you can use a <classname>fakesink</classname>
       element at the end of the pipeline to dump your data to the stdout
       (in order to do this, set the <function>dump</function> property to
-      TRUE). Lastly, you can use the <classname>efence</classname> element
-      (indeed, an eletric fence memory debugger wrapper element) to check
-      for memory errors.
+      TRUE). Lastly, you can use valgrind to check for memory errors.
     </para>
 
     <para>
-      During linking, your test application can use fixation or filtered caps
+      During linking, your test application can use filtered caps
       as a way to drive a specific type of data to or from your element. This
       is a very simple and effective way of checking multiple types of input
       and output in your element.
     </para>
 
     <para>
-      Running the pipeline happens through the <function>gst_bin_iterate ()</function>
-      function. Note that during running, you should connect to at least the
-      <quote>error</quote> and <quote>eos</quote> signals on the pipeline
+      Note that during running, you should listen for at least the
+      <quote>error</quote> and <quote>eos</quote> messages on the bus
       and/or your plugin/element to check for correct handling of this. Also,
       you should add events into the pipeline and make sure your plugin handles
       these correctly (with respect to clocking, internal caching, etc.).
@@ -120,6 +117,7 @@ main (gint   argc,
   GstElement *convert1, *convert2, *resample;
   GMainLoop *loop;
   GstBus *bus;
+  guint watch_id;
 
   /* initialization */
   gst_init (&amp;argc, &amp;argv);
@@ -135,7 +133,7 @@ main (gint   argc,
   /* watch for messages on the pipeline's bus (note that this will only
    * work like this when a GLib main loop is running) */
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
+  watch_id = gst_bus_add_watch (bus, bus_call, loop);
   gst_object_unref (bus);
 
   filesrc  = gst_element_factory_make ("filesrc", "my_filesource");
@@ -154,7 +152,7 @@ main (gint   argc,
    * depending on the environment (output used, sound card, driver etc.) */
   convert2 = gst_element_factory_make ("audioconvert", "audioconvert2");
   resample = gst_element_factory_make ("audioresample", "audioresample");
-  sink     = gst_element_factory_make ("osssink", "audiosink");
+  sink     = gst_element_factory_make ("pulsesink", "audiosink");
 
   if (!sink || !decoder) {
     g_print ("Decoder or output could not be found - check your install\n");
@@ -165,9 +163,9 @@ main (gint   argc,
     return -1;
   } else if (!filter) {
     g_print ("Your self-written filter could not be found. Make sure it "
-             "is installed correctly in $(libdir)/gstreamer-0.10/ or "
-             "~/.gstreamer-0.10/plugins/ and that gst-inspect-0.10 lists it. "
-             "If it doesn't, check with 'GST_DEBUG=*:2 gst-inspect-0.10' for "
+             "is installed correctly in $(libdir)/gstreamer-1.0/ or "
+             "~/.gstreamer-1.0/plugins/ and that gst-inspect-1.0 lists it. "
+             "If it doesn't, check with 'GST_DEBUG=*:2 gst-inspect-1.0' for "
              "the reason why it is not being loaded.");
     return -1;
   }
@@ -209,6 +207,8 @@ main (gint   argc,
   /* clean up */
   gst_element_set_state (pipeline, GST_STATE_NULL);
   gst_object_unref (pipeline);
+  g_source_remove (watch_id);
+  g_main_loop_unref (loop);
 
   return 0;
 }
index 9b05369e20955ab297be5f2d0c3c157f8f439a47..e864e5e166d46bda1a1c92b555de41f173caaa41 100644 (file)
@@ -39,7 +39,7 @@
       processes a stream of data. Producers and consumers of data are called
       <emphasis>source</emphasis> and <emphasis>sink</emphasis> elements,
       respectively. <emphasis>Bin</emphasis> elements contain other elements.
-      One type of bin is responsible for scheduling the elements that they
+      One type of bin is responsible for synchronization of the elements that they
       contain so that data flows smoothly. Another type of bin, called
       <emphasis>autoplugger</emphasis> elements, automatically add other
       elements to the bin and links them together so that they act as a
       The plugin mechanism is used everywhere in &GStreamer;, even if only the
       standard packages are being used. A few very basic functions reside in the
       core library, and all others are implemented in plugins. A plugin registry
-      is used to store the details of the plugins in an XML file. This way, a
-      program using &GStreamer; does not have to load all plugins to determine
-      which are needed. Plugins are only loaded when their provided elements are
-      requested.
+      is used to store the details of the plugins in an binary registry file.
+      This way, a program using &GStreamer; does not have to load all plugins to
+      determine which are needed. Plugins are only loaded when their provided
+      elements are requested.
     </para>
     <para>
       See the &GstLibRef; for the current implementation details of <ulink
   <!-- ############ sect1 ############# -->
 
   <sect1 id="section-basics-data" xreflabel="Data, Buffers and Events">
-    <title>Data, Buffers and Events</title>
+    <title>GstMiniObject, Buffers and Events</title>
     <para>
       All streams of data in &GStreamer; are chopped up into chunks that are
       passed from a source pad on one element to a sink pad on another element.
-      <emphasis>Data</emphasis> are structures used to hold these chunks of
-      data.
+      <emphasis>GstMiniObject</emphasis> is the structure used to hold these
+      chunks of data.
     </para>
     <para>
-      Data contains the following important types:
+      GstMiniObject contains the following important types:
       <itemizedlist>
         <listitem>
           <para>
-            An exact type indicating what type of data (control, content, ...)
-            this Data is.
+            An exact type indicating what type of data (event, buffer, ...)
+            this GstMiniObject is.
           </para>
         </listitem>
         <listitem>
           <para>
             A reference count indicating the number of elements currently
-            holding a reference to the buffer. When the buffer reference count
-            falls to zero, the buffer will be unlinked, and its memory will be
+            holding a reference to the miniobject. When the reference count
+            falls to zero, the miniobject will be disposed, and its memory will be
             freed in some sense (see below for more details).
           </para>
         </listitem>
       </itemizedlist>
     </para>
     <para>
-      There are two types of data defined: events (control) and buffers
-      (content).
+      For data transport, there are two types of GstMiniObject defined:
+      events (control) and buffers (content).
     </para>
     <para>
       Buffers may contain any sort of data that the two linked pads
       <itemizedlist>
         <listitem>
           <para>
-            A pointer to the buffer's data.
-          </para>
-        </listitem>
-        <listitem>
-          <para>
-            An integer indicating the size of the buffer's data.
+            Pointers to one or more GstMemory objects. GstMemory objects are
+            refcounted objects that encapsulate a region of memory.
           </para>
         </listitem>
         <listitem>
       contain information on the state of the stream flowing between the two
       linked pads. Events will only be sent if the element explicitly supports
       them, else the core will (try to) handle the events automatically. Events
-      are used to indicate, for example, a clock discontinuity, the end of a
+      are used to indicate, for example, a media type, the end of a
       media stream or that the cache should be flushed.
     </para>
     <para>
       </para>
       <para>
         Another way an element might get specialized buffers is to
-       request them from a downstream peer.  These are called
-       downstream-allocated buffers.  Elements can ask a
-       peer connected to a source pad to create an empty buffer of
-       a given size.  If a downstream element is able to create a
-       special buffer of the correct size, it will do so.  Otherwise
-       &GStreamer; will automatically create a generic buffer instead.
-       The element that requested the buffer can then copy data into
-       the buffer, and push the buffer to the source pad it was
-       allocated from.
+        request them from a downstream peer through a GstBufferPool or
+        GstAllocator.  Elements can ask a GstBufferPool or GstAllocator
+        from the downstream peer element. If downstream is able to provide
+        these objects, upstream can use them to allocate buffers.
+        See more in <xref linkend="chapter-allocation"/>.
       </para>
       <para>
         Many sink elements have accelerated methods for copying data
        to hardware, or have direct access to hardware.  It is common
-       for these elements to be able to create downstream-allocated
-       buffers for their upstream peers.  One such example is
+        for these elements to be able to create a GstBufferPool or 
+        GstAllocator for their upstream peers.  One such example is
        ximagesink.  It creates buffers that contain XImages.  Thus,
        when an upstream peer copies data into the buffer, it is copying
        directly into the XImage, enabling ximagesink to draw the
   <!-- ############ sect1 ############# -->
 
   <sect1 id="section-basics-types" xreflabel="Types and Properties">
-    <title>Mimetypes and Properties</title>
+    <title>Media types and Properties</title>
     <para>
       &GStreamer; uses a type system to ensure that the data passed between
       elements is in a recognized format. The type system is also important
       for ensuring that the parameters required to fully specify a format match
       up correctly when linking pads between elements. Each link that is
       made between elements has a specified type and optionally a set of
-      properties.
+      properties. See more about caps negotiation in
+      <xref linkend="chapter-negotiation"/>.
     </para>
 
     <!-- ############ sect2 ############# -->
       <para>
         &GStreamer; already supports many basic media types. Following is a
         table of a few of the basic types used for buffers in
-        &GStreamer;. The table contains the name ("mime type") and a
+        &GStreamer;. The table contains the name ("media type") and a
         description of the type, the properties associated with the type, and
         the meaning of each property. A full list of supported types is
         included in <xref linkend="section-types-definitions"/>.
 
         <thead>
           <row>
-            <entry>Mime Type</entry>
+            <entry>Media Type</entry>
             <entry>Description</entry>
             <entry>Property</entry>
             <entry>Property Type</entry>
index e6b868c170e4c77bcc2ef4b4e0bd40adb3ba0519..bb6699fcf87f98df527513572c9a90535cdb3ea7 100644 (file)
@@ -23,7 +23,7 @@
       The pipeline design is made to have little overhead above what the
       applied filters induce. This makes &GStreamer; a good framework for
       designing even high-end audio applications which put high demands on
-      latency. 
+      latency or performance
     </para> 
 
     <para>
     <para>
       The framework is based on plugins that will provide the various codec 
       and other functionality. The plugins can be linked and arranged in
-      a pipeline. This pipeline defines the flow of the data. Pipelines can 
-      also be edited with a GUI editor and saved as XML so that pipeline
-      libraries can be made with a minimum of effort.
+      a pipeline. This pipeline defines the flow of the data.
     </para> 
 
     <para>
       The &GStreamer; core function is to provide a framework for plugins,
-      data flow and media type handling/negotiation. It also provides an
-      API to write applications using the various plugins.
+      data flow, synchronization and media type handling/negotiation. It
+      also provides an API to write applications using the various plugins.
     </para> 
   </sect1>
 
       </listitem>
       <listitem>
         <para>
-          Adding new mime-types to the registry along with typedetect functions.
+          Adding new media types to the registry along with typedetect functions.
           This will allow your plugin to operate on a completely new media type.
         </para>
       </listitem>
index 18596d7a082f5b64f6f861c34703fbc686f8f29d..484f436555f22bdf4b25cb010c88fd268240d2dc 100644 (file)
       needs to implement a bunch of virtual functions and will work
       automatically.
     </para>
+    <para>
+      The base class implement much of the synchronization logic that a
+      sink has to perform.
+    </para>
     <para>
       The <classname>GstBaseSink</classname> base-class specifies some
       limitations on elements, though:
       <listitem>
         <para>
           It requires that the sink only has one sinkpad. Sink elements that
-          need more than one sinkpad, cannot use this base-class.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          The base-class owns the pad, and specifies caps negotiation, data
-          handling, pad allocation and such functions. If you need more than
-          the ones provided as virtual functions, then you cannot use this
-          base-class.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          By implementing the <function>pad_allocate ()</function> function,
-          it is possible for upstream elements to use special memory, such
-          as memory on the X server side that only the sink can allocate, or
-          even hardware memory <function>mmap ()</function>'ed from the kernel.
-          Note that in almost all cases, you will want to subclass the
-          <classname>GstBuffer</classname> object, so that your own set of
-          functions will be called when the buffer loses its last reference.
+          need more than one sinkpad, must make a manager element with
+          multiple GstBaseSink elements inside.
         </para>
       </listitem>
     </itemizedlist>
     <para>
       Sink elements can derive from <classname>GstBaseSink</classname> using
-      the usual <classname>GObject</classname> type creation voodoo, or by
-      using the convenience macro <function>GST_BOILERPLATE ()</function>:
+      the usual <classname>GObject</classname> convenience macro
+      <function>G_DEFINE_TYPE ()</function>:
     </para>
     <programlisting>
-GST_BOILERPLATE_FULL (GstMySink, gst_my_sink, GstBaseSink, GST_TYPE_BASE_SINK);
+G_DEFINE_TYPE (GstMySink, gst_my_sink, GST_TYPE_BASE_SINK);
 
 [..]
 
@@ -109,13 +95,19 @@ gst_my_sink_class_init (GstMySinkClass * klass)
       <title>Writing an audio sink</title>
       <para>
         Essentially, audio sink implementations are just a special case of a
-        general sink. There are two audio base classes that you can choose to
+        general sink. An audio sink has the added complexity that it needs to
+        schedule playback of samples. It must match the clock selected in the
+        pipeline against the clock of the audio device and calculate and
+        compensate for drift and jitter.
+      </para>
+      <para>
+        There are two audio base classes that you can choose to
         derive from, depending on your needs:
-        <classname>GstBaseAudiosink</classname> and
-        <classname>GstAudioSink</classname>. The baseaudiosink provides full
+        <classname>GstAudioBasesink</classname> and
+        <classname>GstAudioSink</classname>. The audiobasesink provides full
         control over how synchronization and scheduling is handled, by using
         a ringbuffer that the derived class controls and provides. The
-        audiosink base-class is a derived class of the baseaudiosink,
+        audiosink base-class is a derived class of the audiobasesink,
         implementing a standard ringbuffer implementing default
         synchronization and providing a standard audio-sample clock. Derived
         classes of this base class merely need to provide a <function>_open
@@ -123,7 +115,7 @@ gst_my_sink_class_init (GstMySinkClass * klass)
         ()</function> function implementation, and some optional functions.
         This should suffice for many sound-server output elements and even
         most interfaces. More demanding audio systems, such as Jack, would
-        want to implement the <classname>GstBaseAudioSink</classname>
+        want to implement the <classname>GstAudioBaseSink</classname>
         base-class.
       </para>
       <para>
@@ -243,15 +235,9 @@ gst_my_sink_class_init (GstMySinkClass * klass)
       <listitem>
         <para>
           There is one and only one sourcepad. Source elements requiring
-          multiple sourcepads cannot use this base-class.
-        </para>
-      </listitem>
-      <listitem>
-        <para>
-          Since the base-class owns the pad and derived classes can only
-          control it as far as the virtual functions allow, you are limited
-          to the functionality provided by the virtual functions. If you need
-          more, you cannot use this base-class.
+          multiple sourcepads must implement a manager bin and use multiple
+          source elements internally or make a manager element that uses
+          a source element and a demuxer inside.
         </para>
       </listitem>
     </itemizedlist>
@@ -259,9 +245,6 @@ gst_my_sink_class_init (GstMySinkClass * klass)
       It is possible to use special memory, such as X server memory pointers
       or <function>mmap ()</function>'ed memory areas, as data pointers in
       buffers returned from the <function>create()</function> virtual function.
-      In almost all cases, you will want to subclass
-      <classname>GstBuffer</classname> so that your own set of functions can
-      be called when the buffer is destroyed.
     </para>
 
     <sect2 id="section-base-audiosrc" xreflabel="Writing an audio source">
@@ -275,7 +258,7 @@ gst_my_sink_class_init (GstMySinkClass * klass)
         linkend="section-base-audiosink"/>; one is ringbuffer-based, and
         requires the derived class to take care of its own scheduling,
         synchronization and such. The other is based on this
-        <classname>GstBaseAudioSrc</classname> and is called
+        <classname>GstAudioBaseSrc</classname> and is called
         <classname>GstAudioSrc</classname>, and provides a simple
         <function>open ()</function>, <function>close ()</function> and
         <function>read ()</function> interface, which is rather simple to
index ebd1ace2ba338637f3319d03a990a9f0c81f1ee5..53381146bfbcdcf1fd7e9b76d31a172e90ee35c8 100644 (file)
@@ -30,7 +30,9 @@
     <listitem>
       <para>
         To embed an element, or a series of elements, into something that
-        looks and works like a simple element to the outside world.
+        looks and works like a simple element to the outside world. This
+        is particular handy for implementing sources and sink elements with
+        multiple pads.
       </para>
     </listitem>
   </itemizedlist>
index 2196b4e285049f4506720732c8fcc345b92ee62a..9efcff63af92ea1d1b7782b0b86748506e65f33b 100644 (file)
@@ -9,7 +9,7 @@
     and the N-to-1 element synchronizes those streams by
     expected-timestamp-based logic. This means it lets all streams wait
     except for the one that provides the earliest next-expected timestamp.
-    When that stream has passwed one buffer, the next
+    When that stream has passed one buffer, the next
     earliest-expected-timestamp is calculated, and we start back where we
     were, until all streams have reached EOS. There is a helper base class,
     called <classname>GstCollectPads</classname>, that will help you to do
@@ -72,7 +72,7 @@ gst_avi_mux_audio_link (GstPad        *pad,
 {
   GstAviMux *mux = GST_AVI_MUX (gst_pad_get_parent (pad));
   GstStructure *str = gst_caps_get_structure (caps, 0);
-  const gchar *mime = gst_structure_get_name (str);
+  const gchar *media = gst_structure_get_name (str);
 
   if (!strcmp (str, "audio/mpeg")) {
     /* get version, make sure it's 1, get layer, make sure it's 1-3,
index 9a97b69b02ae848adacb985c2085707ca7ef4969..4f79709682baacd067a16e9a1cfd76ab4c17b39c 100644 (file)
 <!ENTITY BUILDING_DEBUG       SYSTEM "building-debug.xml">
 <!ENTITY BUILDING_PADS        SYSTEM "building-pads.xml">
 <!ENTITY BUILDING_CHAINFN     SYSTEM "building-chainfn.xml">
+<!ENTITY BUILDING_EVENTFN     SYSTEM "building-eventfn.xml">
+<!ENTITY BUILDING_QUERYFN     SYSTEM "building-queryfn.xml">
 <!ENTITY BUILDING_STATE       SYSTEM "building-state.xml">
 <!ENTITY BUILDING_PROPS       SYSTEM "building-props.xml">
 <!ENTITY BUILDING_SIGNALS     SYSTEM "building-signals.xml">
 <!ENTITY BUILDING_TESTAPP     SYSTEM "building-testapp.xml">
 
 <!-- Part 3: Advanced Filter Concepts -->
-<!ENTITY ADVANCED_NEGOTIATION SYSTEM "advanced-negotiation.xml">
+<!ENTITY ADVANCED_REQUEST     SYSTEM "advanced-request.xml">
 <!ENTITY ADVANCED_SCHEDULING  SYSTEM "advanced-scheduling.xml">
+<!ENTITY ADVANCED_NEGOTIATION SYSTEM "advanced-negotiation.xml">
+<!ENTITY ADVANCED_ALLOCATION  SYSTEM "advanced-allocation.xml">
 <!ENTITY ADVANCED_TYPES       SYSTEM "advanced-types.xml">
-<!ENTITY ADVANCED_REQUEST     SYSTEM "advanced-request.xml">
+<!ENTITY ADVANCED_EVENTS      SYSTEM "advanced-events.xml">
 <!ENTITY ADVANCED_CLOCK       SYSTEM "advanced-clock.xml">
+<!ENTITY ADVANCED_QOS         SYSTEM "advanced-qos.xml">
 <!ENTITY ADVANCED_DPARAMS     SYSTEM "advanced-dparams.xml">
 <!ENTITY ADVANCED_INTERFACES  SYSTEM "advanced-interfaces.xml">
 <!ENTITY ADVANCED_TAGGING     SYSTEM "advanced-tagging.xml">
-<!ENTITY ADVANCED_EVENTS      SYSTEM "advanced-events.xml">
 
 <!-- Part 4: Creating special element types -->
 <!ENTITY OTHER_BASE           SYSTEM "other-base.xml">
     &BUILDING_BOILER;
     &BUILDING_PADS;
     &BUILDING_CHAINFN;
+    &BUILDING_EVENTFN;
+    &BUILDING_QUERYFN;
     &BUILDING_STATE;
     &BUILDING_PROPS;
     &BUILDING_SIGNALS;
       </para>
     </partintro>
 
-    &ADVANCED_NEGOTIATION;
+    &ADVANCED_REQUEST;
     &ADVANCED_SCHEDULING;
+    &ADVANCED_NEGOTIATION;
+    &ADVANCED_ALLOCATION;
     &ADVANCED_TYPES;
-    &ADVANCED_REQUEST;
+    &ADVANCED_EVENTS;
     &ADVANCED_CLOCK;
+    &ADVANCED_QOS;
     &ADVANCED_DPARAMS;
     &ADVANCED_INTERFACES;
     &ADVANCED_TAGGING;
-    &ADVANCED_EVENTS;
 
     <!-- FIXME: add querying, event handling and conversion -->
 
index de135ff19441e8da367e78a4f45082295377e623..e249d16e86755d18a24f08f7e07b19c6e6dfae1c 100644 (file)
         </para>
       </authorblurb>
     </author>
+    <author>
+      <firstname>Wim</firstname>
+      <surname>Taymans</surname>
+      <authorblurb>
+        <para>
+             <email>wim.taymans@gmail.com</email>
+        </para>
+      </authorblurb>
+    </author>
   </authorgroup>
 
   <legalnotice id="misc-legalnotice">
index c30c7ad4ec9cfc57bd0bdf2c4a7be8cd31665db9..05796729cf1c39139d710c36158f2a439807da56 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -299,6 +299,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -335,6 +338,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 8f3a6ceae37ffd0c54abeccf951b2cb1ec0e6826..6a522b66cc176086335a55190de1c9b5310b0f92 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -299,6 +299,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -335,6 +338,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index bd3a622ec98d417e0793af231f0d3fc84457c6f9..0c96219c2be2043421a46f7abe73e3f6472a5390 100644 (file)
@@ -86,7 +86,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -496,6 +496,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -532,6 +535,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 1be9773f0dca0fddfe4f12aa00f60c695cc0e8d2..c58e10166e7d31750b05af117dcf12507f44d2c7 100644 (file)
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -545,8 +545,9 @@ init_pre (GOptionContext * context, GOptionGroup * group, gpointer data,
     GST_DEBUG ("already initialized");
     return TRUE;
   }
-
+#if !GLIB_CHECK_VERSION(2, 35, 0)
   g_type_init ();
+#endif
 
 #ifndef GST_DISABLE_GST_DEBUG
   _priv_gst_debug_init ();
index df5b04f679fb974127215a25e17acfa2143054fc..a80b9a1a633885c10968630348bef0c03fb1ff96 100644 (file)
@@ -106,6 +106,7 @@ _fallback_mem_copy (GstMemory * mem, gssize offset, gssize size)
   copy = gst_allocator_alloc (mem->allocator, size, &params);
   if (!gst_memory_map (copy, &dinfo, GST_MAP_WRITE)) {
     GST_CAT_WARNING (GST_CAT_MEMORY, "could not write map memory %p", copy);
+    gst_allocator_free (mem->allocator, copy);
     gst_memory_unmap (mem, &sinfo);
     return NULL;
   }
index cc3902737cfd04338a5e37cdc0480cd624bb6e08..550b7d68fbe8f859ecf2b5736c7ed8dcfc424718 100644 (file)
@@ -441,7 +441,7 @@ gst_bin_class_init (GstBinClass * klass)
 
   gobject_class->dispose = gst_bin_dispose;
 
-  gst_element_class_set_metadata (gstelement_class, "Generic bin",
+  gst_element_class_set_static_metadata (gstelement_class, "Generic bin",
       "Generic/Bin",
       "Simple container object",
       "Erik Walthinsen <omega@cse.ogi.edu>,"
index bf135a6c086af72742db6d9f70400d3482a0f152..b4b87f4c13fa0ff5053665c0c885ab193d8c767c 100644 (file)
@@ -130,6 +130,9 @@ static GstStateChangeReturn gst_element_set_state_func (GstElement * element,
 static gboolean gst_element_set_clock_func (GstElement * element,
     GstClock * clock);
 static void gst_element_set_bus_func (GstElement * element, GstBus * bus);
+static gboolean gst_element_post_message_default (GstElement * element,
+    GstMessage * message);
+
 
 static gboolean gst_element_default_send_event (GstElement * element,
     GstEvent * event);
@@ -235,6 +238,7 @@ gst_element_class_init (GstElementClass * klass)
   klass->query = GST_DEBUG_FUNCPTR (gst_element_default_query);
   klass->send_event = GST_DEBUG_FUNCPTR (gst_element_default_send_event);
   klass->numpadtemplates = 0;
+  klass->post_message = GST_DEBUG_FUNCPTR (gst_element_post_message_default);
 
   klass->elementfactory = NULL;
 }
@@ -1283,6 +1287,10 @@ gst_element_class_set_metadata (GstElementClass * klass,
     const gchar * description, const gchar * author)
 {
   g_return_if_fail (GST_IS_ELEMENT_CLASS (klass));
+  g_return_if_fail (longname != NULL && *longname != '\0');
+  g_return_if_fail (classification != NULL && *classification != '\0');
+  g_return_if_fail (description != NULL && *description != '\0');
+  g_return_if_fail (author != NULL && *author != '\0');
 
   gst_structure_id_set ((GstStructure *) klass->metadata,
       GST_QUARK (ELEMENT_METADATA_LONGNAME), G_TYPE_STRING, longname,
@@ -1320,6 +1328,10 @@ gst_element_class_set_static_metadata (GstElementClass * klass,
   GValue val = G_VALUE_INIT;
 
   g_return_if_fail (GST_IS_ELEMENT_CLASS (klass));
+  g_return_if_fail (longname != NULL && *longname != '\0');
+  g_return_if_fail (classification != NULL && *classification != '\0');
+  g_return_if_fail (description != NULL && *description != '\0');
+  g_return_if_fail (author != NULL && *author != '\0');
 
   g_value_init (&val, G_TYPE_STRING);
 
@@ -1654,22 +1666,8 @@ gst_element_query (GstElement * element, GstQuery * query)
   return result;
 }
 
-/**
- * gst_element_post_message:
- * @element: a #GstElement posting the message
- * @message: (transfer full): a #GstMessage to post
- *
- * Post a message on the element's #GstBus. This function takes ownership of the
- * message; if you want to access the message after this call, you should add an
- * additional reference before calling.
- *
- * Returns: %TRUE if the message was successfully posted. The function returns
- * %FALSE if the element did not have a bus.
- *
- * MT safe.
- */
-gboolean
-gst_element_post_message (GstElement * element, GstMessage * message)
+static gboolean
+gst_element_post_message_default (GstElement * element, GstMessage * message)
 {
   GstBus *bus;
   gboolean result = FALSE;
@@ -1704,6 +1702,34 @@ no_bus:
   }
 }
 
+/**
+ * gst_element_post_message:
+ * @element: a #GstElement posting the message
+ * @message: (transfer full): a #GstMessage to post
+ *
+ * Post a message on the element's #GstBus. This function takes ownership of the
+ * message; if you want to access the message after this call, you should add an
+ * additional reference before calling.
+ *
+ * Returns: %TRUE if the message was successfully posted. The function returns
+ * %FALSE if the element did not have a bus.
+ *
+ * MT safe.
+ */
+gboolean
+gst_element_post_message (GstElement * element, GstMessage * message)
+{
+  GstElementClass *klass;
+
+  g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
+
+  klass = GST_ELEMENT_GET_CLASS (element);
+  if (klass->post_message)
+    return klass->post_message (element, message);
+
+  return FALSE;
+}
+
 /**
  * _gst_element_error_printf:
  * @format: the printf-like format to use, or %NULL
index 725dc342c09b82dd6bffda404a6224949ffa1c55..df71720c7a1342db863fea258400453c078bc07d 100644 (file)
@@ -591,6 +591,8 @@ struct _GstElement
  * @send_event: send a #GstEvent to the element
  * @query: perform a #GstQuery on the element
  * @state_changed: called immediately after a new state was set.
+ * @post_message: called when a message is posted on the element. Chain up to
+ *                the parent class' handler to have it posted on the bus.
  *
  * GStreamer element class. Override the vmethods to implement the element
  * functionality.
@@ -645,8 +647,10 @@ struct _GstElementClass
 
   gboolean              (*query)                (GstElement *element, GstQuery *query);
 
+  gboolean              (*post_message)         (GstElement *element, GstMessage *message);
+
   /*< private >*/
-  gpointer _gst_reserved[GST_PADDING_LARGE];
+  gpointer _gst_reserved[GST_PADDING_LARGE-1];
 };
 
 /* element class pad templates */
index c97e8c9229ab18794f3a69f1310a451407a1a23b..0b1505db685ab7ce745ec2f51c4c6c2537b0faa0 100644 (file)
@@ -177,6 +177,15 @@ gst_element_factory_cleanup (GstElementFactory * factory)
   factory->interfaces = NULL;
 }
 
+#define CHECK_METADATA_FIELD(klass, name, key)                                 \
+  G_STMT_START {                                                               \
+    const gchar *metafield = gst_element_class_get_metadata (klass, key);      \
+    if (G_UNLIKELY (metafield == NULL || *metafield == '\0')) {                \
+      g_warning ("Element factory metadata for '%s' has no valid %s field", name, key);    \
+      goto detailserror;                                                       \
+    } \
+  } G_STMT_END;
+
 /**
  * gst_element_register:
  * @plugin: (allow-none): #GstPlugin to register the element with, or NULL for
@@ -233,12 +242,11 @@ gst_element_register (GstPlugin * plugin, const gchar * name, guint rank,
   /* provide info needed during class structure setup */
   g_type_set_qdata (type, __gst_elementclass_factory, factory);
   klass = GST_ELEMENT_CLASS (g_type_class_ref (type));
-#if 0
-  /* FIXME */
-  if ((klass->details.longname == NULL) ||
-      (klass->details.klass == NULL) || (klass->details.author == NULL))
-    goto detailserror;
-#endif
+
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_LONGNAME);
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_KLASS);
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_DESCRIPTION);
+  CHECK_METADATA_FIELD (klass, name, GST_ELEMENT_METADATA_AUTHOR);
 
   factory->type = type;
   factory->metadata = gst_structure_copy ((GstStructure *) klass->metadata);
@@ -312,15 +320,11 @@ urierror:
     return FALSE;
   }
 
-#if 0
 detailserror:
   {
-    GST_WARNING_OBJECT (factory,
-        "The GstElementDetails don't seem to have been set properly");
     gst_element_factory_cleanup (factory);
     return FALSE;
   }
-#endif
 }
 
 /**
index 188325dc270ab9f70e999b740c9eee4690df722e..87d4acb20c813567437d7d922fff96d15b5c37c7 100644 (file)
@@ -568,7 +568,6 @@ gst_event_new_gap (GstClockTime timestamp, GstClockTime duration)
   GstEvent *event;
 
   g_return_val_if_fail (GST_CLOCK_TIME_IS_VALID (timestamp), NULL);
-  g_return_val_if_fail (GST_CLOCK_TIME_IS_VALID (duration), NULL);
 
   GST_CAT_TRACE (GST_CAT_EVENT, "creating gap %" GST_TIME_FORMAT " - "
       "%" GST_TIME_FORMAT " (duration: %" GST_TIME_FORMAT ")",
index 590737abc9a2699adbf1c5ce9143955ea6391828..2424cfddbe4d652572fa29ef2305d3088ce887c4 100644 (file)
 #define GST_PROXY_PAD_TARGET(pad)       (GST_PAD_PEER (GST_PROXY_PAD_INTERNAL (pad)))
 #define GST_PROXY_PAD_INTERNAL(pad)     (GST_PROXY_PAD_PRIVATE (pad)->internal)
 
+#define GST_PROXY_PAD_ACQUIRE_INTERNAL(pad, internal, retval)           \
+  internal =                                                            \
+      GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD_CAST (pad))); \
+  if (internal == NULL)                                                 \
+    return retval;
+
+#define GST_PROXY_PAD_RELEASE_INTERNAL(internal) gst_object_unref (internal);
+
 struct _GstProxyPadPrivate
 {
   GstPad *internal;
@@ -85,9 +93,10 @@ gst_proxy_pad_iterate_internal_links_default (GstPad * pad, GstObject * parent)
 
   g_return_val_if_fail (GST_IS_PROXY_PAD (pad), NULL);
 
-  internal = GST_PROXY_PAD_INTERNAL (pad);
+  GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, NULL);
+
   g_value_init (&v, GST_TYPE_PAD);
-  g_value_set_object (&v, internal);
+  g_value_take_object (&v, internal);
   res = gst_iterator_new_single (GST_TYPE_PAD, &v);
   g_value_unset (&v);
 
@@ -115,8 +124,9 @@ gst_proxy_pad_chain_default (GstPad * pad, GstObject * parent,
   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);
+  GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, GST_FLOW_NOT_LINKED);
   res = gst_pad_push (internal, buffer);
+  GST_PROXY_PAD_RELEASE_INTERNAL (internal);
 
   return res;
 }
@@ -142,8 +152,9 @@ gst_proxy_pad_chain_list_default (GstPad * pad, GstObject * parent,
   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);
+  GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, GST_FLOW_NOT_LINKED);
   res = gst_pad_push_list (internal, list);
+  GST_PROXY_PAD_RELEASE_INTERNAL (internal);
 
   return res;
 }
@@ -171,8 +182,9 @@ gst_proxy_pad_getrange_default (GstPad * pad, GstObject * parent,
   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);
+  GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, internal, GST_FLOW_NOT_LINKED);
   res = gst_pad_pull_range (internal, offset, size, buffer);
+  GST_PROXY_PAD_RELEASE_INTERNAL (internal);
 
   return res;
 }
@@ -277,8 +289,9 @@ gst_ghost_pad_internal_activate_push_default (GstPad * pad, GstObject * parent,
 
   /* in both cases (SRC and SINK) we activate just the internal pad. The targets
    * will be activated later (or already in case of a ghost sinkpad). */
-  other = GST_PROXY_PAD_INTERNAL (pad);
+  GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
   ret = gst_pad_activate_mode (other, GST_PAD_MODE_PUSH, active);
+  GST_PROXY_PAD_RELEASE_INTERNAL (other);
 
   return ret;
 }
@@ -300,8 +313,9 @@ gst_ghost_pad_internal_activate_pull_default (GstPad * pad, GstObject * parent,
      * 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);
+    GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
     ret = gst_pad_activate_mode (other, GST_PAD_MODE_PULL, active);
+    GST_PROXY_PAD_RELEASE_INTERNAL (other);
   } else if (G_LIKELY ((other = gst_pad_get_peer (pad)))) {
     /* We are SINK, the ghostpad is SRC, we propagate the activation upstream
      * since we hold a pointer to the upstream peer. */
@@ -365,8 +379,9 @@ gst_ghost_pad_activate_push_default (GstPad * pad, GstObject * parent,
       (active ? "" : "de"), GST_DEBUG_PAD_NAME (pad));
 
   /* just activate the internal pad */
-  other = GST_PROXY_PAD_INTERNAL (pad);
+  GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
   ret = gst_pad_activate_mode (other, GST_PAD_MODE_PUSH, active);
+  GST_PROXY_PAD_RELEASE_INTERNAL (other);
 
   return ret;
 }
@@ -386,8 +401,9 @@ gst_ghost_pad_activate_pull_default (GstPad * pad, GstObject * parent,
      * activation function of the internal pad to propagate the activation
      * upstream */
     GST_LOG_OBJECT (pad, "pad is src, activate internal");
-    other = GST_PROXY_PAD_INTERNAL (pad);
+    GST_PROXY_PAD_ACQUIRE_INTERNAL (pad, other, FALSE);
     ret = gst_pad_activate_mode (other, GST_PAD_MODE_PULL, active);
+    GST_PROXY_PAD_RELEASE_INTERNAL (other);
   } else if (G_LIKELY ((other = gst_pad_get_peer (pad)))) {
     /* We are SINK and activated by the internal pad, propagate activation
      * upstream because we hold a ref to the upstream peer */
@@ -811,8 +827,7 @@ gst_ghost_pad_set_target (GstGhostPad * gpad, GstPad * newtarget)
   g_return_val_if_fail (GST_PAD_CAST (gpad) != newtarget, FALSE);
   g_return_val_if_fail (newtarget != GST_PROXY_PAD_INTERNAL (gpad), FALSE);
 
-  /* no need for locking, the internal pad's lifecycle is directly linked to the
-   * ghostpad's */
+  GST_OBJECT_LOCK (gpad);
   internal = GST_PROXY_PAD_INTERNAL (gpad);
 
   if (newtarget)
@@ -821,7 +836,6 @@ gst_ghost_pad_set_target (GstGhostPad * gpad, GstPad * newtarget)
     GST_DEBUG_OBJECT (gpad, "clearing target");
 
   /* clear old target */
-  GST_OBJECT_LOCK (gpad);
   if ((oldtarget = GST_PROXY_PAD_TARGET (gpad))) {
     GST_OBJECT_UNLOCK (gpad);
 
index e05cd22e06c02aea40d67da29d447d42c7c0933d..5929d10daebd76f92be2829031ce323130f547d3 100644 (file)
 
 #endif /* !GST_DISABLE_GST_DEBUG */
 
+extern gboolean gst_is_initialized (void);
+
 /* we want these symbols exported even if debug is disabled, to maintain
  * ABI compatibility. Unless GST_REMOVE_DISABLED is defined. */
 #if !defined(GST_DISABLE_GST_DEBUG) || !defined(GST_REMOVE_DISABLED)
@@ -219,7 +221,7 @@ dladdr (void *address, Dl_info * dl)
 static void gst_debug_reset_threshold (gpointer category, gpointer unused);
 static void gst_debug_reset_all_thresholds (void);
 
-#ifdef HAVE_PRINTF_EXTENSION
+#ifdef GST_USING_PRINTF_EXTENSION
 static int _gst_info_printf_extension_ptr (FILE * stream,
     const struct printf_info *info, const void *const *args);
 static int _gst_info_printf_extension_segment (FILE * stream,
@@ -331,7 +333,7 @@ _priv_gst_debug_init (void)
   /* get time we started for debugging messages */
   _priv_gst_info_start_time = gst_util_get_timestamp ();
 
-#ifdef HAVE_PRINTF_EXTENSION
+#ifdef GST_USING_PRINTF_EXTENSION
 #ifdef HAVE_REGISTER_PRINTF_SPECIFIER
   register_printf_specifier (GST_PTR_FORMAT[0], _gst_info_printf_extension_ptr,
       _gst_info_printf_extension_arginfo);
@@ -720,7 +722,7 @@ gst_debug_print_object (gpointer ptr)
   return g_strdup_printf ("%p", ptr);
 }
 
-#ifdef HAVE_PRINTF_EXTENSION
+#ifdef GST_USING_PRINTF_EXTENSION
 
 static gchar *
 gst_debug_print_segment (gpointer ptr)
@@ -763,7 +765,7 @@ gst_debug_print_segment (gpointer ptr)
   }
 }
 
-#endif /* HAVE_PRINTF_EXTENSION */
+#endif /* GST_USING_PRINTF_EXTENSION */
 
 /**
  * gst_debug_construct_term_color:
@@ -1104,8 +1106,9 @@ gst_debug_add_log_function (GstLogFunction func, gpointer user_data,
   __log_functions = g_slist_prepend (list, entry);
   g_mutex_unlock (&__log_func_mutex);
 
-  GST_DEBUG ("prepended log function %p (user data %p) to log functions",
-      func, user_data);
+  if (gst_is_initialized ())
+    GST_DEBUG ("prepended log function %p (user data %p) to log functions",
+        func, user_data);
 }
 
 static gint
@@ -1180,8 +1183,9 @@ gst_debug_remove_log_function (GstLogFunction func)
   removals =
       gst_debug_remove_with_compare_func
       (gst_debug_compare_log_function_by_func, (gpointer) func);
-  GST_DEBUG ("removed log function %p %d times from log function list", func,
-      removals);
+  if (gst_is_initialized ())
+    GST_DEBUG ("removed log function %p %d times from log function list", func,
+        removals);
 
   return removals;
 }
@@ -1202,9 +1206,11 @@ gst_debug_remove_log_function_by_data (gpointer data)
   removals =
       gst_debug_remove_with_compare_func
       (gst_debug_compare_log_function_by_data, data);
-  GST_DEBUG
-      ("removed %d log functions with user data %p from log function list",
-      removals, data);
+
+  if (gst_is_initialized ())
+    GST_DEBUG
+        ("removed %d log functions with user data %p from log function list",
+        removals, data);
 
   return removals;
 }
@@ -1311,8 +1317,9 @@ gst_debug_reset_threshold (gpointer category, gpointer unused)
 
     walk = g_slist_next (walk);
     if (g_pattern_match_string (entry->pat, cat->name)) {
-      GST_LOG ("category %s matches pattern %p - gets set to level %d",
-          cat->name, entry->pat, entry->level);
+      if (gst_is_initialized ())
+        GST_LOG ("category %s matches pattern %p - gets set to level %d",
+            cat->name, entry->pat, entry->level);
       gst_debug_category_set_threshold (cat, entry->level);
       goto exit;
     }
@@ -1338,8 +1345,9 @@ for_each_threshold_by_entry (gpointer data, gpointer user_data)
   LevelNameEntry *entry = (LevelNameEntry *) user_data;
 
   if (g_pattern_match_string (entry->pat, cat->name)) {
-    GST_LOG ("category %s matches pattern %p - gets set to level %d",
-        cat->name, entry->pat, entry->level);
+    if (gst_is_initialized ())
+      GST_LOG ("category %s matches pattern %p - gets set to level %d",
+          cat->name, entry->pat, entry->level);
     gst_debug_category_set_threshold (cat, entry->level);
   }
 }
@@ -1655,7 +1663,7 @@ _gst_debug_register_funcptr (GstDebugFuncPtr func, const gchar * ptrname)
 
 /*** PRINTF EXTENSIONS ********************************************************/
 
-#ifdef HAVE_PRINTF_EXTENSION
+#ifdef GST_USING_PRINTF_EXTENSION
 static int
 _gst_info_printf_extension_ptr (FILE * stream, const struct printf_info *info,
     const void *const *args)
@@ -1712,7 +1720,7 @@ _gst_info_printf_extension_arginfo (const struct printf_info *info, size_t n,
   }
   return 1;
 }
-#endif /* HAVE_PRINTF_EXTENSION */
+#endif /* GST_USING_PRINTF_EXTENSION */
 
 static void
 gst_info_dump_mem_line (gchar * linebuf, gsize linebuf_size,
index 2ac6964ac01f55288267894cce14d20ca9cb9c3c..bc1cb761d933ce2d8d30e47d7084823c8f9855df 100644 (file)
@@ -142,14 +142,22 @@ gst_meta_register (GType api, const gchar * impl, gsize size,
     GstMetaTransformFunction transform_func)
 {
   GstMetaInfo *info;
+  GType type;
 
   g_return_val_if_fail (api != 0, NULL);
   g_return_val_if_fail (impl != NULL, NULL);
   g_return_val_if_fail (size != 0, NULL);
 
+  /* first try to register the implementation name. It's possible
+   * that this fails because it was already registered. Don't warn,
+   * glib did this for us already. */
+  type = g_pointer_type_register_static (impl);
+  if (type == 0)
+    return NULL;
+
   info = g_slice_new (GstMetaInfo);
   info->api = api;
-  info->type = g_pointer_type_register_static (impl);
+  info->type = type;
   info->size = size;
   info->init_func = init_func;
   info->free_func = free_func;
index d88fd9a77da6020e5815019dd4a2bc7b10d39f58..d219e278aa87986919195f6dba702288c426a37c 100644 (file)
@@ -121,8 +121,7 @@ gst_mini_object_init (GstMiniObject * mini_object, guint flags, GType type,
 {
   mini_object->type = type;
   mini_object->refcount = 1;
-  mini_object->lockstate =
-      (flags & GST_MINI_OBJECT_FLAG_LOCK_READONLY ? GST_LOCK_FLAG_READ : 0);
+  mini_object->lockstate = 0;
   mini_object->flags = flags;
 
   mini_object->copy = copy_func;
@@ -179,6 +178,10 @@ gst_mini_object_lock (GstMiniObject * object, GstLockFlags flags)
   g_return_val_if_fail (object != NULL, FALSE);
   g_return_val_if_fail (GST_MINI_OBJECT_IS_LOCKABLE (object), FALSE);
 
+  if (G_UNLIKELY (object->flags & GST_MINI_OBJECT_FLAG_LOCK_READONLY &&
+          flags & GST_LOCK_FLAG_WRITE))
+    return FALSE;
+
   do {
     access_mode = flags & FLAG_MASK;
     newstate = state = g_atomic_int_get (&object->lockstate);
index 803d1c14c251b208cb0b7dd977fff0baa553f5c7..e609fe23837e879d7d5264fca0c0b8a758df203e 100644 (file)
@@ -909,9 +909,8 @@ post_activate (GstPad * pad, GstPadMode new_mode)
  * push or pull mode, just return. Otherwise dispatches to the pad's activate
  * function to perform the actual activation.
  *
- * If not @active, checks the pad's current mode and calls
- * gst_pad_activate_push() or gst_pad_activate_pull(), as appropriate, with a
- * FALSE argument.
+ * If not @active, calls gst_pad_activate_mode() with the pad's current mode
+ * and a FALSE argument.
  *
  * Returns: #TRUE if the operation was successful.
  *
@@ -1449,8 +1448,8 @@ gst_pad_mark_reconfigure (GstPad * pad)
  * @notify: notify called when @activate will not be used anymore.
  *
  * Sets the given activate function for @pad. The activate function will
- * dispatch to gst_pad_activate_push() or gst_pad_activate_pull() to perform
- * the actual activation. Only makes sense to set on sink pads.
+ * dispatch to gst_pad_activate_mode() to perform the actual activation.
+ * Only makes sense to set on sink pads.
  *
  * Call this function if your sink pad can start a pull-based task.
  */
@@ -3292,15 +3291,24 @@ push_sticky (GstPad * pad, PadEvent * ev, gpointer user_data)
       GST_DEBUG_OBJECT (pad, "event %s marked received",
           GST_EVENT_TYPE_NAME (event));
       break;
+    case GST_FLOW_CUSTOM_SUCCESS:
+      /* we can't assume the event is received when it was dropped */
+      GST_DEBUG_OBJECT (pad, "event %s was dropped, mark pending",
+          GST_EVENT_TYPE_NAME (event));
+      GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS);
+      data->ret = GST_FLOW_OK;
+      break;
     case GST_FLOW_NOT_LINKED:
       /* not linked is not a problem, we are sticky so the event will be
        * sent later but only for non-EOS events */
-      GST_DEBUG_OBJECT (pad, "pad was not linked");
+      GST_DEBUG_OBJECT (pad, "pad was not linked, mark pending");
       if (GST_EVENT_TYPE (event) != GST_EVENT_EOS)
         data->ret = GST_FLOW_OK;
-      /* fallthrough */
+      GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS);
+      break;
     default:
-      GST_DEBUG_OBJECT (pad, "mark pending events");
+      GST_DEBUG_OBJECT (pad, "result %s, mark pending events",
+          gst_flow_get_name (data->ret));
       GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS);
       break;
   }
@@ -3337,6 +3345,10 @@ check_sticky (GstPad * pad)
       if (ev && !ev->received) {
         data.ret = gst_pad_push_event_unchecked (pad, gst_event_ref (ev->event),
             GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM);
+        /* the event could have been dropped. Because this can only
+         * happen if the user asked for it, it's not an error */
+        if (data.ret == GST_FLOW_CUSTOM_SUCCESS)
+          data.ret = GST_FLOW_OK;
       }
     }
   }
@@ -3567,7 +3579,7 @@ sticky_failed:
   }
 no_peer:
   {
-    GST_WARNING_OBJECT (pad, "pad has no peer");
+    GST_INFO_OBJECT (pad, "pad has no peer");
     GST_OBJECT_UNLOCK (pad);
     return FALSE;
   }
@@ -4361,8 +4373,9 @@ probe_stopped_unref:
   }
 }
 
+/* must be called with pad object lock */
 static gboolean
-gst_pad_store_sticky_event (GstPad * pad, GstEvent * event, gboolean locked)
+gst_pad_store_sticky_event (GstPad * pad, GstEvent * event)
 {
   guint i, len;
   GstEventType type;
@@ -4410,14 +4423,12 @@ gst_pad_store_sticky_event (GstPad * pad, GstEvent * event, gboolean locked)
 
     switch (GST_EVENT_TYPE (event)) {
       case GST_EVENT_CAPS:
-        if (locked)
-          GST_OBJECT_UNLOCK (pad);
+        GST_OBJECT_UNLOCK (pad);
 
         GST_DEBUG_OBJECT (pad, "notify caps");
         g_object_notify_by_pspec ((GObject *) pad, pspec_caps);
 
-        if (locked)
-          GST_OBJECT_LOCK (pad);
+        GST_OBJECT_LOCK (pad);
         break;
       default:
         break;
@@ -4533,7 +4544,6 @@ probe_stopped:
     switch (ret) {
       case GST_FLOW_CUSTOM_SUCCESS:
         GST_DEBUG_OBJECT (pad, "dropped event");
-        ret = GST_FLOW_OK;
         break;
       default:
         GST_DEBUG_OBJECT (pad, "an error occured %s", gst_flow_get_name (ret));
@@ -4610,10 +4620,10 @@ gst_pad_push_event (GstPad * pad, GstEvent * event)
     if (G_UNLIKELY (GST_PAD_IS_EOS (pad)))
       goto eos;
 
-    /* srcpad sticky events are store immediately, the received flag is set
+    /* srcpad sticky events are stored immediately, the received flag is set
      * to FALSE and will be set to TRUE when we can successfully push the
      * event to the peer pad */
-    if (gst_pad_store_sticky_event (pad, event, TRUE)) {
+    if (gst_pad_store_sticky_event (pad, event)) {
       GST_DEBUG_OBJECT (pad, "event %s updated", GST_EVENT_TYPE_NAME (event));
     }
     if (GST_EVENT_TYPE (event) == GST_EVENT_EOS)
@@ -4625,8 +4635,12 @@ gst_pad_push_event (GstPad * pad, GstEvent * event)
     res = (check_sticky (pad) == GST_FLOW_OK);
   }
   if (!sticky) {
+    GstFlowReturn ret;
+
     /* other events are pushed right away */
-    res = (gst_pad_push_event_unchecked (pad, event, type) == GST_FLOW_OK);
+    ret = gst_pad_push_event_unchecked (pad, event, type);
+    /* dropped events by a probe are not an error */
+    res = (ret == GST_FLOW_OK || ret == GST_FLOW_CUSTOM_SUCCESS);
   } else {
     /* Errors in sticky event pushing are no problem and ignored here
      * as they will cause more meaningful errors during data flow.
@@ -4823,11 +4837,23 @@ gst_pad_send_event_unchecked (GstPad * pad, GstEvent * event,
 
   if (sticky) {
     if (ret == GST_FLOW_OK) {
+      GST_OBJECT_LOCK (pad);
+      /* can't store on flushing pads */
+      if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
+        goto flushing;
+
+      if (G_UNLIKELY (GST_PAD_IS_EOS (pad)))
+        goto eos;
+
       /* after the event function accepted the event, we can store the sticky
        * event on the pad */
-      gst_pad_store_sticky_event (pad, event, FALSE);
+      if (gst_pad_store_sticky_event (pad, event)) {
+        GST_DEBUG_OBJECT (pad, "event %s updated", GST_EVENT_TYPE_NAME (event));
+      }
       if (event_type == GST_EVENT_EOS)
         GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_EOS);
+
+      GST_OBJECT_UNLOCK (pad);
     }
     gst_event_unref (event);
   }
index 9fd605c32ead0c7963f63276b9fd083e4f90b34a..0378b5abbb25a183c10b894d7c76c7ecd16747f3 100644 (file)
@@ -154,7 +154,6 @@ typedef enum {
  * Note that the custom return values should not be exposed outside of the
  * element scope.
  */
-/* FIXME 0.11: remove custom flow returns */
 typedef enum {
   /* custom success starts here */
   GST_FLOW_CUSTOM_SUCCESS_2 = 102,
@@ -309,7 +308,8 @@ typedef GstFlowReturn               (*GstPadChainListFunction)      (GstPad *pad, GstObject *paren
  *
  * This function is installed on a source pad with
  * gst_pad_set_getrange_function() and can only be called on source pads after
- * they are successfully activated with gst_pad_activate_pull().
+ * they are successfully activated with gst_pad_activate_mode() with the
+ * #GST_PAD_MODE_PULL.
  *
  * @offset and @length are always given in byte units. @offset must normally be a value
  * between 0 and the length in bytes of the data available on @pad. The
@@ -562,6 +562,8 @@ GstBufferList* gst_pad_probe_info_get_buffer_list (GstPadProbeInfo * info);
  * blocking type.
  *
  * The callback is allowed to modify the data pointer in @info.
+ *
+ * Returns: a #GstPadProbeReturn
  */
 typedef GstPadProbeReturn   (*GstPadProbeCallback)   (GstPad *pad, GstPadProbeInfo *info,
                                                       gpointer user_data);
index c15f0034d45c078141e39bcb61d564c9c477a6d9..f92b5c34fd419c7cb530285708f11515eed9d415 100644 (file)
@@ -182,7 +182,7 @@ gst_pipeline_class_init (GstPipelineClass * klass)
 
   gobject_class->dispose = gst_pipeline_dispose;
 
-  gst_element_class_set_metadata (gstelement_class, "Pipeline object",
+  gst_element_class_set_static_metadata (gstelement_class, "Pipeline object",
       "Generic/Bin",
       "Complete pipeline object",
       "Erik Walthinsen <omega@cse.ogi.edu>, Wim Taymans <wim@fluendo.com>");
index 0ee39a36a785ba60ad0ce0f0966ee21600f30780..31351d61d37aec7ab8b3c3166beaf2b9f8b43d13 100644 (file)
@@ -653,8 +653,9 @@ check_release_datetime (const gchar * date_time)
 static GMutex gst_plugin_loading_mutex;
 
 #define CHECK_PLUGIN_DESC_FIELD(desc,field,fn)                               \
-  if (G_UNLIKELY ((desc)->field == NULL)) {                                  \
-    GST_ERROR ("GstPluginDesc for '%s' has no %s", fn, G_STRINGIFY (field)); \
+  if (G_UNLIKELY ((desc)->field == NULL || *(desc)->field == '\0')) {        \
+    g_warning ("Plugin description for '%s' has no valid %s field", fn, G_STRINGIFY (field)); \
+    goto return_error;                                                       \
   }
 
 /**
@@ -776,8 +777,7 @@ gst_plugin_load_file (const gchar * filename, GError ** error)
   plugin->orig_desc = desc;
 
   if (new_plugin) {
-    /* check plugin description: complain about bad values but accept them, to
-     * maintain backwards compatibility (FIXME: 0.11) */
+    /* check plugin description: complain about bad values and fail */
     CHECK_PLUGIN_DESC_FIELD (plugin->orig_desc, name, filename);
     CHECK_PLUGIN_DESC_FIELD (plugin->orig_desc, description, filename);
     CHECK_PLUGIN_DESC_FIELD (plugin->orig_desc, version, filename);
index 065834eb61f3cbd6116ec54063729df81f6f0815..1fda31c076d36dd7627914ef8fef00e80ad0591e 100644 (file)
@@ -317,18 +317,6 @@ gst_plugin_feature_check_version (GstPluginFeature * feature,
     GST_DEBUG ("version string '%s' parsed to %d values", ver_str, nscan);
 
     if (nscan >= 3) {
-      if (!g_str_has_prefix (PACKAGE_VERSION, "1.")) {
-        /* FIXME 1.0: Remove this before doing the actual 1.0.0 release */
-        if ((major == 0 && minor == 11 && micro >= 90)) {
-          major = 1;
-          minor = 0;
-          micro = 0;
-          nano = 0;
-        }
-      } else {
-        GST_FIXME ("Remove pre-1.0 versions mangling");
-      }
-
       if (major > min_major)
         ret = TRUE;
       else if (major < min_major)
index 5a0a88665f2c0743c389ae3b17124157a54c5824..d790b3122c47612ea528aaafd1b40ba0dc406012 100644 (file)
@@ -271,7 +271,7 @@ find_index (GArray * array, GstPollFD * fd)
 #if !defined(HAVE_PPOLL) && defined(HAVE_POLL)
 /* check if all file descriptors will fit in an fd_set */
 static gboolean
-selectable_fds (const GstPoll * set)
+selectable_fds (GstPoll * set)
 {
   guint i;
 
@@ -311,7 +311,7 @@ pollable_timeout (GstClockTime timeout)
 #endif
 
 static GstPollMode
-choose_mode (const GstPoll * set, GstClockTime timeout)
+choose_mode (GstPoll * set, GstClockTime timeout)
 {
   GstPollMode mode;
 
index 404f34a32e229323857f5e5896b0327d672d5a2d..68a657ccb64d0225b1cae54e21e0512b1d1b6c80 100644 (file)
@@ -174,7 +174,7 @@ preset_get_paths (GstPreset * preset, const gchar ** preset_user_path,
     if (!(preset_path = g_type_get_qdata (type, preset_system_path_quark))) {
       gchar *preset_dir;
 
-      /* system presets in '$GST_DATADIR/gstreamer-0.10/presets/GstAudioPanorama.prs' */
+      /* system presets in '$GST_DATADIR/gstreamer-1.0/presets/GstAudioPanorama.prs' */
       preset_dir = g_build_filename (GST_DATADIR, "gstreamer-" GST_API_VERSION,
           "presets", NULL);
       GST_INFO_OBJECT (preset, "system_preset_dir: '%s'", preset_dir);
@@ -390,7 +390,6 @@ preset_get_keyfile (GstPreset * preset)
         if (presets)
           g_key_file_free (presets);
         presets = in_user;
-        version = version_user;
       }
     }
 
index 008cf5557dddc318379c76605e4fdb844d0d9a78..25a4f38c9724b9f1f2cfe519d504f7666460efc3 100644 (file)
@@ -1109,7 +1109,7 @@ gst_query_parse_buffering_percent (GstQuery * query, gboolean * busy,
  * @mode: a buffering mode
  * @avg_in: the average input rate
  * @avg_out: the average output rate
- * @buffering_left: amount of buffering time left
+ * @buffering_left: amount of buffering time left in milliseconds
  *
  * Configures the buffering stats values in @query.
  */
@@ -1136,7 +1136,8 @@ gst_query_set_buffering_stats (GstQuery * query, GstBufferingMode mode,
  * @mode: (out) (allow-none): a buffering mode, or NULL
  * @avg_in: (out) (allow-none): the average input rate, or NULL
  * @avg_out: (out) (allow-none): the average output rat, or NULLe
- * @buffering_left: (out) (allow-none): amount of buffering time left, or NULL
+ * @buffering_left: (out) (allow-none): amount of buffering time left in
+ *     milliseconds, or NULL
  *
  * Extracts the buffering stats values from @query.
  */
index 93cb0b0a8184a4832ca883b0f4ca0a620e5186c0..adfe6bac13fb85d36dde6f1f72371b5f94e58a37 100644 (file)
@@ -84,7 +84,7 @@ _gst_sample_free (GstSample * sample)
  * gst_sample_new:
  * @buffer: (transfer none) (allow-none): a #GstBuffer, or NULL
  * @caps: (transfer none) (allow-none): a #GstCaps, or NULL
- * @segment: transfer none) (allow-none): a #GstSegment, or NULL
+ * @segment: (transfer none) (allow-none): a #GstSegment, or NULL
  * @info: (transfer full) (allow-none): a #GstStructure, or NULL
  *
  * Create a new #GstSample with the provided details.
index 580106b3594292bfc606dac0c41c08a2c48476ff..c364ce60fddbc02b22a5d42c68760fba637b256c 100644 (file)
@@ -131,7 +131,7 @@ typedef enum {
  * values of the seek flags.
  */
 /* Note: update gst_segment_do_seek() when adding new flags here */
-typedef enum {
+typedef enum { /*< flags >*/
   GST_SEGMENT_FLAG_NONE            = GST_SEEK_FLAG_NONE,
   GST_SEGMENT_FLAG_RESET           = GST_SEEK_FLAG_FLUSH,
   GST_SEGMENT_FLAG_SKIP            = GST_SEEK_FLAG_SKIP,
index 20237bf3a491114b59a2b9cc96a0f761ab1fb60d..d978b2d440d4f1fa670f7eeb8c1931c3bc0ea743 100644 (file)
@@ -316,7 +316,7 @@ _priv_gst_tag_initialize (void)
           "or produced"), NULL);
   gst_tag_register_static (GST_TAG_GEO_LOCATION_SUBLOCATION, GST_TAG_FLAG_META,
       G_TYPE_STRING, _("geo location sublocation"),
-      _("a location whithin a city where the media has been produced "
+      _("a location within a city where the media has been produced "
           "or created (e.g. the neighborhood)"), NULL);
   gst_tag_register_static (GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR,
       GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location horizontal error"),
index b51bd4a581a75f8032e2b64814eb1a39f03df0c2..552a66a4eb36ebdbbf1f6105e572deb2fdc42da8 100644 (file)
@@ -562,7 +562,7 @@ gst_uri_protocol_is_supported (const GstURIType type, const gchar * protocol)
  *
  * Creates an element for handling the given URI.
  *
- * Returns: (transfer full): a new element or NULL if none could be created
+ * Returns: (transfer floating): a new element or NULL if none could be created
  */
 GstElement *
 gst_element_make_from_uri (const GstURIType type, const gchar * uri,
index 80c59fed95ed38de2a0ed81e2221d31e75bdfd25..de9fa06240198242ae7022da803d07946489f978 100644 (file)
@@ -3498,7 +3498,7 @@ gst_value_intersect_list (GValue * dest, const GValue * value1,
 
         gst_value_init_and_copy (&temp, dest);
         g_value_unset (dest);
-        gst_value_list_concat (dest, &temp, &intersection);
+        gst_value_list_merge (dest, &temp, &intersection);
         g_value_unset (&temp);
       }
       g_value_unset (&intersection);
index b578d9e58f346664c8a6849a48cd680c49a6727a..78c7949fdb95ac57ab7ab6fde917232d29bcb217 100644 (file)
@@ -83,7 +83,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -339,6 +339,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -375,6 +378,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 164198f1cf3c43f37c3f9050a3a05229c90a2864..51454ce3f788ab781e77bbab197b41db32c61b15 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.5.  */
+/* A Bison parser, made by GNU Bison 2.6.2.  */
 
 /* Bison interface for Yacc-like parsers in C
    
-      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
+#ifndef PRIV_GST_PARSE_YY_GRAMMAR_TAB_H
+# define PRIV_GST_PARSE_YY_GRAMMAR_TAB_H
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int priv_gst_parse_yydebug;
+#endif
 
 /* Tokens.  */
 #ifndef YYTOKENTYPE
 #endif
 
 
-
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
 {
-
-/* Line 2068 of yacc.c  */
+/* Line 2049 of yacc.c  */
 #line 632 "./grammar.y"
 
     gchar *s;
@@ -64,9 +71,8 @@ typedef union YYSTYPE
     graph_t *g;
 
 
-
-/* Line 2068 of yacc.c  */
-#line 70 "grammar.tab.h"
+/* Line 2049 of yacc.c  */
+#line 76 "grammar.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -74,5 +80,18 @@ typedef union YYSTYPE
 #endif
 
 
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int priv_gst_parse_yyparse (void *YYPARSE_PARAM);
+#else
+int priv_gst_parse_yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int priv_gst_parse_yyparse (void *scanner, graph_t *graph);
+#else
+int priv_gst_parse_yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
-
+#endif /* !PRIV_GST_PARSE_YY_GRAMMAR_TAB_H  */
index fa4f89b2e263b5e03890475bbab3b919d815a7fc..3245b60bbb49bfbc1bee3c938abb5c94caba5274 100644 (file)
@@ -38,6 +38,26 @@ hierarchy, and a set of media-agnostic core elements.
    </GitRepository>
  </repository> 
 
+ <release>
+  <Version>
+   <revision>1.0.2</revision>
+   <branch>1.0</branch>
+   <name></name>
+   <created>2012-10-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.0.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.0.1</revision>
+   <branch>1.0</branch>
+   <name></name>
+   <created>2012-10-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.0.1.tar.xz" />
+  </Version>
+ </release>
+
  <release>
   <Version>
    <revision>1.0.0</revision>
index f34ac77aa506740a56e3496896ada436bf8d1f44..12d32599356e4fbea1e54d1f83d9355b9847cc59 100644 (file)
@@ -4,7 +4,7 @@
 %define        _glib2          2.32.0
 
 Name:          %{gstreamer}
-Version:       1.0.0
+Version:       1.0.2
 Release:       1
 Summary:       GStreamer streaming media framework runtime
 
index 21cff6ca9c3b0a84eff686f444ea896841e9adb5..96d1071e36f017bfd0cd976221352515e0c6f785 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -339,6 +339,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -375,6 +378,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 67d6d43b8501ad7b5f482a1fcc3c20742a1680ee..5aec43c1bd98c5a16e8f9bae600bd15c80709161 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -338,6 +338,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -374,6 +377,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 1183bb64507b0f7b800b4f754a42ea5567142a30..55a73707228539e4a968563f86d6d6237304d831 100644 (file)
@@ -85,7 +85,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -382,6 +382,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -418,6 +421,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 4ab3d5c96a5dc37da321fa01997271a67ca3a64a..20532212481292c8ee0aa9b4e7faf12b192b6530 100644 (file)
@@ -921,7 +921,7 @@ gst_base_parse_sink_default (GstBaseParse * parse, GstEvent * event)
     {
       const GstSegment *in_segment;
       GstSegment out_segment;
-      gint64 offset = 0, next_pts;
+      gint64 offset = 0, next_dts;
 
       gst_event_parse_segment (event, &in_segment);
       gst_segment_init (&out_segment, GST_FORMAT_TIME);
@@ -957,7 +957,7 @@ gst_base_parse_sink_default (GstBaseParse * parse, GstEvent * event)
           out_segment.stop = seek->segment.stop;
           out_segment.time = seek->segment.start;
 
-          next_pts = seek->start_ts;
+          next_dts = seek->start_ts;
           parse->priv->exact_position = seek->accurate;
           g_free (seek);
         } else {
@@ -965,11 +965,11 @@ gst_base_parse_sink_default (GstBaseParse * parse, GstEvent * event)
           /* as these are only estimates, stop is kept open-ended to avoid
            * premature cutting */
           gst_base_parse_convert (parse, GST_FORMAT_BYTES, in_segment->start,
-              GST_FORMAT_TIME, (gint64 *) & next_pts);
+              GST_FORMAT_TIME, (gint64 *) & next_dts);
 
-          out_segment.start = next_pts;
+          out_segment.start = next_dts;
           out_segment.stop = GST_CLOCK_TIME_NONE;
-          out_segment.time = next_pts;
+          out_segment.time = next_dts;
 
           parse->priv->exact_position = (in_segment->start == 0);
         }
@@ -992,12 +992,12 @@ gst_base_parse_sink_default (GstBaseParse * parse, GstEvent * event)
 
         event = gst_event_new_segment (&out_segment);
 
-        next_pts = 0;
+        next_dts = 0;
       } else {
         /* not considered BYTE seekable if it is talking to us in TIME,
          * whatever else it might claim */
         parse->priv->upstream_seekable = FALSE;
-        next_pts = in_segment->start;
+        next_dts = in_segment->start;
       }
 
       memcpy (&parse->segment, &out_segment, sizeof (GstSegment));
@@ -1023,7 +1023,9 @@ gst_base_parse_sink_default (GstBaseParse * parse, GstEvent * event)
 
       parse->priv->offset = offset;
       parse->priv->sync_offset = offset;
-      parse->priv->next_pts = next_pts;
+      parse->priv->next_dts = next_dts;
+      if (parse->priv->pts_interpolate)
+        parse->priv->next_pts = next_dts;
       parse->priv->last_pts = GST_CLOCK_TIME_NONE;
       parse->priv->last_dts = GST_CLOCK_TIME_NONE;
       parse->priv->discont = TRUE;
@@ -1572,7 +1574,7 @@ gst_base_parse_add_index_entry (GstBaseParse * parse, guint64 offset,
     if (GST_CLOCK_TIME_IS_VALID (parse->priv->index_last_ts) &&
         GST_CLOCK_DIFF (parse->priv->index_last_ts, ts) <
         parse->priv->idx_interval) {
-      GST_DEBUG_OBJECT (parse, "entry too close to last time %" GST_TIME_FORMAT,
+      GST_LOG_OBJECT (parse, "entry too close to last time %" GST_TIME_FORMAT,
           GST_TIME_ARGS (parse->priv->index_last_ts));
       goto exit;
     }
@@ -1583,7 +1585,7 @@ gst_base_parse_add_index_entry (GstBaseParse * parse, guint64 offset,
 
       gst_base_parse_find_offset (parse, ts, TRUE, &prev_ts);
       if (GST_CLOCK_DIFF (prev_ts, ts) < parse->priv->idx_interval) {
-        GST_DEBUG_OBJECT (parse,
+        GST_LOG_OBJECT (parse,
             "entry too close to existing entry %" GST_TIME_FORMAT,
             GST_TIME_ARGS (prev_ts));
         parse->priv->index_last_offset = offset;
@@ -2908,7 +2910,7 @@ gst_base_parse_loop (GstPad * pad)
   parse = GST_BASE_PARSE (gst_pad_get_parent (pad));
   klass = GST_BASE_PARSE_GET_CLASS (parse);
 
-  GST_DEBUG_OBJECT (parse, "hello");
+  GST_LOG_OBJECT (parse, "Entering parse loop");
 
   if (G_UNLIKELY (parse->priv->push_stream_start)) {
     gchar *stream_id;
@@ -3341,7 +3343,7 @@ gst_base_parse_set_passthrough (GstBaseParse * parse, gboolean passthrough)
 /**
  * gst_base_parse_set_pts_interpolation:
  * @parse: a #GstBaseParse
- * @passthrough: %TRUE if parser should interpolate PTS timestamps
+ * @pts_interpolate: %TRUE if parser should interpolate PTS timestamps
  *
  * By default, the base class will guess PTS timestamps using a simple
  * interpolation (previous timestamp + duration), which is incorrect for
@@ -4007,8 +4009,9 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
       parse->priv->last_offset = seekpos;
       parse->priv->seen_keyframe = FALSE;
       parse->priv->discont = TRUE;
-      parse->priv->next_pts = start_ts;
-      parse->priv->next_dts = GST_CLOCK_TIME_NONE;
+      parse->priv->next_dts = start_ts;
+      if (parse->priv->pts_interpolate)
+        parse->priv->next_pts = start_ts;
       parse->priv->last_dts = GST_CLOCK_TIME_NONE;
       parse->priv->last_pts = GST_CLOCK_TIME_NONE;
       parse->priv->sync_offset = seekpos;
index 31994ade50e5e3536dbb8a4d0511437436b5756d..841a36ca8a0eeb208c4f52f9d9a76093214c5ae7 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /**
- * SECTION:gstbasesink:
+ * SECTION:gstbasesink
  * @short_description: Base class for sink elements
  * @see_also: #GstBaseTransform, #GstBaseSrc
  *
  *   // #GST_PAD_SINK and name "sink"
  *   gst_element_class_add_pad_template (gstelement_class,
  *       gst_static_pad_template_get (&amp;sinktemplate));
- *   // see #GstElementDetails
- *   gst_element_class_set_details (gstelement_class, &amp;details);
+ *
+ *   gst_element_class_set_static_metadata (gstelement_class,
+ *       "Sink name",
+ *       "Sink",
+ *       "My Sink element",
+ *       "The author &lt;my.sink@my.email&gt;");
  * }
  * ]|
  *
index cf81b9f24bca9fbae1275e63e76352e2fac33f4d..f8f3302c29821cb4569c1b12f19ec442069a1924 100644 (file)
  *   // #GST_PAD_SRC and name "src"
  *   gst_element_class_add_pad_template (gstelement_class,
  *       gst_static_pad_template_get (&amp;srctemplate));
- *   // see #GstElementDetails
- *   gst_element_class_set_details (gstelement_class, &amp;details);
+ *
+ *   gst_element_class_set_static_metadata (gstelement_class,
+ *      "Source name",
+ *      "Source",
+ *      "My Source element",
+ *      "The author &lt;my.sink@my.email&gt;");
  * }
  * ]|
  *
@@ -179,6 +183,12 @@ GST_DEBUG_CATEGORY_STATIC (gst_base_src_debug);
 #define GST_LIVE_SIGNAL(elem)                 g_cond_signal (GST_LIVE_GET_COND (elem));
 #define GST_LIVE_BROADCAST(elem)              g_cond_broadcast (GST_LIVE_GET_COND (elem));
 
+
+#define GST_ASYNC_GET_COND(elem)              (&GST_BASE_SRC_CAST(elem)->priv->async_cond)
+#define GST_ASYNC_WAIT(elem)                  g_cond_wait (GST_ASYNC_GET_COND (elem), GST_OBJECT_GET_LOCK (elem))
+#define GST_ASYNC_SIGNAL(elem)                g_cond_signal (GST_ASYNC_GET_COND (elem));
+
+
 /* BaseSrc signals and args */
 enum
 {
@@ -247,6 +257,8 @@ struct _GstBaseSrcPrivate
   GstBufferPool *pool;
   GstAllocator *allocator;
   GstAllocationParams params;
+
+  GCond async_cond;
 };
 
 static GstElementClass *parent_class = NULL;
@@ -440,6 +452,7 @@ gst_base_src_init (GstBaseSrc * basesrc, gpointer g_class)
   basesrc->priv->do_timestamp = DEFAULT_DO_TIMESTAMP;
   g_atomic_int_set (&basesrc->priv->have_events, FALSE);
 
+  g_cond_init (&basesrc->priv->async_cond);
   basesrc->priv->start_result = GST_FLOW_FLUSHING;
   GST_OBJECT_FLAG_UNSET (basesrc, GST_BASE_SRC_FLAG_STARTED);
   GST_OBJECT_FLAG_UNSET (basesrc, GST_BASE_SRC_FLAG_STARTING);
@@ -458,6 +471,7 @@ gst_base_src_finalize (GObject * object)
 
   g_mutex_clear (&basesrc->live_lock);
   g_cond_clear (&basesrc->live_cond);
+  g_cond_clear (&basesrc->priv->async_cond);
 
   event_p = &basesrc->pending_seek;
   gst_event_replace (event_p, NULL);
@@ -777,7 +791,7 @@ gst_base_src_get_do_timestamp (GstBaseSrc * src)
  * @src: The source
  * @start: The new start value for the segment
  * @stop: Stop value for the new segment
- * @position: The position value for the new segent
+ * @time: The new time value for the start of the new segent
  *
  * Prepare a new seamless segment for emission downstream. This function must
  * only be called by derived sub-classes, and only from the create() function,
@@ -790,25 +804,27 @@ gst_base_src_get_do_timestamp (GstBaseSrc * src)
  */
 gboolean
 gst_base_src_new_seamless_segment (GstBaseSrc * src, gint64 start, gint64 stop,
-    gint64 position)
+    gint64 time)
 {
   gboolean res = TRUE;
 
-  GST_DEBUG_OBJECT (src,
-      "Starting new seamless segment. Start %" GST_TIME_FORMAT " stop %"
-      GST_TIME_FORMAT " position %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
-      GST_TIME_ARGS (stop), GST_TIME_ARGS (position));
-
   GST_OBJECT_LOCK (src);
 
   src->segment.base = gst_segment_to_running_time (&src->segment,
       src->segment.format, src->segment.position);
-  src->segment.start = start;
+  src->segment.position = src->segment.start = start;
   src->segment.stop = stop;
-  src->segment.position = position;
+  src->segment.time = time;
 
-  /* forward, we send data from position to stop */
+  /* Mark pending segment. Will be sent before next data */
   src->priv->segment_pending = TRUE;
+
+  GST_DEBUG_OBJECT (src,
+      "Starting new seamless segment. Start %" GST_TIME_FORMAT " stop %"
+      GST_TIME_FORMAT " time %" GST_TIME_FORMAT " base %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (start), GST_TIME_ARGS (stop), GST_TIME_ARGS (time),
+      GST_TIME_ARGS (src->segment.base));
+
   GST_OBJECT_UNLOCK (src);
 
   src->priv->discont = TRUE;
@@ -3085,6 +3101,8 @@ gst_base_src_start (GstBaseSrc * basesrc)
   gboolean result;
 
   GST_LIVE_LOCK (basesrc);
+
+  GST_OBJECT_LOCK (basesrc);
   if (GST_BASE_SRC_IS_STARTING (basesrc))
     goto was_starting;
   if (GST_BASE_SRC_IS_STARTED (basesrc))
@@ -3092,12 +3110,12 @@ gst_base_src_start (GstBaseSrc * basesrc)
 
   basesrc->priv->start_result = GST_FLOW_FLUSHING;
   GST_OBJECT_FLAG_SET (basesrc, GST_BASE_SRC_FLAG_STARTING);
+  gst_segment_init (&basesrc->segment, basesrc->segment.format);
+  GST_OBJECT_UNLOCK (basesrc);
+
   basesrc->num_buffers_left = basesrc->num_buffers;
   basesrc->running = FALSE;
   basesrc->priv->segment_pending = FALSE;
-  GST_OBJECT_LOCK (basesrc);
-  gst_segment_init (&basesrc->segment, basesrc->segment.format);
-  GST_OBJECT_UNLOCK (basesrc);
   GST_LIVE_UNLOCK (basesrc);
 
   bclass = GST_BASE_SRC_GET_CLASS (basesrc);
@@ -3109,8 +3127,12 @@ gst_base_src_start (GstBaseSrc * basesrc)
   if (!result)
     goto could_not_start;
 
-  if (!gst_base_src_is_async (basesrc))
+  if (!gst_base_src_is_async (basesrc)) {
     gst_base_src_start_complete (basesrc, GST_FLOW_OK);
+    /* not really waiting here, we call this to get the result
+     * from the start_complete call */
+    result = gst_base_src_start_wait (basesrc) == GST_FLOW_OK;
+  }
 
   return result;
 
@@ -3118,12 +3140,14 @@ gst_base_src_start (GstBaseSrc * basesrc)
 was_starting:
   {
     GST_DEBUG_OBJECT (basesrc, "was starting");
+    GST_OBJECT_UNLOCK (basesrc);
     GST_LIVE_UNLOCK (basesrc);
     return TRUE;
   }
 was_started:
   {
     GST_DEBUG_OBJECT (basesrc, "was started");
+    GST_OBJECT_UNLOCK (basesrc);
     GST_LIVE_UNLOCK (basesrc);
     return TRUE;
   }
@@ -3226,12 +3250,12 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret)
       goto no_get_range;
   }
 
-  GST_LIVE_LOCK (basesrc);
+  GST_OBJECT_LOCK (basesrc);
   GST_OBJECT_FLAG_SET (basesrc, GST_BASE_SRC_FLAG_STARTED);
   GST_OBJECT_FLAG_UNSET (basesrc, GST_BASE_SRC_FLAG_STARTING);
   basesrc->priv->start_result = ret;
-  GST_LIVE_SIGNAL (basesrc);
-  GST_LIVE_UNLOCK (basesrc);
+  GST_ASYNC_SIGNAL (basesrc);
+  GST_OBJECT_UNLOCK (basesrc);
 
   GST_PAD_STREAM_UNLOCK (basesrc->srcpad);
 
@@ -3257,11 +3281,11 @@ no_get_range:
   }
 error:
   {
-    GST_LIVE_LOCK (basesrc);
+    GST_OBJECT_LOCK (basesrc);
     basesrc->priv->start_result = ret;
     GST_OBJECT_FLAG_UNSET (basesrc, GST_BASE_SRC_FLAG_STARTING);
-    GST_LIVE_SIGNAL (basesrc);
-    GST_LIVE_UNLOCK (basesrc);
+    GST_ASYNC_SIGNAL (basesrc);
+    GST_OBJECT_UNLOCK (basesrc);
     return;
   }
 }
@@ -3279,27 +3303,16 @@ gst_base_src_start_wait (GstBaseSrc * basesrc)
 {
   GstFlowReturn result;
 
-  GST_LIVE_LOCK (basesrc);
-  if (G_UNLIKELY (basesrc->priv->flushing))
-    goto flushing;
-
+  GST_OBJECT_LOCK (basesrc);
   while (GST_BASE_SRC_IS_STARTING (basesrc)) {
-    GST_LIVE_WAIT (basesrc);
-    if (G_UNLIKELY (basesrc->priv->flushing))
-      goto flushing;
+    GST_ASYNC_WAIT (basesrc);
   }
   result = basesrc->priv->start_result;
-  GST_LIVE_UNLOCK (basesrc);
+  GST_OBJECT_UNLOCK (basesrc);
 
-  return result;
+  GST_DEBUG_OBJECT (basesrc, "got %s", gst_flow_get_name (result));
 
-  /* ERRORS */
-flushing:
-  {
-    GST_DEBUG_OBJECT (basesrc, "we are flushing");
-    GST_LIVE_UNLOCK (basesrc);
-    return GST_FLOW_FLUSHING;
-  }
+  return result;
 }
 
 static gboolean
@@ -3315,15 +3328,15 @@ gst_base_src_stop (GstBaseSrc * basesrc)
   /* stop the task */
   gst_pad_stop_task (basesrc->srcpad);
 
-  GST_LIVE_LOCK (basesrc);
+  GST_OBJECT_LOCK (basesrc);
   if (!GST_BASE_SRC_IS_STARTED (basesrc) && !GST_BASE_SRC_IS_STARTING (basesrc))
     goto was_stopped;
 
   GST_OBJECT_FLAG_UNSET (basesrc, GST_BASE_SRC_FLAG_STARTING);
   GST_OBJECT_FLAG_UNSET (basesrc, GST_BASE_SRC_FLAG_STARTED);
   basesrc->priv->start_result = GST_FLOW_FLUSHING;
-  GST_LIVE_SIGNAL (basesrc);
-  GST_LIVE_UNLOCK (basesrc);
+  GST_ASYNC_SIGNAL (basesrc);
+  GST_OBJECT_UNLOCK (basesrc);
 
   bclass = GST_BASE_SRC_GET_CLASS (basesrc);
   if (bclass->stop)
@@ -3336,7 +3349,7 @@ gst_base_src_stop (GstBaseSrc * basesrc)
 was_stopped:
   {
     GST_DEBUG_OBJECT (basesrc, "was started");
-    GST_LIVE_UNLOCK (basesrc);
+    GST_OBJECT_UNLOCK (basesrc);
     return TRUE;
   }
 }
index b0ae337c46ee5a7638ce758e925a26ea732363b0..466f0fc7ec4ea63a8b82d5cb892842f28a9fabcc 100644 (file)
@@ -255,7 +255,7 @@ guint           gst_base_src_get_blocksize    (GstBaseSrc *src);
 void            gst_base_src_set_do_timestamp (GstBaseSrc *src, gboolean timestamp);
 gboolean        gst_base_src_get_do_timestamp (GstBaseSrc *src);
 
-gboolean        gst_base_src_new_seamless_segment (GstBaseSrc *src, gint64 start, gint64 stop, gint64 position);
+gboolean        gst_base_src_new_seamless_segment (GstBaseSrc *src, gint64 start, gint64 stop, gint64 time);
 
 gboolean        gst_base_src_set_caps         (GstBaseSrc *src, GstCaps *caps);
 
index 884fde4ee3d34897925ff91ff6a18ac48f3ed422..fb8131e66ffbf715cb612e766b8f00ed96e43397 100644 (file)
@@ -255,6 +255,7 @@ struct _GstBaseTransformPrivate
   GstPadMode pad_mode;
 
   gboolean gap_aware;
+  gboolean prefer_passthrough;
 
   /* QoS stats */
   guint64 processed;
@@ -459,6 +460,7 @@ gst_base_transform_init (GstBaseTransform * trans,
   priv->cache_caps2 = NULL;
   priv->pad_mode = GST_PAD_MODE_NONE;
   priv->gap_aware = FALSE;
+  priv->prefer_passthrough = TRUE;
 
   priv->passthrough = FALSE;
   if (bclass->transform == NULL) {
@@ -664,11 +666,12 @@ gst_base_transform_query_caps (GstBaseTransform * trans, GstPad * pad,
   templ = gst_pad_get_pad_template_caps (pad);
   otempl = gst_pad_get_pad_template_caps (otherpad);
 
-  /* we can do what the peer can */
+  /* first prepare the filter to be send onwards. We need to filter and
+   * transform it to valid caps for the otherpad. */
   if (filter) {
     GST_DEBUG_OBJECT (pad, "filter caps  %" GST_PTR_FORMAT, filter);
 
-    /* filtered against our padtemplate on the other side */
+    /* filtered against our padtemplate of this pad */
     GST_DEBUG_OBJECT (pad, "our template  %" GST_PTR_FORMAT, templ);
     temp = gst_caps_intersect_full (filter, templ, GST_CAPS_INTERSECT_FIRST);
     GST_DEBUG_OBJECT (pad, "intersected %" GST_PTR_FORMAT, temp);
@@ -679,7 +682,7 @@ gst_base_transform_query_caps (GstBaseTransform * trans, GstPad * pad,
     GST_DEBUG_OBJECT (pad, "transformed  %" GST_PTR_FORMAT, peerfilter);
     gst_caps_unref (temp);
 
-    /* and filter against the template of this pad */
+    /* and filter against the template of the other pad */
     GST_DEBUG_OBJECT (pad, "our template  %" GST_PTR_FORMAT, otempl);
     /* We keep the caps sorted like the returned caps */
     temp =
@@ -689,6 +692,7 @@ gst_base_transform_query_caps (GstBaseTransform * trans, GstPad * pad,
     peerfilter = temp;
   }
 
+  /* query the peer with the transformed filter */
   peercaps = gst_pad_peer_query_caps (otherpad, peerfilter);
 
   if (peerfilter)
@@ -722,12 +726,14 @@ gst_base_transform_query_caps (GstBaseTransform * trans, GstPad * pad,
     gst_caps_unref (caps);
     caps = temp;
 
-    /* Now try if we can put the untransformed downstream caps first */
-    temp = gst_caps_intersect_full (peercaps, caps, GST_CAPS_INTERSECT_FIRST);
-    if (!gst_caps_is_empty (temp)) {
-      caps = gst_caps_merge (temp, caps);
-    } else {
-      gst_caps_unref (temp);
+    if (trans->priv->prefer_passthrough) {
+      /* Now try if we can put the untransformed downstream caps first */
+      temp = gst_caps_intersect_full (peercaps, caps, GST_CAPS_INTERSECT_FIRST);
+      if (!gst_caps_is_empty (temp)) {
+        caps = gst_caps_merge (temp, caps);
+      } else {
+        gst_caps_unref (temp);
+      }
     }
   } else {
     gst_caps_unref (caps);
@@ -2592,6 +2598,37 @@ gst_base_transform_set_gap_aware (GstBaseTransform * trans, gboolean gap_aware)
   GST_OBJECT_UNLOCK (trans);
 }
 
+/**
+ * gst_base_transform_set_prefer_passthrough:
+ * @trans: a #GstBaseTransform
+ * @prefer_passthrough: New state
+ *
+ * If @prefer_passthrough is %TRUE (the default), @trans will check and
+ * prefer passthrough caps from the list of caps returned by the
+ * transform_caps vmethod.
+ *
+ * If set to %FALSE, the element must order the caps returned from the
+ * transform_caps function in such a way that the prefered format is
+ * first in the list. This can be interesting for transforms that can do
+ * passthrough transforms but prefer to do something else, like a
+ * capsfilter.
+ *
+ * MT safe.
+ *
+ * Since: 1.0.1
+ */
+void
+gst_base_transform_set_prefer_passthrough (GstBaseTransform * trans,
+    gboolean prefer_passthrough)
+{
+  g_return_if_fail (GST_IS_BASE_TRANSFORM (trans));
+
+  GST_OBJECT_LOCK (trans);
+  trans->priv->prefer_passthrough = prefer_passthrough;
+  GST_DEBUG_OBJECT (trans, "prefer passthrough %d", prefer_passthrough);
+  GST_OBJECT_UNLOCK (trans);
+}
+
 /**
  * gst_base_transform_reconfigure_sink:
  * @trans: a #GstBaseTransform
index e3df619537e3319ccfaa30bd0bb66d2910e9a1ef..666fbb192b7c4fe43c79682b5f393637336c441f 100644 (file)
@@ -283,6 +283,9 @@ gboolean    gst_base_transform_is_qos_enabled   (GstBaseTransform *trans);
 void            gst_base_transform_set_gap_aware    (GstBaseTransform *trans,
                                                      gboolean gap_aware);
 
+void            gst_base_transform_set_prefer_passthrough (GstBaseTransform *trans,
+                                                           gboolean prefer_passthrough);
+
 GstBufferPool * gst_base_transform_get_buffer_pool  (GstBaseTransform *trans);
 void            gst_base_transform_get_allocator    (GstBaseTransform *trans,
                                                      GstAllocator **allocator,
index dfd46b83fa10b69956a84187e7cb50deef992760..9c9b0037fc2ddfd0469df3756387b26ba2e67bcf 100644 (file)
@@ -524,7 +524,7 @@ gst_collect_pads_clip_running_time (GstCollectPads * pads,
  * @user_data: user data to pass to @clip_func
  *
  * Install a clipping function that is called right after a buffer is received
- * on a pad managed by @pads. See #GstCollectPad2ClipFunction for more info.
+ * on a pad managed by @pads. See #GstCollectPadsClipFunction for more info.
  */
 void
 gst_collect_pads_set_clip_function (GstCollectPads * pads,
@@ -1353,7 +1353,7 @@ gst_collect_pads_recalculate_waiting (GstCollectPads * pads)
     }
 
     /* check if the waiting state should be changed */
-    comp_time = MAX (data->segment.start, data->segment.position);
+    comp_time = data->segment.position;
     cmp_res = pads->priv->compare_func (pads, data, comp_time,
         pads->priv->earliest_data, pads->priv->earliest_time,
         pads->priv->compare_user_data);
@@ -1558,6 +1558,30 @@ exit:
 
 }
 
+static GstClockTime
+gst_collect_pads_clip_time (GstCollectPads * pads, GstCollectData * data,
+    GstClockTime time)
+{
+  GstClockTime otime = time;
+  GstBuffer *in, *out = NULL;
+
+  if (pads->priv->clip_func) {
+    in = gst_buffer_new ();
+    GST_BUFFER_TIMESTAMP (in) = time;
+    pads->priv->clip_func (pads, data, in, &out, pads->priv->clip_user_data);
+    if (out) {
+      otime = GST_BUFFER_TIMESTAMP (out);
+      gst_buffer_unref (out);
+    } else {
+      /* FIXME should distinguish between ahead or after segment,
+       * let's assume after segment and use some large time ... */
+      otime = G_MAXINT64 / 2;
+    }
+  }
+
+  return otime;
+}
+
 /**
  * gst_collect_pads_event_default:
  * @pads: the collectpads to use
@@ -1668,9 +1692,6 @@ gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data,
 
       GST_DEBUG_OBJECT (data->pad, "got segment %" GST_SEGMENT_FORMAT, &seg);
 
-      /* sanitize to make sure; reasonably so at start */
-      seg.position = seg.start;
-
       /* default collection can not handle other segment formats than time */
       if (buffer_func && seg.format != GST_FORMAT_TIME) {
         GST_WARNING_OBJECT (pads, "GstCollectPads default collecting "
@@ -1678,14 +1699,20 @@ gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data,
         goto newsegment_done;
       }
 
+      /* need to update segment first */
       data->segment = seg;
       GST_COLLECT_PADS_STATE_SET (data, GST_COLLECT_PADS_STATE_NEW_SEGMENT);
 
+      /* now we can use for e.g. running time */
+      seg.position = gst_collect_pads_clip_time (pads, data, seg.start);
+      /* update again */
+      data->segment = seg;
+
       /* default muxing functionality */
       if (!buffer_func)
         goto newsegment_done;
 
-      gst_collect_pads_handle_position_update (pads, data, seg.start);
+      gst_collect_pads_handle_position_update (pads, data, seg.position);
 
     newsegment_done:
       GST_COLLECT_PADS_STREAM_UNLOCK (pads);
@@ -1704,9 +1731,10 @@ gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data,
         start += duration;
       /* we do not expect another buffer until after gap,
        * so that is our position now */
-      data->segment.position = start;
+      data->segment.position = gst_collect_pads_clip_time (pads, data, start);
 
-      gst_collect_pads_handle_position_update (pads, data, start);
+      gst_collect_pads_handle_position_update (pads, data,
+          data->segment.position);
 
       GST_COLLECT_PADS_STREAM_UNLOCK (pads);
       goto eat;
index ee1c0383079d4d9856f54733fdb6b969f0bb689d..c33ca4f5a1eee86a5afb1b999dec00681a546323 100644 (file)
@@ -147,7 +147,7 @@ typedef GstFlowReturn (*GstCollectPadsFunction) (GstCollectPads *pads, gpointer
  * GstCollectPadsBufferFunction:
  * @pads: the #GstCollectPads that trigered the callback
  * @data: the #GstCollectData of pad that has received the buffer
- * @buffer: the #GstBuffer
+ * @buffer: (transfer full): the #GstBuffer
  * @user_data: user data passed to gst_collect_pads_set_buffer_function()
  *
  * A function that will be called when a (considered oldest) buffer can be muxed.
@@ -217,7 +217,7 @@ typedef gboolean (*GstCollectPadsQueryFunction)        (GstCollectPads *pads, Gs
  * GstCollectPadsClipFunction:
  * @pads: a #GstCollectPads
  * @data: a #GstCollectData
- * @inbuffer: the input #GstBuffer
+ * @inbuffer: (transfer full): the input #GstBuffer
  * @outbuffer: the output #GstBuffer
  * @user_data: user data
  *
index e3dba71922787c7e50659cd6670a3373c97d2357..febf6822fdf8787c60f7db7b1228de951da14cf2 100644 (file)
@@ -114,8 +114,9 @@ helper_find_peek (gpointer data, gint64 offset, guint size)
     for (walk = helper->buffers; walk; walk = walk->next) {
       GstMappedBuffer *bmp = (GstMappedBuffer *) walk->data;
       GstBuffer *buf = GST_BUFFER_CAST (bmp->buffer);
-      guint64 buf_offset = GST_BUFFER_OFFSET (buf);
-      guint buf_size = gst_buffer_get_size (buf);
+
+      buf_offset = GST_BUFFER_OFFSET (buf);
+      buf_size = gst_buffer_get_size (buf);
 
       /* buffers are kept sorted by end offset (highest first) in the list, so
        * at this point we save the current position and stop searching if 
index 3fa368b76f1163a1745cbb36ba73c4a2ad7b0e78..96f2e166ba7158bf0734707dd8107cdb538da24b 100644 (file)
@@ -85,7 +85,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -413,6 +413,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -449,6 +452,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index e7465e34ada902d2973eb41cde161ccaab073a18..e814fc8f9675e37ac89098cc71c04225230ba70c 100644 (file)
@@ -29,9 +29,9 @@ noinst_HEADERS = $(HFILES)
 libcheckinternal_la_SOURCES    = $(CFILES) $(HFILES)
 
 # define HAVE_PTHREAD here as well so we keep changes to the code to a minimum
-if HAVE_PTHREAD_H
-libcheckinternal_la_CFLAGS     = -D_GNU_SOURCE -DHAVE_PTHREAD
-libcheckinternal_la_LIBADD     = -lpthread
+if HAVE_PTHREAD
+libcheckinternal_la_CFLAGS     = $(PTHREAD_CFLAGS) -D_GNU_SOURCE -DHAVE_PTHREAD
+libcheckinternal_la_LIBADD     = $(PTHREAD_LIBS)
 else
 libcheckinternal_la_CFLAGS     = -D_GNU_SOURCE
 libcheckinternal_la_LIBADD     =
index 910f59494de95f9009c95d77c96013e78c892e3d..874eaa00c1f0fc34f81e996aa6c6a9aee98bd4ce 100644 (file)
@@ -83,7 +83,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -99,7 +99,9 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = check.h
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
-libcheckinternal_la_DEPENDENCIES =
+am__DEPENDENCIES_1 =
+@HAVE_PTHREAD_TRUE@libcheckinternal_la_DEPENDENCIES =  \
+@HAVE_PTHREAD_TRUE@    $(am__DEPENDENCIES_1)
 am__objects_1 = libcheckinternal_la-check.lo \
        libcheckinternal_la-check_error.lo \
        libcheckinternal_la-check_list.lo \
@@ -346,6 +348,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -382,6 +387,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -457,12 +463,12 @@ HFILES = \
 
 noinst_HEADERS = $(HFILES)
 libcheckinternal_la_SOURCES = $(CFILES) $(HFILES)
-@HAVE_PTHREAD_H_FALSE@libcheckinternal_la_CFLAGS = -D_GNU_SOURCE
+@HAVE_PTHREAD_FALSE@libcheckinternal_la_CFLAGS = -D_GNU_SOURCE
 
 # define HAVE_PTHREAD here as well so we keep changes to the code to a minimum
-@HAVE_PTHREAD_H_TRUE@libcheckinternal_la_CFLAGS = -D_GNU_SOURCE -DHAVE_PTHREAD
-@HAVE_PTHREAD_H_FALSE@libcheckinternal_la_LIBADD = 
-@HAVE_PTHREAD_H_TRUE@libcheckinternal_la_LIBADD = -lpthread
+@HAVE_PTHREAD_TRUE@libcheckinternal_la_CFLAGS = $(PTHREAD_CFLAGS) -D_GNU_SOURCE -DHAVE_PTHREAD
+@HAVE_PTHREAD_FALSE@libcheckinternal_la_LIBADD = 
+@HAVE_PTHREAD_TRUE@libcheckinternal_la_LIBADD = $(PTHREAD_LIBS)
 all: all-am
 
 .SUFFIXES:
index 54a19ff484881fb86966d115587c27f36519f06e..54029612e6de385b6f1d6a500fffb1de4e0aea7a 100644 (file)
@@ -85,7 +85,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -378,6 +378,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -414,6 +417,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index d68803ba40d4df5376067704a278376e3d1c61b9..b50d3093731de2b3dfaf15ce16ac14f42eec890b 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -337,6 +337,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -373,6 +376,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 7687c2e4916eed8379778622d835090932df205e..1da38660736c3c1aa0fd81596ae011597a1052e8 100644 (file)
@@ -85,7 +85,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -376,6 +376,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -412,6 +415,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index af869aea4073bd84a53cdfb67ead08d308c8c6eb..5b87afe085349482fc0eee4013a37a44788e60ac 100644 (file)
@@ -82,12 +82,13 @@ gst_net_address_meta_get_info (void)
 {
   static const GstMetaInfo *meta_info = NULL;
 
-  if (meta_info == NULL) {
-    meta_info = gst_meta_register (GST_NET_ADDRESS_META_API_TYPE,
+  if (g_once_init_enter (&meta_info)) {
+    const GstMetaInfo *mi = gst_meta_register (GST_NET_ADDRESS_META_API_TYPE,
         "GstNetAddressMeta",
         sizeof (GstNetAddressMeta),
         net_address_meta_init,
         net_address_meta_free, net_address_meta_transform);
+    g_once_init_leave (&meta_info, mi);
   }
   return meta_info;
 }
index e83c60196d3997c534e05d1203111cc8fce6f165..10ca2b332babc9821558d431ea85e117cf741b3f 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -299,6 +299,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -335,6 +338,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
new file mode 100644 (file)
index 0000000..d90de34
--- /dev/null
@@ -0,0 +1,309 @@
+# ===========================================================================
+#        http://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro figures out how to build C programs using POSIX threads. It
+#   sets the PTHREAD_LIBS output variable to the threads library and linker
+#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+#   flags that are needed. (The user can also force certain compiler
+#   flags/libs to be tested by setting these environment variables.)
+#
+#   Also sets PTHREAD_CC to any special C compiler that is needed for
+#   multi-threaded programs (defaults to the value of CC otherwise). (This
+#   is necessary on AIX to use the special cc_r compiler alias.)
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also link it with them as well. e.g. you should link with
+#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+#   If you are only building threads programs, you may wish to use these
+#   variables in your default LIBS, CFLAGS, and CC:
+#
+#     LIBS="$PTHREAD_LIBS $LIBS"
+#     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+#     CC="$PTHREAD_CC"
+#
+#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+#   has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
+#   (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+#   PTHREAD_CFLAGS.
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if a threads library
+#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+#   is not found. If ACTION-IF-FOUND is not specified, the default action
+#   will define HAVE_PTHREAD.
+#
+#   Please let the authors know if this macro fails on any platform, or if
+#   you have any other suggestions or comments. This macro was based on work
+#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+#   Alejandro Forero Cuervo to the autoconf macro repository. We are also
+#   grateful for the helpful feedback of numerous users.
+#
+#   Updated for Autoconf 2.68 by Daniel Richard G.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 18
+
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PUSH([C])
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+        AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
+        AC_MSG_RESULT($ax_pthread_ok)
+        if test x"$ax_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case ${host_os} in
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
+
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ;;
+esac
+
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
+
+        case $flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $flag])
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+                pthread-config)
+                AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$flag])
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }],
+                       [pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */])],
+                [ax_pthread_ok=yes],
+                [])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        AC_MSG_RESULT($ax_pthread_ok)
+        if test "x$ax_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        AC_MSG_CHECKING([for joinable pthread attribute])
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                           [int attr = $attr; return attr /* ; */])],
+                [attr_name=$attr; break],
+                [])
+        done
+        AC_MSG_RESULT($attr_name)
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
+                               [Define to necessary symbol if this constant
+                                uses a non-standard name on your system.])
+        fi
+
+        AC_MSG_CHECKING([if more special flags are required for pthreads])
+        flag=no
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
+        esac
+        AC_MSG_RESULT(${flag})
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
+
+        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
+            ax_cv_PTHREAD_PRIO_INHERIT, [
+                AC_LINK_IFELSE([
+                    AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=no])
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
+            AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: must compile with xlc_r or cc_r
+        if test x"$GCC" != xyes; then
+          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
+        else
+          PTHREAD_CC=$CC
+        fi
+else
+        PTHREAD_CC="$CC"
+fi
+
+AC_SUBST(PTHREAD_LIBS)
+AC_SUBST(PTHREAD_CFLAGS)
+AC_SUBST(PTHREAD_CC)
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
+        :
+else
+        ax_pthread_ok=no
+        $2
+fi
+AC_LANG_POP
+])dnl AX_PTHREAD
index 88585f5eb9dfce29c33d4b6c242ab8155e30d037..f92e394d928d44bf3797bfeacb7a85d5c7f65f07 100644 (file)
@@ -91,7 +91,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -343,6 +343,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -379,6 +382,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index b6662150e9e6b51dd2c4948bcfb97eac444e6b39..dea363a74b9b4b31174a4ad701a0c9830833183e 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -338,6 +338,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -374,6 +377,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 3bb168f697a5696a72a972360d067d15da7bfd35..f3a15f3c5431eb22fd23dd8d756a57ab1300b46f 100644 (file)
@@ -83,7 +83,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -384,6 +384,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -420,6 +423,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 5fa2ab3ba758c60d332385d811c8d4918e8dab70..fd6a09431bd7c755cba00ad9f931b2996dafec68 100644 (file)
@@ -128,6 +128,7 @@ gst_capsfilter_init (GstCapsFilter * filter)
 {
   GstBaseTransform *trans = GST_BASE_TRANSFORM (filter);
   gst_base_transform_set_gap_aware (trans, TRUE);
+  gst_base_transform_set_prefer_passthrough (trans, FALSE);
   filter->filter_caps = gst_caps_new_any ();
 }
 
index c328f378d2c6595a1cc30f9c7b986ffb8c58db5a..2e28b019a36846038987a42d8519bfa7671a6dca 100644 (file)
@@ -262,7 +262,7 @@ gst_fake_sink_set_property (GObject * object, guint prop_id,
 
   switch (prop_id) {
     case PROP_STATE_ERROR:
-      sink->state_error = g_value_get_enum (value);
+      sink->state_error = (GstFakeSinkStateError) g_value_get_enum (value);
       break;
     case PROP_SILENT:
       sink->silent = g_value_get_boolean (value);
index bbdff169572dbd8fec14ecb709711e320cfbdcc6..ce43c381a1e8bfbb966333473c525ce0d98a4433 100644 (file)
@@ -449,7 +449,7 @@ gst_fake_src_set_property (GObject * object, guint prop_id,
       g_warning ("not yet implemented");
       break;
     case PROP_DATA:
-      src->data = g_value_get_enum (value);
+      src->data = (GstFakeSrcDataType) g_value_get_enum (value);
 
       if (src->data == FAKE_SRC_DATA_SUBBUFFER) {
         if (!src->parent)
@@ -462,7 +462,7 @@ gst_fake_src_set_property (GObject * object, guint prop_id,
       }
       break;
     case PROP_SIZETYPE:
-      src->sizetype = g_value_get_enum (value);
+      src->sizetype = (GstFakeSrcSizeType) g_value_get_enum (value);
       break;
     case PROP_SIZEMIN:
       src->sizemin = g_value_get_int (value);
@@ -474,7 +474,7 @@ gst_fake_src_set_property (GObject * object, guint prop_id,
       src->parentsize = g_value_get_int (value);
       break;
     case PROP_FILLTYPE:
-      src->filltype = g_value_get_enum (value);
+      src->filltype = (GstFakeSrcFillType) g_value_get_enum (value);
       break;
     case PROP_DATARATE:
       src->datarate = g_value_get_int (value);
@@ -507,7 +507,7 @@ gst_fake_src_set_property (GObject * object, guint prop_id,
       gst_base_src_set_live (basesrc, g_value_get_boolean (value));
       break;
     case PROP_FORMAT:
-      src->format = g_value_get_enum (value);
+      src->format = (GstFormat) g_value_get_enum (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
index be93b86023eccbdd5e3032d751b66abc85fae044..2475cc8058127f04d3a66825e6bcd05e6274e208 100644 (file)
@@ -307,6 +307,9 @@ gst_identity_sink_event (GstBaseTransform * trans, GstEvent * event)
       news = gst_event_new_segment (&segment);
 
       gst_pad_event_default (trans->sinkpad, GST_OBJECT_CAST (trans), news);
+    } else {
+      /* need to track segment for proper running time */
+      gst_event_copy_segment (event, &trans->segment);
     }
   }
 
@@ -551,7 +554,7 @@ gst_identity_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
     GstClockTime time = gst_util_uint64_scale_int (identity->offset,
         GST_SECOND, identity->datarate);
 
-    GST_BUFFER_TIMESTAMP (buf) = time;
+    GST_BUFFER_PTS (buf) = GST_BUFFER_DTS (buf) = time;
     GST_BUFFER_DURATION (buf) = size * GST_SECOND / identity->datarate;
   }
 
@@ -596,7 +599,7 @@ gst_identity_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
 
   if (identity->single_segment && (trans->segment.format == GST_FORMAT_TIME)
       && (ret == GST_FLOW_OK)) {
-    GST_BUFFER_TIMESTAMP (buf) = runtimestamp;
+    GST_BUFFER_PTS (buf) = GST_BUFFER_DTS (buf) = runtimestamp;
     GST_BUFFER_OFFSET (buf) = GST_CLOCK_TIME_NONE;
     GST_BUFFER_OFFSET_END (buf) = GST_CLOCK_TIME_NONE;
   }
index cfa8a24dc1b3e358f928e005fb5999f1a1283271..8afcebb4a3754cf78606aea802e52e8868dcd1cd 100644 (file)
@@ -1091,7 +1091,7 @@ gst_single_queue_push_one (GstMultiQueue * mq, GstSingleQueue * sq,
     g_cond_signal (&sq->query_handled);
     GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
   } else {
-    g_warning ("Unexpected object in singlequeue %d (refcounting problem?)",
+    g_warning ("Unexpected object in singlequeue %u (refcounting problem?)",
         sq->id);
   }
   return result;
index a00c1d1ed60e4838b95ea55f3d1f3401dfe2d352..f73950582e39c7928730d27b2b4725d3e64c2e7f 100644 (file)
@@ -443,7 +443,7 @@ gst_tee_set_property (GObject * object, guint prop_id, const GValue * value,
       tee->silent = g_value_get_boolean (value);
       break;
     case PROP_PULL_MODE:
-      tee->pull_mode = g_value_get_enum (value);
+      tee->pull_mode = (GstTeePullMode) g_value_get_enum (value);
       break;
     case PROP_ALLOC_PAD:
     {
index 33e2376ba7402062332cfd37a6d7eabdc85b4b8d..f9a16f51768860f03dc4879759d9aaa74f8deea0 100644 (file)
@@ -1055,6 +1055,21 @@ gst_type_find_element_loop (GstPad * pad)
   } else if (typefind->mode == MODE_NORMAL) {
     GstBuffer *outbuf = NULL;
 
+    if (typefind->need_stream_start) {
+      gchar *stream_id;
+
+      stream_id =
+          gst_pad_create_stream_id (typefind->src, GST_ELEMENT_CAST (typefind),
+          NULL);
+
+      GST_DEBUG_OBJECT (typefind, "Pushing STREAM_START");
+      gst_pad_push_event (typefind->src,
+          gst_event_new_stream_start (stream_id));
+
+      typefind->need_stream_start = FALSE;
+      g_free (stream_id);
+    }
+
     if (typefind->need_segment) {
       typefind->need_segment = FALSE;
       gst_pad_push_event (typefind->src,
@@ -1136,6 +1151,7 @@ gst_type_find_element_activate_sink_mode (GstPad * pad, GstObject * parent,
       if (active) {
         gst_segment_init (&typefind->segment, GST_FORMAT_BYTES);
         typefind->need_segment = TRUE;
+        typefind->need_stream_start = TRUE;
         typefind->offset = 0;
         res = TRUE;
       } else {
index 2ee33256f8e78d80107935aa21e45462c760a317..66607dbac9d1c1123468df05ba5eedcd7b44e9d3 100644 (file)
@@ -61,6 +61,7 @@ struct _GstTypeFindElement {
 
   /* Only used when driving the pipeline */
   gboolean need_segment;
+  gboolean need_stream_start;
   GstSegment segment;
   guint64 offset;
 };
index 2aa13f4885bf842659b0022d7eb9053ab6292506..31ea98dedfbef70a94da71e02f53182a6e8fb488 100644 (file)
Binary files a/po/af.gmo and b/po/af.gmo differ
index d102de85807be0b9b6a9096b6e103e43c4b962d7..e0eb849303754a43eedbeb7941d5bca4d5340a05 100644 (file)
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.9.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2005-12-05 11:45+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
@@ -662,7 +662,7 @@ msgid "geo location sublocation"
 msgstr "ligging"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index b515cd6cc46812764110444c95b0914e0210c1ee..4cbd51b3ec079e232afc8c65433220d92c6661df 100644 (file)
Binary files a/po/az.gmo and b/po/az.gmo differ
index fdbf73f209e867c1a16070429bb280eb5f29ca30..8575797ddf7354ad4a82cd94864c709e63fcba34 100644 (file)
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer-0.8.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2004-03-19 18:40+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
@@ -627,7 +627,7 @@ msgid "geo location sublocation"
 msgstr ""
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index e9c8c26acbf971fb7a7ae56b4ad668d873aaca19..b405c98db019c9866c4c98f4731d13734d5422cb 100644 (file)
Binary files a/po/be.gmo and b/po/be.gmo differ
index 50dddc7ae72dc399d1e0a60769bf715e7dc0b2eb..e21b62253a17d304c7ce163a7f0f7563b755f15e 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.9.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2006-01-18 22:26+0200\n"
 "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
 "Language-Team: Belarusian <i18n@mova.org>\n"
@@ -631,7 +631,7 @@ msgid "geo location sublocation"
 msgstr ""
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index 9d4cc5093e91a0bf04c41ea1eb921424c9e44430..8ebcab2cfcd088621ef2714a187d60e64e37d134 100644 (file)
Binary files a/po/bg.gmo and b/po/bg.gmo differ
index 31f5da6932f74363a36289aff14d2e3fc50b9f1c..b9c5c2e0225f9b03918c5af3cf3610677758f7ec 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-04-26 22:40+0300\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -653,8 +653,9 @@ msgstr "град на запис или създаване на медията (
 msgid "geo location sublocation"
 msgstr "квартал по координати"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr "квартал в града на запис или създаване на медията"
 
index f42ab36437564961e699d4618db5f6bcd68a404d..495d667b3d19e0f51ec64bd6e9d50260a2a086ee 100644 (file)
Binary files a/po/ca.gmo and b/po/ca.gmo differ
index a55c21453f9c6d6b937a9786b269e09767ad4e42..b7308d68fdc613995b9efa0fdf0a8c9a389fbd5c 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-11-04 19:41+0100\n"
 "Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -659,8 +659,9 @@ msgstr "ciutat (nom en anglès) del lloc on s'ha enregistrat o produït el medi"
 msgid "geo location sublocation"
 msgstr "sububicació de la geolocalització"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "una ubicació dins de la ciutat on s'ha enregistrat o produït el medi (p. ex. "
index d3c58bcd0ad8e5d3db731688d7f46089f7531651..f4ca8d42785f32d4cd50c81bec9f8c761eab8674 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index 8ccd9c46e9f16eca940e157d40287651097be625..1481a418f08099e7079e1932e2bddf35ffaa4435 100644 (file)
--- a/po/cs.po
+++ b/po/cs.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: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-12-01 08:17+0100\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@@ -651,8 +651,9 @@ msgstr "Anglický název města, kde bylo médium nahráno nebo vytvořeno"
 msgid "geo location sublocation"
 msgstr "upřesnění místa"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr "Místo v rámci města, kde bylo médium nahráno nebo vytvořeno"
 
index b6bf4760c3a164331b4a5285bd8c0e9bdbb3d3f7..4521245c8ca8c57d3e20bb8678624c47593a8f64 100644 (file)
Binary files a/po/da.gmo and b/po/da.gmo differ
index 6e37fc2a14c4a198194523509843605d56241a3e..d47e4178acd93fa59d294f41ea2e58bd53ce142e 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-11-06 22:52+0100\n"
 "Last-Translator: Mogens Jaeger <mogensjaeger@gmail.com>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -656,8 +656,9 @@ msgstr "by (dansk navn) hvor mediet er blevet optaget eller produceret"
 msgid "geo location sublocation"
 msgstr "geografisk underinddeling"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "en stedangivelse inden for en by hvor mediet er blevet optaget eller "
index 1de30312fae724d68d9abc65a397fea28c632464..575cd912fedac083f530815c6dbeb21bf838eb71 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index 1447cef809675442adcade49b3796af7037829c5..b1176e1f53ee49ade7788c6ec3d08f1f8c40eab9 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-04-27 23:44+0200\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -675,8 +675,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "geografischer Ortsteil"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "ein Ort innerhalb einer Stadt, in dem das Medium aufgezeichnet oder "
index b4b60d4b56031a8ab19e87658ccd522c1a563904..2fbd84cb4d0eb9c03166284e5fe8cf5629cf7166 100644 (file)
Binary files a/po/el.gmo and b/po/el.gmo differ
index f64b69735072c522fb7177bfb4a3380d65495017..b36f28af6969fdafba96d52e22775fbf4bcd8df3 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-11-29 11:14+0200\n"
 "Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -665,8 +665,9 @@ msgstr "πόλη (αγγλικό όνομα) όπου το μέσο εγγράφ
 msgid "geo location sublocation"
 msgstr "γεωγραφικός εντοπισμός υποτοποθεσίας"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "τοποθεσία μέσα σε μια πόλη όπου το μέσο παρήχθη ή δημιουργήθηκε (π.χ. η "
index 7883ba94c7cb337ef99109cfca0e829222724f49..9ee9846c29d3b1198002f0ebb401688bec58ced4 100644 (file)
Binary files a/po/en_GB.gmo and b/po/en_GB.gmo differ
index a0dea81d169b9466bc057440f1df1a38b7b2e55b..16b5d5aa40e1022ea79364a4a95865f62b7f88d6 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2004-04-26 10:36-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
@@ -666,7 +666,7 @@ msgid "geo location sublocation"
 msgstr "location"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index ac04a7f5dae12836aea7ad99bedf7578ec6d9b01..e3d082b6ddd27c8ac32666a6989b19bc66f06a88 100644 (file)
Binary files a/po/eo.gmo and b/po/eo.gmo differ
index 3653845ab4e68eb7f64a4e38319b09e5973069f6..edec5338e6f1264e5f0733ce47cced394f2e8b3d 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-06-04 21:11+0100\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -619,7 +619,7 @@ msgid "geo location sublocation"
 msgstr ""
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index 7e66b9c208c81b510db215813224142de474e7ed..669361b892afe13f08e7da0d5e3a7cd23dee66d5 100644 (file)
Binary files a/po/es.gmo and b/po/es.gmo differ
index 82f8d1559fcca3a826024805c1ef0bdc43c130a2..1259a4502f909fce4d895f91302cd63ddcdd5ad4 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-10-02 15:45+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -660,8 +660,9 @@ msgstr "ciudad (nombre en inglés) donde se ha grabado o producido el medio"
 msgid "geo location sublocation"
 msgstr "sububicación de la geolocalización"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "una ubicación en una ciudad donde se ha producido o creado el medio (ej. el "
index 2b49c6b7ae44fed7b477e462ad5ba0d044e01504..0e2f1158104294a068f5e02b38923206a1882c23 100644 (file)
Binary files a/po/eu.gmo and b/po/eu.gmo differ
index be07f27325a54faedd51f3e817f489c3ea30ed4d..a266c8865070eb84e484f9f2c48a7ff3aef453c4 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-03-25 13:10+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -663,8 +663,9 @@ msgstr "muldimedia grabatu edo ekoiztu den herria (ingelesezko izena)"
 msgid "geo location sublocation"
 msgstr "geolokalizazioaren azpikokalekua"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr "muldimedia grabatu edo ekoiztu den herriko kokaleku bat (adib, auzoa)"
 
index 42a0734b94a230e6721b7e89783ec402e2716f47..5679a0a663b6e7f65354b5bfd3d7e4fb4948f146 100644 (file)
Binary files a/po/fi.gmo and b/po/fi.gmo differ
index 1bf06d42de59a3f303515c6eb25885ef17cf07ef..670f0c3b460e7c89709dc088efea30cb29c3ffc4 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-11-17 23:10+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -659,8 +659,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "maantieteellisen sijainnin alisijainti"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr "sijainti kaupungin sisällä, jossa media on nauhoitettu tai tuotettu"
 
index 6a9b00be128b62702fe8aba2df0b9a0dba9e02c8..bf57f7fa1df70e937229994cfab9014facc4761e 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index 3561e083b63196854094f7adf9a2cff1ead270a2..801d72f9dc39b6cab09ced1e47bd22478d1bd16e 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-04-28 09:34+0200\n"
 "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -656,8 +656,9 @@ msgstr "ville (nom anglais) où le média a été enregistré ou produit"
 msgid "geo location sublocation"
 msgstr "zone locale de l'emplacement"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "un endroit de la localité où le média a été enregistré ou produit (par ex. "
index 46fba8d8650f91d52cd142d995b5d4f1a515ffe8..62414d4438f10c0ecbf59a34dfe84f5c3f8023a7 100644 (file)
Binary files a/po/gl.gmo and b/po/gl.gmo differ
index 7870b4cd461bc2ded28d4cf68f86a2634e54b823..204075791e2398a20448a3947caee8cbd390bcad 100644 (file)
--- a/po/gl.po
+++ b/po/gl.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: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-09-05 12:49+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -653,8 +653,9 @@ msgstr "cidade (nome en inglés) onde foi gravado ou producido o medio"
 msgid "geo location sublocation"
 msgstr "sublocalización da xeolocalización"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "unha localización nunha cidade onde foi gravado ou producido o medio (p.ex. "
index 3bf7732d6b4601a8145fd6ee160d05af6294ef18..a7afb33b498389479bd214a7e8f3b007f67780b5 100644 (file)
@@ -5,9 +5,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.0.0\n"
+"Project-Id-Version: gstreamer 1.0.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -98,7 +98,7 @@ msgstr ""
 msgid "Show GStreamer Options"
 msgstr ""
 
-#: gst/gst.c:931
+#: gst/gst.c:932
 msgid "Unknown option"
 msgstr ""
 
@@ -810,7 +810,7 @@ msgstr ""
 
 #: gst/gsttaglist.c:319
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
@@ -1048,25 +1048,25 @@ msgstr ""
 msgid "empty pipeline not allowed"
 msgstr ""
 
-#: libs/gst/base/gstbasesrc.c:2422
+#: libs/gst/base/gstbasesrc.c:2438
 msgid "Internal clock error."
 msgstr ""
 
-#: libs/gst/base/gstbasesrc.c:2774 libs/gst/base/gstbasesrc.c:2783
-#: libs/gst/base/gstbasesink.c:3763 plugins/elements/gstqueue.c:1188
+#: libs/gst/base/gstbasesrc.c:2790 libs/gst/base/gstbasesrc.c:2799
+#: libs/gst/base/gstbasesink.c:3767 plugins/elements/gstqueue.c:1188
 #: plugins/elements/gstqueue2.c:2565
 msgid "Internal data flow error."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:2670
+#: libs/gst/base/gstbasesink.c:2674
 msgid "A lot of buffers are being dropped."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:3127
+#: libs/gst/base/gstbasesink.c:3131
 msgid "Internal data flow problem."
 msgstr ""
 
-#: libs/gst/base/gstbasesink.c:3753
+#: libs/gst/base/gstbasesink.c:3757
 msgid "Internal data stream error."
 msgstr ""
 
@@ -1128,7 +1128,7 @@ msgstr ""
 msgid "File \"%s\" is a socket."
 msgstr ""
 
-#: plugins/elements/gstidentity.c:610
+#: plugins/elements/gstidentity.c:613
 msgid "Failed after iterations as requested."
 msgstr ""
 
index 80f9d3056b474ad403330444a8608e821ab34811..c2b3003727f33a4cd8f9cef187691690abe63582 100644 (file)
Binary files a/po/hu.gmo and b/po/hu.gmo differ
index 5c0d7020dd4db432c7139ed9bbc07edad419b6cc..9809b5613921be6672ad49a6eada35a1eb32d066 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-11-01 13:39+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -653,8 +653,9 @@ msgstr "város (angol név), ahol a média felvételre vagy előállításra ker
 msgid "geo location sublocation"
 msgstr "földrajzi hely részhelye"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "a városon belüli hely, ahol a média előállításra vagy létrehozásra került "
index 65f8c24cea5289fc385caec72a4cfbdcb70c3bb1..cbc70759dd2ffc5a28b201637f73dc7d0b2e3910 100644 (file)
Binary files a/po/id.gmo and b/po/id.gmo differ
index 30300ef8b41213002c4df2e7dc2c318b9108a7de..e4d924ac7dfe59744b4bbe509c0b01dd7b7eea8a 100644 (file)
--- a/po/id.po
+++ b/po/id.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: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2012-01-28 11:44+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -653,8 +653,9 @@ msgstr "kota (dalam bahasa Inggris) tempat media telah direkam atau dihasilkan"
 msgid "geo location sublocation"
 msgstr "sublokasi lokasi geografis"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "lokasi di dalam kota tempat media dihasilkan atau dibuat (misalnya "
index 4862ba3d4545b95a6028bb40945cb768d411b01a..0cf22615378c0d5906cb102c2e93ed61332a18b6 100644 (file)
Binary files a/po/it.gmo and b/po/it.gmo differ
index 467ad9c8c1f951faecdb190b8bbeeba7d4eced91..93728d91ff3e5a066ac2c34e31ad9c146572626b 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -106,7 +106,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-10-25 10:03+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -792,8 +792,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "sub-località località geog."
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "una località all'interno di una città in cui il contenuto multimediale è "
index 20b36031ff309cf90b20ea5ec13996a01f779334..42919584b53c6dd40c420f7b614e723d76229523 100644 (file)
Binary files a/po/ja.gmo and b/po/ja.gmo differ
index ea84c72c04c9141e59aac7a451395d4f16b157f9..58c9f8f7f21ab2b0d8a4b3a12de3acd620ffc98c 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.20.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2008-10-16 19:57+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -637,7 +637,7 @@ msgid "geo location sublocation"
 msgstr ""
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index 9e3b7b4de7322cc6827fc86e7386e996b0b976a0..5648e405a68acb4c6e1879369454222b658244f5 100644 (file)
Binary files a/po/lt.gmo and b/po/lt.gmo differ
index 3529ae2b225d41c32816553677375e38983b414f..2cdaa18c127b6c66bc32cc0ab6f046001572755e 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-07-16 00:50+0300\n"
 "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -652,8 +652,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "geografinės vietos sublokacija"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "vietove mieste, kuriame medija buvo pagaminta arba sukurta, (pvz., "
index b46089fb6d826d2baa8fb3bf1b25830af19b7976..5f128133a41ecb8a7b871a89047949ecf77317e9 100644 (file)
Binary files a/po/nb.gmo and b/po/nb.gmo differ
index 4a56c273bf6440e9536ca18d0350d051e526cc3e..54d15f98eaacaebda691cdeec7b1ef4c2612fb20 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-10-24 21:36+0200\n"
 "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
@@ -631,7 +631,7 @@ msgid "geo location sublocation"
 msgstr "plassering"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index b46a79d3c6cd8df2710b2eeca34423999f2ac175..1cce4a8ffc4b36d385329cacd44d27f680ff460d 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index 9f2a883bc20a856d0f0c31690cb96369fe9f7239..22476ffc3712877628b454032d1558de748f632d 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-04-26 23:10+0200\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -660,8 +660,9 @@ msgstr "stad (Engelse naam) waar het medium is opgenomen of geproduceerd"
 msgid "geo location sublocation"
 msgstr "geografische locatie van de sublocatie"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "een sublocatie in een stad waar het medium is opgenomen of geproduceerd "
index 93f173e00eab4f6eb40a500ec7b65452aa3a2d5f..8f1befebf13f12f151b35141eb34c6af1ba1c1e9 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index a7d0e7d82fa208ae42f276dba8e2aae7063f0b4e..8fc877ae6df7a48bbf3378421a5c6056ea18deee 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-04-26 17:54+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -656,8 +656,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "część miejscowości lokalizacji"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "miejsce wewnątrz miejscowości, w którym utwór został nagrany lub "
index b58e2038c003c5c7ef83670cddd9244fb0add7f5..3d52cb120deff7bcb28d734bc76e15c5f294bd05 100644 (file)
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
index 62230ded6ed33e4468b4da4025a7c2b7ba81b1e8..5ef10d8285808ab3588017a0c194e72246bddbb7 100644 (file)
@@ -17,7 +17,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.31.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-01-08 01:36-0300\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
@@ -668,8 +668,9 @@ msgstr "cidade, em inglês, onde a mídia foi gravada ou produzida"
 msgid "geo location sublocation"
 msgstr "sublocalização geográfica"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "localização numa cidade onde a mídia foi produzida ou criada (ex: bairro)"
index 8a3cc225a49d0e91472bfcfb18ce1fbec7f52f35..1286844a5fb405affb6862c0d23b3002bc59cebf 100644 (file)
Binary files a/po/ro.gmo and b/po/ro.gmo differ
index cdf1af25fad928038a7a99d0d35a23b4f511ceb4..74abd8cb485e5349bdc7a1410029a131e391f902 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-08-16 01:10+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -666,8 +666,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "sublocație geo-locație"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "locație în orașul unde a fost înregistrat sau produs acest fișier media (de "
index 459bf8f7f4c5f73d55a3f7fb755825658700c815..e631cbabb49c21f144cbef1ada074f9600bee4ed 100644 (file)
Binary files a/po/ru.gmo and b/po/ru.gmo differ
index eb8bd416f635690562a01b43735c2a6abe4f72b6..6cdbe2d134f63bf3e892e25471bf0992317224ac 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-04-26 20:25+0400\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@mx.ru>\n"
@@ -660,8 +660,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "доп. к местоположению"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "место в городе, в котором производилась запись или производство данных "
index 2bb8e7695b5fcf1d2ac0b20348611e2242a44115..8e718575ab4b389db2ad939d6dfe6d3ff5bac056 100644 (file)
Binary files a/po/rw.gmo and b/po/rw.gmo differ
index ef5f397ba4af22a43fbc06a03c0e64aaa49aae97..eec9bace16bd1f00a35bcdef292e9064968ff0db 100644 (file)
--- a/po/rw.po
+++ b/po/rw.po
@@ -15,7 +15,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.8\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2005-04-04 10:55-0700\n"
 "Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
 "Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
@@ -820,7 +820,7 @@ msgid "geo location sublocation"
 msgstr "Inturo"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index bf327f1af9c01c3ad51f5b7b311a0f492c7d053b..8816a93fba5664e4aaf6162eae82c6806b38940b 100644 (file)
Binary files a/po/sk.gmo and b/po/sk.gmo differ
index 09ba531675c798dcff4c5122adf00770e6d762d2..8a34bab0c9b3974ae117deae357d869bf4458929 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-11-08 16:13+0100\n"
 "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -669,8 +669,9 @@ msgstr "mesto (v angličtine), kde bolo toto médium nahraté alebo produkované
 msgid "geo location sublocation"
 msgstr "zemepisná poloha upresnenie"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "umiestnenie v rámci mesta, kde bolo toto médium vyprodukované alebo "
index 70fb0edaec4adc08a46cf5a65169f5c4337af427..5621888315c79b7c96ddf0806be073848e5dee35 100644 (file)
Binary files a/po/sl.gmo and b/po/sl.gmo differ
index acd2bb71f8b412018e163083d3d325bead91fb24..3b4929bc8a5a5c927207bdb8c093c7577d5e1d99 100644 (file)
--- a/po/sl.po
+++ b/po/sl.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: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2012-03-01 14:05+0100\n"
 "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -654,8 +654,9 @@ msgstr "mesto (angleška različica), kjer je bil posnetek posnet ali izdelan"
 msgid "geo location sublocation"
 msgstr "področje zemljepisne lege"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "okraj znotraj mesta, kjer je bil posnetek posnet ali izdelan (na primer: "
index 4c5d590ee778354eb89194467a4e1b29778c8801..015b4e3db1ee4ad5d53da4ff9447452493fc51eb 100644 (file)
Binary files a/po/sq.gmo and b/po/sq.gmo differ
index db812c9e022409f9f642360f6d8a16d3ab7b24f6..23eb6c9921923f80418ede6e29a58891bd2a612c 100644 (file)
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.4\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2004-08-07 23:46+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <begraj@hotmail.com>\n"
@@ -672,7 +672,7 @@ msgid "geo location sublocation"
 msgstr "pozicioni"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index 017fd22e546be84f612ac90b7c6afbe6498f1736..0e544509d2abfbf0e6c65de61c2613705b2d40f3 100644 (file)
Binary files a/po/sr.gmo and b/po/sr.gmo differ
index d0d67506192cd2dfdf0f2db43752761878d1d183..3f7b15c22c0dce6f3fe463039d26ce0d64bf9d0d 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer-0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-12-05 10:40+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <gnu@prevod.org>\n"
@@ -657,8 +657,9 @@ msgstr "град (енглески назив) у коме је медиј сн
 msgid "geo location sublocation"
 msgstr "потположај гео положаја"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "место унутар града у коме је медиј произведен или створен (нпр. суседство)"
index 40285dd1882af5474479819ad935ce09bf0ae67e..130daf52c0a18ceea92e3dadfca0d512298e57b6 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index a86eaf8e0a64f25b50ffffe3161f2cf1318c3ad4..a744b25c1e5e3939bafd4c09d4f9280f2d936206 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.31.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-01-09 19:46+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -662,8 +662,9 @@ msgstr "stad (engelskt namn) där mediet har spelats in eller producerats"
 msgid "geo location sublocation"
 msgstr "specifik plats för geografisk plats"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "en plats inom en stad där mediet har producerats eller skapats (t.ex. "
index 8e3643880d4a9b1d4adedf88466a5fd2d87d7186..35be958aca66b2db065c18a32cf2c9babe2c8e27 100644 (file)
Binary files a/po/tr.gmo and b/po/tr.gmo differ
index 802b83b3b4928babfc1cc3038d66ffb623d25a3d..f4ed47ac17964bdca04dc02aa6aabf20fe486443 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2004-04-03 03:14+0300\n"
 "Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -672,7 +672,7 @@ msgid "geo location sublocation"
 msgstr "konum"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index a42c023aadd87a0303ab448c2ef28134cb8b2dff..2597c72e8a00a610e4f0ea2cb9dfdb7e42dddf22 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index d37e5bfbb2a46ef1b331ca62472e59c70a518b10..f59da016b86d27ea598fe64bb8f7e6fcd3a30774 100644 (file)
--- a/po/uk.po
+++ b/po/uk.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: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2011-04-30 20:26+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -653,8 +653,9 @@ msgstr "місто (англійською), у якому було записа
 msgid "geo location sublocation"
 msgstr "додаткові дані розташування"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "місце у місті, де виконувалася зйомка або було створено дані (наприклад, "
index 4e007b5f1c5dfe509f6069822c5777f8fa9105c4..236927911e4e4ecfdf7e98348b743b509cab8330 100644 (file)
Binary files a/po/vi.gmo and b/po/vi.gmo differ
index 1a64906a6186c7d76c80e39f3c150bbe1655d58c..fbc612f3195f21c4e0e61254588b3b208ff1b542 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-10-03 19:09+1030\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -652,8 +652,9 @@ msgstr ""
 msgid "geo location sublocation"
 msgstr "vị trí phụ địa lý"
 
+#, fuzzy
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 "một vùng bên trong thành phố ở đó phương tiện đã được tạo hay sản xuất (v.d. "
index 9f37fed6cde415ec4f4105debba285b0e6788415..7ca7f554b1de77844d6f71f2bea6a6010c2d8811 100644 (file)
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
index 7711bf66f383717eeb210b1b89a60aac207200e0..a3105e558f3173fe9965877b16eefe3bb7df900e 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.10.25.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2010-02-02 18:58+0800\n"
 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -640,7 +640,7 @@ msgid "geo location sublocation"
 msgstr "地理海拔"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index 7ca57a024d47985ea4944370b01cac0a2bfcc230..ee285a2670c5324b7a8c45c6b6a40aeadbc806c7 100644 (file)
Binary files a/po/zh_TW.gmo and b/po/zh_TW.gmo differ
index 998afb73c1b168bca66d4309a67f61048db786bb..ccce8cca821c0da8666c6f9da22c3a84c1891cf2 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gstreamer 0.8.8\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-09-23 16:19+0100\n"
+"POT-Creation-Date: 2012-10-24 13:55+0100\n"
 "PO-Revision-Date: 2005-04-27 14:55+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -659,7 +659,7 @@ msgid "geo location sublocation"
 msgstr "位置"
 
 msgid ""
-"a location whithin a city where the media has been produced or created (e.g. "
+"a location within a city where the media has been produced or created (e.g. "
 "the neighborhood)"
 msgstr ""
 
index ed1bbb361d979caad8f3a0d288070e641d4abbea..d7fc3caf231931af399f0ad6ea9891cdf5646f17 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -338,6 +338,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -374,6 +377,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index b7f3ff1d55cc4a707ac4f51a9890e23569602dc6..b8034a1591d937af6b8e7b73d58b67a6d244c8b2 100644 (file)
@@ -85,7 +85,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -375,6 +375,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -411,6 +414,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 3599a097c5c592ee712a4da6c015e62d20e9b441..e275811d36ccfabf51ed4040849f34dc0a485203 100644 (file)
@@ -90,7 +90,7 @@ main (gint argc, gchar * argv[])
   g_slist_free (new_src_list);
 
   end = gst_util_get_timestamp ();
-  g_print ("%" GST_TIME_FORMAT " - creating and linking %d elements\n",
+  g_print ("%" GST_TIME_FORMAT " - creating and linking %u elements\n",
       GST_TIME_ARGS (end - start), i);
 
   start = gst_util_get_timestamp ();
@@ -109,7 +109,7 @@ main (gint argc, gchar * argv[])
       GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
   end = gst_util_get_timestamp ();
   gst_message_unref (msg);
-  g_print ("%" GST_TIME_FORMAT " - putting %u buffers through\n",
+  g_print ("%" GST_TIME_FORMAT " - putting %d buffers through\n",
       GST_TIME_ARGS (end - start), BUFFER_COUNT);
 
   start = gst_util_get_timestamp ();
index dc25c604d54aad10f657d7352d987abb51d74732..707be0b6b990fba9d9644f1bc117a12a5016e84b 100644 (file)
@@ -125,7 +125,7 @@ run_test (void *threadid)
       mess_some_more ();
       if (g_timer_elapsed (timer, NULL) > 0.5) {
         g_mutex_lock (&fdlock);
-        g_print ("active fds :%d\n", g_list_length (fds));
+        g_print ("active fds :%u\n", g_list_length (fds));
         g_timer_start (timer);
         g_mutex_unlock (&fdlock);
       }
index 266dcd90cb3fa9f913ab67a84a329115cbda2ed2..b4880fb71f59c77407d5b356714ca3cd73f71344 100644 (file)
@@ -38,17 +38,13 @@ endif
 
 # Do not run the abi test in case any option which causes the API to change has
 # been used
-if FALSE
 if !GST_DISABLE_REGISTRY
 if !GST_DISABLE_TRACE
 ABI_CHECKS = gst/gstabi
 endif
 endif
-endif
 
-if FALSE
 LIBSABI_CHECKS = libs/libsabi
-endif
 
 if HAVE_CXX
 CXX_CHECKS = gst/gstcpp libs/gstlibscpp
index 2285d6bf698457fa84fd88e12aa64b45ada8db0a..2fcd6576872caaa751f99c8b0d7001ceb4144f86 100644 (file)
@@ -55,21 +55,22 @@ host_triplet = @host@
 target_triplet = @target@
 DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
        $(srcdir)/Makefile.in $(top_srcdir)/common/check.mak
-check_PROGRAMS = gst/gstatomicqueue$(EXEEXT) gst/gstbuffer$(EXEEXT) \
-       gst/gstbufferlist$(EXEEXT) gst/gstmeta$(EXEEXT) \
-       gst/gstmemory$(EXEEXT) gst/gstbus$(EXEEXT) \
-       gst/gstcaps$(EXEEXT) $(am__EXEEXT_1) gst/gstdatetime$(EXEEXT) \
-       gst/gstinfo$(EXEEXT) gst/gstiterator$(EXEEXT) \
-       gst/gstmessage$(EXEEXT) gst/gstminiobject$(EXEEXT) \
-       gst/gstobject$(EXEEXT) gst/gstpad$(EXEEXT) \
-       gst/gstparamspecs$(EXEEXT) gst/gstpipeline$(EXEEXT) \
-       gst/gstpoll$(EXEEXT) gst/gstsegment$(EXEEXT) \
-       gst/gstsystemclock$(EXEEXT) gst/gstclock$(EXEEXT) \
-       gst/gststructure$(EXEEXT) gst/gsttag$(EXEEXT) \
-       gst/gsttagsetter$(EXEEXT) gst/gsttask$(EXEEXT) \
-       gst/gsttoc$(EXEEXT) gst/gsttocsetter$(EXEEXT) \
-       gst/gstvalue$(EXEEXT) generic/states$(EXEEXT) $(am__EXEEXT_2) \
-       $(am__EXEEXT_3) libs/adapter$(EXEEXT) libs/bitreader$(EXEEXT) \
+check_PROGRAMS = $(am__EXEEXT_1) gst/gstatomicqueue$(EXEEXT) \
+       gst/gstbuffer$(EXEEXT) gst/gstbufferlist$(EXEEXT) \
+       gst/gstmeta$(EXEEXT) gst/gstmemory$(EXEEXT) \
+       gst/gstbus$(EXEEXT) gst/gstcaps$(EXEEXT) $(am__EXEEXT_2) \
+       gst/gstdatetime$(EXEEXT) gst/gstinfo$(EXEEXT) \
+       gst/gstiterator$(EXEEXT) gst/gstmessage$(EXEEXT) \
+       gst/gstminiobject$(EXEEXT) gst/gstobject$(EXEEXT) \
+       gst/gstpad$(EXEEXT) gst/gstparamspecs$(EXEEXT) \
+       gst/gstpipeline$(EXEEXT) gst/gstpoll$(EXEEXT) \
+       gst/gstsegment$(EXEEXT) gst/gstsystemclock$(EXEEXT) \
+       gst/gstclock$(EXEEXT) gst/gststructure$(EXEEXT) \
+       gst/gsttag$(EXEEXT) gst/gsttagsetter$(EXEEXT) \
+       gst/gsttask$(EXEEXT) gst/gsttoc$(EXEEXT) \
+       gst/gsttocsetter$(EXEEXT) gst/gstvalue$(EXEEXT) \
+       generic/states$(EXEEXT) $(am__EXEEXT_3) $(am__EXEEXT_4) \
+       $(am__EXEEXT_5) libs/adapter$(EXEEXT) libs/bitreader$(EXEEXT) \
        libs/bytereader$(EXEEXT) libs/bytewriter$(EXEEXT) \
        libs/collectpads$(EXEEXT) libs/gstnetclientclock$(EXEEXT) \
        libs/gstnettimeprovider$(EXEEXT) libs/transform1$(EXEEXT) \
@@ -103,7 +104,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -118,14 +119,15 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-@HAVE_CXX_TRUE@am__EXEEXT_1 = gst/gstcpp$(EXEEXT) \
+@GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@am__EXEEXT_1 = gst/gstabi$(EXEEXT)
+@HAVE_CXX_TRUE@am__EXEEXT_2 = gst/gstcpp$(EXEEXT) \
 @HAVE_CXX_TRUE@        libs/gstlibscpp$(EXEEXT)
-@GST_DISABLE_PARSE_FALSE@am__EXEEXT_2 = pipelines/simple-launch-lines$(EXEEXT) \
+@GST_DISABLE_PARSE_FALSE@am__EXEEXT_3 = pipelines/simple-launch-lines$(EXEEXT) \
 @GST_DISABLE_PARSE_FALSE@      pipelines/cleanup$(EXEEXT) \
 @GST_DISABLE_PARSE_FALSE@      pipelines/parse-launch$(EXEEXT)
-@GST_DISABLE_PARSE_TRUE@am__EXEEXT_2 =  \
+@GST_DISABLE_PARSE_TRUE@am__EXEEXT_3 =  \
 @GST_DISABLE_PARSE_TRUE@       pipelines/parse-disabled$(EXEEXT)
-@GST_DISABLE_REGISTRY_FALSE@am__EXEEXT_3 = gst/gst$(EXEEXT) \
+@GST_DISABLE_REGISTRY_FALSE@am__EXEEXT_4 = gst/gst$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@   gst/gstbin$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@   gst/gstchildproxy$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@   gst/gstcontroller$(EXEEXT) \
@@ -162,6 +164,7 @@ CONFIG_CLEAN_VPATH_FILES =
 @GST_DISABLE_REGISTRY_FALSE@   pipelines/seek$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@   pipelines/stress$(EXEEXT) \
 @GST_DISABLE_REGISTRY_FALSE@   pipelines/queue-error$(EXEEXT)
+am__EXEEXT_5 = libs/libsabi$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 elements_capsfilter_SOURCES = elements/capsfilter.c
 elements_capsfilter_OBJECTS = capsfilter.$(OBJEXT)
@@ -278,6 +281,12 @@ gst_gst_LDADD = $(LDADD)
 gst_gst_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
+gst_gstabi_SOURCES = gst/gstabi.c
+gst_gstabi_OBJECTS = gstabi.$(OBJEXT)
+gst_gstabi_LDADD = $(LDADD)
+gst_gstabi_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
 gst_gstatomicqueue_SOURCES = gst/gstatomicqueue.c
 gst_gstatomicqueue_OBJECTS = gstatomicqueue.$(OBJEXT)
 gst_gstatomicqueue_LDADD = $(LDADD)
@@ -587,6 +596,12 @@ libs_gstnettimeprovider_OBJECTS = gstnettimeprovider.$(OBJEXT)
 libs_gstnettimeprovider_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/net/libgstnet-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_libsabi_SOURCES = libs/libsabi.c
+libs_libsabi_OBJECTS = libsabi.$(OBJEXT)
+libs_libsabi_LDADD = $(LDADD)
+libs_libsabi_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
 libs_queuearray_SOURCES = libs/queuearray.c
 libs_queuearray_OBJECTS = queuearray.$(OBJEXT)
 libs_queuearray_LDADD = $(LDADD)
@@ -701,16 +716,16 @@ SOURCES = elements/capsfilter.c elements/fakesink.c elements/fakesrc.c \
        elements/funnel.c elements/identity.c elements/multiqueue.c \
        elements/queue.c elements/queue2.c elements/selector.c \
        elements/tee.c elements/valve.c generic/sinks.c \
-       generic/states.c gst/gst.c gst/gstatomicqueue.c gst/gstbin.c \
-       gst/gstbuffer.c gst/gstbufferlist.c gst/gstbus.c gst/gstcaps.c \
-       gst/gstchildproxy.c gst/gstclock.c gst/gstcontroller.c \
-       $(gst_gstcpp_SOURCES) gst/gstdatetime.c gst/gstelement.c \
-       gst/gstelementfactory.c gst/gstevent.c gst/gstghostpad.c \
-       gst/gstinfo.c gst/gstiterator.c gst/gstmemory.c \
-       gst/gstmessage.c gst/gstmeta.c gst/gstminiobject.c \
-       gst/gstobject.c gst/gstpad.c gst/gstparamspecs.c \
-       gst/gstpipeline.c gst/gstplugin.c gst/gstpoll.c \
-       gst/gstpreset.c gst/gstquery.c gst/gstregistry.c \
+       generic/states.c gst/gst.c gst/gstabi.c gst/gstatomicqueue.c \
+       gst/gstbin.c gst/gstbuffer.c gst/gstbufferlist.c gst/gstbus.c \
+       gst/gstcaps.c gst/gstchildproxy.c gst/gstclock.c \
+       gst/gstcontroller.c $(gst_gstcpp_SOURCES) gst/gstdatetime.c \
+       gst/gstelement.c gst/gstelementfactory.c gst/gstevent.c \
+       gst/gstghostpad.c gst/gstinfo.c gst/gstiterator.c \
+       gst/gstmemory.c gst/gstmessage.c gst/gstmeta.c \
+       gst/gstminiobject.c gst/gstobject.c gst/gstpad.c \
+       gst/gstparamspecs.c gst/gstpipeline.c gst/gstplugin.c \
+       gst/gstpoll.c gst/gstpreset.c gst/gstquery.c gst/gstregistry.c \
        gst/gstsegment.c gst/gststructure.c gst/gstsystemclock.c \
        gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
        gst/gsttocsetter.c gst/gsturi.c gst/gstutils.c gst/gstvalue.c \
@@ -718,17 +733,18 @@ SOURCES = elements/capsfilter.c elements/fakesink.c elements/fakesrc.c \
        libs/bytereader.c libs/bytewriter.c libs/collectpads.c \
        libs/controller.c $(libs_gstlibscpp_SOURCES) \
        libs/gstnetclientclock.c libs/gstnettimeprovider.c \
-       libs/queuearray.c libs/transform1.c libs/typefindhelper.c \
-       pipelines/cleanup.c pipelines/parse-disabled.c \
-       pipelines/parse-launch.c pipelines/queue-error.c \
-       pipelines/seek.c pipelines/simple-launch-lines.c \
-       pipelines/stress.c tools/gstinspect.c
+       libs/libsabi.c libs/queuearray.c libs/transform1.c \
+       libs/typefindhelper.c pipelines/cleanup.c \
+       pipelines/parse-disabled.c pipelines/parse-launch.c \
+       pipelines/queue-error.c pipelines/seek.c \
+       pipelines/simple-launch-lines.c pipelines/stress.c \
+       tools/gstinspect.c
 DIST_SOURCES = elements/capsfilter.c elements/fakesink.c \
        elements/fakesrc.c elements/fdsrc.c elements/filesink.c \
        elements/filesrc.c elements/funnel.c elements/identity.c \
        elements/multiqueue.c elements/queue.c elements/queue2.c \
        elements/selector.c elements/tee.c elements/valve.c \
-       generic/sinks.c generic/states.c gst/gst.c \
+       generic/sinks.c generic/states.c gst/gst.c gst/gstabi.c \
        gst/gstatomicqueue.c gst/gstbin.c gst/gstbuffer.c \
        gst/gstbufferlist.c gst/gstbus.c gst/gstcaps.c \
        gst/gstchildproxy.c gst/gstclock.c gst/gstcontroller.c \
@@ -746,11 +762,12 @@ DIST_SOURCES = elements/capsfilter.c elements/fakesink.c \
        libs/bytereader.c libs/bytewriter.c libs/collectpads.c \
        libs/controller.c $(libs_gstlibscpp_SOURCES) \
        libs/gstnetclientclock.c libs/gstnettimeprovider.c \
-       libs/queuearray.c libs/transform1.c libs/typefindhelper.c \
-       pipelines/cleanup.c pipelines/parse-disabled.c \
-       pipelines/parse-launch.c pipelines/queue-error.c \
-       pipelines/seek.c pipelines/simple-launch-lines.c \
-       pipelines/stress.c tools/gstinspect.c
+       libs/libsabi.c libs/queuearray.c libs/transform1.c \
+       libs/typefindhelper.c pipelines/cleanup.c \
+       pipelines/parse-disabled.c pipelines/parse-launch.c \
+       pipelines/queue-error.c pipelines/seek.c \
+       pipelines/simple-launch-lines.c pipelines/stress.c \
+       tools/gstinspect.c
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -952,6 +969,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -988,6 +1008,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -1063,6 +1084,11 @@ SUPPRESSIONS = $(top_srcdir)/common/gst.supp
 # These tests don't even build any longer:
 #   gst/gstindex.c
 @GST_DISABLE_PARSE_TRUE@PARSE_CHECKS = pipelines/parse-disabled
+
+# Do not run the abi test in case any option which causes the API to change has
+# been used
+@GST_DISABLE_REGISTRY_FALSE@@GST_DISABLE_TRACE_FALSE@ABI_CHECKS = gst/gstabi
+LIBSABI_CHECKS = libs/libsabi
 @HAVE_CXX_FALSE@CXX_CHECKS = 
 @HAVE_CXX_TRUE@CXX_CHECKS = gst/gstcpp libs/gstlibscpp
 @GST_DISABLE_REGISTRY_FALSE@REGISTRY_CHECKS = \
@@ -1308,6 +1334,9 @@ gst/$(am__dirstamp):
 gst/gst$(EXEEXT): $(gst_gst_OBJECTS) $(gst_gst_DEPENDENCIES) $(EXTRA_gst_gst_DEPENDENCIES) gst/$(am__dirstamp)
        @rm -f gst/gst$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(gst_gst_OBJECTS) $(gst_gst_LDADD) $(LIBS)
+gst/gstabi$(EXEEXT): $(gst_gstabi_OBJECTS) $(gst_gstabi_DEPENDENCIES) $(EXTRA_gst_gstabi_DEPENDENCIES) gst/$(am__dirstamp)
+       @rm -f gst/gstabi$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(gst_gstabi_OBJECTS) $(gst_gstabi_LDADD) $(LIBS)
 gst/gstatomicqueue$(EXEEXT): $(gst_gstatomicqueue_OBJECTS) $(gst_gstatomicqueue_DEPENDENCIES) $(EXTRA_gst_gstatomicqueue_DEPENDENCIES) gst/$(am__dirstamp)
        @rm -f gst/gstatomicqueue$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(gst_gstatomicqueue_OBJECTS) $(gst_gstatomicqueue_LDADD) $(LIBS)
@@ -1467,6 +1496,9 @@ libs/gstnetclientclock$(EXEEXT): $(libs_gstnetclientclock_OBJECTS) $(libs_gstnet
 libs/gstnettimeprovider$(EXEEXT): $(libs_gstnettimeprovider_OBJECTS) $(libs_gstnettimeprovider_DEPENDENCIES) $(EXTRA_libs_gstnettimeprovider_DEPENDENCIES) libs/$(am__dirstamp)
        @rm -f libs/gstnettimeprovider$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(libs_gstnettimeprovider_OBJECTS) $(libs_gstnettimeprovider_LDADD) $(LIBS)
+libs/libsabi$(EXEEXT): $(libs_libsabi_OBJECTS) $(libs_libsabi_DEPENDENCIES) $(EXTRA_libs_libsabi_DEPENDENCIES) libs/$(am__dirstamp)
+       @rm -f libs/libsabi$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(libs_libsabi_OBJECTS) $(libs_libsabi_LDADD) $(LIBS)
 libs/queuearray$(EXEEXT): $(libs_queuearray_OBJECTS) $(libs_queuearray_DEPENDENCIES) $(EXTRA_libs_queuearray_DEPENDENCIES) libs/$(am__dirstamp)
        @rm -f libs/queuearray$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(libs_queuearray_OBJECTS) $(libs_queuearray_LDADD) $(LIBS)
@@ -1530,6 +1562,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funnel.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstabi.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstatomicqueue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstbin.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstbuffer.Po@am__quote@
@@ -1576,6 +1609,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstutils.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstvalue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/identity.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsabi.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiqueue.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-disabled.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-launch.Po@am__quote@
@@ -1853,6 +1887,20 @@ gst.obj: gst/gst.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gst.obj `if test -f 'gst/gst.c'; then $(CYGPATH_W) 'gst/gst.c'; else $(CYGPATH_W) '$(srcdir)/gst/gst.c'; fi`
 
+gstabi.o: gst/gstabi.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gstabi.o -MD -MP -MF $(DEPDIR)/gstabi.Tpo -c -o gstabi.o `test -f 'gst/gstabi.c' || echo '$(srcdir)/'`gst/gstabi.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/gstabi.Tpo $(DEPDIR)/gstabi.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='gst/gstabi.c' object='gstabi.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gstabi.o `test -f 'gst/gstabi.c' || echo '$(srcdir)/'`gst/gstabi.c
+
+gstabi.obj: gst/gstabi.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gstabi.obj -MD -MP -MF $(DEPDIR)/gstabi.Tpo -c -o gstabi.obj `if test -f 'gst/gstabi.c'; then $(CYGPATH_W) 'gst/gstabi.c'; else $(CYGPATH_W) '$(srcdir)/gst/gstabi.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/gstabi.Tpo $(DEPDIR)/gstabi.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='gst/gstabi.c' object='gstabi.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gstabi.obj `if test -f 'gst/gstabi.c'; then $(CYGPATH_W) 'gst/gstabi.c'; else $(CYGPATH_W) '$(srcdir)/gst/gstabi.c'; fi`
+
 gstatomicqueue.o: gst/gstatomicqueue.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gstatomicqueue.o -MD -MP -MF $(DEPDIR)/gstatomicqueue.Tpo -c -o gstatomicqueue.o `test -f 'gst/gstatomicqueue.c' || echo '$(srcdir)/'`gst/gstatomicqueue.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/gstatomicqueue.Tpo $(DEPDIR)/gstatomicqueue.Po
@@ -2553,6 +2601,20 @@ gstnettimeprovider.obj: libs/gstnettimeprovider.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gstnettimeprovider.obj `if test -f 'libs/gstnettimeprovider.c'; then $(CYGPATH_W) 'libs/gstnettimeprovider.c'; else $(CYGPATH_W) '$(srcdir)/libs/gstnettimeprovider.c'; fi`
 
+libsabi.o: libs/libsabi.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsabi.o -MD -MP -MF $(DEPDIR)/libsabi.Tpo -c -o libsabi.o `test -f 'libs/libsabi.c' || echo '$(srcdir)/'`libs/libsabi.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libsabi.Tpo $(DEPDIR)/libsabi.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libs/libsabi.c' object='libsabi.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsabi.o `test -f 'libs/libsabi.c' || echo '$(srcdir)/'`libs/libsabi.c
+
+libsabi.obj: libs/libsabi.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsabi.obj -MD -MP -MF $(DEPDIR)/libsabi.Tpo -c -o libsabi.obj `if test -f 'libs/libsabi.c'; then $(CYGPATH_W) 'libs/libsabi.c'; else $(CYGPATH_W) '$(srcdir)/libs/libsabi.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libsabi.Tpo $(DEPDIR)/libsabi.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libs/libsabi.c' object='libsabi.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsabi.obj `if test -f 'libs/libsabi.c'; then $(CYGPATH_W) 'libs/libsabi.c'; else $(CYGPATH_W) '$(srcdir)/libs/libsabi.c'; fi`
+
 queuearray.o: libs/queuearray.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT queuearray.o -MD -MP -MF $(DEPDIR)/queuearray.Tpo -c -o queuearray.o `test -f 'libs/queuearray.c' || echo '$(srcdir)/'`libs/queuearray.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/queuearray.Tpo $(DEPDIR)/queuearray.Po
diff --git a/tests/check/gst/gstabi.c b/tests/check/gst/gstabi.c
new file mode 100644 (file)
index 0000000..fffe062
--- /dev/null
@@ -0,0 +1,84 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim@fluendo.com>
+ *
+ * gstabi.c: Unit test for ABI compatibility
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <gst/check/gstcheck.h>
+
+#ifdef HAVE_CPU_I386
+#include "struct_i386.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef __powerpc64__
+#include "struct_ppc64.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef __powerpc__
+#include "struct_ppc32.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_X86_64
+#include "struct_x86_64.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_HPPA
+#include "struct_hppa.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_SPARC
+#include "struct_sparc.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_ARM
+#include "struct_arm.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+/* in case someone wants to generate a new arch */
+#include "struct_i386.h"
+#define HAVE_ABI_SIZES FALSE
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+
+GST_START_TEST (test_ABI)
+{
+  gst_check_abi_list (list, HAVE_ABI_SIZES);
+}
+
+GST_END_TEST;
+
+static Suite *
+gstabi_suite (void)
+{
+  Suite *s = suite_create ("GstABI");
+  TCase *tc_chain = tcase_create ("size check");
+
+  tcase_set_timeout (tc_chain, 0);
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_ABI);
+  return s;
+}
+
+GST_CHECK_MAIN (gstabi);
index a0090a2a97a7d133a8f229c0f6a3c9fff93add84..59f48320c0e676806e554dc10395ed64799241a0 100644 (file)
@@ -714,6 +714,70 @@ GST_START_TEST (test_intersect2)
 
 GST_END_TEST;
 
+GST_START_TEST (test_intersect_list_duplicate)
+{
+  GstCaps *caps1, *caps2, *icaps;
+
+  /* make sure we don't take too long to intersect these.. */
+  caps1 = gst_caps_from_string ("video/x-raw, format=(string)YV12; "
+      "video/x-raw, format=(string)I420; video/x-raw, format=(string)YUY2; "
+      "video/x-raw, format=(string)UYVY; "
+      "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx,"
+      " xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } } } }, BGRA, ARGB, { ABGR, ABGR, "
+      "{ ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } } } }, "
+      "RGB, BGR, Y41B, Y42B, YVYU, Y444 }; "
+      "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, "
+      "xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } } } }, BGRA, ARGB, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } } } }, "
+      "RGB, BGR, Y41B, Y42B, YVYU, Y444, NV12, NV21 }; "
+      "video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, "
+      "BGRx, xRGB, xBGR, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } }, { RGBA, RGBA, { RGBA, RGBA }, "
+      "{ RGBA, RGBA, { RGBA, RGBA } } } }, BGRA, ARGB, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } }, "
+      "{ ABGR, ABGR, { ABGR, ABGR }, { ABGR, ABGR, { ABGR, ABGR } } } }, "
+      "RGB, BGR, Y41B, Y42B, YVYU, Y444, NV12, NV21 }");
+
+  caps2 = gst_caps_copy (caps1);
+
+  icaps = gst_caps_intersect (caps1, caps2);
+
+  gst_caps_unref (caps1);
+  gst_caps_unref (caps2);
+  gst_caps_unref (icaps);
+}
+
+GST_END_TEST;
 
 GST_START_TEST (test_intersect_zigzag)
 {
@@ -919,6 +983,7 @@ gst_caps_suite (void)
   tcase_add_test (tc_chain, test_merge_subset);
   tcase_add_test (tc_chain, test_intersect);
   tcase_add_test (tc_chain, test_intersect2);
+  tcase_add_test (tc_chain, test_intersect_list_duplicate);
   tcase_add_test (tc_chain, test_intersect_zigzag);
   tcase_add_test (tc_chain, test_intersect_first);
   tcase_add_test (tc_chain, test_intersect_first2);
index c93cc208827ef12565f42d813676c63bd1647778..3f5be0d7abd9d7de6f1db87509e82d37e32cab8f 100644 (file)
@@ -1107,6 +1107,60 @@ GST_START_TEST (test_ghost_pads_internal_link)
 
 GST_END_TEST;
 
+/* Test that remove a ghostpad that has something flowing through it does not
+ * crash the program
+ */
+
+GstElement *bin;
+GstPad *ghostsink;
+GstPad *ghostsrc;
+
+static GstPadProbeReturn
+remove_ghostpad_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer data)
+{
+  gst_pad_set_active (ghostsrc, FALSE);
+  gst_pad_set_active (ghostsink, FALSE);
+  gst_element_remove_pad (bin, ghostsrc);
+  gst_element_remove_pad (bin, ghostsink);
+
+  return GST_PAD_PROBE_DROP;
+}
+
+GST_START_TEST (test_ghost_pads_remove_while_playing)
+{
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  bin = gst_bin_new (NULL);
+  gst_element_set_state (bin, GST_STATE_PLAYING);
+  sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
+
+  ghostsrc = gst_ghost_pad_new_no_target ("ghostsrc", GST_PAD_SRC);
+  sinkpad = GST_PAD (gst_proxy_pad_get_internal (GST_PROXY_PAD (ghostsrc)));
+  ghostsink = gst_ghost_pad_new ("ghostsink", sinkpad);
+  gst_object_unref (sinkpad);
+  gst_pad_set_active (ghostsrc, TRUE);
+  gst_pad_set_active (ghostsink, TRUE);
+  gst_element_add_pad (bin, ghostsrc);
+  gst_element_add_pad (bin, ghostsink);
+
+  srcpad = gst_pad_new ("srcpad", GST_PAD_SRC);
+  gst_pad_set_active (srcpad, TRUE);
+  gst_pad_link (srcpad, ghostsink);
+
+  gst_pad_add_probe (ghostsrc, GST_PAD_PROBE_TYPE_BUFFER,
+      remove_ghostpad_probe_cb, NULL, NULL);
+
+  g_assert (gst_pad_push (srcpad, gst_buffer_new ()) == GST_FLOW_OK);
+
+  gst_pad_set_active (srcpad, FALSE);
+  gst_element_set_state (bin, GST_STATE_NULL);
+  gst_object_unref (bin);
+  gst_object_unref (srcpad);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_ghost_pad_suite (void)
 {
@@ -1131,6 +1185,7 @@ gst_ghost_pad_suite (void)
   tcase_add_test (tc_chain, test_ghost_pads_src_link_unlink);
   tcase_add_test (tc_chain, test_ghost_pads_change_when_linked);
   tcase_add_test (tc_chain, test_ghost_pads_internal_link);
+  tcase_add_test (tc_chain, test_ghost_pads_remove_while_playing);
 
   return s;
 }
index b64f786db22fb67caa7319b13123b320dc3b4c38..9d209e9c9a6ef8ff9278a138be9f9cf625e95ed9 100644 (file)
@@ -149,6 +149,12 @@ GST_START_TEST (test_writable)
 
   fail_if (gst_memory_map (mem, &info, GST_MAP_WRITE));
 
+  /* Make sure mapping anxd unmapping it doesn't change it's locking state */
+  fail_unless (gst_memory_map (mem, &info, GST_MAP_READ));
+  gst_memory_unmap (mem, &info);
+
+  fail_if (gst_memory_map (mem, &info, GST_MAP_WRITE));
+
   mem2 = gst_memory_copy (mem, 0, -1);
   fail_unless (GST_MEMORY_IS_READONLY (mem));
   fail_if (GST_MEMORY_IS_READONLY (mem2));
index 73b5d56c5257813f5c6abe3392bc6ae9b2a6e703..0f2355b8da8673f6aa5d4e5dcbce40ed95f42817 100644 (file)
@@ -139,11 +139,12 @@ gst_meta_test_get_info (void)
 {
   static const GstMetaInfo *meta_test_info = NULL;
 
-  if (meta_test_info == NULL) {
-    meta_test_info = gst_meta_register (GST_META_TEST_API_TYPE,
+  if (g_once_init_enter (&meta_test_info)) {
+    const GstMetaInfo *mi = gst_meta_register (GST_META_TEST_API_TYPE,
         "GstMetaTest",
         sizeof (GstMetaTest),
         test_init_func, test_free_func, test_transform_func);
+    g_once_init_leave (&meta_test_info, mi);
   }
   return meta_test_info;
 }
index 3f28d86e5c728992b72f69914e25c4c14c52376f..b7a29527cb8bd256a38f7eafc59d83a08de4b4a6 100644 (file)
@@ -1,70 +1,72 @@
-
-GstCheckABIStruct list[] = {
-  {"GstBin", sizeof (GstBin), 192},
-  {"GstBinClass", sizeof (GstBinClass), 288},
-  {"GstBuffer", sizeof (GstBuffer), 88},
-  {"GstBufferClass", sizeof (GstBufferClass), 16},
-  {"GstBus", sizeof (GstBus), 80},
-  {"GstBusClass", sizeof (GstBusClass), 144},
-  {"GstCaps", sizeof (GstCaps), 32},
-  {"GstStaticCaps", sizeof (GstStaticCaps), 52},
-  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
-  {"GstClock", sizeof (GstClock), 176},
-  {"GstClockClass", sizeof (GstClockClass), 160},
-  {"GstElement", sizeof (GstElement), 136},
-  {"GstElementClass", sizeof (GstElementClass), 248},
-  {"GstElementFactory", sizeof (GstElementFactory), 144},
-  {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
-  {"GstElementDetails", sizeof (GstElementDetails), 32},
-  {"GstEvent", sizeof (GstEvent), 48},
-  {"GstEventClass", sizeof (GstEventClass), 32},
-  {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
-  {"GstIndexEntry", sizeof (GstIndexEntry), 20},
-  {"GstIndexGroup", sizeof (GstIndexGroup), 16},
-  {"GstIndex", sizeof (GstIndex), 100},
-  {"GstIndexClass", sizeof (GstIndexClass), 156},
-  {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
-  {"GstIndexFactory", sizeof (GstIndexFactory), 96},
-  {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
-  {"GstDebugCategory", sizeof (GstDebugCategory), 16},
-  {"GstIterator", sizeof (GstIterator), 52},
-  {"GstMessage", sizeof (GstMessage), 64},
-  {"GstMessageClass", sizeof (GstMessageClass), 32},
-  {"GstMiniObject", sizeof (GstMiniObject), 16},
-  {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
-  {"GstObject", sizeof (GstObject), 40},
-  {"GstObjectClass", sizeof (GstObjectClass), 120},
-  {"GstPad", sizeof (GstPad), 188},
-  {"GstPadClass", sizeof (GstPadClass), 152},
-  {"GstPadTemplate", sizeof (GstPadTemplate), 72},
-  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
+static GstCheckABIStruct list[] = {
+  {"GstAllocationParams", sizeof (GstAllocationParams), 64},
+  {"GstAllocator", sizeof (GstAllocator), 176},
+  {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
+  {"GstBinClass", sizeof (GstBinClass), 576},
+  {"GstBin", sizeof (GstBin), 376},
+  {"GstBuffer", sizeof (GstBuffer), 112},
+  {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
+  {"GstBufferPool", sizeof (GstBufferPool), 136},
+  {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
+  {"GstBusClass", sizeof (GstBusClass), 232},
+  {"GstBus", sizeof (GstBus), 128},
+  {"GstCaps", sizeof (GstCaps), 64},
+  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
+  {"GstClockClass", sizeof (GstClockClass), 264},
+  {"GstClockEntry", sizeof (GstClockEntry), 112},
+  {"GstClock", sizeof (GstClock), 128},
+  {"GstControlBinding", sizeof (GstControlBinding), 152},
+  {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
+  {"GstControlSource", sizeof (GstControlSource), 136},
+  {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
+  {"GstDebugCategory", sizeof (GstDebugCategory), 24},
+  {"GstElementClass", sizeof (GstElementClass), 488},
+  {"GstElement", sizeof (GstElement), 264},
+  {"GstEvent", sizeof (GstEvent), 88},
+  {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
+  {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
+  {"GstGhostPad", sizeof (GstGhostPad), 536},
+  {"GstIterator", sizeof (GstIterator), 120},
+  {"GstMemory", sizeof (GstMemory), 112},
+  {"GstMapInfo", sizeof (GstMapInfo), 104},
+  {"GstMessage", sizeof (GstMessage), 120},
+  {"GstMeta", sizeof (GstMeta), 16},
+  {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
+  {"GstMetaInfo", sizeof (GstMetaInfo), 80},
+  {"GstMiniObject", sizeof (GstMiniObject), 64},
+  {"GstObjectClass", sizeof (GstObjectClass), 184},
+  {"GstObject", sizeof (GstObject), 88},
+  {"GstPadClass", sizeof (GstPadClass), 232},
+  {"GstPad", sizeof (GstPad), 520},
+  {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
+  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
+  {"GstPadTemplate", sizeof (GstPadTemplate), 144},
+  {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
+  {"GstPipelineClass", sizeof (GstPipelineClass), 608},
+  {"GstPipeline", sizeof (GstPipeline), 440},
+  {"GstPluginDesc", sizeof (GstPluginDesc), 112},
+  {"GstPresetInterface", sizeof (GstPresetInterface), 112},
+  {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
+  {"GstProxyPad", sizeof (GstProxyPad), 528},
+  {"GstQuery", sizeof (GstQuery), 72},
+  {"GstRegistryClass", sizeof (GstRegistryClass), 184},
+  {"GstRegistry", sizeof (GstRegistry), 96},
+  {"GstSegment", sizeof (GstSegment), 120},
+  {"GstStaticCaps", sizeof (GstStaticCaps), 48},
   {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
-  {"GstPipeline", sizeof (GstPipeline), 232},
-  {"GstPipelineClass", sizeof (GstPipelineClass), 304},
-  {"GstPlugin", sizeof (GstPlugin), 152},
-  {"GstPluginClass", sizeof (GstPluginClass), 136},
-  {"GstPluginDesc", sizeof (GstPluginDesc), 56},
-  {"GstPluginFeature", sizeof (GstPluginFeature), 72},
-  {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
-  {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
-  {"GstQuery", sizeof (GstQuery), 28},
-  {"GstQueryClass", sizeof (GstQueryClass), 32},
-  {"GstRegistry", sizeof (GstRegistry), 72},
-  {"GstRegistryClass", sizeof (GstRegistryClass), 144},
-  {"GstSegment", sizeof (GstSegment), 88},
-  {"GstStructure", sizeof (GstStructure), 20},
-  {"GstSystemClock", sizeof (GstSystemClock), 200},
-  {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
-  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
-  {"GstTask", sizeof (GstTask), 80},
-  {"GstTaskClass", sizeof (GstTaskClass), 140},
-  {"GstTrace", sizeof (GstTrace), 20},
-  {"GstTraceEntry", sizeof (GstTraceEntry), 128},
-  {"GstAllocTrace", sizeof (GstAllocTrace), 16},
-  {"GstTypeFind", sizeof (GstTypeFind), 32},
-  {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
-  {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
-  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
-  {"GstValueTable", sizeof (GstValueTable), 32},
+  {"GstStructure", sizeof (GstStructure), 16},
+  {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
+  {"GstSystemClock", sizeof (GstSystemClock), 168},
+  {"GstTagList", sizeof (GstTagList), 64,},
+  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
+  {"GstTaskClass", sizeof (GstTaskClass), 224},
+  {"GstTask", sizeof (GstTask), 200},
+  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
+  {"GstTaskPool", sizeof (GstTaskPool), 128},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
+  {"GstTypeFind", sizeof (GstTypeFind), 64},
+  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
+  {"GstValueTable", sizeof (GstValueTable), 64},
   {NULL, 0, 0}
 };
index 08df6b3c4e800b8723270e142665f882a5ed31d5..b7a29527cb8bd256a38f7eafc59d83a08de4b4a6 100644 (file)
@@ -1,69 +1,72 @@
 static GstCheckABIStruct list[] = {
-  {"GstBin", sizeof (GstBin), 192},
-  {"GstBinClass", sizeof (GstBinClass), 288},
-  {"GstBuffer", sizeof (GstBuffer), 88},
-  {"GstBufferClass", sizeof (GstBufferClass), 16},
-  {"GstBus", sizeof (GstBus), 80},
-  {"GstBusClass", sizeof (GstBusClass), 144},
-  {"GstCaps", sizeof (GstCaps), 32},
-  {"GstStaticCaps", sizeof (GstStaticCaps), 52},
-  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
-  {"GstClock", sizeof (GstClock), 176},
-  {"GstClockClass", sizeof (GstClockClass), 160},
-  {"GstElement", sizeof (GstElement), 136},
-  {"GstElementClass", sizeof (GstElementClass), 248},
-  {"GstElementFactory", sizeof (GstElementFactory), 144},
-  {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
-  {"GstElementDetails", sizeof (GstElementDetails), 32},
-  {"GstEvent", sizeof (GstEvent), 48},
-  {"GstEventClass", sizeof (GstEventClass), 32},
-  {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
-  {"GstIndexEntry", sizeof (GstIndexEntry), 20},
-  {"GstIndexGroup", sizeof (GstIndexGroup), 16},
-  {"GstIndex", sizeof (GstIndex), 100},
-  {"GstIndexClass", sizeof (GstIndexClass), 156},
-  {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
-  {"GstIndexFactory", sizeof (GstIndexFactory), 96},
-  {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
-  {"GstDebugCategory", sizeof (GstDebugCategory), 16},
-  {"GstIterator", sizeof (GstIterator), 52},
-  {"GstMessage", sizeof (GstMessage), 64},
-  {"GstMessageClass", sizeof (GstMessageClass), 32},
-  {"GstMiniObject", sizeof (GstMiniObject), 16},
-  {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
-  {"GstObject", sizeof (GstObject), 40},
-  {"GstObjectClass", sizeof (GstObjectClass), 120},
-  {"GstPad", sizeof (GstPad), 188},
-  {"GstPadClass", sizeof (GstPadClass), 152},
-  {"GstPadTemplate", sizeof (GstPadTemplate), 72},
-  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
+  {"GstAllocationParams", sizeof (GstAllocationParams), 64},
+  {"GstAllocator", sizeof (GstAllocator), 176},
+  {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
+  {"GstBinClass", sizeof (GstBinClass), 576},
+  {"GstBin", sizeof (GstBin), 376},
+  {"GstBuffer", sizeof (GstBuffer), 112},
+  {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
+  {"GstBufferPool", sizeof (GstBufferPool), 136},
+  {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
+  {"GstBusClass", sizeof (GstBusClass), 232},
+  {"GstBus", sizeof (GstBus), 128},
+  {"GstCaps", sizeof (GstCaps), 64},
+  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
+  {"GstClockClass", sizeof (GstClockClass), 264},
+  {"GstClockEntry", sizeof (GstClockEntry), 112},
+  {"GstClock", sizeof (GstClock), 128},
+  {"GstControlBinding", sizeof (GstControlBinding), 152},
+  {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
+  {"GstControlSource", sizeof (GstControlSource), 136},
+  {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
+  {"GstDebugCategory", sizeof (GstDebugCategory), 24},
+  {"GstElementClass", sizeof (GstElementClass), 488},
+  {"GstElement", sizeof (GstElement), 264},
+  {"GstEvent", sizeof (GstEvent), 88},
+  {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
+  {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
+  {"GstGhostPad", sizeof (GstGhostPad), 536},
+  {"GstIterator", sizeof (GstIterator), 120},
+  {"GstMemory", sizeof (GstMemory), 112},
+  {"GstMapInfo", sizeof (GstMapInfo), 104},
+  {"GstMessage", sizeof (GstMessage), 120},
+  {"GstMeta", sizeof (GstMeta), 16},
+  {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
+  {"GstMetaInfo", sizeof (GstMetaInfo), 80},
+  {"GstMiniObject", sizeof (GstMiniObject), 64},
+  {"GstObjectClass", sizeof (GstObjectClass), 184},
+  {"GstObject", sizeof (GstObject), 88},
+  {"GstPadClass", sizeof (GstPadClass), 232},
+  {"GstPad", sizeof (GstPad), 520},
+  {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
+  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
+  {"GstPadTemplate", sizeof (GstPadTemplate), 144},
+  {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
+  {"GstPipelineClass", sizeof (GstPipelineClass), 608},
+  {"GstPipeline", sizeof (GstPipeline), 440},
+  {"GstPluginDesc", sizeof (GstPluginDesc), 112},
+  {"GstPresetInterface", sizeof (GstPresetInterface), 112},
+  {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
+  {"GstProxyPad", sizeof (GstProxyPad), 528},
+  {"GstQuery", sizeof (GstQuery), 72},
+  {"GstRegistryClass", sizeof (GstRegistryClass), 184},
+  {"GstRegistry", sizeof (GstRegistry), 96},
+  {"GstSegment", sizeof (GstSegment), 120},
+  {"GstStaticCaps", sizeof (GstStaticCaps), 48},
   {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
-  {"GstPipeline", sizeof (GstPipeline), 232},
-  {"GstPipelineClass", sizeof (GstPipelineClass), 304},
-  {"GstPlugin", sizeof (GstPlugin), 152},
-  {"GstPluginClass", sizeof (GstPluginClass), 136},
-  {"GstPluginDesc", sizeof (GstPluginDesc), 56},
-  {"GstPluginFeature", sizeof (GstPluginFeature), 72},
-  {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
-  {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
-  {"GstQuery", sizeof (GstQuery), 28},
-  {"GstQueryClass", sizeof (GstQueryClass), 32},
-  {"GstRegistry", sizeof (GstRegistry), 72},
-  {"GstRegistryClass", sizeof (GstRegistryClass), 144},
-  {"GstSegment", sizeof (GstSegment), 88},
-  {"GstStructure", sizeof (GstStructure), 20},
-  {"GstSystemClock", sizeof (GstSystemClock), 200},
-  {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
-  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
-  {"GstTask", sizeof (GstTask), 80},
-  {"GstTaskClass", sizeof (GstTaskClass), 140},
-  {"GstTrace", sizeof (GstTrace), 20},
-  {"GstTraceEntry", sizeof (GstTraceEntry), 128},
-  {"GstAllocTrace", sizeof (GstAllocTrace), 16},
-  {"GstTypeFind", sizeof (GstTypeFind), 32},
-  {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
-  {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
-  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
-  {"GstValueTable", sizeof (GstValueTable), 32},
+  {"GstStructure", sizeof (GstStructure), 16},
+  {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
+  {"GstSystemClock", sizeof (GstSystemClock), 168},
+  {"GstTagList", sizeof (GstTagList), 64,},
+  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
+  {"GstTaskClass", sizeof (GstTaskClass), 224},
+  {"GstTask", sizeof (GstTask), 200},
+  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
+  {"GstTaskPool", sizeof (GstTaskPool), 128},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
+  {"GstTypeFind", sizeof (GstTypeFind), 64},
+  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
+  {"GstValueTable", sizeof (GstValueTable), 64},
   {NULL, 0, 0}
 };
index 7aba5ae0b04d15a0f34ac1296b598f7aeeb0a5f4..372685a9cf960065e9e53202a03c1d9831732163 100644 (file)
@@ -1,69 +1,72 @@
 static GstCheckABIStruct list[] = {
- {"GstBin", sizeof (GstBin), 184},
- {"GstBinClass", sizeof(GstBinClass), 288},
- {"GstBuffer", sizeof(GstBuffer), 80},
- {"GstBufferClass", sizeof(GstBufferClass), 16},
- {"GstBus", sizeof(GstBus), 80},
- {"GstBusClass", sizeof(GstBusClass), 144},
- {"GstCaps", sizeof(GstCaps), 32},
- {"GstStaticCaps", sizeof(GstStaticCaps), 52},
- {"GstChildProxyInterface", sizeof(GstChildProxyInterface), 40},
- {"GstClock", sizeof(GstClock), 172},
- {"GstClockClass", sizeof(GstClockClass), 160},
- {"GstElement", sizeof(GstElement), 128},
- {"GstElementClass", sizeof(GstElementClass), 248},
- {"GstElementFactory", sizeof(GstElementFactory), 144},
- {"GstElementFactoryClass", sizeof(GstElementFactoryClass), 152},
- {"GstElementDetails", sizeof(GstElementDetails), 32},
- {"GstEvent", sizeof(GstEvent), 40},
- {"GstEventClass", sizeof(GstEventClass), 32},
- {"GstFormatDefinition", sizeof(GstFormatDefinition), 16},
- {"GstIndexEntry", sizeof(GstIndexEntry), 20},
- {"GstIndexGroup", sizeof(GstIndexGroup), 16},
- {"GstIndex", sizeof(GstIndex), 100},
- {"GstIndexClass", sizeof(GstIndexClass), 156},
- {"GstIndexAssociation", sizeof(GstIndexAssociation), 12},
- {"GstIndexFactory", sizeof(GstIndexFactory), 96},
- {"GstIndexFactoryClass", sizeof(GstIndexFactoryClass), 152},
- {"GstDebugCategory", sizeof(GstDebugCategory), 16},
- {"GstIterator", sizeof(GstIterator), 52},
- {"GstMessage", sizeof(GstMessage), 60},
- {"GstMessageClass", sizeof(GstMessageClass), 32},
- {"GstMiniObject", sizeof(GstMiniObject), 16},
- {"GstMiniObjectClass", sizeof(GstMiniObjectClass), 16},
- {"GstObject", sizeof(GstObject), 40},
- {"GstObjectClass", sizeof(GstObjectClass), 120},
- {"GstPad", sizeof(GstPad), 188},
- {"GstPadClass", sizeof(GstPadClass), 152},
- {"GstPadTemplate", sizeof(GstPadTemplate), 72},
- {"GstPadTemplateClass", sizeof(GstPadTemplateClass), 140},
- {"GstStaticPadTemplate", sizeof(GstStaticPadTemplate), 64},
- {"GstPipeline", sizeof(GstPipeline), 220},
- {"GstPipelineClass", sizeof(GstPipelineClass), 304},
- {"GstPlugin", sizeof(GstPlugin), 148},
- {"GstPluginClass", sizeof(GstPluginClass), 136},
- {"GstPluginDesc", sizeof(GstPluginDesc), 56},
- {"GstPluginFeature", sizeof(GstPluginFeature), 72},
- {"GstPluginFeatureClass", sizeof(GstPluginFeatureClass), 136},
- {"GstQueryTypeDefinition", sizeof(GstQueryTypeDefinition), 16},
- {"GstQuery", sizeof(GstQuery), 28},
- {"GstQueryClass", sizeof(GstQueryClass), 32},
- {"GstRegistry", sizeof(GstRegistry), 72},
- {"GstRegistryClass", sizeof(GstRegistryClass), 144},
- {"GstSegment", sizeof(GstSegment), 88},
- {"GstStructure", sizeof(GstStructure), 20},
- {"GstSystemClock", sizeof(GstSystemClock), 196},
- {"GstSystemClockClass", sizeof(GstSystemClockClass), 176},
- {"GstTagSetterInterface", sizeof(GstTagSetterInterface), 8},
- {"GstTask", sizeof(GstTask), 80},
- {"GstTaskClass", sizeof(GstTaskClass), 140},
- {"GstTrace", sizeof(GstTrace), 20},
- {"GstTraceEntry", sizeof(GstTraceEntry), 128},
- {"GstAllocTrace", sizeof(GstAllocTrace), 16},
- {"GstTypeFind", sizeof(GstTypeFind), 32},
- {"GstTypeFindFactory", sizeof(GstTypeFindFactory), 108},
- {"GstTypeFindFactoryClass", sizeof(GstTypeFindFactoryClass), 152},
- {"GstURIHandlerInterface", sizeof(GstURIHandlerInterface), 44},
- {"GstValueTable", sizeof(GstValueTable), 32},
- {NULL, 0, 0}
+  {"GstAllocationParams", sizeof (GstAllocationParams), 32},
+  {"GstAllocator", sizeof (GstAllocator), 100},
+  {"GstAllocatorClass", sizeof (GstAllocatorClass), 116},
+  {"GstBinClass", sizeof (GstBinClass), 292},
+  {"GstBin", sizeof (GstBin), 232},
+  {"GstBuffer", sizeof (GstBuffer), 80},
+  {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 40},
+  {"GstBufferPool", sizeof (GstBufferPool), 80},
+  {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 144},
+  {"GstBusClass", sizeof (GstBusClass), 116},
+  {"GstBus", sizeof (GstBus), 76},
+  {"GstCaps", sizeof (GstCaps), 36},
+  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 44},
+  {"GstClockClass", sizeof (GstClockClass), 132},
+  {"GstClockEntry", sizeof (GstClockEntry), 68},
+  {"GstClock", sizeof (GstClock), 76},
+  {"GstControlBinding", sizeof (GstControlBinding), 88},
+  {"GstControlBindingClass", sizeof (GstControlBindingClass), 124},
+  {"GstControlSource", sizeof (GstControlSource), 80},
+  {"GstControlSourceClass", sizeof (GstControlSourceClass), 108},
+  {"GstDebugCategory", sizeof (GstDebugCategory), 16},
+  {"GstElementClass", sizeof (GstElementClass), 248},
+  {"GstElement", sizeof (GstElement), 172},
+  {"GstEvent", sizeof (GstEvent), 52},
+  {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
+  {"GstGhostPadClass", sizeof (GstGhostPadClass), 136},
+  {"GstGhostPad", sizeof (GstGhostPad), 296},
+  {"GstIterator", sizeof (GstIterator), 60},
+  {"GstMemory", sizeof (GstMemory), 60},
+  {"GstMapInfo", sizeof (GstMapInfo), 52},
+  {"GstMessage", sizeof (GstMessage), 76},
+  {"GstMeta", sizeof (GstMeta), 8},
+  {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 12},
+  {"GstMetaInfo", sizeof (GstMetaInfo), 40},
+  {"GstMiniObject", sizeof (GstMiniObject), 36},
+  {"GstObjectClass", sizeof (GstObjectClass), 92},
+  {"GstObject", sizeof (GstObject), 56},
+  {"GstPadClass", sizeof (GstPadClass), 116},
+  {"GstPad", sizeof (GstPad), 288},
+  {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 40},
+  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 112},
+  {"GstPadTemplate", sizeof (GstPadTemplate), 88},
+  {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 64},
+  {"GstPipelineClass", sizeof (GstPipelineClass), 308},
+  {"GstPipeline", sizeof (GstPipeline), 272},
+  {"GstPluginDesc", sizeof (GstPluginDesc), 60},
+  {"GstPresetInterface", sizeof (GstPresetInterface), 56},
+  {"GstProxyPadClass", sizeof (GstProxyPadClass), 120},
+  {"GstProxyPad", sizeof (GstProxyPad), 292},
+  {"GstQuery", sizeof (GstQuery), 40},
+  {"GstRegistryClass", sizeof (GstRegistryClass), 92},
+  {"GstRegistry", sizeof (GstRegistry), 60},
+  {"GstSegment", sizeof (GstSegment), 96},
+  {"GstStaticCaps", sizeof (GstStaticCaps), 24},
+  {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 36},
+  {"GstStructure", sizeof (GstStructure), 8},
+  {"GstSystemClockClass", sizeof (GstSystemClockClass), 148},
+  {"GstSystemClock", sizeof (GstSystemClock), 96},
+  {"GstTagList", sizeof (GstTagList), 36},
+  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
+  {"GstTaskClass", sizeof (GstTaskClass), 112},
+  {"GstTask", sizeof (GstTask), 116},
+  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 124},
+  {"GstTaskPool", sizeof (GstTaskPool), 76},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 8},
+  {"GstTypeFind", sizeof (GstTypeFind), 32},
+  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 24},
+  {"GstValueTable", sizeof (GstValueTable), 32},
+  {NULL, 0, 0}
 };
index 08df6b3c4e800b8723270e142665f882a5ed31d5..fc7a571d1b77280132f8fa292e78b121f18e7143 100644 (file)
@@ -1,69 +1,72 @@
 static GstCheckABIStruct list[] = {
-  {"GstBin", sizeof (GstBin), 192},
-  {"GstBinClass", sizeof (GstBinClass), 288},
-  {"GstBuffer", sizeof (GstBuffer), 88},
-  {"GstBufferClass", sizeof (GstBufferClass), 16},
-  {"GstBus", sizeof (GstBus), 80},
-  {"GstBusClass", sizeof (GstBusClass), 144},
-  {"GstCaps", sizeof (GstCaps), 32},
-  {"GstStaticCaps", sizeof (GstStaticCaps), 52},
-  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
-  {"GstClock", sizeof (GstClock), 176},
-  {"GstClockClass", sizeof (GstClockClass), 160},
-  {"GstElement", sizeof (GstElement), 136},
+  {"GstAllocationParams", sizeof (GstAllocationParams), 32},
+  {"GstAllocator", sizeof (GstAllocator), 112},
+  {"GstAllocatorClass", sizeof (GstAllocatorClass), 116},
+  {"GstBinClass", sizeof (GstBinClass), 292},
+  {"GstBin", sizeof (GstBin), 248},
+  {"GstBuffer", sizeof (GstBuffer), 80},
+  {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 48},
+  {"GstBufferPool", sizeof (GstBufferPool), 88},
+  {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 144},
+  {"GstBusClass", sizeof (GstBusClass), 116},
+  {"GstBus", sizeof (GstBus), 88},
+  {"GstCaps", sizeof (GstCaps), 36},
+  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 44},
+  {"GstClockClass", sizeof (GstClockClass), 132},
+  {"GstClockEntry", sizeof (GstClockEntry), 72},
+  {"GstClock", sizeof (GstClock), 88},
+  {"GstControlBinding", sizeof (GstControlBinding), 96},
+  {"GstControlBindingClass", sizeof (GstControlBindingClass), 124},
+  {"GstControlSource", sizeof (GstControlSource), 88},
+  {"GstControlSourceClass", sizeof (GstControlSourceClass), 108},
+  {"GstDebugCategory", sizeof (GstDebugCategory), 16},
   {"GstElementClass", sizeof (GstElementClass), 248},
-  {"GstElementFactory", sizeof (GstElementFactory), 144},
-  {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
-  {"GstElementDetails", sizeof (GstElementDetails), 32},
-  {"GstEvent", sizeof (GstEvent), 48},
-  {"GstEventClass", sizeof (GstEventClass), 32},
+  {"GstElement", sizeof (GstElement), 184},
+  {"GstEvent", sizeof (GstEvent), 56},
   {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
-  {"GstIndexEntry", sizeof (GstIndexEntry), 20},
-  {"GstIndexGroup", sizeof (GstIndexGroup), 16},
-  {"GstIndex", sizeof (GstIndex), 100},
-  {"GstIndexClass", sizeof (GstIndexClass), 156},
-  {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
-  {"GstIndexFactory", sizeof (GstIndexFactory), 96},
-  {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
-  {"GstDebugCategory", sizeof (GstDebugCategory), 16},
-  {"GstIterator", sizeof (GstIterator), 52},
-  {"GstMessage", sizeof (GstMessage), 64},
-  {"GstMessageClass", sizeof (GstMessageClass), 32},
-  {"GstMiniObject", sizeof (GstMiniObject), 16},
-  {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
-  {"GstObject", sizeof (GstObject), 40},
-  {"GstObjectClass", sizeof (GstObjectClass), 120},
-  {"GstPad", sizeof (GstPad), 188},
-  {"GstPadClass", sizeof (GstPadClass), 152},
-  {"GstPadTemplate", sizeof (GstPadTemplate), 72},
-  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
-  {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
-  {"GstPipeline", sizeof (GstPipeline), 232},
-  {"GstPipelineClass", sizeof (GstPipelineClass), 304},
-  {"GstPlugin", sizeof (GstPlugin), 152},
-  {"GstPluginClass", sizeof (GstPluginClass), 136},
-  {"GstPluginDesc", sizeof (GstPluginDesc), 56},
-  {"GstPluginFeature", sizeof (GstPluginFeature), 72},
-  {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
-  {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
-  {"GstQuery", sizeof (GstQuery), 28},
-  {"GstQueryClass", sizeof (GstQueryClass), 32},
+  {"GstGhostPadClass", sizeof (GstGhostPadClass), 136},
+  {"GstGhostPad", sizeof (GstGhostPad), 320},
+  {"GstIterator", sizeof (GstIterator), 60},
+  {"GstMemory", sizeof (GstMemory), 60},
+  {"GstMapInfo", sizeof (GstMapInfo), 52},
+  {"GstMessage", sizeof (GstMessage), 80},
+  {"GstMeta", sizeof (GstMeta), 8},
+  {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 12},
+  {"GstMetaInfo", sizeof (GstMetaInfo), 40},
+  {"GstMiniObject", sizeof (GstMiniObject), 36},
+  {"GstObjectClass", sizeof (GstObjectClass), 92},
+  {"GstObject", sizeof (GstObject), 64},
+  {"GstPadClass", sizeof (GstPadClass), 116},
+  {"GstPad", sizeof (GstPad), 304},
+  {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 48},
+  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 112},
+  {"GstPadTemplate", sizeof (GstPadTemplate), 96},
+  {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 64},
+  {"GstPipelineClass", sizeof (GstPipelineClass), 308},
+  {"GstPipeline", sizeof (GstPipeline), 296},
+  {"GstPluginDesc", sizeof (GstPluginDesc), 60},
+  {"GstPresetInterface", sizeof (GstPresetInterface), 56},
+  {"GstProxyPadClass", sizeof (GstProxyPadClass), 120},
+  {"GstProxyPad", sizeof (GstProxyPad), 312},
+  {"GstQuery", sizeof (GstQuery), 40},
+  {"GstRegistryClass", sizeof (GstRegistryClass), 92},
   {"GstRegistry", sizeof (GstRegistry), 72},
-  {"GstRegistryClass", sizeof (GstRegistryClass), 144},
-  {"GstSegment", sizeof (GstSegment), 88},
-  {"GstStructure", sizeof (GstStructure), 20},
-  {"GstSystemClock", sizeof (GstSystemClock), 200},
-  {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
+  {"GstSegment", sizeof (GstSegment), 104},
+  {"GstStaticCaps", sizeof (GstStaticCaps), 24},
+  {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 36},
+  {"GstStructure", sizeof (GstStructure), 8},
+  {"GstSystemClockClass", sizeof (GstSystemClockClass), 148},
+  {"GstSystemClock", sizeof (GstSystemClock), 112},
+  {"GstTagList", sizeof (GstTagList), 36},
   {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
-  {"GstTask", sizeof (GstTask), 80},
-  {"GstTaskClass", sizeof (GstTaskClass), 140},
-  {"GstTrace", sizeof (GstTrace), 20},
-  {"GstTraceEntry", sizeof (GstTraceEntry), 128},
-  {"GstAllocTrace", sizeof (GstAllocTrace), 16},
+  {"GstTaskClass", sizeof (GstTaskClass), 112},
+  {"GstTask", sizeof (GstTask), 128},
+  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 124},
+  {"GstTaskPool", sizeof (GstTaskPool), 88},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 8},
   {"GstTypeFind", sizeof (GstTypeFind), 32},
-  {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
-  {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
-  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
+  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 24},
   {"GstValueTable", sizeof (GstValueTable), 32},
   {NULL, 0, 0}
 };
index 7b77248c86b517990cf5960067762ca3853199f6..b7a29527cb8bd256a38f7eafc59d83a08de4b4a6 100644 (file)
@@ -1,69 +1,72 @@
 static GstCheckABIStruct list[] = {
-  {"GstBin", sizeof (GstBin), 336},
-  {"GstBinClass", sizeof (GstBinClass), 568},
-  {"GstBuffer", sizeof (GstBuffer), 120} ,
-  {"GstBufferClass", sizeof (GstBufferClass), 32} ,
-  {"GstBus", sizeof (GstBus), 152} ,
-  {"GstBusClass", sizeof (GstBusClass), 288} ,
-  {"GstCaps", sizeof (GstCaps), 56} ,
-  {"GstStaticCaps", sizeof (GstStaticCaps), 96} ,
-  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 80} ,
-  {"GstClock", sizeof (GstClock), 240} ,
-  {"GstClockClass", sizeof (GstClockClass), 320} ,
-  {"GstElement", sizeof (GstElement), 232} ,
-  {"GstElementClass", sizeof (GstElementClass), 488} ,
-  {"GstElementFactory", sizeof (GstElementFactory), 280} ,
-  {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 304} ,
-  {"GstElementDetails", sizeof (GstElementDetails), 64} ,
-  {"GstEvent", sizeof (GstEvent), 64} ,
-  {"GstEventClass", sizeof (GstEventClass), 64} ,
-  {"GstFormatDefinition", sizeof (GstFormatDefinition), 32} ,
-  {"GstIndexEntry", sizeof (GstIndexEntry), 32} ,
-  {"GstIndexGroup", sizeof (GstIndexGroup), 24} ,
-  {"GstIndex", sizeof (GstIndex), 192} ,
-  {"GstIndexClass", sizeof (GstIndexClass), 312} ,
-  {"GstIndexAssociation", sizeof (GstIndexAssociation), 16} ,
-  {"GstIndexFactory", sizeof (GstIndexFactory), 192} ,
-  {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 304} ,
-  {"GstDebugCategory", sizeof (GstDebugCategory), 24} ,
-  {"GstIterator", sizeof (GstIterator), 104} ,
-  {"GstMessage", sizeof (GstMessage), 104} ,
-  {"GstMessageClass", sizeof (GstMessageClass), 64} ,
-  {"GstMiniObject", sizeof (GstMiniObject), 24} ,
-  {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 32} ,
-  {"GstObject", sizeof (GstObject), 80} ,
-  {"GstObjectClass", sizeof (GstObjectClass), 240} ,
-  {"GstPad", sizeof (GstPad), 368} ,
-  {"GstPadClass", sizeof (GstPadClass), 304} ,
-  {"GstPadTemplate", sizeof (GstPadTemplate), 136} ,
-  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 280} ,
-  {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 112} ,
-  {"GstPipeline", sizeof (GstPipeline), 392} ,
-  {"GstPipelineClass", sizeof (GstPipelineClass), 600} ,
-  {"GstPlugin", sizeof (GstPlugin), 280} ,
-  {"GstPluginClass", sizeof (GstPluginClass), 272} ,
-  {"GstPluginDesc", sizeof (GstPluginDesc), 104} ,
-  {"GstPluginFeature", sizeof (GstPluginFeature), 144} ,
-  {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 272} ,
-  {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 32} ,
-  {"GstQuery", sizeof (GstQuery), 48} ,
-  {"GstQueryClass", sizeof (GstQueryClass), 64} ,
-  {"GstRegistry", sizeof (GstRegistry), 144} ,
-  {"GstRegistryClass", sizeof (GstRegistryClass), 288} ,
-  {"GstSegment", sizeof (GstSegment), 104} ,
-  {"GstStructure", sizeof (GstStructure), 40} ,
-  {"GstSystemClock", sizeof (GstSystemClock), 288} ,
-  {"GstSystemClockClass", sizeof (GstSystemClockClass), 352} ,
-  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16} ,
-  {"GstTask", sizeof (GstTask), 160} ,
-  {"GstTaskClass", sizeof (GstTaskClass), 280} ,
-  {"GstTrace", sizeof (GstTrace), 32} ,
-  {"GstTraceEntry", sizeof (GstTraceEntry), 128} ,
-  {"GstAllocTrace", sizeof (GstAllocTrace), 24} ,
-  {"GstTypeFind", sizeof (GstTypeFind), 64} ,
-  {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 216} ,
-  {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 304} ,
-  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 88} ,
-  {"GstValueTable", sizeof (GstValueTable), 64} ,
+  {"GstAllocationParams", sizeof (GstAllocationParams), 64},
+  {"GstAllocator", sizeof (GstAllocator), 176},
+  {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
+  {"GstBinClass", sizeof (GstBinClass), 576},
+  {"GstBin", sizeof (GstBin), 376},
+  {"GstBuffer", sizeof (GstBuffer), 112},
+  {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
+  {"GstBufferPool", sizeof (GstBufferPool), 136},
+  {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
+  {"GstBusClass", sizeof (GstBusClass), 232},
+  {"GstBus", sizeof (GstBus), 128},
+  {"GstCaps", sizeof (GstCaps), 64},
+  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
+  {"GstClockClass", sizeof (GstClockClass), 264},
+  {"GstClockEntry", sizeof (GstClockEntry), 112},
+  {"GstClock", sizeof (GstClock), 128},
+  {"GstControlBinding", sizeof (GstControlBinding), 152},
+  {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
+  {"GstControlSource", sizeof (GstControlSource), 136},
+  {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
+  {"GstDebugCategory", sizeof (GstDebugCategory), 24},
+  {"GstElementClass", sizeof (GstElementClass), 488},
+  {"GstElement", sizeof (GstElement), 264},
+  {"GstEvent", sizeof (GstEvent), 88},
+  {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
+  {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
+  {"GstGhostPad", sizeof (GstGhostPad), 536},
+  {"GstIterator", sizeof (GstIterator), 120},
+  {"GstMemory", sizeof (GstMemory), 112},
+  {"GstMapInfo", sizeof (GstMapInfo), 104},
+  {"GstMessage", sizeof (GstMessage), 120},
+  {"GstMeta", sizeof (GstMeta), 16},
+  {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
+  {"GstMetaInfo", sizeof (GstMetaInfo), 80},
+  {"GstMiniObject", sizeof (GstMiniObject), 64},
+  {"GstObjectClass", sizeof (GstObjectClass), 184},
+  {"GstObject", sizeof (GstObject), 88},
+  {"GstPadClass", sizeof (GstPadClass), 232},
+  {"GstPad", sizeof (GstPad), 520},
+  {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
+  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
+  {"GstPadTemplate", sizeof (GstPadTemplate), 144},
+  {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
+  {"GstPipelineClass", sizeof (GstPipelineClass), 608},
+  {"GstPipeline", sizeof (GstPipeline), 440},
+  {"GstPluginDesc", sizeof (GstPluginDesc), 112},
+  {"GstPresetInterface", sizeof (GstPresetInterface), 112},
+  {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
+  {"GstProxyPad", sizeof (GstProxyPad), 528},
+  {"GstQuery", sizeof (GstQuery), 72},
+  {"GstRegistryClass", sizeof (GstRegistryClass), 184},
+  {"GstRegistry", sizeof (GstRegistry), 96},
+  {"GstSegment", sizeof (GstSegment), 120},
+  {"GstStaticCaps", sizeof (GstStaticCaps), 48},
+  {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
+  {"GstStructure", sizeof (GstStructure), 16},
+  {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
+  {"GstSystemClock", sizeof (GstSystemClock), 168},
+  {"GstTagList", sizeof (GstTagList), 64,},
+  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
+  {"GstTaskClass", sizeof (GstTaskClass), 224},
+  {"GstTask", sizeof (GstTask), 200},
+  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
+  {"GstTaskPool", sizeof (GstTaskPool), 128},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
+  {"GstTypeFind", sizeof (GstTypeFind), 64},
+  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
+  {"GstValueTable", sizeof (GstValueTable), 64},
   {NULL, 0, 0}
 };
index 3f28d86e5c728992b72f69914e25c4c14c52376f..b7a29527cb8bd256a38f7eafc59d83a08de4b4a6 100644 (file)
@@ -1,70 +1,72 @@
-
-GstCheckABIStruct list[] = {
-  {"GstBin", sizeof (GstBin), 192},
-  {"GstBinClass", sizeof (GstBinClass), 288},
-  {"GstBuffer", sizeof (GstBuffer), 88},
-  {"GstBufferClass", sizeof (GstBufferClass), 16},
-  {"GstBus", sizeof (GstBus), 80},
-  {"GstBusClass", sizeof (GstBusClass), 144},
-  {"GstCaps", sizeof (GstCaps), 32},
-  {"GstStaticCaps", sizeof (GstStaticCaps), 52},
-  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 40},
-  {"GstClock", sizeof (GstClock), 176},
-  {"GstClockClass", sizeof (GstClockClass), 160},
-  {"GstElement", sizeof (GstElement), 136},
-  {"GstElementClass", sizeof (GstElementClass), 248},
-  {"GstElementFactory", sizeof (GstElementFactory), 144},
-  {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 152},
-  {"GstElementDetails", sizeof (GstElementDetails), 32},
-  {"GstEvent", sizeof (GstEvent), 48},
-  {"GstEventClass", sizeof (GstEventClass), 32},
-  {"GstFormatDefinition", sizeof (GstFormatDefinition), 16},
-  {"GstIndexEntry", sizeof (GstIndexEntry), 20},
-  {"GstIndexGroup", sizeof (GstIndexGroup), 16},
-  {"GstIndex", sizeof (GstIndex), 100},
-  {"GstIndexClass", sizeof (GstIndexClass), 156},
-  {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
-  {"GstIndexFactory", sizeof (GstIndexFactory), 96},
-  {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 152},
-  {"GstDebugCategory", sizeof (GstDebugCategory), 16},
-  {"GstIterator", sizeof (GstIterator), 52},
-  {"GstMessage", sizeof (GstMessage), 64},
-  {"GstMessageClass", sizeof (GstMessageClass), 32},
-  {"GstMiniObject", sizeof (GstMiniObject), 16},
-  {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 16},
-  {"GstObject", sizeof (GstObject), 40},
-  {"GstObjectClass", sizeof (GstObjectClass), 120},
-  {"GstPad", sizeof (GstPad), 188},
-  {"GstPadClass", sizeof (GstPadClass), 152},
-  {"GstPadTemplate", sizeof (GstPadTemplate), 72},
-  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 140},
+static GstCheckABIStruct list[] = {
+  {"GstAllocationParams", sizeof (GstAllocationParams), 64},
+  {"GstAllocator", sizeof (GstAllocator), 176},
+  {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
+  {"GstBinClass", sizeof (GstBinClass), 576},
+  {"GstBin", sizeof (GstBin), 376},
+  {"GstBuffer", sizeof (GstBuffer), 112},
+  {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
+  {"GstBufferPool", sizeof (GstBufferPool), 136},
+  {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
+  {"GstBusClass", sizeof (GstBusClass), 232},
+  {"GstBus", sizeof (GstBus), 128},
+  {"GstCaps", sizeof (GstCaps), 64},
+  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
+  {"GstClockClass", sizeof (GstClockClass), 264},
+  {"GstClockEntry", sizeof (GstClockEntry), 112},
+  {"GstClock", sizeof (GstClock), 128},
+  {"GstControlBinding", sizeof (GstControlBinding), 152},
+  {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
+  {"GstControlSource", sizeof (GstControlSource), 136},
+  {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
+  {"GstDebugCategory", sizeof (GstDebugCategory), 24},
+  {"GstElementClass", sizeof (GstElementClass), 488},
+  {"GstElement", sizeof (GstElement), 264},
+  {"GstEvent", sizeof (GstEvent), 88},
+  {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
+  {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
+  {"GstGhostPad", sizeof (GstGhostPad), 536},
+  {"GstIterator", sizeof (GstIterator), 120},
+  {"GstMemory", sizeof (GstMemory), 112},
+  {"GstMapInfo", sizeof (GstMapInfo), 104},
+  {"GstMessage", sizeof (GstMessage), 120},
+  {"GstMeta", sizeof (GstMeta), 16},
+  {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
+  {"GstMetaInfo", sizeof (GstMetaInfo), 80},
+  {"GstMiniObject", sizeof (GstMiniObject), 64},
+  {"GstObjectClass", sizeof (GstObjectClass), 184},
+  {"GstObject", sizeof (GstObject), 88},
+  {"GstPadClass", sizeof (GstPadClass), 232},
+  {"GstPad", sizeof (GstPad), 520},
+  {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
+  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
+  {"GstPadTemplate", sizeof (GstPadTemplate), 144},
+  {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
+  {"GstPipelineClass", sizeof (GstPipelineClass), 608},
+  {"GstPipeline", sizeof (GstPipeline), 440},
+  {"GstPluginDesc", sizeof (GstPluginDesc), 112},
+  {"GstPresetInterface", sizeof (GstPresetInterface), 112},
+  {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
+  {"GstProxyPad", sizeof (GstProxyPad), 528},
+  {"GstQuery", sizeof (GstQuery), 72},
+  {"GstRegistryClass", sizeof (GstRegistryClass), 184},
+  {"GstRegistry", sizeof (GstRegistry), 96},
+  {"GstSegment", sizeof (GstSegment), 120},
+  {"GstStaticCaps", sizeof (GstStaticCaps), 48},
   {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
-  {"GstPipeline", sizeof (GstPipeline), 232},
-  {"GstPipelineClass", sizeof (GstPipelineClass), 304},
-  {"GstPlugin", sizeof (GstPlugin), 152},
-  {"GstPluginClass", sizeof (GstPluginClass), 136},
-  {"GstPluginDesc", sizeof (GstPluginDesc), 56},
-  {"GstPluginFeature", sizeof (GstPluginFeature), 72},
-  {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 136},
-  {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 16},
-  {"GstQuery", sizeof (GstQuery), 28},
-  {"GstQueryClass", sizeof (GstQueryClass), 32},
-  {"GstRegistry", sizeof (GstRegistry), 72},
-  {"GstRegistryClass", sizeof (GstRegistryClass), 144},
-  {"GstSegment", sizeof (GstSegment), 88},
-  {"GstStructure", sizeof (GstStructure), 20},
-  {"GstSystemClock", sizeof (GstSystemClock), 200},
-  {"GstSystemClockClass", sizeof (GstSystemClockClass), 176},
-  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 8},
-  {"GstTask", sizeof (GstTask), 80},
-  {"GstTaskClass", sizeof (GstTaskClass), 140},
-  {"GstTrace", sizeof (GstTrace), 20},
-  {"GstTraceEntry", sizeof (GstTraceEntry), 128},
-  {"GstAllocTrace", sizeof (GstAllocTrace), 16},
-  {"GstTypeFind", sizeof (GstTypeFind), 32},
-  {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 108},
-  {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 152},
-  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 44},
-  {"GstValueTable", sizeof (GstValueTable), 32},
+  {"GstStructure", sizeof (GstStructure), 16},
+  {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
+  {"GstSystemClock", sizeof (GstSystemClock), 168},
+  {"GstTagList", sizeof (GstTagList), 64,},
+  {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
+  {"GstTaskClass", sizeof (GstTaskClass), 224},
+  {"GstTask", sizeof (GstTask), 200},
+  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
+  {"GstTaskPool", sizeof (GstTaskPool), 128},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
+  {"GstTypeFind", sizeof (GstTypeFind), 64},
+  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
+  {"GstValueTable", sizeof (GstValueTable), 64},
   {NULL, 0, 0}
 };
index 469d7498baad5e59e255ffa2ff58cb9bbb56ef11..b7a29527cb8bd256a38f7eafc59d83a08de4b4a6 100644 (file)
@@ -1,85 +1,72 @@
 static GstCheckABIStruct list[] = {
-  {"GstAllocTrace", sizeof (GstAllocTrace), 24},
-  {"GstBinClass", sizeof (GstBinClass), 568},
-  {"GstBin", sizeof (GstBin), 336},
-  {"GstBufferClass", sizeof (GstBufferClass), 32},
-  {"GstBuffer", sizeof (GstBuffer), 120},
-  {"GstBusClass", sizeof (GstBusClass), 288},
-  {"GstBus", sizeof (GstBus), 152},
-  {"GstCaps", sizeof (GstCaps), 56},
-  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 80},
-  {"GstClockClass", sizeof (GstClockClass), 320},
-  {"GstClockEntry", sizeof (GstClockEntry), 80},
-  {"GstClock", sizeof (GstClock), 240},
+  {"GstAllocationParams", sizeof (GstAllocationParams), 64},
+  {"GstAllocator", sizeof (GstAllocator), 176},
+  {"GstAllocatorClass", sizeof (GstAllocatorClass), 232},
+  {"GstBinClass", sizeof (GstBinClass), 576},
+  {"GstBin", sizeof (GstBin), 376},
+  {"GstBuffer", sizeof (GstBuffer), 112},
+  {"GstBufferPoolAcquireParams", sizeof (GstBufferPoolAcquireParams), 64},
+  {"GstBufferPool", sizeof (GstBufferPool), 136},
+  {"GstBufferPoolClass", sizeof (GstBufferPoolClass), 288},
+  {"GstBusClass", sizeof (GstBusClass), 232},
+  {"GstBus", sizeof (GstBus), 128},
+  {"GstCaps", sizeof (GstCaps), 64},
+  {"GstChildProxyInterface", sizeof (GstChildProxyInterface), 88},
+  {"GstClockClass", sizeof (GstClockClass), 264},
+  {"GstClockEntry", sizeof (GstClockEntry), 112},
+  {"GstClock", sizeof (GstClock), 128},
+  {"GstControlBinding", sizeof (GstControlBinding), 152},
+  {"GstControlBindingClass", sizeof (GstControlBindingClass), 248},
+  {"GstControlSource", sizeof (GstControlSource), 136},
+  {"GstControlSourceClass", sizeof (GstControlSourceClass), 216},
   {"GstDebugCategory", sizeof (GstDebugCategory), 24},
   {"GstElementClass", sizeof (GstElementClass), 488},
-  {"GstElementDetails", sizeof (GstElementDetails), 64},
-  {"GstElementFactoryClass", sizeof (GstElementFactoryClass), 304},
-  {"GstElementFactory", sizeof (GstElementFactory), 280},
-  {"GstElement", sizeof (GstElement), 232},
-  {"GstEventClass", sizeof (GstEventClass), 64},
-  {"GstEvent", sizeof (GstEvent), 64},
+  {"GstElement", sizeof (GstElement), 264},
+  {"GstEvent", sizeof (GstEvent), 88},
   {"GstFormatDefinition", sizeof (GstFormatDefinition), 32},
-  {"GstGhostPadClass", sizeof (GstGhostPadClass), 344},
-  {"GstGhostPad", sizeof (GstGhostPad), 384},
-  {"GstIndexAssociation", sizeof (GstIndexAssociation), 16},
-  {"GstIndexClass", sizeof (GstIndexClass), 312},
-  {"GstIndexEntry", sizeof (GstIndexEntry), 32},
-  {"GstIndexFactoryClass", sizeof (GstIndexFactoryClass), 304},
-  {"GstIndexFactory", sizeof (GstIndexFactory), 192},
-  {"GstIndexGroup", sizeof (GstIndexGroup), 24},
-  {"GstIndex", sizeof (GstIndex), 192},
-  {"GstIterator", sizeof (GstIterator), 104},
-  {"GstMessageClass", sizeof (GstMessageClass), 64},
-  {"GstMessage", sizeof (GstMessage), 104},
-  {"GstMiniObjectClass", sizeof (GstMiniObjectClass), 32},
-  {"GstMiniObject", sizeof (GstMiniObject), 24},
-  {"GstObjectClass", sizeof (GstObjectClass), 240},
-  {"GstObject", sizeof (GstObject), 80},
-  {"GstPadClass", sizeof (GstPadClass), 304},
-  {"GstPad", sizeof (GstPad), 368},
-  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 280},
-  {"GstPadTemplate", sizeof (GstPadTemplate), 136},
-  {"GstPadTemplate", sizeof (GstPadTemplate), 136},
+  {"GstGhostPadClass", sizeof (GstGhostPadClass), 272},
+  {"GstGhostPad", sizeof (GstGhostPad), 536},
+  {"GstIterator", sizeof (GstIterator), 120},
+  {"GstMemory", sizeof (GstMemory), 112},
+  {"GstMapInfo", sizeof (GstMapInfo), 104},
+  {"GstMessage", sizeof (GstMessage), 120},
+  {"GstMeta", sizeof (GstMeta), 16},
+  {"GstMetaTransformCopy", sizeof (GstMetaTransformCopy), 24},
+  {"GstMetaInfo", sizeof (GstMetaInfo), 80},
+  {"GstMiniObject", sizeof (GstMiniObject), 64},
+  {"GstObjectClass", sizeof (GstObjectClass), 184},
+  {"GstObject", sizeof (GstObject), 88},
+  {"GstPadClass", sizeof (GstPadClass), 232},
+  {"GstPad", sizeof (GstPad), 520},
+  {"GstPadProbeInfo", sizeof (GstPadProbeInfo), 72},
+  {"GstPadTemplateClass", sizeof (GstPadTemplateClass), 224},
+  {"GstPadTemplate", sizeof (GstPadTemplate), 144},
   {"GstParamSpecFraction", sizeof (GstParamSpecFraction), 96},
-  {"GstParamSpecMiniObject", sizeof (GstParamSpecMiniObject), 72},
-  {"GstPipelineClass", sizeof (GstPipelineClass), 600},
-  {"GstPipeline", sizeof (GstPipeline), 392},
-  {"GstPluginClass", sizeof (GstPluginClass), 272},
-  {"GstPluginDesc", sizeof (GstPluginDesc), 104},
-  {"GstPluginFeatureClass", sizeof (GstPluginFeatureClass), 272},
-  {"GstPluginFeature", sizeof (GstPluginFeature), 144},
-  {"GstPlugin", sizeof (GstPlugin), 280},
+  {"GstPipelineClass", sizeof (GstPipelineClass), 608},
+  {"GstPipeline", sizeof (GstPipeline), 440},
+  {"GstPluginDesc", sizeof (GstPluginDesc), 112},
   {"GstPresetInterface", sizeof (GstPresetInterface), 112},
-  {"GstProxyPadClass", sizeof (GstProxyPadClass), 312},
-  {"GstProxyPad", sizeof (GstProxyPad), 376},
-  {"GstQueryClass", sizeof (GstQueryClass), 64},
-  {"GstQuery", sizeof (GstQuery), 48},
-  {"GstQueryTypeDefinition", sizeof (GstQueryTypeDefinition), 32},
-  {"GstRegistryClass", sizeof (GstRegistryClass), 288},
-  {"GstRegistry", sizeof (GstRegistry), 144},
-  {"GstSegment", sizeof (GstSegment), 104},
-  {"GstStaticCaps", sizeof (GstStaticCaps), 96},
-  {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 112},
-  {"GstStructure", sizeof (GstStructure), 40},
-  {"GstSystemClockClass", sizeof (GstSystemClockClass), 352},
-  {"GstSystemClock", sizeof (GstSystemClock), 288},
-  {"GstTagList", sizeof (GstTagList), 40},
+  {"GstProxyPadClass", sizeof (GstProxyPadClass), 240},
+  {"GstProxyPad", sizeof (GstProxyPad), 528},
+  {"GstQuery", sizeof (GstQuery), 72},
+  {"GstRegistryClass", sizeof (GstRegistryClass), 184},
+  {"GstRegistry", sizeof (GstRegistry), 96},
+  {"GstSegment", sizeof (GstSegment), 120},
+  {"GstStaticCaps", sizeof (GstStaticCaps), 48},
+  {"GstStaticPadTemplate", sizeof (GstStaticPadTemplate), 64},
+  {"GstStructure", sizeof (GstStructure), 16},
+  {"GstSystemClockClass", sizeof (GstSystemClockClass), 296},
+  {"GstSystemClock", sizeof (GstSystemClock), 168},
+  {"GstTagList", sizeof (GstTagList), 64,},
   {"GstTagSetterInterface", sizeof (GstTagSetterInterface), 16},
-  {"GstTaskClass", sizeof (GstTaskClass), 280},
-  {"GstTask", sizeof (GstTask), 160},
-  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 304},
-  {"GstTaskPool", sizeof (GstTaskPool), 120},
-  {"GstTaskThreadCallbacks", sizeof (GstTaskThreadCallbacks), 48},
-  {"GstTraceEntry", sizeof (GstTraceEntry), 128},
-  {"GstTrace", sizeof (GstTrace), 32},
-  {"GstTypeFindFactoryClass", sizeof (GstTypeFindFactoryClass), 304},
-  {"GstTypeFindFactory", sizeof (GstTypeFindFactory), 216},
+  {"GstTaskClass", sizeof (GstTaskClass), 224},
+  {"GstTask", sizeof (GstTask), 200},
+  {"GstTaskPoolClass", sizeof (GstTaskPoolClass), 248},
+  {"GstTaskPool", sizeof (GstTaskPool), 128},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {"GstTocSetterInterface", sizeof (GstTocSetterInterface), 16},
   {"GstTypeFind", sizeof (GstTypeFind), 64},
-#if !defined(GST_DISABLE_DEPRECATED) && !defined(GST_REMOVE_DEPRECATED)
-  {"GstTypeNameData", sizeof (GstTypeNameData), 16},
-#endif
-  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 88},
+  {"GstURIHandlerInterface", sizeof (GstURIHandlerInterface), 48},
   {"GstValueTable", sizeof (GstValueTable), 64},
   {NULL, 0, 0}
 };
diff --git a/tests/check/libs/libsabi.c b/tests/check/libs/libsabi.c
new file mode 100644 (file)
index 0000000..a5455a9
--- /dev/null
@@ -0,0 +1,106 @@
+/* GStreamer
+ * Copyright (C) 2012 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * libsabi.c: Unit test for ABI compatibility
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <gst/check/gstcheck.h>
+
+#include <gst/base/gstadapter.h>
+#include <gst/base/gstbaseparse.h>
+#include <gst/base/gstbasesink.h>
+#include <gst/base/gstbasesrc.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/base/gstbitreader.h>
+#include <gst/base/gstbytereader.h>
+#include <gst/base/gstbytewriter.h>
+#include <gst/base/gstcollectpads.h>
+#include <gst/base/gstpushsrc.h>
+#include <gst/base/gsttypefindhelper.h>
+#include <gst/controller/gstinterpolationcontrolsource.h>
+#include <gst/controller/gstlfocontrolsource.h>
+#include <gst/controller/gsttriggercontrolsource.h>
+#include <gst/controller/gstargbcontrolbinding.h>
+#include <gst/controller/gstdirectcontrolbinding.h>
+#include <gst/controller/gsttimedvaluecontrolsource.h>
+#include <gst/net/gstnet.h>
+#include <gst/net/gstnetclientclock.h>
+#include <gst/net/gstnettimepacket.h>
+#include <gst/net/gstnettimeprovider.h>
+
+#ifdef HAVE_CPU_I386
+#include "struct_i386.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef __powerpc64__
+#include "struct_ppc64.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef __powerpc__
+#include "struct_ppc32.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_X86_64
+#include "struct_x86_64.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_HPPA
+#include "struct_hppa.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_SPARC
+#include "struct_sparc.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+#ifdef HAVE_CPU_ARM
+#include "struct_arm.h"
+#define HAVE_ABI_SIZES TRUE
+#else
+/* in case someone wants to generate a new arch */
+#include "struct_i386.h"
+#define HAVE_ABI_SIZES FALSE
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+
+GST_START_TEST (test_ABI)
+{
+  gst_check_abi_list (list, HAVE_ABI_SIZES);
+}
+
+GST_END_TEST;
+
+static Suite *
+libsabi_suite (void)
+{
+  Suite *s = suite_create ("LibsABI");
+  TCase *tc_chain = tcase_create ("size check");
+
+  tcase_set_timeout (tc_chain, 0);
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_ABI);
+  return s;
+}
+
+GST_CHECK_MAIN (libsabi);
index d63c71af46881ec7d82040366a4b7102a891095d..484298eb13eccace9221fa650487b0c32461b463 100644 (file)
@@ -1,26 +1,39 @@
 
 GstCheckABIStruct list[] = {
-  {"GstAdapter", sizeof (GstAdapter), 52},
-  {"GstAdapterClass", sizeof (GstAdapterClass), 84},
-  {"GstBaseSink", sizeof (GstBaseSink), 408},
-  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
-  {"GstBaseSrc", sizeof (GstBaseSrc), 392},
-  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
-  {"GstBaseTransform", sizeof (GstBaseTransform), 368},
-  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
-  {"GstCollectData", sizeof (GstCollectData), 120},
-  {"GstCollectPads", sizeof (GstCollectPads), 92},
-  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
-  {"GstPushSrc", sizeof (GstPushSrc), 408},
-  {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
-  {"GstTimedValue", sizeof (GstTimedValue), 32},
-  {"GstValueArray", sizeof (GstValueArray), 24},
-  {"GstController", sizeof (GstController), 40},
-  {"GstControllerClass", sizeof (GstControllerClass), 84},
-  {"GstNetClientClock", sizeof (GstNetClientClock), 256},
-  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
+  {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
+  {"GstBaseParse", sizeof (GstBaseParse), 576},
+  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
+  {"GstBaseSink", sizeof (GstBaseSink), 664},
+  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
+  {"GstBaseSrc", sizeof (GstBaseSrc), 648},
+  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
+  {"GstBaseTransform", sizeof (GstBaseTransform), 576},
+  {"GstBitReader", sizeof (GstBitReader), 56},
+  {"GstByteReader", sizeof (GstByteReader), 48},
+  {"GstByteWriter", sizeof (GstByteWriter), 96},
+  {"GstCollectData", sizeof (GstCollectData), 200},
+  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
+  {"GstCollectPads", sizeof (GstCollectPads), 152},
+  {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
+  {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
+  {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
+  {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
+  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
+  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
+  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
+  {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
+  {"GstControlPoint", sizeof (GstControlPoint), 32},
+  {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
+  {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
+  {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
+  {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
+  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
+  {"GstNetClientClock", sizeof (GstNetClientClock), 208},
   {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
-  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
-  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
+  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
+  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
+  {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
+  {"GstPushSrc", sizeof (GstPushSrc), 680},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
   {NULL, 0, 0}
 };
index 163f8a7c3408dab15615ad3704f36e349a537eef..484298eb13eccace9221fa650487b0c32461b463 100644 (file)
@@ -1,27 +1,39 @@
-static GstCheckABIStruct list[] = {
-  {"GstAdapter", sizeof (GstAdapter), 52},
-  {"GstAdapterClass", sizeof (GstAdapterClass), 84},
-  {"GstBaseSink", sizeof (GstBaseSink), 408},
-  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
-  {"GstBaseSrc", sizeof (GstBaseSrc), 392},
-  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
-  {"GstBaseTransform", sizeof (GstBaseTransform), 368},
-  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
-  {"GstCollectData", sizeof (GstCollectData), 120},
-  {"GstCollectPads", sizeof (GstCollectPads), 92},
-  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
-  {"GstPushSrc", sizeof (GstPushSrc), 408},
-  {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
 
-  {"GstTimedValue", sizeof (GstTimedValue), 32},
-  {"GstValueArray", sizeof (GstValueArray), 24},
-  {"GstController", sizeof (GstController), 40},
-  {"GstControllerClass", sizeof (GstControllerClass), 84},
-
-  {"GstNetClientClock", sizeof (GstNetClientClock), 256},
-  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
+GstCheckABIStruct list[] = {
+  {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
+  {"GstBaseParse", sizeof (GstBaseParse), 576},
+  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
+  {"GstBaseSink", sizeof (GstBaseSink), 664},
+  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
+  {"GstBaseSrc", sizeof (GstBaseSrc), 648},
+  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
+  {"GstBaseTransform", sizeof (GstBaseTransform), 576},
+  {"GstBitReader", sizeof (GstBitReader), 56},
+  {"GstByteReader", sizeof (GstByteReader), 48},
+  {"GstByteWriter", sizeof (GstByteWriter), 96},
+  {"GstCollectData", sizeof (GstCollectData), 200},
+  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
+  {"GstCollectPads", sizeof (GstCollectPads), 152},
+  {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
+  {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
+  {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
+  {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
+  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
+  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
+  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
+  {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
+  {"GstControlPoint", sizeof (GstControlPoint), 32},
+  {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
+  {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
+  {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
+  {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
+  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
+  {"GstNetClientClock", sizeof (GstNetClientClock), 208},
   {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
-  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
-  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
+  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
+  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
+  {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
+  {"GstPushSrc", sizeof (GstPushSrc), 680},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
   {NULL, 0, 0}
 };
index 7717fdc3da6e09c4d09f75ed35f3507431edfdc9..3f1e938661162407e15b6df6c6194c48a43f3b8f 100644 (file)
@@ -1,28 +1,39 @@
-static GstCheckABIStruct list[] = {
- {"GstAdapter", sizeof(GstAdapter), 52},
- {"GstAdapterClass", sizeof(GstAdapterClass), 84},
- {"GstBaseSink", sizeof(GstBaseSink), 384},
- {"GstBaseSinkClass", sizeof(GstBaseSinkClass), 368},
- {"GstBaseSrc", sizeof(GstBaseSrc), 376},
- {"GstBaseSrcClass", sizeof(GstBaseSrcClass), 376},
- {"GstBaseTransform", sizeof(GstBaseTransform), 352},
- {"GstBaseTransformClass", sizeof(GstBaseTransformClass), 376},
- {"GstCollectData", sizeof(GstCollectData), 120},
- {"GstCollectPads", sizeof(GstCollectPads), 92},
- {"GstCollectPadsClass", sizeof(GstCollectPadsClass), 136},
- {"GstPushSrc", sizeof(GstPushSrc), 392},
- {"GstPushSrcClass", sizeof(GstPushSrcClass), 396},
 
- {"GstTimedValue", sizeof(GstTimedValue), 28},
- {"GstValueArray", sizeof(GstValueArray), 20},
- {"GstController", sizeof(GstController), 40},
- {"GstControllerClass", sizeof(GstControllerClass), 84},
-
- {"GstNetClientClock", sizeof(GstNetClientClock), 248},
- {"GstNetClientClockClass", sizeof(GstNetClientClockClass), 192},
- {"GstNetTimePacket", sizeof(GstNetTimePacket), 16},
- {"GstNetTimeProvider", sizeof(GstNetTimeProvider), 84},
- {"GstNetTimeProviderClass", sizeof(GstNetTimeProviderClass), 120},
-
- {NULL, 0, 0}
+GstCheckABIStruct list[] = {
+  {"GstBaseParseClass", sizeof (GstBaseParseClass), 368},
+  {"GstBaseParse", sizeof (GstBaseParse), 364},
+  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 400},
+  {"GstBaseSink", sizeof (GstBaseSink), 440},
+  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 404},
+  {"GstBaseSrc", sizeof (GstBaseSrc), 424},
+  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 416},
+  {"GstBaseTransform", sizeof (GstBaseTransform), 364},
+  {"GstBitReader", sizeof (GstBitReader), 32},
+  {"GstByteReader", sizeof (GstByteReader), 28},
+  {"GstByteWriter", sizeof (GstByteWriter), 56},
+  {"GstCollectData", sizeof (GstCollectData), 136},
+  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 108},
+  {"GstCollectPads", sizeof (GstCollectPads), 92},
+  {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 140},
+  {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 144},
+  {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 140},
+  {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 148},
+  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 140},
+  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 140},
+  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 124},
+  {"GstLFOControlSource", sizeof (GstLFOControlSource), 108},
+  {"GstControlPoint", sizeof (GstControlPoint), 32},
+  {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 124},
+  {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 120},
+  {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 140},
+  {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 140},
+  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 164},
+  {"GstNetClientClock", sizeof (GstNetClientClock), 116},
+  {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
+  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 108},
+  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 76},
+  {"GstPushSrcClass", sizeof (GstPushSrcClass), 432},
+  {"GstPushSrc", sizeof (GstPushSrc), 440},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
+  {NULL, 0, 0}
 };
index abf92dc9ac84eff44c20888340caea2ec556fb19..8c99bf2431510dffeaa4986931a56a31bf5137ac 100644 (file)
@@ -1,25 +1,39 @@
-static GstCheckABIStruct list[] = {
-  {"GstAdapter", sizeof (GstAdapter), 52},
-  {"GstAdapterClass", sizeof (GstAdapterClass), 84},
-  {"GstBaseSink", sizeof (GstBaseSink), 408},
-  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
-  {"GstBaseSrc", sizeof (GstBaseSrc), 392},
-  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
-  {"GstBaseTransform", sizeof (GstBaseTransform), 368},
-  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
-  {"GstCollectData", sizeof (GstCollectData), 120},
-  {"GstCollectPads", sizeof (GstCollectPads), 92},
-  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
-  {"GstPushSrc", sizeof (GstPushSrc), 408},
-  {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
-  {"GstTimedValue", sizeof (GstTimedValue), 32},
-  {"GstValueArray", sizeof (GstValueArray), 24},
-  {"GstController", sizeof (GstController), 40},
-  {"GstControllerClass", sizeof (GstControllerClass), 84},
-  {"GstNetClientClock", sizeof (GstNetClientClock), 256},
-  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
+
+GstCheckABIStruct list[] = {
+  {"GstBaseParseClass", sizeof (GstBaseParseClass), 368},
+  {"GstBaseParse", sizeof (GstBaseParse), 392},
+  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 400},
+  {"GstBaseSink", sizeof (GstBaseSink), 464},
+  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 404},
+  {"GstBaseSrc", sizeof (GstBaseSrc), 448},
+  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 416},
+  {"GstBaseTransform", sizeof (GstBaseTransform), 392},
+  {"GstBitReader", sizeof (GstBitReader), 32},
+  {"GstByteReader", sizeof (GstByteReader), 28},
+  {"GstByteWriter", sizeof (GstByteWriter), 56},
+  {"GstCollectData", sizeof (GstCollectData), 144},
+  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 108},
+  {"GstCollectPads", sizeof (GstCollectPads), 104},
+  {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 140},
+  {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 160},
+  {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 140},
+  {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 168},
+  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 140},
+  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 152},
+  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 124},
+  {"GstLFOControlSource", sizeof (GstLFOControlSource), 120},
+  {"GstControlPoint", sizeof (GstControlPoint), 32},
+  {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 124},
+  {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 128},
+  {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 140},
+  {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 152},
+  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 164},
+  {"GstNetClientClock", sizeof (GstNetClientClock), 136},
   {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
-  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
-  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
+  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 108},
+  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 88},
+  {"GstPushSrcClass", sizeof (GstPushSrcClass), 432},
+  {"GstPushSrc", sizeof (GstPushSrc), 464},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
   {NULL, 0, 0}
 };
index 21654e82b844a63909a4dd88ba3000f7b168a857..484298eb13eccace9221fa650487b0c32461b463 100644 (file)
@@ -1,47 +1,39 @@
-static GstCheckABIStruct list[] = {
-  {"GstAdapter", sizeof (GstAdapter), 88}
-  ,
-  {"GstAdapterClass", sizeof (GstAdapterClass), 168}
-  ,
-  {"GstBaseSink", sizeof (GstBaseSink), 600}
-  ,
-  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 728}
-  ,
-  {"GstBaseSrc", sizeof (GstBaseSrc), 600}
-  ,
-  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 744}
-  ,
-  {"GstBaseTransform", sizeof (GstBaseTransform), 576}
-  ,
-  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 744}
-  ,
-  {"GstCollectData", sizeof (GstCollectData), 168}
-  ,
-  {"GstCollectPads", sizeof (GstCollectPads), 168}
-  ,
-  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 272}
-  ,
-  {"GstPushSrc", sizeof (GstPushSrc), 632}
-  ,
-  {"GstPushSrcClass", sizeof (GstPushSrcClass), 784}
-  ,
-  {"GstTimedValue", sizeof (GstTimedValue), 32}
-  ,
-  {"GstValueArray", sizeof (GstValueArray), 32}
-  ,
-  {"GstController", sizeof (GstController), 80}
-  ,
-  {"GstControllerClass", sizeof (GstControllerClass), 168}
-  ,
-  {"GstNetClientClock", sizeof (GstNetClientClock), 368}
-  ,
-  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 384}
-  ,
-  {"GstNetTimePacket", sizeof (GstNetTimePacket), 16}
-  ,
-  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 152}
-  ,
-  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 240}
-  ,
+
+GstCheckABIStruct list[] = {
+  {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
+  {"GstBaseParse", sizeof (GstBaseParse), 576},
+  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
+  {"GstBaseSink", sizeof (GstBaseSink), 664},
+  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
+  {"GstBaseSrc", sizeof (GstBaseSrc), 648},
+  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
+  {"GstBaseTransform", sizeof (GstBaseTransform), 576},
+  {"GstBitReader", sizeof (GstBitReader), 56},
+  {"GstByteReader", sizeof (GstByteReader), 48},
+  {"GstByteWriter", sizeof (GstByteWriter), 96},
+  {"GstCollectData", sizeof (GstCollectData), 200},
+  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
+  {"GstCollectPads", sizeof (GstCollectPads), 152},
+  {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
+  {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
+  {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
+  {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
+  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
+  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
+  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
+  {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
+  {"GstControlPoint", sizeof (GstControlPoint), 32},
+  {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
+  {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
+  {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
+  {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
+  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
+  {"GstNetClientClock", sizeof (GstNetClientClock), 208},
+  {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
+  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
+  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
+  {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
+  {"GstPushSrc", sizeof (GstPushSrc), 680},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
   {NULL, 0, 0}
 };
index d63c71af46881ec7d82040366a4b7102a891095d..484298eb13eccace9221fa650487b0c32461b463 100644 (file)
@@ -1,26 +1,39 @@
 
 GstCheckABIStruct list[] = {
-  {"GstAdapter", sizeof (GstAdapter), 52},
-  {"GstAdapterClass", sizeof (GstAdapterClass), 84},
-  {"GstBaseSink", sizeof (GstBaseSink), 408},
-  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 368},
-  {"GstBaseSrc", sizeof (GstBaseSrc), 392},
-  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 376},
-  {"GstBaseTransform", sizeof (GstBaseTransform), 368},
-  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 376},
-  {"GstCollectData", sizeof (GstCollectData), 120},
-  {"GstCollectPads", sizeof (GstCollectPads), 92},
-  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 136},
-  {"GstPushSrc", sizeof (GstPushSrc), 408},
-  {"GstPushSrcClass", sizeof (GstPushSrcClass), 396},
-  {"GstTimedValue", sizeof (GstTimedValue), 32},
-  {"GstValueArray", sizeof (GstValueArray), 24},
-  {"GstController", sizeof (GstController), 40},
-  {"GstControllerClass", sizeof (GstControllerClass), 84},
-  {"GstNetClientClock", sizeof (GstNetClientClock), 256},
-  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 192},
+  {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
+  {"GstBaseParse", sizeof (GstBaseParse), 576},
+  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
+  {"GstBaseSink", sizeof (GstBaseSink), 664},
+  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
+  {"GstBaseSrc", sizeof (GstBaseSrc), 648},
+  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
+  {"GstBaseTransform", sizeof (GstBaseTransform), 576},
+  {"GstBitReader", sizeof (GstBitReader), 56},
+  {"GstByteReader", sizeof (GstByteReader), 48},
+  {"GstByteWriter", sizeof (GstByteWriter), 96},
+  {"GstCollectData", sizeof (GstCollectData), 200},
+  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
+  {"GstCollectPads", sizeof (GstCollectPads), 152},
+  {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
+  {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
+  {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
+  {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
+  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
+  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
+  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
+  {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
+  {"GstControlPoint", sizeof (GstControlPoint), 32},
+  {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
+  {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
+  {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
+  {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
+  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
+  {"GstNetClientClock", sizeof (GstNetClientClock), 208},
   {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
-  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 84},
-  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 120},
+  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
+  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
+  {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
+  {"GstPushSrc", sizeof (GstPushSrc), 680},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
   {NULL, 0, 0}
 };
index 2d17aa47895a45d1217cfd7acf986e63c946be69..484298eb13eccace9221fa650487b0c32461b463 100644 (file)
@@ -1,40 +1,39 @@
 
 GstCheckABIStruct list[] = {
-  {"GstAdapterClass", sizeof (GstAdapterClass), 168},
-  {"GstAdapter", sizeof (GstAdapter), 88},
-  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 728},
-  {"GstBaseSink", sizeof (GstBaseSink), 600},
-  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 744},
-  {"GstBaseSrc", sizeof (GstBaseSrc), 600},
-  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 744},
+  {"GstBaseParseClass", sizeof (GstBaseParseClass), 728},
+  {"GstBaseParse", sizeof (GstBaseParse), 576},
+  {"GstBaseSinkClass", sizeof (GstBaseSinkClass), 792},
+  {"GstBaseSink", sizeof (GstBaseSink), 664},
+  {"GstBaseSrcClass", sizeof (GstBaseSrcClass), 800},
+  {"GstBaseSrc", sizeof (GstBaseSrc), 648},
+  {"GstBaseTransformClass", sizeof (GstBaseTransformClass), 816},
   {"GstBaseTransform", sizeof (GstBaseTransform), 576},
-  {"GstBitReader", sizeof (GstBitReader), 24},
-  {"GstByteReader", sizeof (GstByteReader), 16},
-  {"GstByteWriter", sizeof (GstByteWriter), 32},
-  {"GstCollectData", sizeof (GstCollectData), 168},
-  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 272},
-  {"GstCollectPads", sizeof (GstCollectPads), 168},
-  {"GstControllerClass", sizeof (GstControllerClass), 168},
-  {"GstController", sizeof (GstController), 80},
-  {"GstControlSourceClass", sizeof (GstControlSourceClass), 176},
-  {"GstControlSource", sizeof (GstControlSource), 80},
-  {"GstDataQueueClass", sizeof (GstDataQueueClass), 184},
-  {"GstDataQueueItem", sizeof (GstDataQueueItem), 40},
-  {"GstDataQueue", sizeof (GstDataQueue), 128},
-  {"GstDataQueueSize", sizeof (GstDataQueueSize), 16},
-  {"GstDPPacketizer", sizeof (GstDPPacketizer), 64},
-  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 208},
-  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 128},
-  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 208},
-  {"GstLFOControlSource", sizeof (GstLFOControlSource), 128},
-  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 384},
-  {"GstNetClientClock", sizeof (GstNetClientClock), 368},
+  {"GstBitReader", sizeof (GstBitReader), 56},
+  {"GstByteReader", sizeof (GstByteReader), 48},
+  {"GstByteWriter", sizeof (GstByteWriter), 96},
+  {"GstCollectData", sizeof (GstCollectData), 200},
+  {"GstCollectPadsClass", sizeof (GstCollectPadsClass), 216},
+  {"GstCollectPads", sizeof (GstCollectPads), 152},
+  {"GstARGBControlBindingClass", sizeof (GstARGBControlBindingClass), 280},
+  {"GstARGBControlBinding", sizeof (GstARGBControlBinding), 248},
+  {"GstDirectControlBindingClass", sizeof (GstDirectControlBindingClass), 280},
+  {"GstDirectControlBinding", sizeof (GstDirectControlBinding), 248},
+  {"GstInterpolationControlSourceClass", sizeof (GstInterpolationControlSourceClass), 280},
+  {"GstInterpolationControlSource", sizeof (GstInterpolationControlSource), 240},
+  {"GstLFOControlSourceClass", sizeof (GstLFOControlSourceClass), 248},
+  {"GstLFOControlSource", sizeof (GstLFOControlSource), 184},
+  {"GstControlPoint", sizeof (GstControlPoint), 32},
+  {"GstTimedValueControlSourceClass", sizeof (GstTimedValueControlSourceClass), 248},
+  {"GstTimedValueControlSource", sizeof (GstTimedValueControlSource), 200},
+  {"GstTriggerControlSourceClass", sizeof (GstTriggerControlSourceClass), 280},
+  {"GstTriggerControlSource", sizeof (GstTriggerControlSource), 240},
+  {"GstNetClientClockClass", sizeof (GstNetClientClockClass), 328},
+  {"GstNetClientClock", sizeof (GstNetClientClock), 208},
   {"GstNetTimePacket", sizeof (GstNetTimePacket), 16},
-  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 240},
-  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 152},
-  {"GstPushSrcClass", sizeof (GstPushSrcClass), 784},
-  {"GstPushSrc", sizeof (GstPushSrc), 632},
-  {"GstTimedValue", sizeof (GstTimedValue), 32},
-  {"GstValueArray", sizeof (GstValueArray), 32},
+  {"GstNetTimeProviderClass", sizeof (GstNetTimeProviderClass), 216},
+  {"GstNetTimeProvider", sizeof (GstNetTimeProvider), 128},
+  {"GstPushSrcClass", sizeof (GstPushSrcClass), 856},
+  {"GstPushSrc", sizeof (GstPushSrc), 680},
+  {"GstTimedValue", sizeof (GstTimedValue), 16},
   {NULL, 0, 0}
 };
index a10532cb2b6187115a7f39ebd39fb268a1c00ce9..68eb34e8d7c8279b1b0be72287951ce9ee934736 100644 (file)
@@ -86,7 +86,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -344,6 +344,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -380,6 +383,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 5f39a6959fe4a76632660afd0b443ceb03317bfe..4a43b77dd36954b953eb93cfa5346aef4d9feb03 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -335,6 +335,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -371,6 +374,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 26737fab4e493a0cf2c78a8973419e73f809d36e..d0629ae6d417afb70acfbb9ca7c8cfbbde30d652 100644 (file)
@@ -83,7 +83,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -344,6 +344,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -380,6 +383,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 4c5d16cf1b4c5d5a54fdf064824bb061c8018140..40db8374c98abaf8eeb0e9ab5b945ae6d35e4640 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -334,6 +334,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -370,6 +373,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 2f01e35e3385664806014bf522c8f08b45129b3e..dbdff9a74e6848dcd855f9fad7550a2870ede26d 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -335,6 +335,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -371,6 +374,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 7d871115f6e39d5804670b3c785058ade659671b..30ac1b41e005881d9408321c64b801012ddafcf4 100644 (file)
@@ -21,7 +21,6 @@ TESTS_ENVIRONMENT = \
 EXTRA_DIST = extract.pl
 
 EXAMPLES = \
-       dynamic \
        $(GNOME) \
        elementcreate \
        elementmake \
@@ -35,9 +34,17 @@ EXAMPLES = \
        init \
        query \
        typefind \
-       fakesrc \
+       blockprobe \
+       probe \
+       appsrc \
+       appsink \
+       dynformat \
+       effectswitch \
+       testrtpool \
+       norebuffer \
        playbin \
-       decodebin
+       decodebin \
+       playsink 
 
 BUILT_SOURCES = \
        elementmake.c elementcreate.c elementget.c elementlink.c elementfactory.c \
@@ -47,9 +54,17 @@ BUILT_SOURCES = \
        helloworld.c \
        init.c \
        query.c \
-       typefind.c dynamic.c \
-       fakesrc.c \
-       playbin.c decodebin.c
+       typefind.c \
+       blockprobe.c \
+       probe.c \
+       appsrc.c \
+       appsink.c \
+       dynformat.c \
+       effectswitch.c \
+       testrtpool.c \
+       norebuffer.c \
+       playbin.c decodebin.c \
+       playsink.c
 
 CLEANFILES = core core.* test-registry.* *.gcno *.gcda $(BUILT_SOURCES)
 
@@ -78,13 +93,34 @@ init.c: $(top_srcdir)/docs/manual/basics-init.xml
 query.c: $(top_srcdir)/docs/manual/advanced-position.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
-typefind.c dynamic.c: $(top_srcdir)/docs/manual/advanced-autoplugging.xml
+typefind.c: $(top_srcdir)/docs/manual/advanced-autoplugging.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
-fakesrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+blockprobe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
-playbin.c decodebin.c: $(top_srcdir)/docs/manual/highlevel-components.xml
+probe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+appsrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+appsink.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+dynformat.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+effectswitch.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+norebuffer.c: $(top_srcdir)/docs/manual/advanced-buffering.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+playbin.c decodebin.c playsink.c: $(top_srcdir)/docs/manual/highlevel-playback.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+testrtpool.c: $(top_srcdir)/docs/manual/advanced-threads.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
 TESTS = bin \
@@ -92,3 +128,6 @@ TESTS = bin \
        ghostpad init
 
 noinst_PROGRAMS = $(EXAMPLES)
+
+testrtpool_LDADD = $(GST_OBJ_LIBS) $(PTHREAD_LIBS)
+testrtpool_CFLAGS = $(GST_OBJ_CFLAGS) $(PTHREAD_CFLAGS)
index d260b7e97bf6642134d7b335b594bd06dc4c66fc..141598b815f43d81bc659446945348bff1d0a827 100644 (file)
@@ -85,7 +85,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -101,33 +101,60 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__EXEEXT_1 =
-am__EXEEXT_2 = dynamic$(EXEEXT) $(am__EXEEXT_1) elementcreate$(EXEEXT) \
+am__EXEEXT_2 = $(am__EXEEXT_1) elementcreate$(EXEEXT) \
        elementmake$(EXEEXT) elementfactory$(EXEEXT) \
        elementget$(EXEEXT) elementlink$(EXEEXT) bin$(EXEEXT) \
        pad$(EXEEXT) ghostpad$(EXEEXT) helloworld$(EXEEXT) \
        init$(EXEEXT) query$(EXEEXT) typefind$(EXEEXT) \
-       fakesrc$(EXEEXT) playbin$(EXEEXT) decodebin$(EXEEXT)
+       blockprobe$(EXEEXT) probe$(EXEEXT) appsrc$(EXEEXT) \
+       appsink$(EXEEXT) dynformat$(EXEEXT) effectswitch$(EXEEXT) \
+       testrtpool$(EXEEXT) norebuffer$(EXEEXT) playbin$(EXEEXT) \
+       decodebin$(EXEEXT) playsink$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
-bin_SOURCES = bin.c
-bin_OBJECTS = bin.$(OBJEXT)
-bin_LDADD = $(LDADD)
+appsink_SOURCES = appsink.c
+appsink_OBJECTS = appsink.$(OBJEXT)
+appsink_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
-bin_DEPENDENCIES =  \
+appsink_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
+appsrc_SOURCES = appsrc.c
+appsrc_OBJECTS = appsrc.$(OBJEXT)
+appsrc_LDADD = $(LDADD)
+appsrc_DEPENDENCIES =  \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
+bin_SOURCES = bin.c
+bin_OBJECTS = bin.$(OBJEXT)
+bin_LDADD = $(LDADD)
+bin_DEPENDENCIES =  \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
+blockprobe_SOURCES = blockprobe.c
+blockprobe_OBJECTS = blockprobe.$(OBJEXT)
+blockprobe_LDADD = $(LDADD)
+blockprobe_DEPENDENCIES =  \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
 decodebin_SOURCES = decodebin.c
 decodebin_OBJECTS = decodebin.$(OBJEXT)
 decodebin_LDADD = $(LDADD)
 decodebin_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
-dynamic_SOURCES = dynamic.c
-dynamic_OBJECTS = dynamic.$(OBJEXT)
-dynamic_LDADD = $(LDADD)
-dynamic_DEPENDENCIES =  \
+dynformat_SOURCES = dynformat.c
+dynformat_OBJECTS = dynformat.$(OBJEXT)
+dynformat_LDADD = $(LDADD)
+dynformat_DEPENDENCIES =  \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
+effectswitch_SOURCES = effectswitch.c
+effectswitch_OBJECTS = effectswitch.$(OBJEXT)
+effectswitch_LDADD = $(LDADD)
+effectswitch_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
 elementcreate_SOURCES = elementcreate.c
@@ -160,12 +187,6 @@ elementmake_LDADD = $(LDADD)
 elementmake_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
-fakesrc_SOURCES = fakesrc.c
-fakesrc_OBJECTS = fakesrc.$(OBJEXT)
-fakesrc_LDADD = $(LDADD)
-fakesrc_DEPENDENCIES =  \
-       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
-       $(am__DEPENDENCIES_1)
 ghostpad_SOURCES = ghostpad.c
 ghostpad_OBJECTS = ghostpad.$(OBJEXT)
 ghostpad_LDADD = $(LDADD)
@@ -184,6 +205,12 @@ init_LDADD = $(LDADD)
 init_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
+norebuffer_SOURCES = norebuffer.c
+norebuffer_OBJECTS = norebuffer.$(OBJEXT)
+norebuffer_LDADD = $(LDADD)
+norebuffer_DEPENDENCIES =  \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
 pad_SOURCES = pad.c
 pad_OBJECTS = pad.$(OBJEXT)
 pad_LDADD = $(LDADD)
@@ -196,12 +223,30 @@ playbin_LDADD = $(LDADD)
 playbin_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
+playsink_SOURCES = playsink.c
+playsink_OBJECTS = playsink.$(OBJEXT)
+playsink_LDADD = $(LDADD)
+playsink_DEPENDENCIES =  \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
+probe_SOURCES = probe.c
+probe_OBJECTS = probe.$(OBJEXT)
+probe_LDADD = $(LDADD)
+probe_DEPENDENCIES =  \
+       $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+       $(am__DEPENDENCIES_1)
 query_SOURCES = query.c
 query_OBJECTS = query.$(OBJEXT)
 query_LDADD = $(LDADD)
 query_DEPENDENCIES =  \
        $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(am__DEPENDENCIES_1)
+testrtpool_SOURCES = testrtpool.c
+testrtpool_OBJECTS = testrtpool-testrtpool.$(OBJEXT)
+testrtpool_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+testrtpool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(testrtpool_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 typefind_SOURCES = typefind.c
 typefind_OBJECTS = typefind.$(OBJEXT)
 typefind_LDADD = $(LDADD)
@@ -234,13 +279,16 @@ am__v_CCLD_0 = @echo "  CCLD  " $@;
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = bin.c decodebin.c dynamic.c elementcreate.c elementfactory.c \
-       elementget.c elementlink.c elementmake.c fakesrc.c ghostpad.c \
-       helloworld.c init.c pad.c playbin.c query.c typefind.c
-DIST_SOURCES = bin.c decodebin.c dynamic.c elementcreate.c \
-       elementfactory.c elementget.c elementlink.c elementmake.c \
-       fakesrc.c ghostpad.c helloworld.c init.c pad.c playbin.c \
-       query.c typefind.c
+SOURCES = appsink.c appsrc.c bin.c blockprobe.c decodebin.c \
+       dynformat.c effectswitch.c elementcreate.c elementfactory.c \
+       elementget.c elementlink.c elementmake.c ghostpad.c \
+       helloworld.c init.c norebuffer.c pad.c playbin.c playsink.c \
+       probe.c query.c testrtpool.c typefind.c
+DIST_SOURCES = appsink.c appsrc.c bin.c blockprobe.c decodebin.c \
+       dynformat.c effectswitch.c elementcreate.c elementfactory.c \
+       elementget.c elementlink.c elementmake.c ghostpad.c \
+       helloworld.c init.c norebuffer.c pad.c playbin.c playsink.c \
+       probe.c query.c testrtpool.c typefind.c
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -441,6 +489,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -477,6 +528,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -547,7 +599,6 @@ TESTS_ENVIRONMENT = \
 
 EXTRA_DIST = extract.pl
 EXAMPLES = \
-       dynamic \
        $(GNOME) \
        elementcreate \
        elementmake \
@@ -561,9 +612,17 @@ EXAMPLES = \
        init \
        query \
        typefind \
-       fakesrc \
+       blockprobe \
+       probe \
+       appsrc \
+       appsink \
+       dynformat \
+       effectswitch \
+       testrtpool \
+       norebuffer \
        playbin \
-       decodebin
+       decodebin \
+       playsink 
 
 BUILT_SOURCES = \
        elementmake.c elementcreate.c elementget.c elementlink.c elementfactory.c \
@@ -573,15 +632,25 @@ BUILT_SOURCES = \
        helloworld.c \
        init.c \
        query.c \
-       typefind.c dynamic.c \
-       fakesrc.c \
-       playbin.c decodebin.c
+       typefind.c \
+       blockprobe.c \
+       probe.c \
+       appsrc.c \
+       appsink.c \
+       dynformat.c \
+       effectswitch.c \
+       testrtpool.c \
+       norebuffer.c \
+       playbin.c decodebin.c \
+       playsink.c
 
 CLEANFILES = core core.* test-registry.* *.gcno *.gcda $(BUILT_SOURCES)
 AM_CFLAGS = $(GST_OBJ_CFLAGS)
 LDADD = $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
        $(GST_OBJ_LIBS)
 
+testrtpool_LDADD = $(GST_OBJ_LIBS) $(PTHREAD_LIBS)
+testrtpool_CFLAGS = $(GST_OBJ_CFLAGS) $(PTHREAD_CFLAGS)
 all: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -626,15 +695,27 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
+appsink$(EXEEXT): $(appsink_OBJECTS) $(appsink_DEPENDENCIES) $(EXTRA_appsink_DEPENDENCIES) 
+       @rm -f appsink$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(appsink_OBJECTS) $(appsink_LDADD) $(LIBS)
+appsrc$(EXEEXT): $(appsrc_OBJECTS) $(appsrc_DEPENDENCIES) $(EXTRA_appsrc_DEPENDENCIES) 
+       @rm -f appsrc$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(appsrc_OBJECTS) $(appsrc_LDADD) $(LIBS)
 bin$(EXEEXT): $(bin_OBJECTS) $(bin_DEPENDENCIES) $(EXTRA_bin_DEPENDENCIES) 
        @rm -f bin$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(bin_OBJECTS) $(bin_LDADD) $(LIBS)
+blockprobe$(EXEEXT): $(blockprobe_OBJECTS) $(blockprobe_DEPENDENCIES) $(EXTRA_blockprobe_DEPENDENCIES) 
+       @rm -f blockprobe$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(blockprobe_OBJECTS) $(blockprobe_LDADD) $(LIBS)
 decodebin$(EXEEXT): $(decodebin_OBJECTS) $(decodebin_DEPENDENCIES) $(EXTRA_decodebin_DEPENDENCIES) 
        @rm -f decodebin$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(decodebin_OBJECTS) $(decodebin_LDADD) $(LIBS)
-dynamic$(EXEEXT): $(dynamic_OBJECTS) $(dynamic_DEPENDENCIES) $(EXTRA_dynamic_DEPENDENCIES) 
-       @rm -f dynamic$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(dynamic_OBJECTS) $(dynamic_LDADD) $(LIBS)
+dynformat$(EXEEXT): $(dynformat_OBJECTS) $(dynformat_DEPENDENCIES) $(EXTRA_dynformat_DEPENDENCIES) 
+       @rm -f dynformat$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(dynformat_OBJECTS) $(dynformat_LDADD) $(LIBS)
+effectswitch$(EXEEXT): $(effectswitch_OBJECTS) $(effectswitch_DEPENDENCIES) $(EXTRA_effectswitch_DEPENDENCIES) 
+       @rm -f effectswitch$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(effectswitch_OBJECTS) $(effectswitch_LDADD) $(LIBS)
 elementcreate$(EXEEXT): $(elementcreate_OBJECTS) $(elementcreate_DEPENDENCIES) $(EXTRA_elementcreate_DEPENDENCIES) 
        @rm -f elementcreate$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(elementcreate_OBJECTS) $(elementcreate_LDADD) $(LIBS)
@@ -650,9 +731,6 @@ elementlink$(EXEEXT): $(elementlink_OBJECTS) $(elementlink_DEPENDENCIES) $(EXTRA
 elementmake$(EXEEXT): $(elementmake_OBJECTS) $(elementmake_DEPENDENCIES) $(EXTRA_elementmake_DEPENDENCIES) 
        @rm -f elementmake$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(elementmake_OBJECTS) $(elementmake_LDADD) $(LIBS)
-fakesrc$(EXEEXT): $(fakesrc_OBJECTS) $(fakesrc_DEPENDENCIES) $(EXTRA_fakesrc_DEPENDENCIES) 
-       @rm -f fakesrc$(EXEEXT)
-       $(AM_V_CCLD)$(LINK) $(fakesrc_OBJECTS) $(fakesrc_LDADD) $(LIBS)
 ghostpad$(EXEEXT): $(ghostpad_OBJECTS) $(ghostpad_DEPENDENCIES) $(EXTRA_ghostpad_DEPENDENCIES) 
        @rm -f ghostpad$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(ghostpad_OBJECTS) $(ghostpad_LDADD) $(LIBS)
@@ -662,15 +740,27 @@ helloworld$(EXEEXT): $(helloworld_OBJECTS) $(helloworld_DEPENDENCIES) $(EXTRA_he
 init$(EXEEXT): $(init_OBJECTS) $(init_DEPENDENCIES) $(EXTRA_init_DEPENDENCIES) 
        @rm -f init$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(init_OBJECTS) $(init_LDADD) $(LIBS)
+norebuffer$(EXEEXT): $(norebuffer_OBJECTS) $(norebuffer_DEPENDENCIES) $(EXTRA_norebuffer_DEPENDENCIES) 
+       @rm -f norebuffer$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(norebuffer_OBJECTS) $(norebuffer_LDADD) $(LIBS)
 pad$(EXEEXT): $(pad_OBJECTS) $(pad_DEPENDENCIES) $(EXTRA_pad_DEPENDENCIES) 
        @rm -f pad$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(pad_OBJECTS) $(pad_LDADD) $(LIBS)
 playbin$(EXEEXT): $(playbin_OBJECTS) $(playbin_DEPENDENCIES) $(EXTRA_playbin_DEPENDENCIES) 
        @rm -f playbin$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(playbin_OBJECTS) $(playbin_LDADD) $(LIBS)
+playsink$(EXEEXT): $(playsink_OBJECTS) $(playsink_DEPENDENCIES) $(EXTRA_playsink_DEPENDENCIES) 
+       @rm -f playsink$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(playsink_OBJECTS) $(playsink_LDADD) $(LIBS)
+probe$(EXEEXT): $(probe_OBJECTS) $(probe_DEPENDENCIES) $(EXTRA_probe_DEPENDENCIES) 
+       @rm -f probe$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(probe_OBJECTS) $(probe_LDADD) $(LIBS)
 query$(EXEEXT): $(query_OBJECTS) $(query_DEPENDENCIES) $(EXTRA_query_DEPENDENCIES) 
        @rm -f query$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(query_OBJECTS) $(query_LDADD) $(LIBS)
+testrtpool$(EXEEXT): $(testrtpool_OBJECTS) $(testrtpool_DEPENDENCIES) $(EXTRA_testrtpool_DEPENDENCIES) 
+       @rm -f testrtpool$(EXEEXT)
+       $(AM_V_CCLD)$(testrtpool_LINK) $(testrtpool_OBJECTS) $(testrtpool_LDADD) $(LIBS)
 typefind$(EXEEXT): $(typefind_OBJECTS) $(typefind_DEPENDENCIES) $(EXTRA_typefind_DEPENDENCIES) 
        @rm -f typefind$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(typefind_OBJECTS) $(typefind_LDADD) $(LIBS)
@@ -681,21 +771,28 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blockprobe.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decodebin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynamic.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynformat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/effectswitch.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementcreate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementfactory.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementget.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementlink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementmake.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fakesrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ghostpad.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helloworld.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/norebuffer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pad.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playbin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playsink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/probe.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testrtpool-testrtpool.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/typefind.Po@am__quote@
 
 .c.o:
@@ -719,6 +816,20 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+testrtpool-testrtpool.o: testrtpool.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrtpool_CFLAGS) $(CFLAGS) -MT testrtpool-testrtpool.o -MD -MP -MF $(DEPDIR)/testrtpool-testrtpool.Tpo -c -o testrtpool-testrtpool.o `test -f 'testrtpool.c' || echo '$(srcdir)/'`testrtpool.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/testrtpool-testrtpool.Tpo $(DEPDIR)/testrtpool-testrtpool.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testrtpool.c' object='testrtpool-testrtpool.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrtpool_CFLAGS) $(CFLAGS) -c -o testrtpool-testrtpool.o `test -f 'testrtpool.c' || echo '$(srcdir)/'`testrtpool.c
+
+testrtpool-testrtpool.obj: testrtpool.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrtpool_CFLAGS) $(CFLAGS) -MT testrtpool-testrtpool.obj -MD -MP -MF $(DEPDIR)/testrtpool-testrtpool.Tpo -c -o testrtpool-testrtpool.obj `if test -f 'testrtpool.c'; then $(CYGPATH_W) 'testrtpool.c'; else $(CYGPATH_W) '$(srcdir)/testrtpool.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/testrtpool-testrtpool.Tpo $(DEPDIR)/testrtpool-testrtpool.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testrtpool.c' object='testrtpool-testrtpool.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrtpool_CFLAGS) $(CFLAGS) -c -o testrtpool-testrtpool.obj `if test -f 'testrtpool.c'; then $(CYGPATH_W) 'testrtpool.c'; else $(CYGPATH_W) '$(srcdir)/testrtpool.c'; fi`
+
 mostlyclean-libtool:
        -rm -f *.lo
 
@@ -1048,13 +1159,34 @@ init.c: $(top_srcdir)/docs/manual/basics-init.xml
 query.c: $(top_srcdir)/docs/manual/advanced-position.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
-typefind.c dynamic.c: $(top_srcdir)/docs/manual/advanced-autoplugging.xml
+typefind.c: $(top_srcdir)/docs/manual/advanced-autoplugging.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+blockprobe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+probe.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+appsrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+appsink.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+dynformat.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+effectswitch.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+       $(PERL_PATH) $(srcdir)/extract.pl $@ $<
+
+norebuffer.c: $(top_srcdir)/docs/manual/advanced-buffering.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
-fakesrc.c: $(top_srcdir)/docs/manual/advanced-dataaccess.xml
+playbin.c decodebin.c playsink.c: $(top_srcdir)/docs/manual/highlevel-playback.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
-playbin.c decodebin.c: $(top_srcdir)/docs/manual/highlevel-components.xml
+testrtpool.c: $(top_srcdir)/docs/manual/advanced-threads.xml
        $(PERL_PATH) $(srcdir)/extract.pl $@ $<
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/tests/examples/manual/appsink.c b/tests/examples/manual/appsink.c
new file mode 100644 (file)
index 0000000..1347e80
--- /dev/null
@@ -0,0 +1,140 @@
+
+/*** block  from ../../../docs/manual/advanced-dataaccess.xml ***/
+#include <gst/gst.h>
+#ifdef HAVE_GTK
+#include <gtk/gtk.h>
+#endif
+
+#include <stdlib.h>
+
+#define CAPS "video/x-raw,format=RGB,width=160,pixel-aspect-ratio=1/1"
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *pipeline, *sink;
+  gint width, height;
+  GstSample *sample;
+  gchar *descr;
+  GError *error = NULL;
+  gint64 duration, position;
+  GstStateChangeReturn ret;
+  gboolean res;
+  GstMapInfo map;
+
+  gst_init (&argc, &argv);
+
+  if (argc != 2) {
+    g_print ("usage: %s <uri>\n Writes snapshot.png in the current directory\n",
+        argv[0]);
+    exit (-1);
+  }
+
+  /* create a new pipeline */
+  descr =
+      g_strdup_printf ("uridecodebin uri=%s ! videoconvert ! videoscale ! "
+      " appsink name=sink caps=\"" CAPS "\"", argv[1]);
+  pipeline = gst_parse_launch (descr, &error);
+
+  if (error != NULL) {
+    g_print ("could not construct pipeline: %s\n", error->message);
+    g_error_free (error);
+    exit (-1);
+  }
+
+  /* get sink */
+  sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
+
+  /* set to PAUSED to make the first frame arrive in the sink */
+  ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+  switch (ret) {
+    case GST_STATE_CHANGE_FAILURE:
+      g_print ("failed to play the file\n");
+      exit (-1);
+    case GST_STATE_CHANGE_NO_PREROLL:
+      /* for live sources, we need to set the pipeline to PLAYING before we can
+       * receive a buffer. We don't do that yet */
+      g_print ("live sources not supported yet\n");
+      exit (-1);
+    default:
+      break;
+  }
+  /* This can block for up to 5 seconds. If your machine is really overloaded,
+   * it might time out before the pipeline prerolled and we generate an error. A
+   * better way is to run a mainloop and catch errors there. */
+  ret = gst_element_get_state (pipeline, NULL, NULL, 5 * GST_SECOND);
+  if (ret == GST_STATE_CHANGE_FAILURE) {
+    g_print ("failed to play the file\n");
+    exit (-1);
+  }
+
+  /* get the duration */
+  gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration);
+
+  if (duration != -1)
+    /* we have a duration, seek to 5% */
+    position = duration * 5 / 100;
+  else
+    /* no duration, seek to 1 second, this could EOS */
+    position = 1 * GST_SECOND;
+
+  /* seek to the a position in the file. Most files have a black first frame so
+   * by seeking to somewhere else we have a bigger chance of getting something
+   * more interesting. An optimisation would be to detect black images and then
+   * seek a little more */
+  gst_element_seek_simple (pipeline, GST_FORMAT_TIME,
+      GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_FLUSH, position);
+
+  /* get the preroll buffer from appsink, this block untils appsink really
+   * prerolls */
+  g_signal_emit_by_name (sink, "pull-preroll", &sample, NULL);
+
+  /* if we have a buffer now, convert it to a pixbuf. It's possible that we
+   * don't have a buffer because we went EOS right away or had an error. */
+  if (sample) {
+    GstBuffer *buffer;
+    GstCaps *caps;
+    GstStructure *s;
+
+    /* get the snapshot buffer format now. We set the caps on the appsink so
+     * that it can only be an rgb buffer. The only thing we have not specified
+     * on the caps is the height, which is dependant on the pixel-aspect-ratio
+     * of the source material */
+    caps = gst_sample_get_caps (sample);
+    if (!caps) {
+      g_print ("could not get snapshot format\n");
+      exit (-1);
+    }
+    s = gst_caps_get_structure (caps, 0);
+
+    /* we need to get the final caps on the buffer to get the size */
+    res = gst_structure_get_int (s, "width", &width);
+    res |= gst_structure_get_int (s, "height", &height);
+    if (!res) {
+      g_print ("could not get snapshot dimension\n");
+      exit (-1);
+    }
+
+    /* create pixmap from buffer and save, gstreamer video buffers have a stride
+     * that is rounded up to the nearest multiple of 4 */
+    buffer = gst_sample_get_buffer (sample);
+    gst_buffer_map (buffer, &map, GST_MAP_READ);
+#ifdef HAVE_GTK
+    pixbuf = gdk_pixbuf_new_from_data (map.data,
+        GDK_COLORSPACE_RGB, FALSE, 8, width, height,
+        GST_ROUND_UP_4 (width * 3), NULL, NULL);
+
+    /* save the pixbuf */
+    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+#endif
+    gst_buffer_unmap (buffer, &map);
+  } else {
+    g_print ("could not make snapshot\n");
+  }
+
+  /* cleanup and exit */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  exit (0);
+}
diff --git a/tests/examples/manual/appsrc.c b/tests/examples/manual/appsrc.c
new file mode 100644 (file)
index 0000000..7256fe9
--- /dev/null
@@ -0,0 +1,83 @@
+
+/*** block  from ../../../docs/manual/advanced-dataaccess.xml ***/
+#include <gst/gst.h>
+
+static GMainLoop *loop;
+
+static void
+cb_need_data (GstElement *appsrc,
+             guint       unused_size,
+             gpointer    user_data)
+{
+  static gboolean white = FALSE;
+  static GstClockTime timestamp = 0;
+  GstBuffer *buffer;
+  guint size;
+  GstFlowReturn ret;
+
+  size = 385 * 288 * 2;
+
+  buffer = gst_buffer_new_allocate (NULL, size, NULL);
+
+  /* this makes the image black/white */
+  gst_buffer_memset (buffer, 0, white ? 0xff : 0x0, size);
+  
+  white = !white;
+
+  GST_BUFFER_PTS (buffer) = timestamp;
+  GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (1, GST_SECOND, 2);
+
+  timestamp += GST_BUFFER_DURATION (buffer);
+
+  g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);
+
+  if (ret != GST_FLOW_OK) {
+    /* something wrong, stop pushing */
+    g_main_loop_quit (loop);
+  }
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GstElement *pipeline, *appsrc, *conv, *videosink;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* setup pipeline */
+  pipeline = gst_pipeline_new ("pipeline");
+  appsrc = gst_element_factory_make ("appsrc", "source");
+  conv = gst_element_factory_make ("videoconvert", "conv");
+  videosink = gst_element_factory_make ("xvimagesink", "videosink");
+
+  /* setup */
+  g_object_set (G_OBJECT (appsrc), "caps",
+               gst_caps_new_simple ("video/x-raw",
+                                    "format", G_TYPE_STRING, "RGB16",
+                                    "width", G_TYPE_INT, 384,
+                                    "height", G_TYPE_INT, 288,
+                                    "framerate", GST_TYPE_FRACTION, 0, 1,
+                                    NULL), NULL);
+  gst_bin_add_many (GST_BIN (pipeline), appsrc, conv, videosink, NULL);
+  gst_element_link_many (appsrc, conv, videosink, NULL);
+
+  /* setup appsrc */
+  g_object_set (G_OBJECT (appsrc),
+               "stream-type", 0,
+               "format", GST_FORMAT_TIME, NULL);
+  g_signal_connect (appsrc, "need-data", G_CALLBACK (cb_need_data), NULL);
+
+  /* play */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  g_main_loop_run (loop);
+
+  /* clean up */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (GST_OBJECT (pipeline));
+  g_main_loop_unref (loop);
+
+  return 0;
+  }
diff --git a/tests/examples/manual/blockprobe.c b/tests/examples/manual/blockprobe.c
new file mode 100644 (file)
index 0000000..5f810de
--- /dev/null
@@ -0,0 +1,188 @@
+
+/*** block  from ../../../docs/manual/advanced-dataaccess.xml ***/
+#include <gst/gst.h>
+
+static GMainLoop *loop;
+static volatile gint counter;
+static GstBus *bus;
+static gboolean prerolled = FALSE;
+static GstPad *sinkpad;
+
+static void
+dec_counter (GstElement * pipeline)
+{
+  if (prerolled)
+    return;
+
+  if (g_atomic_int_dec_and_test (&counter)) {
+    /* all probes blocked and no-more-pads signaled, post
+     * message on the bus. */
+    prerolled = TRUE;
+
+    gst_bus_post (bus, gst_message_new_application (
+          GST_OBJECT_CAST (pipeline),
+          gst_structure_new_empty ("ExPrerolled")));
+  }
+}
+
+/* called when a source pad of uridecodebin is blocked */
+static GstPadProbeReturn
+cb_blocked (GstPad          *pad,
+            GstPadProbeInfo *info,
+            gpointer         user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  if (prerolled)
+    return GST_PAD_PROBE_REMOVE;
+
+  dec_counter (pipeline);
+
+  return GST_PAD_PROBE_OK;
+}
+
+/* called when uridecodebin has a new pad */
+static void
+cb_pad_added (GstElement *element,
+              GstPad     *pad,
+              gpointer    user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  if (prerolled)
+    return;
+
+  g_atomic_int_inc (&counter);
+
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+      (GstPadProbeCallback) cb_blocked, pipeline, NULL);
+
+  /* try to link to the video pad */
+  gst_pad_link (pad, sinkpad);
+}
+
+/* called when uridecodebin has created all pads */
+static void
+cb_no_more_pads (GstElement *element,
+                 gpointer    user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  if (prerolled)
+    return;
+
+  dec_counter (pipeline);
+}
+
+/* called when a new message is posted on the bus */
+static void
+cb_message (GstBus     *bus,
+            GstMessage *message,
+            gpointer    user_data)
+{
+  GstElement *pipeline = GST_ELEMENT (user_data);
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR:
+      g_print ("we received an error!\n");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_EOS:
+      g_print ("we reached EOS\n");
+      g_main_loop_quit (loop);
+      break;
+    case GST_MESSAGE_APPLICATION:
+    {
+      if (gst_message_has_name (message, "ExPrerolled")) {
+        /* it's our message */
+        g_print ("we are all prerolled, do seek\n");
+        gst_element_seek (pipeline,
+            1.0, GST_FORMAT_TIME,
+            GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
+            GST_SEEK_TYPE_SET, 2 * GST_SECOND,
+            GST_SEEK_TYPE_SET, 5 * GST_SECOND);
+
+        gst_element_set_state (pipeline, GST_STATE_PLAYING);
+      }
+      break;
+    }
+    default:
+      break;
+  }
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GstElement *pipeline, *src, *csp, *vs, *sink;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  if (argc < 2) {
+    g_print ("usage: %s <uri>", argv[0]);
+    return -1;
+  }
+
+  /* build */
+  pipeline = gst_pipeline_new ("my-pipeline");
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch (bus);
+  g_signal_connect (bus, "message", (GCallback) cb_message,
+      pipeline);
+
+  src = gst_element_factory_make ("uridecodebin", "src");
+  if (src == NULL)
+    g_error ("Could not create 'uridecodebin' element");
+
+  g_object_set (src, "uri", argv[1], NULL);
+
+  csp = gst_element_factory_make ("videoconvert", "csp");
+  if (csp == NULL)
+    g_error ("Could not create 'videoconvert' element");
+
+  vs = gst_element_factory_make ("videoscale", "vs");
+  if (csp == NULL)
+    g_error ("Could not create 'videoscale' element");
+
+  sink = gst_element_factory_make ("autovideosink", "sink");
+  if (sink == NULL)
+    g_error ("Could not create 'autovideosink' element");
+
+  gst_bin_add_many (GST_BIN (pipeline), src, csp, vs, sink, NULL);
+
+  /* can't link src yet, it has no pads */
+  gst_element_link_many (csp, vs, sink, NULL);
+
+  sinkpad = gst_element_get_static_pad (csp, "sink");
+
+  /* for each pad block that is installed, we will increment
+   * the counter. for each pad block that is signaled, we
+   * decrement the counter. When the counter is 0 we post
+   * an app message to tell the app that all pads are
+   * blocked. Start with 1 that is decremented when no-more-pads
+   * is signaled to make sure that we only post the message
+   * after no-more-pads */
+  g_atomic_int_set (&counter, 1);
+
+  g_signal_connect (src, "pad-added",
+      (GCallback) cb_pad_added, pipeline);
+  g_signal_connect (src, "no-more-pads",
+      (GCallback) cb_no_more_pads, pipeline);
+
+  gst_element_set_state (pipeline, GST_STATE_PAUSED);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  gst_object_unref (sinkpad);
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+  g_main_loop_unref (loop);
+
+  return 0;
+}
index 960f554fdbcf61319850be2239f4e96048df97a5..d18f2ada6c605c7bafa6999e8e582352e9defaca 100644 (file)
@@ -1,8 +1,8 @@
 
-/*** block a  from ../../../docs/manual/highlevel-components.xml ***/
+/*** block a  from ../../../docs/manual/highlevel-playback.xml ***/
 #include <gst/gst.h>
 
-/*** block b  from ../../../docs/manual/highlevel-components.xml ***/
+/*** block b  from ../../../docs/manual/highlevel-playback.xml ***/
 static gboolean
 my_bus_callback (GstBus     *bus,
                 GstMessage *message,
@@ -36,13 +36,12 @@ my_bus_callback (GstBus     *bus,
   return TRUE;
 }
 
-/*** block c  from ../../../docs/manual/highlevel-components.xml ***/
+/*** block c  from ../../../docs/manual/highlevel-playback.xml ***/
 GstElement *pipeline, *audio;
 
 static void
 cb_newpad (GstElement *decodebin,
           GstPad     *pad,
-          gboolean    last,
           gpointer    data)
 {
   GstCaps *caps;
@@ -101,7 +100,7 @@ main (gint   argc,
   src = gst_element_factory_make ("filesrc", "source");
   g_object_set (G_OBJECT (src), "location", argv[1], NULL);
   dec = gst_element_factory_make ("decodebin", "decoder");
-  g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad), NULL);
+  g_signal_connect (dec, "pad-added", G_CALLBACK (cb_newpad), NULL);
   gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
   gst_element_link (src, dec);
 
diff --git a/tests/examples/manual/dynamic.c b/tests/examples/manual/dynamic.c
deleted file mode 100644 (file)
index de39bd8..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-
-/*** block a  from ../../../docs/manual/advanced-autoplugging.xml ***/
-#include <gst/gst.h>
-
-GstElement *pipeline;
-
-/*** block b  from ../../../docs/manual/advanced-autoplugging.xml ***/
-static GList *factories;
-
-/*
- * This function is called by the registry loader. Its return value
- * (TRUE or FALSE) decides whether the given feature will be included
- * in the list that we're generating further down.
- */
-
-static gboolean
-cb_feature_filter (GstPluginFeature *feature,
-                  gpointer          data)
-{
-  const gchar *klass;
-  guint rank;
-
-  /* we only care about element factories */
-  if (!GST_IS_ELEMENT_FACTORY (feature))
-    return FALSE;
-
-  /* only parsers, demuxers and decoders */
-  klass = gst_element_factory_get_metadata (GST_ELEMENT_FACTORY (feature), GST_ELEMENT_METADATA_KLASS);
-  if (g_strrstr (klass, "Demux") == NULL &&
-      g_strrstr (klass, "Decoder") == NULL &&
-      g_strrstr (klass, "Parse") == NULL)
-    return FALSE;
-
-  /* only select elements with autoplugging rank */
-  rank = gst_plugin_feature_get_rank (feature);
-  if (rank < GST_RANK_MARGINAL)
-    return FALSE;
-
-  return TRUE;
-}
-
-/*
- * This function is called to sort features by rank.
- */
-
-static gint
-cb_compare_ranks (GstPluginFeature *f1,
-                 GstPluginFeature *f2)
-{
-  return gst_plugin_feature_get_rank (f2) - gst_plugin_feature_get_rank (f1);
-}
-
-static void
-init_factories (void)
-{
-  /* first filter out the interesting element factories */
-  factories = gst_registry_feature_filter (
-      gst_registry_get (),
-      (GstPluginFeatureFilter) cb_feature_filter, FALSE, NULL);
-
-  /* sort them according to their ranks */
-  factories = g_list_sort (factories, (GCompareFunc) cb_compare_ranks);
-}
-
-/*** block c  from ../../../docs/manual/advanced-autoplugging.xml ***/
-static void try_to_plug (GstPad *pad, GstCaps *caps);
-
-static GstElement *audiosink;
-
-static void
-cb_newpad (GstElement *element,
-          GstPad     *pad,
-          gpointer    data)
-{
-  GstCaps *caps;
-
-  caps = gst_pad_query_caps (pad, NULL);
-  try_to_plug (pad, caps);
-  gst_caps_unref (caps);
-}
-
-static void
-close_link (GstPad      *srcpad,
-           GstElement  *sinkelement,
-           const gchar *padname,
-           const GList *templlist)
-{
-  GstPad *pad;
-  gboolean has_dynamic_pads = FALSE;
-
-  g_print ("Plugging pad %s:%s to newly created %s:%s\n",
-          gst_object_get_name (GST_OBJECT (gst_pad_get_parent (srcpad))),
-          gst_pad_get_name (srcpad),
-          gst_object_get_name (GST_OBJECT (sinkelement)), padname);
-
-  /* add the element to the pipeline and set correct state */
-  if (sinkelement != audiosink) {
-    gst_bin_add (GST_BIN (pipeline), sinkelement);
-    gst_element_set_state (sinkelement, GST_STATE_READY);
-  }
-  pad = gst_element_get_static_pad (sinkelement, padname);
-  gst_pad_link (srcpad, pad);
-  if (sinkelement != audiosink) {
-    gst_element_set_state (sinkelement, GST_STATE_PAUSED);
-  }
-  gst_object_unref (GST_OBJECT (pad));
-
-  /* if we have static source pads, link those. If we have dynamic
-   * source pads, listen for pad-added signals on the element */
-  for ( ; templlist != NULL; templlist = templlist->next) {
-    GstStaticPadTemplate *templ = templlist->data;
-
-    /* only sourcepads, no request pads */
-    if (templ->direction != GST_PAD_SRC ||
-        templ->presence == GST_PAD_REQUEST) {
-      continue;
-    }
-
-    switch (templ->presence) {
-      case GST_PAD_ALWAYS: {
-        GstPad *pad = gst_element_get_static_pad (sinkelement, templ->name_template);
-        GstCaps *caps = gst_pad_query_caps (pad, NULL);
-
-        /* link */
-        try_to_plug (pad, caps);
-        gst_object_unref (GST_OBJECT (pad));
-        gst_caps_unref (caps);
-        break;
-      }
-      case GST_PAD_SOMETIMES:
-        has_dynamic_pads = TRUE;
-        break;
-      default:
-        break;
-    }
-  }
-
-  /* listen for newly created pads if this element supports that */
-  if (has_dynamic_pads) {
-    g_signal_connect (sinkelement, "pad-added", G_CALLBACK (cb_newpad), NULL);
-  }
-}
-
-static void
-try_to_plug (GstPad        *pad,
-            GstCaps       *caps)
-{
-  GstObject *parent = GST_OBJECT (GST_OBJECT_PARENT (pad));
-  const gchar *mime;
-  const GList *item;
-  GstCaps *res, *audiocaps;
-
-  /* don't plug if we're already plugged - FIXME: memleak for pad */
-  if (GST_PAD_IS_LINKED (gst_element_get_static_pad (audiosink, "sink"))) {
-    g_print ("Omitting link for pad %s:%s because we're already linked\n",
-            GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
-    return;
-  }
-
-  /* as said above, we only try to plug audio... Omit video */
-  mime = gst_structure_get_name (gst_caps_get_structure (caps, 0));
-  if (g_strrstr (mime, "video")) {
-    g_print ("Omitting link for pad %s:%s because mimetype %s is non-audio\n",
-            GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad), mime);
-    return;
-  }
-
-  /* can it link to the audiopad? */
-  audiocaps = gst_pad_query_caps (gst_element_get_static_pad (audiosink, "sink"),
-  NULL);
-  res = gst_caps_intersect (caps, audiocaps);
-  if (res && !gst_caps_is_empty (res)) {
-    g_print ("Found pad to link to audiosink - plugging is now done\n");
-    close_link (pad, audiosink, "sink", NULL);
-    gst_caps_unref (audiocaps);
-    gst_caps_unref (res);
-    return;
-  }
-  gst_caps_unref (audiocaps);
-  gst_caps_unref (res);
-
-  /* try to plug from our list */
-  for (item = factories; item != NULL; item = item->next) {
-    GstElementFactory *factory = GST_ELEMENT_FACTORY (item->data);
-    const GList *pads;
-
-    for (pads = gst_element_factory_get_static_pad_templates (factory);
-         pads != NULL; pads = pads->next) {
-      GstStaticPadTemplate *templ = pads->data;
-
-      /* find the sink template - need an always pad*/
-      if (templ->direction != GST_PAD_SINK ||
-          templ->presence != GST_PAD_ALWAYS) {
-        continue;
-      }
-
-      /* can it link? */
-      res = gst_caps_intersect (caps,
-          gst_static_caps_get (&templ->static_caps));
-      if (res && !gst_caps_is_empty (res)) {
-        GstElement *element;
-        gchar *name_template = g_strdup (templ->name_template);
-
-        /* close link and return */
-        gst_caps_unref (res);
-        element = gst_element_factory_create (factory, NULL);
-        close_link (pad, element, name_template,
-                   gst_element_factory_get_static_pad_templates (factory));
-        g_free (name_template);
-        return;
-      }
-      gst_caps_unref (res);
-
-      /* we only check one sink template per factory, so move on to the
-       * next factory now */
-      break;
-    }
-  }
-
-  /* if we get here, no item was found */
-  g_print ("No compatible pad found to decode %s on %s:%s\n",
-          mime, GST_OBJECT_NAME (parent), GST_OBJECT_NAME (pad));
-}
-
-static void
-cb_typefound (GstElement *typefind,
-             guint       probability,
-             GstCaps    *caps,
-             gpointer    data)
-{
-  gchar *s;
-  GstPad *pad;
-
-  s = gst_caps_to_string (caps);
-  g_print ("Detected media type %s\n", s);
-  g_free (s);
-
-  /* actually plug now */
-  pad = gst_element_get_static_pad (typefind, "src");
-  try_to_plug (pad, caps);
-  gst_object_unref (GST_OBJECT (pad));
-}
-
-/*** block d  from ../../../docs/manual/advanced-autoplugging.xml ***/
-static gboolean
-my_bus_callback (GstBus     *bus,
-                 GstMessage *message,
-                 gpointer    data)
-{
-  GMainLoop *loop = data;
-
-  switch (GST_MESSAGE_TYPE (message)) {
-    case GST_MESSAGE_ERROR: {
-      GError *err;
-      gchar *debug;
-
-      gst_message_parse_error (message, &err, &debug);
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-      g_free (debug);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    case GST_MESSAGE_EOS:
-      /* end-of-stream */
-      g_main_loop_quit (loop);
-      break;
-    default:
-      break;
-  }
-
-  /* remove from queue */
-  return TRUE;
-}
-
-gint
-main (gint   argc,
-      gchar *argv[])
-{
-  GMainLoop *loop;
-  GstElement *typefind, *realsink;
-  GstBus *bus;
-  GError *err = NULL;
-  gchar *p;
-
-  /* init GStreamer and ourselves */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-  init_factories ();
-
-  /* args */
-  if (argc != 2) {
-    g_print ("Usage: %s <filename>\n", argv[0]);
-    return -1;
-  }
-
-  /* pipeline */
-  p = g_strdup_printf ("filesrc location=\"%s\" ! typefind name=tf", argv[1]);
-  pipeline = gst_parse_launch (p, &err);
-  g_free (p);
-
-  if (err) {
-    g_error ("Could not construct pipeline: %s", err->message);
-    g_error_free (err);
-    return -1;
-  }
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, my_bus_callback, NULL);
-  gst_object_unref (bus);
-
-  typefind = gst_bin_get_by_name (GST_BIN (pipeline), "tf");
-  g_signal_connect (typefind, "have-type", G_CALLBACK (cb_typefound), NULL);
-  gst_object_unref (GST_OBJECT (typefind));
-  audiosink = gst_element_factory_make ("audioconvert", "aconv");
-  realsink = gst_element_factory_make ("alsasink", "audiosink");
-  gst_bin_add_many (GST_BIN (pipeline), audiosink, realsink, NULL);
-  gst_element_link (audiosink, realsink);
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-
-  /* run */
-  g_main_loop_run (loop);
-
-  /* exit */
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/examples/manual/dynformat.c b/tests/examples/manual/dynformat.c
new file mode 100644 (file)
index 0000000..469a355
--- /dev/null
@@ -0,0 +1,77 @@
+
+/*** block  from ../../../docs/manual/advanced-dataaccess.xml ***/
+#include <stdlib.h>
+
+#include <gst/gst.h>
+
+#define MAX_ROUND 100
+
+int
+main (int argc, char **argv)
+{
+  GstElement *pipe, *filter;
+  GstCaps *caps;
+  gint width, height;
+  gint xdir, ydir;
+  gint round;
+  GstMessage *message;
+
+  gst_init (&argc, &argv);
+
+  pipe = gst_parse_launch_full ("videotestsrc ! capsfilter name=filter ! "
+             "ximagesink", NULL, GST_PARSE_FLAG_NONE, NULL);
+  g_assert (pipe != NULL);
+
+  filter = gst_bin_get_by_name (GST_BIN (pipe), "filter");
+  g_assert (filter);
+
+  width = 320;
+  height = 240;
+  xdir = ydir = -10;
+
+  for (round = 0; round < MAX_ROUND; round++) {
+    gchar *capsstr;
+    g_print ("resize to %dx%d (%d/%d)   \r", width, height, round, MAX_ROUND);
+
+    /* we prefer our fixed width and height but allow other dimensions to pass
+     * as well */
+    capsstr = g_strdup_printf ("video/x-raw, width=(int)%d, height=(int)%d",
+        width, height);
+
+    caps = gst_caps_from_string (capsstr);
+    g_free (capsstr);
+    g_object_set (filter, "caps", caps, NULL);
+    gst_caps_unref (caps);
+
+    if (round == 0)
+      gst_element_set_state (pipe, GST_STATE_PLAYING);
+
+    width += xdir;
+    if (width >= 320)
+      xdir = -10;
+    else if (width < 200)
+      xdir = 10;
+
+    height += ydir;
+    if (height >= 240)
+      ydir = -10;
+    else if (height < 150)
+      ydir = 10;
+
+    message =
+        gst_bus_poll (GST_ELEMENT_BUS (pipe), GST_MESSAGE_ERROR,
+        50 * GST_MSECOND);
+    if (message) {
+      g_print ("got error           \n");
+
+      gst_message_unref (message);
+    }
+  }
+  g_print ("done                    \n");
+
+  gst_object_unref (filter);
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+
+  return 0;
+}
diff --git a/tests/examples/manual/effectswitch.c b/tests/examples/manual/effectswitch.c
new file mode 100644 (file)
index 0000000..5cba9c0
--- /dev/null
@@ -0,0 +1,192 @@
+
+/*** block  from ../../../docs/manual/advanced-dataaccess.xml ***/
+#include <gst/gst.h>
+
+static gchar *opt_effects = NULL;
+
+#define DEFAULT_EFFECTS "identity,exclusion,navigationtest," \
+    "agingtv,videoflip,vertigotv,gaussianblur,shagadelictv,edgetv"
+
+static GstPad *blockpad;
+static GstElement *conv_before;
+static GstElement *conv_after;
+static GstElement *cur_effect;
+static GstElement *pipeline;
+
+static GQueue effects = G_QUEUE_INIT;
+
+static GstPadProbeReturn
+event_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GMainLoop *loop = user_data;
+  GstElement *next;
+
+  if (GST_EVENT_TYPE (GST_PAD_PROBE_INFO_DATA (info)) != GST_EVENT_EOS)
+    return GST_PAD_PROBE_OK;
+
+  gst_pad_remove_probe (pad, GST_PAD_PROBE_INFO_ID (info));
+
+  /* push current event back into the queue */
+  g_queue_push_tail (&effects, gst_object_ref (cur_effect));
+  /* take next effect from the queue */
+  next = g_queue_pop_head (&effects);
+  if (next == NULL) {
+    GST_DEBUG_OBJECT (pad, "no more effects");
+    g_main_loop_quit (loop);
+    return GST_PAD_PROBE_DROP;
+  }
+
+  g_print ("Switching from '%s' to '%s'..\n", GST_OBJECT_NAME (cur_effect),
+      GST_OBJECT_NAME (next));
+
+  gst_element_set_state (cur_effect, GST_STATE_NULL);
+
+  /* remove unlinks automatically */
+  GST_DEBUG_OBJECT (pipeline, "removing %" GST_PTR_FORMAT, cur_effect);
+  gst_bin_remove (GST_BIN (pipeline), cur_effect);
+
+  GST_DEBUG_OBJECT (pipeline, "adding   %" GST_PTR_FORMAT, next);
+  gst_bin_add (GST_BIN (pipeline), next);
+
+  GST_DEBUG_OBJECT (pipeline, "linking..");
+  gst_element_link_many (conv_before, next, conv_after, NULL);
+
+  gst_element_set_state (next, GST_STATE_PLAYING);
+
+  cur_effect = next;
+  GST_DEBUG_OBJECT (pipeline, "done");
+
+  return GST_PAD_PROBE_DROP;
+}
+
+static GstPadProbeReturn
+pad_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstPad *srcpad, *sinkpad;
+
+  GST_DEBUG_OBJECT (pad, "pad is blocked now");
+
+  /* remove the probe first */
+  gst_pad_remove_probe (pad, GST_PAD_PROBE_INFO_ID (info));
+
+  /* install new probe for EOS */
+  srcpad = gst_element_get_static_pad (cur_effect, "src");
+  gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_BLOCK |
+      GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, event_probe_cb, user_data, NULL);
+  gst_object_unref (srcpad);
+
+  /* push EOS into the element, the probe will be fired when the
+   * EOS leaves the effect and it has thus drained all of its data */
+  sinkpad = gst_element_get_static_pad (cur_effect, "sink");
+  gst_pad_send_event (sinkpad, gst_event_new_eos ());
+  gst_object_unref (sinkpad);
+
+  return GST_PAD_PROBE_OK;
+}
+
+static gboolean
+timeout_cb (gpointer user_data)
+{
+  gst_pad_add_probe (blockpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+      pad_probe_cb, user_data, NULL);
+
+  return TRUE;
+}
+
+static gboolean
+bus_cb (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GMainLoop *loop = user_data;
+
+  switch (GST_MESSAGE_TYPE (msg)) {
+    case GST_MESSAGE_ERROR:{
+      GError *err = NULL;
+      gchar *dbg;
+
+      gst_message_parse_error (msg, &err, &dbg);
+      gst_object_default_error (msg->src, err, dbg);
+      g_error_free (err);
+      g_free (dbg);
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char **argv)
+{
+  GOptionEntry options[] = {
+    {"effects", 'e', 0, G_OPTION_ARG_STRING, &opt_effects,
+        "Effects to use (comma-separated list of element names)", NULL},
+    {NULL}
+  };
+  GOptionContext *ctx;
+  GError *err = NULL;
+  GMainLoop *loop;
+  GstElement *src, *sink;
+  gchar **effect_names, **e;
+
+  ctx = g_option_context_new ("");
+  g_option_context_add_main_entries (ctx, options, NULL);
+  g_option_context_add_group (ctx, gst_init_get_option_group ());
+  if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+    g_print ("Error initializing: %s\n", err->message);
+    return 1;
+  }
+  g_option_context_free (ctx);
+
+  if (opt_effects != NULL)
+    effect_names = g_strsplit (opt_effects, ",", -1);
+  else
+    effect_names = g_strsplit (DEFAULT_EFFECTS, ",", -1);
+
+  for (e = effect_names; e != NULL && *e != NULL; ++e) {
+    GstElement *el;
+
+    el = gst_element_factory_make (*e, NULL);
+    if (el) {
+      g_print ("Adding effect '%s'\n", *e);
+      g_queue_push_tail (&effects, el);
+    }
+  }
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  src = gst_element_factory_make ("videotestsrc", NULL);
+  g_object_set (src, "is-live", TRUE, NULL);
+
+  blockpad = gst_element_get_static_pad (src, "src");
+
+  conv_before = gst_element_factory_make ("videoconvert", NULL);
+
+  cur_effect = g_queue_pop_head (&effects);
+
+  conv_after = gst_element_factory_make ("videoconvert", NULL);
+
+  sink = gst_element_factory_make ("ximagesink", NULL);
+
+  gst_bin_add_many (GST_BIN (pipeline), src, conv_before, cur_effect,
+      conv_after, sink, NULL);
+
+  gst_element_link_many (src, conv_before, cur_effect, conv_after,
+      sink, NULL);
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  gst_bus_add_watch (GST_ELEMENT_BUS (pipeline), bus_cb, loop);
+
+  g_timeout_add_seconds (1, timeout_cb, loop);
+
+  g_main_loop_run (loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/manual/fakesrc.c b/tests/examples/manual/fakesrc.c
deleted file mode 100644 (file)
index af26255..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-
-/*** block  from ../../../docs/manual/advanced-dataaccess.xml ***/
-#include <string.h> /* for memset () */
-#include <gst/gst.h>
-
-static void
-cb_handoff (GstElement *fakesrc,
-           GstBuffer  *buffer,
-           GstPad     *pad,
-           gpointer    user_data)
-{
-  static gboolean white = FALSE;
-  GstMapInfo info;
-  
-  gst_buffer_map (buffer, &info, GST_MAP_WRITE);
-
-  /* this makes the image black/white */
-  memset (info.data, white ? 0xff : 0x0, info.size);
-  white = !white;
-
-  gst_buffer_unmap (buffer, &info);
-}
-
-gint
-main (gint   argc,
-      gchar *argv[])
-{
-  GstElement *pipeline, *fakesrc, *flt, *conv, *videosink;
-  GMainLoop *loop;
-
-  /* init GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* setup pipeline */
-  pipeline = gst_pipeline_new ("pipeline");
-  fakesrc = gst_element_factory_make ("fakesrc", "source");
-  flt = gst_element_factory_make ("capsfilter", "flt");
-  conv = gst_element_factory_make ("videoconvert", "conv");
-  videosink = gst_element_factory_make ("xvimagesink", "videosink");
-
-  /* setup */
-  g_object_set (G_OBJECT (flt), "caps",
-               gst_caps_new_simple ("video/x-raw",
-                                    "format", G_TYPE_STRING, "RGB16",
-                                    "width", G_TYPE_INT, 384,
-                                    "height", G_TYPE_INT, 288,
-                                    "framerate", GST_TYPE_FRACTION, 1, 1,
-                                    NULL), NULL);
-  gst_bin_add_many (GST_BIN (pipeline), fakesrc, flt, conv, videosink, NULL);
-  gst_element_link_many (fakesrc, flt, conv, videosink, NULL);
-
-  /* setup fake source */
-  g_object_set (G_OBJECT (fakesrc),
-               "signal-handoffs", TRUE,
-               "sizemax", 384 * 288 * 2,
-               "sizetype", 2, NULL);
-  g_signal_connect (fakesrc, "handoff", G_CALLBACK (cb_handoff), NULL);
-
-  /* play */
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_main_loop_run (loop);
-
-  /* clean up */
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
index 506f3399f83e6c44a6d9a9903d2631200761ba67..80a9abde1dcc1849626eb307f9ab87765526c461 100644 (file)
@@ -67,6 +67,7 @@ main (int   argc,
 
   GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink;
   GstBus *bus;
+  guint bus_watch_id;
 
   /* Initialisation */
   gst_init (&argc, &argv);
@@ -101,7 +102,7 @@ main (int   argc,
 
   /* we add a message handler */
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
+  bus_watch_id = gst_bus_add_watch (bus, bus_call, loop);
   gst_object_unref (bus);
 
   /* we add all elements into the pipeline */
@@ -139,6 +140,8 @@ main (int   argc,
 
   g_print ("Deleting pipeline\n");
   gst_object_unref (GST_OBJECT (pipeline));
+  g_source_remove (bus_watch_id);
+  g_main_loop_unref (loop);
 
   return 0;
 }
diff --git a/tests/examples/manual/norebuffer.c b/tests/examples/manual/norebuffer.c
new file mode 100644 (file)
index 0000000..67db10f
--- /dev/null
@@ -0,0 +1,153 @@
+
+/*** block a  from ../../../docs/manual/advanced-buffering.xml ***/
+#include <gst/gst.h>
+
+GstState target_state;
+static gboolean is_live;
+static gboolean is_buffering;
+
+static gboolean
+buffer_timeout (gpointer data)
+{
+  GstElement *pipeline = data;
+  GstQuery *query;
+  gboolean busy;
+  gint percent;
+  gint64 estimated_total;
+  gint64 position, duration;
+  guint64 play_left;
+
+  query = gst_query_new_buffering (GST_FORMAT_TIME);
+
+  if (!gst_element_query (pipeline, query))
+    return TRUE;
+
+  gst_query_parse_buffering_percent (query, &busy, &percent);
+  gst_query_parse_buffering_range (query, NULL, NULL, NULL, &estimated_total);
+
+  if (estimated_total == -1)
+    estimated_total = 0;
+
+  /* calculate the remaining playback time */
+  if (!gst_element_query_position (pipeline, GST_FORMAT_TIME, &position))
+    position = -1;
+  if (!gst_element_query_duration (pipeline, GST_FORMAT_TIME, &duration))
+    duration = -1;
+
+  if (duration != -1 && position != -1)
+    play_left = GST_TIME_AS_MSECONDS (duration - position);
+  else
+    play_left = 0;
+
+  g_message ("play_left %" G_GUINT64_FORMAT", estimated_total %" G_GUINT64_FORMAT
+      ", percent %d", play_left, estimated_total, percent);
+
+  /* we are buffering or the estimated download time is bigger than the
+   * remaining playback time. We keep buffering. */
+  is_buffering = (busy || estimated_total * 1.1 > play_left);
+
+  if (!is_buffering)
+    gst_element_set_state (pipeline, target_state);
+
+  return is_buffering;
+}
+
+static void
+on_message_buffering (GstBus *bus, GstMessage *message, gpointer user_data)
+{
+  GstElement *pipeline = user_data;
+  gint percent;
+
+  /* no state management needed for live pipelines */
+  if (is_live)
+    return;
+
+  gst_message_parse_buffering (message, &percent);
+
+  if (percent < 100) {
+    /* buffering busy */
+    if (is_buffering == FALSE) {
+      is_buffering = TRUE;
+      if (target_state == GST_STATE_PLAYING) {
+        /* we were not buffering but PLAYING, PAUSE  the pipeline. */
+        gst_element_set_state (pipeline, GST_STATE_PAUSED);
+      }
+    }
+  }
+}
+
+static void
+on_message_async_done (GstBus *bus, GstMessage *message, gpointer user_data)
+{
+  GstElement *pipeline = user_data;
+
+  if (is_buffering == FALSE)
+    gst_element_set_state (pipeline, target_state);
+  else
+    g_timeout_add (500, buffer_timeout, pipeline);
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GstElement *pipeline;
+  GMainLoop *loop;
+  GstBus *bus;
+  GstStateChangeReturn ret;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* make sure we have a URI */
+  if (argc != 2) {
+    g_print ("Usage: %s <URI>\n", argv[0]);
+    return -1;
+  }
+
+  /* set up */
+  pipeline = gst_element_factory_make ("playbin", "pipeline");
+  g_object_set (G_OBJECT (pipeline), "uri", argv[1], NULL);
+  g_object_set (G_OBJECT (pipeline), "flags", 0x697 , NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::buffering",
+    (GCallback) on_message_buffering, pipeline);
+  g_signal_connect (bus, "message::async-done",
+    (GCallback) on_message_async_done, pipeline);
+  gst_object_unref (bus);
+
+  is_buffering = FALSE;
+  target_state = GST_STATE_PLAYING;
+  ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
+
+  switch (ret) {
+    case GST_STATE_CHANGE_SUCCESS:
+      is_live = FALSE;
+      break;
+
+    case GST_STATE_CHANGE_FAILURE:
+      g_warning ("failed to PAUSE");
+      return -1;
+
+    case GST_STATE_CHANGE_NO_PREROLL:
+      is_live = TRUE;
+      break;
+
+    default:
+      break;
+  }
+
+  /* now run */
+  g_main_loop_run (loop);
+
+  /* also clean up */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (GST_OBJECT (pipeline));
+  g_main_loop_unref (loop);
+
+  return 0;
+}
index 868b5865d272d4ea3a8dfafcec2766b86cb1dd83..3534af3eb3d80204a6c4c092d683d414071fb44b 100644 (file)
@@ -1,8 +1,8 @@
 
-/*** block a  from ../../../docs/manual/highlevel-components.xml ***/
+/*** block a  from ../../../docs/manual/highlevel-playback.xml ***/
 #include <gst/gst.h>
 
-/*** block b  from ../../../docs/manual/highlevel-components.xml ***/
+/*** block b  from ../../../docs/manual/highlevel-playback.xml ***/
 static gboolean
 my_bus_callback (GstBus     *bus,
                 GstMessage *message,
@@ -36,7 +36,7 @@ my_bus_callback (GstBus     *bus,
   return TRUE;
 }
 
-/*** block c  from ../../../docs/manual/highlevel-components.xml ***/
+/*** block c  from ../../../docs/manual/highlevel-playback.xml ***/
 gint
 main (gint   argc,
       gchar *argv[])
diff --git a/tests/examples/manual/playsink.c b/tests/examples/manual/playsink.c
new file mode 100644 (file)
index 0000000..b469ec2
--- /dev/null
@@ -0,0 +1,126 @@
+
+/*** block a  from ../../../docs/manual/highlevel-playback.xml ***/
+#include <gst/gst.h>
+
+/*** block b  from ../../../docs/manual/highlevel-playback.xml ***/
+static gboolean
+my_bus_callback (GstBus     *bus,
+                GstMessage *message,
+                gpointer    data)
+{
+  GMainLoop *loop = data;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR: {
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &err, &debug);
+      g_print ("Error: %s\n", err->message);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+      /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+
+  /* remove message from the queue */
+  return TRUE;
+}
+
+/*** block c  from ../../../docs/manual/highlevel-playback.xml ***/
+GstElement *pipeline, *sink;
+
+static void
+cb_pad_added (GstElement *dec,
+             GstPad     *pad,
+             gpointer    data)
+{
+  GstCaps *caps;
+  GstStructure *str;
+  const gchar *name;
+  GstPadTemplate *templ;
+  GstElementClass *klass;
+
+  /* check media type */
+  caps = gst_pad_query_caps (pad, NULL);
+  str = gst_caps_get_structure (caps, 0);
+  name = gst_structure_get_name (str);
+
+  klass = GST_ELEMENT_GET_CLASS (sink);
+
+  if (g_str_has_prefix (name, "audio")) {
+    templ = gst_element_class_get_pad_template (klass, "audio_sink");
+  } else if (g_str_has_prefix (name, "video")) {
+    templ = gst_element_class_get_pad_template (klass, "video_sink");
+  } else if (g_str_has_prefix (name, "text")) {
+    templ = gst_element_class_get_pad_template (klass, "text_sink");
+  } else {
+    templ = NULL;
+  }
+
+  if (templ) {
+    GstPad *sinkpad;
+
+    sinkpad = gst_element_request_pad (sink, templ, NULL, NULL);
+
+    if (!gst_pad_is_linked (sinkpad))
+      gst_pad_link (pad, sinkpad);
+
+    gst_object_unref (sinkpad);
+  }
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GMainLoop *loop;
+  GstElement *dec;
+  GstBus *bus;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* make sure we have input */
+  if (argc != 2) {
+    g_print ("Usage: %s <uri>\n", argv[0]);
+    return -1;
+  }
+
+  /* setup */
+  pipeline = gst_pipeline_new ("pipeline");
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, my_bus_callback, loop);
+  gst_object_unref (bus);
+
+  dec = gst_element_factory_make ("uridecodebin", "source");
+  g_object_set (G_OBJECT (dec), "uri", argv[1], NULL);
+  g_signal_connect (dec, "pad-added", G_CALLBACK (cb_pad_added), NULL);
+
+  /* create audio output */
+  sink = gst_element_factory_make ("playsink", "sink");
+  gst_util_set_object_arg (G_OBJECT (sink), "flags",  
+      "soft-colorbalance+soft-volume+vis+text+audio+video");
+  gst_bin_add_many (GST_BIN (pipeline), dec, sink, NULL);
+
+  /* run */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  g_main_loop_run (loop);
+
+  /* cleanup */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (GST_OBJECT (pipeline));
+
+  return 0;
+}
diff --git a/tests/examples/manual/probe.c b/tests/examples/manual/probe.c
new file mode 100644 (file)
index 0000000..cf2c233
--- /dev/null
@@ -0,0 +1,103 @@
+
+/*** block  from ../../../docs/manual/advanced-dataaccess.xml ***/
+#include <gst/gst.h>
+
+static GstPadProbeReturn
+cb_have_data (GstPad          *pad,
+              GstPadProbeInfo *info,
+              gpointer         user_data)
+{
+  gint x, y;
+  GstMapInfo map;
+  guint16 *ptr, t;
+  GstBuffer *buffer;
+
+  buffer = GST_PAD_PROBE_INFO_BUFFER (info);
+
+  buffer = gst_buffer_make_writable (buffer);
+  
+  gst_buffer_map (buffer, &map, GST_MAP_WRITE);
+
+  ptr = (guint16 *) map.data;
+  /* invert data */
+  for (y = 0; y < 288; y++) {
+    for (x = 0; x < 384 / 2; x++) {
+      t = ptr[384 - 1 - x];
+      ptr[384 - 1 - x] = ptr[x];
+      ptr[x] = t;
+    }
+    ptr += 384;
+  }
+  gst_buffer_unmap (buffer, &map);
+
+  GST_PAD_PROBE_INFO_DATA (info) = buffer;
+
+  return GST_PAD_PROBE_OK;
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  GMainLoop *loop;
+  GstElement *pipeline, *src, *sink, *filter, *csp;
+  GstCaps *filtercaps;
+  GstPad *pad;
+
+  /* init GStreamer */
+  gst_init (&argc, &argv);
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* build */
+  pipeline = gst_pipeline_new ("my-pipeline");
+  src = gst_element_factory_make ("videotestsrc", "src");
+  if (src == NULL)
+    g_error ("Could not create 'videotestsrc' element");
+
+  filter = gst_element_factory_make ("capsfilter", "filter");
+  g_assert (filter != NULL); /* should always exist */
+
+  csp = gst_element_factory_make ("videoconvert", "csp");
+  if (csp == NULL)
+    g_error ("Could not create 'videoconvert' element");
+
+  sink = gst_element_factory_make ("xvimagesink", "sink");
+  if (sink == NULL) {
+    sink = gst_element_factory_make ("ximagesink", "sink");
+    if (sink == NULL)
+      g_error ("Could not create neither 'xvimagesink' nor 'ximagesink' element");
+  }
+
+  gst_bin_add_many (GST_BIN (pipeline), src, filter, csp, sink, NULL);
+  gst_element_link_many (src, filter, csp, sink, NULL);
+  filtercaps = gst_caps_new_simple ("video/x-raw",
+                          "format", G_TYPE_STRING, "RGB16",
+                          "width", G_TYPE_INT, 384,
+                          "height", G_TYPE_INT, 288,
+                          "framerate", GST_TYPE_FRACTION, 25, 1,
+                          NULL);
+  g_object_set (G_OBJECT (filter), "caps", filtercaps, NULL);
+  gst_caps_unref (filtercaps);
+
+  pad = gst_element_get_static_pad (src, "src");
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER,
+      (GstPadProbeCallback) cb_have_data, NULL, NULL);
+  gst_object_unref (pad);
+
+  /* run */
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  /* wait until it's up and running or failed */
+  if (gst_element_get_state (pipeline, NULL, NULL, -1) == GST_STATE_CHANGE_FAILURE) {
+    g_error ("Failed to go into PLAYING state");
+  }
+
+  g_print ("Running ...\n");
+  g_main_loop_run (loop);
+
+  /* exit */
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+
+  return 0;
+}
diff --git a/tests/examples/manual/testrtpool.c b/tests/examples/manual/testrtpool.c
new file mode 100644 (file)
index 0000000..793969a
--- /dev/null
@@ -0,0 +1,235 @@
+
+/*** block a  from ../../../docs/manual/advanced-threads.xml ***/
+#include <gst/gst.h>
+
+#define TEST_TYPE_RT_POOL             (test_rt_pool_get_type ())
+#define TEST_RT_POOL(pool)            (G_TYPE_CHECK_INSTANCE_CAST ((pool), TEST_TYPE_RT_POOL, TestRTPool))
+#define TEST_IS_RT_POOL(pool)         (G_TYPE_CHECK_INSTANCE_TYPE ((pool), TEST_TYPE_RT_POOL))
+#define TEST_RT_POOL_CLASS(pclass)    (G_TYPE_CHECK_CLASS_CAST ((pclass), TEST_TYPE_RT_POOL, TestRTPoolClass))
+#define TEST_IS_RT_POOL_CLASS(pclass) (G_TYPE_CHECK_CLASS_TYPE ((pclass), TEST_TYPE_RT_POOL))
+#define TEST_RT_POOL_GET_CLASS(pool)  (G_TYPE_INSTANCE_GET_CLASS ((pool), TEST_TYPE_RT_POOL, TestRTPoolClass))
+#define TEST_RT_POOL_CAST(pool)       ((TestRTPool*)(pool))
+
+typedef struct _TestRTPool TestRTPool;
+typedef struct _TestRTPoolClass TestRTPoolClass;
+
+struct _TestRTPool {
+  GstTaskPool    object;
+};
+
+struct _TestRTPoolClass {
+  GstTaskPoolClass parent_class;
+};
+
+GType           test_rt_pool_get_type    (void);
+
+GstTaskPool *   test_rt_pool_new         (void);
+
+
+/*** block b  from ../../../docs/manual/advanced-threads.xml ***/
+#include <pthread.h>
+
+typedef struct
+{
+  pthread_t thread;
+} TestRTId;
+
+G_DEFINE_TYPE (TestRTPool, test_rt_pool, GST_TYPE_TASK_POOL);
+
+static void
+default_prepare (GstTaskPool * pool, GError ** error)
+{
+  /* we don't do anything here. We could construct a pool of threads here that
+   * we could reuse later but we don't */
+}
+
+static void
+default_cleanup (GstTaskPool * pool)
+{
+}
+
+static gpointer
+default_push (GstTaskPool * pool, GstTaskPoolFunction func, gpointer data,
+    GError ** error)
+{
+  TestRTId *tid;
+  gint res;
+  pthread_attr_t attr;
+  struct sched_param param;
+
+  tid = g_slice_new0 (TestRTId);
+
+  pthread_attr_init (&attr);
+  if ((res = pthread_attr_setschedpolicy (&attr, SCHED_RR)) != 0)
+    g_warning ("setschedpolicy: failure: %p", g_strerror (res));
+
+  param.sched_priority = 50;
+  if ((res = pthread_attr_setschedparam (&attr, &param)) != 0)
+    g_warning ("setschedparam: failure: %p", g_strerror (res));
+
+  if ((res = pthread_attr_setinheritsched (&attr, PTHREAD_EXPLICIT_SCHED)) != 0)
+    g_warning ("setinheritsched: failure: %p", g_strerror (res));
+
+  res = pthread_create (&tid->thread, &attr, (void *(*)(void *)) func, data);
+
+  if (res != 0) {
+    g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN,
+        "Error creating thread: %s", g_strerror (res));
+    g_slice_free (TestRTId, tid);
+    tid = NULL;
+  }
+
+  return tid;
+}
+
+static void
+default_join (GstTaskPool * pool, gpointer id)
+{
+  TestRTId *tid = (TestRTId *) id;
+
+  pthread_join (tid->thread, NULL);
+
+  g_slice_free (TestRTId, tid);
+}
+
+static void
+test_rt_pool_class_init (TestRTPoolClass * klass)
+{
+  GstTaskPoolClass *gsttaskpool_class;
+
+  gsttaskpool_class = (GstTaskPoolClass *) klass;
+
+  gsttaskpool_class->prepare = default_prepare;
+  gsttaskpool_class->cleanup = default_cleanup;
+  gsttaskpool_class->push = default_push;
+  gsttaskpool_class->join = default_join;
+}
+
+static void
+test_rt_pool_init (TestRTPool * pool)
+{
+}
+
+GstTaskPool *
+test_rt_pool_new (void)
+{
+  GstTaskPool *pool;
+
+  pool = g_object_new (TEST_TYPE_RT_POOL, NULL);
+
+  return pool;
+}
+
+/*** block c  from ../../../docs/manual/advanced-threads.xml ***/
+static GMainLoop* loop;
+
+static void
+on_stream_status (GstBus     *bus,
+                  GstMessage *message,
+                  gpointer    user_data)
+{
+  GstStreamStatusType type;
+  GstElement *owner;
+  const GValue *val;
+  GstTask *task = NULL;
+
+  gst_message_parse_stream_status (message, &type, &owner);
+
+  val = gst_message_get_stream_status_object (message);
+
+  /* see if we know how to deal with this object */
+  if (G_VALUE_TYPE (val) == GST_TYPE_TASK) {
+    task = g_value_get_object (val);
+  }
+
+  switch (type) {
+    case GST_STREAM_STATUS_TYPE_CREATE:
+      if (task) {
+        GstTaskPool *pool;
+
+        pool = test_rt_pool_new();
+
+        gst_task_set_pool (task, pool);
+      }
+      break;
+    default:
+      break;
+  }
+}
+
+static void
+on_error (GstBus     *bus,
+          GstMessage *message,
+          gpointer    user_data)
+{
+  g_message ("received ERROR");
+  g_main_loop_quit (loop);
+}
+
+static void
+on_eos (GstBus     *bus,
+        GstMessage *message,
+        gpointer    user_data)
+{
+  g_main_loop_quit (loop);
+}
+
+int
+main (int argc, char *argv[])
+{
+  GstElement *bin, *fakesrc, *fakesink;
+  GstBus *bus;
+  GstStateChangeReturn ret;
+  
+  gst_init (&argc, &argv);
+
+  /* create a new bin to hold the elements */
+  bin = gst_pipeline_new ("pipeline");
+  g_assert (bin);
+
+  /* create a source */
+  fakesrc = gst_element_factory_make ("fakesrc", "fakesrc");
+  g_assert (fakesrc);
+  g_object_set (fakesrc, "num-buffers", 50, NULL);
+
+  /* and a sink */
+  fakesink = gst_element_factory_make ("fakesink", "fakesink");
+  g_assert (fakesink);
+
+  /* add objects to the main pipeline */
+  gst_bin_add_many (GST_BIN (bin), fakesrc, fakesink, NULL);
+
+  /* link the elements */
+  gst_element_link (fakesrc, fakesink);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* get the bus, we need to install a sync handler */
+  bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
+  gst_bus_enable_sync_message_emission (bus);
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "sync-message::stream-status",
+      (GCallback) on_stream_status, NULL);
+  g_signal_connect (bus, "message::error",
+      (GCallback) on_error, NULL);
+  g_signal_connect (bus, "message::eos",
+      (GCallback) on_eos, NULL);
+
+  /* start playing */
+  ret = gst_element_set_state (bin, GST_STATE_PLAYING);
+  if (ret != GST_STATE_CHANGE_SUCCESS) {
+    g_message ("failed to change state");
+    return -1;
+  }
+
+  /* Run event loop listening for bus messages until EOS or ERROR */
+  g_main_loop_run (loop);
+
+  /* stop the bin */
+  gst_element_set_state (bin, GST_STATE_NULL);
+  gst_object_unref (bus);
+  g_main_loop_unref (loop);
+
+  return 0;
+}
index b36358b91b5fd5d118e4b81a589fd8a843e6452f..7fdcb61e8385045d3f7ae0cba6b0970e808a3efd 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -336,6 +336,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -372,6 +375,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index a3cb8151978fb182edfe9544d0c3fc1bd98d73c1..549cb8bcab0f2c1dc19eec1c3b4567dbc6fc500b 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -334,6 +334,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -370,6 +373,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index d4bb1d6236bee0def4982bd887ac3642c1429c48..0d2a400d52a656246012041981a3ae136d95ad6e 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -334,6 +334,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -370,6 +373,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 5e5057a713d890456c35b6676fe47d5f809bb49e..92f76b3a8f072450e7f304919b4fa3febf8c9645 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -334,6 +334,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -370,6 +373,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 910df0ac3712486b705502b94a4f9925a26acae0..e1f87acaaf6c8a2f25ce57e1c2c60a92e51284d1 100644 (file)
@@ -1,5 +1,5 @@
 noinst_PROGRAMS = stream-status
-if HAVE_PTHREAD_H
+if HAVE_PTHREAD
 noinst_PROGRAMS += rtpool-test
 endif
 
@@ -8,7 +8,7 @@ stream_status_LDADD = $(GST_OBJ_LIBS)
 stream_status_CFLAGS = $(GST_OBJ_CFLAGS)
 
 rtpool_test_SOURCES = rtpool-test.c testrtpool.h testrtpool.c
-rtpool_test_LDADD = $(GST_OBJ_LIBS) -lpthread
-rtpool_test_CFLAGS = $(GST_OBJ_CFLAGS)
+rtpool_test_LDADD = $(GST_OBJ_LIBS) $(PTHREAD_LIBS)
+rtpool_test_CFLAGS = $(GST_OBJ_CFLAGS) $(PTHREAD_CFLAGS)
 
 EXTRA_DIST = rtpool-test.c testrtpool.h testrtpool.c
index 0d76343750b782a295651ee5a22949e13dd7c7ae..2d183e5b27cff54dff19ebaff5054ee697265a4d 100644 (file)
@@ -53,7 +53,7 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 noinst_PROGRAMS = stream-status$(EXEEXT) $(am__EXEEXT_1)
-@HAVE_PTHREAD_H_TRUE@am__append_1 = rtpool-test
+@HAVE_PTHREAD_TRUE@am__append_1 = rtpool-test
 subdir = tests/examples/streams
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -83,7 +83,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -98,13 +98,13 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-@HAVE_PTHREAD_H_TRUE@am__EXEEXT_1 = rtpool-test$(EXEEXT)
+@HAVE_PTHREAD_TRUE@am__EXEEXT_1 = rtpool-test$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 am_rtpool_test_OBJECTS = rtpool_test-rtpool-test.$(OBJEXT) \
        rtpool_test-testrtpool.$(OBJEXT)
 rtpool_test_OBJECTS = $(am_rtpool_test_OBJECTS)
 am__DEPENDENCIES_1 =
-rtpool_test_DEPENDENCIES = $(am__DEPENDENCIES_1)
+rtpool_test_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -343,6 +343,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -379,6 +382,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -432,8 +436,8 @@ stream_status_SOURCES = stream-status.c
 stream_status_LDADD = $(GST_OBJ_LIBS)
 stream_status_CFLAGS = $(GST_OBJ_CFLAGS)
 rtpool_test_SOURCES = rtpool-test.c testrtpool.h testrtpool.c
-rtpool_test_LDADD = $(GST_OBJ_LIBS) -lpthread
-rtpool_test_CFLAGS = $(GST_OBJ_CFLAGS)
+rtpool_test_LDADD = $(GST_OBJ_LIBS) $(PTHREAD_LIBS)
+rtpool_test_CFLAGS = $(GST_OBJ_CFLAGS) $(PTHREAD_CFLAGS)
 EXTRA_DIST = rtpool-test.c testrtpool.h testrtpool.c
 all: all-am
 
index 0858fd9defb39fcf276ad1c2b1dfc46b5230e520..58fb1588219fbd12cc02c86416e096199b7b28bf 100644 (file)
@@ -82,7 +82,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -334,6 +334,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -370,6 +373,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 58889271d6749ce8d0b144edd363c87b1f12f428..cfe94f57a6f6a3519a44adda1de0c80579636b92 100644 (file)
@@ -80,7 +80,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -299,6 +299,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -335,6 +338,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index a6495d9243ed42601228eb9989a1b07cf3458329..5bc7dc4617efe8923dfdff084654e5271d53f38a 100644 (file)
@@ -88,7 +88,7 @@ am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
        $(top_srcdir)/common/m4/gst.m4 \
        $(top_srcdir)/common/m4/gtk-doc.m4 \
        $(top_srcdir)/common/m4/introspection.m4 \
-       $(top_srcdir)/common/m4/pkg.m4 \
+       $(top_srcdir)/common/m4/pkg.m4 $(top_srcdir)/m4/ax_pthread.m4 \
        $(top_srcdir)/m4/check-checks.m4 $(top_srcdir)/m4/gettext.m4 \
        $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
        $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
@@ -400,6 +400,9 @@ PKG_CONFIG = @PKG_CONFIG@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PYTHON = @PYTHON@
 PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
 PYTHON_PLATFORM = @PYTHON_PLATFORM@
@@ -436,6 +439,7 @@ am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
index 6bec3b68210bd36c2803730ac9df85f010eee8d1..6f0a208a461013aa21dbbdfadf49f9c59667a370 100644 (file)
@@ -163,10 +163,10 @@ the left of it to the element right of it.
 
 .B Caps
 
-MIMETYPE \fI[, PROPERTY[, PROPERTY ...]]]\fR \fI[; CAPS[; CAPS ...]]\fR
+MEDIATYPE \fI[, PROPERTY[, PROPERTY ...]]]\fR \fI[; CAPS[; CAPS ...]]\fR
 
-Creates a capability with the given mimetype and optionally with given
-properties. The mimetype can be escaped using " or '.
+Creates a capability with the given media type and optionally with given
+properties. The media type can be escaped using " or '.
 If you want to chain caps, you can add more caps in the same format afterwards.
 
 .B Properties
index 1cce4d176282c9cac02525e857962b67e6e69e7c..cf46d1934b2f04b6bf32bd4dc4d940f19eb60d70 100644 (file)
@@ -1149,7 +1149,7 @@ main (int argc, char *argv[])
 
       diff = GST_CLOCK_DIFF (tfthen, tfnow);
 
-      PRINT (_("Execution ended after %" G_GUINT64_FORMAT " ns.\n"), diff);
+      PRINT (_("Execution ended after %" G_GINT64_FORMAT " ns.\n"), diff);
     }
 
     PRINT (_("Setting pipeline to PAUSED ...\n"));
index daec0beb3cbc14f2b8393f287aa30146a106fbf9..c2a30b5481f2d688167e89216a87b9882e541272 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # based on plot-timeline.py by Federico Mena-Quintero <federico at ximian dotcom>
 # example:
-#   GST_DEBUG_NO_COLOR=1 GST_DEBUG="*:3" gst-launch-0.10 2>debug.log audiotestsrc num-buffers=10 ! audioconvert ! alsasink
+#   GST_DEBUG_NO_COLOR=1 GST_DEBUG="*:3" gst-launch-1.0 2>debug.log audiotestsrc num-buffers=10 ! audioconvert ! alsasink
 #   gst-plot-timeline.py debug.log --output=debug.png
 
 import math
index 147130440cb2c236958911630b4ae4f46eacbc86..230c68f4c4174b89e50b1b3bc9b626fd22719081 100644 (file)
@@ -1,13 +1,13 @@
 .TH GStreamer 1 "May 2003"
 .SH "NAME"
-gst\-typefind - print MIME type of file
+gst\-typefind - print Media type of file
 .SH "SYNOPSIS"
 .B  gst\-typefind <file>
 .SH "DESCRIPTION"
 .PP
 \fIgst\-typefind\fP uses the GStreamer type finding system to
 determine the relevant GStreamer plugin to parse or decode \fBfile\fP,
-and the corresponding MIME type.
+and the corresponding media type.
 .
 .SH "OPTIONS"
 .l
index 084085ecb7921f8b2a4087dbd54c7b7cf870734f..1d4e0d4276df48a784dae9250bf98cf777642fdb 100644 (file)
@@ -48,7 +48,7 @@ gst_tools_print_version (void)
     gchar *version_str;
 
     version_str = gst_version_string ();
-    g_print ("%s version %u.%u.%u\n", g_get_prgname (),
+    g_print ("%s version %d.%d.%d\n", g_get_prgname (),
         GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO);
     g_print ("%s\n", version_str);
     g_print ("%s\n", GST_PACKAGE_ORIGIN);
index 277b4c9a08cd78ff16a5eb9185e3e61cea837fcb..62d46d10f317aec8a3c1b5a25eaafdab70ed4320 100644 (file)
@@ -62,7 +62,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2012-09-23"
+#define GST_PACKAGE_RELEASE_DATETIME "2012-10-24"
 
 /* location of the installed gst-plugin-scanner */
 #define GST_PLUGIN_SCANNER_INSTALLED LIBDIR "\\gst-plugin-scanner"
 /* Define to 1 if you have the `pselect' function. */
 #undef HAVE_PSELECT
 
-/* Define to 1 if you have the <pthread.h> header file. */
-#undef HAVE_PTHREAD_H
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
 
 /* Define if RDTSC is available */
 #undef HAVE_RDTSC
 #define PACKAGE_NAME "GStreamer"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer 1.0.0"
+#define PACKAGE_STRING "GStreamer 1.0.2"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gstreamer"
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.0.0"
+#define PACKAGE_VERSION "1.0.2"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
 #  define PLUGINDIR PREFIX "\\lib\\gstreamer-1.0"
 #endif
 
+/* Define to necessary symbol if this constant uses a non-standard name on
+   your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
 /* The size of `char', as computed by sizeof. */
 #undef SIZEOF_CHAR
 
 #undef USE_POISONING
 
 /* Version number of package */
-#define VERSION "1.0.0"
+#define VERSION "1.0.2"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
index 5c5b3f1802f46924b06173937c01901372aaa577..9e04f5883e7eade554c3ab2170b2100e86d0a946 100644 (file)
@@ -1524,16 +1524,16 @@ GType
 gst_segment_flags_get_type (void)
 {
   static gsize id = 0;
-  static const GEnumValue values[] = {
-    {C_ENUM (GST_SEGMENT_FLAG_NONE), "GST_SEGMENT_FLAG_NONE", "none"},
-    {C_ENUM (GST_SEGMENT_FLAG_RESET), "GST_SEGMENT_FLAG_RESET", "reset"},
-    {C_ENUM (GST_SEGMENT_FLAG_SKIP), "GST_SEGMENT_FLAG_SKIP", "skip"},
-    {C_ENUM (GST_SEGMENT_FLAG_SEGMENT), "GST_SEGMENT_FLAG_SEGMENT", "segment"},
+  static const GFlagsValue values[] = {
+    {C_FLAGS (GST_SEGMENT_FLAG_NONE), "GST_SEGMENT_FLAG_NONE", "none"},
+    {C_FLAGS (GST_SEGMENT_FLAG_RESET), "GST_SEGMENT_FLAG_RESET", "reset"},
+    {C_FLAGS (GST_SEGMENT_FLAG_SKIP), "GST_SEGMENT_FLAG_SKIP", "skip"},
+    {C_FLAGS (GST_SEGMENT_FLAG_SEGMENT), "GST_SEGMENT_FLAG_SEGMENT", "segment"},
     {0, NULL, NULL}
   };
 
   if (g_once_init_enter (&id)) {
-    GType tmp = g_enum_register_static ("GstSegmentFlags", values);
+    GType tmp = g_flags_register_static ("GstSegmentFlags", values);
     g_once_init_leave (&id, tmp);
   }
 
index bb3e4717b846ed1c218db403ec81d857936fa5cf..432a3d23e1d2ebe7d7baa254119c11442c48900d 100644 (file)
@@ -57,7 +57,7 @@ G_BEGIN_DECLS
  *
  * The micro version of GStreamer at compile time:
  */
-#define GST_VERSION_MICRO (0)
+#define GST_VERSION_MICRO (2)
 /**
  * GST_VERSION_NANO:
  *
index b535b19c35c315d7cd0a46a2a05f2d487189f0a3..bc52be42d4b0ee153f9166b768b83fb21e674e51 100644 (file)
@@ -90,6 +90,7 @@ EXPORTS
        gst_base_transform_set_gap_aware
        gst_base_transform_set_in_place
        gst_base_transform_set_passthrough
+       gst_base_transform_set_prefer_passthrough
        gst_base_transform_set_qos_enabled
        gst_base_transform_update_qos
        gst_bit_reader_free