From bed72dff4210fac83b878ac3b0f3ecb78d30d1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 8 Jun 2012 09:16:25 +0200 Subject: Imported Upstream version 0.11.92 --- ChangeLog | 724 ++++++++++++++++++++- Makefile.in | 9 + NEWS | 9 +- RELEASE | 30 +- common/Makefile.in | 9 + common/gstdoc-scangobj | 30 +- common/m4/Makefile.am | 1 - common/m4/Makefile.in | 10 +- common/m4/as-compiler-flag.m4 | 32 + common/m4/as-objc.m4 | 56 -- common/m4/gst-arch.m4 | 40 +- common/m4/gst-args.m4 | 8 +- common/m4/gst-error.m4 | 85 +++ common/m4/gtk-doc.m4 | 33 +- config.h.in | 31 +- configure | 424 ++++++++++-- configure.ac | 2 +- docs/Makefile.in | 9 + docs/design/Makefile.in | 9 + docs/design/part-negotiation.txt | 16 +- docs/design/part-segments.txt | 2 +- docs/faq/Makefile.in | 9 + docs/gst/Makefile.in | 9 + docs/gst/gstreamer-sections.txt | 10 +- docs/gst/html/GstBin.html | 2 +- docs/gst/html/GstElement.html | 18 +- docs/gst/html/GstElementFactory.html | 34 +- docs/gst/html/GstObject.html | 2 +- docs/gst/html/GstPad.html | 22 +- docs/gst/html/GstPadTemplate.html | 2 +- docs/gst/html/GstPluginFeature.html | 30 +- docs/gst/html/GstTagSetter.html | 8 +- docs/gst/html/GstTypeFindFactory.html | 2 +- docs/gst/html/api-index-full.html | 46 +- docs/gst/html/gst-building.html | 4 +- docs/gst/html/gst-running.html | 4 +- docs/gst/html/gstreamer-Gst.html | 4 +- docs/gst/html/gstreamer-GstBuffer.html | 4 +- docs/gst/html/gstreamer-GstBufferPool.html | 2 +- docs/gst/html/gstreamer-GstCaps.html | 2 +- docs/gst/html/gstreamer-GstEvent.html | 44 +- docs/gst/html/gstreamer-GstGError.html | 2 +- docs/gst/html/gstreamer-GstIterator.html | 2 +- docs/gst/html/gstreamer-GstMessage.html | 14 +- docs/gst/html/gstreamer-GstQuery.html | 9 +- docs/gst/html/gstreamer-GstStructure.html | 5 +- docs/gst/html/gstreamer-GstTagList.html | 515 +++++++++------ docs/gst/html/gstreamer-GstToc.html | 31 +- docs/gst/html/gstreamer.devhelp2 | 23 +- docs/gst/html/index.html | 2 +- docs/gst/html/index.sgml | 11 +- docs/libs/Makefile.in | 9 + docs/libs/html/GstBaseSink.html | 16 +- docs/libs/html/GstBaseSrc.html | 2 +- docs/libs/html/GstBaseTransform.html | 4 +- docs/libs/html/gstreamer-libs.devhelp2 | 6 +- docs/libs/html/index.html | 2 +- docs/manual/Makefile.in | 9 + docs/plugins/Makefile.in | 9 + docs/plugins/gstreamer-plugins.args | 22 +- docs/plugins/html/ch01.html | 2 +- docs/plugins/html/ch02.html | 2 +- .../plugins/html/gstreamer-plugins-capsfilter.html | 6 +- docs/plugins/html/gstreamer-plugins-fakesink.html | 6 +- docs/plugins/html/gstreamer-plugins-fakesrc.html | 6 +- docs/plugins/html/gstreamer-plugins-fdsink.html | 4 +- docs/plugins/html/gstreamer-plugins-fdsrc.html | 6 +- docs/plugins/html/gstreamer-plugins-filesink.html | 6 +- docs/plugins/html/gstreamer-plugins-filesrc.html | 6 +- docs/plugins/html/gstreamer-plugins-funnel.html | 4 +- docs/plugins/html/gstreamer-plugins-identity.html | 4 +- .../html/gstreamer-plugins-input-selector.html | 48 +- .../plugins/html/gstreamer-plugins-multiqueue.html | 6 +- .../html/gstreamer-plugins-output-selector.html | 4 +- .../gstreamer-plugins-plugin-coreelements.html | 6 +- docs/plugins/html/gstreamer-plugins-queue.html | 4 +- docs/plugins/html/gstreamer-plugins-queue2.html | 6 +- docs/plugins/html/gstreamer-plugins-tee.html | 6 +- docs/plugins/html/gstreamer-plugins-typefind.html | 4 +- docs/plugins/html/gstreamer-plugins-valve.html | 4 +- docs/plugins/html/gstreamer-plugins.devhelp2 | 86 +-- docs/plugins/html/index.html | 2 +- docs/plugins/html/index.sgml | 2 + docs/plugins/inspect/plugin-coreelements.xml | 2 +- docs/pwg/Makefile.in | 9 + docs/slides/Makefile.in | 9 + docs/xsl/Makefile.in | 9 + gst/Makefile.in | 9 + gst/gst.c | 3 +- gst/gst_private.h | 47 +- gst/gstbin.c | 94 ++- gst/gstcaps.c | 2 +- gst/gstcompat.h | 2 + gst/gstdebugutils.c | 2 +- gst/gstelement.c | 48 +- gst/gstelementfactory.c | 34 + gst/gstelementfactory.h | 41 +- gst/gstevent.c | 36 +- gst/gstevent.h | 6 +- gst/gstmessage.c | 24 +- gst/gstpad.c | 139 +++- gst/gstpad.h | 20 +- gst/gstpluginfeature.c | 20 + gst/gstpluginfeature.h | 33 +- gst/gstquark.c | 6 +- gst/gstquark.h | 14 +- gst/gstquery.c | 6 +- gst/gstregistry.c | 2 +- gst/gststructure.c | 2 +- gst/gsttaglist.c | 446 +++++++------ gst/gsttaglist.h | 123 +++- gst/gsttagsetter.c | 4 +- gst/gsttoc.c | 271 +++----- gst/gsttoc.h | 10 +- gst/gsturi.c | 3 + gst/gstutils.c | 7 +- gst/parse/Makefile.in | 9 + gstreamer.doap | 10 + gstreamer.spec | 2 +- libs/Makefile.in | 9 + libs/gst/Makefile.in | 9 + libs/gst/base/Makefile.in | 9 + libs/gst/base/gstadapter.c | 21 +- libs/gst/base/gstbaseparse.c | 9 +- libs/gst/base/gstbasesink.c | 57 +- libs/gst/base/gstbasesink.h | 12 +- libs/gst/base/gstbasesrc.c | 87 +-- libs/gst/base/gsttypefindhelper.c | 3 +- libs/gst/check/Makefile.in | 9 + libs/gst/check/gstcheck.c | 4 +- libs/gst/check/libcheck/Makefile.in | 9 + libs/gst/controller/Makefile.in | 9 + libs/gst/helpers/Makefile.in | 9 + libs/gst/net/Makefile.in | 9 + m4/Makefile.in | 9 + pkgconfig/Makefile.in | 9 + plugins/Makefile.in | 9 + plugins/elements/Makefile.in | 9 + plugins/elements/gstfakesrc.c | 4 +- plugins/elements/gstfakesrc.h | 3 - plugins/elements/gstfilesrc.c | 6 +- plugins/elements/gstfunnel.c | 62 +- plugins/elements/gstinputselector.c | 679 +++++++++++++++---- plugins/elements/gstinputselector.h | 14 + plugins/elements/gstqueue2.c | 31 +- plugins/elements/gsttypefindelement.c | 6 + po/af.gmo | Bin 15346 -> 15346 bytes po/af.po | 11 +- po/az.gmo | Bin 1716 -> 1716 bytes po/az.po | 10 +- po/be.gmo | Bin 5090 -> 5090 bytes po/be.po | 10 +- po/bg.gmo | Bin 44078 -> 44078 bytes po/bg.po | 12 +- po/ca.gmo | Bin 34417 -> 34417 bytes po/ca.po | 14 +- po/cs.gmo | Bin 33872 -> 33872 bytes po/cs.po | 14 +- po/da.gmo | Bin 32509 -> 32509 bytes po/da.po | 13 +- po/de.gmo | Bin 34244 -> 34244 bytes po/de.po | 13 +- po/el.gmo | Bin 44854 -> 44854 bytes po/el.po | 13 +- po/en_GB.gmo | Bin 11610 -> 11610 bytes po/en_GB.po | 10 +- po/eo.gmo | Bin 4341 -> 4341 bytes po/eo.po | 10 +- po/es.gmo | Bin 34427 -> 34427 bytes po/es.po | 12 +- po/eu.gmo | Bin 30078 -> 30078 bytes po/eu.po | 12 +- po/fi.gmo | Bin 32937 -> 32937 bytes po/fi.po | 14 +- po/fr.gmo | Bin 34566 -> 34566 bytes po/fr.po | 12 +- po/gl.gmo | Bin 34182 -> 34182 bytes po/gl.po | 12 +- po/gstreamer-1.0.pot | 408 ++++++------ po/hu.gmo | Bin 33909 -> 33909 bytes po/hu.po | 12 +- po/id.gmo | Bin 32234 -> 32234 bytes po/id.po | 12 +- po/it.gmo | Bin 34112 -> 34112 bytes po/it.po | 12 +- po/ja.gmo | Bin 14247 -> 14247 bytes po/ja.po | 11 +- po/lt.gmo | Bin 31890 -> 31890 bytes po/lt.po | 12 +- po/nb.gmo | Bin 9914 -> 9914 bytes po/nb.po | 10 +- po/nl.gmo | Bin 33299 -> 33299 bytes po/nl.po | 12 +- po/pl.gmo | Bin 33655 -> 33655 bytes po/pl.po | 12 +- po/pt_BR.gmo | Bin 33883 -> 33883 bytes po/pt_BR.po | 14 +- po/ro.gmo | Bin 33314 -> 33314 bytes po/ro.po | 12 +- po/ru.gmo | Bin 43488 -> 43488 bytes po/ru.po | 12 +- po/rw.gmo | Bin 689 -> 689 bytes po/rw.po | 10 +- po/sk.gmo | Bin 33512 -> 33512 bytes po/sk.po | 12 +- po/sl.gmo | Bin 33246 -> 33246 bytes po/sl.po | 12 +- po/sq.gmo | Bin 12764 -> 12764 bytes po/sq.po | 10 +- po/sr.gmo | Bin 42963 -> 42963 bytes po/sr.po | 12 +- po/sv.gmo | Bin 32824 -> 32824 bytes po/sv.po | 12 +- po/tr.gmo | Bin 12142 -> 12142 bytes po/tr.po | 10 +- po/uk.gmo | Bin 43708 -> 43708 bytes po/uk.po | 12 +- po/vi.gmo | Bin 35093 -> 35093 bytes po/vi.po | 14 +- po/zh_CN.gmo | Bin 25668 -> 25668 bytes po/zh_CN.po | 12 +- po/zh_TW.gmo | Bin 7316 -> 7316 bytes po/zh_TW.po | 10 +- tests/Makefile.in | 9 + tests/benchmarks/Makefile.in | 9 + tests/check/Makefile.in | 9 + tests/check/elements/funnel.c | 86 ++- tests/check/elements/valve.c | 13 +- tests/check/gst/gstbin.c | 113 ++++ tests/check/gst/gstelementfactory.c | 1 + tests/check/gst/gstevent.c | 2 +- tests/check/gst/gstmessage.c | 2 +- tests/check/gst/gstplugin.c | 8 +- tests/check/gst/gsttag.c | 107 +-- tests/check/gst/gsttagsetter.c | 16 +- tests/check/gst/gstutils.c | 3 +- tests/examples/Makefile.in | 9 + tests/examples/adapter/Makefile.in | 9 + tests/examples/controller/Makefile.in | 9 + tests/examples/helloworld/Makefile.in | 9 + tests/examples/helloworld/helloworld.c | 5 +- tests/examples/launch/Makefile.in | 9 + tests/examples/manual/Makefile.in | 9 + tests/examples/metadata/Makefile.in | 9 + tests/examples/metadata/read-metadata.c | 4 +- tests/examples/queue/Makefile.in | 9 + tests/examples/stepping/Makefile.in | 9 + tests/examples/streams/Makefile.in | 9 + tests/examples/typefind/Makefile.in | 9 + tests/misc/Makefile.in | 9 + tools/Makefile.in | 9 + tools/gst-inspect.c | 61 +- tools/gst-launch.c | 47 +- win32/common/config.h | 39 +- win32/common/gstenumtypes.c | 1 + win32/common/libgstreamer.def | 9 +- 256 files changed, 5097 insertions(+), 1781 deletions(-) delete mode 100644 common/m4/as-objc.m4 diff --git a/ChangeLog b/ChangeLog index 14be091..01605f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,729 @@ +=== release 0.11.92 === + +2012-06-07 Sebastian Dröge + + * configure.ac: + releasing 0.11.92, "High Hopes" + +2012-06-06 18:11:13 +0200 Edward Hervey + + * gst/gstregistry.c: + registry: We name the registry after the target cpu + And not the host cpu + Conflicts: + gst/gstregistry.c + +2012-06-06 18:18:18 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From 1fab359 to 03a0e57 + +2012-06-06 15:45:11 +0200 Wim Taymans + + * tests/check/gst/gsttoc.c: + tests: fix unit test after event change + Someone forgot to run make check before pushing... + +2012-06-06 11:06:32 +0300 Sreerenj Balachandran + + * libs/gst/base/gstadapter.c: + gstadapter: Align the comment description with public api instead of internal one. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=677536 + +2012-06-06 15:29:49 +0200 Wim Taymans + + * gst/gstelement.c: + element: fix pad cleanup in dispose + In the dispose handler we first need to release all the request pads and then + remove the remaining pads. This is because it is possible that releasing the + request pad might also cleanly remove some of the other dynamic pads, like + what rtpsession does. + https://bugzilla.gnome.org/show_bug.cgi?id=677436 + +2012-06-06 14:14:31 +0200 Sebastian Dröge + + * gst/gstevent.c: + * gst/gstevent.h: + event: Don't make the TOC event a multi-sticky event + Elements are supposed to merge upstream events. + +2009-10-13 17:24:34 +0200 Havard Graff + + * gst/gstpad.c: + Make sure that unlinked pads do not cause a return false on latency events. + Context: Latency configuration should not be + messed up because of not-linked pads. In general, + one return FALSE on latency distribution causes + the "overall" pipeline latency configuration to + fail. This shows up as noise in logs (warning). + Conflicts: + gst/gstpad.c + +2012-06-06 12:52:09 +0200 Wim Taymans + + * gst/gstevent.c: + * gst/gstevent.h: + * libs/gst/base/gstbaseparse.c: + * tests/check/gst/gstevent.c: + * tests/check/gst/gsttoc.c: + * tests/check/gst/gstutils.c: + event: add name to sticky_multi events + The name of the event is used to store multiple sticky events of a certain type + on a pad. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676859 + +2012-06-06 09:59:55 +0200 Sebastian Dröge + + * docs/design/part-negotiation.txt: + design: Also mention that the order of the filter caps is important + +2012-06-06 09:15:04 +0200 Wim Taymans + + * gst/gstquery.c: + query: improve docs + +2012-06-06 09:13:11 +0200 Wim Taymans + + * gst/gstpad.c: + pad: only serialized events can't pass after EOS + Only serialized events can't be sent on pads that are EOS. Otherwise a seek + event would be refused as well. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=677520 + +2012-06-05 14:38:25 +0200 Wim Taymans + + * docs/design/part-negotiation.txt: + docs: talk about the filter caps + +2012-06-02 16:44:59 +0100 Tim-Philipp Müller + + * tests/check/gst/gsttag.c: + tests: add unit test for tag list writability + +2012-06-02 16:38:35 +0100 Tim-Philipp Müller + + * gst/gstmessage.c: + * tests/check/gst/gstmessage.c: + * tests/check/gst/gsttag.c: + * tests/check/gst/gsttagsetter.c: + * tests/examples/metadata/read-metadata.c: + gst_tag_list_free -> gst_tag_list_unref + +2012-06-02 16:29:45 +0100 Tim-Philipp Müller + + * docs/random/porting-to-0.11.txt: + docs: expand taglist section in porting-to-0.11 docs a bit + +2012-06-05 11:28:38 +0200 Wim Taymans + + * docs/design/part-negotiation.txt: + docs: update negotiation docs + Mention that the acceptcaps query does not have to be recursive + +2012-06-05 09:40:14 +0200 Wim Taymans + + * plugins/elements/gstqueue2.c: + queue2: remove obsolete caps code + +2012-06-05 09:39:41 +0200 Wim Taymans + + * gst/gstutils.c: + utils: improve debug + +2012-06-05 09:21:10 +0200 Wim Taymans + + * tests/check/gst/gstutils.c: + tests: fix unit test + Before we can change the caps on a sinkpad with fixed caps we need to unfix the + pad caps. + +2012-06-05 09:10:05 +0200 Wim Taymans + + * gst/gstpad.c: + pad: don't pause task on EOS + Elements should not rely on core to pause tasks on EOS. + +2012-06-05 09:00:01 +0200 Wim Taymans + + * gst/gstpad.c: + pad: fix event type check + +2012-06-04 16:19:26 +0200 Wim Taymans + + * gst/gstpad.c: + pad: fix 'res' may be used uninitialized in this function + +2012-06-04 13:00:53 +0200 Sebastian Dröge + + * tests/check/elements/funnel.c: + funnel: Fix unit test + +2012-06-04 12:57:59 +0200 Sebastian Dröge + + * tests/check/elements/valve.c: + valve: Fix unit test + +2012-06-04 11:46:42 +0200 Sebastian Dröge + + * gst/gstpad.c: + * gst/gstpad.h: + pad: Don't accept any buffers or events after EOS + +2012-06-04 11:13:02 +0200 Mark Nauwelaerts + + * libs/gst/base/gstbaseparse.c: + baseparse: also perform state processing upon non-OK return + ... since processing might still continue (if e.g. NOT_LINKED) + and then proper state (e.g. offset) needs to be maintained + (e.g. to arrange for a new frame setup). + +2012-06-04 11:25:47 +0200 Sebastian Dröge + + * gst/gstpad.c: + pad: Always return errors for EOS events immediately + For non-EOS events things will error out later during data + flow but after EOS events no data flow is happening. + See bug #677340. + +2012-06-04 09:27:35 +0200 Sebastian Dröge + + * gst/gstpad.c: + pad: Only forward caps events to a pad if it accepts the caps + Fixes bug #677335. + +2012-06-02 20:01:01 +0200 Sebastian Dröge + + * gst/gstpad.c: + Revert "pad: Return FALSE if pushing of sticky events failed" + This reverts commit 0f924b922c712059d7752fc15b832551745ff27e. + Sticky events should always return TRUE when pushing and will + only cause failures during data flow later. + +2012-06-02 16:18:46 +0100 Tim-Philipp Müller + + * gst/gstpad.c: + pad: fix variable-set-but-not-used compiler warning + +2012-06-02 16:55:07 +0200 Sebastian Dröge + + * gst/gstpad.c: + pad: If pushing a sticky event failed, make sure to at least push any pending EOS events + Otherwise a pipeline where one sticky event fails to be sent will + never forward EOS events downstream. This can cause pipelines to + wait forever for EOS on errors. + +2012-06-02 16:02:07 +0200 Sebastian Dröge + + * gst/gstpad.c: + pad: Return FALSE if pushing of sticky events failed + Instead of just ignoring failure of pushing sticky events and + returning TRUE as if everything is fine. + +2012-06-01 16:34:16 +0200 Andre Moreira Magalhaes (andrunko) + + * plugins/elements/gstinputselector.c: + inputselector: Correctly get current running time when syncing to the segment information + Fixes bug #677263. + +2012-06-01 10:28:30 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From f1b5a96 to 1fab359 + +2012-05-25 22:58:57 -0500 Mike Ruprecht + + * tests/check/elements/funnel.c: + tests: Add funnel test to cover EOS event handling + Ported from f3b2dd6f in the 0.10 branch + +2012-05-25 22:52:33 -0500 Mike Ruprecht + + * plugins/elements/gstfunnel.c: + funnel: Only emit EOS event if all sinkpads have received one + If multiple sources are plugged into the funnel and one of the + sources emits an EOS, that event is propogated through the funnel + even though other sources connected to the funnel may still be + pushing data. This patch waits to send an EOS event until the + funnel has received an EOS event on each sinkpad. + Ported from d397ea97 in 0.10 branch. + +2012-05-29 19:24:25 -0500 Mike Ruprecht + + * tests/check/elements/funnel.c: + tests: Fix invalid read when releasing request pads in funnel tests + +2012-05-29 19:23:07 -0500 Mike Ruprecht + + * plugins/elements/gstfunnel.c: + funnel: Fix buffer leak + +2012-05-31 17:45:29 +0200 Andre Moreira Magalhaes (andrunko) + + * plugins/elements/gstinputselector.c: + inputselector: Don't try to sync on the segment if it has no TIME format + ...and wait until it is actually configured and has a format before + trying to sync. + +2012-05-31 17:03:54 +0200 Sebastian Dröge + + * plugins/elements/gstinputselector.c: + inputselector: No need to broadcast the signal in flush-stop + Everything stopped at this point already. + Conflicts: + plugins/elements/gstinputselector.c + +2012-05-31 13:07:49 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 92b7266 to f1b5a96 + +2012-05-31 10:10:41 +0100 Bastien Nocera + + * plugins/elements/gstqueue2.c: + queue2: Fix property name in the docs + temp-template, not temp-tmpl + https://bugzilla.gnome.org/show_bug.cgi?id=677170 + +2012-05-28 14:29:00 -0300 Andre Moreira Magalhaes (andrunko) + + * plugins/elements/gstinputselector.c: + * plugins/elements/gstinputselector.h: + inputselector: Properly sync when changing streams + This adds properties to use the clock time for deciding when + to drop buffers for inactive pads and a property to buffer all + not rendered buffers for the active pad to allow pad switching + without losing any buffers at all. + Conflicts: + plugins/elements/gstinputselector.c + +2012-05-30 12:44:56 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From ec1c4a8 to 92b7266 + +2012-05-30 11:18:39 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 3429ba6 to ec1c4a8 + +2012-05-29 08:48:36 +0100 Tim-Philipp Müller + + * gst/gsttaglist.c: + taglist: add guards to make sure taglist is writable when modifying it + Now that taglists are refcounted we need to check if they're + writable before modifying them. + +2012-05-28 23:54:10 +0100 Tim-Philipp Müller + + * docs/gst/gstreamer-sections.txt: + * gst/gsttaglist.c: + * gst/gsttaglist.h: + * win32/common/libgstreamer.def: + taglist: avoid unnecessary string copying when registering tags + Add gst_tag_register_static() - no need to copy all those + string constants, whether translated or not. + API: gst_tag_register_static() + +2012-05-28 00:08:56 +0100 Tim-Philipp Müller + + * libs/gst/check/gstcheck.c: + check: check for GLib-GIO criticals as well + +2012-05-28 00:08:18 +0100 Tim-Philipp Müller + + * gst/gsttagsetter.c: + * gst/gsttoc.c: + * plugins/elements/gstinputselector.c: + * tools/gst-launch.c: + gst_tag_list_free() -> gst_tag_list_unref() + +2012-05-27 23:58:27 +0100 Tim-Philipp Müller + + * docs/gst/gstreamer-sections.txt: + * docs/random/porting-to-0.11.txt: + * gst/gstcompat.h: + * gst/gsttaglist.c: + * gst/gsttaglist.h: + * tests/check/gst/gsttag.c: + * win32/common/libgstreamer.def: + taglist: make GstTagList a GstMiniObject + Which adds refcounting support, and other things. + +2012-05-27 20:31:30 +0100 Tim-Philipp Müller + + * gst/gstcaps.c: + caps: log freeing of caps at same log level as creation, i.e. TRACE + +2012-05-26 11:37:49 +0100 Tim-Philipp Müller + + * gst/gstevent.c: + * gst/gstmessage.c: + * gst/gstquark.c: + * gst/gstquark.h: + message, event: update for tag lists not being structures any more + +2012-05-21 00:31:29 +0100 Tim-Philipp Müller + + * gst/gsttaglist.c: + * gst/gsttaglist.h: + taglist: make proper struct not just a GstStructure + +2012-05-25 10:28:40 +0200 Josep Torra + + * gst/gst.c: + * gst/gstdebugutils.c: + debugutils: Fix static linking on OS X + The linking behaviour of external variables that are not initialized + in the compilation unit where they are defined is undefined. On OS X + this causes a linking failure when statically linking GStreamer. + +2012-05-25 09:17:17 +0100 Luis de Bethencourt + + * scripts/five-bugs-a-day.pl: + five-bugs-a-day: use splice to trim the bug list + +2012-05-24 23:30:29 +0100 Tim-Philipp Müller + + * plugins/elements/gstfakesrc.c: + * plugins/elements/gstfakesrc.h: + fakesrc: put byte position rather than buffer count into GST_BUFFER_OFFSET + If we're sending a segment in BYTE format, the offset + should be in bytes as well. + +2012-05-24 11:48:19 +0100 Luis de Bethencourt + + * docs/design/part-segments.txt: + docs: fix a typo in part-segments.txt + +2012-05-24 11:02:53 +0200 Brian Cameron + + * libs/gst/base/gsttypefindhelper.c: + typefind: fix prototype of helper_find_suggest + The proto for helper_find_suggest has a different argument than the actual + function in the same file has. This causes the Sun Studio compiler to fail. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676624 + Conflicts: + libs/gst/base/gsttypefindhelper.c + +2012-05-24 08:07:14 +0100 Tim-Philipp Müller + + * scripts/five-bugs-a-day.pl: + scripts: remove a stray print from debugging and fix up cron entry docs + +2012-05-24 09:03:12 +0200 Sebastian Dröge + + * scripts/five-bugs-a-day.pl: + five-bugs-a-day: Make #! to perl more portable + +2012-05-24 07:56:48 +0100 Tim-Philipp Müller + + * scripts/five-bugs-a-day.pl: + scripts: remove fixed 'known issue' from five-bugs-a-day script + This was with commas actually, and should be fixed now. + +2012-05-24 07:54:50 +0100 Tim-Philipp Müller + + * scripts/five-bugs-a-day.pl: + scripts: add five-bugs-a-day script + Cron fodder. + +2012-05-22 14:27:48 +0300 Sreerenj Balachandran + + * tests/examples/helloworld/helloworld.c: + tests: rename playbin2 to playbin and adding some debug info + +2012-05-22 18:27:36 +0200 Edward Hervey + + * gst/gsturi.c: + uri: Add some debug statements + +2012-05-22 13:51:47 +0200 Edward Hervey + + * win32/common/libgstreamer.def: + win32: Update defs file + +2012-05-21 09:14:39 +0200 Wim Taymans + + * tests/check/gst/gstbin.c: + bin: port unit test to 0.11 + +2012-05-21 15:14:51 +0200 Stefan Sauer + + * gst/gstelement.c: + * gst/gstutils.c: + docs: improve the seeking docs more. + Also mention it on _element_seek{,_simple} and be more precise why it happens. + +2012-05-21 13:17:21 +0200 Stefan Sauer + + * gst/gstelement.c: + * gst/gstevent.c: + docs: fix a typo and clarify event handling a bit more + Tell about async_done messages for some events and review the _event_new_seek + docs. + +2012-05-18 15:04:35 +0200 Wim Taymans + + * gst/gstbin.c: + * tests/check/gst/gstbin.c: + bin: try harder to avoid state changes in wrong direction + When the bin does an upward state change, try to avoid doing a downward state + change on the child and vice versa. + Add some more unit tests for this fix. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=621833 + +2012-05-18 20:11:55 +0300 Anton Belka + + * tools/gst-launch.c: + gst-launch: fix -c, --toc message + +2012-05-21 01:48:29 +0300 Anton Belka + + * gst/gsttoc.c: + * gst/gsttoc.h: + toc: Add boxed types for GstToc and GstTocEntry + +2012-05-20 18:23:57 +0100 Tim-Philipp Müller + + * gst/gsttoc.c: + * gst/gsttoc.h: + toc: fix type of pad parameter to gst_toc_entry_new_with_pad() + +2012-05-20 18:16:45 +0100 Tim-Philipp Müller + + * gst/gsttoc.c: + toc: use correct GType for tag lists + +2012-05-20 18:06:22 +0100 Tim-Philipp Müller + + * gst/gsttoc.c: + toc: avoid unnecessary GValue acrobatics + +2012-05-20 17:48:55 +0100 Tim-Philipp Müller + + * gst/gst.c: + * gst/gst_private.h: + * gst/gstquark.c: + * gst/gstquark.h: + * gst/gsttoc.c: + toc: use global quark table + +2012-05-20 17:10:24 +0100 Tim-Philipp Müller + + * gst/gstquark.c: + toc: fix internal TOC query and event structure names + Make them consistent with all the other query and event names. + +2012-05-19 17:24:52 +0100 Tim-Philipp Müller + + * gst/gst_private.h: + * gst/gstpluginfeature.h: + pluginfeature: make GstPluginFeature structure private + Make GstPluginFeature opaque until we have time to + clean it up a little. Only GstElementFactory and + GstTypefindFactory derive from it, and they are + opaque already, and we currently don't support + custom plugin features in the registry anyway. + +2012-05-19 17:23:43 +0100 Tim-Philipp Müller + + * tests/check/gst/gstplugin.c: + * tools/gst-inspect.c: + tools, tests: don't access the GstPluginFeature structure directly + +2012-05-19 17:16:35 +0100 Tim-Philipp Müller + + * docs/gst/gstreamer-sections.txt: + * gst/gstpluginfeature.c: + * gst/gstpluginfeature.h: + * win32/common/libgstreamer.def: + pluginfeature: add gst_plugin_feature_get_plugin() + Add function to retrieve plugin that provides this feature. + API: gst_plugin_feature_get_plugin() + +2012-05-19 16:21:39 +0100 Tim-Philipp Müller + + * common: + common: update for gstscanobj changes + +2012-05-19 15:51:53 +0100 Tim-Philipp Müller + + * gst/gst_private.h: + * gst/gstelementfactory.h: + * tests/check/gst/gstelementfactory.c: + elementfactory: make object struct opaque for now + Make GstElementFactory opaque until we have time to + clean it up a little. It's not something anyone + would need to derive from. + +2012-05-19 14:59:14 +0100 Tim-Philipp Müller + + * tools/gst-inspect.c: + tools: don't use private GstElementFactory API in gst-inspect + +2012-05-19 14:52:29 +0100 Tim-Philipp Müller + + * docs/gst/gstreamer-sections.txt: + * gst/gstelementfactory.c: + * gst/gstelementfactory.h: + * win32/common/libgstreamer.def: + elementfactory: add gst_element_factory_get_metadata_keys() + API: gst_element_factory_get_metadata_keys() + +2012-05-18 09:52:09 +0200 Wim Taymans + + * tools/gst-launch.c: + launch: improve EOS on shutdown handling + When the -e option is selected, also wait for EOS when the pipeline produced an + error. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=630997 + +2012-05-16 18:53:15 +0300 Anton Belka + + * gst/gststructure.c: + docs: fix gst_structure_to_string() docs + +2012-05-16 13:24:23 +0200 Wim Taymans + + * libs/gst/base/gstbasesink.c: + basesink: throttle-time is used + +2012-05-16 12:08:44 +0200 Wim Taymans + + * libs/gst/base/gstbasesink.c: + * libs/gst/base/gstbasesink.h: + basesink: add prepare method + Add a prepare method that is called before sync happens. The purpose of this + method is to prepare the rendering of the giving buffer so that the following + render() call after sync is a quick as possible. + +2012-05-16 09:16:26 +0200 Wim Taymans + + * libs/gst/base/gstbasesrc.c: + basesrc: avoid potential deadlock + In gst_base_src_start_complete() we do a perform_seek() that will eventually + start the streaming thread which acquires the live lock and then goes to sleep + in the case of appsrc. Right after we perform seek we also try to acquire the + live lock which might then deadlock. + fix this by taking the stream lock before performing the seek. This makes sure + that the streaming thread cannot start and grab the live lock until we are done + and release the stream lock again. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676048 + +2012-05-15 19:11:15 +0100 Tim-Philipp Müller + + * plugins/elements/gstfilesrc.c: + filesrc: remove references to mmap in comments and debug messages + +2012-05-15 16:38:30 +0200 Sebastian Dröge + + * docs/gst/gstreamer-sections.txt: + * gst/gsttoc.c: + * gst/gsttoc.h: + * tools/gst-launch.c: + * win32/common/libgstreamer.def: + gst: Rename gst_toc_entry_type_to_string() to gst_toc_entry_type_get_nick() + It's more consistent. + +2012-05-15 14:59:07 +0300 Anton Belka + + * tools/gst-launch.c: + gst-launch: fix print_toc_entry() + +2012-05-15 14:48:35 +0300 Anton Belka + + * docs/gst/gstreamer-sections.txt: + * gst/gsttoc.c: + * gst/gsttoc.h: + * win32/common/libgstreamer.def: + toc: API: Add gst_toc_entry_type_to_string() + +2012-05-14 03:57:50 +0200 Alban Browaeys + + * plugins/elements/gsttypefindelement.c: + typefindelement: if sink pad is activated do not change mode + In commit bf0964b6 a check for pad is activated was not carried. + This leads to attempt to pull while in push mode when force_caps + is set. In this case without the attached check even when activated + in pull mode we activate back to push mode. + This is from comment in previous code , case number eight: + 8. if the sink pad is activated, we are in pull mode. succeed. + - otherwise activate both pads in push mode and succeed. + Putting it back fixes playback of webm in webkit+gstreamer 1.0 . + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676003 + +2012-05-13 16:59:24 +0200 Sebastian Dröge + + * configure.ac: + Back to development + === release 0.11.91 === -2012-05-13 Sebastian Dröge +2012-05-13 16:02:36 +0200 Sebastian Dröge + * ChangeLog: + * NEWS: + * RELEASE: + * common: * configure.ac: - releasing 0.11.91, "I will give you five magic beans\!" + * docs/plugins/inspect/plugin-coreelements.xml: + * gstreamer.doap: + * win32/common/config.h: + * win32/common/gstenumtypes.c: + Release 0.11.91 + +2012-05-13 16:02:18 +0200 Sebastian Dröge + + * 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: + Update .po files + +2012-05-13 15:55:43 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From dc70203 to 3429ba6 2012-05-09 14:22:20 +0200 Sebastian Rasmussen diff --git a/Makefile.in b/Makefile.in index e0990cf..4c28bc0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -62,6 +62,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/gst-element-check.m4.in $(srcdir)/gstreamer.spec.in \ @@ -324,6 +325,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -476,7 +481,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/NEWS b/NEWS index cc7988f..a794dc9 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,11 @@ -This is GStreamer 0.11.91 "I will give you five magic beans!" +This is GStreamer 0.11.92 "High Hopes" + +New features in 0.11.92: + + * Parallel installability with 0.10.x series + * API cleanup and minor API improvements + * GstTagList is a refcounted type now + * Lots of bugfixes, cleanup and other improvements New features in 0.11.91: diff --git a/RELEASE b/RELEASE index bc68642..fe51c74 100644 --- a/RELEASE +++ b/RELEASE @@ -1,5 +1,5 @@ -Release notes for GStreamer 0.11.91 "I will give you five magic beans!" +Release notes for GStreamer 0.11.92 "High Hopes" @@ -8,12 +8,14 @@ in the 0.11.x unstable series of the core of the GStreamer streaming media framework. + The 0.11.x series is an unstable series targeted at developers and will eventually lead up to the stable 1.0 series. 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. + The 0.11.x series has improved memory management and features various cleanups and enhancements. @@ -40,10 +42,9 @@ contains a set of less supported plug-ins that haven't passed the Features of this release * Parallel installability with 0.10.x series - * Threadsafe design and API - * API cleanup and minor improvements - * More hiding of structs that don't need to be public - * Addition of SNAP flag for seek events + * API cleanup and minor API improvements + * GstTagList is a refcounted type now + * Lots of bugfixes, cleanup and other improvements There were no bugs fixed in this release @@ -72,26 +73,25 @@ will create more lists as necessary. Applications -Various applications have early ports to GStreamer 0.11 including Totem, RhythmBox, -Webkit, Jokosher, Transmageddon and others. We're working on porting more applications. +Various applications have early ports to GStreamer 0.11 including Totem, RhythmBox, Webkit, Jokosher, Transmageddon and others. We're working on porting more applications. Contributors to this release + * Alban Browaeys + * Andre Moreira Magalhaes (andrunko) * Anton Belka + * Bastien Nocera + * Brian Cameron * Edward Hervey + * Havard Graff + * Josep Torra + * Luis de Bethencourt * Mark Nauwelaerts - * Matej Knopp - * Raimo Järvi - * Reynaldo H. Verdejo Pinochet + * Mike Ruprecht * Sebastian Dröge - * Sebastian Rasmussen * Sreerenj Balachandran * Stefan Sauer - * Thiago Santos * Tim-Philipp Müller - * Vincent Penquerc'h * Wim Taymans - * Youness Alaoui - * Руслан Ижбулатов   \ No newline at end of file diff --git a/common/Makefile.in b/common/Makefile.in index db3ce35..2e793ef 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = common DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -257,6 +258,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -409,7 +414,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/common/gstdoc-scangobj b/common/gstdoc-scangobj index b0699c7..0d69a86 100755 --- a/common/gstdoc-scangobj +++ b/common/gstdoc-scangobj @@ -245,11 +245,13 @@ get_object_types (void) if (gst_plugin_get_filename (plugin) == NULL) continue; - $debug_log ("plugin: %s source: %s", plugin->desc.name, source); + $debug_log ("plugin: %s source: %s", gst_plugin_get_name (plugin), source); if (reinspect) { + gchar *basename; + inspect_name = g_strdup_printf ("$INSPECT_DIR" G_DIR_SEPARATOR_S "plugin-%s.xml", - plugin->desc.name); + gst_plugin_get_name (plugin)); inspect = fopen (inspect_name, "w"); if (inspect == NULL) { g_error ("Could not open %s for writing: %s\\n", inspect_name, @@ -257,23 +259,27 @@ get_object_types (void) } g_free (inspect_name); + basename = g_path_get_basename (gst_plugin_get_filename (plugin)); + /* output plugin data */ fputs ("\\n",inspect); - fputs (xmlprint(2, "name", plugin->desc.name),inspect); - fputs (xmlprint(2, "description", plugin->desc.description),inspect); - fputs (xmlprint(2, "filename", plugin->filename),inspect); - fputs (xmlprint(2, "basename", plugin->basename),inspect); - fputs (xmlprint(2, "version", plugin->desc.version),inspect); - fputs (xmlprint(2, "license", plugin->desc.license),inspect); - fputs (xmlprint(2, "source", plugin->desc.source),inspect); - fputs (xmlprint(2, "package", plugin->desc.package),inspect); - fputs (xmlprint(2, "origin", plugin->desc.origin),inspect); + fputs (xmlprint(2, "name", gst_plugin_get_name (plugin)),inspect); + fputs (xmlprint(2, "description", gst_plugin_get_description (plugin)),inspect); + fputs (xmlprint(2, "filename", gst_plugin_get_filename (plugin)),inspect); + fputs (xmlprint(2, "basename", basename),inspect); + fputs (xmlprint(2, "version", gst_plugin_get_version (plugin)),inspect); + fputs (xmlprint(2, "license", gst_plugin_get_license (plugin)),inspect); + fputs (xmlprint(2, "source", gst_plugin_get_source (plugin)),inspect); + fputs (xmlprint(2, "package", gst_plugin_get_package (plugin)),inspect); + fputs (xmlprint(2, "origin", gst_plugin_get_origin (plugin)),inspect); fputs (" \\n", inspect); + + g_free (basename); } features = gst_registry_get_feature_list_by_plugin (gst_registry_get (), - plugin->desc.name); + gst_plugin_get_name (plugin)); /* sort factories by feature->name */ features = g_list_sort (features, gst_feature_sort_compare); diff --git a/common/m4/Makefile.am b/common/m4/Makefile.am index 2ddb8a7..856d6e3 100644 --- a/common/m4/Makefile.am +++ b/common/m4/Makefile.am @@ -8,7 +8,6 @@ EXTRA_DIST = \ as-gcc-inline-assembly.m4 \ as-libtool.m4 \ as-libtool-tags.m4 \ - as-objc.m4 \ as-python.m4 \ as-scrub-include.m4 \ as-version.m4 \ diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in index 8767f43..d2580d9 100644 --- a/common/m4/Makefile.in +++ b/common/m4/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = common/m4 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -217,6 +218,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -369,7 +374,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @@ -383,7 +392,6 @@ EXTRA_DIST = \ as-gcc-inline-assembly.m4 \ as-libtool.m4 \ as-libtool-tags.m4 \ - as-objc.m4 \ as-python.m4 \ as-scrub-include.m4 \ as-version.m4 \ diff --git a/common/m4/as-compiler-flag.m4 b/common/m4/as-compiler-flag.m4 index 882a4c7..8bb853a 100644 --- a/common/m4/as-compiler-flag.m4 +++ b/common/m4/as-compiler-flag.m4 @@ -62,3 +62,35 @@ AC_DEFUN([AS_CXX_COMPILER_FLAG], AC_MSG_RESULT([$flag_ok]) ]) +dnl AS_OBJC_COMPILER_FLAG(CPPFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CPPFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. + +AC_DEFUN([AS_OBJC_COMPILER_FLAG], +[ + AC_REQUIRE([AC_PROG_OBJC]) + + AC_MSG_CHECKING([to see if Objective C compiler understands $1]) + + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $1" + + AC_LANG_PUSH([Objective C]) + + AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) + CPPFLAGS="$save_CPPFLAGS" + + if test "X$flag_ok" = Xyes ; then + $2 + true + else + $3 + true + fi + + AC_LANG_POP([Objective C]) + + AC_MSG_RESULT([$flag_ok]) +]) + diff --git a/common/m4/as-objc.m4 b/common/m4/as-objc.m4 deleted file mode 100644 index 1e7066a..0000000 --- a/common/m4/as-objc.m4 +++ /dev/null @@ -1,56 +0,0 @@ - - -# AC_PROG_OBJC([LIST-OF-COMPILERS]) -# -AC_DEFUN([AS_PROG_OBJC], -[ -AC_CHECK_TOOLS(OBJC, - [m4_default([$1], [objcc objc gcc cc CC])], - none) -AC_SUBST(OBJC) -OBJC_LDFLAGS="-lobjc" -AC_SUBST(OBJC_LDFLAGS) -if test "x$OBJC" != xnone ; then - _AM_DEPENDENCIES(OBJC) - AC_MSG_CHECKING([if Objective C compiler works]) - cat >>conftest.m < -@interface Moo:Object -{ -} -- moo; -int main(); -@end - -@implementation Moo -- moo -{ - exit(0); -} - -int main() -{ - id moo; - moo = [[Moo new]]; - [[moo moo]]; - return 1; -} -@end -EOF - ${OBJC} conftest.m ${OBJC_LDFLAGS} >&5 2>&5 - if test -f a.out -o -f a.exe ; then - result=yes - else - result=no - echo failed program is: >&5 - cat conftest.m >&5 - fi - rm -f conftest.m a.out a.exe - AC_MSG_RESULT([$result]) -else - _AM_DEPENDENCIES(OBJC) -fi - -]) - - diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4 index 2e935d2..ff0954a 100644 --- a/common/m4/gst-arch.m4 +++ b/common/m4/gst-arch.m4 @@ -6,31 +6,32 @@ dnl defines HOST_CPU AC_DEFUN([AG_GST_ARCH], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables + AC_REQUIRE([AC_CANONICAL_TARGET]) dnl we use target_ variables dnl Determine CPU - case "x${host_cpu}" in + case "x${target_cpu}" in xi?86 | xk? | xi?86_64) - case $host_os in + case $target_os in solaris*) AC_CHECK_DECL([__i386], [I386_ABI="yes"], [I386_ABI="no"]) AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"]) if test "x$I386_ABI" = "xyes" ; then HAVE_CPU_I386=yes - AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86]) + AC_DEFINE(HAVE_CPU_I386, 1, [Define if the target CPU is an x86]) fi if test "x$AMD64_ABI" = "xyes" ; then HAVE_CPU_X86_64=yes - AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) + AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the target CPU is a x86_64]) fi ;; *) HAVE_CPU_I386=yes - AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86]) + AC_DEFINE(HAVE_CPU_I386, 1, [Define if the target CPU is an x86]) dnl FIXME could use some better detection dnl (ie CPUID) - case "x${host_cpu}" in + case "x${target_cpu}" in xi386 | xi486) ;; *) AC_DEFINE(HAVE_RDTSC, 1, [Define if RDTSC is available]) ;; @@ -40,43 +41,43 @@ AC_DEFUN([AG_GST_ARCH], ;; xpowerpc) HAVE_CPU_PPC=yes - AC_DEFINE(HAVE_CPU_PPC, 1, [Define if the host CPU is a PowerPC]) ;; + AC_DEFINE(HAVE_CPU_PPC, 1, [Define if the target CPU is a PowerPC]) ;; xpowerpc64) HAVE_CPU_PPC64=yes - AC_DEFINE(HAVE_CPU_PPC64, 1, [Define if the host CPU is a 64 bit PowerPC]) ;; + AC_DEFINE(HAVE_CPU_PPC64, 1, [Define if the target CPU is a 64 bit PowerPC]) ;; xalpha*) HAVE_CPU_ALPHA=yes - AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the host CPU is an Alpha]) ;; + AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the target CPU is an Alpha]) ;; xarm*) HAVE_CPU_ARM=yes - AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the host CPU is an ARM]) ;; + AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the target CPU is an ARM]) ;; xsparc*) HAVE_CPU_SPARC=yes - AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the host CPU is a SPARC]) ;; + AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the target CPU is a SPARC]) ;; xmips*) HAVE_CPU_MIPS=yes - AC_DEFINE(HAVE_CPU_MIPS, 1, [Define if the host CPU is a MIPS]) ;; + AC_DEFINE(HAVE_CPU_MIPS, 1, [Define if the target CPU is a MIPS]) ;; xhppa*) HAVE_CPU_HPPA=yes - AC_DEFINE(HAVE_CPU_HPPA, 1, [Define if the host CPU is a HPPA]) ;; + AC_DEFINE(HAVE_CPU_HPPA, 1, [Define if the target CPU is a HPPA]) ;; xs390*) HAVE_CPU_S390=yes - AC_DEFINE(HAVE_CPU_S390, 1, [Define if the host CPU is a S390]) ;; + AC_DEFINE(HAVE_CPU_S390, 1, [Define if the target CPU is a S390]) ;; xia64*) HAVE_CPU_IA64=yes - AC_DEFINE(HAVE_CPU_IA64, 1, [Define if the host CPU is a IA64]) ;; + AC_DEFINE(HAVE_CPU_IA64, 1, [Define if the target CPU is a IA64]) ;; xm68k*) HAVE_CPU_M68K=yes - AC_DEFINE(HAVE_CPU_M68K, 1, [Define if the host CPU is a M68K]) ;; + AC_DEFINE(HAVE_CPU_M68K, 1, [Define if the target CPU is a M68K]) ;; xx86_64) HAVE_CPU_X86_64=yes - AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) ;; + AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the target CPU is a x86_64]) ;; xcris) HAVE_CPU_CRIS=yes - AC_DEFINE(HAVE_CPU_CRIS, 1, [Define if the host CPU is a CRIS]) ;; + AC_DEFINE(HAVE_CPU_CRIS, 1, [Define if the target CPU is a CRIS]) ;; xcrisv32) HAVE_CPU_CRISV32=yes - AC_DEFINE(HAVE_CPU_CRISV32, 1, [Define if the host CPU is a CRISv32]) ;; + AC_DEFINE(HAVE_CPU_CRISV32, 1, [Define if the target CPU is a CRISv32]) ;; esac dnl Determine endianness @@ -98,6 +99,7 @@ AC_DEFUN([AG_GST_ARCH], AM_CONDITIONAL(HAVE_CPU_CRISV32, test "x$HAVE_CPU_CRISV32" = "xyes") AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu", [the host CPU]) + AC_DEFINE_UNQUOTED(TARGET_CPU, "$target_cpu", [the target CPU]) ]) dnl check if unaligned memory access works correctly diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4 index 2dc0184..4872e3c 100644 --- a/common/m4/gst-args.m4 +++ b/common/m4/gst-args.m4 @@ -111,13 +111,13 @@ AC_DEFUN([AG_GST_ARG_GCOV], dnl if gcov is used, we do not want default -O2 CFLAGS if test "x$GST_GCOV_ENABLED" = "xyes" then - CFLAGS="-O0" + CFLAGS="$CFLAGS -O0" AC_SUBST(CFLAGS) - CXXFLAGS="-O0" + CXXFLAGS="$CXXFLAGS -O0" AC_SUBST(CXXFLAGS) - FFLAGS="-O0" + FFLAGS="$FFLAGS -O0" AC_SUBST(FFLAGS) - CCASFLAGS="-O0" + CCASFLAGS="$CCASFLAGS -O0" AC_SUBST(CCASFLAGS) AC_MSG_NOTICE([gcov enabled, setting CFLAGS and friends to $CFLAGS]) fi diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4 index f8f2364..e12a04c 100644 --- a/common/m4/gst-error.m4 +++ b/common/m4/gst-error.m4 @@ -196,6 +196,91 @@ AC_DEFUN([AG_GST_SET_ERROR_CXXFLAGS], AC_MSG_NOTICE([set ERROR_CXXFLAGS to $ERROR_CXXFLAGS]) ]) +dnl Sets WARNING_OBJCFLAGS and ERROR_OBJCFLAGS to something the compiler +dnl will accept and AC_SUBST them so they are available in Makefile +dnl +dnl WARNING_OBJCFLAGS will contain flags to make the compiler emit more +dnl warnings. +dnl ERROR_OBJCFLAGS will contain flags to make those warnings fatal, +dnl unless ADD-WERROR is set to "no" +dnl +dnl If MORE_FLAGS is set, tries to add each of the given flags +dnl to WARNING_CFLAGS if the compiler supports them. Each flag is +dnl tested separately. +dnl +dnl These flags can be overridden at make time: +dnl make ERROR_OBJCFLAGS= +AC_DEFUN([AG_GST_SET_ERROR_OBJCFLAGS], +[ + AC_REQUIRE([AC_PROG_OBJC]) + AC_REQUIRE([AS_OBJC_COMPILER_FLAG]) + + ERROR_OBJCFLAGS="" + WARNING_OBJCFLAGS="" + + dnl if we support -Wall, set it unconditionally + AS_OBJC_COMPILER_FLAG(-Wall, WARNING_OBJCFLAGS="$WARNING_OBJCFLAGS -Wall") + + dnl if asked for, add -Werror if supported + if test "x$1" != "xno" + then + AS_OBJC_COMPILER_FLAG(-Werror, ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -Werror") + + if test "x$ERROR_OBJCFLAGS" != "x" + then + dnl Add -fno-strict-aliasing for GLib versions before 2.19.8 + dnl as before G_LOCK and friends caused strict aliasing compiler + dnl warnings. + PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [ + AS_OBJC_COMPILER_FLAG([-fno-strict-aliasing], + ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -fno-strict-aliasing") + ]) + else + dnl if -Werror isn't suported, try -errwarn=%all + AS_OBJC_COMPILER_FLAG([-errwarn=%all], ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -errwarn=%all") + if test "x$ERROR_OBJCFLAGS" != "x"; then + dnl try -errwarn=%all,no%E_EMPTY_DECLARATION, + dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH, + dnl no%E_MACRO_REDEFINED (Sun Forte case) + dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon + dnl "statement not reached" disabled because there is g_assert_not_reached () in some places + dnl "macro redefined" because of gst/gettext.h + dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'? + dnl FIXME: do any of these work with the c++ compiler? if not, why + dnl do we check at all? + for f in 'no%E_EMPTY_DECLARATION' \ + 'no%E_STATEMENT_NOT_REACHED' \ + 'no%E_ARGUEMENT_MISMATCH' \ + 'no%E_MACRO_REDEFINED' \ + 'no%E_LOOP_NOT_ENTERED_AT_TOP' + do + AS_OBJC_COMPILER_FLAG([-errwarn=%all,$f], ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS,$f") + done + fi + fi + fi + + if test "x$2" != "x" + then + UNSUPPORTED="" + list="$2" + for each in $list + do + AS_OBJC_COMPILER_FLAG($each, + WARNING_OBJCFLAGS="$WARNING_OBJCFLAGS $each", + UNSUPPORTED="$UNSUPPORTED $each") + done + if test "X$UNSUPPORTED" != X ; then + AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED]) + fi + fi + + AC_SUBST(WARNING_OBJCFLAGS) + AC_SUBST(ERROR_OBJCFLAGS) + AC_MSG_NOTICE([set WARNING_OBJCFLAGS to $WARNING_OBJCFLAGS]) + AC_MSG_NOTICE([set ERROR_OBJCFLAGS to $ERROR_OBJCFLAGS]) +]) + dnl Sets the default error level for debugging messages AC_DEFUN([AG_GST_SET_LEVEL_DEFAULT], [ diff --git a/common/m4/gtk-doc.m4 b/common/m4/gtk-doc.m4 index 39a4e7d..0c1a305 100644 --- a/common/m4/gtk-doc.m4 +++ b/common/m4/gtk-doc.m4 @@ -6,8 +6,15 @@ dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ + AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + + dnl check for tools we added during development + AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check]) + AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) + AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) + dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, @@ -26,7 +33,13 @@ AC_DEFUN([GTK_DOC_CHECK], [PKG_CHECK_EXISTS([gtk-doc],, AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], [PKG_CHECK_EXISTS([gtk-doc >= $1],, - AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build gtk-doc]))]) + AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))]) + dnl don't check for glib if we build glib + if test "x$PACKAGE_NAME" != "xglib"; then + dnl don't fail if someone does not have glib + PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,) + fi + dnl don't rely on sed being pulled in implicitly. Fixes Solaris build. if test -z "$SED"; then AC_PROG_SED fi @@ -35,8 +48,24 @@ AC_DEFUN([GTK_DOC_CHECK], AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) - AC_PATH_PROGS(GTKDOC_CHECK,gtkdoc-check,) + dnl enable/disable output formats + AC_ARG_ENABLE([gtk-doc-html], + AS_HELP_STRING([--enable-gtk-doc-html], + [build documentation in html format [[default=yes]]]),, + [enable_gtk_doc_html=yes]) + AC_ARG_ENABLE([gtk-doc-pdf], + AS_HELP_STRING([--enable-gtk-doc-pdf], + [build documentation in pdf format [[default=no]]]),, + [enable_gtk_doc_pdf=no]) + + if test -z "$GTKDOC_MKPDF"; then + enable_gtk_doc_pdf=no + fi + AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) + AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) + AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) + AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) diff --git a/config.h.in b/config.h.in index d78a08e..43b0e35 100644 --- a/config.h.in +++ b/config.h.in @@ -75,46 +75,46 @@ /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME -/* Define if the host CPU is an Alpha */ +/* Define if the target CPU is an Alpha */ #undef HAVE_CPU_ALPHA -/* Define if the host CPU is an ARM */ +/* Define if the target CPU is an ARM */ #undef HAVE_CPU_ARM -/* Define if the host CPU is a CRIS */ +/* Define if the target CPU is a CRIS */ #undef HAVE_CPU_CRIS -/* Define if the host CPU is a CRISv32 */ +/* Define if the target CPU is a CRISv32 */ #undef HAVE_CPU_CRISV32 -/* Define if the host CPU is a HPPA */ +/* Define if the target CPU is a HPPA */ #undef HAVE_CPU_HPPA -/* Define if the host CPU is an x86 */ +/* Define if the target CPU is an x86 */ #undef HAVE_CPU_I386 -/* Define if the host CPU is a IA64 */ +/* Define if the target CPU is a IA64 */ #undef HAVE_CPU_IA64 -/* Define if the host CPU is a M68K */ +/* Define if the target CPU is a M68K */ #undef HAVE_CPU_M68K -/* Define if the host CPU is a MIPS */ +/* Define if the target CPU is a MIPS */ #undef HAVE_CPU_MIPS -/* Define if the host CPU is a PowerPC */ +/* Define if the target CPU is a PowerPC */ #undef HAVE_CPU_PPC -/* Define if the host CPU is a 64 bit PowerPC */ +/* Define if the target CPU is a 64 bit PowerPC */ #undef HAVE_CPU_PPC64 -/* Define if the host CPU is a S390 */ +/* Define if the target CPU is a S390 */ #undef HAVE_CPU_S390 -/* Define if the host CPU is a SPARC */ +/* Define if the target CPU is a SPARC */ #undef HAVE_CPU_SPARC -/* Define if the host CPU is a x86_64 */ +/* Define if the target CPU is a x86_64 */ #undef HAVE_CPU_X86_64 /* Define if the GNU dcgettext() function is already present or preinstalled. @@ -359,6 +359,9 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS +/* the target CPU */ +#undef TARGET_CPU + /* Define if we should poison deallocated memory */ #undef USE_POISONING diff --git a/configure b/configure index e0afcc6..19506a2 100755 --- 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 0.11.91. +# Generated by GNU Autoconf 2.69 for GStreamer 0.11.92. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GStreamer' PACKAGE_TARNAME='gstreamer' -PACKAGE_VERSION='0.11.91' -PACKAGE_STRING='GStreamer 0.11.91' +PACKAGE_VERSION='0.11.92' +PACKAGE_STRING='GStreamer 0.11.92' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -715,12 +715,22 @@ PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON +GTK_DOC_USE_REBASE_FALSE +GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE +GTK_DOC_BUILD_PDF_FALSE +GTK_DOC_BUILD_PDF_TRUE +GTK_DOC_BUILD_HTML_FALSE +GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE -GTKDOC_CHECK +GTKDOC_DEPS_LIBS +GTKDOC_DEPS_CFLAGS HTML_DIR +GTKDOC_MKPDF +GTKDOC_REBASE +GTKDOC_CHECK DOC_PS_FALSE DOC_PS_TRUE DOC_PDF_FALSE @@ -803,6 +813,10 @@ HAVE_CPU_PPC_FALSE HAVE_CPU_PPC_TRUE HAVE_CPU_I386_FALSE HAVE_CPU_I386_TRUE +target_os +target_vendor +target_cpu +target BUILD_FAILING_TESTS_FALSE BUILD_FAILING_TESTS_TRUE BUILD_TESTS_FALSE @@ -1041,6 +1055,8 @@ enable_introspection enable_docbook with_html_dir enable_gtk_doc +enable_gtk_doc_html +enable_gtk_doc_pdf enable_gobject_cast_checks enable_glib_asserts enable_check @@ -1065,6 +1081,8 @@ CXX CXXFLAGS CCC CXXCPP +GTKDOC_DEPS_CFLAGS +GTKDOC_DEPS_LIBS GLIB_CFLAGS GLIB_LIBS GIO_CFLAGS @@ -1609,7 +1627,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 0.11.91 to adapt to many kinds of systems. +\`configure' configures GStreamer 0.11.92 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1674,12 +1692,13 @@ Program names: System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer 0.11.91:";; + short | recursive ) echo "Configuration of GStreamer 0.11.92:";; esac cat <<\_ACEOF @@ -1724,6 +1743,8 @@ Optional Features: Enable introspection for this build --enable-docbook use docbook to build documentation [default=no] --enable-gtk-doc use gtk-doc to build documentation [[default=no]] + --enable-gtk-doc-html build documentation in html format [[default=yes]] + --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --enable-gobject-cast-checks=[no/auto/yes] Enable GObject cast checks --enable-glib-asserts=[no/auto/yes] @@ -1777,6 +1798,10 @@ Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor + GTKDOC_DEPS_CFLAGS + C compiler flags for GTKDOC_DEPS, overriding pkg-config + GTKDOC_DEPS_LIBS + linker flags for GTKDOC_DEPS, overriding pkg-config GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config GIO_CFLAGS C compiler flags for GIO, overriding pkg-config @@ -1848,7 +1873,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer configure 0.11.91 +GStreamer configure 0.11.92 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2621,7 +2646,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 0.11.91, which was +It was created by GStreamer $as_me 0.11.92, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3444,7 +3469,7 @@ fi # Define the identity of the package. PACKAGE='gstreamer' - VERSION='0.11.91' + VERSION='0.11.92' cat >>confdefs.h <<_ACEOF @@ -3567,9 +3592,9 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; } - PACKAGE_VERSION_MAJOR=$(echo 0.11.91 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 0.11.91 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 0.11.91 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 0.11.92 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 0.11.92 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 0.11.92 | cut -d'.' -f3) @@ -3580,7 +3605,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 0.11.91 | cut -d'.' -f4) + NANO=$(echo 0.11.92 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -15204,13 +15229,13 @@ _ACEOF if test "x$GST_GCOV_ENABLED" = "xyes" then - CFLAGS="-O0" + CFLAGS="$CFLAGS -O0" - CXXFLAGS="-O0" + CXXFLAGS="$CXXFLAGS -O0" - FFLAGS="-O0" + FFLAGS="$FFLAGS -O0" - CCASFLAGS="-O0" + CCASFLAGS="$CCASFLAGS -O0" { $as_echo "$as_me:${as_lineno-$LINENO}: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&5 $as_echo "$as_me: gcov enabled, setting CFLAGS and friends to $CFLAGS" >&6;} @@ -15490,11 +15515,50 @@ fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- - case "x${host_cpu}" in + case "x${target_cpu}" in xi?86 | xk? | xi?86_64) - case $host_os in + case $target_os in solaris*) ac_fn_c_check_decl "$LINENO" "__i386" "ac_cv_have_decl___i386" "$ac_includes_default" if test "x$ac_cv_have_decl___i386" = xyes; then : @@ -15530,7 +15594,7 @@ $as_echo "#define HAVE_CPU_X86_64 1" >>confdefs.h $as_echo "#define HAVE_CPU_I386 1" >>confdefs.h - case "x${host_cpu}" in + case "x${target_cpu}" in xi386 | xi486) ;; *) @@ -15951,6 +16015,11 @@ cat >>confdefs.h <<_ACEOF _ACEOF +cat >>confdefs.h <<_ACEOF +#define TARGET_CPU "$target_cpu" +_ACEOF + + HOST_CPU=$host_cpu @@ -22136,6 +22205,135 @@ fi + + # Extract the first word of "gtkdoc-check", so it can be a program name with args. +set dummy gtkdoc-check; 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_path_GTKDOC_CHECK+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GTKDOC_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. + ;; + *) + 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_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" + $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 + + ;; +esac +fi +GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK +if test -n "$GTKDOC_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 +$as_echo "$GTKDOC_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + for ac_prog in gtkdoc-rebase +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_path_GTKDOC_REBASE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GTKDOC_REBASE in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. + ;; + *) + 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_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" + $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 + + ;; +esac +fi +GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE +if test -n "$GTKDOC_REBASE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 +$as_echo "$GTKDOC_REBASE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$GTKDOC_REBASE" && break +done +test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" + + # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. +set dummy gtkdoc-mkpdf; 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_path_GTKDOC_MKPDF+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GTKDOC_MKPDF in + [\\/]* | ?:[\\/]*) + ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. + ;; + *) + 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_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" + $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 + + ;; +esac +fi +GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF +if test -n "$GTKDOC_MKPDF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 +$as_echo "$GTKDOC_MKPDF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; @@ -22163,9 +22361,101 @@ fi test $ac_status = 0; }; then : else - as_fn_error $? "You need to have gtk-doc >= 1.3 installed to build gtk-doc" "$LINENO" 5 + as_fn_error $? "You need to have gtk-doc >= 1.3 installed to build $PACKAGE_NAME" "$LINENO" 5 +fi + if test "x$PACKAGE_NAME" != "xglib"; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 +$as_echo_n "checking for GTKDOC_DEPS... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GTKDOC_DEPS_CFLAGS"; then + pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GTKDOC_DEPS_LIBS"; then + pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` +else + pkg_failed=yes fi - if test -z "$SED"; then + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0"` + else + GTKDOC_DEPS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTKDOC_DEPS_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0) were not met: + +$GTKDOC_DEPS_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS +and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables GTKDOC_DEPS_CFLAGS +and GTKDOC_DEPS_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS + GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + fi + if test -z "$SED"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : @@ -22243,50 +22533,24 @@ $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } - for ac_prog in gtkdoc-check -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_path_GTKDOC_CHECK+:} false; then : - $as_echo_n "(cached) " >&6 + # Check whether --enable-gtk-doc-html was given. +if test "${enable_gtk_doc_html+set}" = set; then : + enableval=$enable_gtk_doc_html; else - case $GTKDOC_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. - ;; - *) - 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_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" - $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 - - ;; -esac + enable_gtk_doc_html=yes fi -GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK -if test -n "$GTKDOC_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 -$as_echo "$GTKDOC_CHECK" >&6; } + + # Check whether --enable-gtk-doc-pdf was given. +if test "${enable_gtk_doc_pdf+set}" = set; then : + enableval=$enable_gtk_doc_pdf; else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + enable_gtk_doc_pdf=no fi - test -n "$GTKDOC_CHECK" && break -done + if test -z "$GTKDOC_MKPDF"; then + enable_gtk_doc_pdf=no + fi if test x$enable_gtk_doc = xyes; then @@ -22297,6 +22561,22 @@ else ENABLE_GTK_DOC_FALSE= fi + if test x$enable_gtk_doc_html = xyes; then + GTK_DOC_BUILD_HTML_TRUE= + GTK_DOC_BUILD_HTML_FALSE='#' +else + GTK_DOC_BUILD_HTML_TRUE='#' + GTK_DOC_BUILD_HTML_FALSE= +fi + + if test x$enable_gtk_doc_pdf = xyes; then + GTK_DOC_BUILD_PDF_TRUE= + GTK_DOC_BUILD_PDF_FALSE='#' +else + GTK_DOC_BUILD_PDF_TRUE='#' + GTK_DOC_BUILD_PDF_FALSE= +fi + if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' @@ -22305,6 +22585,14 @@ else GTK_DOC_USE_LIBTOOL_FALSE= fi + if test -n "$GTKDOC_REBASE"; then + GTK_DOC_USE_REBASE_TRUE= + GTK_DOC_USE_REBASE_FALSE='#' +else + GTK_DOC_USE_REBASE_TRUE='#' + GTK_DOC_USE_REBASE_FALSE= +fi + @@ -25768,10 +26056,22 @@ if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then + as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then + as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then + as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${ENABLE_PLUGIN_DOCS_TRUE}" && test -z "${ENABLE_PLUGIN_DOCS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PLUGIN_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -26209,7 +26509,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 0.11.91, which was +This file was extended by GStreamer $as_me 0.11.92, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -26275,7 +26575,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 0.11.91 +GStreamer config.status 0.11.92 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 4b0aa00..7612b34 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ(2.62) 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 -AC_INIT(GStreamer, 0.11.91, +AC_INIT(GStreamer, 0.11.92, http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, gstreamer) AG_GST_INIT diff --git a/docs/Makefile.in b/docs/Makefile.in index 942e178..4539a19 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = docs DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/version.entities.in @@ -257,6 +258,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -409,7 +414,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in index ed6ed53..a79dc0b 100644 --- a/docs/design/Makefile.in +++ b/docs/design/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = docs/design DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -217,6 +218,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -369,7 +374,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/design/part-negotiation.txt b/docs/design/part-negotiation.txt index 89ae38b..bc94032 100644 --- a/docs/design/part-negotiation.txt +++ b/docs/design/part-negotiation.txt @@ -31,6 +31,12 @@ Queries A pad can ask the peer pad for its supported GstCaps. It does this with the CAPS query. The list of supported caps can be used to choose an appropriate GstCaps for the data transfer. +The CAPS query works recursively, elements should take their peers into +consideration when constructing the possible caps. Because the result caps +can be very large, the filter can be used to restrict the caps. Only the +caps that match the filter will be returned as the result caps. The +order of the filter caps gives the order of preference of the caller and +should be taken into account for the returned caps. (in) "filter", GST_TYPE_CAPS (default NULL) - a GstCaps to filter the results against @@ -39,11 +45,15 @@ appropriate GstCaps for the data transfer. - the result caps + A pad can ask the peer pad if it supports a given caps. It does this with -the ACCEPT_CAPS query. +the ACCEPT_CAPS query. The caps must be fixed. +The ACCEPT_CAPS query is not required to work recursively, it can simply +return TRUE if a subsequent CAPS event with those caps would return +success. (in) "caps", GST_TYPE_CAPS - - a GstCaps to check + - a GstCaps to check, must be fixed (out) "result", G_TYPE_BOOLEAN (default FALSE) - TRUE if the caps are accepted @@ -56,7 +66,7 @@ When a media format is negotiated, peer elements are notified of the GstCaps with the CAPS event. The caps must be fixed. "caps", GST_TYPE_CAPS - - the negotiated GstCaps + - the negotiated GstCaps, must be fixed Operation diff --git a/docs/design/part-segments.txt b/docs/design/part-segments.txt index 88f44ac..56a2e1a 100644 --- a/docs/design/part-segments.txt +++ b/docs/design/part-segments.txt @@ -84,7 +84,7 @@ Use case: FLUSHING seek the stream_time of the seek that was performed. The stop time is important when the video format contains B frames. The - video decoder receives a P frame first, which is can decode but not push yet. + video decoder receives a P frame first, which it can decode but not push yet. When it receives a B frame, it can decode the B frame and push the B frame followed by the previously decoded P frame. If the P frame is outside of the segment, the decoder knows it should not send the P frame. diff --git a/docs/faq/Makefile.in b/docs/faq/Makefile.in index 5b8a72f..c652973 100644 --- a/docs/faq/Makefile.in +++ b/docs/faq/Makefile.in @@ -73,6 +73,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = $(srcdir)/../htmlinstall.mak $(srcdir)/../manuals.mak \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/common/upload-doc.mak @@ -271,6 +272,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -423,7 +428,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/gst/Makefile.in b/docs/gst/Makefile.in index d2d4c7b..3cd35f6 100644 --- a/docs/gst/Makefile.in +++ b/docs/gst/Makefile.in @@ -69,6 +69,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/gstreamer.types.in $(top_srcdir)/common/gtk-doc.mak \ $(top_srcdir)/common/upload-doc.mak @@ -240,6 +241,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -392,7 +397,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 8e7ebfb..6aa4058 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -814,6 +814,7 @@ gst_element_register gst_element_factory_find gst_element_factory_get_element_type gst_element_factory_get_metadata +gst_element_factory_get_metadata_keys gst_element_factory_get_num_pad_templates gst_element_factory_get_uri_type gst_element_factory_get_uri_protocols @@ -2042,6 +2043,7 @@ gst_plugin_feature_set_rank gst_plugin_feature_set_name gst_plugin_feature_get_rank gst_plugin_feature_get_name +gst_plugin_feature_get_plugin gst_plugin_feature_load gst_plugin_feature_list_copy gst_plugin_feature_list_free @@ -2517,6 +2519,7 @@ GST_TAG_APPLICATION_DATA GST_TAG_IMAGE_ORIENTATION gst_tag_register +gst_tag_register_static gst_tag_merge_use_first gst_tag_merge_strings_with_comma gst_tag_exists @@ -2530,13 +2533,15 @@ gst_tag_list_new_empty gst_tag_list_new_valist gst_tag_list_new_from_string gst_tag_list_to_string -gst_is_tag_list gst_tag_list_is_empty gst_tag_list_is_equal gst_tag_list_copy +gst_tag_list_ref +gst_tag_list_unref +gst_tag_list_is_writable +gst_tag_list_make_writable gst_tag_list_insert gst_tag_list_merge -gst_tag_list_free gst_tag_list_get_tag_size gst_tag_list_n_tags gst_tag_list_nth_tag_name @@ -2702,6 +2707,7 @@ gst_toc_copy gst_toc_find_entry gst_toc_entry_get_start_stop gst_toc_entry_set_start_stop +gst_toc_entry_type_get_nick GST_TYPE_TOC_ENTRY_TYPE diff --git a/docs/gst/html/GstBin.html b/docs/gst/html/GstBin.html index be76ba1..1587b4c 100644 --- a/docs/gst/html/GstBin.html +++ b/docs/gst/html/GstBin.html @@ -157,7 +157,7 @@ element is removed from the bin.

-

Notes

+

Notes

A GstBin internally intercepts every GstMessage posted by its children and implements the following default behaviour for each of them: diff --git a/docs/gst/html/GstElement.html b/docs/gst/html/GstElement.html index 332a2bf..87250a8 100644 --- a/docs/gst/html/GstElement.html +++ b/docs/gst/html/GstElement.html @@ -3473,6 +3473,9 @@ upstream events or a random linked source pad for downstream events. This function takes owership of the provided event so you should gst_event_ref() it if you want to reuse the event after this call.

+

+MT safe. +

@@ -3488,8 +3491,8 @@ This function takes owership of the provided event so you should +TRUE if the event was handled. Events that trigger a preroll (such +as flushing seeks and steps) will emit GST_MESSAGE_ASYNC_DONE.

Returns :

-TRUE if the event was handled. -MT safe.
@@ -3546,8 +3549,8 @@ with <

Returns :

-
TRUE if the seek operation succeeded (the seek might not always be -executed instantly though) +TRUE if the seek operation succeeded. Flushing seeks will trigger a +preroll, which will emit GST_MESSAGE_ASYNC_DONE.
@@ -3569,6 +3572,9 @@ Sends a seek event to an element. See gst_element_send_event().

+

+MT safe. +

@@ -3607,8 +3613,8 @@ the parameters. The seek event is sent to the element using +TRUE if the event was handled. Flushing seeks will trigger a +preroll, which will emit GST_MESSAGE_ASYNC_DONE.

Returns :

-TRUE if the event was handled. -MT safe.
diff --git a/docs/gst/html/GstElementFactory.html b/docs/gst/html/GstElementFactory.html index 720eac0..6b75503 100644 --- a/docs/gst/html/GstElementFactory.html +++ b/docs/gst/html/GstElementFactory.html @@ -42,7 +42,7 @@
 #include <gst/gst.h>
 
-struct              GstElementFactory;
+                    GstElementFactory;
 gboolean            gst_element_register                (GstPlugin *plugin,
                                                          const gchar *name,
                                                          guint rank,
@@ -52,6 +52,8 @@ struct              GstElementFactory *factory);
 const gchar *       gst_element_factory_get_metadata    (GstElementFactory *factory,
                                                          const gchar *key);
+gchar **            gst_element_factory_get_metadata_keys
+                                                        (GstElementFactory *factory);
 guint               gst_element_factory_get_num_pad_templates
                                                         (GstElementFactory *factory);
 GstURIType          gst_element_factory_get_uri_type    (GstElementFactory *factory);
@@ -139,7 +141,7 @@ The following code example shows you how to create a GstFileSrc element.
 

-

Example 6. Using an element factory

+

Example 6. Using an element factory

@@ -183,8 +185,8 @@ Last reviewed on 2005-11-23 (0.9.5)

Details

-

struct GstElementFactory

-
struct GstElementFactory;
+

GstElementFactory

+
typedef struct _GstElementFactory GstElementFactory;

The opaque GstElementFactory data structure.

@@ -309,6 +311,30 @@ metadata with the given key.

+

gst_element_factory_get_metadata_keys ()

+
gchar **            gst_element_factory_get_metadata_keys
+                                                        (GstElementFactory *factory);
+

+Get the available keys for the metadata on factory. +

+
++ + + + + + + + + + +

factory, :

a GstElementFactory +

Returns :

a NULL-terminated array of key strings, or NULL when +there is no metadata. Free with g_strfreev() when no longer needd.
+
+
+

gst_element_factory_get_num_pad_templates ()

guint               gst_element_factory_get_num_pad_templates
                                                         (GstElementFactory *factory);
diff --git a/docs/gst/html/GstObject.html b/docs/gst/html/GstObject.html index 13bb8b8..049fed9 100644 --- a/docs/gst/html/GstObject.html +++ b/docs/gst/html/GstObject.html @@ -185,7 +185,7 @@ of the object.

-

controlled properties

+

controlled properties

Controlled properties offers a lightweight way to adjust gobject properties over stream-time. It works by using time-stamped value pairs that diff --git a/docs/gst/html/GstPad.html b/docs/gst/html/GstPad.html index 1167786..5487d34 100644 --- a/docs/gst/html/GstPad.html +++ b/docs/gst/html/GstPad.html @@ -502,13 +502,14 @@ The direction of a pad.

typedef enum {
   GST_PAD_FLAG_BLOCKED          = (GST_OBJECT_FLAG_LAST << 0),
   GST_PAD_FLAG_FLUSHING         = (GST_OBJECT_FLAG_LAST << 1),
-  GST_PAD_FLAG_BLOCKING         = (GST_OBJECT_FLAG_LAST << 2),
-  GST_PAD_FLAG_NEED_PARENT      = (GST_OBJECT_FLAG_LAST << 3),
-  GST_PAD_FLAG_NEED_RECONFIGURE = (GST_OBJECT_FLAG_LAST << 4),
-  GST_PAD_FLAG_PENDING_EVENTS   = (GST_OBJECT_FLAG_LAST << 5),
-  GST_PAD_FLAG_FIXED_CAPS       = (GST_OBJECT_FLAG_LAST << 6),
-  GST_PAD_FLAG_PROXY_CAPS       = (GST_OBJECT_FLAG_LAST << 7),
-  GST_PAD_FLAG_PROXY_ALLOCATION = (GST_OBJECT_FLAG_LAST << 8),
+  GST_PAD_FLAG_EOS              = (GST_OBJECT_FLAG_LAST << 2),
+  GST_PAD_FLAG_BLOCKING         = (GST_OBJECT_FLAG_LAST << 3),
+  GST_PAD_FLAG_NEED_PARENT      = (GST_OBJECT_FLAG_LAST << 4),
+  GST_PAD_FLAG_NEED_RECONFIGURE = (GST_OBJECT_FLAG_LAST << 5),
+  GST_PAD_FLAG_PENDING_EVENTS   = (GST_OBJECT_FLAG_LAST << 6),
+  GST_PAD_FLAG_FIXED_CAPS       = (GST_OBJECT_FLAG_LAST << 7),
+  GST_PAD_FLAG_PROXY_CAPS       = (GST_OBJECT_FLAG_LAST << 8),
+  GST_PAD_FLAG_PROXY_ALLOCATION = (GST_OBJECT_FLAG_LAST << 9),
   /* padding */
   GST_PAD_FLAG_LAST        = (GST_OBJECT_FLAG_LAST << 16)
 } GstPadFlags;
@@ -526,7 +527,12 @@ Pad state flags
 
 
 

GST_PAD_FLAG_FLUSHING

-is pad refusing buffers +is pad flushing + + + +

GST_PAD_FLAG_EOS

+is pad in EOS state diff --git a/docs/gst/html/GstPadTemplate.html b/docs/gst/html/GstPadTemplate.html index 82811af..f7527bb 100644 --- a/docs/gst/html/GstPadTemplate.html +++ b/docs/gst/html/GstPadTemplate.html @@ -132,7 +132,7 @@ or -

Example 11. Create a pad from a padtemplate

+

Example 11. Create a pad from a padtemplate

diff --git a/docs/gst/html/GstPluginFeature.html b/docs/gst/html/GstPluginFeature.html index 72102c5..d1f0d10 100644 --- a/docs/gst/html/GstPluginFeature.html +++ b/docs/gst/html/GstPluginFeature.html @@ -42,7 +42,7 @@
 #include <gst/gst.h>
 
-struct              GstPluginFeature;
+                    GstPluginFeature;
 gboolean            (*GstPluginFeatureFilter)           (GstPluginFeature *feature,
                                                          gpointer user_data);
 enum                GstRank;
@@ -52,6 +52,7 @@ enum                guint               gst_plugin_feature_get_rank         (GstPluginFeature *feature);
 #define             gst_plugin_feature_get_name         (feature)
+GstPlugin *         gst_plugin_feature_get_plugin       (GstPluginFeature *feature);
 GstPluginFeature *  gst_plugin_feature_load             (GstPluginFeature *feature);
 GList *             gst_plugin_feature_list_copy        (GList *list);
 void                gst_plugin_feature_list_free        (GList *list);
@@ -85,8 +86,8 @@ This is a base class for anything that can be added to a 
 

Details

-

struct GstPluginFeature

-
struct GstPluginFeature;
+

GstPluginFeature

+
typedef struct _GstPluginFeature GstPluginFeature;

Opaque GstPluginFeature structure.

@@ -259,6 +260,29 @@ For a nameless plugin feature, this returns NULL.

+

gst_plugin_feature_get_plugin ()

+
GstPlugin *         gst_plugin_feature_get_plugin       (GstPluginFeature *feature);
+

+Get the plugin that provides this feature. +

+
++ + + + + + + + + + +

feature :

a feature

Returns :

the plugin that provides this feature, or NULL. +Unref with gst_object_unref() when no longer needed. [transfer full] +
+
+
+

gst_plugin_feature_load ()

GstPluginFeature *  gst_plugin_feature_load             (GstPluginFeature *feature);

diff --git a/docs/gst/html/GstTagSetter.html b/docs/gst/html/GstTagSetter.html index 1e65197..f672c21 100644 --- a/docs/gst/html/GstTagSetter.html +++ b/docs/gst/html/GstTagSetter.html @@ -49,7 +49,7 @@ struct GstTagSetterInterface; void gst_tag_setter_reset_tags (GstTagSetter *setter); void gst_tag_setter_merge_tags (GstTagSetter *setter, - const GstTagList *list, + const GstTagList *list, GstTagMergeMode mode); void gst_tag_setter_add_tags (GstTagSetter *setter, GstTagMergeMode mode, @@ -72,7 +72,7 @@ struct GstTagMergeMode mode, const gchar *tag, va_list var_args); -const GstTagList * gst_tag_setter_get_tag_list (GstTagSetter *setter); +const GstTagList * gst_tag_setter_get_tag_list (GstTagSetter *setter); void gst_tag_setter_set_tag_merge_mode (GstTagSetter *setter, GstTagMergeMode mode); GstTagMergeMode gst_tag_setter_get_tag_merge_mode (GstTagSetter *setter); @@ -224,7 +224,7 @@ state-change handler.

gst_tag_setter_merge_tags ()

void                gst_tag_setter_merge_tags           (GstTagSetter *setter,
-                                                         const GstTagList *list,
+                                                         const GstTagList *list,
                                                          GstTagMergeMode mode);

Merges the given list into the setter's list using the given mode. @@ -422,7 +422,7 @@ The list must be terminated with NULL.


gst_tag_setter_get_tag_list ()

-
const GstTagList *  gst_tag_setter_get_tag_list         (GstTagSetter *setter);
+
const GstTagList *  gst_tag_setter_get_tag_list         (GstTagSetter *setter);

Returns the current list of tags the setter uses. The list should not be modified or freed. diff --git a/docs/gst/html/GstTypeFindFactory.html b/docs/gst/html/GstTypeFindFactory.html index af4e90c..6816cca 100644 --- a/docs/gst/html/GstTypeFindFactory.html +++ b/docs/gst/html/GstTypeFindFactory.html @@ -72,7 +72,7 @@ the section

-

Example 13. how to write a simple typefinder

+

Example 13. how to write a simple typefinder

diff --git a/docs/gst/html/api-index-full.html b/docs/gst/html/api-index-full.html index b651c45..c2da1fe 100644 --- a/docs/gst/html/api-index-full.html +++ b/docs/gst/html/api-index-full.html @@ -1739,7 +1739,7 @@
-GstElementFactory, struct in GstElementFactory +GstElementFactory, struct in GstElementFactory
@@ -1847,6 +1847,10 @@
+gst_element_factory_get_metadata_keys, function in GstElementFactory +
+
+
gst_element_factory_get_num_pad_templates, function in GstElementFactory
@@ -2730,10 +2734,6 @@
-gst_is_tag_list, function in GstTagList -
-
-
GstIterator, struct in GstIterator
@@ -4439,7 +4439,7 @@
-GstPluginFeature, struct in GstPluginFeature +GstPluginFeature, struct in GstPluginFeature
@@ -4491,6 +4491,10 @@
+gst_plugin_feature_get_plugin, function in GstPluginFeature +
+
+
gst_plugin_feature_get_rank, function in GstPluginFeature
@@ -5887,7 +5891,7 @@
-GstTagList, struct in GstTagList +GstTagList, struct in GstTagList
@@ -6187,10 +6191,6 @@
-gst_tag_list_free, function in GstTagList -
-
-
gst_tag_list_get_boolean, function in GstTagList
@@ -6307,6 +6307,14 @@
+gst_tag_list_is_writable, macro in GstTagList +
+
+
+gst_tag_list_make_writable, macro in GstTagList +
+
+
gst_tag_list_merge, function in GstTagList
@@ -6339,6 +6347,10 @@
+gst_tag_list_ref, function in GstTagList +
+
+
gst_tag_list_remove_tag, function in GstTagList
@@ -6347,6 +6359,10 @@
+gst_tag_list_unref, function in GstTagList +
+
+
GST_TAG_LOCATION, macro in GstTagList
@@ -6395,6 +6411,10 @@
+gst_tag_register_static, function in GstTagList +
+
+
GST_TAG_SERIAL, macro in GstTagList
@@ -6707,6 +6727,10 @@
+gst_toc_entry_type_get_nick, function in GstToc +
+
+
gst_toc_find_entry, function in GstToc
diff --git a/docs/gst/html/gst-building.html b/docs/gst/html/gst-building.html index 54d9fa8..be3ad7b 100644 --- a/docs/gst/html/gst-building.html +++ b/docs/gst/html/gst-building.html @@ -31,7 +31,7 @@ How to build the GStreamer framework and applications using it.
-

Building GStreamer on UNIX

+

Building GStreamer on UNIX

On UNIX, GStreamer uses the standard GNU build system, using autoconf for package @@ -92,7 +92,7 @@ How to build the GStreamer framework and applications using it.

-

Building GStreamer Applications

+

Building GStreamer Applications

Applications and libraries can use pkg-config to get all the needed compiler and linker flags to build against GStreamer. Please note that diff --git a/docs/gst/html/gst-running.html b/docs/gst/html/gst-running.html index a7fe706..764295b 100644 --- a/docs/gst/html/gst-running.html +++ b/docs/gst/html/gst-running.html @@ -31,9 +31,9 @@ How to run and debug your GStreamer application

-

Running and debugging GStreamer Applications

+

Running and debugging GStreamer Applications

-

Environment variables

+

Environment variables

GStreamer inspects a few of environment variables in addition to standard variables like LANG, PATH or HOME. diff --git a/docs/gst/html/gstreamer-Gst.html b/docs/gst/html/gstreamer-Gst.html index 06c170d..bd6c4a1 100644 --- a/docs/gst/html/gstreamer-Gst.html +++ b/docs/gst/html/gstreamer-Gst.html @@ -83,7 +83,7 @@ options, as shown in the following example.

-

Example 1. Initializing the gstreamer library

+

Example 1. Initializing the gstreamer library

@@ -119,7 +119,7 @@ You can also use GOption to initialize your own parameters as shown in the next code fragment:

-

Example 2. Initializing own parameters when initializing gstreamer

+

Example 2. Initializing own parameters when initializing gstreamer

diff --git a/docs/gst/html/gstreamer-GstBuffer.html b/docs/gst/html/gstreamer-GstBuffer.html index ffe7688..153939c 100644 --- a/docs/gst/html/gstreamer-GstBuffer.html +++ b/docs/gst/html/gstreamer-GstBuffer.html @@ -191,7 +191,7 @@ The following example creates a buffer that can hold a given video frame with a given width, height and bits per plane.

-

Example 3. Creating a buffer for a video frame

+

Example 3. Creating a buffer for a video frame

@@ -229,7 +229,7 @@ to create a buffer with preallocated data of a given size.

Buffers can contain a list of GstMemory objects. You can retrieve how many memory objects with gst_buffer_n_memory() and you can get a pointer -to memory with gst_buffer_peek_memory() +to memory with gst_buffer_peek_memory()

A buffer will usually have timestamps, and a duration, but neither of these diff --git a/docs/gst/html/gstreamer-GstBufferPool.html b/docs/gst/html/gstreamer-GstBufferPool.html index 57f202b..537aeb7 100644 --- a/docs/gst/html/gstreamer-GstBufferPool.html +++ b/docs/gst/html/gstreamer-GstBufferPool.html @@ -628,7 +628,7 @@ nothing and return FALSE.

config is a GstStructure that contains the configuration parameters for the pool. A default and mandatory set of parameters can be configured with -gst_buffer_pool_config_set(). This function takes ownership of config. +gst_buffer_pool_config_set(). This function takes ownership of config.

diff --git a/docs/gst/html/gstreamer-GstCaps.html b/docs/gst/html/gstreamer-GstCaps.html index 32e8d20..ed50c3c 100644 --- a/docs/gst/html/gstreamer-GstCaps.html +++ b/docs/gst/html/gstreamer-GstCaps.html @@ -160,7 +160,7 @@ A <

-

Example 4. Creating caps

+

Example 4. Creating caps

diff --git a/docs/gst/html/gstreamer-GstEvent.html b/docs/gst/html/gstreamer-GstEvent.html index dbb850c..0dfda61 100644 --- a/docs/gst/html/gstreamer-GstEvent.html +++ b/docs/gst/html/gstreamer-GstEvent.html @@ -93,9 +93,10 @@ const const GstSegment **segment); voidgst_event_copy_segment (GstEvent *event, GstSegment *segment); -GstEvent * gst_event_new_tag (GstTagList *taglist); +GstEvent * gst_event_new_tag (const gchar *name, + GstTagList *taglist); voidgst_event_parse_tag (GstEvent *event, - GstTagList **taglist); + GstTagList **taglist); GstEvent * gst_event_new_buffer_size (GstFormat format, gint64 minsize, gint64 maxsize, @@ -147,7 +148,8 @@ enum gdouble *rate, gboolean *flush, gboolean *intermediate); -GstEvent * gst_event_new_sink_message (GstMessage *msg); +GstEvent * gst_event_new_sink_message (const gchar *name, + GstMessage *msg); voidgst_event_parse_sink_message (GstEvent *event, GstMessage **msg); GstEvent * gst_event_new_reconfigure (void); @@ -216,7 +218,7 @@ To do that
-

Example 8. performing a seek on a pipeline

+

Example 8. performing a seek on a pipeline

@@ -398,7 +400,7 @@ the given flags GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (90, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (100, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), GST_EVENT_EOS = GST_EVENT_MAKE_TYPE (110, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), + GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), /* non-sticky downstream serialized */ GST_EVENT_SEGMENT_DONE = GST_EVENT_MAKE_TYPE (150, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), @@ -1500,14 +1502,24 @@ given by segment.

gst_event_new_tag ()

-
GstEvent *          gst_event_new_tag                   (GstTagList *taglist);
+
GstEvent *          gst_event_new_tag                   (const gchar *name,
+                                                         GstTagList *taglist);

Generates a metadata tag event from the given taglist.

+

+Since the TAG event has the GST_EVENT_TYPE_STICKY_MULTI flag set, the +name will be used to keep track of multiple tag events. +

+ + + + - @@ -1794,94 +1860,179 @@ string must be freed with -

gst_is_tag_list ()

-
gboolean            gst_is_tag_list                     (gconstpointer p);
+

gst_tag_list_is_empty ()

+
gboolean            gst_tag_list_is_empty               (const GstTagList *list);

-Checks if the given pointer is a taglist. +Checks if the given taglist is empty.

name :

the name of the event. [transfer none] +

taglist :

metadata list. The event will take ownership of the taglist. [transfer full] @@ -1525,7 +1537,7 @@ of the taglist. [

gst_event_parse_tag ()

void                gst_event_parse_tag                 (GstEvent *event,
-                                                         GstTagList **taglist);
+ GstTagList **taglist);

Parses a tag event and stores the results in the given taglist location. No reference to the taglist will be returned, it remains valid only until @@ -1994,8 +2006,8 @@ from the newly configured start position.

For negative rates, playback will start from the newly configured stop -position (if any). If the stop position if updated, it must be different from --1 for negative rates. +position (if any). If the stop position is updated, it must be different from +-1 (GST_CLOCK_TIME_NONE) for negative rates.

It is not possible to seek relative to the current playback position, to do @@ -2289,16 +2301,24 @@ boolean in. [

gst_event_new_sink_message ()

-
GstEvent *          gst_event_new_sink_message          (GstMessage *msg);
+
GstEvent *          gst_event_new_sink_message          (const gchar *name,
+                                                         GstMessage *msg);

Create a new sink-message event. The purpose of the sink-message event is to instruct a sink to post the message contained in the event synchronized with the stream.

+

+name is used to store multiple sticky events on one pad. +

+ + + + @@ -2637,6 +2657,10 @@ inform elements that some kind of the TOC was found. + + + + diff --git a/docs/gst/html/gstreamer-GstGError.html b/docs/gst/html/gstreamer-GstGError.html index 95800d6..f82a9e1 100644 --- a/docs/gst/html/gstreamer-GstGError.html +++ b/docs/gst/html/gstreamer-GstGError.html @@ -115,7 +115,7 @@ Elements throw errors using the -

Example 7. Throwing an error

+

Example 7. Throwing an error

name :

a name for the event

msg :

the GstMessage to be posted. [transfer none]

name :

a name for the event

toc :

GstToc structure.
diff --git a/docs/gst/html/gstreamer-GstIterator.html b/docs/gst/html/gstreamer-GstIterator.html index 5915092..82147a4 100644 --- a/docs/gst/html/gstreamer-GstIterator.html +++ b/docs/gst/html/gstreamer-GstIterator.html @@ -122,7 +122,7 @@ The basic use pattern of an iterator is as follows:

-

Example 9. Using an iterator

+

Example 9. Using an iterator

diff --git a/docs/gst/html/gstreamer-GstMessage.html b/docs/gst/html/gstreamer-GstMessage.html index 0e9d89b..c4cf15f 100644 --- a/docs/gst/html/gstreamer-GstMessage.html +++ b/docs/gst/html/gstreamer-GstMessage.html @@ -84,9 +84,9 @@ const GError **gerror, gchar **debug); GstMessage * gst_message_new_tag (GstObject *src, - GstTagList *tag_list); + GstTagList *tag_list); voidgst_message_parse_tag (GstMessage *message, - GstTagList **tag_list); + GstTagList **tag_list); GstMessage * gst_message_new_buffering (GstObject *src, gint percent); voidgst_message_parse_buffering (GstMessage *message, @@ -273,7 +273,7 @@ The basic use pattern of posting a message on a -

Example 10. Posting a GstMessage

+

Example 10. Posting a GstMessage

@@ -1265,7 +1265,7 @@ or NULL. [

gst_message_new_tag ()

GstMessage *        gst_message_new_tag                 (GstObject *src,
-                                                         GstTagList *tag_list);
+ GstTagList *tag_list);

Create a new tag message. The message will take ownership of the tag list. The message is posted by elements that discovered a new taglist. @@ -1296,7 +1296,7 @@ MT safe. [

gst_message_parse_tag ()

void                gst_message_parse_tag               (GstMessage *message,
-                                                         GstTagList **tag_list);
+ GstTagList **tag_list);

Extracts the tag list from the GstMessage. The tag list returned in the output argument is a copy; the caller must free it when done. @@ -1330,7 +1330,7 @@ Typical usage of this function might be: gst_message_parse_tag (msg, &tags); g_print ("Got tags from element %s\n", GST_OBJECT_NAME (msg->src)); handle_tags (tags); - gst_tag_list_free (tags); + gst_tag_list_unref (tags); break; } ... @@ -2871,7 +2871,7 @@ MT safe. GstToc **toc, gboolean *updated);

-Extract the TOC from the GstMessage. The TOC returned in the +Extract thef TOC from the GstMessage. The TOC returned in the output argument is a copy; the caller must free it with gst_toc_free() when done.

diff --git a/docs/gst/html/gstreamer-GstQuery.html b/docs/gst/html/gstreamer-GstQuery.html index 8e70d71..0e8a04a 100644 --- a/docs/gst/html/gstreamer-GstQuery.html +++ b/docs/gst/html/gstreamer-GstQuery.html @@ -287,7 +287,7 @@ The following example shows how to query the duration of a pipeline:

-

Example 12. Query duration on a pipeline

+

Example 12. Query duration on a pipeline

@@ -1694,7 +1694,7 @@ or NULL. [filter is used to restrict the result caps, only the caps matching +filter should be returned from the CAPS query. Specifying a filter might +greatly reduce the amount of processing an element needs to do. +

+

Free-function: gst_query_unref

diff --git a/docs/gst/html/gstreamer-GstStructure.html b/docs/gst/html/gstreamer-GstStructure.html index e7be901..32ad2d4 100644 --- a/docs/gst/html/gstreamer-GstStructure.html +++ b/docs/gst/html/gstreamer-GstStructure.html @@ -2061,8 +2061,9 @@ Free-function: g_free - +

Returns :

(transfer full)L a pointer to string allocated by g_malloc(). -g_free() after usage.a pointer to string allocated by g_malloc(). +g_free() after usage. [transfer full] +
diff --git a/docs/gst/html/gstreamer-GstTagList.html b/docs/gst/html/gstreamer-GstTagList.html index ece4620..64d1c15 100644 --- a/docs/gst/html/gstreamer-GstTagList.html +++ b/docs/gst/html/gstreamer-GstTagList.html @@ -40,10 +40,10 @@
 #include <gst/gst.h>
 
-                    GstTagList;
+struct              GstTagList;
 enum                GstTagMergeMode;
 enum                GstTagFlag;
-void                (*GstTagForeachFunc)                (const GstTagList *list,
+void                (*GstTagForeachFunc)                (const GstTagList *list,
                                                          const gchar *tag,
                                                          gpointer user_data);
 void                (*GstTagMergeFunc)                  (GValue *dest,
@@ -134,6 +134,12 @@ enum                const gchar *nick,
                                                          const gchar *blurb,
                                                          GstTagMergeFunc func);
+void                gst_tag_register_static             (const gchar *name,
+                                                         GstTagFlag flag,
+                                                         GType type,
+                                                         const gchar *nick,
+                                                         const gchar *blurb,
+                                                         GstTagMergeFunc func);
 void                gst_tag_merge_use_first             (GValue *dest,
                                                          const GValue *src);
 void                gst_tag_merge_strings_with_comma    (GValue *dest,
@@ -144,145 +150,147 @@ const gchar *       gst_tag_get_description             (const gchar *tag);
 GstTagFlag          gst_tag_get_flag                    (const gchar *tag);
 gboolean            gst_tag_is_fixed                    (const gchar *tag);
-GstTagList *        gst_tag_list_new                    (const gchar *tag,
+GstTagList *        gst_tag_list_new                    (const gchar *tag,
                                                          ...);
-GstTagList *        gst_tag_list_new_empty              (void);
-GstTagList *        gst_tag_list_new_valist             (va_list var_args);
-GstTagList *        gst_tag_list_new_from_string        (const gchar *str);
-gchar *             gst_tag_list_to_string              (const GstTagList *list);
-gboolean            gst_is_tag_list                     (gconstpointer p);
-gboolean            gst_tag_list_is_empty               (const GstTagList *list);
-gboolean            gst_tag_list_is_equal               (const GstTagList *list1,
-                                                         const GstTagList *list2);
-GstTagList *        gst_tag_list_copy                   (const GstTagList *list);
-void                gst_tag_list_insert                 (GstTagList *into,
-                                                         const GstTagList *from,
+GstTagList *        gst_tag_list_new_empty              (void);
+GstTagList *        gst_tag_list_new_valist             (va_list var_args);
+GstTagList *        gst_tag_list_new_from_string        (const gchar *str);
+gchar *             gst_tag_list_to_string              (const GstTagList *list);
+gboolean            gst_tag_list_is_empty               (const GstTagList *list);
+gboolean            gst_tag_list_is_equal               (const GstTagList *list1,
+                                                         const GstTagList *list2);
+GstTagList *        gst_tag_list_copy                   (const GstTagList *taglist);
+GstTagList *        gst_tag_list_ref                    (GstTagList *taglist);
+void                gst_tag_list_unref                  (GstTagList *taglist);
+#define             gst_tag_list_is_writable            (taglist)
+#define             gst_tag_list_make_writable          (taglist)
+void                gst_tag_list_insert                 (GstTagList *into,
+                                                         const GstTagList *from,
                                                          GstTagMergeMode mode);
-GstTagList *        gst_tag_list_merge                  (const GstTagList *list1,
-                                                         const GstTagList *list2,
+GstTagList *        gst_tag_list_merge                  (const GstTagList *list1,
+                                                         const GstTagList *list2,
                                                          GstTagMergeMode mode);
-void                gst_tag_list_free                   (GstTagList *list);
-guint               gst_tag_list_get_tag_size           (const GstTagList *list,
+guint               gst_tag_list_get_tag_size           (const GstTagList *list,
                                                          const gchar *tag);
-gint                gst_tag_list_n_tags                 (const GstTagList *list);
-const gchar *       gst_tag_list_nth_tag_name           (const GstTagList *list,
+gint                gst_tag_list_n_tags                 (const GstTagList *list);
+const gchar *       gst_tag_list_nth_tag_name           (const GstTagList *list,
                                                          guint index);
-void                gst_tag_list_add                    (GstTagList *list,
+void                gst_tag_list_add                    (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          ...);
-void                gst_tag_list_add_value              (GstTagList *list,
+void                gst_tag_list_add_value              (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          const GValue *value);
-void                gst_tag_list_add_values             (GstTagList *list,
+void                gst_tag_list_add_values             (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          ...);
-void                gst_tag_list_add_valist             (GstTagList *list,
+void                gst_tag_list_add_valist             (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          va_list var_args);
-void                gst_tag_list_add_valist_values      (GstTagList *list,
+void                gst_tag_list_add_valist_values      (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          va_list var_args);
-void                gst_tag_list_remove_tag             (GstTagList *list,
+void                gst_tag_list_remove_tag             (GstTagList *list,
                                                          const gchar *tag);
-void                gst_tag_list_foreach                (const GstTagList *list,
+void                gst_tag_list_foreach                (const GstTagList *list,
                                                          GstTagForeachFunc func,
                                                          gpointer user_data);
-const GValue *      gst_tag_list_get_value_index        (const GstTagList *list,
+const GValue *      gst_tag_list_get_value_index        (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index);
 gboolean            gst_tag_list_copy_value             (GValue *dest,
-                                                         const GstTagList *list,
+                                                         const GstTagList *list,
                                                          const gchar *tag);
-gboolean            gst_tag_list_get_boolean            (const GstTagList *list,
+gboolean            gst_tag_list_get_boolean            (const GstTagList *list,
                                                          const gchar *tag,
                                                          gboolean *value);
-gboolean            gst_tag_list_get_boolean_index      (const GstTagList *list,
+gboolean            gst_tag_list_get_boolean_index      (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gboolean *value);
-gboolean            gst_tag_list_get_int                (const GstTagList *list,
+gboolean            gst_tag_list_get_int                (const GstTagList *list,
                                                          const gchar *tag,
                                                          gint *value);
-gboolean            gst_tag_list_get_int_index          (const GstTagList *list,
+gboolean            gst_tag_list_get_int_index          (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gint *value);
-gboolean            gst_tag_list_get_uint               (const GstTagList *list,
+gboolean            gst_tag_list_get_uint               (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint *value);
-gboolean            gst_tag_list_get_uint_index         (const GstTagList *list,
+gboolean            gst_tag_list_get_uint_index         (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          guint *value);
-gboolean            gst_tag_list_get_int64              (const GstTagList *list,
+gboolean            gst_tag_list_get_int64              (const GstTagList *list,
                                                          const gchar *tag,
                                                          gint64 *value);
-gboolean            gst_tag_list_get_int64_index        (const GstTagList *list,
+gboolean            gst_tag_list_get_int64_index        (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gint64 *value);
-gboolean            gst_tag_list_get_uint64             (const GstTagList *list,
+gboolean            gst_tag_list_get_uint64             (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint64 *value);
-gboolean            gst_tag_list_get_uint64_index       (const GstTagList *list,
+gboolean            gst_tag_list_get_uint64_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          guint64 *value);
-gboolean            gst_tag_list_get_float              (const GstTagList *list,
+gboolean            gst_tag_list_get_float              (const GstTagList *list,
                                                          const gchar *tag,
                                                          gfloat *value);
-gboolean            gst_tag_list_get_float_index        (const GstTagList *list,
+gboolean            gst_tag_list_get_float_index        (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gfloat *value);
-gboolean            gst_tag_list_get_double             (const GstTagList *list,
+gboolean            gst_tag_list_get_double             (const GstTagList *list,
                                                          const gchar *tag,
                                                          gdouble *value);
-gboolean            gst_tag_list_get_double_index       (const GstTagList *list,
+gboolean            gst_tag_list_get_double_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gdouble *value);
-gboolean            gst_tag_list_get_string             (const GstTagList *list,
+gboolean            gst_tag_list_get_string             (const GstTagList *list,
                                                          const gchar *tag,
                                                          gchar **value);
-gboolean            gst_tag_list_get_string_index       (const GstTagList *list,
+gboolean            gst_tag_list_get_string_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gchar **value);
-gboolean            gst_tag_list_peek_string_index      (const GstTagList *list,
+gboolean            gst_tag_list_peek_string_index      (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          const gchar **value);
-gboolean            gst_tag_list_get_pointer            (const GstTagList *list,
+gboolean            gst_tag_list_get_pointer            (const GstTagList *list,
                                                          const gchar *tag,
                                                          gpointer *value);
-gboolean            gst_tag_list_get_pointer_index      (const GstTagList *list,
+gboolean            gst_tag_list_get_pointer_index      (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gpointer *value);
-gboolean            gst_tag_list_get_date               (const GstTagList *list,
+gboolean            gst_tag_list_get_date               (const GstTagList *list,
                                                          const gchar *tag,
                                                          GDate **value);
-gboolean            gst_tag_list_get_date_index         (const GstTagList *list,
+gboolean            gst_tag_list_get_date_index         (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          GDate **value);
-gboolean            gst_tag_list_get_date_time          (const GstTagList *list,
+gboolean            gst_tag_list_get_date_time          (const GstTagList *list,
                                                          const gchar *tag,
                                                          GstDateTime **value);
-gboolean            gst_tag_list_get_date_time_index    (const GstTagList *list,
+gboolean            gst_tag_list_get_date_time_index    (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          GstDateTime **value);
-gboolean            gst_tag_list_get_buffer             (const GstTagList *list,
+gboolean            gst_tag_list_get_buffer             (const GstTagList *list,
                                                          const gchar *tag,
                                                          GstBuffer **value);
-gboolean            gst_tag_list_get_buffer_index       (const GstTagList *list,
+gboolean            gst_tag_list_get_buffer_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          GstBuffer **value);
@@ -303,11 +311,21 @@ Last reviewed on 2009-06-09 (0.10.23)
 

Details

-

GstTagList

-
typedef struct _GstTagList GstTagList;
+

struct GstTagList

+
struct GstTagList {
+  GstMiniObject mini_object;
+};
+

-Opaque GstTagList data structure. +Object describing tags / metadata.

+
++ + + + +

GstMiniObject mini_object;

the parent type

@@ -336,7 +354,7 @@ In the table below this is shown for the cases that a tag exists in the list

-

Table 1. merge mode

+

Table 1. merge mode

@@ -494,7 +512,7 @@ Extra tag flags used when registering tags.

GstTagForeachFunc ()

-
void                (*GstTagForeachFunc)                (const GstTagList *list,
+
void                (*GstTagForeachFunc)                (const GstTagList *list,
                                                          const gchar *tag,
                                                          gpointer user_data);

@@ -506,7 +524,7 @@ not modify the tag list.

- @@ -1073,7 +1091,7 @@ code. It is undefined what language or locale the language name is in.
#define GST_TAG_IMAGE                  "image"
 

-image (sample) (sample caps should specify the content type and preferably +image (sample) (sample taglist should specify the content type and preferably also set "image-type" field as GstTagImageType)

Since 0.10.6

@@ -1085,7 +1103,7 @@ also set "image-type" field as Since 0.10.7

@@ -1095,7 +1113,7 @@ image that is meant for preview purposes, e.g. small icon-sized version
#define GST_TAG_ATTACHMENT             "attachment"
 

-generic file attachment (sample) (sample caps should specify the content +generic file attachment (sample) (sample taglist should specify the content type and if possible set "filename" to the file name of the attachment)

@@ -1484,6 +1502,54 @@ Two default merge functions are provided:
+

gst_tag_register_static ()

+
void                gst_tag_register_static             (const gchar *name,
+                                                         GstTagFlag flag,
+                                                         GType type,
+                                                         const gchar *nick,
+                                                         const gchar *blurb,
+                                                         GstTagMergeFunc func);
+

+Registers a new tag type for the use with GStreamer's type system. +

+

+Same as gst_tag_register(), but name, nick, and blurb must be +static strings or inlined strings, as they will not be copied. (GStreamer +plugins will be made resident once loaded, so this function can be used +even from dynamically loaded plugins.) +

+

list :

the GstTagList +the GstTagList
++ + + + + + + + + + + + + + + + + + + + + + + + + + +

name :

the name or identifier string (string constant)

flag :

a flag describing the type of tag info

type :

the type this data is in

nick :

human-readable name or short description (string constant)

blurb :

a human-readable description for this tag (string constant)

func :

function for merging multiple values of this tag, or NULL
+
+
+

gst_tag_merge_use_first ()

void                gst_tag_merge_use_first             (GValue *dest,
                                                          const GValue *src);
@@ -1663,7 +1729,7 @@ Unfixed tags can contain lists of values.

gst_tag_list_new ()

-
GstTagList *        gst_tag_list_new                    (const gchar *tag,
+
GstTagList *        gst_tag_list_new                    (const gchar *tag,
                                                          ...);

Creates a new taglist and appends the values for the given tags. It expects @@ -1675,7 +1741,7 @@ function. The tag list will make copies of any arguments passed (e.g. strings, buffers).

-Free-function: gst_tag_list_free +Free-function: gst_tag_list_unref

@@ -1690,7 +1756,7 @@ Free-function: gst_tag_list_free - @@ -1701,12 +1767,12 @@ when no longer needed. [

gst_tag_list_new_empty ()

-
GstTagList *        gst_tag_list_new_empty              (void);
+
GstTagList *        gst_tag_list_new_empty              (void);

Creates a new empty GstTagList.

-Free-function: gst_tag_list_free +Free-function: gst_tag_list_unref

Returns :

a new GstTagList. Free with gst_tag_list_free() +a new GstTagList. Free with gst_tag_list_unref() when no longer needed. [transfer full]
@@ -1720,13 +1786,13 @@ Free-function: gst_tag_list_free

gst_tag_list_new_valist ()

-
GstTagList *        gst_tag_list_new_valist             (va_list var_args);
+
GstTagList *        gst_tag_list_new_valist             (va_list var_args);

Just like gst_tag_list_new(), only that it takes a va_list argument. Useful mostly for language bindings.

-Free-function: gst_tag_list_free +Free-function: gst_tag_list_unref

@@ -1737,7 +1803,7 @@ Free-function: gst_tag_list_free - @@ -1748,7 +1814,7 @@ when no longer needed. [

gst_tag_list_new_from_string ()

-
GstTagList *        gst_tag_list_new_from_string        (const gchar *str);
+
GstTagList *        gst_tag_list_new_from_string        (const gchar *str);

Deserializes a tag list.

@@ -1762,7 +1828,7 @@ Deserializes a tag list.
- +

Returns :

a new GstTagList. Free with gst_tag_list_free() +a new GstTagList. Free with gst_tag_list_unref() when no longer needed. [transfer full]

Returns :

a new GstTagList, or NULL in case of an error.a new GstTagList, or NULL in case of an error.
@@ -1771,7 +1837,7 @@ Deserializes a tag list.

gst_tag_list_to_string ()

-
gchar *             gst_tag_list_to_string              (const GstTagList *list);
+
gchar *             gst_tag_list_to_string              (const GstTagList *list);

Serializes a tag list to a string.

@@ -1780,7 +1846,7 @@ Serializes a tag list to a string.

list :

a GstTagList +a GstTagList
- - + + - +

p :

Object that might be a taglist

list :

A GstTagList.

Returns :

TRUE, if the given pointer is a taglistTRUE if the taglist is empty, otherwise FALSE.
+

Since 0.10.11


-

gst_tag_list_is_empty ()

-
gboolean            gst_tag_list_is_empty               (const GstTagList *list);
+

gst_tag_list_is_equal ()

+
gboolean            gst_tag_list_is_equal               (const GstTagList *list1,
+                                                         const GstTagList *list2);

-Checks if the given taglist is empty. +Checks if the two given taglists are equal.

- - + + + + + + - +

list :

A GstTagList.

list1 :

a GstTagList.

list2 :

a GstTagList.

Returns :

TRUE if the taglist is empty, otherwise FALSE.TRUE if the taglists are equal, otherwise FALSE
-

Since 0.10.11

+

Since 0.10.36


-

gst_tag_list_is_equal ()

-
gboolean            gst_tag_list_is_equal               (const GstTagList *list1,
-                                                         const GstTagList *list2);
+

gst_tag_list_copy ()

+
GstTagList *        gst_tag_list_copy                   (const GstTagList *taglist);

-Checks if the two given taglists are equal. +Creates a new GstTagList as a copy of the old taglist. The new taglist +will have a refcount of 1, owned by the caller, and will be writable as +a result. +

+

+Note that this function is the semantic equivalent of a gst_tag_list_ref() +followed by a gst_tag_list_make_writable(). If you only want to hold on to a +reference to the data, you should use gst_tag_list_ref(). +

+

+When you are finished with the taglist, call gst_tag_list_unref() on it.

- - + + - - + + + + +

list1 :

a GstTagList.

taglist :

a GstTagList.

list2 :

a GstTagList.

Returns :

the new GstTagList +
+
+
+
+

gst_tag_list_ref ()

+
GstTagList *        gst_tag_list_ref                    (GstTagList *taglist);
+

+Add a reference to a GstTagList mini object. +

+

+From this point on, until the caller calls gst_tag_list_unref() or +gst_tag_list_make_writable(), it is guaranteed that the taglist object will +not change. To use a GstTagList object, you must always have a refcount on +it -- either the one made implicitly by e.g. gst_tag_list_new(), or via +taking one explicitly with this function. +

+
++ + + + - +

taglist :

the GstTagList to reference

Returns :

TRUE if the taglists are equal, otherwise FALSEthe same GstTagList mini object.
-

Since 0.10.36


-

gst_tag_list_copy ()

-
GstTagList *        gst_tag_list_copy                   (const GstTagList *list);
+

gst_tag_list_unref ()

+
void                gst_tag_list_unref                  (GstTagList *taglist);

-Copies a given GstTagList. +Unref a GstTagList, and and free all its memory when the refcount reaches 0.

+
++ + + + +

taglist :

a GstTagList.
+
+
+
+

gst_tag_list_is_writable()

+
#define gst_tag_list_is_writable(taglist)    gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (taglist))
+

-Free-function: gst_tag_list_free +Tests if you can safely modify taglist. It is only safe to modify taglist +when there is only one owner of the taglist - ie, the refcount is 1. +

+
++ + + + +

taglist :

a GstTagList +
+
+
+
+

gst_tag_list_make_writable()

+
#define gst_tag_list_make_writable(taglist)   GST_TAG_LIST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (taglist)))
+
+

+Returns a writable copy of taglist. +

+

+If there is only one reference count on taglist, the caller must be the +owner, and so this function will return the taglist object unchanged. If on +the other hand there is more than one reference on the object, a new taglist +object will be returned (which will be a copy of taglist). The caller's +reference on taglist will be removed, and instead the caller will own a +reference to the returned object. +

+

+In short, this function unrefs the taglist in the argument and refs the +taglist that it returns. Don't access the argument after calling this +function. See also: gst_tag_list_ref().

- - + + - @@ -1890,8 +2041,8 @@ Free-function: gst_tag_list_free

gst_tag_list_insert ()

-
void                gst_tag_list_insert                 (GstTagList *into,
-                                                         const GstTagList *from,
+
void                gst_tag_list_insert                 (GstTagList *into,
+                                                         const GstTagList *from,
                                                          GstTagMergeMode mode);

Inserts the tags of the from list into the first list using the given mode. @@ -1917,15 +2068,15 @@ Inserts the tags of the from list into t


gst_tag_list_merge ()

-
GstTagList *        gst_tag_list_merge                  (const GstTagList *list1,
-                                                         const GstTagList *list2,
+
GstTagList *        gst_tag_list_merge                  (const GstTagList *list1,
+                                                         const GstTagList *list2,
                                                          GstTagMergeMode mode);

Merges the two given lists into a new list. If one of the lists is NULL, a copy of the other is returned. If both lists are NULL, NULL is returned.

-Free-function: gst_tag_list_free +Free-function: gst_tag_list_unref

list :

list to copy

taglist :

a GstTagList. [transfer full] +

Returns :

copy of the given list. [transfer full] +a writable taglist which may or may not be the +same as taglist. [transfer full]
@@ -1952,24 +2103,8 @@ Free-function: gst_tag_list_free
-

gst_tag_list_free ()

-
void                gst_tag_list_free                   (GstTagList *list);
-

-Frees the given list and all associated values. -

-
-- - - - -

list :

the list to free. [in][transfer full] -
-
-
-

gst_tag_list_get_tag_size ()

-
guint               gst_tag_list_get_tag_size           (const GstTagList *list,
+
guint               gst_tag_list_get_tag_size           (const GstTagList *list,
                                                          const gchar *tag);

Checks how many value are stored in this tag list for the given tag. @@ -1995,7 +2130,7 @@ Checks how many value are stored in this tag list for the given tag.


gst_tag_list_n_tags ()

-
gint                gst_tag_list_n_tags                 (const GstTagList *list);
+
gint                gst_tag_list_n_tags                 (const GstTagList *list);

Get the number of tags in list.

@@ -2004,7 +2139,7 @@ Get the number of tags in list.

list :

-A GstTagList. +A GstTagList.

Returns :

@@ -2016,7 +2151,7 @@ Get the number of tags in list.

gst_tag_list_nth_tag_name ()

-
const gchar *       gst_tag_list_nth_tag_name           (const GstTagList *list,
+
const gchar *       gst_tag_list_nth_tag_name           (const GstTagList *list,
                                                          guint index);

Get the name of the tag in list at index. @@ -2026,7 +2161,7 @@ Get the name of the tag in list at

list :

-A GstTagList. +A GstTagList.

index :

@@ -2042,7 +2177,7 @@ Get the name of the tag in list at

gst_tag_list_add ()

-
void                gst_tag_list_add                    (GstTagList *list,
+
void                gst_tag_list_add                    (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          ...);
@@ -2074,7 +2209,7 @@ Sets the values for the given tags using the specified mode.

gst_tag_list_add_value ()

-
void                gst_tag_list_add_value              (GstTagList *list,
+
void                gst_tag_list_add_value              (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          const GValue *value);
@@ -2107,7 +2242,7 @@ Sets the GValue for a given tag using the specified mode.

gst_tag_list_add_values ()

-
void                gst_tag_list_add_values             (GstTagList *list,
+
void                gst_tag_list_add_values             (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          ...);
@@ -2139,7 +2274,7 @@ Sets the GValues for the given tags using the specified mode.

gst_tag_list_add_valist ()

-
void                gst_tag_list_add_valist             (GstTagList *list,
+
void                gst_tag_list_add_valist             (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          va_list var_args);
@@ -2171,7 +2306,7 @@ Sets the values for the given tags using the specified mode.

gst_tag_list_add_valist_values ()

-
void                gst_tag_list_add_valist_values      (GstTagList *list,
+
void                gst_tag_list_add_valist_values      (GstTagList *list,
                                                          GstTagMergeMode mode,
                                                          const gchar *tag,
                                                          va_list var_args);
@@ -2203,7 +2338,7 @@ Sets the GValues for the given tags using the specified mode.

gst_tag_list_remove_tag ()

-
void                gst_tag_list_remove_tag             (GstTagList *list,
+
void                gst_tag_list_remove_tag             (GstTagList *list,
                                                          const gchar *tag);

Removes the given tag from the taglist. @@ -2225,7 +2360,7 @@ Removes the given tag from the taglist.


gst_tag_list_foreach ()

-
void                gst_tag_list_foreach                (const GstTagList *list,
+
void                gst_tag_list_foreach                (const GstTagList *list,
                                                          GstTagForeachFunc func,
                                                          gpointer user_data);

@@ -2255,7 +2390,7 @@ is no tag, the function won't be called at all.


gst_tag_list_get_value_index ()

-
const GValue *      gst_tag_list_get_value_index        (const GstTagList *list,
+
const GValue *      gst_tag_list_get_value_index        (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index);

@@ -2267,7 +2402,7 @@ list.

list :

-a GstTagList +a GstTagList @@ -2291,7 +2426,7 @@ tag wasn't available or the tag doesn't have as many entries.

gst_tag_list_copy_value ()

gboolean            gst_tag_list_copy_value             (GValue *dest,
-                                                         const GstTagList *list,
+                                                         const GstTagList *list,
                                                          const gchar *tag);

Copies the contents for the given tag into the value, @@ -2326,7 +2461,7 @@ given list.


gst_tag_list_get_boolean ()

-
gboolean            gst_tag_list_get_boolean            (const GstTagList *list,
+
gboolean            gst_tag_list_get_boolean            (const GstTagList *list,
                                                          const gchar *tag,
                                                          gboolean *value);

@@ -2338,7 +2473,7 @@ into one if multiple values are associated with the tag.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2360,7 +2495,7 @@ given list.

gst_tag_list_get_boolean_index ()

-
gboolean            gst_tag_list_get_boolean_index      (const GstTagList *list,
+
gboolean            gst_tag_list_get_boolean_index      (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gboolean *value);
@@ -2373,7 +2508,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2399,7 +2534,7 @@ given list.

gst_tag_list_get_int ()

-
gboolean            gst_tag_list_get_int                (const GstTagList *list,
+
gboolean            gst_tag_list_get_int                (const GstTagList *list,
                                                          const gchar *tag,
                                                          gint *value);

@@ -2411,7 +2546,7 @@ into one if multiple values are associated with the tag.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2433,7 +2568,7 @@ given list.

gst_tag_list_get_int_index ()

-
gboolean            gst_tag_list_get_int_index          (const GstTagList *list,
+
gboolean            gst_tag_list_get_int_index          (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gint *value);
@@ -2446,7 +2581,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2472,7 +2607,7 @@ given list.

gst_tag_list_get_uint ()

-
gboolean            gst_tag_list_get_uint               (const GstTagList *list,
+
gboolean            gst_tag_list_get_uint               (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint *value);

@@ -2484,7 +2619,7 @@ into one if multiple values are associated with the tag.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2506,7 +2641,7 @@ given list.

gst_tag_list_get_uint_index ()

-
gboolean            gst_tag_list_get_uint_index         (const GstTagList *list,
+
gboolean            gst_tag_list_get_uint_index         (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          guint *value);
@@ -2519,7 +2654,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2545,14 +2680,14 @@ given list.

gst_tag_list_get_int64 ()

-
gboolean            gst_tag_list_get_int64              (const GstTagList *list,
+
gboolean            gst_tag_list_get_int64              (const GstTagList *list,
                                                          const gchar *tag,
                                                          gint64 *value);

gst_tag_list_get_int64_index ()

-
gboolean            gst_tag_list_get_int64_index        (const GstTagList *list,
+
gboolean            gst_tag_list_get_int64_index        (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gint64 *value);
@@ -2565,7 +2700,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2591,7 +2726,7 @@ given list.

gst_tag_list_get_uint64 ()

-
gboolean            gst_tag_list_get_uint64             (const GstTagList *list,
+
gboolean            gst_tag_list_get_uint64             (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint64 *value);

@@ -2603,7 +2738,7 @@ into one if multiple values are associated with the tag.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2625,7 +2760,7 @@ given list.

gst_tag_list_get_uint64_index ()

-
gboolean            gst_tag_list_get_uint64_index       (const GstTagList *list,
+
gboolean            gst_tag_list_get_uint64_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          guint64 *value);
@@ -2638,7 +2773,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2664,7 +2799,7 @@ given list.

gst_tag_list_get_float ()

-
gboolean            gst_tag_list_get_float              (const GstTagList *list,
+
gboolean            gst_tag_list_get_float              (const GstTagList *list,
                                                          const gchar *tag,
                                                          gfloat *value);

@@ -2676,7 +2811,7 @@ into one if multiple values are associated with the tag.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2698,7 +2833,7 @@ given list.

gst_tag_list_get_float_index ()

-
gboolean            gst_tag_list_get_float_index        (const GstTagList *list,
+
gboolean            gst_tag_list_get_float_index        (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gfloat *value);
@@ -2711,7 +2846,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2737,7 +2872,7 @@ given list.

gst_tag_list_get_double ()

-
gboolean            gst_tag_list_get_double             (const GstTagList *list,
+
gboolean            gst_tag_list_get_double             (const GstTagList *list,
                                                          const gchar *tag,
                                                          gdouble *value);

@@ -2749,7 +2884,7 @@ into one if multiple values are associated with the tag.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2771,7 +2906,7 @@ given list.

gst_tag_list_get_double_index ()

-
gboolean            gst_tag_list_get_double_index       (const GstTagList *list,
+
gboolean            gst_tag_list_get_double_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gdouble *value);
@@ -2784,7 +2919,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2810,7 +2945,7 @@ given list.

gst_tag_list_get_string ()

-
gboolean            gst_tag_list_get_string             (const GstTagList *list,
+
gboolean            gst_tag_list_get_string             (const GstTagList *list,
                                                          const gchar *tag,
                                                          gchar **value);

@@ -2834,7 +2969,7 @@ Free-function: g_free

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2856,7 +2991,7 @@ given list.

gst_tag_list_get_string_index ()

-
gboolean            gst_tag_list_get_string_index       (const GstTagList *list,
+
gboolean            gst_tag_list_get_string_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gchar **value);
@@ -2877,7 +3012,7 @@ Free-function: g_free

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2903,7 +3038,7 @@ given list.

gst_tag_list_peek_string_index ()

-
gboolean            gst_tag_list_peek_string_index      (const GstTagList *list,
+
gboolean            gst_tag_list_peek_string_index      (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          const gchar **value);
@@ -2921,7 +3056,7 @@ be non-NULL and non-empty.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2947,7 +3082,7 @@ given list.

gst_tag_list_get_pointer ()

-
gboolean            gst_tag_list_get_pointer            (const GstTagList *list,
+
gboolean            gst_tag_list_get_pointer            (const GstTagList *list,
                                                          const gchar *tag,
                                                          gpointer *value);

@@ -2959,7 +3094,7 @@ into one if multiple values are associated with the tag.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -2981,7 +3116,7 @@ given list.

gst_tag_list_get_pointer_index ()

-
gboolean            gst_tag_list_get_pointer_index      (const GstTagList *list,
+
gboolean            gst_tag_list_get_pointer_index      (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          gpointer *value);
@@ -2994,7 +3129,7 @@ list.

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -3020,7 +3155,7 @@ given list.

gst_tag_list_get_date ()

-
gboolean            gst_tag_list_get_date               (const GstTagList *list,
+
gboolean            gst_tag_list_get_date               (const GstTagList *list,
                                                          const gchar *tag,
                                                          GDate **value);

@@ -3036,7 +3171,7 @@ Free-function: g_date_free

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -3059,7 +3194,7 @@ given list or if it was

gst_tag_list_get_date_index ()

-
gboolean            gst_tag_list_get_date_index         (const GstTagList *list,
+
gboolean            gst_tag_list_get_date_index         (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          GDate **value);
@@ -3076,7 +3211,7 @@ Free-function: g_date_free

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -3102,7 +3237,7 @@ given list or if it was

gst_tag_list_get_date_time ()

-
gboolean            gst_tag_list_get_date_time          (const GstTagList *list,
+
gboolean            gst_tag_list_get_date_time          (const GstTagList *list,
                                                          const gchar *tag,
                                                          GstDateTime **value);

@@ -3118,7 +3253,7 @@ Free-function: gst_date_time_unref

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -3142,7 +3277,7 @@ thegiven list or if it was

gst_tag_list_get_date_time_index ()

-
gboolean            gst_tag_list_get_date_time_index    (const GstTagList *list,
+
gboolean            gst_tag_list_get_date_time_index    (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          GstDateTime **value);
@@ -3159,7 +3294,7 @@ Free-function: gst_date_time_unref

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -3186,7 +3321,7 @@ given list or if it was

gst_tag_list_get_buffer ()

-
gboolean            gst_tag_list_get_buffer             (const GstTagList *list,
+
gboolean            gst_tag_list_get_buffer             (const GstTagList *list,
                                                          const gchar *tag,
                                                          GstBuffer **value);

@@ -3202,7 +3337,7 @@ Free-function: gst_buffer_unref

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

@@ -3226,7 +3361,7 @@ given list or if it was

gst_tag_list_get_buffer_index ()

-
gboolean            gst_tag_list_get_buffer_index       (const GstTagList *list,
+
gboolean            gst_tag_list_get_buffer_index       (const GstTagList *list,
                                                          const gchar *tag,
                                                          guint index,
                                                          GstBuffer **value);
@@ -3243,7 +3378,7 @@ Free-function: gst_buffer_unref

list :

-a GstTagList to get the tag from +a GstTagList to get the tag from

tag :

diff --git a/docs/gst/html/gstreamer-GstToc.html b/docs/gst/html/gstreamer-GstToc.html index 716c27c..f7135f9 100644 --- a/docs/gst/html/gstreamer-GstToc.html +++ b/docs/gst/html/gstreamer-GstToc.html @@ -47,7 +47,7 @@ enum const gchar *uid); GstTocEntry * gst_toc_entry_new_with_pad (GstTocEntryType type, const gchar *uid, - gpointer pad); + GstPad *pad); void gst_toc_entry_free (GstTocEntry *entry); GstToc * gst_toc_new (void); void gst_toc_free (GstToc *toc); @@ -61,6 +61,7 @@ enum void gst_toc_entry_set_start_stop (GstTocEntry *entry, gint64 start, gint64 stop); +const gchar * gst_toc_entry_type_get_nick (GstTocEntryType type);
@@ -127,7 +128,7 @@ Definition of TOC structure. list of GstTocEntry entries of the TOC. -

GstTagList *tags;

+

GstTagList *tags;

tags related to the whole TOC. @@ -176,7 +177,7 @@ other demuxers could do something else), it should help to track updates of cert list of GstPad objects, related to this GstTocEntry. -

GstTagList *tags;

+

GstTagList *tags;

tags related to this entry. @@ -245,7 +246,7 @@ Create new

gst_toc_entry_new_with_pad ()

GstTocEntry *       gst_toc_entry_new_with_pad          (GstTocEntryType type,
                                                          const gchar *uid,
-                                                         gpointer pad);
+ GstPad *pad);

Create new GstTocEntry structure with GstPad related.

@@ -468,6 +469,28 @@ Set start and

Since 0.10.37

+
+
+

gst_toc_entry_type_get_nick ()

+
const gchar *       gst_toc_entry_type_get_nick         (GstTocEntryType type);
+

+Converts type to a string representation. +

+
++ + + + + + + + + + +

type :

a GstTocEntryType.

Returns :

Returns the human-readable type. Can be NULL if an error occurred.
+

Since 0.11.92

+

See Also

diff --git a/docs/gst/html/gstreamer.devhelp2 b/docs/gst/html/gstreamer.devhelp2 index a0e5b45..7c148fe 100644 --- a/docs/gst/html/gstreamer.devhelp2 +++ b/docs/gst/html/gstreamer.devhelp2 @@ -70,7 +70,7 @@ - + @@ -91,7 +91,7 @@ - + @@ -538,11 +538,12 @@ - + + @@ -890,7 +891,7 @@ - + @@ -1161,13 +1162,14 @@ - + + @@ -1408,7 +1410,7 @@ - + @@ -1494,6 +1496,7 @@ + @@ -1507,13 +1510,15 @@ - + + + + - @@ -1606,6 +1611,7 @@ + @@ -2150,6 +2156,7 @@ + diff --git a/docs/gst/html/index.html b/docs/gst/html/index.html index 7bf76d8..9b735b9 100644 --- a/docs/gst/html/index.html +++ b/docs/gst/html/index.html @@ -15,7 +15,7 @@

- for GStreamer Core 1.0 (0.11.90.1) + for GStreamer Core 1.0 (0.11.91.1) The latest version of this documentation can be found on-line at http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/.

diff --git a/docs/gst/html/index.sgml b/docs/gst/html/index.sgml index 9aebeb6..cabc165 100644 --- a/docs/gst/html/index.sgml +++ b/docs/gst/html/index.sgml @@ -648,6 +648,7 @@ + @@ -1280,6 +1281,7 @@ + @@ -1629,6 +1631,7 @@ + @@ -2046,6 +2049,7 @@ + @@ -2059,13 +2063,15 @@ - + + + + - @@ -2185,6 +2191,7 @@ + diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in index 980ba1a..7b7f275 100644 --- a/docs/libs/Makefile.in +++ b/docs/libs/Makefile.in @@ -69,6 +69,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/common/gtk-doc.mak \ $(top_srcdir)/common/upload-doc.mak @@ -240,6 +241,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -392,7 +397,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/libs/html/GstBaseSink.html b/docs/libs/html/GstBaseSink.html index 8aa1d9f..ccdf82e 100644 --- a/docs/libs/html/GstBaseSink.html +++ b/docs/libs/html/GstBaseSink.html @@ -329,6 +329,10 @@ The opaque unlock(), such as cleari subclasses should always first chain up to the default implementation. +

prepare ()

+Called to prepare the buffer for render and preroll. This +function is called before synchronisation is performed. + + +

prepare_list ()

+Called to prepare the buffer list for render_list. This +function is called before synchronisation is performed. + +

preroll ()

-Called to present the preroll buffer if desired +Called to present the preroll buffer if desired.

render ()

diff --git a/docs/libs/html/GstBaseSrc.html b/docs/libs/html/GstBaseSrc.html index cedaec4..067e0a7 100644 --- a/docs/libs/html/GstBaseSrc.html +++ b/docs/libs/html/GstBaseSrc.html @@ -236,7 +236,7 @@ should install a pad template in its class_init function, like so:

-

Controlled shutdown of live sources in applications

+

Controlled shutdown of live sources in applications

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 diff --git a/docs/libs/html/GstBaseTransform.html b/docs/libs/html/GstBaseTransform.html index 743b1f7..2c89ce9 100644 --- a/docs/libs/html/GstBaseTransform.html +++ b/docs/libs/html/GstBaseTransform.html @@ -111,7 +111,7 @@ It provides for:

-

Use Cases

+

Use Cases

    @@ -251,7 +251,7 @@ It provides for:


    -

    Sub-class settable flags on GstBaseTransform

    +

    Sub-class settable flags on GstBaseTransform

      diff --git a/docs/libs/html/gstreamer-libs.devhelp2 b/docs/libs/html/gstreamer-libs.devhelp2 index f1f78d5..a6b28f9 100644 --- a/docs/libs/html/gstreamer-libs.devhelp2 +++ b/docs/libs/html/gstreamer-libs.devhelp2 @@ -64,7 +64,7 @@ - + @@ -129,8 +129,8 @@ - - + + diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html index b3cb126..bf26df4 100644 --- a/docs/libs/html/index.html +++ b/docs/libs/html/index.html @@ -15,7 +15,7 @@

      - for GStreamer Library 1.0 (0.11.90.1) + for GStreamer Library 1.0 (0.11.91.1) The latest version of this documentation can be found on-line at http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/.

      diff --git a/docs/manual/Makefile.in b/docs/manual/Makefile.in index 5546c4f..87fcbf8 100644 --- a/docs/manual/Makefile.in +++ b/docs/manual/Makefile.in @@ -73,6 +73,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = README $(srcdir)/../htmlinstall.mak \ $(srcdir)/../manuals.mak $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/common/upload-doc.mak @@ -271,6 +272,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -423,7 +428,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in index 34b0949..611fd09 100644 --- a/docs/plugins/Makefile.in +++ b/docs/plugins/Makefile.in @@ -67,6 +67,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/common/gtk-doc-plugins.mak \ $(top_srcdir)/common/upload-doc.mak @@ -236,6 +237,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -388,7 +393,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/plugins/gstreamer-plugins.args b/docs/plugins/gstreamer-plugins.args index bf93dad..6c8b21a 100644 --- a/docs/plugins/gstreamer-plugins.args +++ b/docs/plugins/gstreamer-plugins.args @@ -1084,7 +1084,27 @@ rw Sync Streams -Synchronize inactive streams to the running time of the active stream. +Synchronize inactive streams to the running time of the active stream or to the current clock. TRUE + +GstInputSelector::cache-buffers +gboolean + +rw +Cache Buffers +Cache buffers for active-pad. +FALSE + + + +GstInputSelector::sync-mode +GstInputSelectorSyncMode + +rw +Sync mode +Behavior in sync-streams mode. +Sync using the current active segment + + diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html index 4ce3974..2d6be16 100644 --- a/docs/plugins/html/ch01.html +++ b/docs/plugins/html/ch01.html @@ -21,7 +21,7 @@

      -gstreamer Elements

      +gstreamer Elements
    capsfilter — Pass data without modification, limiting formats diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html index 64c6e46..71508b0 100644 --- a/docs/plugins/html/ch02.html +++ b/docs/plugins/html/ch02.html @@ -21,7 +21,7 @@

    -gstreamer Plugins

    +gstreamer Plugins
    coreelementsstandard GStreamer elements
    diff --git a/docs/plugins/html/gstreamer-plugins-capsfilter.html b/docs/plugins/html/gstreamer-plugins-capsfilter.html index 8571db3..c3e8f2c 100644 --- a/docs/plugins/html/gstreamer-plugins-capsfilter.html +++ b/docs/plugins/html/gstreamer-plugins-capsfilter.html @@ -70,7 +70,7 @@ data format.

    -

    Example launch line

    +

    Example launch line

    @@ -88,7 +88,7 @@ data format.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -111,7 +111,7 @@ data format.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-fakesink.html b/docs/plugins/html/gstreamer-plugins-fakesink.html index f579a81..c45b9e0 100644 --- a/docs/plugins/html/gstreamer-plugins-fakesink.html +++ b/docs/plugins/html/gstreamer-plugins-fakesink.html @@ -86,7 +86,7 @@ Dummy sink that swallows everything.

    -

    Example launch line

    +

    Example launch line

    @@ -104,7 +104,7 @@ Dummy sink that swallows everything.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -127,7 +127,7 @@ Dummy sink that swallows everything.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-fakesrc.html b/docs/plugins/html/gstreamer-plugins-fakesrc.html index fd7ebbb..bdd5b83 100644 --- a/docs/plugins/html/gstreamer-plugins-fakesrc.html +++ b/docs/plugins/html/gstreamer-plugins-fakesrc.html @@ -102,7 +102,7 @@ basic GStreamer core functionality is:

    -

    Example launch line

    +

    Example launch line

    @@ -124,7 +124,7 @@ Last reviewed on 2008-06-20 (0.10.21)

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -147,7 +147,7 @@ Last reviewed on 2008-06-20 (0.10.21)
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-fdsink.html b/docs/plugins/html/gstreamer-plugins-fdsink.html index 1feab11..1c74c3a 100644 --- a/docs/plugins/html/gstreamer-plugins-fdsink.html +++ b/docs/plugins/html/gstreamer-plugins-fdsink.html @@ -85,7 +85,7 @@ Last reviewed on 2006-04-28 (0.10.6)

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -108,7 +108,7 @@ Last reviewed on 2006-04-28 (0.10.6)
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-fdsrc.html b/docs/plugins/html/gstreamer-plugins-fdsrc.html index 6326bb7..e0519c8 100644 --- a/docs/plugins/html/gstreamer-plugins-fdsrc.html +++ b/docs/plugins/html/gstreamer-plugins-fdsrc.html @@ -97,7 +97,7 @@ The message's structure contains one field:

    -

    Example launch line

    +

    Example launch line

    @@ -119,7 +119,7 @@ Last reviewed on 2008-06-20 (0.10.21)

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -142,7 +142,7 @@ Last reviewed on 2008-06-20 (0.10.21)
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-filesink.html b/docs/plugins/html/gstreamer-plugins-filesink.html index 3409245..8797496 100644 --- a/docs/plugins/html/gstreamer-plugins-filesink.html +++ b/docs/plugins/html/gstreamer-plugins-filesink.html @@ -80,7 +80,7 @@ Write incoming data to a file in the local file system.

    -

    Example launch line

    +

    Example launch line

    @@ -98,7 +98,7 @@ Write incoming data to a file in the local file system.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -121,7 +121,7 @@ Write incoming data to a file in the local file system.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-filesrc.html b/docs/plugins/html/gstreamer-plugins-filesrc.html index d0bf096..5c8c3f0 100644 --- a/docs/plugins/html/gstreamer-plugins-filesrc.html +++ b/docs/plugins/html/gstreamer-plugins-filesrc.html @@ -82,7 +82,7 @@ Read data from a file in the local file system.

    -

    Example launch line

    +

    Example launch line

    @@ -100,7 +100,7 @@ Read data from a file in the local file system.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -123,7 +123,7 @@ Read data from a file in the local file system.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-funnel.html b/docs/plugins/html/gstreamer-plugins-funnel.html index d1bca75..4a58439 100644 --- a/docs/plugins/html/gstreamer-plugins-funnel.html +++ b/docs/plugins/html/gstreamer-plugins-funnel.html @@ -68,7 +68,7 @@ immediately when they arrive.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -91,7 +91,7 @@ immediately when they arrive.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-identity.html b/docs/plugins/html/gstreamer-plugins-identity.html index 32b5e31..6f7cbfe 100644 --- a/docs/plugins/html/gstreamer-plugins-identity.html +++ b/docs/plugins/html/gstreamer-plugins-identity.html @@ -90,7 +90,7 @@ useful diagnostic functions, such as offset and timestamp checking.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -113,7 +113,7 @@ useful diagnostic functions, such as offset and timestamp checking.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-input-selector.html b/docs/plugins/html/gstreamer-plugins-input-selector.html index 17029ce..84070e4 100644 --- a/docs/plugins/html/gstreamer-plugins-input-selector.html +++ b/docs/plugins/html/gstreamer-plugins-input-selector.html @@ -63,6 +63,8 @@ "n-pads" guint : Read "select-all" gboolean : Read / Write "sync-streams" gboolean : Read / Write + "cache-buffers" gboolean : Read / Write + "sync-mode" GstInputSelectorSyncMode : Read / Write
    @@ -103,7 +105,7 @@ properties, which users may find useful, namely:

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -126,7 +128,7 @@ properties, which users may find useful, namely:
    -

    Element Pads

    +

    Element Pads

    @@ -210,13 +212,49 @@ properties, which users may find useful, namely:
      "sync-streams"             gboolean              : Read / Write

    If set to TRUE all inactive streams will be synced to the -running time of the active stream. This makes sure that no -buffers are dropped by input-selector that might be needed -when switching the active pad. +running time of the active stream or to the current clock. +

    +

    +To make sure no buffers are dropped by input-selector +that might be needed when switching the active pad, +sync-mode should be set to "clock" and cache-buffers to TRUE.

    Default value: TRUE

    Since 0.10.36

    +
    +
    +

    The "cache-buffers" property

    +
      "cache-buffers"            gboolean              : Read / Write
    +

    +If set to TRUE and GstInputSelector:sync-streams is also set to TRUE, +the active pad will cache the buffers still considered valid (after current +running time, see sync-mode) to avoid missing frames if/when the pad is +reactivated. +

    +

    +The active pad may push more buffers than what is currently displayed/consumed +and when changing pads those buffers will be discarded and the only way to +reactivate that pad without loosing the already consumed buffers is to enable cache. +

    +

    Default value: FALSE

    +
    +
    +
    +

    The "sync-mode" property

    +
      "sync-mode"                GstInputSelectorSyncMode  : Read / Write
    +

    +Select how input-selector will sync buffers when in sync-streams mode. +

    +

    +Note that when using the "active-segment" mode, the "active-segment" may +be ahead of current clock time when switching the active pad, as the current +active pad may have pushed more buffers than what was displayed/consumed, +which may cause delays and some missing buffers. +

    +

    Default value: Sync using the current active segment

    +

    Since 0.10.36

    +

    Signal Details

    diff --git a/docs/plugins/html/gstreamer-plugins-multiqueue.html b/docs/plugins/html/gstreamer-plugins-multiqueue.html index 8b6f452..9c9ab07 100644 --- a/docs/plugins/html/gstreamer-plugins-multiqueue.html +++ b/docs/plugins/html/gstreamer-plugins-multiqueue.html @@ -83,7 +83,7 @@

    -

    +

    Multiqueue is similar to a normal GstQueue with the following additional features:

    @@ -173,7 +173,7 @@ Last reviewed on 2008-01-25 (0.10.17)

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -196,7 +196,7 @@ Last reviewed on 2008-01-25 (0.10.17)
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-output-selector.html b/docs/plugins/html/gstreamer-plugins-output-selector.html index 9740086..8eee32f 100644 --- a/docs/plugins/html/gstreamer-plugins-output-selector.html +++ b/docs/plugins/html/gstreamer-plugins-output-selector.html @@ -70,7 +70,7 @@ Direct input stream to one out of N output pads.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -93,7 +93,7 @@ Direct input stream to one out of N output pads.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html index b6d073a..f1919dc 100644 --- a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html +++ b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html @@ -28,7 +28,7 @@
    -

    Plugin Information

    +

    Plugin Information

    @@ -38,7 +38,7 @@ - + @@ -56,7 +56,7 @@

    version

    0.11.910.11.92

    run-time license

    -

    Elements

    +

    Elements

    diff --git a/docs/plugins/html/gstreamer-plugins-queue.html b/docs/plugins/html/gstreamer-plugins-queue.html index f3e00b7..68445d8 100644 --- a/docs/plugins/html/gstreamer-plugins-queue.html +++ b/docs/plugins/html/gstreamer-plugins-queue.html @@ -122,7 +122,7 @@ up. Both signals are emitted from the context of the streaming thread.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -145,7 +145,7 @@ up. Both signals are emitted from the context of the streaming thread.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-queue2.html b/docs/plugins/html/gstreamer-plugins-queue2.html index f8ddc46..4daac17 100644 --- a/docs/plugins/html/gstreamer-plugins-queue2.html +++ b/docs/plugins/html/gstreamer-plugins-queue2.html @@ -95,7 +95,7 @@ The default queue size limits are 100 buffers, 2MB of data, or two seconds worth of data, whichever is reached first.

    -If you set temp-tmpl to a value such as /tmp/gstreamer-XXXXXX, the element +If you set temp-template to a value such as /tmp/gstreamer-XXXXXX, the element will allocate a random free filename and buffer data in the file. By using this, it will buffer the entire stream data on the file independently of the queue size limits, they will only be used for buffering statistics. @@ -112,7 +112,7 @@ Last reviewed on 2009-07-10 (0.10.24)

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -135,7 +135,7 @@ Last reviewed on 2009-07-10 (0.10.24)
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-tee.html b/docs/plugins/html/gstreamer-plugins-tee.html index fca4137..5725672 100644 --- a/docs/plugins/html/gstreamer-plugins-tee.html +++ b/docs/plugins/html/gstreamer-plugins-tee.html @@ -83,7 +83,7 @@ branch would stall the other branches.

    -

    Example launch line

    +

    Example launch line

    @@ -102,7 +102,7 @@ element.

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -125,7 +125,7 @@ element.
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-typefind.html b/docs/plugins/html/gstreamer-plugins-typefind.html index 1989c0e..1711b17 100644 --- a/docs/plugins/html/gstreamer-plugins-typefind.html +++ b/docs/plugins/html/gstreamer-plugins-typefind.html @@ -90,7 +90,7 @@ Plugins can register custom typefinders by using

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -113,7 +113,7 @@ Plugins can register custom typefinders by using -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins-valve.html b/docs/plugins/html/gstreamer-plugins-valve.html index 6b72efd..41d9808 100644 --- a/docs/plugins/html/gstreamer-plugins-valve.html +++ b/docs/plugins/html/gstreamer-plugins-valve.html @@ -81,7 +81,7 @@ Documentation last reviewed on 2010-12-30 (0.10.31)

    Synopsis

    -

    Element Information

    +

    Element Information

    @@ -104,7 +104,7 @@ Documentation last reviewed on 2010-12-30 (0.10.31)
    -

    Element Pads

    +

    Element Pads

    diff --git a/docs/plugins/html/gstreamer-plugins.devhelp2 b/docs/plugins/html/gstreamer-plugins.devhelp2 index 878a7e8..5b4e071 100644 --- a/docs/plugins/html/gstreamer-plugins.devhelp2 +++ b/docs/plugins/html/gstreamer-plugins.devhelp2 @@ -26,14 +26,14 @@ - - - + + + - - - + + + @@ -57,9 +57,9 @@ - - - + + + @@ -72,19 +72,19 @@ - - + + - - - + + + - - - + + + @@ -92,19 +92,19 @@ - - - + + + - - + + - - + + @@ -120,18 +120,20 @@ - - + + + + - - - + + + @@ -145,14 +147,14 @@ - - + + - - + + @@ -170,8 +172,8 @@ - - + + @@ -187,9 +189,9 @@ - - - + + + @@ -199,16 +201,16 @@ - - + + - - + + diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html index 68cd2ef..00593f5 100644 --- a/docs/plugins/html/index.html +++ b/docs/plugins/html/index.html @@ -15,7 +15,7 @@

    - for GStreamer Core Plugins 1.0 (0.11.91) + for GStreamer Core Plugins 1.0 (0.11.92) The latest version of this documentation can be found on-line at http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/.

    diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml index 4638518..01b5927 100644 --- a/docs/plugins/html/index.sgml +++ b/docs/plugins/html/index.sgml @@ -194,6 +194,8 @@ + + diff --git a/docs/plugins/inspect/plugin-coreelements.xml b/docs/plugins/inspect/plugin-coreelements.xml index 74a4211..5795411 100644 --- a/docs/plugins/inspect/plugin-coreelements.xml +++ b/docs/plugins/inspect/plugin-coreelements.xml @@ -3,7 +3,7 @@ standard GStreamer elements ../../plugins/elements/.libs/libgstcoreelements.so libgstcoreelements.so - 0.11.91 + 0.11.92 LGPL gstreamer GStreamer source release diff --git a/docs/pwg/Makefile.in b/docs/pwg/Makefile.in index 6f684d8..e22b674 100644 --- a/docs/pwg/Makefile.in +++ b/docs/pwg/Makefile.in @@ -73,6 +73,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = $(srcdir)/../htmlinstall.mak $(srcdir)/../manuals.mak \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/common/upload-doc.mak @@ -271,6 +272,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -423,7 +428,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/slides/Makefile.in b/docs/slides/Makefile.in index 064b8fc..b244443 100644 --- a/docs/slides/Makefile.in +++ b/docs/slides/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = docs/slides DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -217,6 +218,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -369,7 +374,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/docs/xsl/Makefile.in b/docs/xsl/Makefile.in index 0325dfb..e1a64f5 100644 --- a/docs/xsl/Makefile.in +++ b/docs/xsl/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = docs/xsl DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -217,6 +218,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -369,7 +374,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/gst/Makefile.in b/gst/Makefile.in index 008347b..2e6f45d 100644 --- a/gst/Makefile.in +++ b/gst/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = gst DIST_COMMON = $(libgstreamer_@GST_API_VERSION@include_HEADERS) \ @@ -412,6 +413,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -564,7 +569,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/gst/gst.c b/gst/gst.c index d78e9ce..96c20b5 100644 --- a/gst/gst.c +++ b/gst/gst.c @@ -139,7 +139,7 @@ extern gboolean _priv_gst_disable_registry_update; #endif #ifndef GST_DISABLE_GST_DEBUG -extern const gchar *priv_gst_dump_dot_dir; +const gchar *priv_gst_dump_dot_dir; #endif /* defaults */ @@ -746,7 +746,6 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data, g_type_class_ref (gst_param_spec_fraction_get_type ()); _priv_gst_tag_initialize (); - _priv_gst_toc_initialize (); gst_parse_context_get_type (); _priv_gst_plugin_initialize (); diff --git a/gst/gst_private.h b/gst/gst_private.h index f44c6f3..c15c8fa 100644 --- a/gst/gst_private.h +++ b/gst/gst_private.h @@ -113,7 +113,6 @@ void _priv_gst_sample_initialize (void); void _priv_gst_tag_initialize (void); void _priv_gst_value_initialize (void); void _priv_gst_debug_init (void); -void _priv_gst_toc_initialize (void); /* TOC functions */ /* These functions are used to parse TOC messages, events and queries */ @@ -296,6 +295,27 @@ struct _GstPluginClass { gpointer _gst_reserved[GST_PADDING]; }; +struct _GstPluginFeature { + GstObject object; + + /*< private >*/ + gboolean loaded; + guint rank; + + const gchar *plugin_name; + GstPlugin *plugin; /* weak ref */ + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +}; + +struct _GstPluginFeatureClass { + GstObjectClass parent_class; + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +}; + #include "gsttypefind.h" struct _GstTypeFindFactory { @@ -319,6 +339,31 @@ struct _GstTypeFindFactoryClass { gpointer _gst_reserved[GST_PADDING]; }; +struct _GstElementFactory { + GstPluginFeature parent; + + GType type; /* unique GType of element or 0 if not loaded */ + + gpointer metadata; + + GList * staticpadtemplates; /* GstStaticPadTemplate list */ + guint numpadtemplates; + + /* URI interface stuff */ + GstURIType uri_type; + gchar ** uri_protocols; + + GList * interfaces; /* interface type names this element implements */ + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +}; + +struct _GstElementFactoryClass { + GstPluginFeatureClass parent_class; + + gpointer _gst_reserved[GST_PADDING]; +}; G_END_DECLS #endif /* __GST_PRIVATE_H__ */ diff --git a/gst/gstbin.c b/gst/gstbin.c index 665259e..d5ce5f6 100644 --- a/gst/gstbin.c +++ b/gst/gstbin.c @@ -2152,7 +2152,7 @@ gst_bin_element_set_state (GstBin * bin, GstElement * element, GstState next) { GstStateChangeReturn ret; - GstState pending, child_current, child_pending; + GstState child_current, child_pending; gboolean locked; GList *found; @@ -2182,17 +2182,76 @@ gst_bin_element_set_state (GstBin * bin, GstElement * element, goto no_preroll; } - GST_OBJECT_LOCK (bin); - pending = GST_STATE_PENDING (bin); + GST_CAT_INFO_OBJECT (GST_CAT_STATES, element, + "current %s pending %s, desired next %s", + gst_element_state_get_name (child_current), + gst_element_state_get_name (child_pending), + gst_element_state_get_name (next)); /* Try not to change the state of elements that are already in the state we're * going to */ - if (!(next == GST_STATE_PLAYING || child_pending != GST_STATE_VOID_PENDING || - (child_pending == GST_STATE_VOID_PENDING && - ((pending > child_current && next > child_current) || - (pending < child_current && next < child_current))))) + if (child_current == next && child_pending == GST_STATE_VOID_PENDING) { + /* child is already at the requested state, return previous return. Note that + * if the child has a pending state to next, we will still call the + * set_state function */ goto unneeded; + } else if (next > current) { + /* upward state change */ + if (child_pending == GST_STATE_VOID_PENDING) { + /* .. and the child is not busy doing anything */ + if (child_current > next) { + /* .. and is already past the requested state, assume it got there + * without error */ + ret = GST_STATE_CHANGE_SUCCESS; + goto unneeded; + } + } else if (child_pending > child_current) { + /* .. and the child is busy going upwards */ + if (child_current >= next) { + /* .. and is already past the requested state, assume it got there + * without error */ + ret = GST_STATE_CHANGE_SUCCESS; + goto unneeded; + } + } else { + /* .. and the child is busy going downwards */ + if (child_current > next) { + /* .. and is already past the requested state, assume it got there + * without error */ + ret = GST_STATE_CHANGE_SUCCESS; + goto unneeded; + } + } + } else if (next < current) { + /* downward state change */ + if (child_pending == GST_STATE_VOID_PENDING) { + /* .. and the child is not busy doing anything */ + if (child_current < next) { + /* .. and is already past the requested state, assume it got there + * without error */ + ret = GST_STATE_CHANGE_SUCCESS; + goto unneeded; + } + } else if (child_pending < child_current) { + /* .. and the child is busy going downwards */ + if (child_current <= next) { + /* .. and is already past the requested state, assume it got there + * without error */ + ret = GST_STATE_CHANGE_SUCCESS; + goto unneeded; + } + } else { + /* .. and the child is busy going upwards */ + if (child_current < next) { + /* .. and is already past the requested state, assume it got there + * without error */ + ret = GST_STATE_CHANGE_SUCCESS; + goto unneeded; + } + } + } + GST_OBJECT_LOCK (bin); /* the element was busy with an upwards async state change, we must wait for * an ASYNC_DONE message before we attemp to change the state. */ if ((found = @@ -2234,25 +2293,22 @@ locked: GST_STATE_UNLOCK (element); return ret; } -was_busy: - { - GST_DEBUG_OBJECT (element, "element was busy, delaying state change"); - GST_OBJECT_UNLOCK (bin); - GST_STATE_UNLOCK (element); - return GST_STATE_CHANGE_ASYNC; - } unneeded: { GST_CAT_INFO_OBJECT (GST_CAT_STATES, element, - "skipping transition from %s to %s, since bin pending" - " is %s : last change state return follows", + "skipping transition from %s to %s", gst_element_state_get_name (child_current), - gst_element_state_get_name (next), - gst_element_state_get_name (pending)); - GST_OBJECT_UNLOCK (bin); + gst_element_state_get_name (next)); GST_STATE_UNLOCK (element); return ret; } +was_busy: + { + GST_DEBUG_OBJECT (element, "element was busy, delaying state change"); + GST_OBJECT_UNLOCK (bin); + GST_STATE_UNLOCK (element); + return GST_STATE_CHANGE_ASYNC; + } } /* gst_iterator_fold functions for pads_activate diff --git a/gst/gstcaps.c b/gst/gstcaps.c index 2f4a341..ec95ed5 100644 --- a/gst/gstcaps.c +++ b/gst/gstcaps.c @@ -177,7 +177,7 @@ _gst_caps_free (GstCaps * caps) g_ptr_array_free (GST_CAPS_ARRAY (caps), TRUE); #ifdef DEBUG_REFCOUNT - GST_CAT_LOG (GST_CAT_CAPS, "freeing caps %p", caps); + GST_CAT_TRACE (GST_CAT_CAPS, "freeing caps %p", caps); #endif g_slice_free1 (GST_MINI_OBJECT_SIZE (caps), caps); } diff --git a/gst/gstcompat.h b/gst/gstcompat.h index a35c6ce..97728f4 100644 --- a/gst/gstcompat.h +++ b/gst/gstcompat.h @@ -56,6 +56,8 @@ G_BEGIN_DECLS #define gst_adapter_prev_timestamp gst_adapter_prev_pts +#define gst_tag_list_free(taglist) gst_tag_list_unref(taglist) + #ifndef GST_DISABLE_DEPRECATED #endif /* not GST_DISABLE_DEPRECATED */ diff --git a/gst/gstdebugutils.c b/gst/gstdebugutils.c index 8e31bde..e67a77c 100644 --- a/gst/gstdebugutils.c +++ b/gst/gstdebugutils.c @@ -54,7 +54,7 @@ /*** PIPELINE GRAPHS **********************************************************/ -const gchar *priv_gst_dump_dot_dir; /* NULL *//* set from gst.c */ +extern const gchar *priv_gst_dump_dot_dir; /* NULL *//* set from gst.c */ const gchar spaces[] = { " " /* 32 */ diff --git a/gst/gstelement.c b/gst/gstelement.c index b3366f4..2962830 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -325,7 +325,7 @@ gst_element_release_request_pad (GstElement * element, GstPad * pad) /* if the element implements a custom release function we call that, else we * simply remove the pad from the element */ if (oclass->release_pad) - (oclass->release_pad) (element, pad); + oclass->release_pad (element, pad); else gst_element_remove_pad (element, pad); } @@ -1523,9 +1523,10 @@ gst_element_default_send_event (GstElement * element, GstEvent * event) * This function takes owership of the provided event so you should * gst_event_ref() it if you want to reuse the event after this call. * - * Returns: %TRUE if the event was handled. - * * MT safe. + * + * Returns: %TRUE if the event was handled. Events that trigger a preroll (such + * as flushing seeks and steps) will emit %GST_MESSAGE_ASYNC_DONE. */ gboolean gst_element_send_event (GstElement * element, GstEvent * event) @@ -1564,9 +1565,10 @@ gst_element_send_event (GstElement * element, GstEvent * event) * the parameters. The seek event is sent to the element using * gst_element_send_event(). * - * Returns: %TRUE if the event was handled. - * * MT safe. + * + * Returns: %TRUE if the event was handled. Flushing seeks will trigger a + * preroll, which will emit %GST_MESSAGE_ASYNC_DONE. */ gboolean gst_element_seek (GstElement * element, gdouble rate, GstFormat format, @@ -2826,6 +2828,7 @@ gst_element_dispose (GObject * object) GstClock **clock_p; GstBus **bus_p; GstElementClass *oclass; + GList *walk; oclass = GST_ELEMENT_GET_CLASS (element); @@ -2834,23 +2837,32 @@ gst_element_dispose (GObject * object) if (GST_STATE (element) != GST_STATE_NULL) goto not_null; - GST_CAT_DEBUG_OBJECT (GST_CAT_ELEMENT_PADS, element, - "removing %d pads", g_list_length (element->pads)); - /* first we break all our links with the outside */ - while (element->pads && element->pads->data) { - GstPad *pad = GST_PAD_CAST (element->pads->data); + /* start by releasing all request pads, this might also remove some dynamic + * pads */ + walk = element->pads; + while (walk) { + GstPad *pad = GST_PAD_CAST (walk->data); + + walk = walk->next; - /* don't call _remove_pad with NULL */ if (oclass->release_pad && GST_PAD_PAD_TEMPLATE (pad) && GST_PAD_TEMPLATE_PRESENCE (GST_PAD_PAD_TEMPLATE (pad)) - == GST_PAD_REQUEST) - (oclass->release_pad) (element, GST_PAD_CAST (element->pads->data)); - else - gst_element_remove_pad (element, GST_PAD_CAST (element->pads->data)); + == GST_PAD_REQUEST) { + GST_CAT_DEBUG_OBJECT (GST_CAT_ELEMENT_PADS, element, + "removing request pad %s:%s", GST_DEBUG_PAD_NAME (pad)); + oclass->release_pad (element, pad); + } } - if (G_UNLIKELY (element->pads != NULL)) { - g_critical ("could not remove pads from element %s", - GST_STR_NULL (GST_OBJECT_NAME (object))); + /* remove the remaining pads */ + while (element->pads) { + GstPad *pad = GST_PAD_CAST (element->pads->data); + GST_CAT_DEBUG_OBJECT (GST_CAT_ELEMENT_PADS, element, + "removing pad %s:%s", GST_DEBUG_PAD_NAME (pad)); + if (!gst_element_remove_pad (element, pad)) { + /* only happens when someone unparented our pad.. */ + g_critical ("failed to remove pad %s:%s", GST_DEBUG_PAD_NAME (pad)); + break; + } } GST_OBJECT_LOCK (element); diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c index b11abfc..a8ef9fe 100644 --- a/gst/gstelementfactory.c +++ b/gst/gstelementfactory.c @@ -509,6 +509,40 @@ gst_element_factory_get_metadata (GstElementFactory * factory, return gst_structure_get_string ((GstStructure *) factory->metadata, key); } +/** + * gst_element_factory_get_metadata_keys: + * @factory,: a #GstElementFactory + * + * Get the available keys for the metadata on @factory. + * + * Returns: a %NULL-terminated array of key strings, or %NULL when + * there is no metadata. Free with g_strfreev() when no longer needd. + */ +gchar ** +gst_element_factory_get_metadata_keys (GstElementFactory * factory) +{ + GstStructure *metadata; + gchar **arr; + gint i, num; + + g_return_val_if_fail (GST_IS_ELEMENT_FACTORY (factory), NULL); + + metadata = (GstStructure *) factory->metadata; + if (metadata == NULL) + return NULL; + + num = gst_structure_n_fields (metadata); + if (num == 0) + return NULL; + + arr = g_new (gchar *, num + 1); + for (i = 0; i < num; ++i) { + arr[i] = g_strdup (gst_structure_nth_field_name (metadata, i)); + } + arr[i] = NULL; + return arr; +} + /** * gst_element_factory_get_num_pad_templates: * @factory: a #GstElementFactory diff --git a/gst/gstelementfactory.h b/gst/gstelementfactory.h index b2dff92..601c9d6 100644 --- a/gst/gstelementfactory.h +++ b/gst/gstelementfactory.h @@ -24,16 +24,19 @@ #ifndef __GST_ELEMENT_FACTORY_H__ #define __GST_ELEMENT_FACTORY_H__ +/** + * GstElementFactory: + * + * The opaque #GstElementFactory data structure. + */ typedef struct _GstElementFactory GstElementFactory; typedef struct _GstElementFactoryClass GstElementFactoryClass; #include #include -#include +#include #include #include -#include -#include #include G_BEGIN_DECLS @@ -47,37 +50,6 @@ G_BEGIN_DECLS #define GST_IS_ELEMENT_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ELEMENT_FACTORY)) #define GST_ELEMENT_FACTORY_CAST(obj) ((GstElementFactory *)(obj)) -/** - * GstElementFactory: - * - * The opaque #GstElementFactory data structure. - */ -struct _GstElementFactory { - GstPluginFeature parent; - - GType type; /* unique GType of element or 0 if not loaded */ - - gpointer metadata; - - GList * staticpadtemplates; /* GstStaticPadTemplate list */ - guint numpadtemplates; - - /* URI interface stuff */ - GstURIType uri_type; - gchar ** uri_protocols; - - GList * interfaces; /* interface type names this element implements */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstElementFactoryClass { - GstPluginFeatureClass parent_class; - - gpointer _gst_reserved[GST_PADDING]; -}; - GType gst_element_factory_get_type (void); GstElementFactory * gst_element_factory_find (const gchar *name); @@ -85,6 +57,7 @@ GstElementFactory * gst_element_factory_find (const gchar *na GType gst_element_factory_get_element_type (GstElementFactory *factory); const gchar * gst_element_factory_get_metadata (GstElementFactory *factory, const gchar *key); +gchar ** gst_element_factory_get_metadata_keys (GstElementFactory *factory); guint gst_element_factory_get_num_pad_templates (GstElementFactory *factory); const GList * gst_element_factory_get_static_pad_templates (GstElementFactory *factory); diff --git a/gst/gstevent.c b/gst/gstevent.c index e496f40..3ba388a 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -992,19 +992,30 @@ gst_event_copy_segment (GstEvent * event, GstSegment * segment) /** * gst_event_new_tag: + * @name: (transfer none): the name of the event * @taglist: (transfer full): metadata list. The event will take ownership * of the taglist. * * Generates a metadata tag event from the given @taglist. * + * Since the TAG event has the %GST_EVENT_TYPE_STICKY_MULTI flag set, the + * @name will be used to keep track of multiple tag events. + * * Returns: (transfer full): a new #GstEvent */ GstEvent * -gst_event_new_tag (GstTagList * taglist) +gst_event_new_tag (const gchar * name, GstTagList * taglist) { + GstStructure *s; + GValue val = G_VALUE_INIT; + g_return_val_if_fail (taglist != NULL, NULL); - return gst_event_new_custom (GST_EVENT_TAG, (GstStructure *) taglist); + s = gst_structure_new_empty (name); + g_value_init (&val, GST_TYPE_TAG_LIST); + g_value_take_boxed (&val, taglist); + gst_structure_id_take_value (s, GST_QUARK (TAGLIST), &val); + return gst_event_new_custom (GST_EVENT_TAG, s); } /** @@ -1020,11 +1031,16 @@ gst_event_new_tag (GstTagList * taglist) void gst_event_parse_tag (GstEvent * event, GstTagList ** taglist) { + const GValue *val; + g_return_if_fail (GST_IS_EVENT (event)); g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_TAG); + val = gst_structure_id_get_value (GST_EVENT_STRUCTURE (event), + GST_QUARK (TAGLIST)); + if (taglist) - *taglist = (GstTagList *) GST_EVENT_STRUCTURE (event); + *taglist = (GstTagList *) g_value_get_boxed (val); } /* buffersize event */ @@ -1252,13 +1268,13 @@ gst_event_parse_qos (GstEvent * event, GstQOSType * type, * from the newly configured start position. * * For negative rates, playback will start from the newly configured stop - * position (if any). If the stop position if updated, it must be different from - * -1 for negative rates. + * position (if any). If the stop position is updated, it must be different from + * -1 (#GST_CLOCK_TIME_NONE) for negative rates. * * It is not possible to seek relative to the current playback position, to do * this, PAUSE the pipeline, query the current playback position with * #GST_QUERY_POSITION and update the playback segment current position with a - * #GST_SEEK_TYPE_SET to the desired position. + * #GST_SEEK_TYPE_SET to the desired position. * * Returns: (transfer full): a new seek event. */ @@ -1539,19 +1555,22 @@ gst_event_new_reconfigure (void) /** * gst_event_new_sink_message: + * @name: a name for the event * @msg: (transfer none): the #GstMessage to be posted * * Create a new sink-message event. The purpose of the sink-message event is * to instruct a sink to post the message contained in the event synchronized * with the stream. * + * @name is used to store multiple sticky events on one pad. + * * Returns: (transfer full): a new #GstEvent * * Since: 0.10.26 */ /* FIXME 0.11: take ownership of msg for consistency? */ GstEvent * -gst_event_new_sink_message (GstMessage * msg) +gst_event_new_sink_message (const gchar * name, GstMessage * msg) { GstEvent *event; GstStructure *structure; @@ -1560,7 +1579,7 @@ gst_event_new_sink_message (GstMessage * msg) GST_CAT_INFO (GST_CAT_EVENT, "creating sink-message event"); - structure = gst_structure_new_id (GST_QUARK (EVENT_SINK_MESSAGE), + structure = gst_structure_new_id (g_quark_from_string (name), GST_QUARK (MESSAGE), GST_TYPE_MESSAGE, msg, NULL); event = gst_event_new_custom (GST_EVENT_SINK_MESSAGE, structure); @@ -1615,6 +1634,7 @@ gst_event_new_stream_start (void) /** * gst_event_new_toc: + * @name: a name for the event * @toc: #GstToc structure. * @updated: whether @toc was updated or not. * diff --git a/gst/gstevent.h b/gst/gstevent.h index b8609e9..35ebba8 100644 --- a/gst/gstevent.h +++ b/gst/gstevent.h @@ -152,7 +152,7 @@ typedef enum { GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (90, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (100, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), GST_EVENT_EOS = GST_EVENT_MAKE_TYPE (110, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), - GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY) | FLAG(STICKY_MULTI)), + GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (120, FLAG(DOWNSTREAM) | FLAG(SERIALIZED) | FLAG(STICKY)), /* non-sticky downstream serialized */ GST_EVENT_SEGMENT_DONE = GST_EVENT_MAKE_TYPE (150, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), @@ -523,7 +523,7 @@ void gst_event_parse_segment (GstEvent *event, const GstSegme void gst_event_copy_segment (GstEvent *event, GstSegment *segment); /* tag event */ -GstEvent* gst_event_new_tag (GstTagList *taglist) G_GNUC_MALLOC; +GstEvent* gst_event_new_tag (const gchar *name, GstTagList *taglist) G_GNUC_MALLOC; void gst_event_parse_tag (GstEvent *event, GstTagList **taglist); /* TOC event */ @@ -538,7 +538,7 @@ void gst_event_parse_buffer_size (GstEvent *event, GstFormat *for gint64 *maxsize, gboolean *async); /* sink message */ -GstEvent* gst_event_new_sink_message (GstMessage *msg) G_GNUC_MALLOC; +GstEvent* gst_event_new_sink_message (const gchar *name, GstMessage *msg) G_GNUC_MALLOC; void gst_event_parse_sink_message (GstEvent *event, GstMessage **msg); /* QOS events */ diff --git a/gst/gstmessage.c b/gst/gstmessage.c index 6b8b2c0..4eef4ac 100644 --- a/gst/gstmessage.c +++ b/gst/gstmessage.c @@ -480,13 +480,17 @@ gst_message_new_info (GstObject * src, GError * error, const gchar * debug) GstMessage * gst_message_new_tag (GstObject * src, GstTagList * tag_list) { + GstStructure *s; GstMessage *message; + GValue val = G_VALUE_INIT; - g_return_val_if_fail (GST_IS_STRUCTURE (tag_list), NULL); - - message = - gst_message_new_custom (GST_MESSAGE_TAG, src, (GstStructure *) tag_list); + g_return_val_if_fail (GST_IS_TAG_LIST (tag_list), NULL); + s = gst_structure_new_id_empty (GST_QUARK (MESSAGE_TAG)); + g_value_init (&val, GST_TYPE_TAG_LIST); + g_value_take_boxed (&val, tag_list); + gst_structure_id_take_value (s, GST_QUARK (TAGLIST), &val); + message = gst_message_new_custom (GST_MESSAGE_TAG, src, s); return message; } @@ -1004,7 +1008,7 @@ gst_message_has_name (GstMessage * message, const gchar * name) * gst_message_parse_tag (msg, &tags); * g_print ("Got tags from element %s\n", GST_OBJECT_NAME (msg->src)); * handle_tags (tags); - * gst_tag_list_free (tags); + * gst_tag_list_unref (tags); * break; * } * ... @@ -1017,16 +1021,12 @@ gst_message_has_name (GstMessage * message, const gchar * name) void gst_message_parse_tag (GstMessage * message, GstTagList ** tag_list) { - GstStructure *ret; - g_return_if_fail (GST_IS_MESSAGE (message)); g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_TAG); g_return_if_fail (tag_list != NULL); - ret = gst_structure_copy (GST_MESSAGE_STRUCTURE (message)); - gst_structure_remove_field (ret, "source-pad"); - - *tag_list = (GstTagList *) ret; + gst_structure_id_get (GST_MESSAGE_STRUCTURE (message), + GST_QUARK (TAGLIST), GST_TYPE_TAG_LIST, tag_list, NULL); } /** @@ -2210,7 +2210,7 @@ gst_message_new_toc (GstObject * src, GstToc * toc, gboolean updated) * @toc: (out): return location for the TOC. * @updated: (out): return location for the updated flag. * - * Extract the TOC from the #GstMessage. The TOC returned in the + * Extract thef TOC from the #GstMessage. The TOC returned in the * output argument is a copy; the caller must free it with * gst_toc_free() when done. * diff --git a/gst/gstpad.c b/gst/gstpad.c index 0464209..73981f3 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -2637,12 +2637,6 @@ gst_pad_event_default (GstPad * pad, GstObject * parent, GstEvent * event) GST_LOG_OBJECT (pad, "default event handler"); switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_EOS: - { - GST_DEBUG_OBJECT (pad, "pausing task because of eos"); - gst_pad_pause_task (pad); - break; - } case GST_EVENT_CAPS: forward = GST_PAD_IS_PROXY_CAPS (pad); result = TRUE; @@ -3151,11 +3145,21 @@ done: GST_OBJECT_UNLOCK (pad); } +typedef struct +{ + GstFlowReturn ret; + + /* If TRUE and ret is not OK this means + * that pushing the EOS event failed + */ + gboolean was_eos; +} PushStickyData; + /* should be called with pad LOCK */ static gboolean push_sticky (GstPad * pad, PadEvent * ev, gpointer user_data) { - GstFlowReturn *data = user_data; + PushStickyData *data = user_data; GstEvent *event = ev->event; if (ev->received) { @@ -3164,10 +3168,10 @@ push_sticky (GstPad * pad, PadEvent * ev, gpointer user_data) return TRUE; } - *data = gst_pad_push_event_unchecked (pad, gst_event_ref (event), + data->ret = gst_pad_push_event_unchecked (pad, gst_event_ref (event), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM); - switch (*data) { + switch (data->ret) { case GST_FLOW_OK: ev->received = TRUE; GST_DEBUG_OBJECT (pad, "event %s marked received", @@ -3175,16 +3179,21 @@ push_sticky (GstPad * pad, PadEvent * ev, gpointer user_data) break; case GST_FLOW_NOT_LINKED: /* not linked is not a problem, we are sticky so the event will be - * sent later */ + * sent later but only for non-EOS events */ GST_DEBUG_OBJECT (pad, "pad was not linked"); - *data = GST_FLOW_OK; + if (GST_EVENT_TYPE (event) != GST_EVENT_EOS) + data->ret = GST_FLOW_OK; /* fallthrough */ default: GST_DEBUG_OBJECT (pad, "mark pending events"); GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS); break; } - return *data == GST_FLOW_OK; + + if (data->ret != GST_FLOW_OK && GST_EVENT_TYPE (event) == GST_EVENT_EOS) + data->was_eos = TRUE; + + return data->ret == GST_FLOW_OK; } /* check sticky events and push them when needed. should be called @@ -3192,15 +3201,31 @@ push_sticky (GstPad * pad, PadEvent * ev, gpointer user_data) static inline GstFlowReturn check_sticky (GstPad * pad) { - GstFlowReturn ret = GST_FLOW_OK; + PushStickyData data = { GST_FLOW_OK, FALSE }; if (G_UNLIKELY (GST_PAD_HAS_PENDING_EVENTS (pad))) { GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PENDING_EVENTS); GST_DEBUG_OBJECT (pad, "pushing all sticky events"); - events_foreach (pad, push_sticky, &ret); + events_foreach (pad, push_sticky, &data); + + /* If there's an EOS event we must push it downstream + * even if sending a previous sticky event failed. + * Otherwise the pipeline might wait forever for EOS. + * + * Only do this if pushing another event than the EOS + * event failed. + */ + if (data.ret != GST_FLOW_OK && !data.was_eos) { + PadEvent *ev = find_event_by_type (pad, GST_EVENT_EOS, 0); + + if (ev && !ev->received) { + data.ret = gst_pad_push_event_unchecked (pad, gst_event_ref (ev->event), + GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM); + } + } } - return ret; + return data.ret; } @@ -3473,6 +3498,9 @@ gst_pad_chain_data_unchecked (GstPad * pad, GstPadProbeType type, void *data) if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad))) goto flushing; + if (G_UNLIKELY (GST_PAD_IS_EOS (pad))) + goto eos; + if (G_UNLIKELY (GST_PAD_MODE (pad) != GST_PAD_MODE_PUSH)) goto wrong_mode; @@ -3534,6 +3562,14 @@ flushing: gst_mini_object_unref (GST_MINI_OBJECT_CAST (data)); return GST_FLOW_FLUSHING; } +eos: + { + GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad, "chaining, but pad was EOS"); + GST_OBJECT_UNLOCK (pad); + GST_PAD_STREAM_UNLOCK (pad); + gst_mini_object_unref (GST_MINI_OBJECT_CAST (data)); + return GST_FLOW_EOS; + } wrong_mode: { g_critical ("chain on pad %s:%s but it was not in push mode", @@ -3682,6 +3718,9 @@ gst_pad_push_data (GstPad * pad, GstPadProbeType type, void *data) if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad))) goto flushing; + if (G_UNLIKELY (GST_PAD_IS_EOS (pad))) + goto eos; + if (G_UNLIKELY (GST_PAD_MODE (pad) != GST_PAD_MODE_PUSH)) goto wrong_mode; @@ -3727,6 +3766,13 @@ flushing: gst_mini_object_unref (GST_MINI_OBJECT_CAST (data)); return GST_FLOW_FLUSHING; } +eos: + { + GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad, "pushing, but pad was EOS"); + GST_OBJECT_UNLOCK (pad); + gst_mini_object_unref (GST_MINI_OBJECT_CAST (data)); + return GST_FLOW_EOS; + } wrong_mode: { g_critical ("pushing on pad %s:%s but it was not activated in push mode", @@ -4289,6 +4335,7 @@ gst_pad_push_event_unchecked (GstPad * pad, GstEvent * event, /* Remove sticky EOS events */ GST_LOG_OBJECT (pad, "Removing pending EOS events"); remove_event_by_type (pad, GST_EVENT_EOS); + GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS); type |= GST_PAD_PROBE_TYPE_EVENT_FLUSH; break; @@ -4297,6 +4344,11 @@ gst_pad_push_event_unchecked (GstPad * pad, GstEvent * event, if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad))) goto flushed; + /* No need to check for EOS here as either the caller (gst_pad_push_event()) + * checked already or this is called as part of pushing sticky events, + * in which case we still want to forward the EOS event downstream. + */ + switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEGMENT: /* pass the adjusted segment event on. We need to do this even if @@ -4378,6 +4430,11 @@ not_linked: GST_DEBUG_OBJECT (pad, "Dropping event because pad is not linked"); GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_PENDING_EVENTS); gst_event_unref (event); + + /* unlinked pads should not influence latency configuration */ + if (event_type == GST_EVENT_LATENCY) + return GST_FLOW_OK; + return GST_FLOW_NOT_LINKED; } idle_probe_stopped: @@ -4406,7 +4463,7 @@ idle_probe_stopped: gboolean gst_pad_push_event (GstPad * pad, GstEvent * event) { - gboolean res; + gboolean res = FALSE; GstPadProbeType type; gboolean sticky, serialized; @@ -4434,12 +4491,17 @@ gst_pad_push_event (GstPad * pad, GstEvent * event) if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad))) goto flushed; + if (G_UNLIKELY (GST_PAD_IS_EOS (pad))) + goto eos; + /* srcpad sticky events are store 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)) { GST_DEBUG_OBJECT (pad, "event %s updated", GST_EVENT_TYPE_NAME (event)); } + if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) + GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_EOS); } if (GST_PAD_IS_SRC (pad) && (serialized || sticky)) { /* all serialized or sticky events on the srcpad trigger push of @@ -4450,8 +4512,14 @@ gst_pad_push_event (GstPad * pad, GstEvent * event) /* other events are pushed right away */ res = (gst_pad_push_event_unchecked (pad, event, type) == GST_FLOW_OK); } else { + /* Errors in sticky event pushing are no problem and ignored here + * as they will cause more meaningful errors during data flow. + * For EOS events, that are not followed by data flow, we still + * return FALSE here though. + */ + if (GST_EVENT_TYPE (event) != GST_EVENT_EOS) + res = TRUE; gst_event_unref (event); - res = TRUE; } GST_OBJECT_UNLOCK (pad); @@ -4478,13 +4546,20 @@ flushed: gst_event_unref (event); return FALSE; } +eos: + { + GST_DEBUG_OBJECT (pad, "We're EOS"); + GST_OBJECT_UNLOCK (pad); + gst_event_unref (event); + return FALSE; + } } /* Check if we can call the event function with the given event */ static GstFlowReturn pre_eventfunc_check (GstPad * pad, GstEvent * event) { - GstCaps *caps, *templ; + GstCaps *caps; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: @@ -4492,12 +4567,8 @@ pre_eventfunc_check (GstPad * pad, GstEvent * event) /* backwards compatibility mode for caps */ gst_event_parse_caps (event, &caps); - /* See if pad accepts the caps */ - templ = gst_pad_get_pad_template_caps (pad); - if (!gst_caps_is_subset (caps, templ)) + if (!gst_pad_query_accept_caps (pad, caps)) goto not_accepted; - - gst_caps_unref (templ); break; } default: @@ -4508,11 +4579,8 @@ pre_eventfunc_check (GstPad * pad, GstEvent * event) /* ERRORS */ not_accepted: { - gst_caps_unref (templ); GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "caps %" GST_PTR_FORMAT " not accepted", caps); - GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, - "no intersection with template %" GST_PTR_FORMAT, templ); return GST_FLOW_NOT_NEGOTIATED; } } @@ -4554,6 +4622,7 @@ gst_pad_send_event_unchecked (GstPad * pad, GstEvent * event, /* Remove pending EOS events */ GST_LOG_OBJECT (pad, "Removing pending EOS events"); remove_event_by_type (pad, GST_EVENT_EOS); + GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS); GST_OBJECT_UNLOCK (pad); /* grab stream lock */ @@ -4574,6 +4643,9 @@ gst_pad_send_event_unchecked (GstPad * pad, GstEvent * event, goto flushing; if (serialized) { + if (G_UNLIKELY (GST_PAD_IS_EOS (pad))) + goto eos; + /* lock order: STREAM_LOCK, LOCK, recheck flushing. */ GST_OBJECT_UNLOCK (pad); GST_PAD_STREAM_LOCK (pad); @@ -4581,6 +4653,9 @@ gst_pad_send_event_unchecked (GstPad * pad, GstEvent * event, GST_OBJECT_LOCK (pad); if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad))) goto flushing; + + if (G_UNLIKELY (GST_PAD_IS_EOS (pad))) + goto eos; } switch (GST_EVENT_TYPE (event)) { @@ -4635,6 +4710,8 @@ gst_pad_send_event_unchecked (GstPad * pad, GstEvent * event, /* 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 (event_type == GST_EVENT_EOS) + GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_EOS); } gst_event_unref (event); } @@ -4655,6 +4732,16 @@ flushing: gst_event_unref (event); return GST_FLOW_FLUSHING; } +eos: + { + GST_OBJECT_UNLOCK (pad); + if (need_unlock) + GST_PAD_STREAM_UNLOCK (pad); + GST_CAT_INFO_OBJECT (GST_CAT_EVENT, pad, + "Received event on EOS pad. Discarding"); + gst_event_unref (event); + return GST_FLOW_EOS; + } probe_stopped: { GST_OBJECT_UNLOCK (pad); diff --git a/gst/gstpad.h b/gst/gstpad.h index df66794..4e93f07 100644 --- a/gst/gstpad.h +++ b/gst/gstpad.h @@ -590,7 +590,8 @@ typedef gboolean (*GstPadStickyEventsForeachFunction) (GstPad *pad, GstEvent ** /** * GstPadFlags: * @GST_PAD_FLAG_BLOCKED: is dataflow on a pad blocked - * @GST_PAD_FLAG_FLUSHING: is pad refusing buffers + * @GST_PAD_FLAG_FLUSHING: is pad flushing + * @GST_PAD_FLAG_EOS: is pad in EOS state * @GST_PAD_FLAG_BLOCKING: is pad currently blocking on a buffer or event * @GST_PAD_FLAG_NEED_PARENT: ensure that there is a parent object before calling * into the pad callbacks. @@ -614,13 +615,14 @@ typedef gboolean (*GstPadStickyEventsForeachFunction) (GstPad *pad, GstEvent ** typedef enum { GST_PAD_FLAG_BLOCKED = (GST_OBJECT_FLAG_LAST << 0), GST_PAD_FLAG_FLUSHING = (GST_OBJECT_FLAG_LAST << 1), - GST_PAD_FLAG_BLOCKING = (GST_OBJECT_FLAG_LAST << 2), - GST_PAD_FLAG_NEED_PARENT = (GST_OBJECT_FLAG_LAST << 3), - GST_PAD_FLAG_NEED_RECONFIGURE = (GST_OBJECT_FLAG_LAST << 4), - GST_PAD_FLAG_PENDING_EVENTS = (GST_OBJECT_FLAG_LAST << 5), - GST_PAD_FLAG_FIXED_CAPS = (GST_OBJECT_FLAG_LAST << 6), - GST_PAD_FLAG_PROXY_CAPS = (GST_OBJECT_FLAG_LAST << 7), - GST_PAD_FLAG_PROXY_ALLOCATION = (GST_OBJECT_FLAG_LAST << 8), + GST_PAD_FLAG_EOS = (GST_OBJECT_FLAG_LAST << 2), + GST_PAD_FLAG_BLOCKING = (GST_OBJECT_FLAG_LAST << 3), + GST_PAD_FLAG_NEED_PARENT = (GST_OBJECT_FLAG_LAST << 4), + GST_PAD_FLAG_NEED_RECONFIGURE = (GST_OBJECT_FLAG_LAST << 5), + GST_PAD_FLAG_PENDING_EVENTS = (GST_OBJECT_FLAG_LAST << 6), + GST_PAD_FLAG_FIXED_CAPS = (GST_OBJECT_FLAG_LAST << 7), + GST_PAD_FLAG_PROXY_CAPS = (GST_OBJECT_FLAG_LAST << 8), + GST_PAD_FLAG_PROXY_ALLOCATION = (GST_OBJECT_FLAG_LAST << 9), /* padding */ GST_PAD_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16) } GstPadFlags; @@ -755,6 +757,8 @@ struct _GstPadClass { #define GST_PAD_SET_FLUSHING(pad) (GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_FLUSHING)) #define GST_PAD_UNSET_FLUSHING(pad) (GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_FLUSHING)) +#define GST_PAD_IS_EOS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_EOS)) + #define GST_PAD_NEEDS_RECONFIGURE(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_NEED_RECONFIGURE)) #define GST_PAD_HAS_PENDING_EVENTS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_PENDING_EVENTS)) #define GST_PAD_IS_FIXED_CAPS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLAG_FIXED_CAPS)) diff --git a/gst/gstpluginfeature.c b/gst/gstpluginfeature.c index e61fee2..3e1228e 100644 --- a/gst/gstpluginfeature.c +++ b/gst/gstpluginfeature.c @@ -179,6 +179,26 @@ gst_plugin_feature_get_rank (GstPluginFeature * feature) return feature->rank; } +/** + * gst_plugin_feature_get_plugin: + * @feature: a feature + * + * Get the plugin that provides this feature. + * + * Returns: (transfer full): the plugin that provides this feature, or %NULL. + * Unref with gst_object_unref() when no longer needed. + */ +GstPlugin * +gst_plugin_feature_get_plugin (GstPluginFeature * feature) +{ + g_return_val_if_fail (GST_IS_PLUGIN_FEATURE (feature), NULL); + + if (feature->plugin == NULL) + return NULL; + + return (GstPlugin *) gst_object_ref (feature->plugin); +} + /** * gst_plugin_feature_list_free: * @list: (transfer full) (element-type Gst.PluginFeature): list diff --git a/gst/gstpluginfeature.h b/gst/gstpluginfeature.h index b99d9ee..a372281 100644 --- a/gst/gstpluginfeature.h +++ b/gst/gstpluginfeature.h @@ -38,6 +38,11 @@ G_BEGIN_DECLS #define GST_PLUGIN_FEATURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLUGIN_FEATURE, GstPluginFeatureClass)) #define GST_PLUGIN_FEATURE_CAST(obj) ((GstPluginFeature*)(obj)) +/** + * GstPluginFeature: + * + * Opaque #GstPluginFeature structure. + */ typedef struct _GstPluginFeature GstPluginFeature; typedef struct _GstPluginFeatureClass GstPluginFeatureClass; @@ -84,32 +89,6 @@ typedef enum { */ #define gst_plugin_feature_set_name(feature,name) gst_object_set_name(GST_OBJECT_CAST(feature),name) -/** - * GstPluginFeature: - * - * Opaque #GstPluginFeature structure. - */ -struct _GstPluginFeature { - GstObject object; - - /*< private >*/ - gboolean loaded; - guint rank; - - const gchar *plugin_name; - GstPlugin *plugin; /* weak ref */ - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - -struct _GstPluginFeatureClass { - GstObjectClass parent_class; - - /*< private >*/ - gpointer _gst_reserved[GST_PADDING]; -}; - /** * GstPluginFeatureFilter: * @feature: the pluginfeature to check @@ -133,6 +112,8 @@ GstPluginFeature * void gst_plugin_feature_set_rank (GstPluginFeature *feature, guint rank); guint gst_plugin_feature_get_rank (GstPluginFeature *feature); +GstPlugin * gst_plugin_feature_get_plugin (GstPluginFeature *feature); + void gst_plugin_feature_list_free (GList *list); GList *gst_plugin_feature_list_copy (GList *list) G_GNUC_MALLOC; void gst_plugin_feature_list_debug (GList *list); diff --git a/gst/gstquark.c b/gst/gstquark.c index d7b6b6d..2d55fa3 100644 --- a/gst/gstquark.c +++ b/gst/gstquark.c @@ -58,9 +58,11 @@ static const gchar *_quark_strings[] = { "allocator", "GstEventFlushStop", "options", "GstQueryAcceptCaps", "result", "GstQueryCaps", "filter", "modes", "GstEventStreamConfig", "setup-data", "stream-headers", "GstEventGap", "GstQueryDrain", "params", - "toc-select", "uid", "toc", GST_ELEMENT_METADATA_LONGNAME, + "GstEventTocSelect", "uid", "GstQueryToc", GST_ELEMENT_METADATA_LONGNAME, GST_ELEMENT_METADATA_KLASS, GST_ELEMENT_METADATA_DESCRIPTION, - GST_ELEMENT_METADATA_AUTHOR + GST_ELEMENT_METADATA_AUTHOR, "toc", "toc-entry", "updated", "extend-uid", + "uid", "tags", "sub-entries", "info", "info-structure", + "time-structure", "GstMessageTag", "GstEventTag" }; GQuark _priv_gst_quark_table[GST_QUARK_MAX]; diff --git a/gst/gstquark.h b/gst/gstquark.h index 8f8968f..969ce79 100644 --- a/gst/gstquark.h +++ b/gst/gstquark.h @@ -171,7 +171,19 @@ typedef enum _GstQuarkId GST_QUARK_ELEMENT_METADATA_KLASS = 142, GST_QUARK_ELEMENT_METADATA_DESCRIPTION = 143, GST_QUARK_ELEMENT_METADATA_AUTHOR = 144, - GST_QUARK_MAX = 145 + GST_QUARK_TOC = 145, + GST_QUARK_TOC_ENTRY = 146, + GST_QUARK_UPDATED = 147, + GST_QUARK_EXTEND_UID = 148, + GST_QUARK_TOC_UID = 149, + GST_QUARK_TAGS = 150, + GST_QUARK_SUB_ENTRIES = 151, + GST_QUARK_INFO = 152, + GST_QUARK_INFO_STRUCTURE = 153, + GST_QUARK_TIME_STRUCTURE = 154, + GST_QUARK_MESSAGE_TAG = 155, + GST_QUARK_EVENT_TAG = 156, + GST_QUARK_MAX = 157 } GstQuarkId; extern GQuark _priv_gst_quark_table[GST_QUARK_MAX]; diff --git a/gst/gstquery.c b/gst/gstquery.c index 4aaa17e..5fadc9d 100644 --- a/gst/gstquery.c +++ b/gst/gstquery.c @@ -2197,7 +2197,7 @@ gst_query_parse_accept_caps_result (GstQuery * query, gboolean * result) * * Constructs a new query object for querying the caps. * - * The CAPS query should return the* allowable caps for a pad in the context + * The CAPS query should return the allowable caps for a pad in the context * of the element's state, its link to other elements, and the devices or files * it has opened. These caps must be a subset of the pad template caps. In the * NULL state with no links, the CAPS query should ideally return the same caps @@ -2210,6 +2210,10 @@ gst_query_parse_accept_caps_result (GstQuery * query, gboolean * result) * the CAPS query should return the most specific caps it reasonably can, since this * helps with autoplugging. * + * The @filter is used to restrict the result caps, only the caps matching + * @filter should be returned from the CAPS query. Specifying a filter might + * greatly reduce the amount of processing an element needs to do. + * * Free-function: gst_query_unref * * Returns: (transfer full): a new #GstQuery diff --git a/gst/gstregistry.c b/gst/gstregistry.c index 0575709..c77cffe 100644 --- a/gst/gstregistry.c +++ b/gst/gstregistry.c @@ -1664,7 +1664,7 @@ ensure_current_registry (GError ** error) registry_file = g_strdup (g_getenv ("GST_REGISTRY")); if (registry_file == NULL) { registry_file = g_build_filename (g_get_user_cache_dir (), - "gstreamer-" GST_API_VERSION, "registry." HOST_CPU ".bin", NULL); + "gstreamer-" GST_API_VERSION, "registry." TARGET_CPU ".bin", NULL); } if (!_gst_disable_registry_cache) { diff --git a/gst/gststructure.c b/gst/gststructure.c index 8065b31..fdc65e1 100644 --- a/gst/gststructure.c +++ b/gst/gststructure.c @@ -1828,7 +1828,7 @@ priv_gst_structure_append_to_gstring (const GstStructure * structure, * * Free-function: g_free * - * Returns: (transfer full)L a pointer to string allocated by g_malloc(). + * Returns: (transfer full): a pointer to string allocated by g_malloc(). * g_free() after usage. */ gchar * diff --git a/gst/gsttaglist.c b/gst/gsttaglist.c index c1a2ab0..5658fe7 100644 --- a/gst/gsttaglist.c +++ b/gst/gsttaglist.c @@ -47,14 +47,22 @@ #include #include +/* FIXME: add category for tags */ +#define GST_CAT_TAGS GST_CAT_DEFAULT + #define GST_TAG_IS_VALID(tag) (gst_tag_get_info (tag) != NULL) /* FIXME 0.11: make taglists refcounted maybe? */ /* a tag list is basically a structure, but we don't make this fact public */ -struct _GstTagList +typedef struct _GstTagListImpl { - GstStructure structure; -}; + GstTagList taglist; + + GstStructure *structure; +} GstTagListImpl; + +#define GST_TAG_LIST_STRUCTURE(taglist) ((GstTagListImpl*)(taglist))->structure + /* FIXME 0.11: use GParamSpecs or something similar for tag registrations, * possibly even gst_tag_register(). Especially value ranges might be @@ -64,8 +72,8 @@ typedef struct { GType type; /* type the data is in */ - gchar *nick; /* translated name */ - gchar *blurb; /* translated description of type */ + const gchar *nick; /* translated short description */ + const gchar *blurb; /* translated long description */ GstTagMergeFunc merge_func; /* functions to merge the values */ GstTagFlag flag; /* type of tag */ @@ -82,298 +90,307 @@ static GMutex __tag_mutex; /* tags hash table: maps tag name string => GstTagInfo */ static GHashTable *__tags; -G_DEFINE_BOXED_TYPE (GstTagList, gst_tag_list, - (GBoxedCopyFunc) gst_tag_list_copy, (GBoxedFreeFunc) gst_tag_list_free); +GST_DEFINE_MINI_OBJECT_TYPE (GstTagList, gst_tag_list); + +static void __gst_tag_list_free (GstTagList * list); +static GstTagList *__gst_tag_list_copy (const GstTagList * list); /* FIXME: had code: * g_value_register_transform_func (_gst_tag_list_type, G_TYPE_STRING, * _gst_structure_transform_to_string); */ - void _priv_gst_tag_initialize (void) { g_mutex_init (&__tag_mutex); __tags = g_hash_table_new (g_str_hash, g_str_equal); - gst_tag_register (GST_TAG_TITLE, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_TITLE, GST_TAG_FLAG_META, G_TYPE_STRING, _("title"), _("commonly used title"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_TITLE_SORTNAME, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_TITLE_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, _("title sortname"), _("commonly used title for sorting purposes"), NULL); - gst_tag_register (GST_TAG_ARTIST, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ARTIST, GST_TAG_FLAG_META, G_TYPE_STRING, _("artist"), _("person(s) responsible for the recording"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_ARTIST_SORTNAME, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ARTIST_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, _("artist sortname"), _("person(s) responsible for the recording for sorting purposes"), NULL); - gst_tag_register (GST_TAG_ALBUM, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM, GST_TAG_FLAG_META, G_TYPE_STRING, _("album"), _("album containing this data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_ALBUM_SORTNAME, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, _("album sortname"), _("album containing this data for sorting purposes"), NULL); - gst_tag_register (GST_TAG_ALBUM_ARTIST, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM_ARTIST, GST_TAG_FLAG_META, G_TYPE_STRING, _("album artist"), _("The artist of the entire album, as it should be displayed"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_ALBUM_ARTIST_SORTNAME, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM_ARTIST_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, _("album artist sortname"), _("The artist of the entire album, as it should be sorted"), NULL); - gst_tag_register (GST_TAG_DATE, GST_TAG_FLAG_META, G_TYPE_DATE, + gst_tag_register_static (GST_TAG_DATE, GST_TAG_FLAG_META, G_TYPE_DATE, _("date"), _("date the data was created (as a GDate structure)"), NULL); - gst_tag_register (GST_TAG_DATE_TIME, GST_TAG_FLAG_META, GST_TYPE_DATE_TIME, - _("datetime"), + gst_tag_register_static (GST_TAG_DATE_TIME, GST_TAG_FLAG_META, + GST_TYPE_DATE_TIME, _("datetime"), _("date and time the data was created (as a GstDateTime structure)"), NULL); - gst_tag_register (GST_TAG_GENRE, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_GENRE, GST_TAG_FLAG_META, G_TYPE_STRING, _("genre"), _("genre this data belongs to"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COMMENT, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_COMMENT, GST_TAG_FLAG_META, G_TYPE_STRING, _("comment"), _("free text commenting the data"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_EXTENDED_COMMENT, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_EXTENDED_COMMENT, GST_TAG_FLAG_META, G_TYPE_STRING, _("extended comment"), _("free text commenting the data in key=value or key[en]=comment form"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_TRACK_NUMBER, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_TRACK_NUMBER, GST_TAG_FLAG_META, G_TYPE_UINT, _("track number"), _("track number inside a collection"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_TRACK_COUNT, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_TRACK_COUNT, GST_TAG_FLAG_META, G_TYPE_UINT, _("track count"), _("count of tracks inside collection this track belongs to"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_ALBUM_VOLUME_NUMBER, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM_VOLUME_NUMBER, GST_TAG_FLAG_META, G_TYPE_UINT, _("disc number"), _("disc number inside a collection"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_ALBUM_VOLUME_COUNT, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM_VOLUME_COUNT, GST_TAG_FLAG_META, G_TYPE_UINT, _("disc count"), _("count of discs inside collection this disc belongs to"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_LOCATION, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_LOCATION, GST_TAG_FLAG_META, G_TYPE_STRING, _("location"), _("Origin of media as a URI (location, where the " "original of the file or stream is hosted)"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_HOMEPAGE, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_HOMEPAGE, GST_TAG_FLAG_META, G_TYPE_STRING, _("homepage"), _("Homepage for this media (i.e. artist or movie homepage)"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_DESCRIPTION, GST_TAG_FLAG_META, G_TYPE_STRING, - _("description"), _("short text describing the content of the data"), + gst_tag_register_static (GST_TAG_DESCRIPTION, GST_TAG_FLAG_META, + G_TYPE_STRING, _("description"), + _("short text describing the content of the data"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_VERSION, GST_TAG_FLAG_META, G_TYPE_STRING, + gst_tag_register_static (GST_TAG_VERSION, GST_TAG_FLAG_META, G_TYPE_STRING, _("version"), _("version of this data"), NULL); - gst_tag_register (GST_TAG_ISRC, GST_TAG_FLAG_META, G_TYPE_STRING, _("ISRC"), + gst_tag_register_static (GST_TAG_ISRC, GST_TAG_FLAG_META, G_TYPE_STRING, + _("ISRC"), _ ("International Standard Recording Code - see http://www.ifpi.org/isrc/"), NULL); /* FIXME: organization (fix what? tpm) */ - gst_tag_register (GST_TAG_ORGANIZATION, GST_TAG_FLAG_META, G_TYPE_STRING, - _("organization"), _("organization"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COPYRIGHT, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ORGANIZATION, GST_TAG_FLAG_META, + G_TYPE_STRING, _("organization"), _("organization"), + gst_tag_merge_strings_with_comma); + gst_tag_register_static (GST_TAG_COPYRIGHT, GST_TAG_FLAG_META, G_TYPE_STRING, _("copyright"), _("copyright notice of the data"), NULL); - gst_tag_register (GST_TAG_COPYRIGHT_URI, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_COPYRIGHT_URI, GST_TAG_FLAG_META, G_TYPE_STRING, _("copyright uri"), _("URI to the copyright notice of the data"), NULL); - gst_tag_register (GST_TAG_ENCODED_BY, GST_TAG_FLAG_META, G_TYPE_STRING, + gst_tag_register_static (GST_TAG_ENCODED_BY, GST_TAG_FLAG_META, G_TYPE_STRING, _("encoded by"), _("name of the encoding person or organization"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_CONTACT, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_CONTACT, GST_TAG_FLAG_META, G_TYPE_STRING, _("contact"), _("contact information"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_LICENSE, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_LICENSE, GST_TAG_FLAG_META, G_TYPE_STRING, _("license"), _("license of data"), NULL); - gst_tag_register (GST_TAG_LICENSE_URI, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_LICENSE_URI, GST_TAG_FLAG_META, G_TYPE_STRING, _("license uri"), _("URI to the license of the data"), NULL); - gst_tag_register (GST_TAG_PERFORMER, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_PERFORMER, GST_TAG_FLAG_META, G_TYPE_STRING, _("performer"), _("person(s) performing"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COMPOSER, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_COMPOSER, GST_TAG_FLAG_META, G_TYPE_STRING, _("composer"), _("person(s) who composed the recording"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_DURATION, GST_TAG_FLAG_DECODED, + gst_tag_register_static (GST_TAG_DURATION, GST_TAG_FLAG_DECODED, G_TYPE_UINT64, _("duration"), _("length in GStreamer time units (nanoseconds)"), NULL); - gst_tag_register (GST_TAG_CODEC, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("codec"), _("codec the data is stored in"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_VIDEO_CODEC, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_VIDEO_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("video codec"), _("codec the video data is stored in"), NULL); - gst_tag_register (GST_TAG_AUDIO_CODEC, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_AUDIO_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("audio codec"), _("codec the audio data is stored in"), NULL); - gst_tag_register (GST_TAG_SUBTITLE_CODEC, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_SUBTITLE_CODEC, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("subtitle codec"), _("codec the subtitle data is stored in"), NULL); - gst_tag_register (GST_TAG_CONTAINER_FORMAT, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_CONTAINER_FORMAT, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("container format"), _("container format the data is stored in"), NULL); - gst_tag_register (GST_TAG_BITRATE, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("bitrate"), _("exact or average bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_NOMINAL_BITRATE, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_NOMINAL_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("nominal bitrate"), _("nominal bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_MINIMUM_BITRATE, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_MINIMUM_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("minimum bitrate"), _("minimum bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_MAXIMUM_BITRATE, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_MAXIMUM_BITRATE, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("maximum bitrate"), _("maximum bitrate in bits/s"), NULL); - gst_tag_register (GST_TAG_ENCODER, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_ENCODER, GST_TAG_FLAG_ENCODED, G_TYPE_STRING, _("encoder"), _("encoder used to encode this stream"), NULL); - gst_tag_register (GST_TAG_ENCODER_VERSION, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_ENCODER_VERSION, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("encoder version"), _("version of the encoder used to encode this stream"), NULL); - gst_tag_register (GST_TAG_SERIAL, GST_TAG_FLAG_ENCODED, + gst_tag_register_static (GST_TAG_SERIAL, GST_TAG_FLAG_ENCODED, G_TYPE_UINT, _("serial"), _("serial number of track"), NULL); - gst_tag_register (GST_TAG_TRACK_GAIN, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_TRACK_GAIN, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain track gain"), _("track gain in db"), NULL); - gst_tag_register (GST_TAG_TRACK_PEAK, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_TRACK_PEAK, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain track peak"), _("peak of the track"), NULL); - gst_tag_register (GST_TAG_ALBUM_GAIN, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM_GAIN, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain album gain"), _("album gain in db"), NULL); - gst_tag_register (GST_TAG_ALBUM_PEAK, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_ALBUM_PEAK, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain album peak"), _("peak of the album"), NULL); - gst_tag_register (GST_TAG_REFERENCE_LEVEL, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_REFERENCE_LEVEL, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("replaygain reference level"), _("reference level of track and album gain values"), NULL); - gst_tag_register (GST_TAG_LANGUAGE_CODE, GST_TAG_FLAG_META, G_TYPE_STRING, - _("language code"), + gst_tag_register_static (GST_TAG_LANGUAGE_CODE, GST_TAG_FLAG_META, + G_TYPE_STRING, _("language code"), _("language code for this stream, conforming to ISO-639-1 or ISO-639-2"), NULL); - gst_tag_register (GST_TAG_LANGUAGE_NAME, GST_TAG_FLAG_META, G_TYPE_STRING, - _("language name"), + gst_tag_register_static (GST_TAG_LANGUAGE_NAME, GST_TAG_FLAG_META, + G_TYPE_STRING, _("language name"), _("freeform name of the language this stream is in"), NULL); - gst_tag_register (GST_TAG_IMAGE, GST_TAG_FLAG_META, GST_TYPE_SAMPLE, + gst_tag_register_static (GST_TAG_IMAGE, GST_TAG_FLAG_META, GST_TYPE_SAMPLE, _("image"), _("image related to this stream"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_PREVIEW_IMAGE, GST_TAG_FLAG_META, GST_TYPE_SAMPLE, + gst_tag_register_static (GST_TAG_PREVIEW_IMAGE, GST_TAG_FLAG_META, + GST_TYPE_SAMPLE, /* TRANSLATORS: 'preview image' = image that shows a preview of the full image */ _("preview image"), _("preview image related to this stream"), NULL); - gst_tag_register (GST_TAG_ATTACHMENT, GST_TAG_FLAG_META, GST_TYPE_SAMPLE, - _("attachment"), _("file attached to this stream"), + gst_tag_register_static (GST_TAG_ATTACHMENT, GST_TAG_FLAG_META, + GST_TYPE_SAMPLE, _("attachment"), _("file attached to this stream"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_BEATS_PER_MINUTE, GST_TAG_FLAG_META, G_TYPE_DOUBLE, - _("beats per minute"), _("number of beats per minute in audio"), NULL); - gst_tag_register (GST_TAG_KEYWORDS, GST_TAG_FLAG_META, G_TYPE_STRING, + gst_tag_register_static (GST_TAG_BEATS_PER_MINUTE, GST_TAG_FLAG_META, + G_TYPE_DOUBLE, _("beats per minute"), + _("number of beats per minute in audio"), NULL); + gst_tag_register_static (GST_TAG_KEYWORDS, GST_TAG_FLAG_META, G_TYPE_STRING, _("keywords"), _("comma separated keywords describing the content"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_GEO_LOCATION_NAME, GST_TAG_FLAG_META, G_TYPE_STRING, - _("geo location name"), _("human readable descriptive location of where " + gst_tag_register_static (GST_TAG_GEO_LOCATION_NAME, GST_TAG_FLAG_META, + G_TYPE_STRING, _("geo location name"), + _("human readable descriptive location of where " "the media has been recorded or produced"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_LATITUDE, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_GEO_LOCATION_LATITUDE, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location latitude"), _("geo latitude location of where the media has been recorded or " "produced in degrees according to WGS84 (zero at the equator, " "negative values for southern latitudes)"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_LONGITUDE, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_GEO_LOCATION_LONGITUDE, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location longitude"), _("geo longitude location of where the media has been recorded or " "produced in degrees according to WGS84 (zero at the prime meridian " "in Greenwich/UK, negative values for western longitudes)"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_ELEVATION, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_GEO_LOCATION_ELEVATION, GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location elevation"), _("geo elevation of where the media has been recorded or produced in " "meters according to WGS84 (zero is average sea level)"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_COUNTRY, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_GEO_LOCATION_COUNTRY, GST_TAG_FLAG_META, G_TYPE_STRING, _("geo location country"), _("country (english name) where the media has been recorded " "or produced"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_CITY, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_GEO_LOCATION_CITY, GST_TAG_FLAG_META, G_TYPE_STRING, _("geo location city"), _("city (english name) where the media has been recorded " "or produced"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_SUBLOCATION, GST_TAG_FLAG_META, + 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 " "or created (e.g. the neighborhood)"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR, GST_TAG_FLAG_META, - G_TYPE_DOUBLE, _("geo location horizontal error"), + gst_tag_register_static (GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR, + GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location horizontal error"), _("expected error of the horizontal positioning measures (in meters)"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, GST_TAG_FLAG_META, - G_TYPE_DOUBLE, _("geo location movement speed"), + gst_tag_register_static (GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, + GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location movement speed"), _("movement speed of the capturing device while performing the capture " "in m/s"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, GST_TAG_FLAG_META, - G_TYPE_DOUBLE, _("geo location movement direction"), + gst_tag_register_static (GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, + GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location movement direction"), _("indicates the movement direction of the device performing the capture" " of a media. It is represented as degrees in floating point " "representation, 0 means the geographic north, and increases " "clockwise"), NULL); - gst_tag_register (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, GST_TAG_FLAG_META, - G_TYPE_DOUBLE, _("geo location capture direction"), + gst_tag_register_static (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, + GST_TAG_FLAG_META, G_TYPE_DOUBLE, _("geo location capture direction"), _("indicates the direction the device is pointing to when capturing " " a media. It is represented as degrees in floating point " " representation, 0 means the geographic north, and increases " "clockwise"), NULL); - gst_tag_register (GST_TAG_SHOW_NAME, GST_TAG_FLAG_META, G_TYPE_STRING, + gst_tag_register_static (GST_TAG_SHOW_NAME, GST_TAG_FLAG_META, G_TYPE_STRING, /* TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here */ _("show name"), _("Name of the tv/podcast/series show the media is from"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_SHOW_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, + gst_tag_register_static (GST_TAG_SHOW_SORTNAME, GST_TAG_FLAG_META, + G_TYPE_STRING, /* TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here */ _("show sortname"), _("Name of the tv/podcast/series show the media is from, for sorting " "purposes"), NULL); - gst_tag_register (GST_TAG_SHOW_EPISODE_NUMBER, GST_TAG_FLAG_META, G_TYPE_UINT, - _("episode number"), + gst_tag_register_static (GST_TAG_SHOW_EPISODE_NUMBER, GST_TAG_FLAG_META, + G_TYPE_UINT, _("episode number"), _("The episode number in the season the media is part of"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_SHOW_SEASON_NUMBER, GST_TAG_FLAG_META, G_TYPE_UINT, - _("season number"), + gst_tag_register_static (GST_TAG_SHOW_SEASON_NUMBER, GST_TAG_FLAG_META, + G_TYPE_UINT, _("season number"), _("The season number of the show the media is part of"), gst_tag_merge_use_first); - gst_tag_register (GST_TAG_LYRICS, GST_TAG_FLAG_META, G_TYPE_STRING, + gst_tag_register_static (GST_TAG_LYRICS, GST_TAG_FLAG_META, G_TYPE_STRING, _("lyrics"), _("The lyrics of the media, commonly used for songs"), gst_tag_merge_strings_with_comma); - gst_tag_register (GST_TAG_COMPOSER_SORTNAME, GST_TAG_FLAG_META, G_TYPE_STRING, - _("composer sortname"), + gst_tag_register_static (GST_TAG_COMPOSER_SORTNAME, GST_TAG_FLAG_META, + G_TYPE_STRING, _("composer sortname"), _("person(s) who composed the recording, for sorting purposes"), NULL); - gst_tag_register (GST_TAG_GROUPING, GST_TAG_FLAG_META, G_TYPE_STRING, + gst_tag_register_static (GST_TAG_GROUPING, GST_TAG_FLAG_META, G_TYPE_STRING, _("grouping"), _("Groups related media that spans multiple tracks, like the different " "pieces of a concerto. It is a higher level than a track, " "but lower than an album"), NULL); - gst_tag_register (GST_TAG_USER_RATING, GST_TAG_FLAG_META, G_TYPE_UINT, + gst_tag_register_static (GST_TAG_USER_RATING, GST_TAG_FLAG_META, G_TYPE_UINT, _("user rating"), _("Rating attributed by a user. The higher the rank, " "the more the user likes this media"), NULL); - gst_tag_register (GST_TAG_DEVICE_MANUFACTURER, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_DEVICE_MANUFACTURER, GST_TAG_FLAG_META, G_TYPE_STRING, _("device manufacturer"), _("Manufacturer of the device used to create this media"), NULL); - gst_tag_register (GST_TAG_DEVICE_MODEL, GST_TAG_FLAG_META, G_TYPE_STRING, - _("device model"), + gst_tag_register_static (GST_TAG_DEVICE_MODEL, GST_TAG_FLAG_META, + G_TYPE_STRING, _("device model"), _("Model of the device used to create this media"), NULL); - gst_tag_register (GST_TAG_APPLICATION_NAME, GST_TAG_FLAG_META, G_TYPE_STRING, - _("application name"), _("Application used to create the media"), NULL); - gst_tag_register (GST_TAG_APPLICATION_DATA, GST_TAG_FLAG_META, + gst_tag_register_static (GST_TAG_APPLICATION_NAME, GST_TAG_FLAG_META, + G_TYPE_STRING, _("application name"), + _("Application used to create the media"), NULL); + gst_tag_register_static (GST_TAG_APPLICATION_DATA, GST_TAG_FLAG_META, GST_TYPE_BUFFER, _("application data"), _("Arbitrary application data to be serialized into the media"), NULL); - gst_tag_register (GST_TAG_IMAGE_ORIENTATION, GST_TAG_FLAG_META, G_TYPE_STRING, - _("image orientation"), + gst_tag_register_static (GST_TAG_IMAGE_ORIENTATION, GST_TAG_FLAG_META, + G_TYPE_STRING, _("image orientation"), _("How the image should be rotated or flipped before display"), NULL); } @@ -469,9 +486,37 @@ gst_tag_lookup (const gchar * tag_name) void gst_tag_register (const gchar * name, GstTagFlag flag, GType type, const gchar * nick, const gchar * blurb, GstTagMergeFunc func) +{ + g_return_if_fail (name != NULL); + g_return_if_fail (nick != NULL); + g_return_if_fail (blurb != NULL); + g_return_if_fail (type != 0 && type != GST_TYPE_LIST); + + return gst_tag_register_static (g_intern_string (name), flag, type, + g_intern_string (nick), g_intern_string (blurb), func); +} + +/** + * gst_tag_register_static: + * @name: the name or identifier string (string constant) + * @flag: a flag describing the type of tag info + * @type: the type this data is in + * @nick: human-readable name or short description (string constant) + * @blurb: a human-readable description for this tag (string constant) + * @func: function for merging multiple values of this tag, or NULL + * + * Registers a new tag type for the use with GStreamer's type system. + * + * Same as gst_tag_register(), but @name, @nick, and @blurb must be + * static strings or inlined strings, as they will not be copied. (GStreamer + * plugins will be made resident once loaded, so this function can be used + * even from dynamically loaded plugins.) + */ +void +gst_tag_register_static (const gchar * name, GstTagFlag flag, GType type, + const gchar * nick, const gchar * blurb, GstTagMergeFunc func) { GstTagInfo *info; - gchar *name_dup; g_return_if_fail (name != NULL); g_return_if_fail (nick != NULL); @@ -488,17 +533,13 @@ gst_tag_register (const gchar * name, GstTagFlag flag, GType type, info = g_slice_new (GstTagInfo); info->flag = flag; info->type = type; - info->nick = g_strdup (nick); - info->blurb = g_strdup (blurb); + info->name_quark = g_quark_from_static_string (name); + info->nick = nick; + info->blurb = blurb; info->merge_func = func; - /* we make a copy for the hash table anyway, which will stay around, so - * can use that for the quark table too */ - name_dup = g_strdup (name); - info->name_quark = g_quark_from_static_string (name_dup); - TAG_LOCK; - g_hash_table_insert (__tags, (gpointer) name_dup, info); + g_hash_table_insert (__tags, (gpointer) name, info); TAG_UNLOCK; } @@ -621,19 +662,82 @@ gst_tag_is_fixed (const gchar * tag) return info->merge_func == NULL; } +static void +gst_tag_list_init (GstTagList * taglist, gsize size) +{ + gst_mini_object_init (GST_MINI_OBJECT_CAST (taglist), + gst_tag_list_get_type (), size); + + taglist->mini_object.copy = (GstMiniObjectCopyFunction) __gst_tag_list_copy; + taglist->mini_object.dispose = NULL; + taglist->mini_object.free = (GstMiniObjectFreeFunction) __gst_tag_list_free; +} + +/* takes ownership of the structure */ +static GstTagList * +gst_tag_list_new_internal (GstStructure * s) +{ + GstTagList *tag_list; + + g_assert (s != NULL); + + tag_list = (GstTagList *) g_slice_new (GstTagListImpl); + + gst_tag_list_init (tag_list, sizeof (GstTagListImpl)); + + GST_TAG_LIST_STRUCTURE (tag_list) = s; + +#ifdef DEBUG_REFCOUNT + GST_CAT_TRACE (GST_CAT_TAGS, "created taglist %p", tag_list); +#endif + + return tag_list; +} + +static void +__gst_tag_list_free (GstTagList * list) +{ + g_return_if_fail (GST_IS_TAG_LIST (list)); + +#ifdef DEBUG_REFCOUNT + GST_CAT_TRACE (GST_CAT_TAGS, "freeing caps %p", list); +#endif + + gst_structure_free (GST_TAG_LIST_STRUCTURE (list)); + + /* why not just pass sizeof (GstTagListImpl) here? */ + g_slice_free1 (GST_MINI_OBJECT_SIZE (list), list); +} + +static GstTagList * +__gst_tag_list_copy (const GstTagList * list) +{ + const GstStructure *s; + + g_return_val_if_fail (GST_IS_TAG_LIST (list), NULL); + + s = GST_TAG_LIST_STRUCTURE (list); + return gst_tag_list_new_internal (gst_structure_copy (s)); +} + /** * gst_tag_list_new_empty: * * Creates a new empty GstTagList. * - * Free-function: gst_tag_list_free + * Free-function: gst_tag_list_unref * * Returns: (transfer full): An empty tag list */ GstTagList * gst_tag_list_new_empty (void) { - return GST_TAG_LIST (gst_structure_new_id_empty (GST_QUARK (TAGLIST))); + GstStructure *s; + GstTagList *tag_list; + + s = gst_structure_new_id_empty (GST_QUARK (TAGLIST)); + tag_list = gst_tag_list_new_internal (s); + return tag_list; } /** @@ -649,9 +753,9 @@ gst_tag_list_new_empty (void) * function. The tag list will make copies of any arguments passed * (e.g. strings, buffers). * - * Free-function: gst_tag_list_free + * Free-function: gst_tag_list_unref * - * Returns: (transfer full): a new #GstTagList. Free with gst_tag_list_free() + * Returns: (transfer full): a new #GstTagList. Free with gst_tag_list_unref() * when no longer needed. * * Since: 0.10.24 @@ -679,9 +783,9 @@ gst_tag_list_new (const gchar * tag, ...) * Just like gst_tag_list_new(), only that it takes a va_list argument. * Useful mostly for language bindings. * - * Free-function: gst_tag_list_free + * Free-function: gst_tag_list_unref * - * Returns: (transfer full): a new #GstTagList. Free with gst_tag_list_free() + * Returns: (transfer full): a new #GstTagList. Free with gst_tag_list_unref() * when no longer needed. * * Since: 0.10.24 @@ -716,7 +820,7 @@ gst_tag_list_to_string (const GstTagList * list) { g_return_val_if_fail (GST_IS_TAG_LIST (list), NULL); - return gst_structure_to_string (GST_STRUCTURE (list)); + return gst_structure_to_string (GST_TAG_LIST_STRUCTURE (list)); } /** @@ -732,10 +836,13 @@ gst_tag_list_to_string (const GstTagList * list) GstTagList * gst_tag_list_new_from_string (const gchar * str) { + GstTagList *tag_list; + g_return_val_if_fail (str != NULL, NULL); g_return_val_if_fail (g_str_has_prefix (str, "taglist"), NULL); - return GST_TAG_LIST (gst_structure_from_string (str, NULL)); + tag_list = gst_tag_list_new_internal (gst_structure_from_string (str, NULL)); + return tag_list; } /** @@ -752,7 +859,7 @@ gst_tag_list_n_tags (const GstTagList * list) g_return_val_if_fail (list != NULL, 0); g_return_val_if_fail (GST_IS_TAG_LIST (list), 0); - return gst_structure_n_fields ((GstStructure *) list); + return gst_structure_n_fields (GST_TAG_LIST_STRUCTURE (list)); } /** @@ -770,7 +877,7 @@ gst_tag_list_nth_tag_name (const GstTagList * list, guint index) g_return_val_if_fail (list != NULL, 0); g_return_val_if_fail (GST_IS_TAG_LIST (list), 0); - return gst_structure_nth_field_name ((GstStructure *) list, index); + return gst_structure_nth_field_name (GST_TAG_LIST_STRUCTURE (list), index); } /** @@ -789,7 +896,7 @@ gst_tag_list_is_empty (const GstTagList * list) g_return_val_if_fail (list != NULL, FALSE); g_return_val_if_fail (GST_IS_TAG_LIST (list), FALSE); - return (gst_structure_n_fields ((GstStructure *) list) == 0); + return (gst_structure_n_fields (GST_TAG_LIST_STRUCTURE (list)) == 0); } static gboolean @@ -836,8 +943,8 @@ gst_tag_list_is_equal (const GstTagList * list1, const GstTagList * list2) /* we don't just use gst_structure_is_equal() here so we can add some * tolerance for doubles, though maybe we should just add that to * gst_value_compare_double() as well? */ - s1 = (const GstStructure *) list1; - s2 = (const GstStructure *) list2; + s1 = GST_TAG_LIST_STRUCTURE (list1); + s2 = GST_TAG_LIST_STRUCTURE (list2); num_fields1 = gst_structure_n_fields (s1); num_fields2 = gst_structure_n_fields (s2); @@ -863,24 +970,6 @@ gst_tag_list_is_equal (const GstTagList * list1, const GstTagList * list2) return TRUE; } -/** - * gst_is_tag_list: - * @p: Object that might be a taglist - * - * Checks if the given pointer is a taglist. - * - * Returns: TRUE, if the given pointer is a taglist - */ -gboolean -gst_is_tag_list (gconstpointer p) -{ - GstStructure *s = (GstStructure *) p; - - g_return_val_if_fail (p != NULL, FALSE); - - return (GST_IS_STRUCTURE (s) && s->name == GST_QUARK (TAGLIST)); -} - typedef struct { GstTagList *list; @@ -892,7 +981,7 @@ static void gst_tag_list_add_value_internal (GstTagList * tag_list, GstTagMergeMode mode, const gchar * tag, const GValue * value, GstTagInfo * info) { - GstStructure *list = GST_STRUCTURE (tag_list); + GstStructure *list = GST_TAG_LIST_STRUCTURE (tag_list); const GValue *value2; GQuark tag_quark; @@ -981,34 +1070,17 @@ gst_tag_list_insert (GstTagList * into, const GstTagList * from, GstTagCopyData data; g_return_if_fail (GST_IS_TAG_LIST (into)); + g_return_if_fail (gst_tag_list_is_writable (into)); g_return_if_fail (GST_IS_TAG_LIST (from)); g_return_if_fail (GST_TAG_MODE_IS_VALID (mode)); data.list = into; data.mode = mode; if (mode == GST_TAG_MERGE_REPLACE_ALL) { - gst_structure_remove_all_fields (GST_STRUCTURE (data.list)); + gst_structure_remove_all_fields (GST_TAG_LIST_STRUCTURE (into)); } - gst_structure_foreach ((GstStructure *) from, gst_tag_list_copy_foreach, - &data); -} - -/** - * gst_tag_list_copy: - * @list: list to copy - * - * Copies a given #GstTagList. - * - * Free-function: gst_tag_list_free - * - * Returns: (transfer full): copy of the given list - */ -GstTagList * -gst_tag_list_copy (const GstTagList * list) -{ - g_return_val_if_fail (GST_IS_TAG_LIST (list), NULL); - - return GST_TAG_LIST (gst_structure_copy ((GstStructure *) list)); + gst_structure_foreach (GST_TAG_LIST_STRUCTURE (from), + gst_tag_list_copy_foreach, &data); } /** @@ -1020,7 +1092,7 @@ gst_tag_list_copy (const GstTagList * list) * Merges the two given lists into a new list. If one of the lists is NULL, a * copy of the other is returned. If both lists are NULL, NULL is returned. * - * Free-function: gst_tag_list_free + * Free-function: gst_tag_list_unref * * Returns: (transfer full): the new list */ @@ -1047,24 +1119,11 @@ gst_tag_list_merge (const GstTagList * list1, const GstTagList * list2, gst_tag_list_insert (list1_cp, list2_cp, mode); if (!list2) - gst_tag_list_free ((GstTagList *) list2_cp); + gst_tag_list_unref ((GstTagList *) list2_cp); return list1_cp; } -/** - * gst_tag_list_free: - * @list: (in) (transfer full): the list to free - * - * Frees the given list and all associated values. - */ -void -gst_tag_list_free (GstTagList * list) -{ - g_return_if_fail (GST_IS_TAG_LIST (list)); - gst_structure_free ((GstStructure *) list); -} - /** * gst_tag_list_get_tag_size: * @list: a taglist @@ -1081,7 +1140,7 @@ gst_tag_list_get_tag_size (const GstTagList * list, const gchar * tag) g_return_val_if_fail (GST_IS_TAG_LIST (list), 0); - value = gst_structure_get_value ((GstStructure *) list, tag); + value = gst_structure_get_value (GST_TAG_LIST_STRUCTURE (list), tag); if (value == NULL) return 0; if (G_VALUE_TYPE (value) != GST_TYPE_LIST) @@ -1106,6 +1165,7 @@ gst_tag_list_add (GstTagList * list, GstTagMergeMode mode, const gchar * tag, va_list args; g_return_if_fail (GST_IS_TAG_LIST (list)); + g_return_if_fail (gst_tag_list_is_writable (list)); g_return_if_fail (GST_TAG_MODE_IS_VALID (mode)); g_return_if_fail (tag != NULL); @@ -1130,6 +1190,7 @@ gst_tag_list_add_values (GstTagList * list, GstTagMergeMode mode, va_list args; g_return_if_fail (GST_IS_TAG_LIST (list)); + g_return_if_fail (gst_tag_list_is_writable (list)); g_return_if_fail (GST_TAG_MODE_IS_VALID (mode)); g_return_if_fail (tag != NULL); @@ -1155,11 +1216,12 @@ gst_tag_list_add_valist (GstTagList * list, GstTagMergeMode mode, gchar *error = NULL; g_return_if_fail (GST_IS_TAG_LIST (list)); + g_return_if_fail (gst_tag_list_is_writable (list)); g_return_if_fail (GST_TAG_MODE_IS_VALID (mode)); g_return_if_fail (tag != NULL); if (mode == GST_TAG_MERGE_REPLACE_ALL) { - gst_structure_remove_all_fields (GST_STRUCTURE (list)); + gst_structure_remove_all_fields (GST_TAG_LIST_STRUCTURE (list)); } while (tag != NULL) { @@ -1199,11 +1261,12 @@ gst_tag_list_add_valist_values (GstTagList * list, GstTagMergeMode mode, const gchar * tag, va_list var_args) { g_return_if_fail (GST_IS_TAG_LIST (list)); + g_return_if_fail (gst_tag_list_is_writable (list)); g_return_if_fail (GST_TAG_MODE_IS_VALID (mode)); g_return_if_fail (tag != NULL); if (mode == GST_TAG_MERGE_REPLACE_ALL) { - gst_structure_remove_all_fields (GST_STRUCTURE (list)); + gst_structure_remove_all_fields (GST_TAG_LIST_STRUCTURE (list)); } while (tag != NULL) { @@ -1236,6 +1299,7 @@ gst_tag_list_add_value (GstTagList * list, GstTagMergeMode mode, const gchar * tag, const GValue * value) { g_return_if_fail (GST_IS_TAG_LIST (list)); + g_return_if_fail (gst_tag_list_is_writable (list)); g_return_if_fail (GST_TAG_MODE_IS_VALID (mode)); g_return_if_fail (tag != NULL); @@ -1255,7 +1319,7 @@ gst_tag_list_remove_tag (GstTagList * list, const gchar * tag) g_return_if_fail (GST_IS_TAG_LIST (list)); g_return_if_fail (tag != NULL); - gst_structure_remove_field ((GstStructure *) list, tag); + gst_structure_remove_field (GST_TAG_LIST_STRUCTURE (list), tag); } typedef struct @@ -1297,8 +1361,8 @@ gst_tag_list_foreach (const GstTagList * list, GstTagForeachFunc func, data.func = func; data.tag_list = list; data.data = user_data; - gst_structure_foreach ((GstStructure *) list, structure_foreach_wrapper, - &data); + gst_structure_foreach (GST_TAG_LIST_STRUCTURE (list), + structure_foreach_wrapper, &data); } /** @@ -1322,7 +1386,7 @@ gst_tag_list_get_value_index (const GstTagList * list, const gchar * tag, g_return_val_if_fail (GST_IS_TAG_LIST (list), NULL); g_return_val_if_fail (tag != NULL, NULL); - value = gst_structure_get_value ((GstStructure *) list, tag); + value = gst_structure_get_value (GST_TAG_LIST_STRUCTURE (list), tag); if (value == NULL) return NULL; @@ -1362,7 +1426,7 @@ gst_tag_list_copy_value (GValue * dest, const GstTagList * list, g_return_val_if_fail (dest != NULL, FALSE); g_return_val_if_fail (G_VALUE_TYPE (dest) == 0, FALSE); - src = gst_structure_get_value ((GstStructure *) list, tag); + src = gst_structure_get_value (GST_TAG_LIST_STRUCTURE (list), tag); if (!src) return FALSE; diff --git a/gst/gsttaglist.h b/gst/gsttaglist.h index 00a2770..7940a31 100644 --- a/gst/gsttaglist.h +++ b/gst/gsttaglist.h @@ -132,6 +132,7 @@ typedef enum { * * Extra tag flags used when registering tags. */ +/* FIXME: these are not really flags .. */ typedef enum { GST_TAG_FLAG_UNDEFINED, GST_TAG_FLAG_META, @@ -144,14 +145,18 @@ typedef enum { /** * GstTagList: + * @mini_object: the parent type * - * Opaque #GstTagList data structure. + * Object describing tags / metadata. */ typedef struct _GstTagList GstTagList; +struct _GstTagList { + GstMiniObject mini_object; +}; #define GST_TAG_LIST(x) ((GstTagList *) (x)) -#define GST_IS_TAG_LIST(x) ((x) != NULL && gst_is_tag_list (GST_TAG_LIST (x))) #define GST_TYPE_TAG_LIST (gst_tag_list_get_type ()) +#define GST_IS_TAG_LIST(obj) (GST_IS_MINI_OBJECT_TYPE((obj), GST_TYPE_TAG_LIST)) /** * GstTagForeachFunc: @@ -186,6 +191,13 @@ void gst_tag_register (const gchar * name, const gchar * blurb, GstTagMergeFunc func); +void gst_tag_register_static (const gchar * name, + GstTagFlag flag, + GType type, + const gchar * nick, + const gchar * blurb, + GstTagMergeFunc func); + /* some default merging functions */ void gst_tag_merge_use_first (GValue * dest, const GValue * src); void gst_tag_merge_strings_with_comma (GValue * dest, const GValue * src); @@ -206,8 +218,6 @@ GstTagList * gst_tag_list_new_valist (va_list var_args) G_GNUC_MALLOC; gchar * gst_tag_list_to_string (const GstTagList * list) G_GNUC_MALLOC; GstTagList * gst_tag_list_new_from_string (const gchar * str) G_GNUC_MALLOC; -gboolean gst_is_tag_list (gconstpointer p); -GstTagList * gst_tag_list_copy (const GstTagList * list) G_GNUC_MALLOC; gint gst_tag_list_n_tags (const GstTagList * list); const gchar* gst_tag_list_nth_tag_name (const GstTagList * list, guint index); gboolean gst_tag_list_is_empty (const GstTagList * list); @@ -219,7 +229,6 @@ void gst_tag_list_insert (GstTagList * into, GstTagList * gst_tag_list_merge (const GstTagList * list1, const GstTagList * list2, GstTagMergeMode mode) G_GNUC_MALLOC; -void gst_tag_list_free (GstTagList * list); guint gst_tag_list_get_tag_size (const GstTagList * list, const gchar * tag); void gst_tag_list_add (GstTagList * list, @@ -346,6 +355,104 @@ gboolean gst_tag_list_get_buffer_index (const GstTagList * list, guint index, GstBuffer ** value); +/* refcounting */ +/** + * gst_tag_list_ref: + * @taglist: the #GstTagList to reference + * + * Add a reference to a #GstTagList mini object. + * + * From this point on, until the caller calls gst_tag_list_unref() or + * gst_tag_list_make_writable(), it is guaranteed that the taglist object will + * not change. To use a #GstTagList object, you must always have a refcount on + * it -- either the one made implicitly by e.g. gst_tag_list_new(), or via + * taking one explicitly with this function. + * + * Returns: the same #GstTagList mini object. + */ +#ifdef _FOOL_GTK_DOC_ +G_INLINE_FUNC GstTagList * gst_tag_list_ref (GstTagList * taglist); +#endif + +static inline GstTagList * +gst_tag_list_ref (GstTagList * taglist) +{ + return (GstTagList *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (taglist)); +} + +/** + * gst_tag_list_unref: + * @taglist: a #GstTagList. + * + * Unref a #GstTagList, and and free all its memory when the refcount reaches 0. + */ +#ifdef _FOOL_GTK_DOC_ +G_INLINE_FUNC void gst_tag_list_unref (GstTagList * taglist); +#endif + +static inline void +gst_tag_list_unref (GstTagList * taglist) +{ + gst_mini_object_unref (GST_MINI_OBJECT_CAST (taglist)); +} + +/** + * gst_tag_list_copy: + * @taglist: a #GstTagList. + * + * Creates a new #GstTagList as a copy of the old @taglist. The new taglist + * will have a refcount of 1, owned by the caller, and will be writable as + * a result. + * + * Note that this function is the semantic equivalent of a gst_tag_list_ref() + * followed by a gst_tag_list_make_writable(). If you only want to hold on to a + * reference to the data, you should use gst_tag_list_ref(). + * + * When you are finished with the taglist, call gst_tag_list_unref() on it. + * + * Returns: the new #GstTagList + */ +#ifdef _FOOL_GTK_DOC_ +G_INLINE_FUNC GstTagList * gst_tag_list_copy (const GstTagList * taglist); +#endif + +static inline GstTagList * +gst_tag_list_copy (const GstTagList * taglist) +{ + return GST_TAG_LIST (gst_mini_object_copy (GST_MINI_OBJECT_CAST (taglist))); +} + +/** + * gst_tag_list_is_writable: + * @taglist: a #GstTagList + * + * Tests if you can safely modify @taglist. It is only safe to modify taglist + * when there is only one owner of the taglist - ie, the refcount is 1. + */ +#define gst_tag_list_is_writable(taglist) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (taglist)) + +/** + * gst_tag_list_make_writable: + * @taglist: (transfer full): a #GstTagList + * + * Returns a writable copy of @taglist. + * + * If there is only one reference count on @taglist, the caller must be the + * owner, and so this function will return the taglist object unchanged. If on + * the other hand there is more than one reference on the object, a new taglist + * object will be returned (which will be a copy of @taglist). The caller's + * reference on @taglist will be removed, and instead the caller will own a + * reference to the returned object. + * + * In short, this function unrefs the taglist in the argument and refs the + * taglist that it returns. Don't access the argument after calling this + * function. See also: gst_tag_list_ref(). + * + * Returns: (transfer full): a writable taglist which may or may not be the + * same as @taglist + */ +#define gst_tag_list_make_writable(taglist) GST_TAG_LIST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (taglist))) + /* GStreamer core tags */ /** * GST_TAG_TITLE: @@ -723,7 +830,7 @@ gboolean gst_tag_list_get_buffer_index (const GstTagList * list, /** * GST_TAG_IMAGE: * - * image (sample) (sample caps should specify the content type and preferably + * image (sample) (sample taglist should specify the content type and preferably * also set "image-type" field as #GstTagImageType) * * Since: 0.10.6 @@ -733,7 +840,7 @@ gboolean gst_tag_list_get_buffer_index (const GstTagList * list, * GST_TAG_PREVIEW_IMAGE: * * image that is meant for preview purposes, e.g. small icon-sized version - * (sample) (sample caps should specify the content type) + * (sample) (sample taglist should specify the content type) * * Since: 0.10.7 */ @@ -742,7 +849,7 @@ gboolean gst_tag_list_get_buffer_index (const GstTagList * list, /** * GST_TAG_ATTACHMENT: * - * generic file attachment (sample) (sample caps should specify the content + * generic file attachment (sample) (sample taglist should specify the content * type and if possible set "filename" to the file name of the * attachment) * diff --git a/gst/gsttagsetter.c b/gst/gsttagsetter.c index 2ed099d..b538c59 100644 --- a/gst/gsttagsetter.c +++ b/gst/gsttagsetter.c @@ -126,7 +126,7 @@ gst_tag_data_free (gpointer p) GstTagData *data = (GstTagData *) p; if (data->list) - gst_tag_list_free (data->list); + gst_tag_list_unref (data->list); g_mutex_clear (&data->lock); @@ -181,7 +181,7 @@ gst_tag_setter_reset_tags (GstTagSetter * setter) GST_TAG_DATA_LOCK (data); if (data->list) { - gst_tag_list_free (data->list); + gst_tag_list_unref (data->list); data->list = NULL; } GST_TAG_DATA_UNLOCK (data); diff --git a/gst/gsttoc.c b/gst/gsttoc.c index 0ea0f33..b79717b 100644 --- a/gst/gsttoc.c +++ b/gst/gsttoc.c @@ -70,90 +70,12 @@ #include "gstvalue.h" #include "gsttoc.h" #include "gstpad.h" +#include "gstquark.h" -#define GST_TOC_TOC_NAME "toc" -#define GST_TOC_ENTRY_NAME "entry" - -#define GST_TOC_TOC_UPDATED_FIELD "updated" -#define GST_TOC_TOC_EXTENDUID_FIELD "extenduid" -#define GST_TOC_INFO_FIELD "info" - -#define GST_TOC_ENTRY_UID_FIELD "uid" -#define GST_TOC_ENTRY_TYPE_FIELD "type" -#define GST_TOC_ENTRY_TAGS_FIELD "tags" - -#define GST_TOC_TOC_ENTRIES_FIELD "subentries" - -#define GST_TOC_INFO_NAME "info-structure" -#define GST_TOC_INFO_TIME_FIELD "time" - -#define GST_TOC_TIME_NAME "time-structure" -#define GST_TOC_TIME_START_FIELD "start" -#define GST_TOC_TIME_STOP_FIELD "stop" - - -enum -{ - GST_TOC_TOC = 0, - GST_TOC_ENTRY = 1, - GST_TOC_UPDATED = 2, - GST_TOC_EXTENDUID = 3, - GST_TOC_UID = 4, - GST_TOC_TYPE = 5, - GST_TOC_TAGS = 6, - GST_TOC_SUBENTRIES = 7, - GST_TOC_INFO = 8, - GST_TOC_INFONAME = 9, - GST_TOC_TIME = 10, - GST_TOC_TIMENAME = 11, - GST_TOC_TIME_START = 12, - GST_TOC_TIME_STOP = 13, - GST_TOC_LAST = 14 -}; - -static GQuark gst_toc_fields[GST_TOC_LAST] = { 0 }; - -void -_priv_gst_toc_initialize (void) -{ - static gboolean inited = FALSE; - - if (G_LIKELY (!inited)) { - gst_toc_fields[GST_TOC_TOC] = g_quark_from_static_string (GST_TOC_TOC_NAME); - gst_toc_fields[GST_TOC_ENTRY] = - g_quark_from_static_string (GST_TOC_ENTRY_NAME); - - gst_toc_fields[GST_TOC_UPDATED] = - g_quark_from_static_string (GST_TOC_TOC_UPDATED_FIELD); - gst_toc_fields[GST_TOC_EXTENDUID] = - g_quark_from_static_string (GST_TOC_TOC_EXTENDUID_FIELD); - gst_toc_fields[GST_TOC_INFO] = - g_quark_from_static_string (GST_TOC_INFO_FIELD); - - gst_toc_fields[GST_TOC_UID] = - g_quark_from_static_string (GST_TOC_ENTRY_UID_FIELD); - gst_toc_fields[GST_TOC_TYPE] = - g_quark_from_static_string (GST_TOC_ENTRY_TYPE_FIELD); - gst_toc_fields[GST_TOC_TAGS] = - g_quark_from_static_string (GST_TOC_ENTRY_TAGS_FIELD); - - gst_toc_fields[GST_TOC_SUBENTRIES] = - g_quark_from_static_string (GST_TOC_TOC_ENTRIES_FIELD); - - gst_toc_fields[GST_TOC_INFONAME] = - g_quark_from_static_string (GST_TOC_INFO_NAME); - gst_toc_fields[GST_TOC_TIME] = - g_quark_from_static_string (GST_TOC_INFO_TIME_FIELD); - gst_toc_fields[GST_TOC_TIMENAME] = - g_quark_from_static_string (GST_TOC_TIME_NAME); - gst_toc_fields[GST_TOC_TIME_START] = - g_quark_from_static_string (GST_TOC_TIME_START_FIELD); - gst_toc_fields[GST_TOC_TIME_STOP] = - g_quark_from_static_string (GST_TOC_TIME_STOP_FIELD); - - inited = TRUE; - } -} +G_DEFINE_BOXED_TYPE (GstToc, gst_toc, + (GBoxedCopyFunc) gst_toc_copy, (GBoxedFreeFunc) gst_toc_free); +G_DEFINE_BOXED_TYPE (GstTocEntry, gst_toc_entry, + (GBoxedCopyFunc) gst_toc_entry_copy, (GBoxedFreeFunc) gst_toc_entry_free); /** * gst_toc_new: @@ -171,7 +93,7 @@ gst_toc_new (void) toc = g_slice_new0 (GstToc); toc->tags = gst_tag_list_new_empty (); - toc->info = gst_structure_new_id_empty (gst_toc_fields[GST_TOC_INFONAME]); + toc->info = gst_structure_new_id_empty (GST_QUARK (INFO_STRUCTURE)); return toc; } @@ -198,7 +120,7 @@ gst_toc_entry_new (GstTocEntryType type, const gchar * uid) entry->uid = g_strdup (uid); entry->type = type; entry->tags = gst_tag_list_new_empty (); - entry->info = gst_structure_new_id_empty (gst_toc_fields[GST_TOC_INFONAME]); + entry->info = gst_structure_new_id_empty (GST_QUARK (INFO_STRUCTURE)); return entry; } @@ -218,7 +140,7 @@ gst_toc_entry_new (GstTocEntryType type, const gchar * uid) */ GstTocEntry * gst_toc_entry_new_with_pad (GstTocEntryType type, const gchar * uid, - gpointer pad) + GstPad * pad) { GstTocEntry *entry; @@ -228,7 +150,7 @@ gst_toc_entry_new_with_pad (GstTocEntryType type, const gchar * uid, entry->uid = g_strdup (uid); entry->type = type; entry->tags = gst_tag_list_new_empty (); - entry->info = gst_structure_new_id_empty (gst_toc_fields[GST_TOC_INFONAME]); + entry->info = gst_structure_new_id_empty (GST_QUARK (INFO_STRUCTURE)); if (pad != NULL && GST_IS_PAD (pad)) entry->pads = g_list_append (entry->pads, gst_object_ref (pad)); @@ -253,7 +175,7 @@ gst_toc_free (GstToc * toc) g_list_free (toc->entries); if (toc->tags != NULL) - gst_tag_list_free (toc->tags); + gst_tag_list_unref (toc->tags); if (toc->info != NULL) gst_structure_free (toc->info); @@ -284,7 +206,7 @@ gst_toc_entry_free (GstTocEntry * entry) g_free (entry->uid); if (entry->tags != NULL) - gst_tag_list_free (entry->tags); + gst_tag_list_unref (entry->tags); if (entry->info != NULL) gst_structure_free (entry->info); @@ -305,22 +227,16 @@ static GstStructure * gst_toc_structure_new (GstTagList * tags, GstStructure * info) { GstStructure *ret; - GValue val = { 0 }; - ret = gst_structure_new_id_empty (gst_toc_fields[GST_TOC_TOC]); + ret = gst_structure_new_id_empty (GST_QUARK (TOC)); if (tags != NULL) { - g_value_init (&val, GST_TYPE_STRUCTURE); - gst_value_set_structure (&val, GST_STRUCTURE (tags)); - gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_TAGS], &val); - g_value_unset (&val); + gst_structure_id_set (ret, GST_QUARK (TAGS), GST_TYPE_TAG_LIST, tags, NULL); } if (info != NULL) { - g_value_init (&val, GST_TYPE_STRUCTURE); - gst_value_set_structure (&val, info); - gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_INFO], &val); - g_value_unset (&val); + gst_structure_id_set (ret, GST_QUARK (INFO), GST_TYPE_STRUCTURE, info, + NULL); } return ret; @@ -330,31 +246,21 @@ static GstStructure * gst_toc_entry_structure_new (GstTocEntryType type, const gchar * uid, GstTagList * tags, GstStructure * info) { - GValue val = { 0 }; GstStructure *ret; - ret = gst_structure_new_id_empty (gst_toc_fields[GST_TOC_ENTRY]); + ret = gst_structure_new_id_empty (GST_QUARK (TOC_ENTRY)); - gst_structure_id_set (ret, gst_toc_fields[GST_TOC_TYPE], - GST_TYPE_TOC_ENTRY_TYPE, type, NULL); - - g_value_init (&val, G_TYPE_STRING); - g_value_set_string (&val, uid); - gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_UID], &val); - g_value_unset (&val); + gst_structure_id_set (ret, GST_QUARK (TYPE), GST_TYPE_TOC_ENTRY_TYPE, type, + NULL); + gst_structure_id_set (ret, GST_QUARK (UID), G_TYPE_STRING, uid, NULL); if (tags != NULL) { - g_value_init (&val, GST_TYPE_STRUCTURE); - gst_value_set_structure (&val, GST_STRUCTURE (tags)); - gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_TAGS], &val); - g_value_unset (&val); + gst_structure_id_set (ret, GST_QUARK (TAGS), GST_TYPE_TAG_LIST, tags, NULL); } if (info != NULL) { - g_value_init (&val, GST_TYPE_STRUCTURE); - gst_value_set_structure (&val, info); - gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_INFO], &val); - g_value_unset (&val); + gst_structure_id_set (ret, GST_QUARK (INFO), GST_TYPE_STRUCTURE, info, + NULL); } return ret; @@ -364,11 +270,11 @@ static guint gst_toc_entry_structure_n_subentries (const GstStructure * entry) { if (G_UNLIKELY (!gst_structure_id_has_field_typed (entry, - gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY))) + GST_QUARK (SUB_ENTRIES), GST_TYPE_ARRAY))) return 0; else return gst_value_array_get_size ((gst_structure_id_get_value (entry, - gst_toc_fields[GST_TOC_SUBENTRIES]))); + GST_QUARK (SUB_ENTRIES)))); } static const GstStructure * @@ -383,12 +289,12 @@ gst_toc_entry_structure_nth_subentry (const GstStructure * entry, guint nth) return NULL; if (G_UNLIKELY (!gst_structure_id_has_field_typed (entry, - gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY))) + GST_QUARK (SUB_ENTRIES), GST_TYPE_ARRAY))) return NULL; else { array = gst_value_array_get_value (gst_structure_id_get_value (entry, - gst_toc_fields[GST_TOC_SUBENTRIES]), nth); + GST_QUARK (SUB_ENTRIES)), nth); return gst_value_get_structure (array); } } @@ -407,20 +313,20 @@ gst_toc_entry_from_structure (const GstStructure * entry, guint level) g_return_val_if_fail (entry != NULL, NULL); g_return_val_if_fail (gst_structure_id_has_field_typed (entry, - gst_toc_fields[GST_TOC_UID], G_TYPE_STRING), NULL); + GST_QUARK (UID), G_TYPE_STRING), NULL); g_return_val_if_fail (gst_structure_id_has_field_typed (entry, - gst_toc_fields[GST_TOC_TYPE], GST_TYPE_TOC_ENTRY_TYPE), NULL); + GST_QUARK (TYPE), GST_TYPE_TOC_ENTRY_TYPE), NULL); - val = gst_structure_id_get_value (entry, gst_toc_fields[GST_TOC_UID]); + val = gst_structure_id_get_value (entry, GST_QUARK (UID)); uid = g_value_get_string (val); ret = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER, uid); - gst_structure_get_enum (entry, GST_TOC_ENTRY_TYPE_FIELD, + gst_structure_get_enum (entry, g_quark_to_string (GST_QUARK (TYPE)), GST_TYPE_TOC_ENTRY_TYPE, (gint *) & (ret->type)); if (gst_structure_id_has_field_typed (entry, - gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY)) { + GST_QUARK (SUB_ENTRIES), GST_TYPE_ARRAY)) { count = gst_toc_entry_structure_n_subentries (entry); for (i = 0; i < count; ++i) { @@ -460,20 +366,20 @@ gst_toc_entry_from_structure (const GstStructure * entry, guint level) ret->subentries = g_list_reverse (ret->subentries); } - if (gst_structure_id_has_field_typed (entry, - gst_toc_fields[GST_TOC_TAGS], GST_TYPE_STRUCTURE)) { - val = gst_structure_id_get_value (entry, gst_toc_fields[GST_TOC_TAGS]); + if (gst_structure_id_has_field_typed (entry, GST_QUARK (TAGS), + GST_TYPE_TAG_LIST)) { + val = gst_structure_id_get_value (entry, GST_QUARK (TAGS)); - if (G_LIKELY (GST_IS_TAG_LIST (gst_value_get_structure (val)))) { - list = gst_tag_list_copy (GST_TAG_LIST (gst_value_get_structure (val))); - gst_tag_list_free (ret->tags); + if (G_LIKELY (GST_IS_TAG_LIST (g_value_get_boxed (val)))) { + list = gst_tag_list_copy (GST_TAG_LIST (g_value_get_boxed (val))); + gst_tag_list_unref (ret->tags); ret->tags = list; } } if (gst_structure_id_has_field_typed (entry, - gst_toc_fields[GST_TOC_INFO], GST_TYPE_STRUCTURE)) { - val = gst_structure_id_get_value (entry, gst_toc_fields[GST_TOC_INFO]); + GST_QUARK (INFO), GST_TYPE_STRUCTURE)) { + val = gst_structure_id_get_value (entry, GST_QUARK (INFO)); if (G_LIKELY (GST_IS_STRUCTURE (gst_value_get_structure (val)))) { st = gst_structure_copy (gst_value_get_structure (val)); @@ -502,7 +408,7 @@ __gst_toc_from_structure (const GstStructure * toc) ret = gst_toc_new (); if (gst_structure_id_has_field_typed (toc, - gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY)) { + GST_QUARK (SUB_ENTRIES), GST_TYPE_ARRAY)) { count = gst_toc_entry_structure_n_subentries (toc); for (i = 0; i < count; ++i) { @@ -544,20 +450,20 @@ __gst_toc_from_structure (const GstStructure * toc) ret->entries = g_list_reverse (ret->entries); } - if (gst_structure_id_has_field_typed (toc, - gst_toc_fields[GST_TOC_TAGS], GST_TYPE_STRUCTURE)) { - val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_TAGS]); + if (gst_structure_id_has_field_typed (toc, GST_QUARK (TAGS), + GST_TYPE_TAG_LIST)) { + val = gst_structure_id_get_value (toc, GST_QUARK (TAGS)); - if (G_LIKELY (GST_IS_TAG_LIST (gst_value_get_structure (val)))) { - list = gst_tag_list_copy (GST_TAG_LIST (gst_value_get_structure (val))); - gst_tag_list_free (ret->tags); + if (G_LIKELY (GST_IS_TAG_LIST (g_value_get_boxed (val)))) { + list = gst_tag_list_copy (GST_TAG_LIST (g_value_get_boxed (val))); + gst_tag_list_unref (ret->tags); ret->tags = list; } } if (gst_structure_id_has_field_typed (toc, - gst_toc_fields[GST_TOC_INFO], GST_TYPE_STRUCTURE)) { - val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_INFO]); + GST_QUARK (INFO), GST_TYPE_STRUCTURE)) { + val = gst_structure_id_get_value (toc, GST_QUARK (INFO)); if (G_LIKELY (GST_IS_STRUCTURE (gst_value_get_structure (val)))) { st = gst_structure_copy (gst_value_get_structure (val)); @@ -647,8 +553,7 @@ gst_toc_entry_to_structure (const GstTocEntry * entry, guint level) cur = cur->next; } - gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_SUBENTRIES], - &subentries_val); + gst_structure_id_set_value (ret, GST_QUARK (SUB_ENTRIES), &subentries_val); g_value_unset (&subentries_val); g_value_unset (&entry_val); @@ -719,8 +624,7 @@ __gst_toc_to_structure (const GstToc * toc) cur = cur->next; } - gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_SUBENTRIES], - &subentries_val); + gst_structure_id_set_value (ret, GST_QUARK (SUB_ENTRIES), &subentries_val); g_value_unset (&val); g_value_unset (&subentries_val); @@ -808,7 +712,7 @@ gst_toc_entry_copy (const GstTocEntry * entry) if (GST_IS_TAG_LIST (entry->tags)) { list = gst_tag_list_copy (entry->tags); - gst_tag_list_free (ret->tags); + gst_tag_list_unref (ret->tags); ret->tags = list; } @@ -866,7 +770,7 @@ gst_toc_copy (const GstToc * toc) if (GST_IS_TAG_LIST (toc->tags)) { list = gst_tag_list_copy (toc->tags); - gst_tag_list_free (ret->tags); + gst_tag_list_unref (ret->tags); ret->tags = list; } @@ -903,21 +807,19 @@ gst_toc_entry_set_start_stop (GstTocEntry * entry, gint64 start, gint64 stop) g_return_if_fail (entry != NULL); g_return_if_fail (GST_IS_STRUCTURE (entry->info)); - if (gst_structure_id_has_field_typed (entry->info, - gst_toc_fields[GST_TOC_TIME], GST_TYPE_STRUCTURE)) { - val = - gst_structure_id_get_value (entry->info, gst_toc_fields[GST_TOC_TIME]); + if (gst_structure_id_has_field_typed (entry->info, GST_QUARK (TIME), + GST_TYPE_STRUCTURE)) { + val = gst_structure_id_get_value (entry->info, GST_QUARK (TIME)); structure = gst_structure_copy (gst_value_get_structure (val)); } if (structure == NULL) - structure = gst_structure_new_id_empty (gst_toc_fields[GST_TOC_TIMENAME]); + structure = gst_structure_new_id_empty (GST_QUARK (TIME_STRUCTURE)); - gst_structure_id_set (structure, gst_toc_fields[GST_TOC_TIME_START], - G_TYPE_INT64, start, gst_toc_fields[GST_TOC_TIME_STOP], G_TYPE_INT64, - stop, NULL); + gst_structure_id_set (structure, GST_QUARK (START), + G_TYPE_INT64, start, GST_QUARK (STOP), G_TYPE_INT64, stop, NULL); - gst_structure_id_set (entry->info, gst_toc_fields[GST_TOC_TIME], + gst_structure_id_set (entry->info, GST_QUARK (TIME), GST_TYPE_STRUCTURE, structure, NULL); gst_structure_free (structure); @@ -948,28 +850,28 @@ gst_toc_entry_get_start_stop (const GstTocEntry * entry, gint64 * start, g_return_val_if_fail (GST_IS_STRUCTURE (entry->info), FALSE); if (!gst_structure_id_has_field_typed (entry->info, - gst_toc_fields[GST_TOC_TIME], GST_TYPE_STRUCTURE)) + GST_QUARK (TIME), GST_TYPE_STRUCTURE)) return FALSE; - val = gst_structure_id_get_value (entry->info, gst_toc_fields[GST_TOC_TIME]); + val = gst_structure_id_get_value (entry->info, GST_QUARK (TIME)); structure = gst_value_get_structure (val); if (start != NULL) { if (gst_structure_id_has_field_typed (structure, - gst_toc_fields[GST_TOC_TIME_START], G_TYPE_INT64)) + GST_QUARK (START), G_TYPE_INT64)) *start = g_value_get_int64 (gst_structure_id_get_value (structure, - gst_toc_fields[GST_TOC_TIME_START])); + GST_QUARK (START))); else ret = FALSE; } if (stop != NULL) { if (gst_structure_id_has_field_typed (structure, - gst_toc_fields[GST_TOC_TIME_STOP], G_TYPE_INT64)) + GST_QUARK (STOP), G_TYPE_INT64)) *stop = g_value_get_int64 (gst_structure_id_get_value (structure, - gst_toc_fields[GST_TOC_TIME_STOP])); + GST_QUARK (STOP))); else ret = FALSE; } @@ -977,6 +879,25 @@ gst_toc_entry_get_start_stop (const GstTocEntry * entry, gint64 * start, return ret; } +/** + * gst_toc_entry_type_get_nick: + * @type: a #GstTocEntryType. + * + * Converts @type to a string representation. + * + * Returns: Returns the human-readable @type. Can be NULL if an error occurred. + * Since: 0.11.92 + */ +const gchar * +gst_toc_entry_type_get_nick (GstTocEntryType type) +{ + const gchar *entry_types[] = { "chapter", "edition" }; + + g_return_val_if_fail ((gint) type >= 0 + && (gint) type < G_N_ELEMENTS (entry_types), NULL); + return entry_types[type]; +} + gboolean __gst_toc_structure_get_updated (const GstStructure * toc) { @@ -985,8 +906,8 @@ __gst_toc_structure_get_updated (const GstStructure * toc) g_return_val_if_fail (GST_IS_STRUCTURE (toc), FALSE); if (G_LIKELY (gst_structure_id_has_field_typed (toc, - gst_toc_fields[GST_TOC_UPDATED], G_TYPE_BOOLEAN))) { - val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_UPDATED]); + GST_QUARK (UPDATED), G_TYPE_BOOLEAN))) { + val = gst_structure_id_get_value (toc, GST_QUARK (UPDATED)); return g_value_get_boolean (val); } @@ -996,14 +917,10 @@ __gst_toc_structure_get_updated (const GstStructure * toc) void __gst_toc_structure_set_updated (GstStructure * toc, gboolean updated) { - GValue val = { 0 }; - g_return_if_fail (toc != NULL); - g_value_init (&val, G_TYPE_BOOLEAN); - g_value_set_boolean (&val, updated); - gst_structure_id_set_value (toc, gst_toc_fields[GST_TOC_UPDATED], &val); - g_value_unset (&val); + gst_structure_id_set (toc, GST_QUARK (UPDATED), G_TYPE_BOOLEAN, updated, + NULL); } gchar * @@ -1014,8 +931,8 @@ __gst_toc_structure_get_extend_uid (const GstStructure * toc) g_return_val_if_fail (GST_IS_STRUCTURE (toc), NULL); if (G_LIKELY (gst_structure_id_has_field_typed (toc, - gst_toc_fields[GST_TOC_EXTENDUID], G_TYPE_STRING))) { - val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_EXTENDUID]); + GST_QUARK (EXTEND_UID), G_TYPE_STRING))) { + val = gst_structure_id_get_value (toc, GST_QUARK (EXTEND_UID)); return g_strdup (g_value_get_string (val)); } @@ -1026,13 +943,9 @@ void __gst_toc_structure_set_extend_uid (GstStructure * toc, const gchar * extend_uid) { - GValue val = { 0 }; - g_return_if_fail (toc != NULL); g_return_if_fail (extend_uid != NULL); - g_value_init (&val, G_TYPE_STRING); - g_value_set_string (&val, extend_uid); - gst_structure_id_set_value (toc, gst_toc_fields[GST_TOC_EXTENDUID], &val); - g_value_unset (&val); + gst_structure_id_set (toc, GST_QUARK (EXTEND_UID), G_TYPE_STRING, extend_uid, + NULL); } diff --git a/gst/gsttoc.h b/gst/gsttoc.h index a1a7b8c..d59cf84 100644 --- a/gst/gsttoc.h +++ b/gst/gsttoc.h @@ -29,6 +29,9 @@ G_BEGIN_DECLS +#define GST_TYPE_TOC (gst_toc_get_type ()) +#define GST_TYPE_TOC_ENTRY (gst_toc_entry_get_type ()) + typedef struct _GstTocEntry GstTocEntry; typedef struct _GstToc GstToc; @@ -90,10 +93,14 @@ struct _GstToc { gpointer _gst_reserved[GST_PADDING]; }; +/* functions to return type structures */ +GType gst_toc_get_type (void); +GType gst_toc_entry_get_type (void); + /* functions to create new structures */ GstToc * gst_toc_new (void); GstTocEntry * gst_toc_entry_new (GstTocEntryType type, const gchar *uid); -GstTocEntry * gst_toc_entry_new_with_pad (GstTocEntryType type, const gchar *uid, gpointer pad); +GstTocEntry * gst_toc_entry_new_with_pad (GstTocEntryType type, const gchar *uid, GstPad * pad); /* functions to free structures */ void gst_toc_entry_free (GstTocEntry *entry); @@ -105,6 +112,7 @@ GstToc * gst_toc_copy (const GstToc *toc); void gst_toc_entry_set_start_stop (GstTocEntry *entry, gint64 start, gint64 stop); gboolean gst_toc_entry_get_start_stop (const GstTocEntry *entry, gint64 *start, gint64 *stop); +const gchar * gst_toc_entry_type_get_nick (GstTocEntryType type); G_END_DECLS diff --git a/gst/gsturi.c b/gst/gsturi.c index afe2907..90e7461 100644 --- a/gst/gsturi.c +++ b/gst/gsturi.c @@ -578,6 +578,8 @@ gst_element_make_from_uri (const GstURIType type, const gchar * uri, g_return_val_if_fail (GST_URI_TYPE_IS_VALID (type), NULL); g_return_val_if_fail (gst_uri_is_valid (uri), NULL); + GST_DEBUG ("type:%d, uri:%s, elementname:%s", type, uri, elementname); + protocol = gst_uri_get_protocol (uri); possibilities = get_element_factories_from_uri_protocol (type, protocol); g_free (protocol); @@ -598,6 +600,7 @@ gst_element_make_from_uri (const GstURIType type, const gchar * uri, if (gst_uri_handler_set_uri (handler, uri, NULL)) break; + GST_WARNING ("element %s didn't accept the URI", GST_ELEMENT_NAME (ret)); gst_object_unref (ret); ret = NULL; } diff --git a/gst/gstutils.c b/gst/gstutils.c index 7771862..5c15341 100644 --- a/gst/gstutils.c +++ b/gst/gstutils.c @@ -2364,8 +2364,8 @@ gst_element_query_convert (GstElement * element, GstFormat src_format, * PAUSED. If the element supports seek in READY, it will always return %TRUE when * it receives the event in the READY state. * - * Returns: %TRUE if the seek operation succeeded (the seek might not always be - * executed instantly though) + * Returns: %TRUE if the seek operation succeeded. Flushing seeks will trigger a + * preroll, which will emit %GST_MESSAGE_ASYNC_DONE. * * Since: 0.10.7 */ @@ -2931,7 +2931,8 @@ gst_pad_query_accept_caps (GstPad * pad, GstCaps * caps) g_return_val_if_fail (GST_IS_PAD (pad), FALSE); g_return_val_if_fail (GST_IS_CAPS (caps), FALSE); - GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "accept caps of %p", caps); + GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "accept caps of %" + GST_PTR_FORMAT, caps); query = gst_query_new_accept_caps (caps); if (gst_pad_query (pad, query)) { diff --git a/gst/parse/Makefile.in b/gst/parse/Makefile.in index 5915f4d..17fcfe4 100644 --- a/gst/parse/Makefile.in +++ b/gst/parse/Makefile.in @@ -52,6 +52,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = gst/parse DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -257,6 +258,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -409,7 +414,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/gstreamer.doap b/gstreamer.doap index f21642f..9e70e16 100644 --- a/gstreamer.doap +++ b/gstreamer.doap @@ -38,6 +38,16 @@ hierarchy, and a set of media-agnostic core elements. + + + 0.11.92 + 0.11 + High Hopes + 2012-06-07 + + + + 0.11.91 diff --git a/gstreamer.spec b/gstreamer.spec index 79ae557..0c60a04 100644 --- a/gstreamer.spec +++ b/gstreamer.spec @@ -4,7 +4,7 @@ %define _glib2 2.31.14 Name: %{gstreamer} -Version: 0.11.91 +Version: 0.11.92 Release: 1 Summary: GStreamer streaming media framework runtime diff --git a/libs/Makefile.in b/libs/Makefile.in index dc97f29..90abb56 100644 --- a/libs/Makefile.in +++ b/libs/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = libs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -257,6 +258,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -409,7 +414,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/Makefile.in b/libs/gst/Makefile.in index 2f91786..9e2ee97 100644 --- a/libs/gst/Makefile.in +++ b/libs/gst/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = libs/gst DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -256,6 +257,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -408,7 +413,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/base/Makefile.in b/libs/gst/base/Makefile.in index ed702b5..474b77e 100644 --- a/libs/gst/base/Makefile.in +++ b/libs/gst/base/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/base DIST_COMMON = README $(libgstbase_@GST_API_VERSION@include_HEADERS) \ @@ -300,6 +301,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -452,7 +457,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c index b27edcf..2e61430 100644 --- a/libs/gst/base/gstadapter.c +++ b/libs/gst/base/gstadapter.c @@ -550,16 +550,7 @@ gst_adapter_copy (GstAdapter * adapter, gpointer dest, gsize offset, gsize size) copy_into_unchecked (adapter, dest, offset + adapter->skip, size); } -/** - * gst_adapter_flush: - * @adapter: a #GstAdapter - * @flush: the number of bytes to flush - * - * Flushes the first @flush bytes in the @adapter. The caller must ensure that - * at least this many bytes are available. - * - * See also: gst_adapter_map(), gst_adapter_unmap() - */ +/*Flushes the first @flush bytes in the @adapter*/ static void gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush) { @@ -615,6 +606,16 @@ gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush) adapter->scan_entry = NULL; } +/** + * gst_adapter_flush: + * @adapter: a #GstAdapter + * @flush: the number of bytes to flush + * + * Flushes the first @flush bytes in the @adapter. The caller must ensure that + * at least this many bytes are available. + * + * See also: gst_adapter_map(), gst_adapter_unmap() + */ void gst_adapter_flush (GstAdapter * adapter, gsize flush) { diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c index 8067e53..e2f9d97 100644 --- a/libs/gst/base/gstbaseparse.c +++ b/libs/gst/base/gstbaseparse.c @@ -1407,7 +1407,8 @@ gst_base_parse_post_bitrates (GstBaseParse * parse, gboolean post_min, parse->priv->max_bitrate); if (taglist != NULL) { - gst_pad_push_event (parse->srcpad, gst_event_new_tag (taglist)); + gst_pad_push_event (parse->srcpad, gst_event_new_tag ("GstParser", + taglist)); } } @@ -1778,11 +1779,6 @@ gst_base_parse_handle_buffer (GstBaseParse * parse, GstBuffer * buffer, GST_LOG_OBJECT (parse, "handle_frame skipped %d, flushed %d", *skip, *flushed); - if (ret != GST_FLOW_OK) { - GST_DEBUG_OBJECT (parse, "handle_frame returned %d", ret); - goto exit; - } - /* subclass can only do one of these, or semantics are too unclear */ g_assert (*skip == 0 || *flushed == 0); @@ -1817,7 +1813,6 @@ gst_base_parse_handle_buffer (GstBaseParse * parse, GstBuffer * buffer, parse->priv->offset += *flushed; -exit: if (parse->priv->pad_mode == GST_PAD_MODE_PULL) { gst_adapter_clear (parse->priv->adapter); } diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index e404ed4..d1e9e70 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -523,7 +523,7 @@ gst_base_sink_class_init (GstBaseSinkClass * klass) */ g_object_class_install_property (gobject_class, PROP_THROTTLE_TIME, g_param_spec_uint64 ("throttle-time", "Throttle time", - "The time to keep between rendered buffers (unused)", 0, G_MAXUINT64, + "The time to keep between rendered buffers", 0, G_MAXUINT64, DEFAULT_THROTTLE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gstelement_class->change_state = @@ -2003,8 +2003,8 @@ gst_base_sink_wait_clock (GstBaseSink * sink, GstClockTime time, /* FIXME: Casting to GstClockEntry only works because the types * are the same */ if (G_LIKELY (sink->priv->cached_clock_id != NULL - && GST_CLOCK_ENTRY_CLOCK ((GstClockEntry *) sink->priv-> - cached_clock_id) == clock)) { + && GST_CLOCK_ENTRY_CLOCK ((GstClockEntry *) sink-> + priv->cached_clock_id) == clock)) { if (!gst_clock_single_shot_id_reinit (clock, sink->priv->cached_clock_id, time)) { gst_clock_id_unref (sink->priv->cached_clock_id); @@ -2148,6 +2148,11 @@ gst_base_sink_do_preroll (GstBaseSink * sink, GstMiniObject * obj) GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); bclass = GST_BASE_SINK_GET_CLASS (sink); + + if (bclass->prepare) + if ((ret = bclass->prepare (sink, buf)) != GST_FLOW_OK) + goto prepare_canceled; + if (bclass->preroll) if ((ret = bclass->preroll (sink, buf)) != GST_FLOW_OK) goto preroll_canceled; @@ -2174,6 +2179,12 @@ gst_base_sink_do_preroll (GstBaseSink * sink, GstMiniObject * obj) return GST_FLOW_OK; /* ERRORS */ +prepare_canceled: + { + GST_DEBUG_OBJECT (sink, "prepare failed, abort state"); + gst_element_abort_state (GST_ELEMENT_CAST (sink)); + return ret; + } preroll_canceled: { GST_DEBUG_OBJECT (sink, "preroll failed, abort state"); @@ -3068,7 +3079,7 @@ gst_base_sink_needs_preroll (GstBaseSink * basesink) */ static GstFlowReturn gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, - gpointer obj) + gpointer obj, gboolean is_list) { GstBaseSinkClass *bclass; GstBaseSinkPrivate *priv = basesink->priv; @@ -3085,7 +3096,7 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, if (G_UNLIKELY (priv->received_eos)) goto was_eos; - if (GST_IS_BUFFER_LIST (obj)) { + if (is_list) { sync_buf = gst_buffer_list_get (GST_BUFFER_LIST_CAST (obj), 0); g_assert (NULL != sync_buf); } else { @@ -3138,6 +3149,20 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, goto out_of_segment; } + if (!is_list) { + if (bclass->prepare) { + ret = bclass->prepare (basesink, GST_BUFFER_CAST (obj)); + if (G_UNLIKELY (ret != GST_FLOW_OK)) + goto prepare_failed; + } + } else { + if (bclass->prepare_list) { + ret = bclass->prepare_list (basesink, GST_BUFFER_LIST_CAST (obj)); + if (G_UNLIKELY (ret != GST_FLOW_OK)) + goto prepare_failed; + } + } + again: late = FALSE; step_end = FALSE; @@ -3162,7 +3187,7 @@ again: if (do_qos) gst_base_sink_do_render_stats (basesink, TRUE); - if (!GST_IS_BUFFER_LIST (obj)) { + if (!is_list) { /* For buffer lists do not set last buffer for now. */ gst_base_sink_set_last_buffer (basesink, GST_BUFFER_CAST (obj)); @@ -3219,6 +3244,13 @@ out_of_segment: gst_mini_object_unref (GST_MINI_OBJECT_CAST (obj)); return GST_FLOW_OK; } +prepare_failed: + { + GST_DEBUG_OBJECT (basesink, "prepare buffer failed %s", + gst_flow_get_name (ret)); + gst_mini_object_unref (GST_MINI_OBJECT_CAST (obj)); + return ret; + } sync_failed: { GST_DEBUG_OBJECT (basesink, "do_sync returned %s", gst_flow_get_name (ret)); @@ -3262,7 +3294,8 @@ dropped: /* with STREAM_LOCK */ static GstFlowReturn -gst_base_sink_chain_main (GstBaseSink * basesink, GstPad * pad, gpointer obj) +gst_base_sink_chain_main (GstBaseSink * basesink, GstPad * pad, gpointer obj, + gboolean is_list) { GstFlowReturn result; @@ -3270,7 +3303,7 @@ gst_base_sink_chain_main (GstBaseSink * basesink, GstPad * pad, gpointer obj) goto wrong_mode; GST_BASE_SINK_PREROLL_LOCK (basesink); - result = gst_base_sink_chain_unlocked (basesink, pad, obj); + result = gst_base_sink_chain_unlocked (basesink, pad, obj, is_list); GST_BASE_SINK_PREROLL_UNLOCK (basesink); done: @@ -3299,7 +3332,7 @@ gst_base_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) basesink = GST_BASE_SINK (parent); - return gst_base_sink_chain_main (basesink, pad, buf); + return gst_base_sink_chain_main (basesink, pad, buf, FALSE); } static GstFlowReturn @@ -3314,7 +3347,7 @@ gst_base_sink_chain_list (GstPad * pad, GstObject * parent, bclass = GST_BASE_SINK_GET_CLASS (basesink); if (G_LIKELY (bclass->render_list)) { - result = gst_base_sink_chain_main (basesink, pad, list); + result = gst_base_sink_chain_main (basesink, pad, list, TRUE); } else { guint i, len; GstBuffer *buffer; @@ -3327,7 +3360,7 @@ gst_base_sink_chain_list (GstPad * pad, GstObject * parent, for (i = 0; i < len; i++) { buffer = gst_buffer_list_get (list, i); result = gst_base_sink_chain_main (basesink, pad, - gst_buffer_ref (buffer)); + gst_buffer_ref (buffer), FALSE); if (result != GST_FLOW_OK) break; } @@ -3672,7 +3705,7 @@ gst_base_sink_loop (GstPad * pad) basesink->segment.position = offset; GST_BASE_SINK_PREROLL_LOCK (basesink); - result = gst_base_sink_chain_unlocked (basesink, pad, buf); + result = gst_base_sink_chain_unlocked (basesink, pad, buf, FALSE); GST_BASE_SINK_PREROLL_UNLOCK (basesink); if (G_UNLIKELY (result != GST_FLOW_OK)) goto paused; diff --git a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h index f4ab7e6..bf7a41f 100644 --- a/libs/gst/base/gstbasesink.h +++ b/libs/gst/base/gstbasesink.h @@ -125,15 +125,19 @@ struct _GstBaseSink { * unblock any blocked function ASAP * @unlock_stop: Clear the previous unlock request. Subclasses should clear * any state they set during unlock(), such as clearing command queues. + * @query: perform a #GstQuery on the element. Since: 0.10.36 * @event: Override this to handle events arriving on the sink pad * @wait_eos: Override this to implement custom logic to wait for the EOS time. * subclasses should always first chain up to the default implementation. - * @preroll: Called to present the preroll buffer if desired + * @prepare: Called to prepare the buffer for @render and @preroll. This + * function is called before synchronisation is performed. + * @prepare_list: Called to prepare the buffer list for @render_list. This + * function is called before synchronisation is performed. + * @preroll: Called to present the preroll buffer if desired. * @render: Called when a buffer should be presented or output, at the * correct moment if the #GstBaseSink has been set to sync to the clock. * @render_list: Same as @render but used whith buffer lists instead of * buffers. Since: 0.10.24 - * @query: perform a #GstQuery on the element. Since: 0.10.36 * * Subclasses can override any of the available virtual methods or not, as * needed. At the minimum, the @render method should be overridden to @@ -179,6 +183,10 @@ struct _GstBaseSinkClass { /* wait for eos, subclasses should chain up to parent first */ GstFlowReturn (*wait_eos) (GstBaseSink *sink, GstEvent *event); + /* notify subclass of buffer or list before doing sync */ + GstFlowReturn (*prepare) (GstBaseSink *sink, GstBuffer *buffer); + GstFlowReturn (*prepare_list) (GstBaseSink *sink, GstBufferList *buffer_list); + /* notify subclass of preroll buffer or real buffer */ GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer); GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer); diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c index 7b8ec85..c5fad37 100644 --- a/libs/gst/base/gstbasesrc.c +++ b/libs/gst/base/gstbasesrc.c @@ -318,7 +318,7 @@ static gboolean gst_base_src_decide_allocation_default (GstBaseSrc * basesrc, GstQuery * query); static gboolean gst_base_src_set_flushing (GstBaseSrc * basesrc, - gboolean flushing, gboolean live_play, gboolean unlock, gboolean * playing); + gboolean flushing, gboolean live_play, gboolean * playing); static gboolean gst_base_src_start (GstBaseSrc * basesrc); static gboolean gst_base_src_stop (GstBaseSrc * basesrc); @@ -1481,15 +1481,8 @@ not_ok: * when we reach the segment.stop we have to post a segment.done * instead of EOS when doing a segment seek. */ -/* FIXME (0.11), we have the unlock gboolean here because most current - * implementations (fdsrc, -base/gst/tcp/, ...) unconditionally unlock, even when - * the streaming thread isn't running, resulting in bogus unlocks later when it - * starts. This is fixed by adding unlock_stop, but we should still avoid unlocking - * unnecessarily for backwards compatibility. Ergo, the unlock variable stays - * until 0.11 - */ static gboolean -gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock) +gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event) { gboolean res = TRUE, tres; gdouble rate; @@ -1548,7 +1541,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock) gst_pad_pause_task (src->srcpad); /* unblock streaming thread. */ - gst_base_src_set_flushing (src, TRUE, FALSE, unlock, &playing); + gst_base_src_set_flushing (src, TRUE, FALSE, &playing); /* grab streaming lock, this should eventually be possible, either * because the task is paused, our streaming thread stopped @@ -1563,7 +1556,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock) GST_DEBUG_OBJECT (src, "seek with seqnum %" G_GUINT32_FORMAT, seqnum); } - gst_base_src_set_flushing (src, FALSE, playing, unlock, NULL); + gst_base_src_set_flushing (src, FALSE, playing, NULL); /* If we configured the seeksegment above, don't overwrite it now. Otherwise * copy the current segment info into the temp segment that we can actually @@ -1767,8 +1760,8 @@ gst_base_src_send_event (GstElement * element, GstEvent * event) if (started) { GST_DEBUG_OBJECT (src, "performing seek"); /* when we are running in push mode, we can execute the - * seek right now, we need to unlock. */ - result = gst_base_src_perform_seek (src, event, TRUE); + * seek right now. */ + result = gst_base_src_perform_seek (src, event); } else { GstEvent **event_p; @@ -1863,15 +1856,15 @@ gst_base_src_default_event (GstBaseSrc * src, GstEvent * event) if (!gst_base_src_seekable (src)) goto not_seekable; - result = gst_base_src_perform_seek (src, event, TRUE); + result = gst_base_src_perform_seek (src, event); break; case GST_EVENT_FLUSH_START: /* cancel any blocking getrange, is normally called * when in pull mode. */ - result = gst_base_src_set_flushing (src, TRUE, FALSE, TRUE, NULL); + result = gst_base_src_set_flushing (src, TRUE, FALSE, NULL); break; case GST_EVENT_FLUSH_STOP: - result = gst_base_src_set_flushing (src, FALSE, TRUE, TRUE, NULL); + result = gst_base_src_set_flushing (src, FALSE, TRUE, NULL); break; case GST_EVENT_QOS: { @@ -2020,7 +2013,7 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) GstClockTime base_time; GstClock *clock; GstClockTime now = GST_CLOCK_TIME_NONE, timestamp; - gboolean do_timestamp, first, pseudo_live; + gboolean do_timestamp, first, pseudo_live, is_live; bclass = GST_BASE_SRC_GET_CLASS (basesrc); @@ -2035,8 +2028,9 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) * latency. */ GST_OBJECT_LOCK (basesrc); + is_live = basesrc->is_live; /* if we are asked to sync against the clock we are a pseudo live element */ - pseudo_live = (start != -1 && basesrc->is_live); + pseudo_live = (start != -1 && is_live); /* check for the first buffer */ first = (basesrc->priv->latency == -1); @@ -2064,17 +2058,20 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) } } else if (first) { GST_DEBUG_OBJECT (basesrc, "no latency needed, live %d, sync %d", - basesrc->is_live, start != -1); + is_live, start != -1); basesrc->priv->latency = 0; } /* get clock, if no clock, we can't sync or do timestamps */ if ((clock = GST_ELEMENT_CLOCK (basesrc)) == NULL) goto no_clock; + else + gst_object_ref (clock); base_time = GST_ELEMENT_CAST (basesrc)->base_time; do_timestamp = basesrc->priv->do_timestamp; + GST_OBJECT_UNLOCK (basesrc); /* first buffer, calculate the timestamp offset */ if (first) { @@ -2132,7 +2129,7 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) if (!GST_CLOCK_TIME_IS_VALID (start)) goto no_sync; - if (basesrc->is_live && GST_CLOCK_TIME_IS_VALID (timestamp)) { + if (is_live && GST_CLOCK_TIME_IS_VALID (timestamp)) { /* for pseudo live sources, add our ts_offset to the timestamp */ GST_BUFFER_TIMESTAMP (buffer) += basesrc->priv->ts_offset; start += basesrc->priv->ts_offset; @@ -2142,10 +2139,11 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) "waiting for clock, base time %" GST_TIME_FORMAT ", stream_start %" GST_TIME_FORMAT, GST_TIME_ARGS (base_time), GST_TIME_ARGS (start)); - GST_OBJECT_UNLOCK (basesrc); result = gst_base_src_wait (basesrc, clock, start + base_time); + gst_object_unref (clock); + GST_LOG_OBJECT (basesrc, "clock entry done: %d", result); return result; @@ -2160,7 +2158,7 @@ no_clock: no_sync: { GST_DEBUG_OBJECT (basesrc, "no sync needed"); - GST_OBJECT_UNLOCK (basesrc); + gst_object_unref (clock); return GST_CLOCK_OK; } } @@ -3130,7 +3128,7 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) /* stop flushing now but for live sources, still block in the LIVE lock when * we are not yet PLAYING */ - gst_base_src_set_flushing (basesrc, FALSE, FALSE, FALSE, NULL); + gst_base_src_set_flushing (basesrc, FALSE, FALSE, NULL); gst_pad_mark_reconfigure (GST_BASE_SRC_PAD (basesrc)); @@ -3138,6 +3136,9 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) mode = GST_PAD_MODE (basesrc->srcpad); GST_OBJECT_UNLOCK (basesrc->srcpad); + /* take the stream lock here, we only want to let the task run when we have + * set the STARTED flag */ + GST_PAD_STREAM_LOCK (basesrc->srcpad); if (mode == GST_PAD_MODE_PUSH) { /* do initial seek, which will start the task */ GST_OBJECT_LOCK (basesrc); @@ -3145,10 +3146,8 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) basesrc->pending_seek = NULL; GST_OBJECT_UNLOCK (basesrc); - /* no need to unlock anything, the task is certainly - * not running here. The perform seek code will start the task when - * finished. */ - if (G_UNLIKELY (!gst_base_src_perform_seek (basesrc, event, FALSE))) + /* The perform seek code will start the task when finished. */ + if (G_UNLIKELY (!gst_base_src_perform_seek (basesrc, event))) goto seek_failed; if (event) @@ -3166,12 +3165,15 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) GST_LIVE_SIGNAL (basesrc); GST_LIVE_UNLOCK (basesrc); + GST_PAD_STREAM_UNLOCK (basesrc->srcpad); + return; seek_failed: { + GST_PAD_STREAM_UNLOCK (basesrc->srcpad); GST_ERROR_OBJECT (basesrc, "Failed to perform initial seek"); - gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL); + gst_base_src_set_flushing (basesrc, TRUE, FALSE, NULL); if (event) gst_event_unref (event); ret = GST_FLOW_ERROR; @@ -3179,7 +3181,8 @@ seek_failed: } no_get_range: { - gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL); + GST_PAD_STREAM_UNLOCK (basesrc->srcpad); + gst_base_src_set_flushing (basesrc, TRUE, FALSE, NULL); GST_ERROR_OBJECT (basesrc, "Cannot operate in pull mode, stopping"); ret = GST_FLOW_ERROR; goto error; @@ -3241,7 +3244,7 @@ gst_base_src_stop (GstBaseSrc * basesrc) GST_DEBUG_OBJECT (basesrc, "stopping source"); /* flush all */ - gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL); + gst_base_src_set_flushing (basesrc, TRUE, FALSE, NULL); /* stop the task */ gst_pad_stop_task (basesrc->srcpad); @@ -3275,13 +3278,13 @@ was_stopped: */ static gboolean gst_base_src_set_flushing (GstBaseSrc * basesrc, - gboolean flushing, gboolean live_play, gboolean unlock, gboolean * playing) + gboolean flushing, gboolean live_play, gboolean * playing) { GstBaseSrcClass *bclass; bclass = GST_BASE_SRC_GET_CLASS (basesrc); - if (flushing && unlock) { + if (flushing) { gst_base_src_activate_pool (basesrc, FALSE); /* unlock any subclasses, we need to do this before grabbing the * LIVE_LOCK since we hold this lock before going into ::create. We pass an @@ -3316,18 +3319,16 @@ gst_base_src_set_flushing (GstBaseSrc * basesrc, gst_base_src_activate_pool (basesrc, TRUE); - /* When unlocking drop all delayed events */ - if (unlock) { - GST_OBJECT_LOCK (basesrc); - if (basesrc->priv->pending_events) { - g_list_foreach (basesrc->priv->pending_events, (GFunc) gst_event_unref, - NULL); - g_list_free (basesrc->priv->pending_events); - basesrc->priv->pending_events = NULL; - g_atomic_int_set (&basesrc->priv->have_events, FALSE); - } - GST_OBJECT_UNLOCK (basesrc); + /* Drop all delayed events */ + GST_OBJECT_LOCK (basesrc); + if (basesrc->priv->pending_events) { + g_list_foreach (basesrc->priv->pending_events, (GFunc) gst_event_unref, + NULL); + g_list_free (basesrc->priv->pending_events); + basesrc->priv->pending_events = NULL; + g_atomic_int_set (&basesrc->priv->have_events, FALSE); } + GST_OBJECT_UNLOCK (basesrc); } GST_LIVE_SIGNAL (basesrc); GST_LIVE_UNLOCK (basesrc); diff --git a/libs/gst/base/gsttypefindhelper.c b/libs/gst/base/gsttypefindhelper.c index cdb267a..23412b7 100644 --- a/libs/gst/base/gsttypefindhelper.c +++ b/libs/gst/base/gsttypefindhelper.c @@ -43,7 +43,8 @@ /* ********************** typefinding in pull mode ************************ */ static void -helper_find_suggest (gpointer data, guint probability, GstCaps * caps); +helper_find_suggest (gpointer data, GstTypeFindProbability probability, + GstCaps * caps); typedef struct { diff --git a/libs/gst/check/Makefile.in b/libs/gst/check/Makefile.in index 617f5a6..5c57700 100644 --- a/libs/gst/check/Makefile.in +++ b/libs/gst/check/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/check DIST_COMMON = $(libgstcheck_@GST_API_VERSION@include_HEADERS) \ @@ -331,6 +332,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -483,7 +488,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/check/gstcheck.c b/libs/gst/check/gstcheck.c index 745b68c..98934f9 100644 --- a/libs/gst/check/gstcheck.c +++ b/libs/gst/check/gstcheck.c @@ -130,7 +130,9 @@ gst_check_init (int *argc, char **argv[]) gst_check_log_critical_func, NULL); g_log_set_handler ("GLib-GObject", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, gst_check_log_critical_func, NULL); - g_log_set_handler ("Gst-Phonon", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, + g_log_set_handler ("GLib-GIO", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, + gst_check_log_critical_func, NULL); + g_log_set_handler ("GLib", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, gst_check_log_critical_func, NULL); print_plugins (); diff --git a/libs/gst/check/libcheck/Makefile.in b/libs/gst/check/libcheck/Makefile.in index 085986e..a02142b 100644 --- a/libs/gst/check/libcheck/Makefile.in +++ b/libs/gst/check/libcheck/Makefile.in @@ -52,6 +52,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = libs/gst/check/libcheck DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/check.h.in @@ -264,6 +265,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -416,7 +421,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/controller/Makefile.in b/libs/gst/controller/Makefile.in index aa3cbda..897da92 100644 --- a/libs/gst/controller/Makefile.in +++ b/libs/gst/controller/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/controller DIST_COMMON = $(libgstcontroller_@GST_API_VERSION@_include_HEADERS) \ @@ -296,6 +297,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -448,7 +453,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/helpers/Makefile.in b/libs/gst/helpers/Makefile.in index c12b276..7a9fc3f 100644 --- a/libs/gst/helpers/Makefile.in +++ b/libs/gst/helpers/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ helpers_PROGRAMS = gst-plugin-scanner$(EXEEXT) subdir = libs/gst/helpers DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -255,6 +256,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -407,7 +412,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/net/Makefile.in b/libs/gst/net/Makefile.in index c4b49a1..770630b 100644 --- a/libs/gst/net/Makefile.in +++ b/libs/gst/net/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/net DIST_COMMON = $(libgstnet_@GST_API_VERSION@_include_HEADERS) \ @@ -294,6 +295,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -446,7 +451,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/m4/Makefile.in b/m4/Makefile.in index 138013b..309850d 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = m4 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -217,6 +218,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -369,7 +374,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in index f97eaf1..dd75868 100644 --- a/pkgconfig/Makefile.in +++ b/pkgconfig/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = pkgconfig DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/gstreamer-base-uninstalled.pc.in \ @@ -261,6 +262,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -413,7 +418,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/plugins/Makefile.in b/plugins/Makefile.in index 4d019da..099c0e4 100644 --- a/plugins/Makefile.in +++ b/plugins/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = plugins DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -256,6 +257,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -408,7 +413,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/plugins/elements/Makefile.in b/plugins/elements/Makefile.in index 15c6d3d..56a2e0c 100644 --- a/plugins/elements/Makefile.in +++ b/plugins/elements/Makefile.in @@ -52,6 +52,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = plugins/elements DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -301,6 +302,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -453,7 +458,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c index c9b2c45..89eb17b 100644 --- a/plugins/elements/gstfakesrc.c +++ b/plugins/elements/gstfakesrc.c @@ -357,7 +357,6 @@ static void gst_fake_src_init (GstFakeSrc * fakesrc) { fakesrc->output = FAKE_SRC_FIRST_LAST_LOOP; - fakesrc->buffer_count = 0; fakesrc->silent = DEFAULT_SILENT; fakesrc->signal_handoffs = DEFAULT_SIGNAL_HANDOFFS; fakesrc->dump = DEFAULT_DUMP; @@ -781,7 +780,7 @@ gst_fake_src_create (GstBaseSrc * basesrc, guint64 offset, guint length, src = GST_FAKE_SRC (basesrc); buf = gst_fake_src_create_buffer (src, &size); - GST_BUFFER_OFFSET (buf) = src->buffer_count++; + GST_BUFFER_OFFSET (buf) = offset; if (src->datarate > 0) { time = (src->bytes_sent * GST_SECOND) / src->datarate; @@ -885,7 +884,6 @@ gst_fake_src_start (GstBaseSrc * basesrc) src = GST_FAKE_SRC (basesrc); - src->buffer_count = 0; src->pattern_byte = 0x00; src->bytes_sent = 0; diff --git a/plugins/elements/gstfakesrc.h b/plugins/elements/gstfakesrc.h index 00675c2..965fcb0 100644 --- a/plugins/elements/gstfakesrc.h +++ b/plugins/elements/gstfakesrc.h @@ -140,9 +140,6 @@ struct _GstFakeSrc { gboolean sync; GstClock *clock; - gint num_buffers; - gint rt_num_buffers; /* we are going to change this at runtime */ - gint64 buffer_count; gboolean silent; gboolean signal_handoffs; gboolean dump; diff --git a/plugins/elements/gstfilesrc.c b/plugins/elements/gstfilesrc.c index 8536f4a..a0672d1 100644 --- a/plugins/elements/gstfilesrc.c +++ b/plugins/elements/gstfilesrc.c @@ -461,7 +461,7 @@ could_not_stat: } } -/* open the file and mmap it, necessary to go to READY state */ +/* open the file, necessary to go to READY state */ static gboolean gst_file_src_start (GstBaseSrc * basesrc) { @@ -500,8 +500,8 @@ gst_file_src_start (GstBaseSrc * basesrc) off_t res = lseek (src->fd, 0, SEEK_END); if (res < 0) { - GST_LOG_OBJECT (src, "disabling seeking, not in mmap mode and lseek " - "failed: %s", g_strerror (errno)); + GST_LOG_OBJECT (src, "disabling seeking, lseek failed: %s", + g_strerror (errno)); src->seekable = FALSE; } else { src->seekable = TRUE; diff --git a/plugins/elements/gstfunnel.c b/plugins/elements/gstfunnel.c index 9a9f455..a15a9e6 100644 --- a/plugins/elements/gstfunnel.c +++ b/plugins/elements/gstfunnel.c @@ -67,6 +67,7 @@ struct _GstFunnelPad GstPad parent; GstSegment segment; + gboolean got_eos; }; struct _GstFunnelPadClass @@ -85,6 +86,7 @@ static void gst_funnel_pad_reset (GstFunnelPad * pad) { gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED); + pad->got_eos = FALSE; } static void @@ -203,16 +205,48 @@ gst_funnel_request_new_pad (GstElement * element, GstPadTemplate * templ, return sinkpad; } +static gboolean +gst_funnel_all_sinkpads_eos_unlocked (GstFunnel * funnel) +{ + GstElement *element = GST_ELEMENT_CAST (funnel); + GList *item; + + if (element->numsinkpads == 0) + return FALSE; + + for (item = element->sinkpads; item != NULL; item = g_list_next (item)) { + GstFunnelPad *sinkpad = item->data; + + if (!sinkpad->got_eos) + return FALSE; + } + + return TRUE; +} + static void gst_funnel_release_pad (GstElement * element, GstPad * pad) { GstFunnel *funnel = GST_FUNNEL (element); + GstFunnelPad *fpad = GST_FUNNEL_PAD_CAST (pad); + gboolean send_eos = FALSE; GST_DEBUG_OBJECT (funnel, "releasing pad"); gst_pad_set_active (pad, FALSE); gst_element_remove_pad (GST_ELEMENT_CAST (funnel), pad); + + GST_OBJECT_LOCK (funnel); + if (!fpad->got_eos && gst_funnel_all_sinkpads_eos_unlocked (funnel)) { + GST_DEBUG_OBJECT (funnel, "Pad removed. All others are EOS. Sending EOS"); + send_eos = TRUE; + } + GST_OBJECT_UNLOCK (funnel); + + if (send_eos) + if (!gst_pad_push_event (funnel->srcpad, gst_event_new_eos ())) + GST_WARNING_OBJECT (funnel, "Failure pushing EOS"); } static GstFlowReturn @@ -230,6 +264,15 @@ gst_funnel_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) GST_DEBUG_OBJECT (funnel, "received buffer %p", buffer); GST_OBJECT_LOCK (funnel); + + if (fpad->got_eos) { + GST_OBJECT_UNLOCK (funnel); + GST_WARNING_OBJECT (funnel, "Got buffer on pad that received EOS"); + res = GST_FLOW_EOS; + gst_buffer_unref (buffer); + goto out; + } + if (fpad->segment.format == GST_FORMAT_UNDEFINED) { GST_WARNING_OBJECT (funnel, "Got buffer without segment," " setting segment [0,inf["); @@ -267,6 +310,7 @@ gst_funnel_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) if (GST_BUFFER_CAPS (buffer) && GST_BUFFER_CAPS (buffer) != padcaps) { if (!gst_pad_set_caps (funnel->srcpad, GST_BUFFER_CAPS (buffer))) { res = GST_FLOW_NOT_NEGOTIATED; + gst_buffer_unref (buffer); goto out; } } @@ -276,9 +320,7 @@ gst_funnel_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) GST_LOG_OBJECT (funnel, "handled buffer %s", gst_flow_get_name (res)); -#if 0 out: -#endif return res; } @@ -306,6 +348,22 @@ gst_funnel_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) GST_OBJECT_LOCK (funnel); gst_segment_init (&fpad->segment, GST_FORMAT_UNDEFINED); funnel->has_segment = FALSE; + fpad->got_eos = FALSE; + GST_OBJECT_UNLOCK (funnel); + } + break; + case GST_EVENT_EOS: + { + GST_OBJECT_LOCK (funnel); + fpad->got_eos = TRUE; + + if (!gst_funnel_all_sinkpads_eos_unlocked (funnel)) { + GST_DEBUG_OBJECT (funnel, + "Got EOS, but not from all sinkpads. Skipping"); + forward = FALSE; + } else { + GST_DEBUG_OBJECT (funnel, "Got EOS from all sinkpads. Forwarding"); + } GST_OBJECT_UNLOCK (funnel); break; } diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c index eb6fba5..9133a8c 100644 --- a/plugins/elements/gstinputselector.c +++ b/plugins/elements/gstinputselector.c @@ -61,9 +61,47 @@ #include "gst/glib-compat-private.h" +#define DEBUG_CACHED_BUFFERS 0 + GST_DEBUG_CATEGORY_STATIC (input_selector_debug); #define GST_CAT_DEFAULT input_selector_debug +#define GST_TYPE_INPUT_SELECTOR_SYNC_MODE (gst_input_selector_sync_mode_get_type()) +static GType +gst_input_selector_sync_mode_get_type (void) +{ + static GType type = 0; + static const GEnumValue data[] = { + {GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT, + "Sync using the current active segment", + "active-segment"}, + {GST_INPUT_SELECTOR_SYNC_MODE_CLOCK, "Sync using the clock", "clock"}, + {0, NULL, NULL}, + }; + + if (!type) { + type = g_enum_register_static ("GstInputSelectorSyncMode", data); + } + return type; +} + +#if GLIB_CHECK_VERSION(2, 26, 0) +#define NOTIFY_MUTEX_LOCK() +#define NOTIFY_MUTEX_UNLOCK() +#else +static GStaticRecMutex notify_mutex = G_STATIC_REC_MUTEX_INIT; +#define NOTIFY_MUTEX_LOCK() g_static_rec_mutex_lock (¬ify_mutex) +#define NOTIFY_MUTEX_UNLOCK() g_static_rec_mutex_unlock (¬ify_mutex) +#endif + +#define GST_INPUT_SELECTOR_GET_LOCK(sel) (&((GstInputSelector*)(sel))->lock) +#define GST_INPUT_SELECTOR_GET_COND(sel) (&((GstInputSelector*)(sel))->cond) +#define GST_INPUT_SELECTOR_LOCK(sel) (g_mutex_lock (GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_UNLOCK(sel) (g_mutex_unlock (GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_WAIT(sel) (g_cond_wait (GST_INPUT_SELECTOR_GET_COND(sel), \ + GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_BROADCAST(sel) (g_cond_broadcast (GST_INPUT_SELECTOR_GET_COND(sel))) + static GstStaticPadTemplate gst_input_selector_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%u", GST_PAD_SINK, @@ -81,11 +119,14 @@ enum PROP_0, PROP_N_PADS, PROP_ACTIVE_PAD, - PROP_SYNC_STREAMS + PROP_SYNC_STREAMS, + PROP_SYNC_MODE, + PROP_CACHE_BUFFERS }; #define DEFAULT_SYNC_STREAMS TRUE - +#define DEFAULT_SYNC_MODE GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT +#define DEFAULT_CACHE_BUFFERS FALSE #define DEFAULT_PAD_ALWAYS_OK TRUE enum @@ -106,6 +147,8 @@ enum }; static guint gst_input_selector_signals[LAST_SIGNAL] = { 0 }; +static void gst_input_selector_active_pad_changed (GstInputSelector * sel, + GParamSpec * pspec, gpointer user_data); static inline gboolean gst_input_selector_is_active_sinkpad (GstInputSelector * sel, GstPad * pad); static GstPad *gst_input_selector_activate_sinkpad (GstInputSelector * sel, @@ -128,6 +171,7 @@ static GstPad *gst_input_selector_get_linked_pad (GstInputSelector * sel, typedef struct _GstSelectorPad GstSelectorPad; typedef struct _GstSelectorPadClass GstSelectorPadClass; +typedef struct _GstSelectorPadCachedBuffer GstSelectorPadCachedBuffer; struct _GstSelectorPad { @@ -147,6 +191,15 @@ struct _GstSelectorPad guint32 segment_seqnum; /* sequence number of the current segment */ gboolean events_pending; /* TRUE if sticky events need to be updated */ + + gboolean sending_cached_buffers; + GQueue *cached_buffers; +}; + +struct _GstSelectorPadCachedBuffer +{ + GstBuffer *buffer; + GstSegment segment; }; struct _GstSelectorPadClass @@ -171,6 +224,9 @@ static GstIterator *gst_selector_pad_iterate_linked_pads (GstPad * pad, GstObject * parent); static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf); +static void gst_selector_pad_cache_buffer (GstSelectorPad * selpad, + GstBuffer * buffer); +static void gst_selector_pad_free_cached_buffers (GstSelectorPad * selpad); G_DEFINE_TYPE (GstSelectorPad, gst_selector_pad, GST_TYPE_PAD); @@ -220,7 +276,8 @@ gst_selector_pad_finalize (GObject * object) pad = GST_SELECTOR_PAD_CAST (object); if (pad->tags) - gst_tag_list_free (pad->tags); + gst_tag_list_unref (pad->tags); + gst_selector_pad_free_cached_buffers (pad); G_OBJECT_CLASS (gst_selector_pad_parent_class)->finalize (object); } @@ -293,12 +350,13 @@ gst_selector_pad_get_running_time (GstSelectorPad * pad) } GST_OBJECT_UNLOCK (pad); - GST_DEBUG_OBJECT (pad, "running time: %" GST_TIME_FORMAT, - GST_TIME_ARGS (ret)); + GST_DEBUG_OBJECT (pad, "running time: %" GST_TIME_FORMAT + " segment: %" GST_SEGMENT_FORMAT, GST_TIME_ARGS (ret), &pad->segment); return ret; } +/* must be called with the SELECTOR_LOCK */ static void gst_selector_pad_reset (GstSelectorPad * pad) { @@ -312,9 +370,61 @@ gst_selector_pad_reset (GstSelectorPad * pad) pad->flushing = FALSE; pad->position = GST_CLOCK_TIME_NONE; gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED); + pad->sending_cached_buffers = FALSE; + gst_selector_pad_free_cached_buffers (pad); GST_OBJECT_UNLOCK (pad); } +static GstSelectorPadCachedBuffer * +gst_selector_pad_new_cached_buffer (GstSelectorPad * selpad, GstBuffer * buffer) +{ + GstSelectorPadCachedBuffer *cached_buffer = + g_slice_new (GstSelectorPadCachedBuffer); + cached_buffer->buffer = buffer; + cached_buffer->segment = selpad->segment; + return cached_buffer; +} + +static void +gst_selector_pad_free_cached_buffer (GstSelectorPadCachedBuffer * cached_buffer) +{ + gst_buffer_unref (cached_buffer->buffer); + g_slice_free (GstSelectorPadCachedBuffer, cached_buffer); +} + +/* must be called with the SELECTOR_LOCK */ +static void +gst_selector_pad_cache_buffer (GstSelectorPad * selpad, GstBuffer * buffer) +{ + if (selpad->segment.format != GST_FORMAT_TIME) { + GST_DEBUG_OBJECT (selpad, "Buffer %p with segment not in time format, " + "not caching", buffer); + return; + } + + GST_DEBUG_OBJECT (selpad, "Caching buffer %p", buffer); + if (!selpad->cached_buffers) + selpad->cached_buffers = g_queue_new (); + g_queue_push_tail (selpad->cached_buffers, + gst_selector_pad_new_cached_buffer (selpad, buffer)); +} + +/* must be called with the SELECTOR_LOCK */ +static void +gst_selector_pad_free_cached_buffers (GstSelectorPad * selpad) +{ + GstSelectorPadCachedBuffer *cached_buffer; + + if (!selpad->cached_buffers) + return; + + GST_DEBUG_OBJECT (selpad, "Freeing cached buffers"); + while ((cached_buffer = g_queue_pop_head (selpad->cached_buffers))) + gst_selector_pad_free_cached_buffer (cached_buffer); + g_queue_free (selpad->cached_buffers); + selpad->cached_buffers = NULL; +} + /* strictly get the linked pad from the sinkpad. If the pad is active we return * the srcpad else we return NULL */ static GstIterator * @@ -351,36 +461,34 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) sel = GST_INPUT_SELECTOR (parent); selpad = GST_SELECTOR_PAD_CAST (pad); + GST_DEBUG_OBJECT (selpad, "received event %" GST_PTR_FORMAT, event); GST_INPUT_SELECTOR_LOCK (sel); prev_active_sinkpad = sel->active_sinkpad; active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); - - /* only forward if we are dealing with the active sinkpad */ - forward = (pad == active_sinkpad); GST_INPUT_SELECTOR_UNLOCK (sel); if (prev_active_sinkpad != active_sinkpad && pad == active_sinkpad) { g_object_notify (G_OBJECT (sel), "active-pad"); } + GST_INPUT_SELECTOR_LOCK (sel); + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + + /* only forward if we are dealing with the active sinkpad */ + forward = (pad == active_sinkpad); + switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: /* Unblock the pad if it's waiting */ - GST_INPUT_SELECTOR_LOCK (sel); selpad->flushing = TRUE; GST_INPUT_SELECTOR_BROADCAST (sel); - GST_INPUT_SELECTOR_UNLOCK (sel); break; case GST_EVENT_FLUSH_STOP: - GST_INPUT_SELECTOR_LOCK (sel); gst_selector_pad_reset (selpad); - GST_INPUT_SELECTOR_UNLOCK (sel); break; case GST_EVENT_SEGMENT: { - GST_INPUT_SELECTOR_LOCK (sel); - GST_OBJECT_LOCK (selpad); gst_event_copy_segment (event, &selpad->segment); selpad->segment_seqnum = gst_event_get_seqnum (event); @@ -400,9 +508,6 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) } GST_DEBUG_OBJECT (pad, "configured SEGMENT %" GST_SEGMENT_FORMAT, &selpad->segment); - - GST_OBJECT_UNLOCK (selpad); - GST_INPUT_SELECTOR_UNLOCK (sel); break; } case GST_EVENT_TAG: @@ -411,15 +516,13 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) gst_event_parse_tag (event, &tags); - GST_OBJECT_LOCK (selpad); oldtags = selpad->tags; newtags = gst_tag_list_merge (oldtags, tags, GST_TAG_MERGE_REPLACE); selpad->tags = newtags; if (oldtags) - gst_tag_list_free (oldtags); + gst_tag_list_unref (oldtags); GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, newtags); - GST_OBJECT_UNLOCK (selpad); g_object_notify (G_OBJECT (selpad), "tags"); break; @@ -430,7 +533,7 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) if (forward) { selpad->eos_sent = TRUE; } else { - GstSelectorPad *tmp; + GstSelectorPad *active_selpad; /* If the active sinkpad is in EOS state but EOS * was not sent downstream this means that the pad @@ -438,18 +541,16 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) * the previously active pad got EOS after it was * active */ - GST_INPUT_SELECTOR_LOCK (sel); - active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); - tmp = GST_SELECTOR_PAD (active_sinkpad); - forward = (tmp->eos && !tmp->eos_sent); - tmp->eos_sent = TRUE; - GST_INPUT_SELECTOR_UNLOCK (sel); + active_selpad = GST_SELECTOR_PAD (active_sinkpad); + forward = (active_selpad->eos && !active_selpad->eos_sent); + active_selpad->eos_sent = TRUE; } GST_DEBUG_OBJECT (pad, "received EOS"); break; default: break; } + GST_INPUT_SELECTOR_UNLOCK (sel); if (forward) { GST_DEBUG_OBJECT (pad, "forwarding event"); res = gst_pad_push_event (sel->srcpad, event); @@ -495,103 +596,121 @@ gst_input_selector_wait (GstInputSelector * self, GstSelectorPad * pad) return self->flushing; } -/* must be called with the SELECTOR_LOCK, will block until the running time +/* must be called without the SELECTOR_LOCK, will wait until the running time * of the active pad is after this pad or return TRUE when flushing */ static gboolean gst_input_selector_wait_running_time (GstInputSelector * sel, - GstSelectorPad * pad, GstBuffer * buf) + GstSelectorPad * selpad, GstBuffer * buf) { - GstPad *active_sinkpad; - GstSelectorPad *active_selpad; - GstSegment *seg, *active_seg; - GstClockTime running_time, active_running_time = GST_CLOCK_TIME_NONE; - - seg = &pad->segment; - - active_sinkpad = - gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (pad)); - active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); - active_seg = &active_selpad->segment; - - /* We can only sync if the segments are in time format or - * if the active pad had no newsegment event yet */ - if (seg->format != GST_FORMAT_TIME || - (active_seg->format != GST_FORMAT_TIME - && active_seg->format != GST_FORMAT_UNDEFINED)) - return FALSE; + GstSegment *seg; - /* If we have no valid timestamp we can't sync this buffer */ - if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) - return FALSE; + GST_DEBUG_OBJECT (selpad, "entering wait for buffer %p", buf); - running_time = GST_BUFFER_TIMESTAMP (buf); - /* If possible try to get the running time at the end of the buffer */ - if (GST_BUFFER_DURATION_IS_VALID (buf)) - running_time += GST_BUFFER_DURATION (buf); - if (running_time > seg->stop) - running_time = seg->stop; - running_time = - gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time); - /* If this is outside the segment don't sync */ - if (running_time == -1) + /* If we have no valid timestamp we can't sync this buffer */ + if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { + GST_DEBUG_OBJECT (selpad, "leaving wait for buffer with " + "invalid timestamp"); return FALSE; + } - /* Get active pad's running time, if no configured segment yet keep at -1 */ - if (active_seg->format == GST_FORMAT_TIME) - active_running_time = - gst_segment_to_running_time (active_seg, GST_FORMAT_TIME, - active_selpad->position); + seg = &selpad->segment; /* Wait until * a) this is the active pad * b) the pad or the selector is flushing * c) the selector is not blocked - * d) the active pad has no running time or the active - * pad's running time is before this running time - * e) the active pad has a non-time segment - * f) the active pad changed and has not pushed anything + * d) the buffer running time is before the current running time + * (either active-seg or clock, depending on sync-mode) */ - while (pad != active_selpad && !sel->flushing && !pad->flushing - && active_selpad->pushed && (sel->blocked || active_running_time == -1 - || running_time >= active_running_time)) { - if (!sel->blocked) - GST_DEBUG_OBJECT (pad, - "Waiting for active streams to advance. %" GST_TIME_FORMAT " >= %" - GST_TIME_FORMAT, GST_TIME_ARGS (running_time), - GST_TIME_ARGS (active_running_time)); - - GST_INPUT_SELECTOR_WAIT (sel); - - /* Get new active pad, it might have changed */ + + GST_INPUT_SELECTOR_LOCK (sel); + while (TRUE) { + GstPad *active_sinkpad; + GstSelectorPad *active_selpad; + GstClock *clock; + gint64 cur_running_time; + GstClockTime running_time; + active_sinkpad = - gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (pad)); + gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (selpad)); active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); - active_seg = &active_selpad->segment; - /* If the active segment is configured but not to time format - * we can't do any syncing at all */ - if (active_seg->format != GST_FORMAT_TIME - && active_seg->format != GST_FORMAT_UNDEFINED) - break; + if (seg->format != GST_FORMAT_TIME) { + GST_INPUT_SELECTOR_UNLOCK (sel); + return FALSE; + } - /* Get the new active pad running time */ - if (active_seg->format == GST_FORMAT_TIME) - active_running_time = - gst_segment_to_running_time (active_seg, GST_FORMAT_TIME, - active_selpad->position); - else - active_running_time = -1; + running_time = GST_BUFFER_TIMESTAMP (buf); + /* If possible try to get the running time at the end of the buffer */ + if (GST_BUFFER_DURATION_IS_VALID (buf)) + running_time += GST_BUFFER_DURATION (buf); + /* Only use the segment to convert to running time if the segment is + * in TIME format, otherwise do our best to try to sync */ + if (GST_CLOCK_TIME_IS_VALID (seg->stop)) { + if (running_time > seg->stop) { + running_time = seg->stop; + } + } + running_time = + gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time); + /* If this is outside the segment don't sync */ + if (running_time == -1) { + GST_INPUT_SELECTOR_UNLOCK (sel); + return FALSE; + } + + cur_running_time = GST_CLOCK_TIME_NONE; + if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK) { + clock = gst_element_get_clock (GST_ELEMENT_CAST (sel)); + if (clock) { + GstClockTime base_time; + + cur_running_time = gst_clock_get_time (clock); + base_time = gst_element_get_base_time (GST_ELEMENT_CAST (sel)); + if (base_time <= cur_running_time) + cur_running_time -= base_time; + else + cur_running_time = 0; + } + } else { + GstSegment *active_seg; + + active_seg = &active_selpad->segment; + + /* If the active segment is configured but not to time format + * we can't do any syncing at all */ + if (active_seg->format != GST_FORMAT_TIME + && active_seg->format != GST_FORMAT_UNDEFINED) { + GST_INPUT_SELECTOR_UNLOCK (sel); + return FALSE; + } + + /* Get active pad's running time, if no configured segment yet keep at -1 */ + if (active_seg->format == GST_FORMAT_TIME) + cur_running_time = gst_segment_to_running_time (active_seg, + GST_FORMAT_TIME, active_seg->position); + } - if (!sel->blocked) - GST_DEBUG_OBJECT (pad, - "Waited for active streams to advance. %" GST_TIME_FORMAT " >= %" - GST_TIME_FORMAT, GST_TIME_ARGS (running_time), - GST_TIME_ARGS (active_running_time)); + if (selpad != active_selpad && !sel->flushing && !selpad->flushing && + (sel->cache_buffers || active_selpad->pushed) && + (sel->blocked || cur_running_time == -1 + || running_time >= cur_running_time)) { + if (!sel->blocked) { + GST_DEBUG_OBJECT (selpad, + "Waiting for active streams to advance. %" GST_TIME_FORMAT " >= %" + GST_TIME_FORMAT, GST_TIME_ARGS (running_time), + GST_TIME_ARGS (cur_running_time)); + } + GST_INPUT_SELECTOR_WAIT (sel); + } else { + GST_INPUT_SELECTOR_UNLOCK (sel); + break; + } } /* Return TRUE if the selector or the pad is flushing */ - return (sel->flushing || pad->flushing); + return (sel->flushing || selpad->flushing); } static gboolean @@ -614,6 +733,164 @@ forward_sticky_events (GstPad * sinkpad, GstEvent ** event, gpointer user_data) return TRUE; } +#if DEBUG_CACHED_BUFFERS +static void +gst_input_selector_debug_cached_buffers (GstInputSelector * sel) +{ + GList *walk; + + for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) { + GstSelectorPad *selpad; + GString *timestamps; + gchar *str; + int i; + + selpad = GST_SELECTOR_PAD_CAST (walk->data); + if (!selpad->cached_buffers) { + GST_DEBUG_OBJECT (selpad, "Cached buffers timestamps: "); + continue; + } + + timestamps = g_string_new ("Cached buffers timestamps:"); + for (i = 0; i < selpad->cached_buffers->length; ++i) { + GstSelectorPadCachedBuffer *cached_buffer; + + cached_buffer = g_queue_peek_nth (selpad->cached_buffers, i); + g_string_append_printf (timestamps, " %" GST_TIME_FORMAT, + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (cached_buffer->buffer))); + } + str = g_string_free (timestamps, FALSE); + GST_DEBUG_OBJECT (selpad, str); + g_free (str); + } +} +#endif + +/* must be called with the SELECTOR_LOCK */ +static void +gst_input_selector_cleanup_old_cached_buffers (GstInputSelector * sel, + GstPad * pad) +{ + GstClock *clock; + gint64 cur_running_time; + GList *walk; + + cur_running_time = GST_CLOCK_TIME_NONE; + if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK) { + clock = gst_element_get_clock (GST_ELEMENT_CAST (sel)); + if (clock) { + GstClockTime base_time; + + cur_running_time = gst_clock_get_time (clock); + base_time = gst_element_get_base_time (GST_ELEMENT_CAST (sel)); + if (base_time <= cur_running_time) + cur_running_time -= base_time; + else + cur_running_time = 0; + } + } else { + GstPad *active_sinkpad; + GstSelectorPad *active_selpad; + GstSegment *active_seg; + + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); + active_seg = &active_selpad->segment; + + /* Get active pad's running time, if no configured segment yet keep at -1 */ + if (active_seg->format == GST_FORMAT_TIME) + cur_running_time = gst_segment_to_running_time (active_seg, + GST_FORMAT_TIME, active_seg->position); + } + + if (!GST_CLOCK_TIME_IS_VALID (cur_running_time)) + return; + + GST_DEBUG_OBJECT (sel, "Cleaning up old cached buffers"); + for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) { + GstSelectorPad *selpad; + GstSegment *seg; + GstSelectorPadCachedBuffer *cached_buffer; + GSList *maybe_remove; + guint queue_position; + + selpad = GST_SELECTOR_PAD_CAST (walk->data); + if (!selpad->cached_buffers) + continue; + + seg = &selpad->segment; + + maybe_remove = NULL; + queue_position = 0; + while ((cached_buffer = g_queue_peek_nth (selpad->cached_buffers, + queue_position))) { + GstBuffer *buffer = cached_buffer->buffer; + GstClockTime running_time; + GSList *l; + + /* If we have no valid timestamp we can't sync this buffer */ + if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) { + maybe_remove = g_slist_append (maybe_remove, cached_buffer); + queue_position = g_slist_length (maybe_remove); + continue; + } + + /* the buffer is still valid if its duration is valid and the + * timestamp + duration is >= time, or if its duration is invalid + * and the timestamp is >= time */ + running_time = GST_BUFFER_TIMESTAMP (buffer); + /* If possible try to get the running time at the end of the buffer */ + if (GST_BUFFER_DURATION_IS_VALID (buffer)) + running_time += GST_BUFFER_DURATION (buffer); + /* Only use the segment to convert to running time if the segment is + * in TIME format, otherwise do our best to try to sync */ + if (GST_CLOCK_TIME_IS_VALID (seg->stop)) { + if (running_time > seg->stop) { + running_time = seg->stop; + } + } + running_time = + gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time); + + GST_DEBUG_OBJECT (selpad, + "checking if buffer %p running time=%" GST_TIME_FORMAT + " >= stream time=%" GST_TIME_FORMAT, buffer, + GST_TIME_ARGS (running_time), GST_TIME_ARGS (cur_running_time)); + if (running_time >= cur_running_time) { + break; + } + + GST_DEBUG_OBJECT (selpad, "Removing old cached buffer %p", buffer); + g_queue_pop_nth (selpad->cached_buffers, queue_position); + gst_selector_pad_free_cached_buffer (cached_buffer); + + for (l = maybe_remove; l != NULL; l = g_slist_next (l)) { + /* A buffer after some invalid buffers was removed, it means the invalid buffers + * are old, lets also remove them */ + cached_buffer = l->data; + g_queue_remove (selpad->cached_buffers, cached_buffer); + gst_selector_pad_free_cached_buffer (cached_buffer); + } + + g_slist_free (maybe_remove); + maybe_remove = NULL; + queue_position = 0; + } + + g_slist_free (maybe_remove); + maybe_remove = NULL; + + if (g_queue_is_empty (selpad->cached_buffers)) { + g_queue_free (selpad->cached_buffers); + selpad->cached_buffers = NULL; + } + } + +#if DEBUG_CACHED_BUFFERS + gst_input_selector_debug_cached_buffers (sel); +#endif +} + static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) { @@ -627,10 +904,16 @@ gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) sel = GST_INPUT_SELECTOR (parent); selpad = GST_SELECTOR_PAD_CAST (pad); + GST_DEBUG_OBJECT (selpad, + "entering chain for buf %p with timestamp %" GST_TIME_FORMAT, buf, + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); + GST_INPUT_SELECTOR_LOCK (sel); /* wait or check for flushing */ - if (gst_input_selector_wait (sel, selpad)) + if (gst_input_selector_wait (sel, selpad)) { + GST_INPUT_SELECTOR_UNLOCK (sel); goto flushing; + } GST_LOG_OBJECT (pad, "getting active pad"); @@ -639,13 +922,57 @@ gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) /* In sync mode wait until the active pad has advanced * after the running time of the current buffer */ - if (sel->sync_streams && active_sinkpad != pad) { - if (gst_input_selector_wait_running_time (sel, selpad, buf)) - goto flushing; - } + if (sel->sync_streams) { + /* call chain for each cached buffer if we are not the active pad + * or if we are the active pad but didn't push anything yet. */ + if (active_sinkpad != pad || !selpad->pushed) { + /* no need to check for sel->cache_buffers as selpad->cached_buffers + * will only be valid if cache_buffers is TRUE */ + if (selpad->cached_buffers && !selpad->sending_cached_buffers) { + GstSelectorPadCachedBuffer *cached_buffer; + GstSegment saved_segment; + + saved_segment = selpad->segment; + + selpad->sending_cached_buffers = TRUE; + while (!sel->flushing && !selpad->flushing && + (cached_buffer = g_queue_pop_head (selpad->cached_buffers))) { + GST_DEBUG_OBJECT (pad, "Cached buffers found, " + "invoking chain for cached buffer %p", cached_buffer->buffer); + + selpad->segment = cached_buffer->segment; + selpad->events_pending = TRUE; + GST_INPUT_SELECTOR_UNLOCK (sel); + gst_selector_pad_chain (pad, parent, cached_buffer->buffer); + GST_INPUT_SELECTOR_LOCK (sel); + + /* we may have cleaned up the queue in the meantime because of + * old buffers */ + if (!selpad->cached_buffers) { + break; + } + } + selpad->sending_cached_buffers = FALSE; - /* Might have changed while waiting */ - active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + /* all cached buffers sent, restore segment for current buffer */ + selpad->segment = saved_segment; + selpad->events_pending = TRUE; + + /* Might have changed while calling chain for cached buffers */ + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + } + } + + if (active_sinkpad != pad) { + GST_INPUT_SELECTOR_UNLOCK (sel); + if (gst_input_selector_wait_running_time (sel, selpad, buf)) + goto flushing; + GST_INPUT_SELECTOR_LOCK (sel); + } + + /* Might have changed while waiting */ + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + } /* update the segment on the srcpad */ start_time = GST_BUFFER_TIMESTAMP (buf); @@ -693,10 +1020,29 @@ gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) } /* forward */ - GST_LOG_OBJECT (pad, "Forwarding buffer %p", buf); + GST_LOG_OBJECT (pad, "Forwarding buffer %p with timestamp %" GST_TIME_FORMAT, + buf, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); + + res = gst_pad_push (sel->srcpad, gst_buffer_ref (buf)); + GST_LOG_OBJECT (pad, "Buffer %p forwarded result=%d", buf, res); + + GST_INPUT_SELECTOR_LOCK (sel); - res = gst_pad_push (sel->srcpad, buf); - selpad->pushed = TRUE; + if (sel->sync_streams && sel->cache_buffers) { + /* Might have changed while pushing */ + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + /* only set pad to pushed if we are still the active pad */ + if (active_sinkpad == pad) + selpad->pushed = TRUE; + + /* cache buffer as we may need it again if we change pads */ + gst_selector_pad_cache_buffer (selpad, buf); + gst_input_selector_cleanup_old_cached_buffers (sel, pad); + } else { + selpad->pushed = TRUE; + gst_buffer_unref (buf); + } + GST_INPUT_SELECTOR_UNLOCK (sel); done: return res; @@ -725,7 +1071,6 @@ ignore: flushing: { GST_DEBUG_OBJECT (pad, "We are flushing, discard buffer %p", buf); - GST_INPUT_SELECTOR_UNLOCK (sel); gst_buffer_unref (buf); res = GST_FLOW_FLUSHING; goto done; @@ -818,16 +1163,59 @@ gst_input_selector_class_init (GstInputSelectorClass * klass) * GstInputSelector:sync-streams * * If set to %TRUE all inactive streams will be synced to the - * running time of the active stream. This makes sure that no - * buffers are dropped by input-selector that might be needed - * when switching the active pad. + * running time of the active stream or to the current clock. + * + * To make sure no buffers are dropped by input-selector + * that might be needed when switching the active pad, + * sync-mode should be set to "clock" and cache-buffers to TRUE. * * Since: 0.10.36 */ g_object_class_install_property (gobject_class, PROP_SYNC_STREAMS, g_param_spec_boolean ("sync-streams", "Sync Streams", - "Synchronize inactive streams to the running time of the active stream", - DEFAULT_SYNC_STREAMS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + "Synchronize inactive streams to the running time of the active " + "stream or to the current clock", + DEFAULT_SYNC_STREAMS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + + /** + * GstInputSelector:sync-mode + * + * Select how input-selector will sync buffers when in sync-streams mode. + * + * Note that when using the "active-segment" mode, the "active-segment" may + * be ahead of current clock time when switching the active pad, as the current + * active pad may have pushed more buffers than what was displayed/consumed, + * which may cause delays and some missing buffers. + * + * Since: 0.10.36 + */ + g_object_class_install_property (gobject_class, PROP_SYNC_MODE, + g_param_spec_enum ("sync-mode", "Sync mode", + "Behavior in sync-streams mode", GST_TYPE_INPUT_SELECTOR_SYNC_MODE, + DEFAULT_SYNC_MODE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + + /** + * GstInputSelector:cache-buffers + * + * If set to %TRUE and GstInputSelector:sync-streams is also set to %TRUE, + * the active pad will cache the buffers still considered valid (after current + * running time, see sync-mode) to avoid missing frames if/when the pad is + * reactivated. + * + * The active pad may push more buffers than what is currently displayed/consumed + * and when changing pads those buffers will be discarded and the only way to + * reactivate that pad without loosing the already consumed buffers is to enable cache. + */ + g_object_class_install_property (gobject_class, PROP_CACHE_BUFFERS, + g_param_spec_boolean ("cache-buffers", "Cache Buffers", + "Cache buffers for active-pad", + DEFAULT_CACHE_BUFFERS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); /** * GstInputSelector::block: @@ -880,6 +1268,12 @@ gst_input_selector_init (GstInputSelector * sel) g_mutex_init (&sel->lock); g_cond_init (&sel->cond); sel->blocked = FALSE; + + /* lets give a change for downstream to do something on + * active-pad change before we start pushing new buffers */ + g_signal_connect_data (sel, "notify::active-pad", + (GCallback) gst_input_selector_active_pad_changed, NULL, + NULL, G_CONNECT_AFTER); } static void @@ -934,13 +1328,6 @@ gst_input_selector_set_active_pad (GstInputSelector * self, GstPad * pad) active_pad_p = &self->active_sinkpad; gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad)); - gst_pad_push_event (pad, gst_event_new_reconfigure ()); - - /* Wake up all non-active pads in sync mode, they might be - * the active pad now */ - if (self->sync_streams) - GST_INPUT_SELECTOR_BROADCAST (self); - GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT, self->active_sinkpad); @@ -961,23 +1348,51 @@ gst_input_selector_set_property (GObject * object, guint prop_id, pad = g_value_get_object (value); GST_INPUT_SELECTOR_LOCK (sel); + +#if DEBUG_CACHED_BUFFERS + gst_input_selector_debug_cached_buffers (sel); +#endif + gst_input_selector_set_active_pad (sel, pad); + +#if DEBUG_CACHED_BUFFERS + gst_input_selector_debug_cached_buffers (sel); +#endif + GST_INPUT_SELECTOR_UNLOCK (sel); break; } case PROP_SYNC_STREAMS: - { GST_INPUT_SELECTOR_LOCK (sel); sel->sync_streams = g_value_get_boolean (value); GST_INPUT_SELECTOR_UNLOCK (sel); break; - } + case PROP_SYNC_MODE: + GST_INPUT_SELECTOR_LOCK (sel); + sel->sync_mode = g_value_get_enum (value); + GST_INPUT_SELECTOR_UNLOCK (sel); + break; + case PROP_CACHE_BUFFERS: + GST_INPUT_SELECTOR_LOCK (object); + sel->cache_buffers = g_value_get_boolean (value); + GST_INPUT_SELECTOR_UNLOCK (object); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } +static void +gst_input_selector_active_pad_changed (GstInputSelector * sel, + GParamSpec * pspec, gpointer user_data) +{ + /* Wake up all non-active pads in sync mode, they might be + * the active pad now */ + if (sel->sync_streams) + GST_INPUT_SELECTOR_BROADCAST (sel); +} + static void gst_input_selector_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) @@ -1000,6 +1415,16 @@ gst_input_selector_get_property (GObject * object, guint prop_id, g_value_set_boolean (value, sel->sync_streams); GST_INPUT_SELECTOR_UNLOCK (object); break; + case PROP_SYNC_MODE: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_enum (value, sel->sync_mode); + GST_INPUT_SELECTOR_UNLOCK (object); + break; + case PROP_CACHE_BUFFERS: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_boolean (value, sel->cache_buffers); + GST_INPUT_SELECTOR_UNLOCK (object); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1270,7 +1695,7 @@ gst_input_selector_reset (GstInputSelector * sel) gst_selector_pad_reset (selpad); if (selpad->tags) { - gst_tag_list_free (selpad->tags); + gst_tag_list_unref (selpad->tags); selpad->tags = NULL; } } diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h index 8a5248a..dd48a51 100644 --- a/plugins/elements/gstinputselector.h +++ b/plugins/elements/gstinputselector.h @@ -48,6 +48,18 @@ typedef struct _GstInputSelectorClass GstInputSelectorClass; GST_INPUT_SELECTOR_GET_LOCK(sel))) #define GST_INPUT_SELECTOR_BROADCAST(sel) (g_cond_broadcast (GST_INPUT_SELECTOR_GET_COND(sel))) +/** + * GstInputSelectorSyncMode: + * @GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT: Sync using the current active segment. + * @GST_INPUT_SELECTOR_SYNC_MODE_CLOCK: Sync using the clock. + * + * The different ways that input-selector can behave when in sync-streams mode. + */ +typedef enum { + GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT, + GST_INPUT_SELECTOR_SYNC_MODE_CLOCK +} GstInputSelectorSyncMode; + struct _GstInputSelector { GstElement element; @@ -57,6 +69,8 @@ struct _GstInputSelector { guint n_pads; guint padcount; gboolean sync_streams; + GstInputSelectorSyncMode sync_mode; + gboolean cache_buffers; GMutex lock; GCond cond; diff --git a/plugins/elements/gstqueue2.c b/plugins/elements/gstqueue2.c index 82e2e11..158da10 100644 --- a/plugins/elements/gstqueue2.c +++ b/plugins/elements/gstqueue2.c @@ -41,7 +41,7 @@ * The default queue size limits are 100 buffers, 2MB of data, or * two seconds worth of data, whichever is reached first. * - * If you set temp-tmpl to a value such as /tmp/gstreamer-XXXXXX, the element + * If you set temp-template to a value such as /tmp/gstreamer-XXXXXX, the element * will allocate a random free filename and buffer data in the file. * By using this, it will buffer the entire stream data on the file independently * of the queue size limits, they will only be used for buffering statistics. @@ -2427,21 +2427,8 @@ next: if (item_type == GST_QUEUE2_ITEM_TYPE_BUFFER) { GstBuffer *buffer; -#if 0 - GstCaps *caps; -#endif buffer = GST_BUFFER_CAST (data); -#if 0 - caps = GST_BUFFER_CAPS (buffer); -#endif - -#if 0 - /* set caps before pushing the buffer so that core does not try to do - * something fancy to check if this is possible. */ - if (caps && caps != GST_PAD_CAPS (queue->srcpad)) - gst_pad_set_caps (queue->srcpad, caps); -#endif result = gst_pad_push (queue->srcpad, buffer); @@ -2471,23 +2458,9 @@ next: GST_QUEUE2_MUTEX_LOCK_CHECK (queue, queue->srcresult, out_flushing); } else if (item_type == GST_QUEUE2_ITEM_TYPE_BUFFER_LIST) { GstBufferList *buffer_list; -#if 0 - GstBuffer *first_buf; - GstCaps *caps; -#endif buffer_list = GST_BUFFER_LIST_CAST (data); -#if 0 - first_buf = gst_buffer_list_get (buffer_list, 0); - caps = (first_buf != NULL) ? GST_BUFFER_CAPS (first_buf) : NULL; - - /* set caps before pushing the buffer so that core does not try to do - * something fancy to check if this is possible. */ - if (caps && caps != GST_PAD_CAPS (queue->srcpad)) - gst_pad_set_caps (queue->srcpad, caps); -#endif - result = gst_pad_push_list (queue->srcpad, buffer_list); /* need to check for srcresult here as well */ @@ -3222,7 +3195,7 @@ gst_queue2_set_property (GObject * object, case PROP_TEMP_LOCATION: g_free (queue->temp_location); queue->temp_location = g_value_dup_string (value); - /* you can set the property back to NULL to make it use the temp-tmpl + /* you can set the property back to NULL to make it use the temp-template * property. */ queue->temp_location_set = queue->temp_location != NULL; break; diff --git a/plugins/elements/gsttypefindelement.c b/plugins/elements/gsttypefindelement.c index 436a4e9..e6c4de2 100644 --- a/plugins/elements/gsttypefindelement.c +++ b/plugins/elements/gsttypefindelement.c @@ -1190,6 +1190,12 @@ gst_type_find_element_activate_sink (GstPad * pad, GstObject * parent) g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE], 0, probability, found_caps); typefind->mode = MODE_NORMAL; + /* the signal above could have made a downstream element activate + * the pad in pull mode, we check if the pad is already active now and if + * so, we are done */ + if (gst_pad_is_active (pad)) + return TRUE; + goto typefind_push; } GST_OBJECT_UNLOCK (typefind); diff --git a/po/af.gmo b/po/af.gmo index adeef7a..dc52152 100644 Binary files a/po/af.gmo and b/po/af.gmo differ diff --git a/po/af.po b/po/af.po index d799a1d..0530494 100644 --- a/po/af.po +++ b/po/af.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.9.7\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2005-12-05 11:45+0200\n" "Last-Translator: Petri Jooste \n" "Language-Team: Afrikaans \n" @@ -1131,7 +1131,7 @@ msgstr "geen element \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Wys etikette (ook bekend as metadata)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1201,12 +1201,19 @@ msgstr "FOUT: pyplyn wil nie speel nie.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Pyplyn word gestel na NULL ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/az.gmo b/po/az.gmo index 1c8cb19..52ec0cf 100644 Binary files a/po/az.gmo and b/po/az.gmo differ diff --git a/po/az.po b/po/az.po index ba265a7..7563ac1 100644 --- a/po/az.po +++ b/po/az.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.8.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2004-03-19 18:40+0200\n" "Last-Translator: Metin Amiroff \n" "Language-Team: Azerbaijani \n" @@ -1077,7 +1077,7 @@ msgstr "" msgid "Output tags (also known as metadata)" msgstr "" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1145,12 +1145,18 @@ msgstr "" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/be.gmo b/po/be.gmo index c7c1783..30c5b03 100644 Binary files a/po/be.gmo and b/po/be.gmo differ diff --git a/po/be.po b/po/be.po index af6f723..659461a 100644 --- a/po/be.po +++ b/po/be.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.9.7\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2006-01-18 22:26+0200\n" "Last-Translator: Ales Nyakhaychyk \n" "Language-Team: Belarusian \n" @@ -1086,7 +1086,7 @@ msgstr "" msgid "Output tags (also known as metadata)" msgstr "" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1154,12 +1154,18 @@ msgstr "" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/bg.gmo b/po/bg.gmo index 1e937d5..19c9a1e 100644 Binary files a/po/bg.gmo and b/po/bg.gmo differ diff --git a/po/bg.po b/po/bg.po index 3929568..b36f1cc 100644 --- a/po/bg.po +++ b/po/bg.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-04-26 22:40+0300\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" @@ -1129,7 +1129,7 @@ msgstr "елементът „%s“ липсва" msgid "Output tags (also known as metadata)" msgstr "Изходни съобщения за етикетите (метаданните)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1198,12 +1198,20 @@ msgstr "ГРЕШКА: конвейерът не иска да проработи msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "Включен е EOS при спиране — извеждане на EOS по конвейера\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "Включен е EOS при спиране — извеждане на EOS по конвейера\n" + msgid "Waiting for EOS...\n" msgstr "Изчакване на EOS…\n" msgid "EOS received - stopping pipeline...\n" msgstr "Получен е край на поток: конвейерът се спира…\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Прекъсване: Конвейерът се спира…\n" + msgid "An error happened while waiting for EOS\n" msgstr "Възникна грешка при изчакването на EOS\n" diff --git a/po/ca.gmo b/po/ca.gmo index 0592c61..064bef0 100644 Binary files a/po/ca.gmo and b/po/ca.gmo differ diff --git a/po/ca.po b/po/ca.po index 82f7d81..dd4c7a9 100644 --- a/po/ca.po +++ b/po/ca.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-11-04 19:41+0100\n" "Last-Translator: Jordi Mallach \n" "Language-Team: Catalan \n" @@ -1136,7 +1136,7 @@ msgstr "no hi ha cap element «%s»" msgid "Output tags (also known as metadata)" msgstr "Mostra els marcadors (també coneguts com metadades)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1206,12 +1206,22 @@ msgstr "" "S'ha habilitat el final del flux en tancar -- S'està forçant un final del " "flux al conducte\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"S'ha habilitat el final del flux en tancar -- S'està forçant un final del " +"flux al conducte\n" + msgid "Waiting for EOS...\n" msgstr "S'està esperant al final del flux…\n" msgid "EOS received - stopping pipeline...\n" msgstr "S'ha rebut un final del flux - s'està aturant el conducte…\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interrupció: S'està aturant el conducte…\n" + msgid "An error happened while waiting for EOS\n" msgstr "S'ha produït un error en esperar al final del flux\n" diff --git a/po/cs.gmo b/po/cs.gmo index f56fc51..2e8bb95 100644 Binary files a/po/cs.gmo and b/po/cs.gmo differ diff --git a/po/cs.po b/po/cs.po index 7e343ac..1575e42 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-12-01 08:17+0100\n" "Last-Translator: Marek Černocký \n" "Language-Team: Czech \n" @@ -1132,7 +1132,7 @@ msgstr "prvek „%s“ neexistuje" msgid "Output tags (also known as metadata)" msgstr "Vypsat štítky (známé také jako metadata)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1205,12 +1205,22 @@ msgstr "" "Zakončení proudu (EOS) při vypnutí povoleno -- Vynucuje se zakončení proudu " "v rouře\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"Zakončení proudu (EOS) při vypnutí povoleno -- Vynucuje se zakončení proudu " +"v rouře\n" + msgid "Waiting for EOS...\n" msgstr "Čeká se na konec proudu (EOS)…\n" msgid "EOS received - stopping pipeline...\n" msgstr "Obdržen konec proudu (EOS) – zastavuje se roura…\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Přerušení: Zastavuje se roura…\n" + msgid "An error happened while waiting for EOS\n" msgstr "Nastala chyba při čekání na konec proudu (EOS)\n" diff --git a/po/da.gmo b/po/da.gmo index b4debcb..6f209f8 100644 Binary files a/po/da.gmo and b/po/da.gmo differ diff --git a/po/da.po b/po/da.po index 2170f7b..13a430e 100644 --- a/po/da.po +++ b/po/da.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-11-06 22:52+0100\n" "Last-Translator: Mogens Jaeger \n" "Language-Team: Danish \n" @@ -1131,7 +1131,7 @@ msgstr "intet element \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Uddatamærkater (også kendt som metadata)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1200,12 +1200,21 @@ msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" "Medieslut ved nedlukning aktiveret -- Gennemtving medieslut på rørledningen\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"Medieslut ved nedlukning aktiveret -- Gennemtving medieslut på rørledningen\n" + msgid "Waiting for EOS...\n" msgstr "Venter på medieslut...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Medieslut modtaget - stopper rørledning...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Afbrydelse: Stopper rørledning...\n" + msgid "An error happened while waiting for EOS\n" msgstr "En fejl opstod mens der ventedes på medieslut\n" diff --git a/po/de.gmo b/po/de.gmo index 96fb320..8dc740f 100644 Binary files a/po/de.gmo and b/po/de.gmo differ diff --git a/po/de.po b/po/de.po index 49cd9e6..e2166e8 100644 --- a/po/de.po +++ b/po/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-04-27 23:44+0200\n" "Last-Translator: Christian Kirbach \n" "Language-Team: German \n" @@ -1153,7 +1153,7 @@ msgstr "Kein Element »%s«" msgid "Output tags (also known as metadata)" msgstr "Kennzeichen (auch bekannt als Metadaten) ausgeben" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1222,12 +1222,21 @@ msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" "EOS bei Beenden ist eingeschaltet -- EOS wird auf die Leitung erzwungen\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"EOS bei Beenden ist eingeschaltet -- EOS wird auf die Leitung erzwungen\n" + msgid "Waiting for EOS...\n" msgstr "Auf EOS wird gewartet …\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS erhalten - Leitung wird angehalten …\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interrupt: Leitung wird gestoppt ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Ein Fehler ist beim Warten auf EOS aufgetreten\n" diff --git a/po/el.gmo b/po/el.gmo index 8940cd0..c1c3012 100644 Binary files a/po/el.gmo and b/po/el.gmo differ diff --git a/po/el.po b/po/el.po index f1505a9..343f4e9 100644 --- a/po/el.po +++ b/po/el.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-11-29 11:14+0200\n" "Last-Translator: Michael Kotsarinis \n" "Language-Team: Greek \n" @@ -1144,7 +1144,7 @@ msgstr "δεν υπάρχει στοιχείο «%s»" msgid "Output tags (also known as metadata)" msgstr "Ετικέτες εξόδου (επίσης γνωστές ως μεταδεδομένα)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1213,12 +1213,21 @@ msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" "Ενεργοποίηση του EOS κατά τον τερματισμό -- Επιβολή του EOS στη διασωλήνωση\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"Ενεργοποίηση του EOS κατά τον τερματισμό -- Επιβολή του EOS στη διασωλήνωση\n" + msgid "Waiting for EOS...\n" msgstr "Αναμονή για EOS…\n" msgid "EOS received - stopping pipeline...\n" msgstr "Λήψη EOS - διακοπή διασωλήνωσης…\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Διακοπή: Τερματισμός διασωλήνωσης…\n" + msgid "An error happened while waiting for EOS\n" msgstr "Προέκυψε σφάλμα κατά την αναμονή για EOS\n" diff --git a/po/en_GB.gmo b/po/en_GB.gmo index 5653952..9f5718e 100644 Binary files a/po/en_GB.gmo and b/po/en_GB.gmo differ diff --git a/po/en_GB.po b/po/en_GB.po index febb66a..de86948 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2004-04-26 10:36-0400\n" "Last-Translator: Gareth Owen \n" "Language-Team: English (British) \n" @@ -1133,7 +1133,7 @@ msgstr "no element \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Output tags (also known as metadata)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1204,12 +1204,18 @@ msgstr "ERROR: pipeline doesn't want to play.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/eo.gmo b/po/eo.gmo index 6e295da..95c5c6a 100644 Binary files a/po/eo.gmo and b/po/eo.gmo differ diff --git a/po/eo.po b/po/eo.po index c24eecb..f15bdc2 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-06-04 21:11+0100\n" "Last-Translator: Kristjan SCHMIDT \n" "Language-Team: Esperanto \n" @@ -1068,7 +1068,7 @@ msgstr "neniu elemento \"%s\"" msgid "Output tags (also known as metadata)" msgstr "" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1136,12 +1136,18 @@ msgstr "" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/es.gmo b/po/es.gmo index f6ca501..2799c43 100644 Binary files a/po/es.gmo and b/po/es.gmo differ diff --git a/po/es.po b/po/es.po index ffd14fa..42c91a9 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-10-02 15:45+0200\n" "Last-Translator: Jorge González González \n" "Language-Team: Spanish \n" @@ -1138,7 +1138,7 @@ msgstr "no hay un elemento «%s»" msgid "Output tags (also known as metadata)" msgstr "Etiquetas de salida (también conocidos como metadatos)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1206,12 +1206,20 @@ msgstr "ERROR: el conducto no quiere reproducir.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS al apagar activado; Forzando EOS en la tubería\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS al apagar activado; Forzando EOS en la tubería\n" + msgid "Waiting for EOS...\n" msgstr "Esperando a EOS…\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS recibido: parando el conducto …\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interrumpir: parando el conducto …\n" + msgid "An error happened while waiting for EOS\n" msgstr "Ocurrió un error al esperar a EOS\n" diff --git a/po/eu.gmo b/po/eu.gmo index dc74212..a0e0ce4 100644 Binary files a/po/eu.gmo and b/po/eu.gmo differ diff --git a/po/eu.po b/po/eu.po index f8791f5..7142b11 100644 --- a/po/eu.po +++ b/po/eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.26.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-03-25 13:10+0100\n" "Last-Translator: Mikel Olasagasti Uranga \n" "Language-Team: Basque \n" @@ -1136,7 +1136,7 @@ msgstr "ez dago \"%s\" elementua" msgid "Output tags (also known as metadata)" msgstr "Erakutsi etiketak (metadatu gisa ere ezagutzen direnak)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1204,12 +1204,20 @@ msgstr "ERROREA: ezin da kanalizazioa erreproduzitu.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS itzaltzean gaituta -- EOS derrigortzen kanalizazioan\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS itzaltzean gaituta -- EOS derrigortzen kanalizazioan\n" + msgid "Waiting for EOS...\n" msgstr "EOSren zain...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOSa jasota - kanalizazioa gelditzen...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Eten: Kanalizazioa gelditzen... \n" + msgid "An error happened while waiting for EOS\n" msgstr "Errorea gertatu da EOSren zain egotean\n" diff --git a/po/fi.gmo b/po/fi.gmo index d3bcae5..5c9cecb 100644 Binary files a/po/fi.gmo and b/po/fi.gmo differ diff --git a/po/fi.po b/po/fi.po index 517739e..a4cc57b 100644 --- a/po/fi.po +++ b/po/fi.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-11-17 23:10+0200\n" "Last-Translator: Tommi Vainikainen \n" "Language-Team: Finnish \n" @@ -1129,7 +1129,7 @@ msgstr "ei elementtiä ”%s”" msgid "Output tags (also known as metadata)" msgstr "Tulostemerkinnät (tunnetaan myös metadatana)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1199,12 +1199,22 @@ msgstr "" "Virran-loppu sammutettaessa käytössä -- pakotetaan virran-loppu " "liukuhihnalle\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"Virran-loppu sammutettaessa käytössä -- pakotetaan virran-loppu " +"liukuhihnalle\n" + msgid "Waiting for EOS...\n" msgstr "Odotetaan virran loppua...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Virran-loppu vastaanotettu - pysäytetään liukuhihna...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Keskeytys: Pysäytetään liukuhihna ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Tapahtui virhe odotettaessa virran-loppua\n" diff --git a/po/fr.gmo b/po/fr.gmo index 8b6a749..ba0fc13 100644 Binary files a/po/fr.gmo and b/po/fr.gmo differ diff --git a/po/fr.po b/po/fr.po index 1182495..811f620 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-04-28 09:34+0200\n" "Last-Translator: Claude Paroz \n" "Language-Team: French \n" @@ -1133,7 +1133,7 @@ msgstr "pas d'élément « %s »" msgid "Output tags (also known as metadata)" msgstr "Affiche les balises (aussi connues sous le nom de métadonnées)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1201,12 +1201,20 @@ msgstr "ERREUR : le pipeline refuse de passer en mode actif.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS à la fermeture est activé -- EOS forcé sur le pipeline\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS à la fermeture est activé -- EOS forcé sur le pipeline\n" + msgid "Waiting for EOS...\n" msgstr "Attente d'EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS reçu - arrêt du pipeline...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interruption : arrêt du pipeline...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Une erreur s'est produite lors de l'attente de l'EOS\n" diff --git a/po/gl.gmo b/po/gl.gmo index 5172843..f4b527b 100644 Binary files a/po/gl.gmo and b/po/gl.gmo differ diff --git a/po/gl.po b/po/gl.po index 9713502..5f0d995 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-09-05 12:49+0200\n" "Last-Translator: Fran Dieguez \n" "Language-Team: Galician \n" @@ -1128,7 +1128,7 @@ msgstr "non hai un elemento «%s»" msgid "Output tags (also known as metadata)" msgstr "Etiquetas de saída (tamén coñecido como metadatos)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1196,12 +1196,20 @@ msgstr "ERRO: a tubería non quere reproducirse.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS ao apagar activado; Forzando EOS na tubería\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS ao apagar activado; Forzando EOS na tubería\n" + msgid "Waiting for EOS...\n" msgstr "Agardando pola EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS recibido: detendo a tubería...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interromper: parando a canalización …\n" + msgid "An error happened while waiting for EOS\n" msgstr "Produciuse un erro ao esperar a EOS\n" diff --git a/po/gstreamer-1.0.pot b/po/gstreamer-1.0.pot index 293261a..0429d35 100644 --- a/po/gstreamer-1.0.pot +++ b/po/gstreamer-1.0.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gstreamer 0.11.91\n" +"Project-Id-Version: gstreamer 0.11.92\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -98,7 +98,7 @@ msgstr "" msgid "Show GStreamer Options" msgstr "" -#: gst/gst.c:927 +#: gst/gst.c:926 msgid "Unknown option" msgstr "" @@ -299,554 +299,554 @@ msgstr "" msgid "Selected clock cannot be used in pipeline." msgstr "" -#: gst/gsttaglist.c:101 +#: gst/gsttaglist.c:110 msgid "title" msgstr "" -#: gst/gsttaglist.c:101 +#: gst/gsttaglist.c:110 msgid "commonly used title" msgstr "" -#: gst/gsttaglist.c:104 +#: gst/gsttaglist.c:113 msgid "title sortname" msgstr "" -#: gst/gsttaglist.c:104 +#: gst/gsttaglist.c:113 msgid "commonly used title for sorting purposes" msgstr "" -#: gst/gsttaglist.c:107 +#: gst/gsttaglist.c:116 msgid "artist" msgstr "" -#: gst/gsttaglist.c:108 +#: gst/gsttaglist.c:117 msgid "person(s) responsible for the recording" msgstr "" -#: gst/gsttaglist.c:112 +#: gst/gsttaglist.c:121 msgid "artist sortname" msgstr "" -#: gst/gsttaglist.c:113 +#: gst/gsttaglist.c:122 msgid "person(s) responsible for the recording for sorting purposes" msgstr "" -#: gst/gsttaglist.c:116 +#: gst/gsttaglist.c:125 msgid "album" msgstr "" -#: gst/gsttaglist.c:117 +#: gst/gsttaglist.c:126 msgid "album containing this data" msgstr "" -#: gst/gsttaglist.c:120 +#: gst/gsttaglist.c:129 msgid "album sortname" msgstr "" -#: gst/gsttaglist.c:121 +#: gst/gsttaglist.c:130 msgid "album containing this data for sorting purposes" msgstr "" -#: gst/gsttaglist.c:124 +#: gst/gsttaglist.c:133 msgid "album artist" msgstr "" -#: gst/gsttaglist.c:125 +#: gst/gsttaglist.c:134 msgid "The artist of the entire album, as it should be displayed" msgstr "" -#: gst/gsttaglist.c:129 +#: gst/gsttaglist.c:138 msgid "album artist sortname" msgstr "" -#: gst/gsttaglist.c:130 +#: gst/gsttaglist.c:139 msgid "The artist of the entire album, as it should be sorted" msgstr "" -#: gst/gsttaglist.c:132 +#: gst/gsttaglist.c:141 msgid "date" msgstr "" -#: gst/gsttaglist.c:132 +#: gst/gsttaglist.c:141 msgid "date the data was created (as a GDate structure)" msgstr "" -#: gst/gsttaglist.c:134 +#: gst/gsttaglist.c:143 msgid "datetime" msgstr "" -#: gst/gsttaglist.c:135 +#: gst/gsttaglist.c:144 msgid "date and time the data was created (as a GstDateTime structure)" msgstr "" -#: gst/gsttaglist.c:139 +#: gst/gsttaglist.c:148 msgid "genre" msgstr "" -#: gst/gsttaglist.c:140 +#: gst/gsttaglist.c:149 msgid "genre this data belongs to" msgstr "" -#: gst/gsttaglist.c:143 +#: gst/gsttaglist.c:152 msgid "comment" msgstr "" -#: gst/gsttaglist.c:144 +#: gst/gsttaglist.c:153 msgid "free text commenting the data" msgstr "" -#: gst/gsttaglist.c:147 +#: gst/gsttaglist.c:156 msgid "extended comment" msgstr "" -#: gst/gsttaglist.c:148 +#: gst/gsttaglist.c:157 msgid "free text commenting the data in key=value or key[en]=comment form" msgstr "" -#: gst/gsttaglist.c:152 +#: gst/gsttaglist.c:161 msgid "track number" msgstr "" -#: gst/gsttaglist.c:153 +#: gst/gsttaglist.c:162 msgid "track number inside a collection" msgstr "" -#: gst/gsttaglist.c:156 +#: gst/gsttaglist.c:165 msgid "track count" msgstr "" -#: gst/gsttaglist.c:157 +#: gst/gsttaglist.c:166 msgid "count of tracks inside collection this track belongs to" msgstr "" -#: gst/gsttaglist.c:161 +#: gst/gsttaglist.c:170 msgid "disc number" msgstr "" -#: gst/gsttaglist.c:162 +#: gst/gsttaglist.c:171 msgid "disc number inside a collection" msgstr "" -#: gst/gsttaglist.c:165 +#: gst/gsttaglist.c:174 msgid "disc count" msgstr "" -#: gst/gsttaglist.c:166 +#: gst/gsttaglist.c:175 msgid "count of discs inside collection this disc belongs to" msgstr "" -#: gst/gsttaglist.c:170 +#: gst/gsttaglist.c:179 msgid "location" msgstr "" -#: gst/gsttaglist.c:170 +#: gst/gsttaglist.c:179 msgid "" "Origin of media as a URI (location, where the original of the file or stream " "is hosted)" msgstr "" -#: gst/gsttaglist.c:175 +#: gst/gsttaglist.c:184 msgid "homepage" msgstr "" -#: gst/gsttaglist.c:176 +#: gst/gsttaglist.c:185 msgid "Homepage for this media (i.e. artist or movie homepage)" msgstr "" -#: gst/gsttaglist.c:179 +#: gst/gsttaglist.c:188 msgid "description" msgstr "" -#: gst/gsttaglist.c:179 +#: gst/gsttaglist.c:189 msgid "short text describing the content of the data" msgstr "" -#: gst/gsttaglist.c:182 +#: gst/gsttaglist.c:192 msgid "version" msgstr "" -#: gst/gsttaglist.c:182 +#: gst/gsttaglist.c:192 msgid "version of this data" msgstr "" -#: gst/gsttaglist.c:183 +#: gst/gsttaglist.c:194 msgid "ISRC" msgstr "" -#: gst/gsttaglist.c:185 +#: gst/gsttaglist.c:196 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/" msgstr "" -#: gst/gsttaglist.c:189 +#: gst/gsttaglist.c:200 msgid "organization" msgstr "" -#: gst/gsttaglist.c:191 +#: gst/gsttaglist.c:203 msgid "copyright" msgstr "" -#: gst/gsttaglist.c:191 +#: gst/gsttaglist.c:203 msgid "copyright notice of the data" msgstr "" -#: gst/gsttaglist.c:193 +#: gst/gsttaglist.c:205 msgid "copyright uri" msgstr "" -#: gst/gsttaglist.c:194 +#: gst/gsttaglist.c:206 msgid "URI to the copyright notice of the data" msgstr "" -#: gst/gsttaglist.c:196 +#: gst/gsttaglist.c:208 msgid "encoded by" msgstr "" -#: gst/gsttaglist.c:196 +#: gst/gsttaglist.c:208 msgid "name of the encoding person or organization" msgstr "" -#: gst/gsttaglist.c:200 +#: gst/gsttaglist.c:212 msgid "contact" msgstr "" -#: gst/gsttaglist.c:200 +#: gst/gsttaglist.c:212 msgid "contact information" msgstr "" -#: gst/gsttaglist.c:202 +#: gst/gsttaglist.c:214 msgid "license" msgstr "" -#: gst/gsttaglist.c:202 +#: gst/gsttaglist.c:214 msgid "license of data" msgstr "" -#: gst/gsttaglist.c:204 +#: gst/gsttaglist.c:216 msgid "license uri" msgstr "" -#: gst/gsttaglist.c:205 +#: gst/gsttaglist.c:217 msgid "URI to the license of the data" msgstr "" -#: gst/gsttaglist.c:208 +#: gst/gsttaglist.c:220 msgid "performer" msgstr "" -#: gst/gsttaglist.c:209 +#: gst/gsttaglist.c:221 msgid "person(s) performing" msgstr "" -#: gst/gsttaglist.c:212 +#: gst/gsttaglist.c:224 msgid "composer" msgstr "" -#: gst/gsttaglist.c:213 +#: gst/gsttaglist.c:225 msgid "person(s) who composed the recording" msgstr "" -#: gst/gsttaglist.c:217 +#: gst/gsttaglist.c:229 msgid "duration" msgstr "" -#: gst/gsttaglist.c:217 +#: gst/gsttaglist.c:229 msgid "length in GStreamer time units (nanoseconds)" msgstr "" -#: gst/gsttaglist.c:220 +#: gst/gsttaglist.c:232 msgid "codec" msgstr "" -#: gst/gsttaglist.c:221 +#: gst/gsttaglist.c:233 msgid "codec the data is stored in" msgstr "" -#: gst/gsttaglist.c:224 +#: gst/gsttaglist.c:236 msgid "video codec" msgstr "" -#: gst/gsttaglist.c:224 +#: gst/gsttaglist.c:236 msgid "codec the video data is stored in" msgstr "" -#: gst/gsttaglist.c:227 +#: gst/gsttaglist.c:239 msgid "audio codec" msgstr "" -#: gst/gsttaglist.c:227 +#: gst/gsttaglist.c:239 msgid "codec the audio data is stored in" msgstr "" -#: gst/gsttaglist.c:230 +#: gst/gsttaglist.c:242 msgid "subtitle codec" msgstr "" -#: gst/gsttaglist.c:230 +#: gst/gsttaglist.c:242 msgid "codec the subtitle data is stored in" msgstr "" -#: gst/gsttaglist.c:232 +#: gst/gsttaglist.c:244 msgid "container format" msgstr "" -#: gst/gsttaglist.c:233 +#: gst/gsttaglist.c:245 msgid "container format the data is stored in" msgstr "" -#: gst/gsttaglist.c:235 +#: gst/gsttaglist.c:247 msgid "bitrate" msgstr "" -#: gst/gsttaglist.c:235 +#: gst/gsttaglist.c:247 msgid "exact or average bitrate in bits/s" msgstr "" -#: gst/gsttaglist.c:237 +#: gst/gsttaglist.c:249 msgid "nominal bitrate" msgstr "" -#: gst/gsttaglist.c:237 +#: gst/gsttaglist.c:249 msgid "nominal bitrate in bits/s" msgstr "" -#: gst/gsttaglist.c:239 +#: gst/gsttaglist.c:251 msgid "minimum bitrate" msgstr "" -#: gst/gsttaglist.c:239 +#: gst/gsttaglist.c:251 msgid "minimum bitrate in bits/s" msgstr "" -#: gst/gsttaglist.c:241 +#: gst/gsttaglist.c:253 msgid "maximum bitrate" msgstr "" -#: gst/gsttaglist.c:241 +#: gst/gsttaglist.c:253 msgid "maximum bitrate in bits/s" msgstr "" -#: gst/gsttaglist.c:244 +#: gst/gsttaglist.c:256 msgid "encoder" msgstr "" -#: gst/gsttaglist.c:244 +#: gst/gsttaglist.c:256 msgid "encoder used to encode this stream" msgstr "" -#: gst/gsttaglist.c:247 +#: gst/gsttaglist.c:259 msgid "encoder version" msgstr "" -#: gst/gsttaglist.c:248 +#: gst/gsttaglist.c:260 msgid "version of the encoder used to encode this stream" msgstr "" -#: gst/gsttaglist.c:250 +#: gst/gsttaglist.c:262 msgid "serial" msgstr "" -#: gst/gsttaglist.c:250 +#: gst/gsttaglist.c:262 msgid "serial number of track" msgstr "" -#: gst/gsttaglist.c:252 +#: gst/gsttaglist.c:264 msgid "replaygain track gain" msgstr "" -#: gst/gsttaglist.c:252 +#: gst/gsttaglist.c:264 msgid "track gain in db" msgstr "" -#: gst/gsttaglist.c:254 +#: gst/gsttaglist.c:266 msgid "replaygain track peak" msgstr "" -#: gst/gsttaglist.c:254 +#: gst/gsttaglist.c:266 msgid "peak of the track" msgstr "" -#: gst/gsttaglist.c:256 +#: gst/gsttaglist.c:268 msgid "replaygain album gain" msgstr "" -#: gst/gsttaglist.c:256 +#: gst/gsttaglist.c:268 msgid "album gain in db" msgstr "" -#: gst/gsttaglist.c:258 +#: gst/gsttaglist.c:270 msgid "replaygain album peak" msgstr "" -#: gst/gsttaglist.c:258 +#: gst/gsttaglist.c:270 msgid "peak of the album" msgstr "" -#: gst/gsttaglist.c:260 +#: gst/gsttaglist.c:272 msgid "replaygain reference level" msgstr "" -#: gst/gsttaglist.c:261 +#: gst/gsttaglist.c:273 msgid "reference level of track and album gain values" msgstr "" -#: gst/gsttaglist.c:263 +#: gst/gsttaglist.c:275 msgid "language code" msgstr "" -#: gst/gsttaglist.c:264 +#: gst/gsttaglist.c:276 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2" msgstr "" -#: gst/gsttaglist.c:267 +#: gst/gsttaglist.c:279 msgid "language name" msgstr "" -#: gst/gsttaglist.c:268 +#: gst/gsttaglist.c:280 msgid "freeform name of the language this stream is in" msgstr "" -#: gst/gsttaglist.c:270 +#: gst/gsttaglist.c:282 msgid "image" msgstr "" -#: gst/gsttaglist.c:270 +#: gst/gsttaglist.c:282 msgid "image related to this stream" msgstr "" #. TRANSLATORS: 'preview image' = image that shows a preview of the full image -#: gst/gsttaglist.c:273 +#: gst/gsttaglist.c:286 msgid "preview image" msgstr "" -#: gst/gsttaglist.c:273 +#: gst/gsttaglist.c:286 msgid "preview image related to this stream" msgstr "" -#: gst/gsttaglist.c:275 +#: gst/gsttaglist.c:288 msgid "attachment" msgstr "" -#: gst/gsttaglist.c:275 +#: gst/gsttaglist.c:288 msgid "file attached to this stream" msgstr "" -#: gst/gsttaglist.c:278 +#: gst/gsttaglist.c:291 msgid "beats per minute" msgstr "" -#: gst/gsttaglist.c:278 +#: gst/gsttaglist.c:292 msgid "number of beats per minute in audio" msgstr "" -#: gst/gsttaglist.c:280 +#: gst/gsttaglist.c:294 msgid "keywords" msgstr "" -#: gst/gsttaglist.c:280 +#: gst/gsttaglist.c:294 msgid "comma separated keywords describing the content" msgstr "" -#: gst/gsttaglist.c:283 +#: gst/gsttaglist.c:297 msgid "geo location name" msgstr "" -#: gst/gsttaglist.c:283 +#: gst/gsttaglist.c:298 msgid "" "human readable descriptive location of where the media has been recorded or " "produced" msgstr "" -#: gst/gsttaglist.c:286 +#: gst/gsttaglist.c:301 msgid "geo location latitude" msgstr "" -#: gst/gsttaglist.c:287 +#: gst/gsttaglist.c:302 msgid "" "geo latitude location of where the media has been recorded or produced in " "degrees according to WGS84 (zero at the equator, negative values for " "southern latitudes)" msgstr "" -#: gst/gsttaglist.c:291 +#: gst/gsttaglist.c:306 msgid "geo location longitude" msgstr "" -#: gst/gsttaglist.c:292 +#: gst/gsttaglist.c:307 msgid "" "geo longitude location of where the media has been recorded or produced in " "degrees according to WGS84 (zero at the prime meridian in Greenwich/UK, " "negative values for western longitudes)" msgstr "" -#: gst/gsttaglist.c:296 +#: gst/gsttaglist.c:311 msgid "geo location elevation" msgstr "" -#: gst/gsttaglist.c:297 +#: gst/gsttaglist.c:312 msgid "" "geo elevation of where the media has been recorded or produced in meters " "according to WGS84 (zero is average sea level)" msgstr "" -#: gst/gsttaglist.c:300 +#: gst/gsttaglist.c:315 msgid "geo location country" msgstr "" -#: gst/gsttaglist.c:301 +#: gst/gsttaglist.c:316 msgid "country (english name) where the media has been recorded or produced" msgstr "" -#: gst/gsttaglist.c:304 +#: gst/gsttaglist.c:319 msgid "geo location city" msgstr "" -#: gst/gsttaglist.c:305 +#: gst/gsttaglist.c:320 msgid "city (english name) where the media has been recorded or produced" msgstr "" -#: gst/gsttaglist.c:308 +#: gst/gsttaglist.c:323 msgid "geo location sublocation" msgstr "" -#: gst/gsttaglist.c:309 +#: gst/gsttaglist.c:324 msgid "" "a location whithin a city where the media has been produced or created (e.g. " "the neighborhood)" msgstr "" -#: gst/gsttaglist.c:312 +#: gst/gsttaglist.c:327 msgid "geo location horizontal error" msgstr "" -#: gst/gsttaglist.c:313 +#: gst/gsttaglist.c:328 msgid "expected error of the horizontal positioning measures (in meters)" msgstr "" -#: gst/gsttaglist.c:316 +#: gst/gsttaglist.c:331 msgid "geo location movement speed" msgstr "" -#: gst/gsttaglist.c:317 +#: gst/gsttaglist.c:332 msgid "" "movement speed of the capturing device while performing the capture in m/s" msgstr "" -#: gst/gsttaglist.c:320 +#: gst/gsttaglist.c:335 msgid "geo location movement direction" msgstr "" -#: gst/gsttaglist.c:321 +#: gst/gsttaglist.c:336 msgid "" "indicates the movement direction of the device performing the capture of a " "media. It is represented as degrees in floating point representation, 0 " "means the geographic north, and increases clockwise" msgstr "" -#: gst/gsttaglist.c:326 +#: gst/gsttaglist.c:341 msgid "geo location capture direction" msgstr "" -#: gst/gsttaglist.c:327 +#: gst/gsttaglist.c:342 msgid "" "indicates the direction the device is pointing to when capturing a media. " "It is represented as degrees in floating point representation, 0 means the " @@ -854,117 +854,117 @@ msgid "" msgstr "" #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here -#: gst/gsttaglist.c:333 +#: gst/gsttaglist.c:348 msgid "show name" msgstr "" -#: gst/gsttaglist.c:334 +#: gst/gsttaglist.c:349 msgid "Name of the tv/podcast/series show the media is from" msgstr "" #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here -#: gst/gsttaglist.c:338 +#: gst/gsttaglist.c:354 msgid "show sortname" msgstr "" -#: gst/gsttaglist.c:339 +#: gst/gsttaglist.c:355 msgid "" "Name of the tv/podcast/series show the media is from, for sorting purposes" msgstr "" -#: gst/gsttaglist.c:342 +#: gst/gsttaglist.c:358 msgid "episode number" msgstr "" -#: gst/gsttaglist.c:343 +#: gst/gsttaglist.c:359 msgid "The episode number in the season the media is part of" msgstr "" -#: gst/gsttaglist.c:346 +#: gst/gsttaglist.c:362 msgid "season number" msgstr "" -#: gst/gsttaglist.c:347 +#: gst/gsttaglist.c:363 msgid "The season number of the show the media is part of" msgstr "" -#: gst/gsttaglist.c:350 +#: gst/gsttaglist.c:366 msgid "lyrics" msgstr "" -#: gst/gsttaglist.c:350 +#: gst/gsttaglist.c:366 msgid "The lyrics of the media, commonly used for songs" msgstr "" -#: gst/gsttaglist.c:353 +#: gst/gsttaglist.c:369 msgid "composer sortname" msgstr "" -#: gst/gsttaglist.c:354 +#: gst/gsttaglist.c:370 msgid "person(s) who composed the recording, for sorting purposes" msgstr "" -#: gst/gsttaglist.c:356 +#: gst/gsttaglist.c:372 msgid "grouping" msgstr "" -#: gst/gsttaglist.c:357 +#: gst/gsttaglist.c:373 msgid "" "Groups related media that spans multiple tracks, like the different pieces " "of a concerto. It is a higher level than a track, but lower than an album" msgstr "" -#: gst/gsttaglist.c:361 +#: gst/gsttaglist.c:377 msgid "user rating" msgstr "" -#: gst/gsttaglist.c:362 +#: gst/gsttaglist.c:378 msgid "" "Rating attributed by a user. The higher the rank, the more the user likes " "this media" msgstr "" -#: gst/gsttaglist.c:365 +#: gst/gsttaglist.c:381 msgid "device manufacturer" msgstr "" -#: gst/gsttaglist.c:366 +#: gst/gsttaglist.c:382 msgid "Manufacturer of the device used to create this media" msgstr "" -#: gst/gsttaglist.c:368 +#: gst/gsttaglist.c:384 msgid "device model" msgstr "" -#: gst/gsttaglist.c:369 +#: gst/gsttaglist.c:385 msgid "Model of the device used to create this media" msgstr "" -#: gst/gsttaglist.c:371 +#: gst/gsttaglist.c:387 msgid "application name" msgstr "" -#: gst/gsttaglist.c:371 +#: gst/gsttaglist.c:388 msgid "Application used to create the media" msgstr "" -#: gst/gsttaglist.c:373 +#: gst/gsttaglist.c:390 msgid "application data" msgstr "" -#: gst/gsttaglist.c:374 +#: gst/gsttaglist.c:391 msgid "Arbitrary application data to be serialized into the media" msgstr "" -#: gst/gsttaglist.c:376 +#: gst/gsttaglist.c:393 msgid "image orientation" msgstr "" -#: gst/gsttaglist.c:377 +#: gst/gsttaglist.c:394 msgid "How the image should be rotated or flipped before display" msgstr "" -#: gst/gsttaglist.c:416 +#: gst/gsttaglist.c:433 msgid ", " msgstr "" @@ -1048,25 +1048,25 @@ msgstr "" msgid "empty pipeline not allowed" msgstr "" -#: libs/gst/base/gstbasesrc.c:2367 +#: libs/gst/base/gstbasesrc.c:2365 msgid "Internal clock error." msgstr "" -#: libs/gst/base/gstbasesrc.c:2709 libs/gst/base/gstbasesrc.c:2718 -#: libs/gst/base/gstbasesink.c:3715 plugins/elements/gstqueue.c:1175 -#: plugins/elements/gstqueue2.c:2577 +#: libs/gst/base/gstbasesrc.c:2707 libs/gst/base/gstbasesrc.c:2716 +#: libs/gst/base/gstbasesink.c:3748 plugins/elements/gstqueue.c:1175 +#: plugins/elements/gstqueue2.c:2550 msgid "Internal data flow error." msgstr "" -#: libs/gst/base/gstbasesink.c:2697 +#: libs/gst/base/gstbasesink.c:2708 msgid "A lot of buffers are being dropped." msgstr "" -#: libs/gst/base/gstbasesink.c:3104 +#: libs/gst/base/gstbasesink.c:3115 msgid "Internal data flow problem." msgstr "" -#: libs/gst/base/gstbasesink.c:3705 +#: libs/gst/base/gstbasesink.c:3738 msgid "Internal data stream error." msgstr "" @@ -1173,79 +1173,79 @@ msgstr "" msgid "Stream contains no data." msgstr "" -#: tools/gst-inspect.c:250 +#: tools/gst-inspect.c:248 msgid "Implemented Interfaces:\n" msgstr "" -#: tools/gst-inspect.c:336 +#: tools/gst-inspect.c:334 msgid "readable" msgstr "" -#: tools/gst-inspect.c:345 +#: tools/gst-inspect.c:343 msgid "writable" msgstr "" -#: tools/gst-inspect.c:349 +#: tools/gst-inspect.c:347 msgid "controllable" msgstr "" -#: tools/gst-inspect.c:353 +#: tools/gst-inspect.c:351 msgid "changeable in NULL, READY, PAUSED or PLAYING state" msgstr "" -#: tools/gst-inspect.c:355 +#: tools/gst-inspect.c:353 msgid "changeable only in NULL, READY or PAUSED state" msgstr "" -#: tools/gst-inspect.c:357 +#: tools/gst-inspect.c:355 msgid "changeable only in NULL or READY state" msgstr "" -#: tools/gst-inspect.c:958 +#: tools/gst-inspect.c:956 msgid "Blacklisted files:" msgstr "" -#: tools/gst-inspect.c:970 tools/gst-inspect.c:1067 +#: tools/gst-inspect.c:968 tools/gst-inspect.c:1065 msgid "Total count: " msgstr "" -#: tools/gst-inspect.c:971 +#: tools/gst-inspect.c:969 #, c-format msgid "%d blacklisted file" msgid_plural "%d blacklisted files" msgstr[0] "" msgstr[1] "" -#: tools/gst-inspect.c:1068 +#: tools/gst-inspect.c:1066 #, c-format msgid "%d plugin" msgid_plural "%d plugins" msgstr[0] "" msgstr[1] "" -#: tools/gst-inspect.c:1071 +#: tools/gst-inspect.c:1069 #, c-format msgid "%d blacklist entry" msgid_plural "%d blacklist entries" msgstr[0] "" msgstr[1] "" -#: tools/gst-inspect.c:1076 +#: tools/gst-inspect.c:1074 #, c-format msgid "%d feature" msgid_plural "%d features" msgstr[0] "" msgstr[1] "" -#: tools/gst-inspect.c:1514 +#: tools/gst-inspect.c:1511 msgid "Print all elements" msgstr "" -#: tools/gst-inspect.c:1516 +#: tools/gst-inspect.c:1513 msgid "Print list of blacklisted files" msgstr "" -#: tools/gst-inspect.c:1518 +#: tools/gst-inspect.c:1515 msgid "" "Print a machine-parsable list of features the specified plugin or all " "plugins provide.\n" @@ -1253,20 +1253,20 @@ msgid "" "automatic plugin installation mechanisms" msgstr "" -#: tools/gst-inspect.c:1523 +#: tools/gst-inspect.c:1520 msgid "List the plugin contents" msgstr "" -#: tools/gst-inspect.c:1526 +#: tools/gst-inspect.c:1523 msgid "Print supported URI schemes, with the elements that implement them" msgstr "" -#: tools/gst-inspect.c:1627 +#: tools/gst-inspect.c:1624 #, c-format msgid "Could not load plugin file: %s\n" msgstr "" -#: tools/gst-inspect.c:1632 +#: tools/gst-inspect.c:1629 #, c-format msgid "No such element or plugin '%s'\n" msgstr "" @@ -1384,7 +1384,7 @@ msgid "Output tags (also known as metadata)" msgstr "" #: tools/gst-launch.c:912 -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" #: tools/gst-launch.c:914 @@ -1437,7 +1437,7 @@ msgstr "" msgid "ERROR: the 'pipeline' element wasn't found.\n" msgstr "" -#: tools/gst-launch.c:1047 tools/gst-launch.c:1123 +#: tools/gst-launch.c:1047 tools/gst-launch.c:1142 msgid "Setting pipeline to PAUSED ...\n" msgstr "" @@ -1469,34 +1469,42 @@ msgstr "" msgid "ERROR: pipeline doesn't want to play.\n" msgstr "" -#: tools/gst-launch.c:1103 +#: tools/gst-launch.c:1107 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" -#: tools/gst-launch.c:1106 +#: tools/gst-launch.c:1111 +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + +#: tools/gst-launch.c:1114 msgid "Waiting for EOS...\n" msgstr "" -#: tools/gst-launch.c:1111 +#: tools/gst-launch.c:1121 msgid "EOS received - stopping pipeline...\n" msgstr "" -#: tools/gst-launch.c:1113 +#: tools/gst-launch.c:1125 +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + +#: tools/gst-launch.c:1129 msgid "An error happened while waiting for EOS\n" msgstr "" -#: tools/gst-launch.c:1120 +#: tools/gst-launch.c:1139 msgid "Execution ended after %" msgstr "" -#: tools/gst-launch.c:1131 +#: tools/gst-launch.c:1150 msgid "Setting pipeline to READY ...\n" msgstr "" -#: tools/gst-launch.c:1143 +#: tools/gst-launch.c:1162 msgid "Setting pipeline to NULL ...\n" msgstr "" -#: tools/gst-launch.c:1148 +#: tools/gst-launch.c:1167 msgid "Freeing pipeline ...\n" msgstr "" diff --git a/po/hu.gmo b/po/hu.gmo index c1d279c..ff3763d 100644 Binary files a/po/hu.gmo and b/po/hu.gmo differ diff --git a/po/hu.po b/po/hu.po index cb710c0..a313e6f 100644 --- a/po/hu.po +++ b/po/hu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-11-01 13:39+0100\n" "Last-Translator: Gabor Kelemen \n" "Language-Team: Hungarian \n" @@ -1121,7 +1121,7 @@ msgstr "nincs „%s” elem" msgid "Output tags (also known as metadata)" msgstr "Kimeneti címkék (metaadatok)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1189,12 +1189,20 @@ msgstr "HIBA: az adatcsatorna nem akar lejátszani.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "Leállításkor EOS engedélyezve – EOS kényszerítése az adatcsatornára\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "Leállításkor EOS engedélyezve – EOS kényszerítése az adatcsatornára\n" + msgid "Waiting for EOS...\n" msgstr "Várakozás EOS-ra…\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS érkezett – adatcsatorna leállítása…\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Megszakítás: Adatcsatorna leállítása…\n" + msgid "An error happened while waiting for EOS\n" msgstr "Hiba történt az EOS-ra várakozáskor\n" diff --git a/po/id.gmo b/po/id.gmo index 1282282..3646226 100644 Binary files a/po/id.gmo and b/po/id.gmo differ diff --git a/po/id.po b/po/id.po index c8417cf..41fe05b 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2012-01-28 11:44+0700\n" "Last-Translator: Andhika Padmawan \n" "Language-Team: Indonesian \n" @@ -1122,7 +1122,7 @@ msgstr "tak ada elemen \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Tag keluaran (juga dikenal sebagai metadata)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1190,12 +1190,20 @@ msgstr "GALAT: baris pipa tidak ingin diputar.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS pada matikan diaktifkan -- Paksa EOS pada pemipaan\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS pada matikan diaktifkan -- Paksa EOS pada pemipaan\n" + msgid "Waiting for EOS...\n" msgstr "Menunggu untuk EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS diterima - menghentikan baris pipa...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interupsi: Menghentikan baris pipa ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Galat terjadi ketika menunggu EOS\n" diff --git a/po/it.gmo b/po/it.gmo index fbc027b..df678d7 100644 Binary files a/po/it.gmo and b/po/it.gmo differ diff --git a/po/it.po b/po/it.po index 86b1ace..43251d5 100644 --- a/po/it.po +++ b/po/it.po @@ -106,7 +106,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-10-25 10:03+0200\n" "Last-Translator: Luca Ferretti \n" "Language-Team: Italian \n" @@ -1299,7 +1299,7 @@ msgstr "nessun elemento «%s»" msgid "Output tags (also known as metadata)" msgstr "Stampa i tag (anche noti come metadati)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" # -v, --verbose @@ -1376,12 +1376,20 @@ msgstr "ERRORE: la pipeline non vuole riprodurre.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS all'arresto abilitato -- Forzato EOS sulla pipeline\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS all'arresto abilitato -- Forzato EOS sulla pipeline\n" + msgid "Waiting for EOS...\n" msgstr "In attesa di EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Ricevuto EOS - arresto della pipeline...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interrotto: arresto della pipeline ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Si è verificato un errore durante l'attesa di EOS\n" diff --git a/po/ja.gmo b/po/ja.gmo index 34c5221..7cbc23d 100644 Binary files a/po/ja.gmo and b/po/ja.gmo differ diff --git a/po/ja.po b/po/ja.po index 183808c..88425c2 100644 --- a/po/ja.po +++ b/po/ja.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.20.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2008-10-16 19:57+0900\n" "Last-Translator: Makoto Kato \n" "Language-Team: Japanese \n" @@ -1103,7 +1103,7 @@ msgstr "エレメント \"%s\" がありません" msgid "Output tags (also known as metadata)" msgstr "タグ (メタデータ) を出力する" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1172,6 +1172,9 @@ msgstr "" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" @@ -1179,6 +1182,10 @@ msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "割り込み: パイプラインを停止しています...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "割り込み: パイプラインを停止しています...\n" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/lt.gmo b/po/lt.gmo index d6865b6..6d3b5b9 100644 Binary files a/po/lt.gmo and b/po/lt.gmo differ diff --git a/po/lt.po b/po/lt.po index 428c2a1..e3fe79c 100644 --- a/po/lt.po +++ b/po/lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-07-16 00:50+0300\n" "Last-Translator: Žygimantas Beručka \n" "Language-Team: Lithuanian \n" @@ -1131,7 +1131,7 @@ msgstr "nėra elemento „%s“" msgid "Output tags (also known as metadata)" msgstr "Išvesti žymas (dar žinomas kaip metaduomenys)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1199,12 +1199,20 @@ msgstr "KLAIDA: konvejeris nepradeda groti.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "Įjungtas EOS išjungiant – priverstinai naudojama EOS konvejeryje\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "Įjungtas EOS išjungiant – priverstinai naudojama EOS konvejeryje\n" + msgid "Waiting for EOS...\n" msgstr "Laukiama EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS gautas – stabdomas konvejeris...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Pertraukimas: stabdomas konvejeris...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Įvyko klaida laukiant EOS\n" diff --git a/po/nb.gmo b/po/nb.gmo index 7602a13..f0b9e74 100644 Binary files a/po/nb.gmo and b/po/nb.gmo differ diff --git a/po/nb.po b/po/nb.po index cd8bb27..eb3fcc9 100644 --- a/po/nb.po +++ b/po/nb.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-10-24 21:36+0200\n" "Last-Translator: Kjartan Maraas \n" "Language-Team: Norwegian Bokmaal \n" @@ -1090,7 +1090,7 @@ msgstr "ingen element «%s»" msgid "Output tags (also known as metadata)" msgstr "" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1158,12 +1158,18 @@ msgstr "" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/nl.gmo b/po/nl.gmo index 4cff0b7..344dc97 100644 Binary files a/po/nl.gmo and b/po/nl.gmo differ diff --git a/po/nl.po b/po/nl.po index 64eb2e0..11627b7 100644 --- a/po/nl.po +++ b/po/nl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-04-26 23:10+0200\n" "Last-Translator: Freek de Kruijf \n" "Language-Team: Dutch \n" @@ -1136,7 +1136,7 @@ msgstr "geen element \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Tags (ook bekend als metadata) weergeven" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1204,12 +1204,20 @@ msgstr "FOUT: pijplijn wil niet afspelen.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS bij afsluiten ingeschakeld -- Forceer een EOS op de pijplijn\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS bij afsluiten ingeschakeld -- Forceer een EOS op de pijplijn\n" + msgid "Waiting for EOS...\n" msgstr "Wacht op EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS ontvangen - pijplijn wordt gestopt...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interrupt: Pijplijn ingesteld op gestopt ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Er trad een fout op bij het wachten op EOS\n" diff --git a/po/pl.gmo b/po/pl.gmo index 8ffb6dd..bafe73a 100644 Binary files a/po/pl.gmo and b/po/pl.gmo differ diff --git a/po/pl.po b/po/pl.po index 56e76f7..29de711 100644 --- a/po/pl.po +++ b/po/pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-04-26 17:54+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" @@ -1132,7 +1132,7 @@ msgstr "brak elementu \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Wypisanie znaczników (znanych także jako metadane)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1200,12 +1200,20 @@ msgstr "BŁĄD: potok odmawia odtwarzania.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "Włączony EOS przy wyłączaniu - wymuszanie EOS w potoku\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "Włączony EOS przy wyłączaniu - wymuszanie EOS w potoku\n" + msgid "Waiting for EOS...\n" msgstr "Oczekiwanie na EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Otrzymano EOS - zatrzymywanie potoku...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Przerwanie: Zatrzymywanie potoku...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Wystąpił błąd w trakcie oczekiwania na EOS\n" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo index 24b28cc..c8404d8 100644 Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ diff --git a/po/pt_BR.po b/po/pt_BR.po index 9dbb9e4..2aab407 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.31.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-01-08 01:36-0300\n" "Last-Translator: Fabrício Godoy \n" "Language-Team: Brazilian Portuguese \n" @@ -1146,7 +1146,7 @@ msgstr "nenhum elemento \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Exibir etiquetas (metadados)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1219,12 +1219,22 @@ msgstr "" "Finalizar fluxo ao desligar habilitado -- Forçando finalização do fluxo na " "fila de processamento\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"Finalizar fluxo ao desligar habilitado -- Forçando finalização do fluxo na " +"fila de processamento\n" + msgid "Waiting for EOS...\n" msgstr "Esperando pelo final do fluxo...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Final do fluxo recebido - parando a fila de processamento...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Interrupção: Parando a fila de processamento...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Um erro ocorreu ao esperar pelo final do fluxo\n" diff --git a/po/ro.gmo b/po/ro.gmo index db42dee..82dff00 100644 Binary files a/po/ro.gmo and b/po/ro.gmo differ diff --git a/po/ro.po b/po/ro.po index 14941bb..d89e598 100644 --- a/po/ro.po +++ b/po/ro.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-08-16 01:10+0300\n" "Last-Translator: Lucian Adrian Grijincu \n" "Language-Team: Romanian \n" @@ -1150,7 +1150,7 @@ msgstr "niciun element „%s”" msgid "Output tags (also known as metadata)" msgstr "Marcaje de ieșire (cunoscute și ca „metadata”)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1218,12 +1218,20 @@ msgstr "EROARE: linia de asamblare nu vrea să redea.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS la închidere activat -- Se forțează EOS pe linia de asamblare\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS la închidere activat -- Se forțează EOS pe linia de asamblare\n" + msgid "Waiting for EOS...\n" msgstr "Se așteaptă EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS primit - se oprește linia de asamblare...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Întrerupere: Se oprește linia de asamblare ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "A apărut o eroare în timp ce se aștepta EOS\n" diff --git a/po/ru.gmo b/po/ru.gmo index 01d76de..9a2467a 100644 Binary files a/po/ru.gmo and b/po/ru.gmo differ diff --git a/po/ru.po b/po/ru.po index ac6d4f0..d00d4de 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer-0.10.32.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-04-26 20:25+0400\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" @@ -1131,7 +1131,7 @@ msgstr "элемент «%s» не найден" msgid "Output tags (also known as metadata)" msgstr "Выводить теги (метаданные)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1199,12 +1199,20 @@ msgstr "ОШИБКА: конвейер не хочет воспроизводи msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "Включён EOS при закрытии -- Выдача EOS в конвейер\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "Включён EOS при закрытии -- Выдача EOS в конвейер\n" + msgid "Waiting for EOS...\n" msgstr "Ожидание EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Получен EOS - остановка конвейера...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Прерывание: Остановка конвейера...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Во время ожидания EOS произошла ошибка\n" diff --git a/po/rw.gmo b/po/rw.gmo index 3fcef6a..d885b61 100644 Binary files a/po/rw.gmo and b/po/rw.gmo differ diff --git a/po/rw.po b/po/rw.po index 7efa344..25bd509 100644 --- a/po/rw.po +++ b/po/rw.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.8\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2005-04-04 10:55-0700\n" "Last-Translator: Steven Michael Murphy \n" "Language-Team: Kinyarwanda \n" @@ -1304,7 +1304,7 @@ msgstr "Oya Ikigize:" msgid "Output tags (also known as metadata)" msgstr "Nka" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" #, fuzzy @@ -1381,12 +1381,18 @@ msgstr "Kuri Gukina" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/sk.gmo b/po/sk.gmo index 44679e8..50b9c95 100644 Binary files a/po/sk.gmo and b/po/sk.gmo differ diff --git a/po/sk.po b/po/sk.po index bb0aed0..f7382b0 100644 --- a/po/sk.po +++ b/po/sk.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.30.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-11-08 16:13+0100\n" "Last-Translator: Peter Tuhársky \n" "Language-Team: Slovak \n" @@ -1144,7 +1144,7 @@ msgstr "prvok \"%s\" neexistuje" msgid "Output tags (also known as metadata)" msgstr "Vypísať značky (známe tiež ako metadáta)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1215,12 +1215,20 @@ msgstr "CHYBA: Rúra nechce hrať.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS pri vypnutí je povolený -- Vynucujem EOS pre rúru\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS pri vypnutí je povolený -- Vynucujem EOS pre rúru\n" + msgid "Waiting for EOS...\n" msgstr "Čakám na EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Prijatý EOS - zastavujem rúru ...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Prerušenie: Zastavujem rúru ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Počas čakania na EOS nastala chyba\n" diff --git a/po/sl.gmo b/po/sl.gmo index df524c0..20b25c6 100644 Binary files a/po/sl.gmo and b/po/sl.gmo differ diff --git a/po/sl.po b/po/sl.po index cbbb25d..aeb5819 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2012-03-01 14:05+0100\n" "Last-Translator: Klemen Košir \n" "Language-Team: Slovenian \n" @@ -1134,7 +1134,7 @@ msgstr "Manjkajoči element: %s\n" msgid "Output tags (also known as metadata)" msgstr "Izhodne oznake (znane tudi kot metapodatki)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1202,12 +1202,20 @@ msgstr "NAPAKA: vsebine cevovoda ni mogoče predvajati.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS ob izklopu je omogočen -- vsiljen EOS vsebine cevovoda\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS ob izklopu je omogočen -- vsiljen EOS vsebine cevovoda\n" + msgid "Waiting for EOS...\n" msgstr "Čakanje na EOS ...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Prejet EOS - zaustavljanje cevovoda ...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Prekinitev: zaustavljanje cevovoda ... \n" + msgid "An error happened while waiting for EOS\n" msgstr "Med čakanjem na EOS je prišlo do napake\n" diff --git a/po/sq.gmo b/po/sq.gmo index 314517e..f0c7c86 100644 Binary files a/po/sq.gmo and b/po/sq.gmo differ diff --git a/po/sq.po b/po/sq.po index ce68d23..727a55c 100644 --- a/po/sq.po +++ b/po/sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.4\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2004-08-07 23:46+0200\n" "Last-Translator: Laurent Dhima \n" "Language-Team: Albanian \n" @@ -1138,7 +1138,7 @@ msgstr "asnjë element \"%s\"" msgid "Output tags (also known as metadata)" msgstr "Tags e output (njohur gjithashtu si metadata)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1209,12 +1209,18 @@ msgstr "GABIM: pipeline nuk dëshiron të luajë.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/sr.gmo b/po/sr.gmo index 521cacc..b6d1d6d 100644 Binary files a/po/sr.gmo and b/po/sr.gmo differ diff --git a/po/sr.po b/po/sr.po index 1473a33..69356e4 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-12-05 10:40+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian \n" @@ -1134,7 +1134,7 @@ msgstr "нема елемента „%s“" msgid "Output tags (also known as metadata)" msgstr "Излазне ознаке (такође познате и као метаподаци)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1202,12 +1202,20 @@ msgstr "ГРЕШКА: спојка низа не жели да пусти.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "ЕОС је укључен приликом гашења —— Присиљавам ЕОС на спојци низа\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "ЕОС је укључен приликом гашења —— Присиљавам ЕОС на спојци низа\n" + msgid "Waiting for EOS...\n" msgstr "Чекам на ЕОС...\n" msgid "EOS received - stopping pipeline...\n" msgstr "ЕОС је примљен — заустављам спојку низа…\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Прекид: Заустављам спојку низа ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Дошло је до грешке док сам чекао на ЕОС\n" diff --git a/po/sv.gmo b/po/sv.gmo index 847b09f..d740a96 100644 Binary files a/po/sv.gmo and b/po/sv.gmo differ diff --git a/po/sv.po b/po/sv.po index 74743dc..2ce557d 100644 --- a/po/sv.po +++ b/po/sv.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.31.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-01-09 19:46+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" @@ -1140,7 +1140,7 @@ msgstr "inget \"%s\"-element" msgid "Output tags (also known as metadata)" msgstr "Utmatningstaggar (även känt som metadata)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1209,6 +1209,10 @@ msgstr "FEL: rörledningen vill inte spela.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "EOS vid avständning aktiverad -- Tvingar EOS på rörledningen\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "EOS vid avständning aktiverad -- Tvingar EOS på rörledningen\n" + # EOS = End Of Stream msgid "Waiting for EOS...\n" msgstr "Väntar på EOS...\n" @@ -1216,6 +1220,10 @@ msgstr "Väntar på EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "EOS togs emot - stoppar rörledning...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Avbrott: Stoppar rörledningen ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Ett fel inträffade vid väntan på EOS\n" diff --git a/po/tr.gmo b/po/tr.gmo index 79ef04d..37eedd4 100644 Binary files a/po/tr.gmo and b/po/tr.gmo differ diff --git a/po/tr.po b/po/tr.po index 53658f8..4410c95 100644 --- a/po/tr.po +++ b/po/tr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2004-04-03 03:14+0300\n" "Last-Translator: Baris Cicek \n" "Language-Team: Turkish \n" @@ -1139,7 +1139,7 @@ msgstr "\"%s\" öğesi yok" msgid "Output tags (also known as metadata)" msgstr "Çıktı etiketleri (metadata olarak da bilinir)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1210,12 +1210,18 @@ msgstr "HATA: boruhattı çalmak istemiyor.\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/po/uk.gmo b/po/uk.gmo index e97062e..ccb390c 100644 Binary files a/po/uk.gmo and b/po/uk.gmo differ diff --git a/po/uk.po b/po/uk.po index 5ff70f9..dedf3a1 100644 --- 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-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2011-04-30 20:26+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" @@ -1128,7 +1128,7 @@ msgstr "немає елемента «%s»" msgid "Output tags (also known as metadata)" msgstr "Вивести мітки (також відомі як метадані)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1196,12 +1196,20 @@ msgstr "ПОМИЛКА: канал не може почати відтворен msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "Увімкнено EOS при завершенні - Примусове виведення EOS до каналу\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "Увімкнено EOS при завершенні - Примусове виведення EOS до каналу\n" + msgid "Waiting for EOS...\n" msgstr "Очікування на EOS...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Отримано EOS - завершення роботи каналу...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Переривання: зупинка каналу...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Під час очікування на EOS сталася помилка\n" diff --git a/po/vi.gmo b/po/vi.gmo index a2b8fa4..d6f7684 100644 Binary files a/po/vi.gmo and b/po/vi.gmo differ diff --git a/po/vi.po b/po/vi.po index 34830f6..31951b1 100644 --- a/po/vi.po +++ b/po/vi.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.29.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-10-03 19:09+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" @@ -1129,7 +1129,7 @@ msgstr "không có yếu tố « %s »" msgid "Output tags (also known as metadata)" msgstr "Thể xuất (cũng được biết là siêu dữ liệu)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1199,12 +1199,22 @@ msgstr "" "Kết thúc luồng khi tắt phần mềm vẫn còn hoạt động thì đang ép buộc kết thúc " "luồng trên đường ống\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" +"Kết thúc luồng khi tắt phần mềm vẫn còn hoạt động thì đang ép buộc kết thúc " +"luồng trên đường ống\n" + msgid "Waiting for EOS...\n" msgstr "Đang đợi kết thúc luồng...\n" msgid "EOS received - stopping pipeline...\n" msgstr "Nhận được tín hiệu kết thúc luồng: đang ngừng chạy đường ống ...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "Ngắt: đang ngừng chạy đường ống ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "Gặp lỗi trong khi đợi kết thúc luồng\n" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo index 0639218..00cd886 100644 Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ diff --git a/po/zh_CN.po b/po/zh_CN.po index 5a42a6f..687551a 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.10.25.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2010-02-02 18:58+0800\n" "Last-Translator: Ji ZhengYu \n" "Language-Team: Chinese (simplified) \n" @@ -1101,7 +1101,7 @@ msgstr "无组件“%s”" msgid "Output tags (also known as metadata)" msgstr "输出标识(也可认为是元数据)" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1170,12 +1170,20 @@ msgstr "错误: 管道不想播放。\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "允许关闭时发出 EOS 信号 —— 强制对管道发出 EOS 信号\n" +#, fuzzy +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "允许关闭时发出 EOS 信号 —— 强制对管道发出 EOS 信号\n" + msgid "Waiting for EOS...\n" msgstr "等待 EOS 信号...\n" msgid "EOS received - stopping pipeline...\n" msgstr "收到 EOS 信号 - 中止管道 ...\n" +#, fuzzy +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "中断: 中止管道 ...\n" + msgid "An error happened while waiting for EOS\n" msgstr "等待 EOS 信号时出现一个错误\n" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo index 17b7fdc..f25a1bf 100644 Binary files a/po/zh_TW.gmo and b/po/zh_TW.gmo differ diff --git a/po/zh_TW.po b/po/zh_TW.po index af719f3..cec0e49 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gstreamer 0.8.8\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-05-13 15:53+0200\n" +"POT-Creation-Date: 2012-06-07 15:42+0200\n" "PO-Revision-Date: 2005-04-27 14:55+0800\n" "Last-Translator: Abel Cheung \n" "Language-Team: Chinese (traditional) \n" @@ -1117,7 +1117,7 @@ msgstr "“%s” 元件不存在" msgid "Output tags (also known as metadata)" msgstr "" -msgid "Ouput TOC (chapters and editions)" +msgid "Output TOC (chapters and editions)" msgstr "" msgid "Output status information and property notifications" @@ -1188,12 +1188,18 @@ msgstr "錯誤:管線無法執行。\n" msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n" msgstr "" +msgid "EOS on shutdown enabled -- waiting for EOS after Error\n" +msgstr "" + msgid "Waiting for EOS...\n" msgstr "" msgid "EOS received - stopping pipeline...\n" msgstr "" +msgid "Interrupt while waiting for EOS - stopping pipeline...\n" +msgstr "" + msgid "An error happened while waiting for EOS\n" msgstr "" diff --git a/tests/Makefile.in b/tests/Makefile.in index ab64603..48f1506 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = tests DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -256,6 +257,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -408,7 +413,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/benchmarks/Makefile.in b/tests/benchmarks/Makefile.in index 17b0c45..c4c72ad 100644 --- a/tests/benchmarks/Makefile.in +++ b/tests/benchmarks/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = caps$(EXEEXT) capsnego$(EXEEXT) complexity$(EXEEXT) \ controller$(EXEEXT) init$(EXEEXT) mass-elements$(EXEEXT) \ gstpollstress$(EXEEXT) gstclockstress$(EXEEXT) \ @@ -293,6 +294,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -445,7 +450,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in index b261337..83d9d13 100644 --- a/tests/check/Makefile.in +++ b/tests/check/Makefile.in @@ -52,6 +52,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ 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) \ @@ -854,6 +855,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -1006,7 +1011,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/check/elements/funnel.c b/tests/check/elements/funnel.c index 3a4ed01..3aaff1a 100644 --- a/tests/check/elements/funnel.c +++ b/tests/check/elements/funnel.c @@ -93,10 +93,10 @@ release_test_objects (struct TestData *td) GST_STATE_CHANGE_SUCCESS); gst_object_unref (td->funnelsrc); - gst_object_unref (td->funnelsink11); gst_element_release_request_pad (td->funnel, td->funnelsink11); - gst_object_unref (td->funnelsink22); + gst_object_unref (td->funnelsink11); gst_element_release_request_pad (td->funnel, td->funnelsink22); + gst_object_unref (td->funnelsink22); gst_caps_unref (td->mycaps); gst_object_unref (td->funnel); @@ -150,6 +150,87 @@ GST_START_TEST (test_funnel_simple) GST_END_TEST; +guint num_eos = 0; + +static gboolean +eos_event_func (GstPad * pad, GstObject * parent, GstEvent * event) +{ + if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) + ++num_eos; + + return gst_pad_event_default (pad, parent, event); +} + +GST_START_TEST (test_funnel_eos) +{ + struct TestData td; + + setup_test_objects (&td, chain_ok); + + num_eos = 0; + bufcount = 0; + + gst_pad_set_event_function (td.mysink, eos_event_func); + + fail_unless (gst_pad_push (td.mysrc1, gst_buffer_new ()) == GST_FLOW_OK); + fail_unless (gst_pad_push (td.mysrc2, gst_buffer_new ()) == GST_FLOW_OK); + + fail_unless (bufcount == 2); + + fail_unless (gst_pad_push_event (td.mysrc1, gst_event_new_eos ())); + fail_unless (num_eos == 0); + + fail_unless (gst_pad_push (td.mysrc1, gst_buffer_new ()) == GST_FLOW_EOS); + fail_unless (gst_pad_push (td.mysrc2, gst_buffer_new ()) == GST_FLOW_OK); + + fail_unless (bufcount == 3); + + fail_unless (gst_pad_push_event (td.mysrc2, gst_event_new_eos ())); + fail_unless (num_eos == 1); + + fail_unless (gst_pad_push (td.mysrc1, gst_buffer_new ()) == GST_FLOW_EOS); + fail_unless (gst_pad_push (td.mysrc2, gst_buffer_new ()) == GST_FLOW_EOS); + + fail_unless (bufcount == 3); + + fail_unless (gst_pad_push_event (td.mysrc1, gst_event_new_flush_start ())); + fail_unless (gst_pad_push_event (td.mysrc1, gst_event_new_flush_stop (TRUE))); + + fail_unless (gst_pad_push (td.mysrc1, gst_buffer_new ()) == GST_FLOW_OK); + fail_unless (gst_pad_push (td.mysrc2, gst_buffer_new ()) == GST_FLOW_EOS); + + fail_unless (bufcount == 4); + + fail_unless (gst_pad_unlink (td.mysrc1, td.funnelsink11)); + gst_element_release_request_pad (td.funnel, td.funnelsink11); + gst_object_unref (td.funnelsink11); + fail_unless (num_eos == 2); + + td.funnelsink11 = gst_element_get_request_pad (td.funnel, "sink_11"); + fail_unless (td.funnelsink11 != NULL); + fail_unless (!strcmp (GST_OBJECT_NAME (td.funnelsink11), "sink_11")); + + fail_unless (GST_PAD_LINK_SUCCESSFUL (gst_pad_link (td.mysrc1, + td.funnelsink11))); + + /* This will fail because everything is EOS already */ + fail_if (gst_pad_push_event (td.mysrc1, gst_event_new_eos ())); + fail_unless (num_eos == 2); + + fail_unless (gst_pad_unlink (td.mysrc1, td.funnelsink11)); + gst_element_release_request_pad (td.funnel, td.funnelsink11); + gst_object_unref (td.funnelsink11); + fail_unless (num_eos == 2); + + td.funnelsink11 = gst_element_get_request_pad (td.funnel, "sink_11"); + fail_unless (td.funnelsink11 != NULL); + fail_unless (!strcmp (GST_OBJECT_NAME (td.funnelsink11), "sink_11")); + + release_test_objects (&td); +} + +GST_END_TEST; + static Suite * funnel_suite (void) { @@ -163,6 +244,7 @@ funnel_suite (void) tc_chain = tcase_create ("funnel simple"); tcase_add_test (tc_chain, test_funnel_simple); + tcase_add_test (tc_chain, test_funnel_eos); suite_add_tcase (s, tc_chain); return s; diff --git a/tests/check/elements/valve.c b/tests/check/elements/valve.c index 932687c..417dae1 100644 --- a/tests/check/elements/valve.c +++ b/tests/check/elements/valve.c @@ -67,9 +67,9 @@ GST_START_TEST (test_valve_basic) fail_unless (gst_pad_push_event (src, gst_event_new_eos ()) == TRUE); fail_unless (event_received == TRUE); - fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_OK); - fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_OK); - fail_unless (g_list_length (buffers) == 2); + fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_EOS); + fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_EOS); + fail_unless (buffers == NULL); caps = gst_pad_query_caps (src, NULL); templ_caps = gst_pad_get_pad_template_caps (src); fail_unless (caps && gst_caps_is_equal (caps, templ_caps)); @@ -77,13 +77,16 @@ GST_START_TEST (test_valve_basic) gst_caps_unref (caps); gst_check_drop_buffers (); + fail_unless (gst_pad_push_event (src, gst_event_new_flush_start ()) == TRUE); + fail_unless (gst_pad_push_event (src, + gst_event_new_flush_stop (TRUE)) == TRUE); event_received = buffer_allocated = FALSE; g_object_set (valve, "drop", TRUE, NULL); fail_unless (gst_pad_push_event (src, gst_event_new_eos ()) == TRUE); fail_unless (event_received == FALSE); - fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_OK); - fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_OK); + fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_EOS); + fail_unless (gst_pad_push (src, gst_buffer_new ()) == GST_FLOW_EOS); fail_unless (buffers == NULL); caps = gst_pad_query_caps (src, NULL); templ_caps = gst_pad_get_pad_template_caps (src); diff --git a/tests/check/gst/gstbin.c b/tests/check/gst/gstbin.c index b028958..7535945 100644 --- a/tests/check/gst/gstbin.c +++ b/tests/check/gst/gstbin.c @@ -1158,6 +1158,117 @@ GST_START_TEST (test_many_bins) GST_END_TEST; +static GstPadProbeReturn +fakesrc_pad_blocked_cb (GstPad * pad, GstPadProbeInfo * info, void *arg) +{ + GstPipeline *pipeline = (GstPipeline *) arg; + GstElement *src, *sink; + + src = gst_bin_get_by_name (GST_BIN (pipeline), "fakesrc"); + fail_unless (src != NULL, "Could not get fakesrc"); + + sink = gst_element_factory_make ("fakesink", "fakesink"); + fail_unless (sink != NULL, "Could not create fakesink"); + + g_object_set (sink, "state-error", 1, NULL); + gst_bin_add (GST_BIN (pipeline), sink); + + gst_element_link (src, sink); + gst_element_sync_state_with_parent (sink); + gst_object_unref (src); + + return GST_PAD_PROBE_REMOVE; +} + +GST_START_TEST (test_state_failure_unref) +{ + GstElement *src, *pipeline; + GstPad *srcpad; + GstBus *bus; + GstStateChangeReturn ret; + GstMessage *msg; + + pipeline = gst_pipeline_new (NULL); + fail_unless (pipeline != NULL, "Could not create pipeline"); + + src = gst_element_factory_make ("fakesrc", "fakesrc"); + fail_unless (src != NULL, "Could not create fakesrc"); + + srcpad = gst_element_get_static_pad (src, "src"); + fail_unless (srcpad != NULL, "Could not get fakesrc srcpad"); + + gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, + fakesrc_pad_blocked_cb, pipeline, NULL); + gst_object_unref (srcpad); + + gst_bin_add (GST_BIN (pipeline), src); + + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + fail_unless (bus != NULL, "Could not get bus"); + + gst_element_set_state (pipeline, GST_STATE_PLAYING); + + /* Wait for an error message from our fakesink (added from the + pad block callback). */ + msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, GST_SECOND); + fail_if (msg == NULL, "No error message within 1 second"); + gst_message_unref (msg); + + /* Check that after this failure, we can still stop, and then unref, the + pipeline. This should always be possible. */ + ret = gst_element_set_state (pipeline, GST_STATE_NULL); + fail_unless (ret == GST_STATE_CHANGE_SUCCESS, "downward state change failed"); + + gst_object_unref (bus); + gst_object_unref (pipeline); +} + +GST_END_TEST; + +static void +on_sync_bus_error (GstBus * bus, GstMessage * msg) +{ + fail_if (msg != NULL); +} + +GST_START_TEST (test_state_change_skip) +{ + GstElement *sink, *pipeline; + GstStateChangeReturn ret; + GstBus *bus; + + pipeline = gst_pipeline_new (NULL); + fail_unless (pipeline != NULL, "Could not create pipeline"); + + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + fail_unless (bus != NULL, "Could not get bus"); + + /* no errors */ + gst_bus_enable_sync_message_emission (bus); + g_signal_connect (bus, "sync-message::error", (GCallback) on_sync_bus_error, + NULL); + + sink = gst_element_factory_make ("fakesink", "fakesink"); + fail_unless (sink != NULL, "Could not create fakesink"); + gst_element_set_state (sink, GST_STATE_PAUSED); + + g_object_set (sink, "state-error", 5, NULL); + + gst_bin_add (GST_BIN (pipeline), sink); + gst_element_set_state (pipeline, GST_STATE_PLAYING); + + g_object_set (sink, "state-error", 0, NULL); + + /* Check that after this failure, we can still stop, and then unref, the + pipeline. This should always be possible. */ + ret = gst_element_set_state (pipeline, GST_STATE_NULL); + fail_unless (ret == GST_STATE_CHANGE_SUCCESS, "downward state change failed"); + + gst_object_unref (pipeline); +} + +GST_END_TEST; + static Suite * gst_bin_suite (void) { @@ -1181,6 +1292,8 @@ gst_bin_suite (void) tcase_add_test (tc_chain, test_iterate_sorted); tcase_add_test (tc_chain, test_link_structure_change); tcase_add_test (tc_chain, test_state_failure_remove); + tcase_add_test (tc_chain, test_state_failure_unref); + tcase_add_test (tc_chain, test_state_change_skip); /* fails on OSX build bot for some reason, and is a bit silly anyway */ if (0) diff --git a/tests/check/gst/gstelementfactory.c b/tests/check/gst/gstelementfactory.c index cd57387..52a668f 100644 --- a/tests/check/gst/gstelementfactory.c +++ b/tests/check/gst/gstelementfactory.c @@ -18,6 +18,7 @@ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ +#include "../../gst/gst_private.h" #include diff --git a/tests/check/gst/gstevent.c b/tests/check/gst/gstevent.c index 173bce1..b16b023 100644 --- a/tests/check/gst/gstevent.c +++ b/tests/check/gst/gstevent.c @@ -185,7 +185,7 @@ GST_START_TEST (create_events) GstTagList *taglist = gst_tag_list_new_empty (); GstTagList *tl2 = NULL; - event = gst_event_new_tag (taglist); + event = gst_event_new_tag ("test", taglist); fail_if (taglist == NULL); fail_if (event == NULL); fail_unless (GST_EVENT_TYPE (event) == GST_EVENT_TAG); diff --git a/tests/check/gst/gstmessage.c b/tests/check/gst/gstmessage.c index 91f4e38..deea587 100644 --- a/tests/check/gst/gstmessage.c +++ b/tests/check/gst/gstmessage.c @@ -113,7 +113,7 @@ GST_START_TEST (test_parsing) fail_if (tag == NULL); /* FIXME, check the actual tags */ gst_message_unref (message); - gst_tag_list_free (tag); + gst_tag_list_unref (tag); } /* GST_MESSAGE_BUFFERING */ { diff --git a/tests/check/gst/gstplugin.c b/tests/check/gst/gstplugin.c index 0824b06..c4c3395 100644 --- a/tests/check/gst/gstplugin.c +++ b/tests/check/gst/gstplugin.c @@ -161,12 +161,16 @@ GST_END_TEST; GST_START_TEST (test_find_feature) { GstPluginFeature *feature; + GstPlugin *plugin; feature = gst_registry_find_feature (gst_registry_get (), "identity", GST_TYPE_ELEMENT_FACTORY); fail_if (feature == NULL, "Failed to find identity element factory"); - fail_if (strcmp (feature->plugin_name, "coreelements"), - "Expected identity to be from coreelements plugin"); + + plugin = gst_plugin_feature_get_plugin (feature); + fail_unless (plugin != NULL); + fail_unless_equals_string (gst_plugin_get_name (plugin), "coreelements"); + gst_object_unref (plugin); fail_if (GST_OBJECT_REFCOUNT_VALUE (feature) != 2, "Refcount of feature should be 2"); diff --git a/tests/check/gst/gsttag.c b/tests/check/gst/gsttag.c index b690e2d..9dcca2d 100644 --- a/tests/check/gst/gsttag.c +++ b/tests/check/gst/gsttag.c @@ -66,8 +66,8 @@ check_tags_empty (const GstTagList * list) #define NEW_LIST_FIXED(mode) \ G_STMT_START { \ - if (list) gst_tag_list_free (list); \ - list = gst_tag_list_new_empty (); \ + if (list) gst_tag_list_unref (list); \ + list = gst_tag_list_new_empty (); \ gst_tag_list_add (list, mode, FTAG, FIXED1, FTAG, FIXED2, \ FTAG, FIXED3, FTAG, FIXED4, NULL); \ mark_point(); \ @@ -75,8 +75,8 @@ G_STMT_START { \ #define NEW_LIST_UNFIXED(mode) \ G_STMT_START { \ - if (list) gst_tag_list_free (list); \ - list = gst_tag_list_new_empty (); \ + if (list) gst_tag_list_unref (list); \ + list = gst_tag_list_new_empty (); \ gst_tag_list_add (list, mode, UTAG, UNFIXED1, UTAG, UNFIXED2, \ UTAG, UNFIXED3, UTAG, UNFIXED4, NULL); \ mark_point(); \ @@ -84,56 +84,56 @@ G_STMT_START { \ #define NEW_LISTS_FIXED(mode) \ G_STMT_START { \ - if (list) gst_tag_list_free (list); \ - list = gst_tag_list_new_empty (); \ + if (list) gst_tag_list_unref (list); \ + list = gst_tag_list_new_empty (); \ gst_tag_list_add (list, GST_TAG_MERGE_APPEND, FTAG, FIXED1, \ FTAG, FIXED2, NULL); \ - if (list2) gst_tag_list_free (list2); \ - list2 = gst_tag_list_new_empty (); \ + if (list2) gst_tag_list_unref (list2); \ + list2 = gst_tag_list_new_empty (); \ gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, FTAG, FIXED3, \ FTAG, FIXED4, NULL); \ - if (merge) gst_tag_list_free (merge); \ + if (merge) gst_tag_list_unref (merge); \ merge = gst_tag_list_merge (list, list2, mode); \ mark_point(); \ } G_STMT_END; #define NEW_LISTS_UNFIXED(mode) \ G_STMT_START { \ - if (list) gst_tag_list_free (list); \ - list = gst_tag_list_new_empty (); \ + if (list) gst_tag_list_unref (list); \ + list = gst_tag_list_new_empty (); \ gst_tag_list_add (list, GST_TAG_MERGE_APPEND, UTAG, UNFIXED1, \ UTAG, UNFIXED2, NULL); \ - if (list2) gst_tag_list_free (list2); \ - list2 = gst_tag_list_new_empty (); \ + if (list2) gst_tag_list_unref (list2); \ + list2 = gst_tag_list_new_empty (); \ gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, UTAG, UNFIXED3,\ UTAG, UNFIXED4, NULL); \ - if (merge) gst_tag_list_free (merge); \ + if (merge) gst_tag_list_unref (merge); \ merge = gst_tag_list_merge (list, list2, mode); \ mark_point(); \ } G_STMT_END; #define NEW_LISTS_EMPTY1(mode) \ G_STMT_START { \ - if (list) gst_tag_list_free (list); \ + if (list) gst_tag_list_unref (list); \ list = NULL; \ - if (list2) gst_tag_list_free (list2); \ - list2 = gst_tag_list_new_empty (); \ + if (list2) gst_tag_list_unref (list2); \ + list2 = gst_tag_list_new_empty (); \ gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, FTAG, FIXED3, \ FTAG, FIXED4, NULL); \ - if (merge) gst_tag_list_free (merge); \ + if (merge) gst_tag_list_unref (merge); \ merge = gst_tag_list_merge (list, list2, mode); \ mark_point(); \ } G_STMT_END; -#define NEW_LISTS_EMPTY2(mode) \ +#define NEW_LISTS_EMPTY2(mode) \ G_STMT_START { \ - if (list) gst_tag_list_free (list); \ - list = gst_tag_list_new_empty (); \ + if (list) gst_tag_list_unref (list); \ + list = gst_tag_list_new_empty (); \ gst_tag_list_add (list, GST_TAG_MERGE_APPEND, FTAG, FIXED1, \ FTAG, FIXED2, NULL); \ - if (list2) gst_tag_list_free (list2); \ + if (list2) gst_tag_list_unref (list2); \ list2 = NULL; \ - if (merge) gst_tag_list_free (merge); \ + if (merge) gst_tag_list_unref (merge); \ merge = gst_tag_list_merge (list, list2, mode); \ mark_point(); \ } G_STMT_END; @@ -185,7 +185,7 @@ GST_START_TEST (test_add) /* clean up */ if (list) - gst_tag_list_free (list); + gst_tag_list_unref (list); } GST_END_TEST @@ -256,11 +256,11 @@ GST_START_TEST (test_merge) /* clean up */ if (list) - gst_tag_list_free (list); + gst_tag_list_unref (list); if (list2) - gst_tag_list_free (list2); + gst_tag_list_unref (list2); if (merge) - gst_tag_list_free (merge); + gst_tag_list_unref (merge); } GST_END_TEST @@ -282,7 +282,7 @@ GST_START_TEST (test_date_tags) fail_if (tag_list2 == NULL); fail_if (!gst_tag_list_get_date (tag_list2, GST_TAG_DATE, &date2)); fail_unless (gst_tag_list_is_equal (tag_list2, tag_list)); - gst_tag_list_free (tag_list2); + gst_tag_list_unref (tag_list2); g_free (str); fail_if (g_date_compare (date, date2) != 0); @@ -294,7 +294,7 @@ GST_START_TEST (test_date_tags) fail_if (g_date_get_year (date2) != 2005); g_date_free (date2); - gst_tag_list_free (tag_list); + gst_tag_list_unref (tag_list); g_date_free (date); } @@ -306,13 +306,9 @@ GST_START_TEST (test_type) taglist = gst_tag_list_new_empty (); fail_unless (GST_IS_TAG_LIST (taglist)); - fail_unless (gst_is_tag_list (taglist)); - gst_tag_list_free (taglist); + gst_tag_list_unref (taglist); - /* this isn't okay */ - ASSERT_CRITICAL (fail_if (gst_is_tag_list (NULL))); - - /* this however should be fine */ + /* this should be fine */ fail_if (GST_IS_TAG_LIST (NULL)); /* check gst_tag_list_is_empty */ @@ -321,7 +317,7 @@ GST_START_TEST (test_type) fail_unless (gst_tag_list_is_empty (taglist)); gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "JD", NULL); fail_if (gst_tag_list_is_empty (taglist)); - gst_tag_list_free (taglist); + gst_tag_list_unref (taglist); } GST_END_TEST; @@ -340,7 +336,7 @@ GST_START_TEST (test_set_non_utf8_string) /* That string field with a non-UTF8 string should not have been added */ fail_unless (gst_tag_list_is_empty (taglist)); - gst_tag_list_free (taglist); + gst_tag_list_unref (taglist); } GST_END_TEST; @@ -380,7 +376,7 @@ GST_START_TEST (test_buffer_tags) gst_buffer_unref (buf1); gst_buffer_unref (buf2); - gst_tag_list_free (tags); + gst_tag_list_unref (tags); } GST_END_TEST; @@ -399,7 +395,7 @@ GST_START_TEST (test_empty_tags) ASSERT_WARNING (gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "", NULL)); gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "xyz", NULL); - gst_tag_list_free (tags); + gst_tag_list_unref (tags); } GST_END_TEST; @@ -425,7 +421,7 @@ GST_START_TEST (test_new_full) fail_unless_equals_float (track_gain, 4.242); fail_unless (tags != NULL); - gst_tag_list_free (tags); + gst_tag_list_unref (tags); g_free (artist); g_free (title); } @@ -448,7 +444,7 @@ GST_START_TEST (test_merge_strings_with_comma) fail_unless (strstr (artists, "Bar") != NULL); fail_unless (strstr (artists, "Yay") != NULL); g_free (artists); - gst_tag_list_free (tags); + gst_tag_list_unref (tags); } GST_END_TEST; @@ -484,8 +480,32 @@ GST_START_TEST (test_equal) 9.87654310, NULL); fail_unless (!gst_tag_list_is_equal (tags2, tags)); - gst_tag_list_free (tags); - gst_tag_list_free (tags2); + gst_tag_list_unref (tags); + gst_tag_list_unref (tags2); +} + +GST_END_TEST; + +GST_START_TEST (test_writability) +{ + GstTagList *tags, *wtags; + + tags = gst_tag_list_new_empty (); + gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Foo", NULL); + + /* take ref, should no longer be writable */ + gst_tag_list_ref (tags); + ASSERT_CRITICAL (gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, + GST_TAG_ARTIST, "Bar", NULL)); + + wtags = gst_tag_list_make_writable (tags); + /* should be ok now */ + gst_tag_list_add (wtags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL); + gst_tag_list_unref (wtags); + + /* this too, since we dropped the second ref in make_writable */ + gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "Bar", NULL); + gst_tag_list_unref (tags); } GST_END_TEST; @@ -508,6 +528,7 @@ gst_tag_suite (void) tcase_add_test (tc_chain, test_empty_tags); tcase_add_test (tc_chain, test_new_full); tcase_add_test (tc_chain, test_equal); + tcase_add_test (tc_chain, test_writability); return s; } diff --git a/tests/check/gst/gsttagsetter.c b/tests/check/gst/gsttagsetter.c index 6acdbd3..16e3168 100644 --- a/tests/check/gst/gsttagsetter.c +++ b/tests/check/gst/gsttagsetter.c @@ -112,8 +112,8 @@ GST_START_TEST (test_merge) NULL); assert_tag_setter_list_length (setter, 2); - gst_tag_list_free (list2); - gst_tag_list_free (list1); + gst_tag_list_unref (list2); + gst_tag_list_unref (list1); g_object_unref (enc); } @@ -160,9 +160,9 @@ GST_START_TEST (test_merge_modes) fail_unless_equals_int (tag_list_length (gst_tag_setter_get_tag_list (setter)), tag_list_length (merged)); - gst_tag_list_free (list1); - gst_tag_list_free (list2); - gst_tag_list_free (merged); + gst_tag_list_unref (list1); + gst_tag_list_unref (list2); + gst_tag_list_unref (merged); gst_object_unref (enc); } } @@ -200,9 +200,9 @@ GST_START_TEST (test_merge_modes_skip_empty) fail_unless_equals_int (tag_list_length (gst_tag_setter_get_tag_list (setter)), tag_list_length (merged)); - gst_tag_list_free (list1); - gst_tag_list_free (list2); - gst_tag_list_free (merged); + gst_tag_list_unref (list1); + gst_tag_list_unref (list2); + gst_tag_list_unref (merged); gst_object_unref (enc); } } diff --git a/tests/check/gst/gstutils.c b/tests/check/gst/gstutils.c index d16341e..f26baa4 100644 --- a/tests/check/gst/gstutils.c +++ b/tests/check/gst/gstutils.c @@ -504,7 +504,7 @@ GST_START_TEST (test_element_found_tags) gst_element_set_state (pipeline, GST_STATE_PLAYING); srcpad = gst_element_get_static_pad (fakesrc, "src"); - gst_pad_push_event (srcpad, gst_event_new_tag (list)); + gst_pad_push_event (srcpad, gst_event_new_tag ("test", list)); gst_object_unref (srcpad); bus = gst_element_get_bus (pipeline); @@ -1025,6 +1025,7 @@ GST_START_TEST (test_pad_proxy_query_caps_aggregation) /* test intersection */ caps = gst_caps_new_simple ("foo/bar", "barversion", G_TYPE_INT, 1, NULL); + GST_OBJECT_FLAG_UNSET (sink2_sink, GST_PAD_FLAG_FIXED_CAPS); fail_unless (gst_pad_set_caps (sink2_sink, caps)); gst_pad_use_fixed_caps (sink2_sink); gst_caps_unref (caps); diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in index 2b91820..85d8849 100644 --- a/tests/examples/Makefile.in +++ b/tests/examples/Makefile.in @@ -55,6 +55,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/common/parallel-subdirs.mak subdir = tests/examples @@ -262,6 +263,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -414,7 +419,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/adapter/Makefile.in b/tests/examples/adapter/Makefile.in index eff729e..6c99309 100644 --- a/tests/examples/adapter/Makefile.in +++ b/tests/examples/adapter/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = adapter_test$(EXEEXT) subdir = tests/examples/adapter DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -253,6 +254,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -405,7 +410,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/controller/Makefile.in b/tests/examples/controller/Makefile.in index 9dae073..ffd3b16 100644 --- a/tests/examples/controller/Makefile.in +++ b/tests/examples/controller/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = audio-example$(EXEEXT) control-sources$(EXEEXT) \ text-color-example$(EXEEXT) subdir = tests/examples/controller @@ -262,6 +263,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -414,7 +419,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/helloworld/Makefile.in b/tests/examples/helloworld/Makefile.in index 0b76d4a..d32e06d 100644 --- a/tests/examples/helloworld/Makefile.in +++ b/tests/examples/helloworld/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = helloworld$(EXEEXT) subdir = tests/examples/helloworld DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -252,6 +253,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -404,7 +409,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/helloworld/helloworld.c b/tests/examples/helloworld/helloworld.c index a659f5b..013ae4d 100644 --- a/tests/examples/helloworld/helloworld.c +++ b/tests/examples/helloworld/helloworld.c @@ -16,6 +16,7 @@ bus_call (GstBus * bus, GstMessage * msg, gpointer data) GError *err; gst_message_parse_error (msg, &err, &debug); + g_printerr ("Debugging info: %s\n", (debug) ? debug : "none"); g_free (debug); g_print ("Error: %s\n", err->message); @@ -46,9 +47,9 @@ main (gint argc, gchar * argv[]) return 1; } - playbin = gst_element_factory_make ("playbin2", NULL); + playbin = gst_element_factory_make ("playbin", NULL); if (!playbin) { - g_print ("'playbin2' gstreamer plugin missing\n"); + g_print ("'playbin' gstreamer plugin missing\n"); return 1; } diff --git a/tests/examples/launch/Makefile.in b/tests/examples/launch/Makefile.in index dc26c1e..0fb702a 100644 --- a/tests/examples/launch/Makefile.in +++ b/tests/examples/launch/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = mp3parselaunch$(EXEEXT) subdir = tests/examples/launch DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -253,6 +254,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -405,7 +410,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/manual/Makefile.in b/tests/examples/manual/Makefile.in index ea8c449..c6e01ed 100644 --- a/tests/examples/manual/Makefile.in +++ b/tests/examples/manual/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ TESTS = bin$(EXEEXT) elementcreate$(EXEEXT) elementfactory$(EXEEXT) \ elementget$(EXEEXT) elementlink$(EXEEXT) elementmake$(EXEEXT) \ ghostpad$(EXEEXT) init$(EXEEXT) @@ -359,6 +360,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -511,7 +516,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/metadata/Makefile.in b/tests/examples/metadata/Makefile.in index a3817bb..d8fc778 100644 --- a/tests/examples/metadata/Makefile.in +++ b/tests/examples/metadata/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = read-metadata$(EXEEXT) subdir = tests/examples/metadata DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -252,6 +253,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -404,7 +409,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/metadata/read-metadata.c b/tests/examples/metadata/read-metadata.c index 52ebfe4..9678862 100644 --- a/tests/examples/metadata/read-metadata.c +++ b/tests/examples/metadata/read-metadata.c @@ -69,7 +69,7 @@ message_loop (GstElement * element, GstTagList ** tags) if (*tags) { old_tags = *tags; *tags = gst_tag_list_merge (old_tags, new_tags, GST_TAG_MERGE_KEEP); - gst_tag_list_free (old_tags); + gst_tag_list_unref (old_tags); } else *tags = new_tags; break; @@ -178,7 +178,7 @@ main (int argc, char *argv[]) if (tags) { g_print ("Metadata for %s:\n", argv[i]); gst_tag_list_foreach (tags, print_tag, NULL); - gst_tag_list_free (tags); + gst_tag_list_unref (tags); tags = NULL; } else g_print ("No metadata found for %s\n", argv[i]); diff --git a/tests/examples/queue/Makefile.in b/tests/examples/queue/Makefile.in index 9a25fc8..4891ef4 100644 --- a/tests/examples/queue/Makefile.in +++ b/tests/examples/queue/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = queue$(EXEEXT) subdir = tests/examples/queue DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -252,6 +253,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -404,7 +409,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/stepping/Makefile.in b/tests/examples/stepping/Makefile.in index e7d9916..e6d4e1f 100644 --- a/tests/examples/stepping/Makefile.in +++ b/tests/examples/stepping/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = framestep1$(EXEEXT) subdir = tests/examples/stepping DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -252,6 +253,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -404,7 +409,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/streams/Makefile.in b/tests/examples/streams/Makefile.in index 12cb5a0..5187d85 100644 --- a/tests/examples/streams/Makefile.in +++ b/tests/examples/streams/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : 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 subdir = tests/examples/streams @@ -261,6 +262,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -413,7 +418,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/examples/typefind/Makefile.in b/tests/examples/typefind/Makefile.in index 843995f..a5b5743 100644 --- a/tests/examples/typefind/Makefile.in +++ b/tests/examples/typefind/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ noinst_PROGRAMS = typefind$(EXEEXT) subdir = tests/examples/typefind DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -252,6 +253,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -404,7 +409,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tests/misc/Makefile.in b/tests/misc/Makefile.in index 2ad1eea..e281b0d 100644 --- a/tests/misc/Makefile.in +++ b/tests/misc/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = tests/misc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -217,6 +218,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -369,7 +374,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tools/Makefile.in b/tools/Makefile.in index 4e906d7..c282f92 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ bin_PROGRAMS = gst-inspect-@GST_API_VERSION@$(EXEEXT) \ gst-typefind-@GST_API_VERSION@$(EXEEXT) $(am__EXEEXT_1) @GST_DISABLE_PARSE_FALSE@am__append_1 = gst-launch-@GST_API_VERSION@ @@ -318,6 +319,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -470,7 +475,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c index a8000e7..9642ea9 100644 --- a/tools/gst-inspect.c +++ b/tools/gst-inspect.c @@ -181,31 +181,29 @@ get_rank_name (char *s, gint rank) return s; } -static gboolean -print_factory_details_metadata (GQuark field_id, const GValue * value, - gpointer user_data) -{ - gchar *val = g_strdup_value_contents (value); - gchar *key = g_strdup (g_quark_to_string (field_id)); - - key[0] = g_ascii_toupper (key[0]); - n_print (" %s:\t\t%s\n", key, val); - g_free (val); - g_free (key); - return TRUE; -} - static void print_factory_details_info (GstElementFactory * factory) { + gchar **keys, **k; + GstRank rank; char s[20]; + rank = gst_plugin_feature_get_rank (GST_PLUGIN_FEATURE (factory)); n_print ("Factory Details:\n"); - n_print (" Rank:\t\t%s (%d)\n", - get_rank_name (s, GST_PLUGIN_FEATURE (factory)->rank), - GST_PLUGIN_FEATURE (factory)->rank); - gst_structure_foreach ((GstStructure *) factory->metadata, - print_factory_details_metadata, NULL); + n_print (" Rank:\t\t%s (%d)\n", get_rank_name (s, rank), rank); + + keys = gst_element_factory_get_metadata_keys (factory); + if (keys != NULL) { + for (k = keys; *k != NULL; ++k) { + const gchar *val; + gchar *key = *k; + + val = gst_element_factory_get_metadata (factory, key); + key[0] = g_ascii_toupper (key[0]); + n_print (" %s:\t\t%s\n", key, val); + } + g_strfreev (keys); + } n_print ("\n"); } @@ -591,14 +589,14 @@ print_pad_templates_info (GstElement * element, GstElementFactory * factory) GstStaticPadTemplate *padtemplate; n_print ("Pad Templates:\n"); - if (!factory->numpadtemplates) { + if (gst_element_factory_get_num_pad_templates (factory) == 0) { n_print (" none\n"); return; } gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element)); - pads = factory->staticpadtemplates; + pads = gst_element_factory_get_static_pad_templates (factory); while (pads) { padtemplate = (GstStaticPadTemplate *) (pads->data); pads = g_list_next (pads); @@ -1299,6 +1297,7 @@ static int print_element_info (GstElementFactory * factory, gboolean print_names) { GstElement *element; + GstPlugin *plugin; gint maxlevel = 0; factory = @@ -1323,14 +1322,11 @@ print_element_info (GstElementFactory * factory, gboolean print_names) _name = NULL; print_factory_details_info (factory); - if (GST_PLUGIN_FEATURE (factory)->plugin_name) { - GstPlugin *plugin; - plugin = gst_registry_find_plugin (gst_registry_get (), - GST_PLUGIN_FEATURE (factory)->plugin_name); - if (plugin) { - print_plugin_info (plugin); - } + plugin = gst_plugin_feature_get_plugin (GST_PLUGIN_FEATURE (factory)); + if (plugin) { + print_plugin_info (plugin); + gst_object_unref (plugin); } print_hierarchy (G_OBJECT_TYPE (element), 0, &maxlevel); @@ -1453,22 +1449,21 @@ print_plugin_automatic_install_info_protocols (GstElementFactory * factory) static void print_plugin_automatic_install_info (GstPlugin * plugin) { - const gchar *plugin_name; GList *features, *l; - plugin_name = gst_plugin_get_name (plugin); - /* not interested in typefind factories, only element factories */ features = gst_registry_get_feature_list (gst_registry_get (), GST_TYPE_ELEMENT_FACTORY); for (l = features; l != NULL; l = l->next) { GstPluginFeature *feature; + GstPlugin *feature_plugin; feature = GST_PLUGIN_FEATURE (l->data); /* only interested in the ones that are in the plugin we just loaded */ - if (g_str_equal (plugin_name, feature->plugin_name)) { + feature_plugin = gst_plugin_feature_get_plugin (feature); + if (feature_plugin == plugin) { GstElementFactory *factory; g_print ("element-%s\n", gst_plugin_feature_get_name (feature)); @@ -1477,6 +1472,8 @@ print_plugin_automatic_install_info (GstPlugin * plugin) print_plugin_automatic_install_info_protocols (factory); print_plugin_automatic_install_info_codecs (factory); } + if (feature_plugin) + gst_object_unref (feature_plugin); } g_list_foreach (features, (GFunc) gst_object_unref, NULL); diff --git a/tools/gst-launch.c b/tools/gst-launch.c index 9161594..4abb429 100644 --- a/tools/gst-launch.c +++ b/tools/gst-launch.c @@ -466,13 +466,13 @@ print_toc_entry (gpointer data, gpointer user_data) { GstTocEntry *entry = (GstTocEntry *) data; const gchar spc[MAX_INDENT + 1] = " "; - const gchar *entry_types[] = { "chapter", "edition" }; guint indent = MIN (GPOINTER_TO_UINT (user_data), MAX_INDENT); gint64 start, stop; gst_toc_entry_get_start_stop (entry, &start, &stop); - PRINT ("%s%s:", &spc[MAX_INDENT - indent], entry_types[entry->type]); + PRINT ("%s%s:", &spc[MAX_INDENT - indent], + gst_toc_entry_type_get_nick (entry->type)); if (GST_CLOCK_TIME_IS_VALID (start)) { PRINT (" start: %" GST_TIME_FORMAT, GST_TIME_ARGS (start)); } @@ -484,7 +484,7 @@ print_toc_entry (gpointer data, gpointer user_data) /* print tags */ gst_tag_list_foreach (entry->tags, print_tag_foreach, - GINT_TO_POINTER (indent)); + GUINT_TO_POINTER (indent)); /* loop over sub-toc entries */ g_list_foreach (entry->subentries, print_toc_entry, @@ -663,7 +663,7 @@ event_loop (GstElement * pipeline, gboolean blocking, GstState target_state) gst_message_parse_tag (message, &tag_list); gst_tag_list_foreach (tag_list, print_tag, NULL); - gst_tag_list_free (tag_list); + gst_tag_list_unref (tag_list); } break; case GST_MESSAGE_TOC: @@ -909,7 +909,7 @@ main (int argc, char *argv[]) {"tags", 't', 0, G_OPTION_ARG_NONE, &tags, N_("Output tags (also known as metadata)"), NULL}, {"toc", 'c', 0, G_OPTION_ARG_NONE, &toc, - N_("Ouput TOC (chapters and editions)"), NULL}, + N_("Output TOC (chapters and editions)"), NULL}, {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, N_("Output status information and property notifications"), NULL}, {"quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet, @@ -1099,18 +1099,37 @@ main (int argc, char *argv[]) tfthen = gst_util_get_timestamp (); caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); - if (eos_on_shutdown && caught_error == ELR_INTERRUPT) { - PRINT (_("EOS on shutdown enabled -- Forcing EOS on the pipeline\n")); + if (eos_on_shutdown && caught_error != ELR_NO_ERROR) { + gboolean ignore_errors; + waiting_eos = TRUE; - gst_element_send_event (pipeline, gst_event_new_eos ()); + if (caught_error == ELR_INTERRUPT) { + PRINT (_("EOS on shutdown enabled -- Forcing EOS on the pipeline\n")); + gst_element_send_event (pipeline, gst_event_new_eos ()); + ignore_errors = FALSE; + } else { + PRINT (_("EOS on shutdown enabled -- waiting for EOS after Error\n")); + ignore_errors = TRUE; + } PRINT (_("Waiting for EOS...\n")); - caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); - if (caught_error == ELR_NO_ERROR) { - /* we got EOS */ - PRINT (_("EOS received - stopping pipeline...\n")); - } else if (caught_error == ELR_ERROR) { - PRINT (_("An error happened while waiting for EOS\n")); + while (TRUE) { + caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); + + if (caught_error == ELR_NO_ERROR) { + /* we got EOS */ + PRINT (_("EOS received - stopping pipeline...\n")); + break; + } else if (caught_error == ELR_INTERRUPT) { + PRINT (_ + ("Interrupt while waiting for EOS - stopping pipeline...\n")); + break; + } else if (caught_error == ELR_ERROR) { + if (!ignore_errors) { + PRINT (_("An error happened while waiting for EOS\n")); + break; + } + } } } tfnow = gst_util_get_timestamp (); diff --git a/win32/common/config.h b/win32/common/config.h index 1d32cf7..577e889 100644 --- a/win32/common/config.h +++ b/win32/common/config.h @@ -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-05-13" +#define GST_PACKAGE_RELEASE_DATETIME "2012-06-07" /* location of the installed gst-plugin-scanner */ #define GST_PLUGIN_SCANNER_INSTALLED LIBDIR "\\gst-plugin-scanner" @@ -78,46 +78,46 @@ /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME -/* Define if the host CPU is an Alpha */ +/* Define if the target CPU is an Alpha */ #undef HAVE_CPU_ALPHA -/* Define if the host CPU is an ARM */ +/* Define if the target CPU is an ARM */ #undef HAVE_CPU_ARM -/* Define if the host CPU is a CRIS */ +/* Define if the target CPU is a CRIS */ #undef HAVE_CPU_CRIS -/* Define if the host CPU is a CRISv32 */ +/* Define if the target CPU is a CRISv32 */ #undef HAVE_CPU_CRISV32 -/* Define if the host CPU is a HPPA */ +/* Define if the target CPU is a HPPA */ #undef HAVE_CPU_HPPA -/* Define if the host CPU is an x86 */ +/* Define if the target CPU is an x86 */ #define HAVE_CPU_I386 1 -/* Define if the host CPU is a IA64 */ +/* Define if the target CPU is a IA64 */ #undef HAVE_CPU_IA64 -/* Define if the host CPU is a M68K */ +/* Define if the target CPU is a M68K */ #undef HAVE_CPU_M68K -/* Define if the host CPU is a MIPS */ +/* Define if the target CPU is a MIPS */ #undef HAVE_CPU_MIPS -/* Define if the host CPU is a PowerPC */ +/* Define if the target CPU is a PowerPC */ #undef HAVE_CPU_PPC -/* Define if the host CPU is a 64 bit PowerPC */ +/* Define if the target CPU is a 64 bit PowerPC */ #undef HAVE_CPU_PPC64 -/* Define if the host CPU is a S390 */ +/* Define if the target CPU is a S390 */ #undef HAVE_CPU_S390 -/* Define if the host CPU is a SPARC */ +/* Define if the target CPU is a SPARC */ #undef HAVE_CPU_SPARC -/* Define if the host CPU is a x86_64 */ +/* Define if the target CPU is a x86_64 */ #undef HAVE_CPU_X86_64 /* Define if the GNU dcgettext() function is already present or preinstalled. @@ -334,7 +334,7 @@ #define PACKAGE_NAME "GStreamer" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GStreamer 0.11.91" +#define PACKAGE_STRING "GStreamer 0.11.92" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gstreamer" @@ -343,7 +343,7 @@ #undef PACKAGE_URL /* Define to the version of this package. */ -#define PACKAGE_VERSION "0.11.91" +#define PACKAGE_VERSION "0.11.92" /* directory where plugins are located */ #ifdef _DEBUG @@ -370,11 +370,14 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS +/* the target CPU */ +#undef TARGET_CPU + /* Define if we should poison deallocated memory */ #undef USE_POISONING /* Version number of package */ -#define VERSION "0.11.91" +#define VERSION "0.11.92" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ diff --git a/win32/common/gstenumtypes.c b/win32/common/gstenumtypes.c index 436df4b..27bead8 100644 --- a/win32/common/gstenumtypes.c +++ b/win32/common/gstenumtypes.c @@ -1174,6 +1174,7 @@ gst_pad_flags_get_type (void) static const GFlagsValue values[] = { {C_FLAGS (GST_PAD_FLAG_BLOCKED), "GST_PAD_FLAG_BLOCKED", "blocked"}, {C_FLAGS (GST_PAD_FLAG_FLUSHING), "GST_PAD_FLAG_FLUSHING", "flushing"}, + {C_FLAGS (GST_PAD_FLAG_EOS), "GST_PAD_FLAG_EOS", "eos"}, {C_FLAGS (GST_PAD_FLAG_BLOCKING), "GST_PAD_FLAG_BLOCKING", "blocking"}, {C_FLAGS (GST_PAD_FLAG_NEED_PARENT), "GST_PAD_FLAG_NEED_PARENT", "need-parent"}, diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 3823726..ce04b94 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -338,6 +338,7 @@ EXPORTS gst_element_factory_find gst_element_factory_get_element_type gst_element_factory_get_metadata + gst_element_factory_get_metadata_keys gst_element_factory_get_num_pad_templates gst_element_factory_get_static_pad_templates gst_element_factory_get_type @@ -483,7 +484,6 @@ EXPORTS gst_int64_range_get_type gst_int_range_get_type gst_is_initialized - gst_is_tag_list gst_iterator_copy gst_iterator_filter gst_iterator_find_custom @@ -748,6 +748,7 @@ EXPORTS gst_plugin_error_get_type gst_plugin_error_quark gst_plugin_feature_check_version + gst_plugin_feature_get_plugin gst_plugin_feature_get_rank gst_plugin_feature_get_type gst_plugin_feature_list_copy @@ -1041,10 +1042,8 @@ EXPORTS gst_tag_list_add_valist_values gst_tag_list_add_value gst_tag_list_add_values - gst_tag_list_copy gst_tag_list_copy_value gst_tag_list_foreach - gst_tag_list_free gst_tag_list_get_boolean gst_tag_list_get_boolean_index gst_tag_list_get_buffer @@ -1089,6 +1088,7 @@ EXPORTS gst_tag_merge_strings_with_comma gst_tag_merge_use_first gst_tag_register + gst_tag_register_static gst_tag_setter_add_tag_valist gst_tag_setter_add_tag_valist_values gst_tag_setter_add_tag_value @@ -1124,12 +1124,15 @@ EXPORTS gst_toc_entry_copy gst_toc_entry_free gst_toc_entry_get_start_stop + gst_toc_entry_get_type gst_toc_entry_new gst_toc_entry_new_with_pad gst_toc_entry_set_start_stop + gst_toc_entry_type_get_nick gst_toc_entry_type_get_type gst_toc_find_entry gst_toc_free + gst_toc_get_type gst_toc_new gst_toc_setter_add_toc_entry gst_toc_setter_get_toc -- cgit v1.2.3