aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-02-09 11:06:52 +0100
committerSebastian Dröge <sebastian@centricular.com>2014-02-09 11:06:52 +0100
commit54ba965e6376891d6d7e580732f2ab2de3d4a9cc (patch)
tree5f5c2d3ca58c0833fdae43f4e686f5bddd87d5e3
parentc05f749f91dae26d011bfd0e78ac7b99c2faf663 (diff)
Imported Upstream version 1.2.3upstream/1.2.3
-rw-r--r--ChangeLog297
-rw-r--r--Makefile.in5
-rw-r--r--NEWS2
-rw-r--r--RELEASE24
-rw-r--r--aclocal.m46
-rw-r--r--common/Makefile.in2
-rw-r--r--common/m4/Makefile.in2
-rwxr-xr-xconfigure34
-rw-r--r--configure.ac4
-rw-r--r--docs/Makefile.am2
-rw-r--r--docs/Makefile.in4
-rw-r--r--docs/design/Makefile.am10
-rw-r--r--docs/design/Makefile.in12
-rw-r--r--docs/design/draft-metadata.txt201
-rw-r--r--docs/design/draft-tracing.txt96
-rw-r--r--docs/design/part-buffer.txt160
-rw-r--r--docs/design/part-bufferpool.txt377
-rw-r--r--docs/design/part-controller.txt67
-rw-r--r--docs/design/part-memory.txt169
-rw-r--r--docs/design/part-meta.txt396
-rw-r--r--docs/design/part-miniobject.txt209
-rw-r--r--docs/design/part-probes.txt362
-rw-r--r--docs/design/part-progress.txt234
-rw-r--r--docs/faq/Makefile.in2
-rw-r--r--docs/gst/Makefile.in2
-rw-r--r--docs/gst/html/annotation-glossary.html83
-rw-r--r--docs/gst/html/api-index-full.html16
-rw-r--r--docs/gst/html/gstreamer-GstVersion.html2
-rw-r--r--docs/gst/html/index.html2
-rw-r--r--docs/gst/html/index.sgml24
-rw-r--r--docs/libs/Makefile.in2
-rw-r--r--docs/libs/html/annotation-glossary.html56
-rw-r--r--docs/libs/html/api-index-full.html4
-rw-r--r--docs/libs/html/index.html2
-rw-r--r--docs/libs/html/index.sgml16
-rw-r--r--docs/list-ulink.xsl8
-rw-r--r--docs/manual/Makefile.in2
-rw-r--r--docs/plugins/Makefile.in2
-rw-r--r--docs/plugins/html/gstreamer-plugins-plugin-coreelements.html2
-rw-r--r--docs/plugins/html/index.html2
-rw-r--r--docs/plugins/inspect/plugin-coreelements.xml2
-rw-r--r--docs/pwg/Makefile.in2
-rw-r--r--docs/slides/Makefile.in2
-rw-r--r--docs/xsl/Makefile.in2
-rw-r--r--gst/Makefile.in2
-rw-r--r--gst/gstpad.c109
-rw-r--r--gst/gstsegment.c53
-rw-r--r--gst/gstsegment.h2
-rw-r--r--gst/parse/Makefile.in2
-rw-r--r--gst/printf/Makefile.in2
-rw-r--r--gstreamer.doap10
-rw-r--r--gstreamer.spec2
-rw-r--r--libs/Makefile.in2
-rw-r--r--libs/gst/Makefile.in2
-rw-r--r--libs/gst/base/Makefile.in2
-rw-r--r--libs/gst/base/gstbaseparse.c114
-rw-r--r--libs/gst/base/gstcollectpads.c7
-rw-r--r--libs/gst/check/Makefile.in2
-rw-r--r--libs/gst/check/libcheck/Makefile.in2
-rw-r--r--libs/gst/controller/Makefile.in2
-rw-r--r--libs/gst/helpers/Makefile.in2
-rw-r--r--libs/gst/net/Makefile.in2
-rw-r--r--m4/Makefile.in2
-rw-r--r--pkgconfig/Makefile.in2
-rw-r--r--plugins/Makefile.in2
-rw-r--r--plugins/elements/Makefile.in2
-rw-r--r--plugins/elements/gstmultiqueue.c8
-rw-r--r--plugins/elements/gsttee.c17
-rw-r--r--plugins/elements/gsttee.h3
-rw-r--r--po/af.gmobin14916 -> 14916 bytes
-rw-r--r--po/af.po2
-rw-r--r--po/az.gmobin1683 -> 1683 bytes
-rw-r--r--po/az.po2
-rw-r--r--po/be.gmobin4843 -> 4843 bytes
-rw-r--r--po/be.po2
-rw-r--r--po/bg.gmobin43193 -> 43193 bytes
-rw-r--r--po/bg.po2
-rw-r--r--po/ca.gmobin33710 -> 33710 bytes
-rw-r--r--po/ca.po2
-rw-r--r--po/cs.gmobin36348 -> 36348 bytes
-rw-r--r--po/cs.po2
-rw-r--r--po/da.gmobin35349 -> 35349 bytes
-rw-r--r--po/da.po2
-rw-r--r--po/de.gmobin36966 -> 36966 bytes
-rw-r--r--po/de.po2
-rw-r--r--po/el.gmobin43965 -> 43965 bytes
-rw-r--r--po/el.po2
-rw-r--r--po/en_GB.gmobin11404 -> 11404 bytes
-rw-r--r--po/en_GB.po2
-rw-r--r--po/eo.gmobin4307 -> 4307 bytes
-rw-r--r--po/eo.po2
-rw-r--r--po/es.gmobin33895 -> 33895 bytes
-rw-r--r--po/es.po2
-rw-r--r--po/eu.gmobin29436 -> 29436 bytes
-rw-r--r--po/eu.po2
-rw-r--r--po/fi.gmobin32409 -> 32409 bytes
-rw-r--r--po/fi.po2
-rw-r--r--po/fr.gmobin35747 -> 35747 bytes
-rw-r--r--po/fr.po2
-rw-r--r--po/gl.gmobin35398 -> 35398 bytes
-rw-r--r--po/gl.po2
-rw-r--r--po/gstreamer-1.0.pot4
-rw-r--r--po/hr.gmobin31591 -> 31591 bytes
-rw-r--r--po/hr.po2
-rw-r--r--po/hu.gmobin35413 -> 35413 bytes
-rw-r--r--po/hu.po2
-rw-r--r--po/id.gmobin34465 -> 34755 bytes
-rw-r--r--po/id.po20
-rw-r--r--po/it.gmobin33511 -> 33511 bytes
-rw-r--r--po/it.po2
-rw-r--r--po/ja.gmobin16417 -> 16417 bytes
-rw-r--r--po/ja.po2
-rw-r--r--po/lt.gmobin31227 -> 31227 bytes
-rw-r--r--po/lt.po2
-rw-r--r--po/nb.gmobin9881 -> 9881 bytes
-rw-r--r--po/nb.po2
-rw-r--r--po/nl.gmobin35571 -> 35873 bytes
-rw-r--r--po/nl.po17
-rw-r--r--po/pl.gmobin36218 -> 36218 bytes
-rw-r--r--po/pl.po2
-rw-r--r--po/pt_BR.gmobin35387 -> 36869 bytes
-rw-r--r--po/pt_BR.po35
-rw-r--r--po/ro.gmobin32641 -> 32641 bytes
-rw-r--r--po/ro.po2
-rw-r--r--po/ru.gmobin46675 -> 46675 bytes
-rw-r--r--po/ru.po2
-rw-r--r--po/rw.gmobin689 -> 689 bytes
-rw-r--r--po/rw.po2
-rw-r--r--po/sk.gmobin32903 -> 36306 bytes
-rw-r--r--po/sk.po149
-rw-r--r--po/sl.gmobin34024 -> 34024 bytes
-rw-r--r--po/sl.po2
-rw-r--r--po/sq.gmobin12534 -> 12534 bytes
-rw-r--r--po/sq.po2
-rw-r--r--po/sr.gmobin45783 -> 46164 bytes
-rw-r--r--po/sr.po17
-rw-r--r--po/sv.gmobin32273 -> 32273 bytes
-rw-r--r--po/sv.po2
-rw-r--r--po/tr.gmobin11899 -> 11899 bytes
-rw-r--r--po/tr.po2
-rw-r--r--po/uk.gmobin47456 -> 47456 bytes
-rw-r--r--po/uk.po2
-rw-r--r--po/vi.gmobin40034 -> 40034 bytes
-rw-r--r--po/vi.po2
-rw-r--r--po/zh_CN.gmobin25328 -> 25328 bytes
-rw-r--r--po/zh_CN.po2
-rw-r--r--po/zh_TW.gmobin7086 -> 7086 bytes
-rw-r--r--po/zh_TW.po2
-rw-r--r--tests/Makefile.in2
-rw-r--r--tests/benchmarks/Makefile.in2
-rw-r--r--tests/check/Makefile.am1
-rw-r--r--tests/check/Makefile.in64
-rw-r--r--tests/check/gst/gstpad.c102
-rw-r--r--tests/check/gst/gstsegment.c81
-rw-r--r--tests/check/libs/baseparse.c304
-rw-r--r--tests/examples/Makefile.in2
-rw-r--r--tests/examples/adapter/Makefile.in2
-rw-r--r--tests/examples/controller/Makefile.in2
-rw-r--r--tests/examples/helloworld/Makefile.in2
-rw-r--r--tests/examples/launch/Makefile.in2
-rw-r--r--tests/examples/manual/Makefile.in2
-rw-r--r--tests/examples/memory/Makefile.in2
-rw-r--r--tests/examples/metadata/Makefile.in2
-rw-r--r--tests/examples/queue/Makefile.in2
-rw-r--r--tests/examples/stepping/Makefile.in2
-rw-r--r--tests/examples/streams/Makefile.in2
-rw-r--r--tests/examples/typefind/Makefile.in2
-rw-r--r--tests/misc/Makefile.in2
-rw-r--r--tools/Makefile.in2
-rw-r--r--win32/common/config.h8
-rw-r--r--win32/common/gstversion.h2
-rw-r--r--win32/common/libgstreamer.def1
172 files changed, 3694 insertions, 476 deletions
diff --git a/ChangeLog b/ChangeLog
index 5a72408..2d725fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,302 @@
+=== release 1.2.3 ===
+
+2014-02-08 Sebastian Dröge <slomo@coaxion.net>
+
+ * configure.ac:
+ releasing 1.2.3
+
+2014-01-24 19:19:08 +0100 Arnaud Vrac <avrac@freebox.fr>
+
+ * plugins/elements/gstmultiqueue.c:
+ multiqueue: do not reduce single queue below current level
+ When the single queue size was just bumped by 1 to allow more buffers to
+ be added, the buffers limit could be reduced to the current level when
+ setting the max-size-buffers property. This would result in a stall
+ since the queue would not grow anymore at this point.
+ Prevent this by not reducing a single queue size below the current
+ number of buffers + 1.
+ https://bugzilla.gnome.org/show_bug.cgi?id=712597
+
+2014-02-04 16:20:08 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/nl.po:
+ * po/pt_BR.po:
+ * po/sk.po:
+ * po/sr.po:
+ po: Update translations
+
+2014-01-17 22:53:01 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/gstpad.c:
+ pad: fix sticky event leak after sticky_events_foreach
+ events_foreach adds an extra ref when giving the event to the
+ user function. In case it was unrefed by the user, this extra ref
+ disappeared, but events_foreach still should unref again to
+ lose its own ref before removing the event from the array.
+ https://bugzilla.gnome.org/show_bug.cgi?id=722467
+
+2014-01-15 00:12:26 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * plugins/elements/gstmultiqueue.c:
+ multiqueue: prevent buffering forever with playbin
+ When prerolling/buffering, multiqueue has its buffers limit set
+ to 0, this means it can take an infinite amount of buffers.
+ When prerolling/buffering finishes, its limit is set back to 5, but
+ only if the current level is lower than 5. It should (almost) never be
+ and this will cause prerolling/buffering to need to wait to reach the
+ hard bytes and time limits, which are much higher.
+ This can lead to a very long startup time. This patch fixes this
+ by setting the single queues to the max(current, new_value) instead
+ of simply ignoring the new value and letting it as infinite(0)
+ https://bugzilla.gnome.org/show_bug.cgi?id=712597
+
+2014-01-15 11:12:08 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gstsegment.c:
+ segment: gst_segment_offset_running_time() will be available in 1.2.3
+
+2014-01-08 15:47:10 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * tests/check/gst/gstsegment.c:
+ tests: improve check, also check stream-time
+
+2014-01-08 15:31:28 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * tests/check/gst/gstsegment.c:
+ tests: add unit test for segment _offset_running_time()
+ Add a unit test to check that positive and negative offsets are applied
+ correctly in various cases.
+
+2014-01-08 14:57:04 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/gstpad.c:
+ pad: use new segment offset method to apply the offset
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=721422
+
+2014-01-08 14:54:47 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/gstsegment.c:
+ * gst/gstsegment.h:
+ * win32/common/libgstreamer.def:
+ segment: add method to offset the segment running-time
+ Add a method that can apply an offset to the calculated running-time of
+ a segment.
+
+2014-01-08 16:28:54 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * libs/gst/base/gstbaseparse.c:
+ baseparse: do not ignore TIME segments
+ TIME segments are being ignored and a standard initialized
+ segment is used instead. This causes issues as not properly detecting
+ reverse playback or not cliping output based on the segment.
+ This seems to be a regression from one of the GstSegment/GstEvent
+ redesigns on the 0.10 -> 1.0 transition
+
+2014-01-08 15:23:00 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/gstsegment.c:
+ segment: take offset into account in _to_position()
+ Take the offset into account when converting between running-time and
+ segment positions.
+
+2014-01-08 14:52:04 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * libs/gst/base/gstcollectpads.c:
+ collectpads: take offset into account for expected segment position
+ The firt valid segment position is start + offset.
+ Also add some more debug and a FIXME
+
+2014-01-13 08:37:37 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/libs/baseparse.c:
+ tests: baseparse: add test for reverse playback on passthrough
+ Baseparse stores buffers for reverse playback to push on the next
+ DISCONT, the issue was that it wouldn't ever check for a discont
+ on passthrough mode as it skips all real parsing. This test
+ was create to verify this issue and prevent it from happening again
+ https://bugzilla.gnome.org/show_bug.cgi?id=721941
+
+2014-01-11 10:49:17 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/Makefile.am:
+ * tests/check/libs/.gitignore:
+ * tests/check/libs/baseparse.c:
+ tests: baseparse: add basic test for baseparse
+ Just a small test to check that basic playback works
+
+2014-01-10 09:10:06 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * libs/gst/base/gstbaseparse.c:
+ baseparse: do not accumulate buffers on passthrough mode
+ If on passthrough during reverse playback, do not accumulate buffers as
+ baseparse will never check for DISCONT flag to push those buffers.
+ So just push buffers downstream as if it was forward playback.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721941
+
+2014-01-02 16:22:37 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * libs/gst/base/gstbaseparse.c:
+ baseparse: remove pending_segment as it was being misused
+ It wasn't required, instead baseparse was using it to check the media
+ caps to identify if it was handling audio or video.
+ The pending_segment was removed and a checked_media boolean
+ replaced it for a more accurate naming.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721350
+
+2014-01-02 13:43:54 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * libs/gst/base/gstbaseparse.c:
+ baseparse: push pending events before GAP event
+ A GAP event is handled as an empty buffer by sinks and they expect
+ to receive start up events before GAP events (like a segment).
+ This is important specially if there is a GAP at the beginning of
+ a stream (before any buffers) so that the segment event can be
+ pushed downstream before the GAP
+ https://bugzilla.gnome.org/show_bug.cgi?id=721350
+
+2014-01-02 13:41:25 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * libs/gst/base/gstbaseparse.c:
+ baseparse: refactor pending events pushing
+ Refactor code repeated 3 times to a common function
+ https://bugzilla.gnome.org/show_bug.cgi?id=721350
+
+2013-12-04 00:10:36 +0100 Sebastian Rasmussen <sebras@hotmail.com>
+
+ * docs/Makefile.am:
+ * docs/design/Makefile.am:
+ docs: add missing files for distribution
+ * add some documentation files in docs/design
+ * add docs/list-ulink.xsl so check in docs/manual works
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=719814
+
+2014-01-03 11:47:23 +0800 YanpingZhang <zhangyanping210@163.com>
+
+ * plugins/elements/gstmultiqueue.c:
+ multiqueue: Fix hanging if shut down while handling a serialized query
+ https://bugzilla.gnome.org/show_bug.cgi?id=721253
+
+2014-01-02 13:34:52 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/gst/gstpad.c:
+ pad: Add unit test for adding/removing blocking probes while a pad is blocked
+ And make sure that these new probes are actually called if they should
+ instead of silently blocking the pad forever.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721289
+
+2014-01-02 13:33:20 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gstpad.c:
+ pad: Check if new probes need to be called when adding/removing some
+ This allows blocking a pad, add a new blocking probe, removing
+ the first probe and then having the second probe called. Which
+ could then decide that data-flow should actually continue
+ instead of blocking now.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721289
+
+2014-01-02 11:13:27 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * plugins/elements/gsttee.c:
+ * plugins/elements/gsttee.h:
+ tee: Remove dyn lock
+ It was used for pad-alloc in 0.10 but currently is completely unused
+ and not necessary. All pad access is protected by the tee object lock
+ and keeping another reference to the current pad.
+
+2014-01-02 11:09:59 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * plugins/elements/gsttee.c:
+ tee: Keep another ref to our one and only srcpad around while pushing
+ A pad probe on that pad might otherwise just release the pad, drop
+ the last reference and cause great misery.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721300
+
+2013-12-30 19:03:22 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gstpad.c:
+ pad: Keep an extra ref of the pad when calling an IDLE probe immediately
+ The callback might destroy the pad.
+
+2013-12-30 18:44:24 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gstpad.c:
+ pad: Only call IDLE probes if we are actually idle
+ Also only check the data types for non-IDLE probes. When we
+ are idle, we have no data type obviously.
+ Previously we were calling IDLE probes during data flow whenever
+ a non-blocking probe would be called. The pad was usually not idle
+ at that time.
+
+2013-12-30 10:01:39 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/gstpad.c:
+ pad: Don't ignore probe callback return value when immediately calling IDLE probe
+ https://bugzilla.gnome.org/show_bug.cgi?id=721096
+
+2013-12-29 14:06:55 +0000 Pedro Côrte-Real <pedro@pedrocr.net>
+
+ * scripts/git-update.sh:
+ scripts: git-update.sh: fix for non-master branches
+ Pull from tracking branch instead of origin/master, so
+ that this works with e.g. 1.2 as well.
+
=== release 1.2.2 ===
-2013-12-26 Sebastian Dröge <slomo@coaxion.net>
+2013-12-26 17:34:18 +0100 Sebastian Dröge <sebastian@centricular.com>
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
* configure.ac:
- releasing 1.2.2
+ * docs/plugins/inspect/plugin-coreelements.xml:
+ * gstreamer.doap:
+ * win32/common/config.h:
+ * win32/common/gstversion.h:
+ Release 1.2.2
+
+2013-12-26 17:31:38 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * 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/hr.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
2013-12-26 16:44:57 +0100 Sebastian Dröge <sebastian@centricular.com>
diff --git a/Makefile.in b/Makefile.in
index a867bef..000ddda 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -969,9 +969,10 @@ distcheck: dist
&& $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
- && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ && ../configure \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
diff --git a/NEWS b/NEWS
index 0fe7f2d..ec134b1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,2 +1,2 @@
-This is GStreamer 1.2.2
+This is GStreamer 1.2.3
diff --git a/RELEASE b/RELEASE
index 27ff2fd..92a34ce 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,5 +1,5 @@
-Release notes for GStreamer 1.2.2
+Release notes for GStreamer 1.2.3
The GStreamer team is proud to announce a new bug-fix release
@@ -42,12 +42,15 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
Bugs fixed in this release
- * 712597 : regression: playbin: buffering of live radio stream never finishes
- * 719437 : ghostpad: Clearing ghostpad sticky events when switching targets causes regressions
- * 707230 : flacparse: disregards container timestamps
- * 712300 : gst-launch: exits with 0 error code even after an error occurred
- * 714989 : docs/gst-utils: Fix escaping of stream id format
- * 719575 : multiqueue: improve for adaptive scenario
+ * 712597 : multiqueue: regression: buffering of live radio stream never finishes
+ * 719814 : docs: add missing files for distribution
+ * 721253 : multiqueue: May cause hanging if shut down while handling a serialized query
+ * 721289 : pad: using multiple blocking probes doesn't work as expected
+ * 721300 : tee: Does not protect pad from being destroyed from pad probe during gst_pad_push()
+ * 721350 : baseparse: push pending events before GAP
+ * 721422 : Negative pad offsets don't work
+ * 721941 : baseparse: do not accumulate buffers on passthrough mode
+ * 722467 : pad: Leaks events when iterating sticky events and callback drops event
==== Download ====
@@ -84,12 +87,11 @@ subscribe to the gstreamer-devel list.
Contributors to this release
- * Mark Nauwelaerts
- * Olivier Crête
- * Philippe Normand
+ * Arnaud Vrac
+ * Pedro Côrte-Real
* Sebastian Dröge
* Sebastian Rasmussen
* Thiago Santos
- * Tim-Philipp Müller
* Wim Taymans
+ * YanpingZhang
  \ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index e0c623e..ab6ed47 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.14 -*- Autoconf -*-
+# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
@@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.14'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.14], [],
+m4_if([$1], [1.14.1], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,7 +51,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14])dnl
+[AM_AUTOMAKE_VERSION([1.14.1])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
diff --git a/common/Makefile.in b/common/Makefile.in
index 609765d..6b5b556 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 40efca5..0cd954e 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/configure b/configure
index 0e696f4..385130a 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 1.2.2.
+# Generated by GNU Autoconf 2.69 for GStreamer 1.2.3.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='GStreamer'
PACKAGE_TARNAME='gstreamer'
-PACKAGE_VERSION='1.2.2'
-PACKAGE_STRING='GStreamer 1.2.2'
+PACKAGE_VERSION='1.2.3'
+PACKAGE_STRING='GStreamer 1.2.3'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -1638,7 +1638,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures GStreamer 1.2.2 to adapt to many kinds of systems.
+\`configure' configures GStreamer 1.2.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1709,7 +1709,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer 1.2.2:";;
+ short | recursive ) echo "Configuration of GStreamer 1.2.3:";;
esac
cat <<\_ACEOF
@@ -1891,7 +1891,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer configure 1.2.2
+GStreamer configure 1.2.3
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2664,7 +2664,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GStreamer $as_me 1.2.2, which was
+It was created by GStreamer $as_me 1.2.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3645,7 +3645,7 @@ fi
# Define the identity of the package.
PACKAGE='gstreamer'
- VERSION='1.2.2'
+ VERSION='1.2.3'
cat >>confdefs.h <<_ACEOF
@@ -3855,9 +3855,9 @@ END
fi
- PACKAGE_VERSION_MAJOR=$(echo 1.2.2 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 1.2.2 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 1.2.2 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 1.2.3 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 1.2.3 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 1.2.3 | cut -d'.' -f3)
@@ -3868,7 +3868,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 1.2.2 | cut -d'.' -f4)
+ NANO=$(echo 1.2.3 | cut -d'.' -f4)
if test x"$NANO" = x || test "x$NANO" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -8520,10 +8520,10 @@ fi
done
- GST_CURRENT=202
+ GST_CURRENT=203
GST_REVISION=0
- GST_AGE=202
- GST_LIBVERSION=202:0:202
+ GST_AGE=203
+ GST_LIBVERSION=203:0:203
@@ -27562,7 +27562,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by GStreamer $as_me 1.2.2, which was
+This file was extended by GStreamer $as_me 1.2.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -27628,7 +27628,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-GStreamer config.status 1.2.2
+GStreamer config.status 1.2.3
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index b0fea85..0a42d62 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl initialize autoconf
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, git and prerelease does Werror too
dnl
-AC_INIT([GStreamer],[1.2.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
+AC_INIT([GStreamer],[1.2.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gstreamer])
AG_GST_INIT
dnl initialize automake (we require GNU make)
@@ -64,7 +64,7 @@ dnl 1.2.5 => 205
dnl 1.10.9 (who knows) => 1009
dnl
dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 202, 0, 202)
+AS_LIBTOOL(GST, 203, 0, 203)
dnl *** autotools stuff ****
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 27583ad..3f07d58 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -21,7 +21,7 @@ DIST_SUBDIRS = design gst libs plugins faq manual pwg slides xsl
EXTRA_DIST = \
manuals.mak htmlinstall.mak \
- image-png image-pdf image-eps url.entities version.entities.in
+ image-png image-pdf image-eps url.entities version.entities.in list-ulink.xsl
upload:
@if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 8068cfb..d44c5ef 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -490,7 +490,7 @@ SUBDIRS = design gst libs $(PLUGIN_DOCS_DIRS) $(SUBDIRS_DOCBOOK)
DIST_SUBDIRS = design gst libs plugins faq manual pwg slides xsl
EXTRA_DIST = \
manuals.mak htmlinstall.mak \
- image-png image-pdf image-eps url.entities version.entities.in
+ image-png image-pdf image-eps url.entities version.entities.in list-ulink.xsl
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-recursive
diff --git a/docs/design/Makefile.am b/docs/design/Makefile.am
index 5a0eda0..cb62c49 100644
--- a/docs/design/Makefile.am
+++ b/docs/design/Makefile.am
@@ -1,13 +1,18 @@
EXTRA_DIST = \
draft-klass.txt \
+ draft-metadata.txt \
draft-push-pull.txt \
draft-tagreading.txt \
+ draft-tracing.txt \
part-activation.txt \
part-buffering.txt \
+ part-bufferpool.txt \
+ part-buffer.txt \
part-caps.txt \
part-clocks.txt \
part-context.txt \
+ part-controller.txt \
part-conventions.txt \
part-dynamic.txt \
part-element-sink.txt \
@@ -23,12 +28,17 @@ EXTRA_DIST = \
part-gstpipeline.txt \
part-latency.txt \
part-live-source.txt \
+ part-memory.txt \
part-messages.txt \
+ part-meta.txt \
+ part-miniobject.txt \
part-missing-plugins.txt \
part-MT-refcounting.txt \
part-negotiation.txt \
part-overview.txt \
part-preroll.txt \
+ part-probes.txt \
+ part-progress.txt \
part-push-pull.txt \
part-qos.txt \
part-query.txt \
diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in
index 2c23947..fe17f8d 100644
--- a/docs/design/Makefile.in
+++ b/docs/design/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -422,13 +422,18 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = \
draft-klass.txt \
+ draft-metadata.txt \
draft-push-pull.txt \
draft-tagreading.txt \
+ draft-tracing.txt \
part-activation.txt \
part-buffering.txt \
+ part-bufferpool.txt \
+ part-buffer.txt \
part-caps.txt \
part-clocks.txt \
part-context.txt \
+ part-controller.txt \
part-conventions.txt \
part-dynamic.txt \
part-element-sink.txt \
@@ -444,12 +449,17 @@ EXTRA_DIST = \
part-gstpipeline.txt \
part-latency.txt \
part-live-source.txt \
+ part-memory.txt \
part-messages.txt \
+ part-meta.txt \
+ part-miniobject.txt \
part-missing-plugins.txt \
part-MT-refcounting.txt \
part-negotiation.txt \
part-overview.txt \
part-preroll.txt \
+ part-probes.txt \
+ part-progress.txt \
part-push-pull.txt \
part-qos.txt \
part-query.txt \
diff --git a/docs/design/draft-metadata.txt b/docs/design/draft-metadata.txt
new file mode 100644
index 0000000..aa84075
--- /dev/null
+++ b/docs/design/draft-metadata.txt
@@ -0,0 +1,201 @@
+Metadata
+--------
+
+This draft recaps the current metadata handling in GStreamer and proposes some
+additions.
+
+
+Supported Metadata standards
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The paragraphs below list supported native metadata standards sorted by type and
+then in alphabetical order. Some standards have been extended to support
+additional metadata. GStreamer already supports all of those to some extend.
+This is showns in the table below as either [--], [r-], [-w] or [rw] depending on
+read/write support (08.Feb.2010).
+
+Audio
+- mp3
+ ID3v2: [rw]
+ http://www.id3.org/Developer_Information
+ ID3v1: [rw]
+ http://www.id3.org/ID3v1
+ XMP: [--] (inside ID3v2 PRIV tag of owner XMP)
+ http://www.adobe.com/devnet/xmp/
+- ogg/vorbis
+ vorbiscomment: [rw]
+ http://www.xiph.org/vorbis/doc/v-comment.html
+ http://wiki.xiph.org/VorbisComment
+- wav
+ LIST/INFO chunk: [rw]
+ http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info
+ http://www.kk.iij4u.or.jp/~kondo/wave/mpidata.txt
+ XMP: [--]
+ http://www.adobe.com/devnet/xmp/
+
+Video
+- 3gp
+ {moov,trak}.udta: [rw]
+ http://www.3gpp.org/ftp/Specs/html-info/26244.htm
+ ID3V2: [--]
+ http://www.3gpp.org/ftp/Specs/html-info/26244.htm
+ http://www.mp4ra.org/specs.html#id3v2
+- avi
+ LIST/INFO chunk: [rw]
+ http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info
+ http://www.kk.iij4u.or.jp/~kondo/wave/mpidata.txt
+ XMP: [--] (inside "_PMX" chunk)
+ http://www.adobe.com/devnet/xmp/
+- asf
+ ??:
+ XMP: [--]
+ http://www.adobe.com/devnet/xmp/
+- flv [--]
+ XMP: (inside onXMPData script data tag)
+ http://www.adobe.com/devnet/xmp/
+- mkv
+ tags: [rw]
+ http://www.matroska.org/technical/specs/tagging/index.html
+- mov
+ XMP: [--] (inside moov.udta.XMP_ box)
+ http://www.adobe.com/devnet/xmp/
+- mp4
+ {moov,trak}.udta: [rw]
+ http://standards.iso.org/ittf/PubliclyAvailableStandards/c051533_ISO_IEC_14496-12_2008.zip
+ moov.udta.meta.ilst: [rw]
+ http://atomicparsley.sourceforge.net/
+ http://atomicparsley.sourceforge.net/mpeg-4files.html
+ ID3v2: [--]
+ http://www.mp4ra.org/specs.html#id3v2
+ XMP: [--] (inside UUID box)
+ http://www.adobe.com/devnet/xmp/
+- mxf
+ ??
+
+Images
+- gif
+ XMP: [--]
+ http://www.adobe.com/devnet/xmp/
+- jpg
+ jif: [rw] (only comments)
+ EXIF: [rw] (via metadata plugin)
+ http://www.exif.org/specifications.html
+ IPTC: [rw] (via metadata plugin)
+ http://www.iptc.org/IPTC4XMP/
+ XMP: [rw] (via metadata plugin)
+ http://www.adobe.com/devnet/xmp/
+- png
+ XMP: [--]
+ http://www.adobe.com/devnet/xmp/
+
+further Links:
+http://age.hobba.nl/audio/tag_frame_reference.html
+http://wiki.creativecommons.org/Tracker_CC_Indexing
+
+
+Current Metadata handling
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When reading files, demuxers or parsers extract the metadata. It will be sent
+a GST_EVENT_TAG to downstream elements. When a sink element receives a tag
+event, it will post a GST_MESSAGE_TAG message on the bus with the contents of
+the tag event.
+
+Elements receiving GST_EVENT_TAG events can mangle them, mux them into the
+buffers they send or just pass them through. Usually is muxers that will format
+the tag data into the form required by the format they mux. Such elements would
+also implement the GstTagSetter interface to receive tags from the application.
+
+ +----------+
+ | demux |
+ sink src --> GstEvent(tag) over GstPad to downstream element
+ +----------+
+
+ method call over GstTagSetter interface from application
+ |
+ v
+ +----------+
+ | mux |
+GstEvent(tag) over GstPad from upstream element --> sink src
+ +----------+
+
+The data used in all those interfaces is GstTagList. It is based on a
+GstStructure which is like a hash table with differently typed entries. The key
+is always a string/GQuark. Many keys are predefined in GStreamer core. More keys
+are defined in gst-plugins-base/gst-libs/gst/tag/tag.h.
+If elements and applications use predefined types, it is possible to transcode a
+file from one format into another while preserving all known and mapped
+metadata.
+
+
+Issues
+~~~~~~
+
+Unknown/Unmapped metadata
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Right now GStreamer can lose metadata when transcoding, remuxing content. This
+can happend as we don't map all metadata fields to generic ones.
+
+We should probably also add the whole metadata blob to the GstTagList. We would
+need a GST_TAG_SYSTEM_xxx define (e.g. GST_TAG_SYSTEM_ID3V2) for each standard.
+The content is not printable and should be treated as binary if not known. The
+tag is not mergeable - call gst_tag_register() with GstTagMergeFunc=NULL. Also
+the tag data is only useful for upstream elements, not for the application.
+
+A muxer would first scan a taglist for known system tags. Unknown tags are
+ignored as already. It would first populate its own metadata store with the
+entries from the system tag and the update the entries with the data in normal
+tags.
+
+Below is an initial list of tag systems:
+ID3V1 - GST_TAG_SYSTEM_ID3V1
+ID3V2 - GST_TAG_SYSTEM_ID3V2
+RIFF_INFO - GST_TAG_SYSTEM_RIFF_INFO
+XMP - GST_TAG_SYSTEM_XMP
+
+We would basically need this for each container format.
+
+See also https://bugzilla.gnome.org/show_bug.cgi?id=345352
+
+Lost metadata
+^^^^^^^^^^^^^
+
+A case slighly different from the previous is that when an application sets a
+GstTagList on a pipeline. Right elements consuming tags do not report which tags
+have been consumed. Especially when using elements that make metadata
+persistent, we have no means of knowing which of the tags made it into the
+target stream and which were not serialized. Ideally the application would like
+to know which kind of metadata is accepted by a pipleine to reflect that in the
+UI.
+
+Although it is in practise so that elements implementing GstTagSetter are the
+ones that serialize, this does not have to be so. Otherwise we could add a
+means to that interface, where elements add the tags they have serialized. The
+application could build one list from all the tag messages and then query all
+the serialized tags from tag-setters. The delta tells what has not been
+serialized.
+
+A different approach would be to query the list of supported tags in advance.
+This could be a query (GST_QUERY_TAG_SUPPORT). The query result could be a list
+of elements and their tags. As a convenience we could flatten the list of tags
+for the top-level element (if the query was sent to a bin) and add that.
+
+Tags are per Element
+^^^^^^^^^^^^^^^^^^^^
+
+In many cases we want tags per stream. Even metadata standards like mp4/3gp
+metadata supports that. Right now GST_MESSAGE_SRC(tags) is the element. We tried
+changing that to the pad, but that broke applications.
+Also we miss the symmetric functionality in GstTagSetter. This interface is
+usually implemented by elements.
+
+Open bugs
+^^^^^^^^^
+
+https://bugzilla.gnome.org/buglist.cgi?query_format=advanced;short_desc=tag;bug_status=UNCONFIRMED;bug_status=NEW;bug_status=ASSIGNED;bug_status=REOPENED;bug_status=NEEDINFO;short_desc_type=allwordssubstr;product=GStreamer
+
+Add GST_TAG_MERGE_REMOVE
+https://bugzilla.gnome.org/show_bug.cgi?id=560302
+
+
diff --git a/docs/design/draft-tracing.txt b/docs/design/draft-tracing.txt
new file mode 100644
index 0000000..39c20fb
--- /dev/null
+++ b/docs/design/draft-tracing.txt
@@ -0,0 +1,96 @@
+Tracing
+=======
+
+This subsystem will provide a mechanism to get structured tracing info from GStreamer
+applications. This can be used for post-run analysis as well as for live
+introspection.
+
+We are going to introduce a GstTracer object. There will be only a single instance
+per process or none if tracing is off (not enabled via envvar or compiled out).
+
+Certain GStreamer core function (such as gst_pad_push or gst_element_add_pad) will
+call into the tracer. The tracer will dispatch into loaded tracing plugins.
+Developers will be able to select a list of plugins by setting an environment
+variable, such as GST_TRACE="meminfo,dbus". When then plugins are loaded, they will
+add them to certain hooks. Another env var GST_TRACE_CHANNEL can be used to send
+the tracing to a file or a socket (Do the same for GST_DEBUG_CHANNEL). The syntax
+could be GST_XXX_CHANNEL=file:///path/to/file or GST_XXX_CHANNEL=tcp://<ip>:<port>.
+If no channel is set, the tracing goes to stderr like the debug logging.
+
+TODO(ensonic): we might want to have GST_{DEBUG|TRACE)_FORMAT envars as well. These
+could be raw, ansi-color, binary, ...
+
+Hooks
+-----
+e.g. gst_pad_push() will do add this line:
+GST_TRACER_PUSH_BUFFER (pad, buffer)
+
+If tracing is disable at compile time the macro will evaluate to nothing. Otherwise
+it will become something along the lines of:
+if (__tracer) {
+ gst_tracer_push_buffer (pad, buffer);
+}
+
+In addition to api hooks we should also provide timer hooks. Interval timers are
+useful to get e.g. resource usage snapshots. Also absolute timers might make sense.
+
+Plugins can attach handlers to one or more hooks. When a hook such as
+gst_tracer_push_buffer () is called it will take a timestamp and call all attached
+handlers. Hooks will be called from misc threads. The trace plugins should only
+consume the provided data. Most trace plugins will log data to a trace channel.
+
+
+TODO(ensonic): use GSignal for the hooks?
+
+Plugins
+=======
+
+meminfo
+-------
+- register to an interval-timer hook.
+- call mallinfo() and log memory usage
+
+rusage
+------
+- register to an interval-timer hook.
+- call getrusage() and log resource usage
+
+dbus
+----
+- provide a dbus iface to announce applications that are traced
+- tracing UIs can use the dbus iface to find the channels where logging and tracing
+ is getting logged to, one would start the tracing UI first and when the
+ application is started with tracing activated, the dbus plugin will announce the
+ new application, upon which the tracing UI can start reading from the log channels
+
+topology
+--------
+- register to pipeline topology hooks
+- tracing UIs can show a live pipeline graph
+
+communication
+-------------
+- register to buffer, event, message and query flow
+- tracing apps can do e.g. statistics
+
+UI
+==
+
+gst-debug-viewer
+----------------
+gst-debug-viewer could be given the tracelog in addition to the debug log.
+Alternatively it would show a dialog that shows all local apps (if the dbus plugin
+is loaded) and read the log streams from the sockets/files that are configured for
+the app.
+
+gst-trace-stats
+---------------
+Such a tool could read a trace and summarize the content like gst-tracelib did for
+stats in 0.10.
+
+
+Problems / Open items
+=====================
+- when connecting to a running app, we cant easily get the 'current' state if logging
+is using a socket, as past events are not stored
+
diff --git a/docs/design/part-buffer.txt b/docs/design/part-buffer.txt
new file mode 100644
index 0000000..6df980d
--- /dev/null
+++ b/docs/design/part-buffer.txt
@@ -0,0 +1,160 @@
+GstBuffer
+---------
+
+This document describes the design for buffers.
+
+A GstBuffer is the object that is passed from an upstream element to a
+downstream element and contains memory and metadata information.
+
+Requirements
+~~~~~~~~~~~~
+
+ - It must be fast
+ * allocation, free, low fragmentation
+ - Must be able to attach multiple memory blocks to the buffer
+ - Must be able to attach artibtrary metadata to buffers
+ - efficient handling of subbuffer, copy, span, trim
+
+Lifecycle
+~~~~~~~~~
+
+GstMemory extends from GstMiniObject and therefore uses its lifecycle
+management (See part-miniobject.txt).
+
+Writability
+~~~~~~~~~~~
+
+When a Buffers is writable as returned from gst_buffer_is_writable():
+
+ - metadata can be added/removed and the metadata can be changed
+ - GstMemory blocks can be added/removed
+
+The individual memory blocks have their own locking and READONLY flags
+that might influence their writability.
+
+Buffers can be made writable with gst_buffer_make_writable(). This will copy the
+buffer with the metadata and will ref the memory in the buffer. This means that
+the memory is not automatically copied when copying buffers.
+
+
+Managing GstMemory
+------------------
+
+A GstBuffer contains an array of pointers to GstMemory objects.
+
+When the buffer is writable, gst_buffer_insert_memory() can be used to add a
+new GstMemory object to the buffer. When the array of memory is full, memory
+will be merged to make room for the new memory object.
+
+gst_buffer_n_memory() is used to get the amount of memory blocks on the
+GstBuffer.
+
+With gst_buffer_peek_memory(), memory can be retrieved from the memory array.
+The desired access pattern for the memory block should be specified so that
+appropriate checks can be made and, in case of GST_MAP_WRITE, a writable copy
+can be constructed when needed.
+
+gst_buffer_remove_memory_range() and gst_buffer_remove_memory() can be used to
+remove memory from the GstBuffer.
+
+
+Subbuffers
+----------
+
+Subbuffers are made by copying only a region of the memory blocks and copying
+all of the metadata.
+
+
+Span
+----
+
+Spanning will merge together the data of 2 buffers into a new buffer
+
+
+Data access
+-----------
+
+ Accessing the data of the buffer can happen by retrieving the individual
+ GstMemory objects in the GstBuffer or my using the gst_buffer_map() and
+ gst_buffer_unmap() function.
+
+ The _map and _unmap function will always return the memory of all blocks as one
+ large contiguous region of memory. Using the _map and _unmap function might be
+ more convenient than accessing the individual memory blocks at the expense of
+ being more expensive because it might perform memcpy operations.
+
+ For buffers with only one GstMemory object (the most common case), _map and
+ _unmap have no performance penalty at all.
+
+
+* Read access with 1 memory block
+
+ The memory block is accessed and mapped for read access.
+ The memory block is unmapped after usage
+
+* write access with 1 memory block
+
+ The buffer should be writable or this operation will fail..
+ The memory block is accessed. If the memory block is readonly, a copy is made
+ and the original memory block is replaced with this copy. then the memory
+ block is mapped in write mode.
+ The memory block is unmapped after usage.
+
+* Read access with multiple memory blocks
+
+ The memory blocks are combined into one large memory block. If the buffer is
+ writable, The memory blocks are replace with this new memory block. If the
+ buffer is not writable, the memory is returned as is.
+ The memory block is then mapped in read mode.
+
+ When the memory is unmapped after usage and the buffer has multiple memory
+ blocks, this means that the map operation was not able to store the combined
+ buffer and it thus returned memory that should be freed. Otherwise, the memory
+ is unmapped.
+
+* Write access with multiple memory blocks
+
+ The buffer should be writable or the operation fails. The memory blocks are
+ combined into one large memory block and the existing blocks are replaced with
+ this new block. The memory is then mapped in write mode.
+ The memory is unmapped after usage.
+
+
+Use cases
+---------
+
+Generating RTP packets from h264 video
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+We receive as input a GstBuffer with an encoded h264 image and we need to
+create RTP packets containing this h264 data as the payload. We typically need
+to fragment the h264 data into multiple packets, each with their own RTP and
+payload specific header.
+
+ +-------+-------+---------------------------+--------+
+ input H264 buffer: | NALU1 | NALU2 | ..... | NALUx |
+ +-------+-------+---------------------------+--------+
+ |
+ V
+ array of +-+ +-------+ +-+ +-------+ +-+ +-------+
+ output buffers: | | | NALU1 | | | | NALU2 | .... | | | NALUx |
+ +-+ +-------+ +-+ +-------+ +-+ +-------+
+ : : : :
+ \-----------/ \-----------/
+ buffer 1 buffer 2
+
+The output buffer array consists of x buffers consisting of an RTP payload header
+and a subbuffer of the original input H264 buffer. Since the rtp headers and
+the h264 data don't need to be contiguous in memory, they are added to the buffer
+as separate GstMemory blocks and we can avoid to memcpy the h264 data into
+contiguous memory.
+
+A typical udpsink will then use something like sendmsg to send the memory regions
+on the network inside one UDP packet. This will further avoid having to memcpy
+data into contiguous memory.
+
+Using bufferlists, the complete array of output buffers can be pushed in one
+operation to the peer element.
+
+
+
diff --git a/docs/design/part-bufferpool.txt b/docs/design/part-bufferpool.txt
new file mode 100644
index 0000000..46b1a34
--- /dev/null
+++ b/docs/design/part-bufferpool.txt
@@ -0,0 +1,377 @@
+Bufferpool
+----------
+
+This document details the design of how buffers are be allocated and
+managed in pools.
+
+Bufferpools increases performance by reducing allocation overhead and
+improving possibilities to implement zero-copy memory transfer.
+
+Together with the ALLOCATION query, elements can negotiate allocation properties
+and bufferpools between themselves. This also allows elements to negotiate
+buffer metadata between themselves.
+
+Requirements
+------------
+
+ - Provide a GstBufferPool base class to help the efficient implementation of a
+ list of reusable GstBuffer objects.
+
+ - Let upstream elements initiate the negotiation of a bufferpool and its
+ configuration. Allow downstream elements provide bufferpool properties and/or
+ a bufferpool. This includes the following properties:
+
+ * have minimum and maximum amount of buffers with the option of
+ preallocating buffers.
+ * allocator, alignment and padding support
+ * buffer metadata
+ * arbitrary extra options
+
+ - Integrate with dynamic caps renegotiation.
+
+ - Notify upstream element of new bufferpool availability. This is important
+ when a new element, that can provide a bufferpool, is dynamically linked
+ downstream.
+
+
+GstBufferPool
+-------------
+
+ The bufferpool object manages a list of buffers with the same properties such
+ as size, padding and alignment.
+
+ The bufferpool has two states: active and inactive. In the in-active
+ state, the bufferpool can be configured with the required allocation
+ preferences. In the active state, buffers can be retrieved from and
+ returned to the pool.
+
+ The default implementation of the bufferpool is able to allocate buffers
+ from any allocator with arbitrary alignment and padding/prefix.
+
+ Custom implementations of the bufferpool can override the allocation and
+ free algorithms of the buffers from the pool. This should allow for
+ different allocation strategies such as using shared memory or hardware
+ mapped memory.
+
+
+Negotiation
+-----------
+
+ After a particular media format has been negotiated between two pads (using the
+ CAPS event), they must agree on how to allocate buffers.
+
+ The srcpad will always take the initiative to negotiate the allocation
+ properties. It starts with creating a GST_QUERY_ALLOCATION with the negotiated
+ caps.
+
+ The srcpad can set the need-pool flag to TRUE in the query to optionally make the
+ peer pad allocate a bufferpool. It should only do this if it is able to use
+ the peer provided bufferpool.
+
+ It will then inspect the returned results and configure the returned pool or
+ create a new pool with the returned properties when needed.
+
+ Buffers are then allocated by the srcpad from the negotiated pool and pushed to
+ the peer pad as usual.
+
+ The allocation query can also return an allocator object when the buffers are of
+ different sizes and can't be allocated from a pool.
+
+
+Allocation query
+----------------
+
+ The allocation query has the following fields:
+
+ (in) "caps", GST_TYPE_CAPS
+ - the caps that was negotiated
+
+ (in) "need-pool", G_TYPE_BOOLEAN
+ - if a GstBufferPool is requested
+
+ (out) "pool", G_TYPE_ARRAY of structure
+ - an array of pool configurations.
+
+ struct {
+ GstBufferPool *pool;
+ guint size;
+ guint min_buffers;
+ guint max_buffers;
+ }
+
+ use gst_query_parse_nth_allocation_pool() to get the values.
+
+ The allocator can contain multiple pool configurations. If need-pool
+ was TRUE, the pool member might contain a GstBufferPool when the
+ downstream element can provide one.
+
+ Size contains the size of the bufferpool buffers and is never 0.
+
+ min_buffers and max_buffers contain the suggested min and max amount of
+ buffers that should be managed by the pool.
+
+ The upstream element can choose to use the provided pool or make its own
+ pool when none was provided or when the suggested pool was not
+ acceptable.
+
+ The pool can then be configured with the suggested min and max amount of
+ buffers or a downstream element might choose different values.
+
+ (out) "allocator", G_TYPE_ARRAY of structure
+ - an array of allocator parameters that can be used.
+
+ struct {
+ GstAllocator *allocator;
+ GstAllocationParams params;
+ }
+
+ use gst_query_parse_nth_allocation_param() to get the values
+
+ The element performing the query can use the allocators and its
+ parameters to allocate memory for the downstream element.
+
+ It is also possible to configure the allocator in a provided pool.
+
+ (out) "metadata", G_TYPE_ARRAY of structure
+ - an array of metadata params that can be accepted.
+
+ struct {
+ GType api;
+ GstStructure *params;
+ }
+
+ Use gst_query_parse_nth_allocation_meta() to get the values.
+
+ These metadata items can be accepted by the downstream element when
+ placed on buffers. There is also an arbitrary GstStructure associated
+ with the metadata that contains metadata specific options.
+
+ Some bufferpools have options to enable metadata on the buffers
+ allocated by the pool.
+
+
+Allocating from pool
+--------------------
+
+ Buffers are allocated from the pool of a pad:
+
+ res = gst_buffer_pool_acquire_buffer (pool, &buffer, &params);
+
+ A GstBuffer that is allocated from the pool will always be writable (have a
+ refcount of 1) and it will also have its pool member point to the GstBufferPool
+ that created the buffer.
+
+ Buffers are refcounted in the usual way. When the refcount of the buffer
+ reaches 0, the buffer is automatically returned to the pool.
+
+ Since all the buffers allocated from the pool keep a reference to the pool,
+ when nothing else is holding a refcount to the pool, it will be finalized
+ when all the buffers from the pool are unreffed. By setting the pool to
+ the inactive state we can drain all buffers from the pool.
+
+ When the pool is in the inactive state, gst_buffer_pool_acquire_buffer() will
+ return GST_FLOW_FLUSHING immediately.
+
+ Extra parameters can be given to the gst_buffer_pool_acquire_buffer() method to
+ influence the allocation decision. GST_BUFFER_POOL_FLAG_KEY_UNIT and
+ GST_BUFFER_POOL_FLAG_DISCONT serve as hints.
+
+ When the bufferpool is configured with a maximum number of buffers, allocation
+ will block when all buffers are outstanding until a buffer is returned to the
+ pool. This behaviour can be changed by specifying the
+ GST_BUFFER_POOL_FLAG_DONTWAIT flag in the parameters. With this flag set,
+ allocation will return GST_FLOW_EOS when the pool is empty.
+
+
+Renegotiation
+-------------
+
+Renegotiation of the bufferpool might need to be performed when the
+configuration of the pool changes. Changes can be in the buffer size (because
+of a caps change), alignment or number of buffers.
+
+* downstream
+
+ When the upstream element wants to negotiate a new format, it might need
+ to renegotiate a new bufferpool configuration with the downstream element.
+ This can, for example, happen when the buffer size changes.
+
+ We can not just reconfigure the existing bufferpool because there might
+ still be outstanding buffers from the pool in the pipeline. Therefore we
+ need to create a new bufferpool for the new configuration while we let the
+ old pool drain.
+
+ Implementations can choose to reuse the same bufferpool object and wait for
+ the drain to finish before reconfiguring the pool.
+
+ The element that wants to renegotiate a new bufferpool uses exactly the same
+ algorithm as when it first started. It will negotiate caps first then use the
+ ALLOCATION query to get and configure the new pool.
+
+* upstream
+
+ When a downstream element wants to negotiate a new format, it will send a
+ RECONFIGURE event upstream. This instructs upstream to renegotiate both
+ the format and the bufferpool when needed.
+
+ A pipeline reconfiguration is when new elements are added or removed from
+ the pipeline or when the topology of the pipeline changes. Pipeline
+ reconfiguration also triggers possible renegotiation of the bufferpool and
+ caps.
+
+ A RECONFIGURE event tags each pad it travels on as needing reconfiguration.
+ The next buffer allocation will then require the renegotiation or
+ reconfiguration of a pool.
+
+
+Shutting down
+-------------
+
+ In push mode, a source pad is responsible for setting the pool to the
+ inactive state when streaming stops. The inactive state will unblock any pending
+ allocations so that the element can shut down.
+
+ In pull mode, the sink element should set the pool to the inactive state when
+ shutting down so that the peer _get_range() function can unblock.
+
+ In the inactive state, all the buffers that are returned to the pool will
+ automatically be freed by the pool and new allocations will fail.
+
+
+Use cases
+---------
+
+1) videotestsrc ! xvimagesink
+
+ Before videotestsrc can output a buffer, it needs to negotiate caps and
+ a bufferpool with the downstream peer pad.
+
+ First it will negotiate a suitable format with downstream according to the
+ normal rules. It will send a CAPS event downstream with the negotiated
+ configuration.
+
+ Then it does an ALLOCATION query. It will use the returned bufferpool or
+ configures its own bufferpool with the returned parameters. The bufferpool is
+ initially in the inactive state.
+
+ The ALLOCATION query lists the desired configuration of the downstream
+ xvimagesink, which can have specific alignment and/or min/max amount of
+ buffers.
+
+ videotestsrc updates the configuration of the bufferpool, it will likely
+ set the min buffers to 1 and the size of the desired buffers. It then
+ updates the bufferpool configuration with the new properties.
+
+ When the configuration is successfully updated, videotestsrc sets the
+ bufferpool to the active state. This preallocates the buffers in the pool
+ (if needed). This operation can fail when there is not enough memory
+ available. Since the bufferpool is provided by xvimagesink, it will allocate
+ buffers backed by an XvImage and pointing to shared memory with the X server.
+
+ If the bufferpool is successfully activated, videotestsrc can acquire a
+ buffer from the pool, fill in the data and push it out to xvimagesink.
+
+ xvimagesink can know that the buffer originated from its pool by following
+ the pool member.
+
+ when shutting down, videotestsrc will set the pool to the inactive state,
+ this will cause further allocations to fail and currently allocated buffers
+ to be freed. videotestsrc will then free the pool and stop streaming.
+
+
+2) videotestsrc ! queue ! myvideosink
+
+ In this second use case we have a videosink that can at most allocate
+ 3 video buffers.
+
+ Again videotestsrc will have to negotiate a bufferpool with the peer
+ element. For this it will perform the ALLOCATION query which
+ queue will proxy to its downstream peer element.
+
+ The bufferpool returned from myvideosink will have a max_buffers set to 3.
+ queue and videotestsrc can operate with this upper limit because none of
+ those elements require more than that amount of buffers for temporary
+ storage.
+
+ The bufferpool of myvideosink will then be configured with the size of the
+ buffers for the negotiated format and according to the padding and alignment
+ rules. When videotestsrc sets the pool to active, the 3 video
+ buffers will be preallocated in the pool.
+
+ videotestsrc acquires a buffer from the configured pool on its srcpad and
+ pushes this into the queue. When the videotestsrc has acquired and pushed
+ 3 frames, the next call to gst_buffer_pool_acquire_buffer() will block
+ (assuming the GST_BUFFER_POOL_FLAG_DONTWAIT is not specified).
+
+ When the queue has pushed out a buffer and the sink has rendered it, the
+ refcount of the buffer reaches 0 and the buffer is recycled in the pool.
+ This will wake up the videotestsrc that was blocked, waiting for more
+ buffers and will make it produce the next buffer.
+
+ In this setup, there are at most 3 buffers active in the pipeline and
+ the videotestsrc is rate limited by the rate at which buffers are recycled
+ in the bufferpool.
+
+ When shutting down, videotestsrc will first set the bufferpool on the srcpad
+ to inactive. This causes any pending (blocked) acquire to return with a
+ FLUSHING result and causes the streaming thread to pause.
+
+
+3) .. ! myvideodecoder ! queue ! fakesink
+
+ In this case, the myvideodecoder requires buffers to be aligned to 128
+ bytes and padded with 4096 bytes. The pipeline starts out with the
+ decoder linked to a fakesink but we will then dynamically change the
+ sink to one that can provide a bufferpool.
+
+ When it negotiates the size with the downstream element fakesink, it will
+ receive a NULL bufferpool because fakesink does not provide a bufferpool.
+ It will then select its own custom bufferpool to start the datatransfer.
+
+ At some point we block the queue srcpad, unlink the queue from the
+ fakesink, link a new sink and set the new sink to the PLAYING state.
+ Linking the new sink would automatically send a RECONFIGURE event upstream
+ and, through queue, inform myvideodecoder that it should renegotiate its
+ bufferpool because downstream has been reconfigured.
+
+ Before pushing the next buffer, myvideodecoder would renegotiate a new
+ bufferpool. To do this, it performs the usual bufferpool negotiation
+ algorithm. If it can obtain and configure a new bufferpool from downstream,
+ it sets its own (old) pool to inactive and unrefs it. This will eventually
+ drain and unref the old bufferpool.
+
+ The new bufferpool is set as the new bufferpool for the srcpad and sinkpad
+ of the queue and set to the active state.
+
+
+4) .. ! myvideodecoder ! queue ! myvideosink
+
+ myvideodecoder has negotiated a bufferpool with the downstream myvideosink
+ to handle buffers of size 320x240. It has now detected a change in the
+ video format and need to renegotiate to a resolution of 640x480. This
+ requires it to negotiate a new bufferpool with a larger buffersize.
+
+ When myvideodecoder needs to get the bigger buffer, it starts the
+ negotiation of a new bufferpool. It queries a bufferpool from downstream,
+ reconfigures it with the new configuration (which includes the bigger buffer
+ size) and it then sets the bufferpool to active. The old pool is inactivated
+ and unreffed, which causes the old format to drain.
+
+ It then uses the new bufferpool for allocating new buffers of the new
+ dimension.
+
+ If at some point, the decoder wants to switch to a lower resolution again,
+ it can choose to use the current pool (which has buffers that are larger
+ than the required size) or it can choose to renegotiate a new bufferpool.
+
+
+5) .. ! myvideodecoder ! videoscale ! myvideosink
+
+ myvideosink is providing a bufferpool for upstream elements and wants to
+ change the resolution.
+
+ myvideosink sends a RECONFIGURE event upstream to notify upstream that a
+ new format is desirable. upstream elements try to negotiate a new format
+ and bufferpool before pushing out a new buffer. The old bufferpools are
+ drained in the regular way.
+
diff --git a/docs/design/part-controller.txt b/docs/design/part-controller.txt
new file mode 100644
index 0000000..9476092
--- /dev/null
+++ b/docs/design/part-controller.txt
@@ -0,0 +1,67 @@
+Controller
+----------
+
+The controller subsystem allows to automate element property changes. It works
+so that all parameter changes are time based and elements request property
+updates at processing time.
+
+Element view
+~~~~~~~~~~~~
+Elements don't need to do much. They need to:
+- mark object properties that can be changed while processing with
+ GST_PARAM_CONTROLLABLE
+- call gst_object_sync_values (self, timestamp) in the processing function
+ before accessing the parameters.
+
+All ordered property types can be automated (int, double, boolean, enum). Other
+property types can be automates as well by using special control bindings. One can
+e.g. write a control-binding that updates a text property based on timestamps.
+
+Application view
+~~~~~~~~~~~~~~~~
+Applications need to setup the property automation. For that they need to create
+a GstControlSource and attach it to a property using GstControlBinding. Various
+control-sources and control-bindings exist. All control sources produce control
+value sequences in the form of gdouble values. The control bindings map them to
+the value range and type of the bound property.
+
+One control-source can be attached to one or more properties at the same time.
+If it is attached multiple times, then each control-binding will scale and
+convert the control values to the target property type and range.
+
+One can create complex control-curves by using a GstInterpolationControlSource.
+This allows the classic user editable control-curve (often seen in audio/video
+editors). Another way is to use computed control curves. GstLFOControlSource can
+generate various repetitive signals. Those can be made more complex by chaining
+the control sources. One can attach another control-source to e.g. modulate the
+frequency of the first GstLFOControlSource.
+
+In most cases GstControlBindingDirect will be the binding to be used. Other
+control bindings are there to handle special cases, such as having 1-4 control-
+sources and combine their values into a single guint to control a rgba-color
+property.
+
+
+TODO
+~~~~
+control-source value ranges
+- control sources should ideally emit values between [0.0 and 1.0]
+- right now lfo-control-sources emits values between [-1.0 and 1.0]
+- we can make control-sources announce that or fix it in a lfo2-control-source
+
+ranged-control-binding
+- it might be a nice thing to have a control-binding that has scale and offset
+ properties
+- when attaching a contro-source to e.g. volume one needs to be aware that the values
+ go from [0.0 to 4.0]
+- we can also have a "mapping-mode"={AS_IS, TRANSFORMED} on direct-control-binding
+ and two extra properties that are used in TRANSFORMED mode
+
+control-setup descriptions
+- it would be nice to have a way to parse a textual control-setup description. This
+ could be used in gst-launch and in presets. It needs to be complemented with a
+ formatter (for the preset storage or e.g. for debug logging).
+- this could be function-style:
+ direct(control-source=lfo(waveform='sine',offset=0.5))
+ or gst-launch style (looks weird)
+ lfo wave=sine offset=0.5 ! direct .control-source
diff --git a/docs/design/part-memory.txt b/docs/design/part-memory.txt
new file mode 100644
index 0000000..681ac04
--- /dev/null
+++ b/docs/design/part-memory.txt
@@ -0,0 +1,169 @@
+GstMemory
+---------
+
+This document describes the design of the memory objects.
+
+GstMemory objects are usually added to GstBuffer objects and contain the
+multimedia data passed around in the pipeline.
+
+Requirements
+~~~~~~~~~~~~
+
+ - It must be possible to have different memory allocators
+ - It must be possible to efficiently share memory objects, copy, span
+ and trim.
+
+
+Memory layout
+~~~~~~~~~~~~~
+
+ GstMemory manages a memory region. The accesible part of the managed region is
+ defined by an offset relative to the start of the region and a size. This
+ means that the managed region can be larger than what is visible to the user of
+ GstMemory API.
+
+ Schematically, GstMemory has a pointer to a memory region of _maxsize_. The area
+ starting from _offset_ and _size_ is accessible.
+
+ memory
+ GstMemory ->*----------------------------------------------------*
+ ^----------------------------------------------------^
+ maxsize
+ ^--------------------------------------^
+ offset size
+
+ The current properties of the accessible memory can be retrieved with:
+
+ gsize gst_memory_get_sizes (GstMemory *mem, gsize *offset, gsize *maxsize);
+
+ The offset and size can be changed with:
+
+ void gst_memory_resize (GstMemory *mem, gssize offset, gsize size);
+
+
+Allocators
+~~~~~~~~~~
+
+ GstMemory objects are created by allocators. Allocators are a subclass
+ of GstObject and can be subclassed to make custom allocators.
+
+ struct _GstAllocator {
+ GstObject object;
+
+ const gchar *mem_type;
+
+ GstMemoryMapFunction mem_map;
+ GstMemoryUnmapFunction mem_unmap;
+
+ GstMemoryCopyFunction mem_copy;
+ GstMemoryShareFunction mem_share;
+ GstMemoryIsSpanFunction mem_is_span;
+ };
+
+ The allocator class has 2 virtual methods. One to create a GstMemory,
+ another to free it again.
+
+ struct _GstAllocatorClass {
+ GstObjectClass object_class;
+
+ GstMemory * (*alloc) (GstAllocator *allocator, gsize size,
+ GstAllocationParams *params);
+ void (*free) (GstAllocator *allocator, GstMemory *memory);
+ };
+
+
+ Allocators are refcounted. It is also possible to register the allocator to the
+ GStreamer system. This way, the allocator can be retrieved by name.
+
+ After an allocator is created, new GstMemory can be created with
+
+ GstMemory * gst_allocator_alloc (const GstAllocator * allocator,
+ gsize size,
+ GstAllocationParams *params);
+
+ GstAllocationParams contain extra info such as flags, alignment, prefix and
+ padding.
+
+ The GstMemory object is a refcounted object that must be freed with
+ gst_memory_unref ().
+
+ The GstMemory keeps a ref to the allocator that allocated it. Inside the
+ allocator are the most common GstMemory operations listed. Custom
+ GstAllocator implementations must implement the various operations on
+ the memory they allocate.
+
+ It is also possible to create a new GstMemory object that wraps existing
+ memory with:
+
+ GstMemory * gst_memory_new_wrapped (GstMemoryFlags flags,
+ gpointer data, gsize maxsize,
+ gsize offset, gsize size,
+ gpointer user_data,
+ GDestroyNotify notify);
+
+Lifecycle
+~~~~~~~~~
+
+GstMemory extends from GstMiniObject and therefore uses its lifecycle
+management (See part-miniobject.txt).
+
+
+
+Data Access
+~~~~~~~~~~~
+
+ Access to the memory region is always controlled with a map and unmap method
+ call. This allows the implementation to monitor the access patterns or set up
+ the required memory mappings when needed.
+
+ The access of the memory object is controlled with the locking mechanism on
+ GstMiniObject (See part-miniobject.txt).
+
+ Mapping a memory region requires the caller to specify the access method: READ
+ and/or WRITE. Mapping a memory region will first try to get a lock on the
+ memory in the requested access mode. This means that the map operation can
+ fail when WRITE access is requested on a non-writable memory object (it has
+ an exclusive counter > 1, the memory is already locked in an incompatible
+ access mode or the memory is marked readonly).
+
+ After the data has been accessed in the object, the unmap call must be
+ performed, which will unlock the memory again.
+
+ It is allowed to recusively map multiple times with the same or narrower
+ access modes. for each of the map calls, an corresponding unmap call needs to
+ be made. WRITE-only memory cannot be mapped in READ mode and READ-only memory
+ cannot be mapped in WRITE mode.
+
+ The memory pointer returned from the map call is guaranteed to remain valid in
+ the requested mapping mode until the corresponding unmap call is performed on
+ the pointer.
+
+ When multiple map operations are nested and return the same pointer, the pointer
+ is valid until the last unmap call is done.
+
+ When the final reference on a memory object is dropped, all outstanding
+ mappings should have been unmapped.
+
+ Resizing a GstMemory does not influence any current mappings an any way.
+
+Copy
+~~~~
+
+ A GstMemory copy can be made with the gst_memory_copy() call. Normally,
+ allocators will implement a custom version of this function to make a copy of
+ the same kind of memory as the original one.
+
+ This is what the fallback version of the copy function will do, albeit slower
+ than what as custom implementation could do.
+
+ The copy operation is only required to copy the visible range of the memory
+ block.
+
+
+Share
+~~~~~
+
+ A memory region can be shared between GstMemory object with the
+ gst_memory_share() operation.
+
+
diff --git a/docs/design/part-meta.txt b/docs/design/part-meta.txt
new file mode 100644
index 0000000..55a1ffd
--- /dev/null
+++ b/docs/design/part-meta.txt
@@ -0,0 +1,396 @@
+GstMeta
+-------
+
+This document describes the design for arbitrary per-buffer metadata.
+
+Buffer metadata typically describes the lowlevel properties of the buffer
+content. These properties are typically not negotiated with caps but they are
+negotiated in the bufferpools.
+
+Some examples of metadata:
+
+ - interlacing information
+ - video alignment, cropping, panning information
+ - extra container information such as granulepos, ...
+ - extra global buffer properties
+
+
+Requirements
+~~~~~~~~~~~~
+
+ - It must be fast
+ * allocation, free, low fragmentation
+ * access to the metadata fields, preferably not much slower than directly
+ accessing a C structure field
+ - It must be extensible. Elements should be able to add new arbitrary metadata
+ without requiring much effort. Also new metadata fields should not break API
+ or ABI.
+ - It plays nice with subbuffers. When a subbuffer is created, the various
+ buffer metadata should be copied/updated correctly.
+ - We should be able to negotiate metadata between elements
+
+Use cases
+---------
+
+ * Video planes
+
+ Video data is sometimes allocated in non-contiguous planes for the Y and the UV
+ data. We need to be able to specify the data on a buffer using multiple
+ pointers in memory. We also need to be able to specify the stride for these
+ planes.
+
+ * Extra buffer data
+
+ Some elements might need to store extra data for a buffer. This is typically
+ done when the resources are allocated from another subsystem such as OMX or
+ X11.
+
+ * Processing information
+
+ Pan and crop information can be added to the buffer data when the downstream
+ element can understand and use this metadata. An imagesink can, for example,
+ use the pan and cropping formation when it blits the image on the screen
+ with little overhead.
+
+
+GstMeta
+~~~~~~~
+
+A GstMeta is a structure as follows:
+
+ struct _GstMeta {
+ GstMetaFlags flags;
+ const GstMetaInfo *info; /* tag and info for the meta item */
+ };
+
+The purpose of the this structure is to serve as a common header for all metadata
+information that we can attach to a buffer. Specific metadata, such as timing metadata,
+will have this structure as the first field. For example:
+
+ struct _GstMetaTiming {
+ GstMeta meta; /* common meta header */
+
+ GstClockTime dts; /* decoding timestamp */
+ GstClockTime pts; /* presentation timestamp */
+ GstClockTime duration; /* duration of the data */
+ GstClockTime clock_rate; /* clock rate for the above values */
+ };
+
+Or another example for the video memory regions that consists of both fields and
+methods.
+
+
+ #define GST_VIDEO_MAX_PLANES 4
+
+ struct GstMetaVideo {
+ GstMeta meta;
+
+ GstBuffer *buffer;
+
+ GstVideoFlags flags;
+ GstVideoFormat format;
+ guint id
+ guint width;
+ guint height;
+
+ guint n_planes;
+ gsize offset[GST_VIDEO_MAX_PLANES]; /* offset in the buffer memory region of the
+ * first pixel. */
+ gint stride[GST_VIDEO_MAX_PLANES]; /* stride of the image lines. Can be negative when
+ * the image is upside-down */
+
+ gpointer (*map) (GstMetaVideo *meta, guint plane, gpointer * data, gint *stride,
+ GstMapFlags flags);
+ gboolean (*unmap) (GstMetaVideo *meta, guint plane, gpointer data);
+ };
+
+ gpointer gst_meta_video_map (GstMetaVideo *meta, guint plane, gpointer * data,
+ gint *stride, GstMapflags flags);
+ gboolean gst_meta_video_unmap (GstMetaVideo *meta, guint plane, gpointer data);
+
+GstMeta derived structures define the API of the metadata. The API can consist of
+fields and/or methods. It is possible to have different implementations for the
+same GstMeta structure.
+
+The implementation of the GstMeta api would typically add more fields to the
+public structure that allow it to implement the API.
+
+GstMetaInfo will point to more information about the metadata and looks like this:
+
+ struct _GstMetaInfo {
+ GType api; /* api type */
+ GType type; /* implementation type */
+ gsize size; /* size of the structure */
+
+ GstMetaInitFunction init_func;
+ GstMetaFreeFunction free_func;
+ GstMetaTransformFunction transform_func;
+ };
+
+api will contain a GType of the metadata api. A repository of registered MetaInfo
+will be maintained by the core. We will register some common metadata structures
+in core and some media specific info for audio/video/text in -base. Plugins can
+register additional custom metadata.
+
+For each implementation of api, there will thus be a unique GstMetaInfo. In the
+case of metadata with a well defined API, the implementation specific init
+function will setup the methods in the metadata structure. A unique GType will
+be made for each implementation and stored in the type field.
+
+Along with the metadata description we will have functions to initialize/free (and/or refcount)
+a specific GstMeta instance. We also have the possibility to add a custom
+transform function that can be used to modify the metadata when a transformation
+happens.
+
+There are no explicit methods to serialize and deserialize the metadata. Since
+each type has a GType, we can reuse the GValue transform functions for this.
+
+The purpose of the separate MetaInfo is to not have to carry the free/init functions in
+each buffer instance but to define them globally. We still want quick access to the info
+so we need to make the buffer metadata point to the info.
+
+Technically we could also specify the field and types in the MetaInfo and
+provide a generic API to retrieve the metadata fields without the need for a
+header file. We will not do this yet.
+
+Allocation of the GstBuffer structure will result in the allocation of a memory region
+of a customizable size (512 bytes). Only the first sizeof (GstBuffer) bytes of this
+region will initially be used. The remaining bytes will be part of the free metadata
+region of the buffer. Different implementations are possible and are invisible
+in the API or ABI.
+
+The complete buffer with metadata could, for example, look as follows:
+
+ +-------------------------------------+
+GstMiniObject | GType (GstBuffer) |
+ | refcount, flags, copy/disp/free |
+ +-------------------------------------+
+GstBuffer | pool,pts,dts,duration,offsets |
+ | <private data> |
+ +.....................................+
+ | next ---+
+ +- | info ------> GstMetaInfo
+GstMetaTiming | | | |
+ | | dts | |
+ | | pts | |
+ | | duration | |
+ +- | clock_rate | |
+ + . . . . . . . . . . . . . . . . . . + |
+ | next <--+
+GstMetaVideo +- +- | info ------> GstMetaInfo
+ | | | | |
+ | | | flags | |
+ | | | n_planes | |
+ | | | planes[] | |
+ | | | map | |
+ | | | unmap | |
+ +- | | | |
+ | | private fields | |
+GstMetaVideoImpl | | ... | |
+ | | ... | |
+ +- | | |
+ + . . . . . . . . . . . . . . . . . . + .
+ . .
+
+
+API examples
+~~~~~~~~~~~~
+
+Buffers are created using the normal gst_buffer_new functions. The standard fields
+are initialized as usual. A memory area that is bigger than the structure size
+is allocated for the buffer metadata.
+
+ gst_buffer_new ();
+
+After creating a buffer, the application can set caps and add metadata
+information.
+
+To add or retrieve metadata, a handle to a GstMetaInfo structure needs to be
+obtained. This defines the implementation and API of the metadata. Usually, a
+handle to this info structure can be obtained by calling a public _get_info()
+method from a shared library (for shared metadata).
+
+The following defines can usually be found in the shared .h file.
+
+ GstMetaInfo * gst_meta_timing_get_info();
+ #define GST_META_TIMING_INFO (gst_meta_timing_get_info())
+
+Adding metadata to a buffer can be done with the gst_buffer_add_meta() call.
+This function will create new metadata based on the implementation specified by
+the GstMetaInfo. It is also possible to pass a generic pointer to the add_meta()
+function that can contain parameters to initialize the new metadata fields.
+
+Retrieving the metadata on a buffer can be done with the
+gst_buffer_meta_get() method. This function retrieves an existing metadata
+conforming to the API specified in the given info. When no such metadata exists,
+the function will return NULL.
+
+ GstMetaTiming *timing;
+
+ timing = gst_buffer_get_meta (buffer, GST_META_TIMING_INFO);
+
+Once a reference to the info has been obtained, the associated metadata can be
+added or modified on a buffer.
+
+ timing->timestamp = 0;
+ timing->duration = 20 * GST_MSECOND;
+
+Other convenience macros can be made to simplify the above code:
+
+ #define gst_buffer_get_meta_timing(b) \
+ ((GstMetaTiming *) gst_buffer_get_meta ((b), GST_META_TIMING_INFO)
+
+This makes the code look like this:
+
+ GstMetaTiming *timing;
+
+ timing = gst_buffer_get_meta_timing (buffer);
+ timing->timestamp = 0;
+ timing->duration = 20 * GST_MSECOND;
+
+To iterate the different metainfo structures, one can use the
+gst_buffer_meta_get_next() methods.
+
+ GstMeta *current = NULL;
+
+ /* passing NULL gives the first entry */
+ current = gst_buffer_meta_get_next (buffer, current);
+
+ /* passing a GstMeta returns the next */
+ current = gst_buffer_meta_get_next (buffer, current);
+
+
+Memory management
+~~~~~~~~~~~~~~~~~
+
+* allocation
+
+ We initially allocate a reasonable sized GstBuffer structure (say 512 bytes).
+
+ Since the complete buffer structure, including a large area for metadata, is
+ allocated in one go, we can reduce the number of memory allocations while still
+ providing dynamic metadata.
+
+ When adding metadata, we need to call the init function of the associated
+ metadata info structure. Since adding the metadata requires the caller to pass
+ a handle to the info, this operation does not require table lookups.
+
+ Per-metadata memory initialisation is needed because not all metadata is
+ initialized in the same way. We need to, for example, set the timestamps to
+ NONE in the MetaTiming structures.
+
+ The init/free functions can also be used to implement refcounting for a metadata
+ structure. This can be useful when a structure is shared between buffers.
+
+ When the free_size of the GstBuffer is exhausted, we will allocate new memory
+ for each newly added Meta and use the next pointers to point to this. It
+ is expected that this does not occur often and we might be able to optimize
+ this transparently in the future.
+
+* free
+
+ When a GstBuffer is freed, we potentially might have to call a custom free
+ function on the metadata info. In the case of the Memory metadata, we need to
+ call the associated free function to free the memory.
+
+ When freeing a GstBuffer, the custom buffer free function will iterate all of
+ the metadata in the buffer and call the associated free functions in the
+ MetaInfo associated with the entries. Usually, this function will be NULL.
+
+
+Serialization
+~~~~~~~~~~~~~
+
+When buffer should be sent over the wire or be serialized in GDP, we need a way
+to perform custom serialization and deserialization on the metadata.
+
+for this we can use the GValue transform functions.
+
+
+Transformations
+~~~~~~~~~~~~~~~
+
+After certain transformations, the metadata on a buffer might not be relevant
+anymore.
+
+Consider, for example, metadata that lists certain regions of interest
+on the video data. If the video is scaled or rotated, the coordinates might not
+make sense anymore. A transform element should be able to adjust or remove the
+associated metadata when it becomes invalid.
+
+We can make the transform element aware of the metadata so that it can adjust or
+remove in an intelligent way. Since we allow arbitrary metadata, we can't do
+this for all metadata and thus we need some other way.
+
+One proposition is to tag the metadata type with keywords that specify what it
+functionally refers too. We could, for example, tag the metadata for the regions
+of interest with a tag that notes that the metadata refers to absolute pixel
+positions. A transform could then know that the metadata is not valid anymore
+when the position of the pixels changed (due to rotation, flipping, scaling and
+so on).
+
+
+Subbuffers
+~~~~~~~~~~
+
+Subbuffers are implemented with a generic copy. Parameters to the copy
+are the offset and size. This allows each metadata structure to implement the
+actions needed to update the metadata of the subbuffer.
+
+It might not make sense for some metadata to work with subbuffers. For example
+when we take a subbuffer of a buffer with a video frame, the GstMetaVideo
+simply becomes invalid and is removed from the new subbuffer.
+
+
+Relationship with GstCaps
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The difference between GstCaps, used in negotiation, and the metadata is not
+clearly defined.
+
+We would like to think of the GstCaps containing the information needed to
+functionally negotiate the format between two elements. The Metadata should then
+only contain variables that can change between each buffer.
+
+For example, for video we would have width/height/framerate in the caps but then
+have the more technical details, such as stride, data pointers, pan/crop/zoom
+etc in the metadata.
+
+A scheme like this would still allow us to functionally specify the desired
+video resolution while the implementation details would be inside the metadata.
+
+Relationship with GstMiniObject qdata
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+qdata on a miniobject is element private and is not visible to other element.
+Therefore qdata never contains essential information that describes the buffer
+content.
+
+
+Compatibility
+~~~~~~~~~~~~~
+
+We need to make sure that elements exchange metadata that they both understand,
+This is particulary important when the metadata describes the data layout in
+memory (such as strides).
+
+The ALLOCATION query is used to let upstream know what metadata we can suport.
+
+It is also possible to have a bufferpool add certain metadata to the buffers
+from the pool. This feature is activated by enabling a buffer option when
+configuring the pool.
+
+
+Notes
+~~~~~
+
+Some structures that we need to be able to add to buffers.
+
+* Clean Aperture
+* Arbitrary Matrix Transform
+* Aspect ratio
+* Pan/crop/zoom
+* Video strides
+
+Some of these overlap, we need to find a minimal set of metadata structures that
+allows us to define all use cases.
diff --git a/docs/design/part-miniobject.txt b/docs/design/part-miniobject.txt
new file mode 100644
index 0000000..8c04780
--- /dev/null
+++ b/docs/design/part-miniobject.txt
@@ -0,0 +1,209 @@
+GstMiniObject
+-------------
+
+This document describes the design of the miniobject base class.
+
+The miniobject abstract base class is used to construct lightweight refcounted
+and boxed types that are frequently created and destroyed.
+
+Requirements
+~~~~~~~~~~~~
+
+ - Be lightweight
+ - Refcounted
+ - I must be possible to control access to the object, ie. when the object is
+ readable and writable.
+ - Subclasses must be able to use their own allocator for the memory.
+
+
+Usage
+~~~~~
+
+Users of the GstMiniObject infrastructure will need to define a structure that
+includes the GstMiniObject structure as the first field.
+
+ struct {
+ GstMiniObject mini_object;
+
+ /* my fields */
+ ...
+ } MyObject
+
+The subclass should then implement a constructor method where it allocates the
+memory for its structure and initializes the miniobject structure with
+gst_mini_object_init(). Copy and Free functions are provided to the
+gst_mini_object_init() function.
+
+ MyObject *
+ my_object_new()
+ {
+ MyObject *res = g_slice_new (MyObject);
+
+ gst_mini_object_init (GST_MINI_OBJECT_CAST (res), 0,
+ MY_TYPE_OBJECT,
+ (GstMiniObjectCopyFunction) _my_object_copy,
+ (GstMiniObjectDisposeFunction) NULL,
+ (GstMiniObjectFreeFunction) _my_object_free);
+
+ /* other init */
+ .....
+
+ return res;
+ }
+
+The Free function is responsible for freeing the allocated memory for
+the structure.
+
+ static void
+ _my_object_free (MyObject *obj)
+ {
+ /* other cleanup */
+ ...
+
+ g_slice_free (MyObject, obj);
+ }
+
+
+Lifecycle
+~~~~~~~~~
+
+GstMiniObject is refcounted. When a GstMiniObject is first created,
+it has a refcount of 1.
+
+Each variable holding a reference to a GstMiniObject is responsible for
+updating the refcount. This includes incrementing the refcount with
+gst_mini_object_ref() when a reference is kept to a miniobject or
+gst_mini_object_unref() when a reference is released.
+
+When the refcount reaches 0, and thus no objects hold a reference to the
+miniobject anymore, we can free the miniobject.
+
+When freeing the miniobject, first the GstMiniObjectDisposeFunction is called.
+This function is allowed to revive the object again by incrementing the
+refcount, in which case it should return FALSE from the dispose function. The
+dispose function is used by GstBuffer to revive the buffer back into the
+GstBufferPool when needed.
+
+When the dispose function returns TRUE, the GstMiniObjectFreeFunction will be
+called and the miniobject will be freed.
+
+
+Copy
+~~~~
+
+A miniobject can be copied with gst_mini_object_copy(). This function will
+call the custom copy function that was provided when registering the new
+GstMiniObject subclass.
+
+The copy function should try to preserve as much info from the original object
+as possible.
+
+The new copy should be writable.
+
+
+Access management
+~~~~~~~~~~~~~~~~~
+
+GstMiniObject can be shared between multiple threads. It is important that when
+a thread writes to a GstMiniObject that the other threads don't not see the
+changes.
+
+To avoid exposing changes from one thread to another thread, the miniobjects
+are managed in a Copy-On-Write way. A copy is only made when it is known that
+the object is shared between multiple objects or threads.
+
+There are 2 methods implemented for controlling access to the miniobject.
+
+ - A first method relies on the refcount of the object to control writability.
+ Objects using this method have the LOCKABLE flag unset.
+
+ - A second method relies on a separate counter for controlling
+ the access to the object. Objects using this method have the LOCKABLE flag
+ set.
+
+ You can check if an object is writable with gst_mini_object_is_writable() and
+ you can make any miniobject writable with gst_mini_object_make_writable().
+ This will create a writable copy when the object was not writable.
+
+
+ non-LOCKABLE GstMiniObjects
+ ---------------------------
+
+ These GstMiniObjects have the LOCKABLE flag unset. They use the refcount value
+ to control writability of the object.
+
+ When the refcount of the miniobject is > 1, the objects it referenced by at
+ least 2 objects and is thus considered unwritable. A copy must be made before a
+ modification to the object can be done.
+
+ Using the refcount to control writability is problematic for many language
+ bindings that can keep additional references to the objects. This method is
+ mainly for historical reasons until all users of the miniobjects are
+ converted to use the LOCAKBLE flag.
+
+
+ LOCKABLE GstMiniObjects
+ -----------------------
+
+ These GstMiniObjects have the LOCKABLE flag set. They use a separate counter
+ for controlling writability and access to the object.
+
+ It consists of 2 components:
+
+ * exclusive counter
+
+ Each object that wants to keep a reference to a GstMiniObject and doesn't want to
+ see the changes from other owners of the same GstMiniObject needs to lock the
+ GstMiniObject in EXCLUSIVE mode, which will increase the exclusive counter.
+
+ The exclusive counter counts the amount of objects that share this
+ GstMiniObject. The counter is initially 0, meaning that the object is not shared with
+ any object.
+
+ When a reference to a GstMiniObject release, both the ref count and the
+ exclusive counter will be decreased with gst_mini_object_unref() and
+ gst_mini_object_unlock () respectively.
+
+ * locking
+
+ All read and write access must be performed between a gst_mini_object_lock() and
+ gst_mini_object_unlock() pair with the requested access method.
+
+ A gst_mini_object_lock() can fail when a WRITE lock is requested and the exclusive
+ counter is > 1. Indeed a GstMiniObject object with an exclusive counter > 1 is
+ locked EXCLUSIVELY by at least 2 objects and is therefore not writable.
+
+ Once the GstMiniObject is locked with a certain access mode, it can be recursively
+ locked with the same or narrower access mode. For example, first locking the
+ GstMiniObject in READWRITE mode allows you to recusively lock the
+ GstMiniObject in
+ READWRITE, READ and WRITE mode. Memory locked in READ mode cannot be locked
+ recursively in WRITE or READWRITE mode.
+
+ Note that multiple threads can READ lock the GstMiniObject concurrently but cannot
+ lock the object in WRITE mode because the exclusive counter must be > 1.
+
+ All calls to gst_mini_object_lock() need to be paired with one
+ gst_mini_object_unlock() call with the same access mode. When the last refcount
+ of the object is removed, there should be no more outstanding locks.
+
+ Note that a shared counter of both 0 and 1 leaves the GstMiniObject writable. The
+ reason is to make it easy to create and pass ownership of the GstMiniObject to
+ another object while keeping it writable. When the GstMiniObject is
+ created with a shared count of 0, it is writable. When the GstMiniObject is then
+ added to another object, the shared count is incremented to 1 and the
+ GstMiniObject remains writable. The 0 share counter has a similar purpose as the floating
+ reference in GObject.
+
+
+Weak references
+~~~~~~~~~~~~~~~
+
+GstMiniObject has support for weak references. A callback will be called when
+the object is freed for all registered weak references.
+
+
+QData
+~~~~~
+
+Extra data can be associated with a GstMiniObject by using the QData API.
diff --git a/docs/design/part-probes.txt b/docs/design/part-probes.txt
new file mode 100644
index 0000000..d6234ea
--- /dev/null
+++ b/docs/design/part-probes.txt
@@ -0,0 +1,362 @@
+Probes
+------
+
+ Probes are callbacks that can be installed by the application and will notify
+ the application about the states of the dataflow.
+
+
+Requirements
+------------
+
+Applications should be able to monitor and control the dataflow on pads. We
+identify the following types:
+
+ - be notified when the pad is/becomes idle and make sure the pad stays idle.
+ This is essential to be able to implement dynamic relinking of elements
+ without breaking the dataflow.
+
+ - be notified when data, events or queries are pushed or sent on a pad. It
+ should also be possible to inspect and modify the data.
+
+ - be able to drop, pass and block on data based on the result of the callback.
+
+ - be able to drop, pass data on blocking pads based on methods performed by
+ the application thread.
+
+
+Overview
+--------
+
+ The function gst_pad_add_probe() is used to add a probe to a pad. It accepts a
+ probe type mask and a callback.
+
+ gulong gst_pad_add_probe (GstPad *pad,
+ GstPadProbeType mask,
+ GstPadProbeCallback callback,
+ gpointer user_data,
+ GDestroyNotify destroy_data);
+
+ The function returns a gulong that uniquely identifies the probe and that can
+ be used to remove the probe with gst_pad_remove_probe():
+
+ void gst_pad_remove_probe (GstPad *pad, gulong id);
+
+ The mask parameter is a bitwise or of the following flags:
+
+ typedef enum
+ {
+ GST_PAD_PROBE_TYPE_INVALID = 0,
+
+ /* flags to control blocking */
+ GST_PAD_PROBE_TYPE_IDLE = (1 << 0),
+ GST_PAD_PROBE_TYPE_BLOCK = (1 << 1),
+
+ /* flags to select datatypes */
+ GST_PAD_PROBE_TYPE_BUFFER = (1 << 4),
+ GST_PAD_PROBE_TYPE_BUFFER_LIST = (1 << 5),
+ GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM = (1 << 6),
+ GST_PAD_PROBE_TYPE_EVENT_UPSTREAM = (1 << 7),
+ GST_PAD_PROBE_TYPE_EVENT_FLUSH = (1 << 8),
+ GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM = (1 << 9),
+ GST_PAD_PROBE_TYPE_QUERY_UPSTREAM = (1 << 10),
+
+ /* flags to select scheduling mode */
+ GST_PAD_PROBE_TYPE_PUSH = (1 << 12),
+ GST_PAD_PROBE_TYPE_PULL = (1 << 13),
+
+ } GstPadProbeType;
+
+ When adding a probe with the IDLE or BLOCK flag, the probe will become a
+ blocking probe (see below). Otherwise the probe will be a DATA probe.
+
+ The datatype and scheduling selector flags are used to select what kind of
+ datatypes and scheduling modes should be allowed in the callback.
+
+ The blocking flags must match the triggered probe exactly.
+
+ The probe callback is defined as:
+
+ GstPadProbeReturn (*GstPadProbeCallback) (GstPad *pad, GstPadProbeInfo *info,
+ gpointer user_data);
+
+ A probe info structure is passed as an argument and its type is guaranteed
+ to match the mask that was used to register the callback. The data item in the
+ info contains type specific data, which is usually the data item that is blocked
+ or NULL when no data item is present.
+
+ The probe can return any of the following return values:
+
+ typedef enum
+ {
+ GST_PAD_PROBE_DROP,
+ GST_PAD_PROBE_OK,
+ GST_PAD_PROBE_REMOVE,
+ GST_PAD_PROBE_PASS,
+ } GstPadProbeReturn;
+
+ GST_PAD_PROBE_OK is the normal return value. DROP will drop the item that is
+ currently being probed. GST_PAD_PROBE_REMOVE the currently executing probe from the
+ list of probes.
+
+ GST_PAD_PROBE_PASS is relevant for blocking probes and will temporarily unblock the
+ pad and let the item trough, it will then block again on the next item.
+
+
+Blocking probes
+---------------
+
+ Blocking probes are probes with BLOCK or IDLE flags set. They will always
+ block the dataflow and trigger the callback according to the following rules:
+
+ When the IDLE flag is set, the probe callback is called as soon as no data is
+ flowing over the pad. If at the time of probe registration, the pad is idle,
+ the callback will be called immediately from the current thread. Otherwise,
+ the callback will be called as soon as the pad becomes idle in the streaming
+ thread.
+
+ The IDLE probe is useful to perform dynamic linking, it allows to wait for for
+ a safe moment when an unlink/link operation can be done. Since the probe is a
+ blocking probe, it will also make sure that the pad stays idle until the probe
+ is removed.
+
+ When the BLOCK flag is set, the probe callback will be called when new data
+ arrives on the pad and right before the pad goes into the blocking state. This
+ callback is thus only called when there is new data on the pad.
+
+ The blocking probe is removed with gst_pad_remove_probe() or when the probe
+ callback return GST_PAD_PROBE_REMOVE. In both cases, and if this was the last
+ blocking probe on the pad, the pad is unblocked and dataflow can continue.
+
+
+Non-Blocking probes
+--------------------
+
+ Non-blocking probes or DATA probes are probes triggered when data is flowing
+ over the pad. The are called after the blocking probes are run and always with
+ data.
+
+
+Push dataflow
+-------------
+
+Push probes have the GST_PAD_PROBE_TYPE_PUSH flag set in the callbacks.
+
+In push based scheduling, the blocking probe is called first with the data item.
+Then the data probes are called before the peer pad chain or event function is
+called.
+
+The data probes are called before the peer pad is checked. This allows for
+linking the pad in either the BLOCK or DATA probes on the pad.
+
+Before the peerpad chain or event function is called, the peer pad block and
+data probes are called.
+
+Finally, the IDLE probe is called on the pad after the data was sent to the
+peer pad.
+
+The push dataflow probe behavior is the same for buffers and bidirectional events.
+
+
+ pad peerpad
+ | |
+ gst_pad_push() / | |
+ gst_pad_push_event() | |
+ -------------------->O |
+ O |
+ flushing? O |
+ FLUSHING O |
+ < - - - - - - O |
+ O-> do BLOCK probes |
+ O |
+ O-> do DATA probes |
+ no peer? O |
+ NOT_LINKED O |
+ < - - - - - - O |
+ O gst_pad_chain() / |
+ O gst_pad_send_event() |
+ O------------------------------>O
+ O flushing? O
+ O FLUSHING O
+ O< - - - - - - - - - - - - - - -O
+ O O-> do BLOCK probes
+ O O
+ O O-> do DATA probes
+ O O
+ O O---> chainfunc /
+ O O eventfunc
+ O< - - - - - - - - - - - - - - -O
+ O |
+ O-> do IDLE probes |
+ O |
+ < - - - - - - O |
+ | |
+
+
+Pull dataflow
+-------------
+
+Pull probes have the GST_PAD_PROBE_TYPE_PULL flag set in the callbacks.
+
+The gst_pad_pull_range() call will first trigger the BLOCK probes without a DATA
+item. This allows the pad to be linked before the peer pad is resolved. It also
+allows the callback to set a data item in the probe info.
+
+After the blocking probe and the getrange function is called on the peer pad
+and there is a data item, the DATA probes are called.
+
+When control returns to the sinkpad, the IDLE callbacks are called. The IDLE
+callback is called without a data item so that it will also be called when there
+was an error.
+
+If there is a valid DATA item, the DATA probes are called for the item.
+
+
+ srcpad sinkpad
+ | |
+ | | gst_pad_pull_range()
+ | O<---------------------
+ | O
+ | O flushing?
+ | O FLUSHING
+ | O - - - - - - - - - - >
+ | do BLOCK probes <-O
+ | O no peer?
+ | O NOT_LINKED
+ | O - - - - - - - - - - >
+ | gst_pad_get_range() O
+ O<------------------------------O
+ O O
+ O flushing? O
+ O FLUSHING O
+ O- - - - - - - - - - - - - - - >O
+ do BLOCK probes <-O O
+ O O
+ getrangefunc <---O O
+ O flow error? O
+ O- - - - - - - - - - - - - - - >O
+ O O
+ do DATA probes <-O O
+ O- - - - - - - - - - - - - - - >O
+ | O
+ | do IDLE probes <-O
+ | O flow error?
+ | O - - - - - - - - - - >
+ | O
+ | do DATA probes <-O
+ | O - - - - - - - - - - >
+ | |
+
+
+Queries
+-------
+
+Query probes have the GST_PAD_PROBE_TYPE_QUERY_* flag set in the callbacks.
+
+
+ pad peerpad
+ | |
+ gst_pad_peer_query() | |
+ -------------------->O |
+ O |
+ O-> do BLOCK probes |
+ O |
+ O-> do QUERY | PUSH probes |
+ no peer? O |
+ FALSE O |
+ < - - - - - - O |
+ O gst_pad_query() |
+ O------------------------------>O
+ O O-> do BLOCK probes
+ O O
+ O O-> do QUERY | PUSH probes
+ O O
+ O O---> queryfunc
+ O error O
+ <- - - - - - - - - - - - - - - - - - - - - - -O
+ O O
+ O O-> do QUERY | PULL probes
+ O< - - - - - - - - - - - - - - -O
+ O |
+ O-> do QUERY | PULL probes |
+ O |
+ < - - - - - - O |
+ | |
+
+For queries, the PUSH ProbeType is set when the query is traveling to the object
+that will answer the query and the PULL type is set when the query contains the
+answer.
+
+Use-cases
+---------
+
+Prerolling a partial pipeline
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .---------. .---------. .----------.
+ | filesrc | | demuxer | .-----. | decoder1 |
+ | src -> sink src1 ->|queue|-> sink src
+ '---------' | | '-----' '----------' X
+ | | .----------.
+ | | .-----. | decoder2 |
+ | src2 ->|queue|-> sink src
+ '---------' '-----' '----------' X
+
+
+The purpose is to create the pipeline dynamically up to the
+decoders but not yet connect them to a sink and without losing
+any data.
+
+To do this, the source pads of the decoders is blocked so that no
+events or buffers can escape and we don't interrupt the stream.
+
+When all of the dynamic pad are created (no-more-pads emited by the
+branching point, ie, the demuxer or the queues filled) and the pads
+are blocked (blocked callback received) the pipeline is completely
+prerolled.
+
+It should then be possible to perform the following actions on the
+prerolled pipeline:
+
+- query duration/position
+- perform a flushing seek to preroll a new position
+- connect other elements and unblock the blocked pads.
+
+
+dynamically switching an element in a PLAYING pipeline
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+
+ .----------. .----------. .----------.
+ | element1 | | element2 | | element3 |
+ ... src -> sink src -> sink ...
+ '----------' '----------' '----------'
+ .----------.
+ | element4 |
+ sink src
+ '----------'
+
+The purpose is to replace element2 with element4 in the PLAYING
+pipeline.
+
+ 1) block element1 src pad.
+ 2) inside the block callback nothing is flowing between
+ element1 and element2 and nothing will flow until unblocked.
+ 3) unlink element1 and element2
+ 4) optional step: make sure data is flushed out of element2:
+ 4a) pad event probe on element2 src
+ 4b) send EOS to element2, this makes sure that element2 flushes
+ out the last bits of data it holds.
+ 4c) wait for EOS to appear in the probe, drop the EOS.
+ 4d) remove the EOS pad event probe.
+ 5) unlink element2 and element3
+ 5a) optionally element2 can now be set to NULL and/or removed from the
+ pipeline.
+ 6) link element4 and element3
+ 7) link element1 and element4
+ 8) make sure element4 is in the same state as the rest of the elements. The
+ element should at least be PAUSED.
+ 9) unblock element1 src
+
+The same flow can be used to replace an element in a PAUSED pipeline. Of
+course in a PAUSED pipeline there might not be dataflow so the block might
+not immediately happen.
diff --git a/docs/design/part-progress.txt b/docs/design/part-progress.txt
new file mode 100644
index 0000000..2b05614
--- /dev/null
+++ b/docs/design/part-progress.txt
@@ -0,0 +1,234 @@
+Progress Reporting
+------------------
+
+This document describes the design and use cases for the progress reporting
+messages.
+
+PROGRESS messages are posted on the bus to inform the application about the
+progress of asynchronous operations in the pipeline. This should not be confused
+with asynchronous state changes.
+
+We accommodate for the following requirements:
+
+ - Application is informed when an async operation starts and completes.
+ - It should be possible for the application to generically detect common
+ operations and incorporate their progress into the GUI.
+ - Applications can cancel pending operations by doing regular state changes.
+ - Applications should be able to wait for completion of async operations.
+
+We allow for the following scenarios:
+
+ - Elements want to inform the application about asynchronous DNS lookups and
+ pending network requests. This includes starting and completing the lookup.
+ - Elements opening devices and resources asynchronously.
+ - Applications having more freedom to implement timeout and cancelation of
+ operations that currently block the state changes or happen invisibly behind
+ the scenes.
+
+
+Rationale
+~~~~~~~~~
+
+The main reason for adding these extra progress notifications is twofold:
+
+ 1) to give the application more information of what is going on
+
+ When there are well defined progress information codes, applications
+ can let the user know about the status of the progress. We anticipate to
+ have at least DNS resolving and server connections and requests be well
+ defined.
+
+ 2) To make the state changes non-blocking and cancelable.
+
+ Currently state changes such as going to the READY or PAUSED state often do
+ blocking calls such as resolving DNS or connecting to a remote server. These
+ operations often block the main thread and are often not cancelable, causing
+ application lockups.
+
+ We would like to make the state change function, instead, start a separate
+ thread that performs the blocking operations in a cancelable way. When going
+ back to the NULL state, all pending operations would be canceled immediately.
+
+ For downward state changes, we want to let the application implement its own
+ timeout mechanism. For example: when stopping an RTSP stream, the clients
+ needs to send a TEARDOWN request to the server. This can however take an
+ unlimited amount of time in case of network problems. We want to give the
+ application an opportunity to wait (and timeout) for the completion of the
+ async operation before setting the element to the final NULL state.
+
+Progress updates are very similar to buffering messages in the same way that the
+application can decide to wait for the completion of the buffering process
+before performing the next state change. It might make sense to implement
+buffering with the progress messages in the future.
+
+
+Async state changes
+~~~~~~~~~~~~~~~~~~~
+
+GStreamer currently has a GST_STATE_CHANGE_ASYNC return value to note to the
+application that a state change is happening asynchronously.
+
+The main purpose of this return value is to make the pipeline wait for preroll
+and delay a future (upwards) state changes until the sinks are prerolled.
+
+In the case of async operations on source, this will automatically force sinks
+to stay async because they will not preroll before the source can produce data.
+
+The fact that other asynchronous operations happen behind the scenes is
+irrelevant for the prerolling process so it is not implemented with the ASYNC
+state change return value in order to not complicate the state changes and mix
+concepts.
+
+
+Use cases
+~~~~~~~~~
+
+ * RTSP client (but also HTTP, MMS, ...)
+
+ When the client goes from the READY to the PAUSED state, it opens a socket,
+ performs a DNS lookup, retrieves the SDP and negotiates the streams. All these
+ operations currently block the state change function for an indefinite amount
+ of time and while they are blocking cannot be canceled.
+
+ Instead, a thread would be started to perform these operations asynchronously
+ and the state change would complete with the usual NO_PREROLL return value.
+ Before starting the thread a PROGRESS message would be posted to mark the
+ start of the async operation.
+
+ As the DNS lookup completes and the connection is established, PROGRESS
+ messages are posted on the bus to inform the application of the progress. When
+ something fails, an error is posted and a PROGRESS CANCELED message is posted.
+ The application can then stop the pipeline.
+
+ If there are no errors and the setup of the streams completed successfully, a
+ PROGRESS COMPLETED is posted on the bus. The thread then goes to sleep and the
+ asynchronous operation completed.
+
+ The RTSP protocol requires to send a TEARDOWN request to the server
+ before closing the connection and destroying the socket. A state change to the
+ READY state will issue the TEARDOWN request in the background and notify the
+ application of this pending request with a PROGRESS message.
+
+ The application might want to only go to the NULL state after it got confirmation
+ that the TEARDOWN request completed or it might choose to go to NULL after a
+ timeout. It might also be possible that the application just want to close the
+ socket as fast as possible without waiting for completion of the TEARDOWN request.
+
+ * Network performance measuring
+
+ DNS lookup and connection times can be measured by calculating the elapsed
+ time between the various PROGRESS messages.
+
+
+
+Messages
+~~~~~~~~
+
+ A new PROGRESS message will be created.
+ The following fields will be contained in the message:
+
+ - "type", GST_TYPE_PROGRESS_TYPE
+
+ - a set of types to define the type of progress
+
+ GST_PROGRESS_TYPE_START: A new task is started in the background
+ GST_PROGRESS_TYPE_CONTINUE: The previous tasks completed and a new
+ one continues. This is done so that the application can follow
+ a set of continuous tasks and react to COMPLETE only when the
+ element completely finished.
+ GST_PROGRESS_TYPE_CANCELED: A task is canceled by the user.
+ GST_PROGRESS_TYPE_ERROR: A task stopped because of an error. In case of
+ an error, an error message will have been posted before.
+ GST_PROGRESS_TYPE_COMPLETE: A task completed successfully.
+
+ - "code", G_TYPE_STRING
+
+ A generic extensible string that can be used to programatically determine the
+ action that is in progress. Some standard predefined codes will be
+ defined.
+
+ - "text", G_TYPE_STRING
+
+ A user visible string detailing the action.
+
+ - "percent", G_TYPE_INT between 0 and 100
+
+ Progress of the action as a percentage, the following values are allowed:
+ - GST_PROGRESS_TYPE_START always has a 0% value.
+ - GST_PROGRESS_TYPE_CONTINUE have a value between 0 and 100
+ - GST_PROGRESS_TYPE_CANCELED, GST_PROGRESS_TYPE_ERROR and
+ GST_PROGRESS_TYPE_COMPLETE always have a 100% value.
+
+ - "timeout", G_TYPE_INT in milliseconds
+
+ The timeout of the async operation. -1 if unknown/unlimited..
+ This field can be interesting to the application when it wants to display
+ some sort of progress indication.
+
+ - ....
+
+ Depending on the code, more fields can be put here.
+
+
+Implementation
+~~~~~~~~~~~~~~
+
+Elements should not do blocking operations from the state change function.
+Instead, elements should post an appropriate progress message with the right
+code and of type GST_PROGRESS_TYPE_START and then start a thread to perform
+the blocking calls in a cancelable manner.
+
+It is highly recommended to only start async operations from the READY to PAUSED
+state and onwards and not from the NULL to READY state. The reason for this is
+that streaming threads are usually started in the READY to PAUSED state and that
+the current NULL to READY state change is used to perform a blocking check for
+the presence of devices.
+
+The progress message needs to be posted from the state change function so that
+the application can immediately take appropriate action after setting the state.
+
+The threads will usually perform many blocking calls with different codes
+in a row, a client might first do a DNS query and then continue with
+establishing a connection to the server. For this purpose the
+GST_PROGRESS_TYPE_CONTINUE must be used.
+
+Usually, the thread used to perform the blocking operations can be used to
+implement the streaming threads when needed.
+
+Upon downward state changes, operations that are busy in the thread are canceled
+and GST_PROGRESS_TYPE_CANCELED is posted.
+
+The application can know about pending tasks because they received the
+GST_PROGRESS_TYPE_START messages that didn't complete with a
+GST_PROGRESS_TYPE_COMPLETE message, got canceled with a
+GST_PROGRESS_TYPE_CANCELED or errored with GST_PROGRESS_TYPE_ERROR.
+Applications should be able to choose if they wait for the pending
+operation or cancel them.
+
+If an async operation fails, an error message is posted first before the
+GST_PROGRESS_TYPE_ERROR progress message.
+
+
+Categories
+~~~~~~~~~~
+
+ We want to propose some standard codes here:
+
+ "open" : A resource is being opened
+ "close" : A resource is being closed
+
+ "name-lookup" : A DNS lookup.
+
+ "connect" : A socket connection is established
+
+ "disconnect" : a socket connection is closed
+
+ "request" : A request is sent to a server and we are waiting for a
+ reply. This message is posted right before the request is sent
+ and completed when the reply has arrived completely.
+
+ "mount" : A volume is being mounted
+
+ "unmount" : A volume is being unmounted
+
+ More codes can be posted by elements and can be made official later.
diff --git a/docs/faq/Makefile.in b/docs/faq/Makefile.in
index bfacb3e..69c10e5 100644
--- a/docs/faq/Makefile.in
+++ b/docs/faq/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/docs/gst/Makefile.in b/docs/gst/Makefile.in
index 7088e58..a43f48a 100644
--- a/docs/gst/Makefile.in
+++ b/docs/gst/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/docs/gst/html/annotation-glossary.html b/docs/gst/html/annotation-glossary.html
index 841e0a1..18eebe6 100644
--- a/docs/gst/html/annotation-glossary.html
+++ b/docs/gst/html/annotation-glossary.html
@@ -22,84 +22,87 @@
<tr><td colspan="5" class="shortcuts">
<a class="shortcut" href="#glsT">T</a>
 | 
- <a class="shortcut" href="#glsS">S</a>
+ <a class="shortcut" href="#glsA">A</a>
 | 
- <a class="shortcut" href="#glsO">O</a>
+ <a class="shortcut" href="#glsC">C</a>
 | 
<a class="shortcut" href="#glsT">T</a>
 | 
- <a class="shortcut" href="#glsI">I</a>
+ <a class="shortcut" href="#glsS">S</a>
 | 
- <a class="shortcut" href="#glsT">T</a>
+ <a class="shortcut" href="#glsO">O</a>
+  | 
+ <a class="shortcut" href="#glsI">I</a>
 | 
<a class="shortcut" href="#glsO">O</a>
 | 
+ <a class="shortcut" href="#glsA">A</a>
+  | 
+ <a class="shortcut" href="#glsE">E</a>
+  | 
<a class="shortcut" href="#glsS">S</a>
 | 
- <a class="shortcut" href="#glsC">C</a>
+ <a class="shortcut" href="#glsT">T</a>
 | 
<a class="shortcut" href="#glsO">O</a>
 | 
<a class="shortcut" href="#glsI">I</a>
 | 
- <a class="shortcut" href="#glsA">A</a>
-  | 
- <a class="shortcut" href="#glsE">E</a>
-  | 
- <a class="shortcut" href="#glsA">A</a>
+ <a class="shortcut" href="#glsT">T</a>
</td></tr>
</table>
<div class="glossary">
<div class="titlepage"><div><div><h1 class="title">
<a name="annotation-glossary"></a>Annotation Glossary</h1></div></div></div>
<a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
+<dd class="glossdef"><p>Free data after the code is done.</p></dd>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-allow-none"></a>allow-none</span></dt>
+<dd class="glossdef"><p>NULL is ok, both for passing and for returning.</p></dd>
+<a name="glsC"></a><h3 class="title">C</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
+<dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20floating"></a>transfer floating</span></dt>
<dd class="glossdef"><p>Alias for <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>, used for objects with floating refs.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20container"></a>transfer container</span></dt>
+<dd class="glossdef"><p>Free data container after the code is done.</p></dd>
<a name="glsS"></a><h3 class="title">S</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-scope%20call"></a>scope call</span></dt>
-<dd class="glossdef"><p>The callback is valid only during the call to the method.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-skip"></a>skip</span></dt>
+<dd class="glossdef"><p>Exposed in C code, not necessarily available in other languages.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20async"></a>scope async</span></dt>
+<dd class="glossdef"><p>The callback is valid until first called.</p></dd>
<a name="glsO"></a><h3 class="title">O</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-out%20callee-allocates"></a>out callee-allocates</span></dt>
+<dt><span class="glossterm"><a name="annotation-glossterm-out%20caller-allocates"></a>out caller-allocates</span></dt>
<dd class="glossdef"><p>Out parameter, where caller must allocate storage.</p></dd>
-<a name="glsT"></a><h3 class="title">T</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20container"></a>transfer container</span></dt>
-<dd class="glossdef"><p>Free data container after the code is done.</p></dd>
-<dt><span class="glossterm"><a name="annotation-glossterm-type"></a>type</span></dt>
-<dd class="glossdef"><p>Override the parsed C type with given type.</p></dd>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
-<dd class="glossdef"><p>Free data after the code is done.</p></dd>
<a name="glsI"></a><h3 class="title">I</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-inout"></a>inout</span></dt>
<dd class="glossdef"><p>Parameter for input and for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
-<a name="glsT"></a><h3 class="title">T</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
-<dd class="glossdef"><p>Don't free data after the code is done.</p></dd>
<a name="glsO"></a><h3 class="title">O</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-out"></a>out</span></dt>
<dd class="glossdef"><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
+<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
+<a name="glsE"></a><h3 class="title">E</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-element-type"></a>element-type</span></dt>
+<dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd>
<a name="glsS"></a><h3 class="title">S</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-scope%20async"></a>scope async</span></dt>
-<dd class="glossdef"><p>The callback is valid until first called.</p></dd>
-<dt><span class="glossterm"><a name="annotation-glossterm-skip"></a>skip</span></dt>
-<dd class="glossdef"><p>Exposed in C code, not necessarily available in other languages.</p></dd>
-<a name="glsC"></a><h3 class="title">C</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
-<dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20call"></a>scope call</span></dt>
+<dd class="glossdef"><p>The callback is valid only during the call to the method.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
+<dd class="glossdef"><p>Don't free data after the code is done.</p></dd>
<a name="glsO"></a><h3 class="title">O</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-out%20caller-allocates"></a>out caller-allocates</span></dt>
+<dt><span class="glossterm"><a name="annotation-glossterm-out%20callee-allocates"></a>out callee-allocates</span></dt>
<dd class="glossdef"><p>Out parameter, where caller must allocate storage.</p></dd>
<a name="glsI"></a><h3 class="title">I</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-in"></a>in</span></dt>
<dd class="glossdef"><p>Parameter for input. Default is <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>.</p></dd>
-<a name="glsA"></a><h3 class="title">A</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-allow-none"></a>allow-none</span></dt>
-<dd class="glossdef"><p>NULL is ok, both for passing and for returning.</p></dd>
-<a name="glsE"></a><h3 class="title">E</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-element-type"></a>element-type</span></dt>
-<dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd>
-<a name="glsA"></a><h3 class="title">A</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
-<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-type"></a>type</span></dt>
+<dd class="glossdef"><p>Override the parsed C type with given type.</p></dd>
</div>
<div class="footer">
<hr>
diff --git a/docs/gst/html/api-index-full.html b/docs/gst/html/api-index-full.html
index 49233c3..e4e74d8 100644
--- a/docs/gst/html/api-index-full.html
+++ b/docs/gst/html/api-index-full.html
@@ -1746,19 +1746,19 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file" title="gst_debug_bin_to_dot_file ()">gst_debug_bin_to_dot_file</a>, function in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
+<a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE()">GST_DEBUG_BIN_TO_DOT_FILE</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE()">GST_DEBUG_BIN_TO_DOT_FILE</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
+<a class="link" href="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file" title="gst_debug_bin_to_dot_file ()">gst_debug_bin_to_dot_file</a>, function in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE-WITH-TS:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()">GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
+<a class="link" href="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file-with-ts" title="gst_debug_bin_to_dot_file_with_ts ()">gst_debug_bin_to_dot_file_with_ts</a>, function in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-GstInfo.html#gst-debug-bin-to-dot-file-with-ts" title="gst_debug_bin_to_dot_file_with_ts ()">gst_debug_bin_to_dot_file_with_ts</a>, function in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
+<a class="link" href="gstreamer-GstInfo.html#GST-DEBUG-BIN-TO-DOT-FILE-WITH-TS:CAPS" title="GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()">GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS</a>, macro in <a class="link" href="gstreamer-GstInfo.html" title="GstInfo">GstInfo</a>
</dt>
<dd></dd>
<dt>
@@ -4955,11 +4955,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-GstPoll.html#GST-POLL-FD-INIT:CAPS" title="GST_POLL_FD_INIT">GST_POLL_FD_INIT</a>, macro in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
+<a class="link" href="gstreamer-GstPoll.html#gst-poll-fd-init" title="gst_poll_fd_init ()">gst_poll_fd_init</a>, function in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-GstPoll.html#gst-poll-fd-init" title="gst_poll_fd_init ()">gst_poll_fd_init</a>, function in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
+<a class="link" href="gstreamer-GstPoll.html#GST-POLL-FD-INIT:CAPS" title="GST_POLL_FD_INIT">GST_POLL_FD_INIT</a>, macro in <a class="link" href="gstreamer-GstPoll.html" title="GstPoll">GstPoll</a>
</dt>
<dd></dd>
<dt>
@@ -5786,11 +5786,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstElement.html#GST-STATE:CAPS" title="GST_STATE()">GST_STATE</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+<a class="link" href="GstElement.html#GstState" title="enum GstState">GstState</a>, enum in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstElement.html#GstState" title="enum GstState">GstState</a>, enum in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
+<a class="link" href="GstElement.html#GST-STATE:CAPS" title="GST_STATE()">GST_STATE</a>, macro in <a class="link" href="GstElement.html" title="GstElement">GstElement</a>
</dt>
<dd></dd>
<dt>
diff --git a/docs/gst/html/gstreamer-GstVersion.html b/docs/gst/html/gstreamer-GstVersion.html
index 11746b0..faa792f 100644
--- a/docs/gst/html/gstreamer-GstVersion.html
+++ b/docs/gst/html/gstreamer-GstVersion.html
@@ -88,7 +88,7 @@ The minor version of GStreamer at compile time:
<hr>
<div class="refsect2">
<a name="GST-VERSION-MICRO:CAPS"></a><h3>GST_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_VERSION_MICRO (2)
+<pre class="programlisting">#define GST_VERSION_MICRO (3)
</pre>
<p>
The micro version of GStreamer at compile time:
diff --git a/docs/gst/html/index.html b/docs/gst/html/index.html
index 08c561a..0ea78fa 100644
--- a/docs/gst/html/index.html
+++ b/docs/gst/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Core Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Core 1.0 (1.2.2)
+ for GStreamer Core 1.0 (1.2.3)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/</a>.
</p></div>
diff --git a/docs/gst/html/index.sgml b/docs/gst/html/index.sgml
index 2be8fcc..12ff547 100644
--- a/docs/gst/html/index.sgml
+++ b/docs/gst/html/index.sgml
@@ -2735,20 +2735,20 @@
<ANCHOR id="gst-debug-bin-to-dot-file" href="gstreamer-1.0/gstreamer-GstInfo.html#gst-debug-bin-to-dot-file">
<ANCHOR id="gst-debug-bin-to-dot-file-with-ts" href="gstreamer-1.0/gstreamer-GstInfo.html#gst-debug-bin-to-dot-file-with-ts">
<ANCHOR id="gstreamer-GstInfo.see-also" href="gstreamer-1.0/gstreamer-GstInfo.html#gstreamer-GstInfo.see-also">
+<ANCHOR id="annotation-glossterm-transfer full" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-transfer full">
+<ANCHOR id="annotation-glossterm-allow-none" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-closure" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-closure">
<ANCHOR id="annotation-glossterm-transfer floating" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-transfer floating">
-<ANCHOR id="annotation-glossterm-scope call" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-scope call">
-<ANCHOR id="annotation-glossterm-out callee-allocates" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-out callee-allocates">
<ANCHOR id="annotation-glossterm-transfer container" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-transfer container">
-<ANCHOR id="annotation-glossterm-type" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-type">
-<ANCHOR id="annotation-glossterm-transfer full" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-transfer full">
-<ANCHOR id="annotation-glossterm-inout" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-inout">
-<ANCHOR id="annotation-glossterm-transfer none" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-transfer none">
-<ANCHOR id="annotation-glossterm-out" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-out">
-<ANCHOR id="annotation-glossterm-scope async" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-scope async">
<ANCHOR id="annotation-glossterm-skip" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-skip">
-<ANCHOR id="annotation-glossterm-closure" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-closure">
+<ANCHOR id="annotation-glossterm-scope async" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-scope async">
<ANCHOR id="annotation-glossterm-out caller-allocates" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-out caller-allocates">
-<ANCHOR id="annotation-glossterm-in" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-in">
-<ANCHOR id="annotation-glossterm-allow-none" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-allow-none">
-<ANCHOR id="annotation-glossterm-element-type" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-element-type">
+<ANCHOR id="annotation-glossterm-inout" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-inout">
+<ANCHOR id="annotation-glossterm-out" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-out">
<ANCHOR id="annotation-glossterm-array" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-array">
+<ANCHOR id="annotation-glossterm-element-type" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-element-type">
+<ANCHOR id="annotation-glossterm-scope call" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-scope call">
+<ANCHOR id="annotation-glossterm-transfer none" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-transfer none">
+<ANCHOR id="annotation-glossterm-out callee-allocates" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-out callee-allocates">
+<ANCHOR id="annotation-glossterm-in" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-in">
+<ANCHOR id="annotation-glossterm-type" href="gstreamer-1.0/annotation-glossary.html#annotation-glossterm-type">
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index de184a3..35ef1f1 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/docs/libs/html/annotation-glossary.html b/docs/libs/html/annotation-glossary.html
index 5e8baca..dc6b69a 100644
--- a/docs/libs/html/annotation-glossary.html
+++ b/docs/libs/html/annotation-glossary.html
@@ -20,69 +20,63 @@
<td> </td>
</tr>
<tr><td colspan="5" class="shortcuts">
-<a class="shortcut" href="#glsI">I</a>
-  | 
- <a class="shortcut" href="#glsC">C</a>
+<a class="shortcut" href="#glsS">S</a>
 | 
<a class="shortcut" href="#glsT">T</a>
 | 
- <a class="shortcut" href="#glsS">S</a>
+ <a class="shortcut" href="#glsE">E</a>
 | 
<a class="shortcut" href="#glsA">A</a>
 | 
- <a class="shortcut" href="#glsE">E</a>
+ <a class="shortcut" href="#glsO">O</a>
 | 
<a class="shortcut" href="#glsT">T</a>
 | 
- <a class="shortcut" href="#glsO">O</a>
+ <a class="shortcut" href="#glsC">C</a>
 | 
- <a class="shortcut" href="#glsT">T</a>
+ <a class="shortcut" href="#glsI">I</a>
 | 
<a class="shortcut" href="#glsA">A</a>
-  | 
- <a class="shortcut" href="#glsO">O</a>
</td></tr>
</table>
<div class="glossary">
<div class="titlepage"><div><div><h1 class="title">
<a name="annotation-glossary"></a>Annotation Glossary</h1></div></div></div>
-<a name="glsI"></a><h3 class="title">I</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-in"></a>in</span></dt>
-<dd class="glossdef"><p>Parameter for input. Default is <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>.</p></dd>
-<a name="glsC"></a><h3 class="title">C</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
-<dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
-<a name="glsT"></a><h3 class="title">T</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-type"></a>type</span></dt>
-<dd class="glossdef"><p>Override the parsed C type with given type.</p></dd>
<a name="glsS"></a><h3 class="title">S</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-scope%20call"></a>scope call</span></dt>
<dd class="glossdef"><p>The callback is valid only during the call to the method.</p></dd>
-<a name="glsA"></a><h3 class="title">A</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
-<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
+<a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
+<dd class="glossdef"><p>Free data after the code is done.</p></dd>
<a name="glsE"></a><h3 class="title">E</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-element-type"></a>element-type</span></dt>
<dd class="glossdef"><p>Generics and defining elements of containers and arrays.</p></dd>
-<a name="glsT"></a><h3 class="title">T</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20container"></a>transfer container</span></dt>
-<dd class="glossdef"><p>Free data container after the code is done.</p></dd>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20floating"></a>transfer floating</span></dt>
-<dd class="glossdef"><p>Alias for <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>, used for objects with floating refs.</p></dd>
+<a name="glsA"></a><h3 class="title">A</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-array"></a>array</span></dt>
+<dd class="glossdef"><p>Parameter points to an array of items.</p></dd>
<a name="glsO"></a><h3 class="title">O</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-out%20caller-allocates"></a>out caller-allocates</span></dt>
+<dd class="glossdef"><p>Out parameter, where caller must allocate storage.</p></dd>
<dt><span class="glossterm"><a name="annotation-glossterm-out"></a>out</span></dt>
<dd class="glossdef"><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
<a name="glsT"></a><h3 class="title">T</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
-<dd class="glossdef"><p>Free data after the code is done.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20container"></a>transfer container</span></dt>
+<dd class="glossdef"><p>Free data container after the code is done.</p></dd>
<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
<dd class="glossdef"><p>Don't free data after the code is done.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20floating"></a>transfer floating</span></dt>
+<dd class="glossdef"><p>Alias for <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>, used for objects with floating refs.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-type"></a>type</span></dt>
+<dd class="glossdef"><p>Override the parsed C type with given type.</p></dd>
+<a name="glsC"></a><h3 class="title">C</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-closure"></a>closure</span></dt>
+<dd class="glossdef"><p>This parameter is a 'user_data', for callbacks; many bindings can pass NULL here.</p></dd>
+<a name="glsI"></a><h3 class="title">I</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-in"></a>in</span></dt>
+<dd class="glossdef"><p>Parameter for input. Default is <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>.</p></dd>
<a name="glsA"></a><h3 class="title">A</h3>
<dt><span class="glossterm"><a name="annotation-glossterm-allow-none"></a>allow-none</span></dt>
<dd class="glossdef"><p>NULL is ok, both for passing and for returning.</p></dd>
-<a name="glsO"></a><h3 class="title">O</h3>
-<dt><span class="glossterm"><a name="annotation-glossterm-out%20caller-allocates"></a>out caller-allocates</span></dt>
-<dd class="glossdef"><p>Out parameter, where caller must allocate storage.</p></dd>
</div>
<div class="footer">
<hr>
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index 377563c..dbe4412 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -694,11 +694,11 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-libs-GstBitReader.html#gst-bit-reader-init" title="gst_bit_reader_init ()">gst_bit_reader_init</a>, function in <a class="link" href="gstreamer-libs-GstBitReader.html" title="GstBitReader">GstBitReader</a>
+<a class="link" href="gstreamer-libs-GstBitReader.html#GST-BIT-READER-INIT:CAPS" title="GST_BIT_READER_INIT()">GST_BIT_READER_INIT</a>, macro in <a class="link" href="gstreamer-libs-GstBitReader.html" title="GstBitReader">GstBitReader</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="gstreamer-libs-GstBitReader.html#GST-BIT-READER-INIT:CAPS" title="GST_BIT_READER_INIT()">GST_BIT_READER_INIT</a>, macro in <a class="link" href="gstreamer-libs-GstBitReader.html" title="GstBitReader">GstBitReader</a>
+<a class="link" href="gstreamer-libs-GstBitReader.html#gst-bit-reader-init" title="gst_bit_reader_init ()">gst_bit_reader_init</a>, function in <a class="link" href="gstreamer-libs-GstBitReader.html" title="GstBitReader">GstBitReader</a>
</dt>
<dd></dd>
<dt>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index d64cd65..a3ee65b 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer 1.0 Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Library 1.0 (1.2.2)
+ for GStreamer Library 1.0 (1.2.3)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/</a>.
</p></div>
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index e6cf7a5..bfb911f 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -690,16 +690,16 @@
<ANCHOR id="GstTestClock.property-details" href="gstreamer-libs-1.0/GstTestClock.html#GstTestClock.property-details">
<ANCHOR id="GstTestClock--start-time" href="gstreamer-libs-1.0/GstTestClock.html#GstTestClock--start-time">
<ANCHOR id="GstTestClock.see-also" href="gstreamer-libs-1.0/GstTestClock.html#GstTestClock.see-also">
-<ANCHOR id="annotation-glossterm-in" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-in">
-<ANCHOR id="annotation-glossterm-closure" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-closure">
-<ANCHOR id="annotation-glossterm-type" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-type">
<ANCHOR id="annotation-glossterm-scope call" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-scope call">
-<ANCHOR id="annotation-glossterm-array" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-array">
+<ANCHOR id="annotation-glossterm-transfer full" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer full">
<ANCHOR id="annotation-glossterm-element-type" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-element-type">
-<ANCHOR id="annotation-glossterm-transfer container" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer container">
-<ANCHOR id="annotation-glossterm-transfer floating" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer floating">
+<ANCHOR id="annotation-glossterm-array" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-array">
+<ANCHOR id="annotation-glossterm-out caller-allocates" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-out caller-allocates">
<ANCHOR id="annotation-glossterm-out" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-out">
-<ANCHOR id="annotation-glossterm-transfer full" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer full">
+<ANCHOR id="annotation-glossterm-transfer container" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer container">
<ANCHOR id="annotation-glossterm-transfer none" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer none">
+<ANCHOR id="annotation-glossterm-transfer floating" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer floating">
+<ANCHOR id="annotation-glossterm-type" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-type">
+<ANCHOR id="annotation-glossterm-closure" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-closure">
+<ANCHOR id="annotation-glossterm-in" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-in">
<ANCHOR id="annotation-glossterm-allow-none" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-allow-none">
-<ANCHOR id="annotation-glossterm-out caller-allocates" href="gstreamer-libs-1.0/annotation-glossary.html#annotation-glossterm-out caller-allocates">
diff --git a/docs/list-ulink.xsl b/docs/list-ulink.xsl
new file mode 100644
index 0000000..969b5b7
--- /dev/null
+++ b/docs/list-ulink.xsl
@@ -0,0 +1,8 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
+ <xsl:output method='text'/>
+ <xsl:template xmlns:xi='http://www.w3.org/2003/XInclude' match='ulink'>
+ <xsl:value-of select='@url'/><xsl:text>&#xa;</xsl:text>
+ </xsl:template>
+ <xsl:template match='text()|@*'/>
+</xsl:stylesheet>
diff --git a/docs/manual/Makefile.in b/docs/manual/Makefile.in
index 1af65b2..ec6f477 100644
--- a/docs/manual/Makefile.in
+++ b/docs/manual/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index d750fae..e0202ff 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
index ffe46da..8637681 100644
--- a/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
+++ b/docs/plugins/html/gstreamer-plugins-plugin-coreelements.html
@@ -41,7 +41,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.2.2</td>
+<td>1.2.3</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 2098e1d..4ea21ee 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Core Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Core Plugins 1.0 (1.2.2)
+ for GStreamer Core Plugins 1.0 (1.2.3)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/</a>.
</p></div>
diff --git a/docs/plugins/inspect/plugin-coreelements.xml b/docs/plugins/inspect/plugin-coreelements.xml
index 622f808..c34673d 100644
--- a/docs/plugins/inspect/plugin-coreelements.xml
+++ b/docs/plugins/inspect/plugin-coreelements.xml
@@ -3,7 +3,7 @@
<description>GStreamer core elements</description>
<filename>../../plugins/elements/.libs/libgstcoreelements.so</filename>
<basename>libgstcoreelements.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gstreamer</source>
<package>GStreamer source release</package>
diff --git a/docs/pwg/Makefile.in b/docs/pwg/Makefile.in
index ecb39dd..c4fe440 100644
--- a/docs/pwg/Makefile.in
+++ b/docs/pwg/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/docs/slides/Makefile.in b/docs/slides/Makefile.in
index 0c56569..a016500 100644
--- a/docs/slides/Makefile.in
+++ b/docs/slides/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/docs/xsl/Makefile.in b/docs/xsl/Makefile.in
index 5e689b2..bd80a31 100644
--- a/docs/xsl/Makefile.in
+++ b/docs/xsl/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 9fde22b..a074240 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/gst/gstpad.c b/gst/gstpad.c
index 3c3f484..794814b 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -544,6 +544,7 @@ restart:
if (G_UNLIKELY (ev->event != ev_ret.event)) {
if (G_UNLIKELY (ev_ret.event == NULL)) {
/* function unreffed and set the event to NULL, remove it */
+ gst_event_unref (ev->event);
g_array_remove_index (events, i);
len--;
cookie = ++pad->priv->events_cookie;
@@ -575,8 +576,9 @@ apply_pad_offset (GstPad * pad, GstEvent * event)
gst_event_copy_segment (event, &segment);
gst_event_unref (event);
- /* adjust and make a new event with the offset applied */
- segment.base += pad->offset;
+ GST_DEBUG_OBJECT (pad, "apply pad offset %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (pad->offset));
+ gst_segment_offset_running_time (&segment, segment.format, pad->offset);
event = gst_event_new_segment (&segment);
}
return event;
@@ -1177,6 +1179,34 @@ gst_pad_is_active (GstPad * pad)
return result;
}
+static void
+cleanup_hook (GstPad * pad, GHook * hook)
+{
+ GstPadProbeType type;
+
+ if (!G_HOOK_IS_VALID (hook))
+ return;
+
+ type = (hook->flags) >> G_HOOK_FLAG_USER_SHIFT;
+
+ if (type & GST_PAD_PROBE_TYPE_BLOCKING) {
+ /* unblock when we remove the last blocking probe */
+ pad->num_blocked--;
+ GST_DEBUG_OBJECT (pad, "remove blocking probe, now %d left",
+ pad->num_blocked);
+
+ /* Might have new probes now that want to be called */
+ GST_PAD_BLOCK_BROADCAST (pad);
+
+ if (pad->num_blocked == 0) {
+ GST_DEBUG_OBJECT (pad, "last blocking probe removed, unblocking");
+ GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_BLOCKED);
+ }
+ }
+ g_hook_destroy_link (&pad->probes, hook);
+ pad->num_probes--;
+}
+
/**
* gst_pad_add_probe:
* @pad: the #GstPad to add the probe to
@@ -1245,6 +1275,9 @@ gst_pad_add_probe (GstPad * pad, GstPadProbeType mask,
GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_BLOCKED);
GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad, "added blocking probe, "
"now %d blocking probes", pad->num_blocked);
+
+ /* Might have new probes now that want to be called */
+ GST_PAD_BLOCK_BROADCAST (pad);
}
/* call the callback if we need to be called for idle callbacks */
@@ -1258,13 +1291,42 @@ gst_pad_add_probe (GstPad * pad, GstPadProbeType mask,
GST_OBJECT_UNLOCK (pad);
} else {
GstPadProbeInfo info = { GST_PAD_PROBE_TYPE_IDLE, res, };
+ GstPadProbeReturn ret;
+
+ /* Keep another ref, the callback could destroy the pad */
+ gst_object_ref (pad);
/* the pad is idle now, we can signal the idle callback now */
GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad,
"pad is idle, trigger idle callback");
GST_OBJECT_UNLOCK (pad);
- callback (pad, &info, user_data);
+ ret = callback (pad, &info, user_data);
+
+ GST_OBJECT_LOCK (pad);
+ switch (ret) {
+ case GST_PAD_PROBE_REMOVE:
+ /* remove the probe */
+ GST_DEBUG_OBJECT (pad, "asked to remove hook");
+ cleanup_hook (pad, hook);
+ res = 0;
+ break;
+ case GST_PAD_PROBE_DROP:
+ GST_DEBUG_OBJECT (pad, "asked to drop item");
+ break;
+ case GST_PAD_PROBE_PASS:
+ GST_DEBUG_OBJECT (pad, "asked to pass item");
+ break;
+ case GST_PAD_PROBE_OK:
+ GST_DEBUG_OBJECT (pad, "probe returned OK");
+ break;
+ default:
+ GST_DEBUG_OBJECT (pad, "probe returned %d", ret);
+ break;
+ }
+ GST_OBJECT_UNLOCK (pad);
+
+ gst_object_unref (pad);
}
} else {
GST_OBJECT_UNLOCK (pad);
@@ -1272,31 +1334,6 @@ gst_pad_add_probe (GstPad * pad, GstPadProbeType mask,
return res;
}
-static void
-cleanup_hook (GstPad * pad, GHook * hook)
-{
- GstPadProbeType type;
-
- if (!G_HOOK_IS_VALID (hook))
- return;
-
- type = (hook->flags) >> G_HOOK_FLAG_USER_SHIFT;
-
- if (type & GST_PAD_PROBE_TYPE_BLOCKING) {
- /* unblock when we remove the last blocking probe */
- pad->num_blocked--;
- GST_DEBUG_OBJECT (pad, "remove blocking probe, now %d left",
- pad->num_blocked);
- if (pad->num_blocked == 0) {
- GST_DEBUG_OBJECT (pad, "last blocking probe removed, unblocking");
- GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_BLOCKED);
- GST_PAD_BLOCK_BROADCAST (pad);
- }
- }
- g_hook_destroy_link (&pad->probes, hook);
- pad->num_probes--;
-}
-
/**
* gst_pad_remove_probe:
* @pad: the #GstPad with the probe
@@ -3026,8 +3063,9 @@ probe_hook_marshal (GHook * hook, ProbeMarshall * data)
flags = hook->flags >> G_HOOK_FLAG_USER_SHIFT;
type = info->type;
- /* one of the data types */
- if ((flags & GST_PAD_PROBE_TYPE_ALL_BOTH & type) == 0)
+ /* one of the data types for non-idle probes */
+ if ((type & GST_PAD_PROBE_TYPE_IDLE) == 0
+ && (flags & GST_PAD_PROBE_TYPE_ALL_BOTH & type) == 0)
goto no_match;
/* one of the scheduling types */
if ((flags & GST_PAD_PROBE_TYPE_SCHEDULING & type) == 0)
@@ -3036,6 +3074,9 @@ probe_hook_marshal (GHook * hook, ProbeMarshall * data)
if ((type & GST_PAD_PROBE_TYPE_BLOCKING) &&
(flags & GST_PAD_PROBE_TYPE_BLOCKING & type) == 0)
goto no_match;
+ if ((type & GST_PAD_PROBE_TYPE_BLOCKING) == 0 &&
+ (flags & GST_PAD_PROBE_TYPE_BLOCKING))
+ goto no_match;
/* only probes that have GST_PAD_PROBE_TYPE_EVENT_FLUSH set */
if ((type & GST_PAD_PROBE_TYPE_EVENT_FLUSH) &&
(flags & GST_PAD_PROBE_TYPE_EVENT_FLUSH & type) == 0)
@@ -3193,6 +3234,14 @@ again:
GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_BLOCKING);
GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad, "We got unblocked");
+ /* if the list changed, call the new callbacks (they will not have their
+ * cookie set to data.cookie */
+ if (cookie != pad->priv->probe_list_cookie) {
+ GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad,
+ "probe list changed, restarting");
+ goto again;
+ }
+
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
goto flushing;
}
diff --git a/gst/gstsegment.c b/gst/gstsegment.c
index 5f0ac33..cb6d19c 100644
--- a/gst/gstsegment.c
+++ b/gst/gstsegment.c
@@ -651,7 +651,7 @@ gst_segment_to_position (const GstSegment * segment, GstFormat format,
if (G_LIKELY (segment->rate > 0.0)) {
/* bring to corrected position in segment */
- result += start;
+ result += start + segment->offset;
/* outside of the segment boundary stop */
if (G_UNLIKELY (stop != -1 && result > stop))
@@ -663,12 +663,11 @@ gst_segment_to_position (const GstSegment * segment, GstFormat format,
return -1;
/* bring to corrected position in segment */
- result = stop - result;
+ result = stop - result - segment->offset;
}
return result;
}
-
/**
* gst_segment_set_running_time:
* @segment: a #GstSegment structure.
@@ -713,3 +712,51 @@ gst_segment_set_running_time (GstSegment * segment, GstFormat format,
return TRUE;
}
+
+/**
+ * gst_segment_offset_running_time:
+ * @segment: a #GstSegment structure.
+ * @format: the format of the segment.
+ * @offset: the offset to apply in the segment
+ *
+ * Adjust the values in @segment so that @offset is applied to all
+ * future running-time calculations.
+ *
+ * Since: 1.2.3
+ *
+ * Returns: %TRUE if the segment could be updated successfully. If %FALSE is
+ * returned, @offset is not in @segment.
+ */
+gboolean
+gst_segment_offset_running_time (GstSegment * segment, GstFormat format,
+ gint64 offset)
+{
+ g_return_val_if_fail (segment != NULL, FALSE);
+ g_return_val_if_fail (segment->format == format, FALSE);
+
+ if (offset == 0)
+ return TRUE;
+
+ if (offset > 0) {
+ /* positive offset, we can simply apply to the base time */
+ segment->base += offset;
+ } else {
+ offset = -offset;
+ /* negative offset, first try to subtract from base */
+ if (segment->base > offset) {
+ segment->base -= offset;
+ } else {
+ guint64 position;
+
+ /* subtract all from segment.base, remainder in offset */
+ offset -= segment->base;
+ segment->base = 0;
+ position = gst_segment_to_position (segment, format, offset);
+ if (position == -1)
+ return FALSE;
+
+ segment->offset = position;
+ }
+ }
+ return TRUE;
+}
diff --git a/gst/gstsegment.h b/gst/gstsegment.h
index 65f8a62..0f08eb5 100644
--- a/gst/gstsegment.h
+++ b/gst/gstsegment.h
@@ -191,6 +191,8 @@ guint64 gst_segment_to_position (const GstSegment *segment, GstForm
gboolean gst_segment_set_running_time (GstSegment *segment, GstFormat format, guint64 running_time);
+gboolean gst_segment_offset_running_time (GstSegment *segment, GstFormat format, gint64 offset);
+
gboolean gst_segment_clip (const GstSegment *segment, GstFormat format, guint64 start,
guint64 stop, guint64 *clip_start, guint64 *clip_stop);
diff --git a/gst/parse/Makefile.in b/gst/parse/Makefile.in
index 9e65380..d34b240 100644
--- a/gst/parse/Makefile.in
+++ b/gst/parse/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/gst/printf/Makefile.in b/gst/printf/Makefile.in
index 5594dec..895cb68 100644
--- a/gst/printf/Makefile.in
+++ b/gst/printf/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/gstreamer.doap b/gstreamer.doap
index 9fc05c3..9b984bd 100644
--- a/gstreamer.doap
+++ b/gstreamer.doap
@@ -40,6 +40,16 @@ hierarchy, and a set of media-agnostic core elements.
<release>
<Version>
+ <revision>1.2.3</revision>
+ <branch>1.2</branch>
+ <name></name>
+ <created>2014-02-08</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.2.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.2.2</revision>
<branch>1.2</branch>
<name></name>
diff --git a/gstreamer.spec b/gstreamer.spec
index 7b746ea..4c57453 100644
--- a/gstreamer.spec
+++ b/gstreamer.spec
@@ -4,7 +4,7 @@
%define _glib2 2.32.0
Name: %{gstreamer}
-Version: 1.2.2
+Version: 1.2.3
Release: 1
Summary: GStreamer streaming media framework runtime
diff --git a/libs/Makefile.in b/libs/Makefile.in
index 895dcb3..2f00606 100644
--- a/libs/Makefile.in
+++ b/libs/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/libs/gst/Makefile.in b/libs/gst/Makefile.in
index 08eb87c..5eaf2f1 100644
--- a/libs/gst/Makefile.in
+++ b/libs/gst/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/libs/gst/base/Makefile.in b/libs/gst/base/Makefile.in
index 9c97366..21884e8 100644
--- a/libs/gst/base/Makefile.in
+++ b/libs/gst/base/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index 629b92b..07e0e6a 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -330,8 +330,10 @@ struct _GstBaseParsePrivate
/* Pending serialized events */
GList *pending_events;
- /* Newsegment event to be sent after SEEK */
- gboolean pending_segment;
+
+ /* If baseparse has checked the caps to identify if it is
+ * handling video or audio */
+ gboolean checked_media;
/* offset of last parsed frame/data */
gint64 prev_offset;
@@ -471,11 +473,14 @@ static GstFlowReturn gst_base_parse_locate_time (GstBaseParse * parse,
static GstFlowReturn gst_base_parse_start_fragment (GstBaseParse * parse);
static GstFlowReturn gst_base_parse_finish_fragment (GstBaseParse * parse,
gboolean prev_head);
+static GstFlowReturn gst_base_parse_send_buffers (GstBaseParse * parse);
static inline GstFlowReturn gst_base_parse_check_sync (GstBaseParse * parse);
static gboolean gst_base_parse_is_seekable (GstBaseParse * parse);
+static void gst_base_parse_push_pending_events (GstBaseParse * parse);
+
static void
gst_base_parse_clear_queues (GstBaseParse * parse)
{
@@ -507,7 +512,8 @@ gst_base_parse_clear_queues (GstBaseParse * parse)
g_list_foreach (parse->priv->pending_events, (GFunc) gst_event_unref, NULL);
g_list_free (parse->priv->pending_events);
parse->priv->pending_events = NULL;
- parse->priv->pending_segment = FALSE;
+
+ parse->priv->checked_media = FALSE;
}
static void
@@ -526,7 +532,6 @@ gst_base_parse_finalize (GObject * object)
NULL);
g_list_free (parse->priv->pending_events);
parse->priv->pending_events = NULL;
- parse->priv->pending_segment = FALSE;
if (parse->priv->index) {
gst_object_unref (parse->priv->index);
@@ -826,6 +831,7 @@ gst_base_parse_reset (GstBaseParse * parse)
parse->priv->idx_byte_interval = 0;
parse->priv->exact_position = TRUE;
parse->priv->seen_keyframe = FALSE;
+ parse->priv->checked_media = FALSE;
parse->priv->last_dts = GST_CLOCK_TIME_NONE;
parse->priv->last_pts = GST_CLOCK_TIME_NONE;
@@ -835,7 +841,6 @@ gst_base_parse_reset (GstBaseParse * parse)
NULL);
g_list_free (parse->priv->pending_events);
parse->priv->pending_events = NULL;
- parse->priv->pending_segment = FALSE;
if (parse->priv->cache) {
gst_buffer_unref (parse->priv->cache);
@@ -1083,6 +1088,7 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
* whatever else it might claim */
parse->priv->upstream_seekable = FALSE;
next_dts = in_segment->start;
+ gst_event_copy_segment (event, &out_segment);
}
memcpy (&parse->segment, &out_segment, sizeof (GstSegment));
@@ -1092,13 +1098,11 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
applied_rate, format, start, stop, start);
*/
- /* save the segment for later, right before we push a new buffer so that
- * the caps are fixed and the next linked element can receive
- * the segment. */
- parse->priv->pending_segment = TRUE;
ret = TRUE;
- /* but finish the current segment */
+ /* save the segment for later, right before we push a new buffer so that
+ * the caps are fixed and the next linked element can receive
+ * the segment but finish the current segment */
GST_DEBUG_OBJECT (parse, "draining current segment");
if (in_segment->rate > 0.0)
gst_base_parse_drain (parse);
@@ -1149,16 +1153,8 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
("No valid frames found before end of stream"), (NULL));
}
/* newsegment and other serialized events before eos */
- if (G_UNLIKELY (parse->priv->pending_events)) {
- GList *l;
+ gst_base_parse_push_pending_events (parse);
- for (l = parse->priv->pending_events; l != NULL; l = l->next) {
- gst_pad_push_event (parse->srcpad, GST_EVENT (l->data));
- }
- g_list_free (parse->priv->pending_events);
- parse->priv->pending_events = NULL;
- parse->priv->pending_segment = FALSE;
- }
if (parse->priv->framecount < MIN_FRAMES_TO_POST_BITRATE) {
/* We've not posted bitrate tags yet - do so now */
gst_base_parse_post_bitrates (parse, TRUE, TRUE, TRUE);
@@ -1192,6 +1188,9 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
case GST_EVENT_GAP:
{
GST_DEBUG_OBJECT (parse, "draining current data due to gap event");
+
+ gst_base_parse_push_pending_events (parse);
+
if (parse->segment.rate > 0.0)
gst_base_parse_drain (parse);
else
@@ -1859,6 +1858,7 @@ gst_base_parse_check_media (GstBaseParse * parse)
if (caps)
gst_caps_unref (caps);
+ parse->priv->checked_media = TRUE;
GST_DEBUG_OBJECT (parse, "media is video: %d", parse->priv->is_video);
}
@@ -2008,6 +2008,26 @@ gst_base_parse_handle_buffer (GstBaseParse * parse, GstBuffer * buffer,
return ret;
}
+/* gst_base_parse_push_pending_events:
+ * @parse: #GstBaseParse
+ *
+ * Pushes the pending events
+ */
+static void
+gst_base_parse_push_pending_events (GstBaseParse * parse)
+{
+ if (G_UNLIKELY (parse->priv->pending_events)) {
+ GList *r = g_list_reverse (parse->priv->pending_events);
+ GList *l;
+
+ parse->priv->pending_events = NULL;
+ for (l = r; l != NULL; l = l->next) {
+ gst_pad_push_event (parse->srcpad, GST_EVENT_CAST (l->data));
+ }
+ g_list_free (r);
+ }
+}
+
/* gst_base_parse_handle_and_push_frame:
* @parse: #GstBaseParse.
* @klass: #GstBaseParseClass.
@@ -2174,23 +2194,13 @@ gst_base_parse_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
if (!gst_pad_has_current_caps (parse->srcpad))
goto no_caps;
- if (G_UNLIKELY (parse->priv->pending_segment)) {
+ if (G_UNLIKELY (!parse->priv->checked_media)) {
/* have caps; check identity */
gst_base_parse_check_media (parse);
}
/* Push pending events, including SEGMENT events */
- if (G_UNLIKELY (parse->priv->pending_events)) {
- GList *r = g_list_reverse (parse->priv->pending_events);
- GList *l;
-
- parse->priv->pending_events = NULL;
- for (l = r; l != NULL; l = l->next) {
- gst_pad_push_event (parse->srcpad, GST_EVENT (l->data));
- }
- g_list_free (r);
- parse->priv->pending_segment = FALSE;
- }
+ gst_base_parse_push_pending_events (parse);
/* segment adjustment magic; only if we are running the whole show */
if (!parse->priv->passthrough && parse->segment.rate > 0.0 &&
@@ -2288,6 +2298,34 @@ gst_base_parse_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
size);
ret = gst_pad_push (parse->srcpad, buffer);
GST_LOG_OBJECT (parse, "frame pushed, flow %s", gst_flow_get_name (ret));
+ } else if (!parse->priv->disable_passthrough && parse->priv->passthrough) {
+
+ /* in backwards playback mode, if on passthrough we need to push buffers
+ * directly without accumulating them into the buffers_queued as baseparse
+ * will never check for a DISCONT while on passthrough and those buffers
+ * will never be pushed.
+ *
+ * also, as we are on reverse playback, it might be possible that
+ * passthrough might have just been enabled, so make sure to drain the
+ * buffers_queued list */
+ if (G_UNLIKELY (parse->priv->buffers_queued != NULL)) {
+ gst_base_parse_finish_fragment (parse, TRUE);
+ ret = gst_base_parse_send_buffers (parse);
+ }
+
+ if (ret == GST_FLOW_OK) {
+ GST_LOG_OBJECT (parse,
+ "pushing frame (%" G_GSIZE_FORMAT " bytes) now..", size);
+ ret = gst_pad_push (parse->srcpad, buffer);
+ GST_LOG_OBJECT (parse, "frame pushed, flow %s",
+ gst_flow_get_name (ret));
+ } else {
+ GST_LOG_OBJECT (parse,
+ "frame (%" G_GSIZE_FORMAT " bytes) not pushed: %s", size,
+ gst_flow_get_name (ret));
+ gst_buffer_unref (buffer);
+ }
+
} else {
GST_LOG_OBJECT (parse, "frame (%" G_GSIZE_FORMAT " bytes) queued for now",
size);
@@ -3206,17 +3244,7 @@ pause:
}
if (push_eos) {
/* Push pending events, including SEGMENT events */
- if (G_UNLIKELY (parse->priv->pending_events)) {
- GList *r = g_list_reverse (parse->priv->pending_events);
- GList *l;
-
- parse->priv->pending_events = NULL;
- for (l = r; l != NULL; l = l->next) {
- gst_pad_push_event (parse->srcpad, GST_EVENT (l->data));
- }
- g_list_free (r);
- parse->priv->pending_segment = FALSE;
- }
+ gst_base_parse_push_pending_events (parse);
gst_pad_push_event (parse->srcpad, gst_event_new_eos ());
}
@@ -3321,7 +3349,6 @@ gst_base_parse_sink_activate_mode (GstPad * pad, GstObject * parent,
parse->priv->pending_events =
g_list_prepend (parse->priv->pending_events,
gst_event_new_segment (&parse->segment));
- parse->priv->pending_segment = TRUE;
result = TRUE;
} else {
result = gst_pad_stop_task (pad);
@@ -4213,7 +4240,6 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
/* store the newsegment event so it can be sent from the streaming thread. */
/* This will be sent later in _loop() */
- parse->priv->pending_segment = TRUE;
segment_event = gst_event_new_segment (&parse->segment);
gst_event_set_seqnum (segment_event, seqnum);
parse->priv->pending_events =
diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c
index 799835a..a30e10a 100644
--- a/libs/gst/base/gstcollectpads.c
+++ b/libs/gst/base/gstcollectpads.c
@@ -504,7 +504,8 @@ gst_collect_pads_clip_running_time (GstCollectPads * pads,
if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (time))) {
time = gst_segment_to_running_time (&cdata->segment, GST_FORMAT_TIME, time);
if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (time))) {
- GST_DEBUG_OBJECT (cdata->pad, "clipping buffer on pad outside segment");
+ GST_DEBUG_OBJECT (cdata->pad, "clipping buffer on pad outside segment %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_PTS (buf)));
gst_buffer_unref (buf);
*outbuf = NULL;
} else {
@@ -1716,7 +1717,8 @@ gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data,
GST_COLLECT_PADS_STATE_SET (data, GST_COLLECT_PADS_STATE_NEW_SEGMENT);
/* now we can use for e.g. running time */
- seg.position = gst_collect_pads_clip_time (pads, data, seg.start);
+ seg.position =
+ gst_collect_pads_clip_time (pads, data, seg.start + seg.offset);
/* update again */
data->segment = seg;
@@ -1739,6 +1741,7 @@ gst_collect_pads_event_default (GstCollectPads * pads, GstCollectData * data,
GST_COLLECT_PADS_STREAM_LOCK (pads);
gst_event_parse_gap (event, &start, &duration);
+ /* FIXME, handle reverse playback case */
if (GST_CLOCK_TIME_IS_VALID (duration))
start += duration;
/* we do not expect another buffer until after gap,
diff --git a/libs/gst/check/Makefile.in b/libs/gst/check/Makefile.in
index ddafe7f..ce1bce9 100644
--- a/libs/gst/check/Makefile.in
+++ b/libs/gst/check/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/libs/gst/check/libcheck/Makefile.in b/libs/gst/check/libcheck/Makefile.in
index 893eb88..ad69bac 100644
--- a/libs/gst/check/libcheck/Makefile.in
+++ b/libs/gst/check/libcheck/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/libs/gst/controller/Makefile.in b/libs/gst/controller/Makefile.in
index c5f1df2..3badfc6 100644
--- a/libs/gst/controller/Makefile.in
+++ b/libs/gst/controller/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/libs/gst/helpers/Makefile.in b/libs/gst/helpers/Makefile.in
index 25ffee3..6e640f6 100644
--- a/libs/gst/helpers/Makefile.in
+++ b/libs/gst/helpers/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/libs/gst/net/Makefile.in b/libs/gst/net/Makefile.in
index c713399..2ec6f6e 100644
--- a/libs/gst/net/Makefile.in
+++ b/libs/gst/net/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 606c1c1..1cb2334 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index d851c55..db7e93d 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/plugins/Makefile.in b/plugins/Makefile.in
index 472696c..f908e43 100644
--- a/plugins/Makefile.in
+++ b/plugins/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/plugins/elements/Makefile.in b/plugins/elements/Makefile.in
index c00da16..01f7192 100644
--- a/plugins/elements/Makefile.in
+++ b/plugins/elements/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/plugins/elements/gstmultiqueue.c b/plugins/elements/gstmultiqueue.c
index 266fead..df0c65d 100644
--- a/plugins/elements/gstmultiqueue.c
+++ b/plugins/elements/gstmultiqueue.c
@@ -508,8 +508,11 @@ gst_multi_queue_set_property (GObject * object, guint prop_id,
gst_data_queue_get_level (q->queue, &size);
/* do not reduce max size below current level if the single queue has grown because of empty queue */
- if (new_size >= size.visible && size.visible <= mq->max_size.visible)
+ if (new_size == 0) {
q->max_size.visible = new_size;
+ } else if (new_size > size.visible) {
+ q->max_size.visible = new_size;
+ }
tmp = g_list_next (tmp);
};
@@ -740,6 +743,9 @@ gst_multi_queue_change_state (GstElement * element, GstStateChange transition)
sq = (GstSingleQueue *) tmp->data;
sq->flushing = TRUE;
g_cond_signal (&sq->turn);
+
+ sq->last_query = FALSE;
+ g_cond_signal (&sq->query_handled);
}
GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
break;
diff --git a/plugins/elements/gsttee.c b/plugins/elements/gsttee.c
index a6d4b9d..d45b483 100644
--- a/plugins/elements/gsttee.c
+++ b/plugins/elements/gsttee.c
@@ -78,10 +78,6 @@ gst_tee_pull_mode_get_type (void)
return type;
}
-/* lock to protect request pads from being removed while downstream */
-#define GST_TEE_DYN_LOCK(tee) g_mutex_lock (&(tee)->dyn_lock)
-#define GST_TEE_DYN_UNLOCK(tee) g_mutex_unlock (&(tee)->dyn_lock)
-
#define DEFAULT_PROP_NUM_SRC_PADS 0
#define DEFAULT_PROP_HAS_CHAIN TRUE
#define DEFAULT_PROP_SILENT TRUE
@@ -220,8 +216,6 @@ gst_tee_finalize (GObject * object)
g_free (tee->last_message);
- g_mutex_clear (&tee->dyn_lock);
-
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -285,8 +279,6 @@ gst_tee_class_init (GstTeeClass * klass)
static void
gst_tee_init (GstTee * tee)
{
- g_mutex_init (&tee->dyn_lock);
-
tee->sinkpad = gst_pad_new_from_static_template (&sinktemplate, "sink");
tee->sink_mode = GST_PAD_MODE_NONE;
@@ -404,8 +396,6 @@ gst_tee_release_pad (GstElement * element, GstPad * pad)
GST_DEBUG_OBJECT (tee, "releasing pad");
- /* wait for pending pad_alloc to finish */
- GST_TEE_DYN_LOCK (tee);
GST_OBJECT_LOCK (tee);
/* mark the pad as removed so that future pad_alloc fails with NOT_LINKED. */
GST_TEE_PAD_CAST (pad)->removed = TRUE;
@@ -419,7 +409,6 @@ gst_tee_release_pad (GstElement * element, GstPad * pad)
gst_element_remove_pad (GST_ELEMENT_CAST (tee), pad);
gst_pad_set_active (pad, FALSE);
- GST_TEE_DYN_UNLOCK (tee);
gst_object_unref (pad);
@@ -591,6 +580,9 @@ gst_tee_handle_data (GstTee * tee, gpointer data, gboolean is_list)
if (!pads->next) {
GstPad *pad = GST_PAD_CAST (pads->data);
+ /* Keep another ref around, a pad probe
+ * might release and destroy the pad */
+ gst_object_ref (pad);
GST_OBJECT_UNLOCK (tee);
if (pad == tee->pull_pad) {
@@ -600,6 +592,9 @@ gst_tee_handle_data (GstTee * tee, gpointer data, gboolean is_list)
} else {
ret = gst_pad_push (pad, GST_BUFFER_CAST (data));
}
+
+ gst_object_unref (pad);
+
return ret;
}
diff --git a/plugins/elements/gsttee.h b/plugins/elements/gsttee.h
index c092b8f..3f408cb 100644
--- a/plugins/elements/gsttee.h
+++ b/plugins/elements/gsttee.h
@@ -66,9 +66,6 @@ struct _GstTee {
GstElement element;
/*< private >*/
- /* lock protecting dynamic pads */
- GMutex dyn_lock;
-
GstPad *sinkpad;
GstPad *allocpad;
guint pad_counter;
diff --git a/po/af.gmo b/po/af.gmo
index 1135702..0a515db 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 31317a0..63fc698 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2005-12-05 11:45+0200\n"
"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
"Language-Team: Afrikaans <i18n@af.org.za>\n"
diff --git a/po/az.gmo b/po/az.gmo
index ae12c95..d8ef889 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 18e379d..2d5535a 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2004-03-19 18:40+0200\n"
"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/be.gmo b/po/be.gmo
index 60ac6b9..c7c2515 100644
--- a/po/be.gmo
+++ b/po/be.gmo
Binary files differ
diff --git a/po/be.po b/po/be.po
index 732e31e..37ef9d4 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2006-01-18 22:26+0200\n"
"Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
"Language-Team: Belarusian <i18n@mova.org>\n"
diff --git a/po/bg.gmo b/po/bg.gmo
index b89c757..ba4ebd7 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index d1f77bd..79549e7 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2011-04-26 22:40+0300\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
diff --git a/po/ca.gmo b/po/ca.gmo
index 8920df3..b07224f 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 236210f..050242a 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-11-04 19:41+0100\n"
"Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index c0e9428..d8957f8 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 8da2f58..0033c99 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-09-18 19:42+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
diff --git a/po/da.gmo b/po/da.gmo
index 4b4cf63..b906d46 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 681f51b..aac1690 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-12-08 12:41+0100\n"
"Last-Translator: Mogens Jaeger <mogensjaeger@gmail.com>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index e1e3a38..35018e4 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 78fe0a6..8c9f3b3 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-12-16 00:01+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
diff --git a/po/el.gmo b/po/el.gmo
index d82b513..d748dd0 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 795c50f..3c5cb26 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-11-29 11:14+0200\n"
"Last-Translator: Michael Kotsarinis <mk73628@gmail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 9653f9c..d0f5048 100644
--- a/po/en_GB.gmo
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 6a83dcb..bc7ebfa 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2004-04-26 10:36-0400\n"
"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
"Language-Team: English (British) <en_gb@li.org>\n"
diff --git a/po/eo.gmo b/po/eo.gmo
index 6aa41b8..c3259a4 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 92569d4..a3b8094 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2011-06-04 21:11+0100\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index 6a59b05..2fd71f3 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 6743766..39dd6ed 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2011-10-02 15:45+0200\n"
"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.gmo b/po/eu.gmo
index 02e7594..d9af150 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index da6f6c6..51ff78f 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-03-25 13:10+0100\n"
"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.gmo b/po/fi.gmo
index f96909b..63425ab 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 5420a06..ec0011a 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-11-17 23:10+0200\n"
"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index 33f8ac0..c5576e3 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 01bd3eb..73a7079 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2012-12-05 19:31+0100\n"
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
"Language-Team: French <traduc@traduc.org>\n"
diff --git a/po/gl.gmo b/po/gl.gmo
index 79a0824..8e13149 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index b4a0597..3fe33dc 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2012-12-15 03:29+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gstreamer-1.0.pot b/po/gstreamer-1.0.pot
index 1aa493d..59a2770 100644
--- a/po/gstreamer-1.0.pot
+++ b/po/gstreamer-1.0.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer 1.2.2\n"
+"Project-Id-Version: gstreamer 1.2.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/po/hr.gmo b/po/hr.gmo
index e46a996..22b6fb1 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 86a4da2..e2bd9f1 100644
--- a/po/hr.po
+++ b/po/hr.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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2012-05-25 16:47+0200\n"
"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
diff --git a/po/hu.gmo b/po/hu.gmo
index e736923..ce7d29a 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 9fe1ae0..5eba77b 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2012-11-29 14:03+0100\n"
"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.gmo b/po/id.gmo
index 8b34f0f..25a1312 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 3efd135..97507a8 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1,22 +1,21 @@
# Indonesian translations for gstreamer package.
# This file is put in the public domain.
-# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010-2012.
-# Andika Triwidada <andika@gmail.com>.
+# Andika Triwidada <andika@gmail.com>, 2013.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010-2014.
#
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer 1.1.4\n"
+"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
-"PO-Revision-Date: 2013-10-15 15:58+0700\n"
-"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
+"PO-Revision-Date: 2014-01-27 20:09+0700\n"
+"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 1.5.7\n"
msgid "Print the GStreamer version"
msgstr "Cetak versi GStreamer"
@@ -27,11 +26,10 @@ msgstr "Buat semua peringatan fatal"
msgid "Print available debug categories and exit"
msgstr "Cetak kategori awakutu yang tersedia lalu keluar"
-#, fuzzy
msgid ""
"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
msgstr ""
-"Level awakutu standar dari 1 (hanya galat) ke 5 (apapun) atau 0 untuk tak "
+"Level awakutu standar dari 1 (hanya galat) ke 9 (apapun) atau 0 untuk tak "
"ada keluaran"
msgid "LEVEL"
@@ -1167,9 +1165,9 @@ msgstr "Kemajuan: (%s) %s\n"
msgid "Missing element: %s\n"
msgstr "Elemen kurang: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Got context from element '%s': %s=%s\n"
-msgstr "Mendapat konteks dari elemen '%s': %s\n"
+msgstr "Mendapat konteks dari elemen '%s': %s=%s\n"
msgid "Output tags (also known as metadata)"
msgstr "Tag keluaran (juga dikenal sebagai metadata)"
diff --git a/po/it.gmo b/po/it.gmo
index f92d01a..f6d02d8 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 840c180..aaf5a12 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-10-25 10:03+0200\n"
"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index a35f09e..728e311 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index b61873c..2a7b77d 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-08-20 14:56+0900\n"
"Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
diff --git a/po/lt.gmo b/po/lt.gmo
index 3e6d0cb..6054f51 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index eea0fde..22ca2d2 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-07-16 00:50+0300\n"
"Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index dddf67c..ed11770 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 740df56..525f437 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-10-24 21:36+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index b36c5c0..2f980d5 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 2c34aaf..b3e5499 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,17 +1,17 @@
-# translation of gstreamer-1.1.4.po to Dutch
+# translation of gstreamer-1.2.1.po to Dutch
# Dutch translation of gstreamer
# Copyright (C) 2003-2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
# This file is distributed under the same license as the gstreamer package.
#
# Thomas Vander Stichele <thomas@apestaart.org>, 2004.
# Taco Witte <tcwitte@cs.uu.nl>, 2006.
-# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer 1.1.4\n"
+"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
-"PO-Revision-Date: 2013-09-15 13:39+0200\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
+"PO-Revision-Date: 2014-01-09 12:55+0100\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
@@ -30,11 +30,10 @@ msgstr "Alle waarschuwingen fataal maken"
msgid "Print available debug categories and exit"
msgstr "Beschikbare debug-categorieën weergeven en afsluiten"
-#, fuzzy
msgid ""
"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
msgstr ""
-"Standaard debug-niveau van 1 (enkel fouten) tot 5 (alles) of 0 voor geen "
+"Standaard debug-niveau van 1 (alleen fouten) tot 9 (alles) of 0 voor geen "
"uitvoer"
msgid "LEVEL"
@@ -1180,9 +1179,9 @@ msgstr "Voortgang: (%s) %s\n"
msgid "Missing element: %s\n"
msgstr "ontbrekend element: \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "Got context from element '%s': %s=%s\n"
-msgstr "Context verkregen van element '%s': %s\n"
+msgstr "Context verkregen van element '%s': %s=%s\n"
msgid "Output tags (also known as metadata)"
msgstr "Tags (ook bekend als metadata) weergeven"
diff --git a/po/pl.gmo b/po/pl.gmo
index 6efb709..93015aa 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 12be01d..bf09e6c 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-12-08 08:57+0100\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 546a189..b5e87f4 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 770c2f5..381bf04 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -15,10 +15,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer-1.0.3\n"
+"Project-Id-Version: gstreamer-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
-"PO-Revision-Date: 2013-08-20 23:59-0300\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
+"PO-Revision-Date: 2013-12-29 18:20-0200\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
"net>\n"
@@ -37,11 +37,10 @@ msgstr "Tratar todos avisos como fatais"
msgid "Print available debug categories and exit"
msgstr "Exibir as categorias de depuração disponíveis e sair"
-#, fuzzy
msgid ""
"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
msgstr ""
-"Níveis de depuração predefinidos de 1 (apenas erros) até 5 (tudo) ou 0 para "
+"Níveis de depuração predefinidos de 1 (apenas erros) até 9 (tudo) ou 0 para "
"nenhuma saída"
msgid "LEVEL"
@@ -65,6 +64,8 @@ msgid ""
"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
"auto, unix"
msgstr ""
+"Altera o modo de cor do log de depuração. Modos possíveis: off (desligado), "
+"on (ligado), disable (desabilitado), auto (automático) e unix"
msgid "Disable debugging"
msgstr "Desabilitar depuração"
@@ -272,7 +273,7 @@ msgstr ""
#, c-format
msgid "Error writing registry cache to %s: %s"
-msgstr ""
+msgstr "Erro ao escrever o cache de registro em %s: %s"
msgid "title"
msgstr "título"
@@ -812,27 +813,28 @@ msgid "How the image should be rotated or flipped before display"
msgstr "Como a imagem deveria ser rotacionada ou invertida antes da exibição"
msgid "publisher"
-msgstr ""
+msgstr "editora"
msgid "Name of the label or publisher"
-msgstr ""
+msgstr "Nome da gravadora ou editora"
msgid "interpreted-by"
-msgstr ""
+msgstr "interpretado por"
msgid "Information about the people behind a remix and similar interpretations"
msgstr ""
+"Informações sobre a pessoa detrás de um remix ou interpretações similares"
msgid ", "
msgstr ", "
#, c-format
msgid "No URI handler for the %s protocol found"
-msgstr ""
+msgstr "Nenhum manipulador URI para o protocolo %s foi encontrado"
#, c-format
msgid "URI scheme '%s' not supported"
-msgstr ""
+msgstr "Não há suporte para o esquema URI \"%s\""
#, c-format
msgid "ERROR: from element %s: %s\n"
@@ -917,7 +919,7 @@ msgid "Internal clock error."
msgstr "Erro interno no temporizador."
msgid "Failed to map buffer."
-msgstr ""
+msgstr "Falha ao mapear o buffer."
msgid "Filter caps"
msgstr "Caps do filtro"
@@ -1154,9 +1156,8 @@ msgstr "AVISO: do elemento %s: %s\n"
msgid "Prerolled, waiting for buffering to finish...\n"
msgstr "Preparado, esperando o preenchimento do buffer para finalizar...\n"
-#, fuzzy
msgid "Prerolled, waiting for progress to finish...\n"
-msgstr "Preparado, esperando o preenchimento do buffer para finalizar...\n"
+msgstr "Preparado, esperando o progresso para finalizar...\n"
msgid "buffering..."
msgstr "preenchendo buffer..."
@@ -1182,15 +1183,15 @@ msgstr "Interrupção: Parando a fila de processamento...\n"
#, c-format
msgid "Progress: (%s) %s\n"
-msgstr ""
+msgstr "Progresso: (%s) %s\n"
#, c-format
msgid "Missing element: %s\n"
msgstr "Elemento faltando: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Got context from element '%s': %s=%s\n"
-msgstr "AVISO: do elemento %s: %s\n"
+msgstr "Contexto obtido do elemento \"%s\": %s=%s\n"
msgid "Output tags (also known as metadata)"
msgstr "Exibir etiquetas (metadados)"
diff --git a/po/ro.gmo b/po/ro.gmo
index 3c91bf2..fa882bf 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index c52c585..299bb3f 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-08-16 01:10+0300\n"
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index 746e58a..6974795 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index d74c5d2..c95264d 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-12-08 12:44+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
diff --git a/po/rw.gmo b/po/rw.gmo
index b16becc..d700af0 100644
--- a/po/rw.gmo
+++ b/po/rw.gmo
Binary files differ
diff --git a/po/rw.po b/po/rw.po
index c7b95c6..519c13d 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2005-04-04 10:55-0700\n"
"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index fc2012b..e5661cb 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 09aaac4..31863d7 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -3,13 +3,13 @@
# Copyright (C) 2004, 2005 gstreamer's COPYRIGHT HOLDER
# This file is put in the public domain.
#
-# Peter Tuhársky <tuharsky@misbb.sk>, 2007, 2008, 2009, 2010.
+# Peter Tuhársky <tuharsky@misbb.sk>, 2007, 2008, 2009, 2010, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer 0.10.30.3\n"
+"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
-"PO-Revision-Date: 2010-11-08 16:13+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
+"PO-Revision-Date: 2014-01-30 10:24+0100\n"
"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
"Language: sk\n"
@@ -31,11 +31,10 @@ msgstr "Chápať všetky varovania ako závažné"
msgid "Print available debug categories and exit"
msgstr "Vypísať dostupné ladiace kategórie a skončiť"
-#, fuzzy
msgid ""
"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
msgstr ""
-"Predvolená úroveň ladenia od 1 (len chyby) po 5 (všetko) alebo 0 (bez "
+"Predvolená úroveň ladenia od 1 (len chyby) po 9 (všetko) alebo 0 (bez "
"výstupu)"
msgid "LEVEL"
@@ -59,6 +58,8 @@ msgid ""
"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
"auto, unix"
msgstr ""
+"Zmení farebný režim ladiaceho výstupu. Dostupné režimy: zapnutý, vypnutý, "
+"zakázaný, automatický, unix"
msgid "Disable debugging"
msgstr "Zakázať ladenie"
@@ -106,13 +107,10 @@ msgstr "GStreamer narazil na všeobecnú chybu hlavnej knižnice."
msgid ""
"GStreamer developers were too lazy to assign an error code to this error."
msgstr ""
-"Vývojári GStreamer boli príliš leniví na to, aby tejto chybe priradili kód. "
-"Ohláste prosím túto chybu."
+"Vývojári GStreamer boli príliš leniví na to, aby tejto chybe priradili kód."
msgid "Internal GStreamer error: code not implemented."
-msgstr ""
-"Vnútorná chyba GStreamer: kód nebol implementovaný. Ohláste prosím túto "
-"chybu."
+msgstr "Vnútorná chyba GStreamer: kód nebol implementovaný."
msgid ""
"GStreamer error: state change failed and some element failed to post a "
@@ -122,42 +120,31 @@ msgstr ""
"patričné hlásenie o chybe s dôvodom zlyhania."
msgid "Internal GStreamer error: pad problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém pri vyplňovaní. Ohláste prosím túto chybu."
+msgstr "Vnútorná chyba GStreamer: problém pri vyplňovaní."
msgid "Internal GStreamer error: thread problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém s vláknami. Ohláste prosím túto chybu."
+msgstr "Vnútorná chyba GStreamer: problém s vláknami."
-#, fuzzy
msgid "GStreamer error: negotiation problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém pri vyjednávaní. Ohláste prosím túto chybu."
+msgstr "Vnútorná chyba GStreamer: problém pri vyjednávaní."
msgid "Internal GStreamer error: event problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém s udalosťami. Ohláste prosím túto chybu."
+msgstr "Vnútorná chyba GStreamer: problém s udalosťami."
msgid "Internal GStreamer error: seek problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém s nastavením pozície. Ohláste prosím túto "
-"chybu."
+msgstr "Vnútorná chyba GStreamer: problém s nastavením pozície."
msgid "Internal GStreamer error: caps problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém schopností. Ohláste prosím túto chybu."
+msgstr "Vnútorná chyba GStreamer: problém schopností."
msgid "Internal GStreamer error: tag problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém so značkami. Ohláste prosím túto chybu."
+msgstr "Vnútorná chyba GStreamer: problém so značkami."
msgid "Your GStreamer installation is missing a plug-in."
-msgstr "Vašej inštalácii GStreamer chýba zásuvný modul."
+msgstr "Vašej inštalácii GStreamer chýba nejaký zásuvný modul."
-#, fuzzy
msgid "GStreamer error: clock problem."
-msgstr ""
-"Vnútorná chyba GStreamer: problém s časovaním. Ohláste prosím túto chybu."
+msgstr "Vnútorná chyba GStreamer: problém s časovaním."
msgid ""
"This application is trying to use GStreamer functionality that has been "
@@ -432,12 +419,11 @@ msgstr "uri pre copyright"
msgid "URI to the copyright notice of the data"
msgstr "URI pre poznámku o autorských právach údajov"
-#, fuzzy
msgid "encoded by"
msgstr "kodér"
msgid "name of the encoding person or organization"
-msgstr ""
+msgstr "meno kódujúcej osoby alebo organizácie"
msgid "contact"
msgstr "kontakt"
@@ -580,13 +566,12 @@ msgstr "Referenčná úroveň zisku pre stopu a pre album"
msgid "language code"
msgstr "jazykový kód"
-#, fuzzy
msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
-msgstr "jazykový kód pre tento prúd údajov, v súlade s ISO-639-1"
+msgstr ""
+"Jazykový kód pre tento prúd údajov, v súlade s ISO-639-1 alebo ISO-639-2"
-#, fuzzy
msgid "language name"
-msgstr "jazykový kód"
+msgstr "názov jazyku"
msgid "freeform name of the language this stream is in"
msgstr ""
@@ -623,7 +608,7 @@ msgid "comma separated keywords describing the content"
msgstr "kľúčové slová, opisujúce obsah, oddelené čiarkou"
msgid "geo location name"
-msgstr "geografická poloha"
+msgstr "zemepisná poloha - názov"
msgid ""
"human readable descriptive location of where the media has been recorded or "
@@ -655,7 +640,7 @@ msgstr ""
"pre západné dĺžky)"
msgid "geo location elevation"
-msgstr "zemepisná nadmorská výška"
+msgstr "nadmorská výška"
msgid ""
"geo elevation of where the media has been recorded or produced in meters "
@@ -665,21 +650,20 @@ msgstr ""
"produkované, v metroch podľa WGS84 (0 je priemerná hladina mora)"
msgid "geo location country"
-msgstr "zemepisná poloha krajina"
+msgstr "zemepisná poloha - krajina"
msgid "country (english name) where the media has been recorded or produced"
msgstr "krajina (v angličtine), kde bolo toto médium nahraté alebo produkované"
msgid "geo location city"
-msgstr "zemepisná poloha mesto"
+msgstr "zemepisná poloha - mesto"
msgid "city (english name) where the media has been recorded or produced"
msgstr "mesto (v angličtine), kde bolo toto médium nahraté alebo produkované"
msgid "geo location sublocation"
-msgstr "zemepisná poloha upresnenie"
+msgstr "zemepisná poloha - upresnenie"
-#, fuzzy
msgid ""
"a location within a city where the media has been produced or created (e.g. "
"the neighborhood)"
@@ -688,20 +672,20 @@ msgstr ""
"vytvorené (napr. v susedstve)"
msgid "geo location horizontal error"
-msgstr "geografická poloha vodorovná odchýlka"
+msgstr "geografická poloha - vodorovná odchýlka"
msgid "expected error of the horizontal positioning measures (in meters)"
msgstr "očakávaná odchýlka vodorovného umiestnenia (v metroch)"
msgid "geo location movement speed"
-msgstr "zemepisná poloha rýchlosť pohybu"
+msgstr "zemepisná poloha - rýchlosť pohybu"
msgid ""
"movement speed of the capturing device while performing the capture in m/s"
msgstr "rýchlosť pohybu zachytávajúceho zariadenia počas zachytávania v m/s"
msgid "geo location movement direction"
-msgstr "zemepisná poloha smer pohybu"
+msgstr "zemepisná poloha - smer pohybu"
msgid ""
"indicates the movement direction of the device performing the capture of a "
@@ -713,7 +697,7 @@ msgstr ""
"geografický sever, a zvyšuje sa v smere hodinových ručičiek"
msgid "geo location capture direction"
-msgstr "zemepisná poloha smer zachytávania"
+msgstr "zemepisná poloha - smer zachytávania"
msgid ""
"indicates the direction the device is pointing to when capturing a media. "
@@ -815,27 +799,27 @@ msgid "How the image should be rotated or flipped before display"
msgstr "Ako má byť obrázok otočený alebo prevrátený pred jeho zobrazením"
msgid "publisher"
-msgstr ""
+msgstr "vydavateľ"
msgid "Name of the label or publisher"
msgstr ""
msgid "interpreted-by"
-msgstr ""
+msgstr "interpret"
msgid "Information about the people behind a remix and similar interpretations"
-msgstr ""
+msgstr "Informácie o ľuďoch v pozadí remixovania a podobných interpretácií"
msgid ", "
msgstr ", "
#, c-format
msgid "No URI handler for the %s protocol found"
-msgstr ""
+msgstr "Nenašla sa obsluha URI pre protokol %s"
#, c-format
msgid "URI scheme '%s' not supported"
-msgstr ""
+msgstr "URI schéma '%s' nie je podporovaná"
#, c-format
msgid "ERROR: from element %s: %s\n"
@@ -918,7 +902,7 @@ msgid "Internal clock error."
msgstr "Vnútorná chyba časovača."
msgid "Failed to map buffer."
-msgstr ""
+msgstr "Zlyhalo vytváranie vyrovnávacej pamäte."
msgid "Filter caps"
msgstr "Filtrovať schopnosti"
@@ -927,7 +911,7 @@ msgid ""
"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
"property takes a reference to the supplied GstCaps object."
msgstr ""
-"Obmedziť možné povolené schopnosti (NULL znamená ĽUBOVOĽNÉ). Nastavenie "
+"Obmedziť možné povolené schopnosti (NULOVÉ znamená ĽUBOVOĽNÉ). Nastavenie "
"tejto vlastnosti berie referenciu na zadaný objekt GstCaps."
msgid "No file name specified for writing."
@@ -1012,13 +996,13 @@ msgid "controllable"
msgstr "ovládateľné"
msgid "changeable in NULL, READY, PAUSED or PLAYING state"
-msgstr ""
+msgstr "meniteľné v stave NULOVÝ, PRIPRAVENÝ, POZASTAVENÝ alebo HRAJÚCI"
msgid "changeable only in NULL, READY or PAUSED state"
-msgstr ""
+msgstr "meniteľné v iba stave NULOVÝ, PRIPRAVENÝ alebo POZASTAVENÝ"
msgid "changeable only in NULL or READY state"
-msgstr ""
+msgstr "meniteľné iba v stave NULOVÝ alebo PRIPRAVENÝ"
msgid "Blacklisted files:"
msgstr "Zakázané súbory:"
@@ -1075,12 +1059,14 @@ msgid "List the plugin contents"
msgstr "Vypísať zoznam zásuvných modulov"
msgid "Check if the specified element or plugin exists"
-msgstr ""
+msgstr "Skontrolovať, či existuje vybraný prvok alebo zásuvný modul"
msgid ""
"When checking if an element or plugin exists, also check that its version is "
"at least the version specified"
msgstr ""
+"Pri kontrole, či existuje daný prvok alebo zásuvný modul, skontrolovať aj či "
+"je jeho verzia aspoň na určenej úrovni"
msgid "Print supported URI schemes, with the elements that implement them"
msgstr ""
@@ -1095,7 +1081,7 @@ msgid "No such element or plugin '%s'\n"
msgstr "Takýto prvok alebo zásuvný modul neexistuje '%s'\n"
msgid "Index statistics"
-msgstr ""
+msgstr "Štatistika indexu"
#, c-format
msgid "Got message #%u from element \"%s\" (%s): "
@@ -1132,17 +1118,16 @@ msgstr "NAŠLA SA ZNAČKA : našiel ju objekt \"%s\".\n"
msgid "FOUND TAG\n"
msgstr "NAŠLA SA ZNAČKA\n"
-#, fuzzy, c-format
+#, c-format
msgid "FOUND TOC : found by element \"%s\".\n"
-msgstr "NAŠLA SA ZNAČKA : našiel ju prvok \"%s\".\n"
+msgstr "NAŠLA SA TABUĽKA : našiel ju prvok \"%s\".\n"
-#, fuzzy, c-format
+#, c-format
msgid "FOUND TOC : found by object \"%s\".\n"
-msgstr "NAŠLA SA ZNAČKA : našiel ju objekt \"%s\".\n"
+msgstr "NAŠLA SA TABUĽKA : našiel ju objekt \"%s\".\n"
-#, fuzzy
msgid "FOUND TOC\n"
-msgstr "NAŠLA SA ZNAČKA\n"
+msgstr "NAŠLA SA TABUĽKA\n"
#, c-format
msgid ""
@@ -1159,15 +1144,14 @@ msgstr "VAROVANIE: z prvku %s: %s\n"
msgid "Prerolled, waiting for buffering to finish...\n"
msgstr "Predčítané, čakám na dokončenie napĺňania vyrovnávacej pamäte...\n"
-#, fuzzy
msgid "Prerolled, waiting for progress to finish...\n"
-msgstr "Predčítané, čakám na dokončenie napĺňania vyrovnávacej pamäte...\n"
+msgstr "Predčítané, čakám na dokončenie...\n"
msgid "buffering..."
msgstr "Ukladám do vyrovnávacej pamäte..."
msgid "Done buffering, setting pipeline to PLAYING ...\n"
-msgstr "Vyrovnávacia pamäť je naplnená, nastavujem rúru na PREHRÁVA ...\n"
+msgstr "Vyrovnávacia pamäť je naplnená, nastavujem rúru na HRAJÚCU ...\n"
msgid "Buffering, setting pipeline to PAUSED ...\n"
msgstr "Napĺňa sa vyrovnávacia pamäť, nastavujem rúru na POZASTAVENÚ ...\n"
@@ -1184,21 +1168,21 @@ msgstr "Prerušenie: Zastavujem rúru ...\n"
#, c-format
msgid "Progress: (%s) %s\n"
-msgstr ""
+msgstr "Priebeh: (%s) %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Missing element: %s\n"
-msgstr "prvok \"%s\" neexistuje"
+msgstr "Chýba prvok %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Got context from element '%s': %s=%s\n"
-msgstr "VAROVANIE: z prvku %s: %s\n"
+msgstr "Získal som kontext z prvku '%s': %s=%s\n"
msgid "Output tags (also known as metadata)"
msgstr "Vypísať značky (známe tiež ako metadáta)"
msgid "Output TOC (chapters and editions)"
-msgstr ""
+msgstr "Výstupná tabuľka obsahu (kapitoly a vydania)"
msgid "Output status information and property notifications"
msgstr "Vypísať informácie o stave a upozornenia o vlastnostiach"
@@ -1222,7 +1206,7 @@ msgid "Force EOS on sources before shutting the pipeline down"
msgstr "Vynútiť EOS na zdrojoch pred vypnutím rúry"
msgid "Gather and print index statistics"
-msgstr ""
+msgstr "Zozbierať a zobraziť štatistiku indexu"
#, c-format
msgid "ERROR: pipeline could not be constructed: %s.\n"
@@ -1259,7 +1243,7 @@ msgid "Pipeline is PREROLLED ...\n"
msgstr "Rúra je v stave PREROLLED ...\n"
msgid "Setting pipeline to PLAYING ...\n"
-msgstr "Nastavujem rúru na PREHRÁVA ...\n"
+msgstr "Nastavujem rúru na HRAJÚCU ...\n"
# On strike?
msgid "ERROR: pipeline doesn't want to play.\n"
@@ -1268,9 +1252,8 @@ 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"
+msgstr "EOS pri vypnutí je povolený -- čakám na EOS po chybe\n"
msgid "Waiting for EOS...\n"
msgstr "Čakám na EOS...\n"
@@ -1278,9 +1261,8 @@ 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"
+msgstr "Prerušenie počas čakania na EOS - zastavujem rúru ...\n"
msgid "An error happened while waiting for EOS\n"
msgstr "Počas čakania na EOS nastala chyba\n"
@@ -1297,8 +1279,8 @@ msgstr "Nastavujem rúru na NULOVÚ ...\n"
msgid "Freeing pipeline ...\n"
msgstr "Uvoľňujem rúru ...\n"
-#~ msgid "Print alloc trace (if enabled at compile time)"
-#~ msgstr "Vypisovať stopu alokácie (ak je to povolené pri kompilácii)"
+#~ msgid "maximum"
+#~ msgstr "maximum"
#~ msgid "Usage: gst-xmllaunch <file.xml> [ element.property=value ... ]\n"
#~ msgstr ""
@@ -1330,6 +1312,9 @@ msgstr "Uvoľňujem rúru ...\n"
#~ msgid "Do not install signal handlers for SIGUSR1 and SIGUSR2"
#~ msgstr "Neinštalovať obsluhu signálov SIGUSR1 a SIGUSR2"
+#~ msgid "Print alloc trace (if enabled at compile time)"
+#~ msgstr "Vypisovať stopu alokácie (ak je to povolené pri kompilácii)"
+
#~ msgid "Error re-scanning registry %s: %s"
#~ msgstr "Chyba pri opätovnom skenovaní registrov %s: %s"
diff --git a/po/sl.gmo b/po/sl.gmo
index 803466a..143582f 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 56e238d..bf84f83 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer-1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-01-05 10:16+0100\n"
"Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.gmo b/po/sq.gmo
index ad0b9cc..2dd170b 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 9c7211f..6ec3ad7 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2004-08-07 23:46+0200\n"
"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
"Language-Team: Albanian <begraj@hotmail.com>\n"
diff --git a/po/sr.gmo b/po/sr.gmo
index 5a59738..ccdb6c8 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 5b5a382..73461fc 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -2,13 +2,13 @@
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
# This file is distributed under the same license as the gstreamer package.
# Danilo Segan <dsegan@gmx.net>, 2004, 2005.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2013.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gstreamer-1.1.4\n"
+"Project-Id-Version: gstreamer-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
-"PO-Revision-Date: 2013-10-04 22:39+0200\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
+"PO-Revision-Date: 2014-01-13 17:53+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -28,12 +28,11 @@ msgstr "Чини сва упозорења кобним"
msgid "Print available debug categories and exit"
msgstr "Исписује доступне категорије за уклањање грешака и излази"
-#, fuzzy
msgid ""
"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
msgstr ""
-"Подразумевани ниво за уклањање грешака од 1 (само грешке) до 5 (све) или 0 "
-"(без излаза)"
+"Основни ниво за уклањање грешака од 1 (само грешке) до 9 (све) или 0 (без "
+"излаза)"
msgid "LEVEL"
msgstr "НИВО"
@@ -1176,9 +1175,9 @@ msgstr "Напредовање: (%s) %s\n"
msgid "Missing element: %s\n"
msgstr "Недостаје елемент: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Got context from element '%s': %s=%s\n"
-msgstr "Добих садржај из елемента „%s“: %s\n"
+msgstr "Добих садржај из елемента „%s“: %s=%s\n"
msgid "Output tags (also known as metadata)"
msgstr "Излазне ознаке (такође познате и као метаподаци)"
diff --git a/po/sv.gmo b/po/sv.gmo
index 48c1105..bbbf767 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 8ce2d97..5cbea5b 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2011-01-09 19:46+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index 70799fe..3a0a551 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 774c28c..fec3deb 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2004-04-03 03:14+0300\n"
"Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index ea4cebb..db26c74 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 4f86a44..87c645c 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-12-07 22:49+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index bd5881f..7b06f93 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 5682098..684c25b 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gstreamer-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2013-12-11 08:08+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 8f81919..9abd94c 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 52f7621..0096c03 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2010-02-02 18:58+0800\n"
"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index 43d975a..f2f6f89 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 86dc7fa..967d8a3 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: 2013-12-26 17:29+0100\n"
+"POT-Creation-Date: 2014-02-08 11:32+0100\n"
"PO-Revision-Date: 2005-04-27 14:55+0800\n"
"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 31318e5..a1f0f1b 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/benchmarks/Makefile.in b/tests/benchmarks/Makefile.in
index 6beab2c..f84e20a 100644
--- a/tests/benchmarks/Makefile.in
+++ b/tests/benchmarks/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 0568d90..28b0173 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -88,6 +88,7 @@ REGISTRY_CHECKS = \
elements/queue \
elements/queue2 \
elements/valve \
+ libs/baseparse \
libs/basesrc \
libs/basesink \
libs/controller \
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index 86175b6..7762a11 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
@@ -187,6 +187,7 @@ CONFIG_CLEAN_VPATH_FILES =
@GST_DISABLE_REGISTRY_FALSE@ elements/queue$(EXEEXT) \
@GST_DISABLE_REGISTRY_FALSE@ elements/queue2$(EXEEXT) \
@GST_DISABLE_REGISTRY_FALSE@ elements/valve$(EXEEXT) \
+@GST_DISABLE_REGISTRY_FALSE@ libs/baseparse$(EXEEXT) \
@GST_DISABLE_REGISTRY_FALSE@ libs/basesrc$(EXEEXT) \
@GST_DISABLE_REGISTRY_FALSE@ libs/basesink$(EXEEXT) \
@GST_DISABLE_REGISTRY_FALSE@ libs/controller$(EXEEXT) \
@@ -585,6 +586,12 @@ libs_adapter_LDADD = $(LDADD)
libs_adapter_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
$(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
$(am__DEPENDENCIES_1)
+libs_baseparse_SOURCES = libs/baseparse.c
+libs_baseparse_OBJECTS = libs/baseparse.$(OBJEXT)
+libs_baseparse_LDADD = $(LDADD)
+libs_baseparse_DEPENDENCIES = $(top_builddir)/libs/gst/check/libgstcheck-@GST_API_VERSION@.la \
+ $(top_builddir)/libs/gst/base/libgstbase-@GST_API_VERSION@.la \
+ $(am__DEPENDENCIES_1)
libs_basesink_SOURCES = libs/basesink.c
libs_basesink_OBJECTS = libs/basesink.$(OBJEXT)
libs_basesink_LDADD = $(LDADD)
@@ -792,16 +799,16 @@ SOURCES = elements/capsfilter.c elements/fakesink.c elements/fakesrc.c \
gst/gstsegment.c gst/gststructure.c gst/gstsystemclock.c \
gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
gst/gsttocsetter.c gst/gsturi.c gst/gstutils.c gst/gstvalue.c \
- libs/adapter.c libs/basesink.c libs/basesrc.c libs/bitreader.c \
- libs/bytereader.c libs/bytewriter.c libs/collectpads.c \
- libs/controller.c $(libs_gstlibscpp_SOURCES) \
- libs/gstnetclientclock.c libs/gstnettimeprovider.c \
- libs/gsttestclock.c libs/libsabi.c libs/queuearray.c \
- libs/transform1.c libs/typefindhelper.c pipelines/cleanup.c \
- pipelines/parse-disabled.c pipelines/parse-launch.c \
- pipelines/queue-error.c pipelines/seek.c \
- pipelines/simple-launch-lines.c pipelines/stress.c \
- tools/gstinspect.c
+ libs/adapter.c libs/baseparse.c libs/basesink.c libs/basesrc.c \
+ libs/bitreader.c libs/bytereader.c libs/bytewriter.c \
+ libs/collectpads.c libs/controller.c \
+ $(libs_gstlibscpp_SOURCES) libs/gstnetclientclock.c \
+ libs/gstnettimeprovider.c libs/gsttestclock.c libs/libsabi.c \
+ libs/queuearray.c libs/transform1.c libs/typefindhelper.c \
+ pipelines/cleanup.c pipelines/parse-disabled.c \
+ pipelines/parse-launch.c pipelines/queue-error.c \
+ pipelines/seek.c pipelines/simple-launch-lines.c \
+ pipelines/stress.c tools/gstinspect.c
DIST_SOURCES = elements/capsfilter.c elements/fakesink.c \
elements/fakesrc.c elements/fdsrc.c elements/filesink.c \
elements/filesrc.c elements/funnel.c elements/identity.c \
@@ -821,16 +828,16 @@ DIST_SOURCES = elements/capsfilter.c elements/fakesink.c \
gst/gstsegment.c gst/gststructure.c gst/gstsystemclock.c \
gst/gsttag.c gst/gsttagsetter.c gst/gsttask.c gst/gsttoc.c \
gst/gsttocsetter.c gst/gsturi.c gst/gstutils.c gst/gstvalue.c \
- libs/adapter.c libs/basesink.c libs/basesrc.c libs/bitreader.c \
- libs/bytereader.c libs/bytewriter.c libs/collectpads.c \
- libs/controller.c $(libs_gstlibscpp_SOURCES) \
- libs/gstnetclientclock.c libs/gstnettimeprovider.c \
- libs/gsttestclock.c libs/libsabi.c libs/queuearray.c \
- libs/transform1.c libs/typefindhelper.c pipelines/cleanup.c \
- pipelines/parse-disabled.c pipelines/parse-launch.c \
- pipelines/queue-error.c pipelines/seek.c \
- pipelines/simple-launch-lines.c pipelines/stress.c \
- tools/gstinspect.c
+ libs/adapter.c libs/baseparse.c libs/basesink.c libs/basesrc.c \
+ libs/bitreader.c libs/bytereader.c libs/bytewriter.c \
+ libs/collectpads.c libs/controller.c \
+ $(libs_gstlibscpp_SOURCES) libs/gstnetclientclock.c \
+ libs/gstnettimeprovider.c libs/gsttestclock.c libs/libsabi.c \
+ libs/queuearray.c libs/transform1.c libs/typefindhelper.c \
+ pipelines/cleanup.c pipelines/parse-disabled.c \
+ pipelines/parse-launch.c pipelines/queue-error.c \
+ pipelines/seek.c pipelines/simple-launch-lines.c \
+ pipelines/stress.c tools/gstinspect.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -1400,6 +1407,7 @@ LIBSABI_CHECKS = libs/libsabi
@GST_DISABLE_REGISTRY_FALSE@ elements/queue \
@GST_DISABLE_REGISTRY_FALSE@ elements/queue2 \
@GST_DISABLE_REGISTRY_FALSE@ elements/valve \
+@GST_DISABLE_REGISTRY_FALSE@ libs/baseparse \
@GST_DISABLE_REGISTRY_FALSE@ libs/basesrc \
@GST_DISABLE_REGISTRY_FALSE@ libs/basesink \
@GST_DISABLE_REGISTRY_FALSE@ libs/controller \
@@ -1948,6 +1956,12 @@ libs/adapter.$(OBJEXT): libs/$(am__dirstamp) \
libs/adapter$(EXEEXT): $(libs_adapter_OBJECTS) $(libs_adapter_DEPENDENCIES) $(EXTRA_libs_adapter_DEPENDENCIES) libs/$(am__dirstamp)
@rm -f libs/adapter$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(libs_adapter_OBJECTS) $(libs_adapter_LDADD) $(LIBS)
+libs/baseparse.$(OBJEXT): libs/$(am__dirstamp) \
+ libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/baseparse$(EXEEXT): $(libs_baseparse_OBJECTS) $(libs_baseparse_DEPENDENCIES) $(EXTRA_libs_baseparse_DEPENDENCIES) libs/$(am__dirstamp)
+ @rm -f libs/baseparse$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(libs_baseparse_OBJECTS) $(libs_baseparse_LDADD) $(LIBS)
libs/basesink.$(OBJEXT): libs/$(am__dirstamp) \
libs/$(DEPDIR)/$(am__dirstamp)
@@ -2173,6 +2187,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstutils.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gstvalue.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/adapter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/baseparse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/basesink.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/basesrc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/bitreader.Po@am__quote@
@@ -2940,6 +2955,13 @@ elements/valve.log: elements/valve$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+libs/baseparse.log: libs/baseparse$(EXEEXT)
+ @p='libs/baseparse$(EXEEXT)'; \
+ b='libs/baseparse'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
libs/basesrc.log: libs/basesrc$(EXEEXT)
@p='libs/basesrc$(EXEEXT)'; \
b='libs/basesrc'; \
diff --git a/tests/check/gst/gstpad.c b/tests/check/gst/gstpad.c
index 406d1ce..2b193b1 100644
--- a/tests/check/gst/gstpad.c
+++ b/tests/check/gst/gstpad.c
@@ -1109,7 +1109,6 @@ test_pad_blocking_with_type (GstPadProbeType type)
id = gst_pad_add_probe (pad, type, block_async_cb_return_ok, NULL, NULL);
-
thread = g_thread_try_new ("gst-check", (GThreadFunc) push_buffer_async,
pad, NULL);
@@ -1192,6 +1191,106 @@ GST_START_TEST (test_pad_probe_remove)
GST_END_TEST;
+static GstPadProbeReturn
+probe_block_a (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+ return GST_PAD_PROBE_OK;
+}
+
+static GstPadProbeReturn
+probe_block_b (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+ gboolean *probe_b_called = user_data;
+
+ *probe_b_called = TRUE;
+
+ return GST_PAD_PROBE_OK;
+}
+
+static GstPadProbeReturn
+probe_block_c (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+ gboolean *probe_c_called = user_data;
+
+ *probe_c_called = TRUE;
+
+ return GST_PAD_PROBE_REMOVE;
+}
+
+GST_START_TEST (test_pad_probe_block_add_remove)
+{
+ GstPad *pad;
+ GThread *thread;
+ gulong probe_a, probe_b;
+ gboolean probe_b_called = FALSE;
+ gboolean probe_c_called = FALSE;
+
+ pad = gst_pad_new ("src", GST_PAD_SRC);
+ fail_unless (pad != NULL);
+
+ gst_pad_set_active (pad, TRUE);
+ fail_unless (pad->num_probes == 0);
+ fail_unless (pad->num_blocked == 0);
+
+ fail_unless (gst_pad_push_event (pad,
+ gst_event_new_stream_start ("test")) == TRUE);
+ fail_unless (gst_pad_push_event (pad,
+ gst_event_new_segment (&dummy_segment)) == TRUE);
+
+ probe_a = gst_pad_add_probe (pad,
+ GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER,
+ probe_block_a, NULL, NULL);
+
+ fail_unless (pad->num_probes == 1);
+ fail_unless (pad->num_blocked == 1);
+
+ thread = g_thread_try_new ("gst-check", (GThreadFunc) push_buffer_async,
+ pad, NULL);
+
+ /* wait for the block */
+ while (!gst_pad_is_blocking (pad)) {
+ g_usleep (10000);
+ }
+
+ probe_b = gst_pad_add_probe (pad,
+ GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER,
+ probe_block_b, &probe_b_called, NULL);
+
+ gst_pad_remove_probe (pad, probe_a);
+
+ /* wait for the callback */
+ while (!probe_b_called) {
+ g_usleep (10000);
+ }
+
+ /* wait for the block */
+ while (!gst_pad_is_blocking (pad)) {
+ g_usleep (10000);
+ }
+
+ gst_pad_add_probe (pad,
+ GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER,
+ probe_block_c, &probe_c_called, NULL);
+
+ gst_pad_remove_probe (pad, probe_b);
+
+ /* wait for the callback */
+ while (!probe_c_called) {
+ g_usleep (10000);
+ }
+
+ /* wait for the unblock */
+ while (gst_pad_is_blocking (pad)) {
+ g_usleep (10000);
+ }
+
+ gst_object_unref (pad);
+
+ g_thread_join (thread);
+}
+
+GST_END_TEST;
+
static gboolean src_flush_start_probe_called = FALSE;
static gboolean src_flush_stop_probe_called = FALSE;
static gboolean sink_flush_start_probe_called = FALSE;
@@ -1746,6 +1845,7 @@ gst_pad_suite (void)
tcase_add_test (tc_chain, test_pad_blocking_with_probe_type_block);
tcase_add_test (tc_chain, test_pad_blocking_with_probe_type_blocking);
tcase_add_test (tc_chain, test_pad_probe_remove);
+ tcase_add_test (tc_chain, test_pad_probe_block_add_remove);
tcase_add_test (tc_chain, test_pad_probe_flush_events);
tcase_add_test (tc_chain, test_queue_src_caps_notify_linked);
tcase_add_test (tc_chain, test_queue_src_caps_notify_not_linked);
diff --git a/tests/check/gst/gstsegment.c b/tests/check/gst/gstsegment.c
index 4c15133..771d15d 100644
--- a/tests/check/gst/gstsegment.c
+++ b/tests/check/gst/gstsegment.c
@@ -613,6 +613,86 @@ GST_START_TEST (segment_seek_noupdate)
GST_END_TEST;
+GST_START_TEST (segment_offset)
+{
+ GstSegment segment;
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+
+ segment.start = 0;
+ segment.position = 50;
+ segment.stop = 200;
+ segment.time = 0;
+
+ check_times (&segment, 20, 20, 20);
+ check_times (&segment, 220, -1, -1);
+
+ fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
+ 0) == TRUE);
+ fail_unless (segment.start == 0);
+ fail_unless (segment.stop == 200);
+ fail_unless (segment.time == 0);
+ fail_unless (segment.position == 50);
+ fail_unless (segment.base == 0);
+ fail_unless (segment.offset == 0);
+ check_times (&segment, 20, 20, 20);
+
+ fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
+ 100) == TRUE);
+ fail_unless (segment.start == 0);
+ fail_unless (segment.stop == 200);
+ fail_unless (segment.time == 0);
+ fail_unless (segment.position == 50);
+ fail_unless (segment.base == 100);
+ fail_unless (segment.offset == 0);
+ check_times (&segment, 20, 20, 120);
+
+ fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
+ -50) == TRUE);
+ fail_unless (segment.start == 0);
+ fail_unless (segment.stop == 200);
+ fail_unless (segment.time == 0);
+ fail_unless (segment.position == 50);
+ fail_unless (segment.base == 50);
+ fail_unless (segment.offset == 0);
+ check_times (&segment, 20, 20, 70);
+
+ fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
+ -100) == TRUE);
+ fail_unless (segment.start == 0);
+ fail_unless (segment.stop == 200);
+ fail_unless (segment.time == 0);
+ fail_unless (segment.position == 50);
+ fail_unless (segment.base == 0);
+ fail_unless (segment.offset == 50);
+ check_times (&segment, 20, 20, -1);
+ check_times (&segment, 200, 200, 150);
+
+ /* can go negative */
+ fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
+ -151) == FALSE);
+ fail_unless (segment.start == 0);
+ fail_unless (segment.stop == 200);
+ fail_unless (segment.time == 0);
+ fail_unless (segment.position == 50);
+ fail_unless (segment.base == 0);
+ fail_unless (segment.offset == 50);
+ check_times (&segment, 100, 100, 50);
+ check_times (&segment, 200, 200, 150);
+
+ fail_unless (gst_segment_offset_running_time (&segment, GST_FORMAT_TIME,
+ -150) == TRUE);
+ fail_unless (segment.start == 0);
+ fail_unless (segment.stop == 200);
+ fail_unless (segment.time == 0);
+ fail_unless (segment.position == 50);
+ fail_unless (segment.base == 0);
+ fail_unless (segment.offset == 200);
+ check_times (&segment, 200, 200, 0);
+}
+
+GST_END_TEST;
+
static Suite *
gst_segment_suite (void)
@@ -629,6 +709,7 @@ gst_segment_suite (void)
tcase_add_test (tc_chain, segment_seek_rate);
tcase_add_test (tc_chain, segment_copy);
tcase_add_test (tc_chain, segment_seek_noupdate);
+ tcase_add_test (tc_chain, segment_offset);
return s;
}
diff --git a/tests/check/libs/baseparse.c b/tests/check/libs/baseparse.c
new file mode 100644
index 0000000..42b260b
--- /dev/null
+++ b/tests/check/libs/baseparse.c
@@ -0,0 +1,304 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014 Samsung Electronics. All rights reserved.
+ * Author: Thiago Santos <ts.santos@sisa.samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <gst/gst.h>
+#include <gst/check/gstcheck.h>
+#include <gst/base/gstbaseparse.h>
+
+static GstPad *mysrcpad, *mysinkpad;
+static GstElement *parsetest;
+
+#define TEST_VIDEO_WIDTH 640
+#define TEST_VIDEO_HEIGHT 480
+#define TEST_VIDEO_FPS_N 30
+#define TEST_VIDEO_FPS_D 1
+
+#define GST_PARSER_TESTER_TYPE gst_parser_tester_get_type()
+static GType gst_parser_tester_get_type (void);
+
+typedef struct _GstParserTester GstParserTester;
+typedef struct _GstParserTesterClass GstParserTesterClass;
+
+struct _GstParserTester
+{
+ GstBaseParse parent;
+};
+
+struct _GstParserTesterClass
+{
+ GstBaseParseClass parent_class;
+};
+
+G_DEFINE_TYPE (GstParserTester, gst_parser_tester, GST_TYPE_BASE_PARSE);
+
+static gboolean
+gst_parser_tester_start (GstBaseParse * parse)
+{
+ return TRUE;
+}
+
+static gboolean
+gst_parser_tester_stop (GstBaseParse * parse)
+{
+ return TRUE;
+}
+
+static gboolean
+gst_parser_tester_set_sink_caps (GstBaseParse * parse, GstCaps * caps)
+{
+ gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps);
+ gst_caps_unref (caps);
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_parser_tester_handle_frame (GstBaseParse * parse,
+ GstBaseParseFrame * frame, gint * skipsize)
+{
+ while (frame->buffer && gst_buffer_get_size (frame->buffer) >= 8) {
+ GST_BUFFER_DURATION (frame->buffer) =
+ gst_util_uint64_scale_round (GST_SECOND, TEST_VIDEO_FPS_D,
+ TEST_VIDEO_FPS_N);
+ gst_base_parse_finish_frame (parse, frame, 8);
+ }
+ return GST_FLOW_OK;
+}
+
+static void
+gst_parser_tester_class_init (GstParserTesterClass * klass)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseParseClass *baseparse_class = GST_BASE_PARSE_CLASS (klass);
+
+ static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK, GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-test-custom"));
+
+ static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC, GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-test-custom"));
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_templ));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_templ));
+
+ gst_element_class_set_metadata (element_class,
+ "ParserTester", "Parser/Video", "yep", "me");
+
+ baseparse_class->start = gst_parser_tester_start;
+ baseparse_class->stop = gst_parser_tester_stop;
+ baseparse_class->handle_frame = gst_parser_tester_handle_frame;
+ baseparse_class->set_sink_caps = gst_parser_tester_set_sink_caps;
+}
+
+static void
+gst_parser_tester_init (GstParserTester * tester)
+{
+}
+
+static void
+setup_parsertester (void)
+{
+ GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-test-custom")
+ );
+ GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-test-custom")
+ );
+
+ parsetest = g_object_new (GST_PARSER_TESTER_TYPE, NULL);
+ mysrcpad = gst_check_setup_src_pad (parsetest, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (parsetest, &sinktemplate);
+}
+
+static void
+cleanup_parsertest (void)
+{
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (parsetest);
+ gst_check_teardown_sink_pad (parsetest);
+ gst_check_teardown_element (parsetest);
+}
+
+static GstBuffer *
+create_test_buffer (guint64 num)
+{
+ GstBuffer *buffer;
+ guint64 *data = g_malloc (sizeof (guint64));
+
+ *data = num;
+
+ buffer = gst_buffer_new_wrapped (data, sizeof (guint64));
+
+ GST_BUFFER_PTS (buffer) =
+ gst_util_uint64_scale_round (num, GST_SECOND * TEST_VIDEO_FPS_D,
+ TEST_VIDEO_FPS_N);
+ GST_BUFFER_DURATION (buffer) =
+ gst_util_uint64_scale_round (GST_SECOND, TEST_VIDEO_FPS_D,
+ TEST_VIDEO_FPS_N);
+
+ return buffer;
+}
+
+static void
+send_startup_events (void)
+{
+ GstCaps *caps;
+
+ fail_unless (gst_pad_push_event (mysrcpad,
+ gst_event_new_stream_start ("randomvalue")));
+
+ /* push caps */
+ caps =
+ gst_caps_new_simple ("video/x-test-custom", "width", G_TYPE_INT,
+ TEST_VIDEO_WIDTH, "height", G_TYPE_INT, TEST_VIDEO_HEIGHT, "framerate",
+ GST_TYPE_FRACTION, TEST_VIDEO_FPS_N, TEST_VIDEO_FPS_D, NULL);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
+}
+
+static void
+run_parser_playback_test (GList * input, gint expected_output, gdouble rate)
+{
+ GstBuffer *buffer;
+ guint64 i;
+ GList *iter;
+ GstSegment segment;
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (parsetest, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.rate = rate;
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+ /* push buffers, the data is actually a number so we can track them */
+ for (iter = input; iter; iter = g_list_next (iter)) {
+ buffer = iter->data;
+
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+ }
+ g_list_free (input);
+
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+
+ /* check that all buffers were received by our source pad */
+ fail_unless (g_list_length (buffers) == expected_output);
+ i = 0;
+ for (iter = buffers; iter; iter = g_list_next (iter)) {
+ GstMapInfo map;
+ guint64 num;
+
+ buffer = iter->data;
+
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+
+ num = *(guint64 *) map.data;
+ fail_unless (i == num);
+ fail_unless (GST_BUFFER_PTS (buffer) == gst_util_uint64_scale_round (i,
+ GST_SECOND * TEST_VIDEO_FPS_D, TEST_VIDEO_FPS_N));
+ fail_unless (GST_BUFFER_DURATION (buffer) ==
+ gst_util_uint64_scale_round (GST_SECOND, TEST_VIDEO_FPS_D,
+ TEST_VIDEO_FPS_N));
+
+ gst_buffer_unmap (buffer, &map);
+ i++;
+ }
+
+ g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+ buffers = NULL;
+
+ cleanup_parsertest ();
+}
+
+
+GST_START_TEST (parser_playback)
+{
+ GList *input = NULL;
+ gint i;
+ GstBuffer *buffer;
+
+ setup_parsertester ();
+
+ /* push buffers, the data is actually a number so we can track them */
+ for (i = 0; i < 3; i++) {
+ buffer = create_test_buffer (i);
+ input = g_list_append (input, buffer);
+ }
+
+ run_parser_playback_test (input, 3, 1.0);
+}
+
+GST_END_TEST;
+
+
+/* Check https://bugzilla.gnome.org/show_bug.cgi?id=721941 */
+GST_START_TEST (parser_reverse_playback_on_passthrough)
+{
+ GList *input = NULL;
+ gint i;
+ GstBuffer *buffer;
+
+ setup_parsertester ();
+
+ gst_base_parse_set_passthrough (GST_BASE_PARSE (parsetest), TRUE);
+
+ /* push buffers, the data is actually a number so we can track them */
+ for (i = 0; i < 6; i++) {
+ buffer = create_test_buffer (i);
+ if (i > 0)
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+ input = g_list_append (input, buffer);
+ }
+ GST_BUFFER_FLAG_SET (g_list_nth (input, 3)->data, GST_BUFFER_FLAG_DISCONT);
+
+ run_parser_playback_test (input, 6, -1.0);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+gst_baseparse_suite (void)
+{
+ Suite *s = suite_create ("GstBaseParse");
+ TCase *tc = tcase_create ("general");
+
+ suite_add_tcase (s, tc);
+ tcase_add_test (tc, parser_playback);
+ tcase_add_test (tc, parser_reverse_playback_on_passthrough);
+
+ return s;
+}
+
+GST_CHECK_MAIN (gst_baseparse);
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 50c2e1d..1a0e14e 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/adapter/Makefile.in b/tests/examples/adapter/Makefile.in
index 50fdb45..3b3c637 100644
--- a/tests/examples/adapter/Makefile.in
+++ b/tests/examples/adapter/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/controller/Makefile.in b/tests/examples/controller/Makefile.in
index 8cee6ab..7186d97 100644
--- a/tests/examples/controller/Makefile.in
+++ b/tests/examples/controller/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/helloworld/Makefile.in b/tests/examples/helloworld/Makefile.in
index 6eb9d0f..c3602ac 100644
--- a/tests/examples/helloworld/Makefile.in
+++ b/tests/examples/helloworld/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/launch/Makefile.in b/tests/examples/launch/Makefile.in
index 42ec64d..b593531 100644
--- a/tests/examples/launch/Makefile.in
+++ b/tests/examples/launch/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/manual/Makefile.in b/tests/examples/manual/Makefile.in
index ed7973a..4a17244 100644
--- a/tests/examples/manual/Makefile.in
+++ b/tests/examples/manual/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/memory/Makefile.in b/tests/examples/memory/Makefile.in
index 2682ea4..2c1b63d 100644
--- a/tests/examples/memory/Makefile.in
+++ b/tests/examples/memory/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/metadata/Makefile.in b/tests/examples/metadata/Makefile.in
index 6690651..093b781 100644
--- a/tests/examples/metadata/Makefile.in
+++ b/tests/examples/metadata/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/queue/Makefile.in b/tests/examples/queue/Makefile.in
index f51b740..f073877 100644
--- a/tests/examples/queue/Makefile.in
+++ b/tests/examples/queue/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/stepping/Makefile.in b/tests/examples/stepping/Makefile.in
index 1c58c4e..aa29847 100644
--- a/tests/examples/stepping/Makefile.in
+++ b/tests/examples/stepping/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/streams/Makefile.in b/tests/examples/streams/Makefile.in
index 7d975fb..8e1dd92 100644
--- a/tests/examples/streams/Makefile.in
+++ b/tests/examples/streams/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/examples/typefind/Makefile.in b/tests/examples/typefind/Makefile.in
index e57396c..0c7aaba 100644
--- a/tests/examples/typefind/Makefile.in
+++ b/tests/examples/typefind/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tests/misc/Makefile.in b/tests/misc/Makefile.in
index 1798a53..00971a4 100644
--- a/tests/misc/Makefile.in
+++ b/tests/misc/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 4c13151..54b303b 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
diff --git a/win32/common/config.h b/win32/common/config.h
index 19ce168..a4be139 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 "2013-12-26"
+#define GST_PACKAGE_RELEASE_DATETIME "2014-02-08"
/* Define if static plugins should be built */
#undef GST_PLUGIN_BUILD_STATIC
@@ -354,7 +354,7 @@
#define PACKAGE_NAME "GStreamer"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer 1.2.2"
+#define PACKAGE_STRING "GStreamer 1.2.3"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gstreamer"
@@ -363,7 +363,7 @@
#undef PACKAGE_URL
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.2.2"
+#define PACKAGE_VERSION "1.2.3"
/* directory where plugins are located */
#ifdef _DEBUG
@@ -401,7 +401,7 @@
#undef USE_POISONING
/* Version number of package */
-#define VERSION "1.2.2"
+#define VERSION "1.2.3"
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/win32/common/gstversion.h b/win32/common/gstversion.h
index 667f246..e42fefd 100644
--- a/win32/common/gstversion.h
+++ b/win32/common/gstversion.h
@@ -57,7 +57,7 @@ G_BEGIN_DECLS
*
* The micro version of GStreamer at compile time:
*/
-#define GST_VERSION_MICRO (2)
+#define GST_VERSION_MICRO (3)
/**
* GST_VERSION_NANO:
*
diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def
index 6f8da1a..a53d2b5 100644
--- a/win32/common/libgstreamer.def
+++ b/win32/common/libgstreamer.def
@@ -1041,6 +1041,7 @@ EXPORTS
gst_segment_get_type
gst_segment_init
gst_segment_new
+ gst_segment_offset_running_time
gst_segment_set_running_time
gst_segment_to_position
gst_segment_to_running_time