Imported Upstream version 1.2.3
diff --git a/ChangeLog b/ChangeLog
index c78c7c9..667eb1e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,414 @@
-=== release 1.2.2 ===
+=== release 1.2.3 ===
-2013-12-26 Sebastian Dröge <slomo@coaxion.net>
+2014-02-08 Sebastian Dröge <slomo@coaxion.net>
* configure.ac:
- releasing 1.2.2
+ releasing 1.2.3
+
+2014-02-04 16:21:55 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/id.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/pt_BR.po:
+ * po/sk.po:
+ * po/sr.po:
+ po: Update translations
+
+2014-01-24 12:19:43 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/videoconvert/gstvideoconvert.c:
+ videoconvert: tweak the scoring algorithm
+ Make a little table of conversions and manually score them. Use this
+ info to define better weights for the scoring algorithm.
+ give separate scores for doing changes and the impact of the change,
+ This allows us to avoid conversion when we can but still allow fairly
+ lossless changes.
+ The old code did not penalize GRAY conversions, PAL conversions were
+ punished too low and depth conversions too high.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=722656
+
+2014-01-23 10:45:00 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * gst-libs/gst/video/video-chroma.c:
+ video-chroma: don't crash on NULL resamplers
+ Make dummy resamplers for all cases and only execute the horizontal
+ resampler instead of crashing.
+ See https://bugzilla.gnome.org/show_bug.cgi?id=722742
+
+2014-01-21 11:21:56 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * gst-libs/gst/audio/gstaudiobasesink.c:
+ audiobasesink: make _get_time more threadsafe
+ We call the _get_time function from the provided clock and we don't lock
+ the sink object for performance reasons. Make sure we only read and
+ check variables once so that they don't change while we are executing
+ the code.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=720661
+
+2014-01-17 10:17:29 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/video/gstvideodecoder.c:
+ videodecoder: plug leak when frames are released on subclass stop
+ They end up stored in the 'pending_events' list and should be
+ freed after calling stop
+
+2014-01-14 13:02:28 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/libs/audiodecoder.c:
+ tests: audiodecoder: add another test for negotiation with gap event
+ Check that even if the subclass doesn't call set_output_format, the base
+ class should use upstream provided caps to fill the output caps that is
+ pushed before the gap event is forwarded, otherwise it ends again fixating
+ the rate and channels to 1.
+ https://bugzilla.gnome.org/show_bug.cgi?id=722144
+
+2014-01-14 13:05:54 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/audio/gstaudiodecoder.c:
+ audiodecoder: copy rate and channels from input before fixating output caps
+ For default caps generation when handling gap events that are sent
+ before any buffer, try to use caps that are closer to what upstream
+ provided to avoid fixating rate or channels to 1 as default.
+ So there are the steps:
+ 1) Try to set rate, channels and channel-mask from upstream if provided
+ 2) Fixate the rate and channels to the default rate and channels from
+ audio lib
+ 3) Fixate the caps just to be sure everything is fixed
+ 4) If no channel-mask was provided and channels > 2, use a default
+ channel-mask (taken from audioconvert code)
+ https://bugzilla.gnome.org/show_bug.cgi?id=722144
+
+2014-01-14 23:07:34 +0100 Holger Kaelberer <hk@getslash.de>
+
+ * sys/xvimage/xvimagesink.c:
+ xvimagesink: don't recreate xvcontext
+ A xvcontext can be created early in gst_xvimagesink_set_window_handle().
+ In this case don't recreate, i.e. overwrite it in gst_xvimagesink_open().
+ Otherwise XEvents won't be handled in the xevent listener thread.
+ Fixes a regression when setting the window handle on the sink in
+ the very beginning before changing its state.
+ https://bugzilla.gnome.org/show_bug.cgi?id=715138
+
+2014-01-13 20:47:02 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/audio/gstaudiodecoder.c:
+ audiodecoder: avoid parsing caps event if it is not used
+ Saves some cpu
+
+2014-01-13 20:44:23 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/audio/gstaudiodecoder.c:
+ audiodecoder: make sure caps is set before forwarding gap event
+ Before trying to generate a default fixated caps when handling a gap
+ event, make sure that the same strategy that is used when handling
+ a buffer has been attempted. Otherwise audiodecoder will ignore
+ upstream caps settings such as rate and channels and will likely
+ end with a caps with channels=1 and rate=1.
+ https://bugzilla.gnome.org/show_bug.cgi?id=722144
+
+2014-01-13 19:40:49 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/libs/audiodecoder.c:
+ tests: audiodecoder: check that negotiation works buffers and gaps
+ Adds 2 tests to verify that output caps are the expected value, reusing
+ input structure values for both buffers and gaps
+ https://bugzilla.gnome.org/show_bug.cgi?id=722144
+
+2014-01-13 16:33:11 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/Makefile.am:
+ * tests/check/libs/.gitignore:
+ * tests/check/libs/audiodecoder.c:
+ tests: audiodecoder: add basic playback test for audio decoder
+ Simple test that just check that audio decoding works as expected
+ https://bugzilla.gnome.org/show_bug.cgi?id=722144
+
+2014-01-14 12:05:46 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/ogg/gstoggdemux.c:
+ oggdemux: fix broken seeking reading the whole file
+ A change in gst_ogg_demux_do_seek caused oggdemux to wait for
+ a page for each of the streams, including a skeleton stream if
+ one was present. Since Skeleton only has header pages, that
+ was never going to end well.
+ Also, the code was skipping CMML streams when looking for pages,
+ so would also have broken on CMML streams.
+ Thus, we change the code to disregard Skeleton streams, as well
+ as discontinuous streams (such as CMML and Kate). While it may
+ be desirable to consider Kate streams too (in order to avoid
+ losing a subtitle starting near the seek point), this may be
+ a performance drag when seeking where no subtitles are. Maybe
+ one could add a "give up" threshold for such discontinuous
+ streams, so we'd get any page if there is one, but do not end
+ up reading preposterous amounts of data otherwise.
+ In any case, it is important that the code that determines
+ the amount of streams to look pages for remains consistent with
+ the "early out" conditions of the code that actually parses
+ the incoming pages, lest we never decrease the pending counter
+ to zero.
+ This fixes seeking on a file with a skeleton track reading all
+ the file on each seek.
+ https://bugzilla.gnome.org/show_bug.cgi?id=719615
+
+2014-01-13 15:14:14 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/ogg/gstoggdemux.c:
+ * ext/ogg/gstoggdemux.h:
+ oggdemux: use an adaptive chunksize for performance reasons
+ Ogg data is read chunk by chunk, and the chunk size used was
+ originally taken from libvorbisfile. However, this value leads
+ to poor performance when used on an Ogg file with large pages
+ (Ogg pages can be close to 64 KB).
+ We can't just use a larger chunk size, since this will decrease
+ performance on small page streams, so we use an adaptive scheme
+ where the chunk size is twice the largest page size we've seen
+ so far in the stream. For "typical" Ogg/Vorbis, this gives us
+ almost the same chunk size (a bit lower), and this lets us get
+ better performance on streams with large pages.
+
+2014-01-10 11:17:04 +0000 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/pango/gstbasetextoverlay.c:
+ textoverlay: don't leak GAP events
+
+2014-01-11 01:14:19 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/libs/videodecoder.c:
+ tests: videodecoder: check that segment events are not dropped
+ Adds a test that simulates a scenario where the first buffers after
+ a segment can't be decoded and the decoder asks for those frames
+ to be released. The videodecoder base class should make sure that
+ the events attached to those first buffers are pushed even if the
+ buffers aren't going to be.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721835
+
+2014-01-11 01:24:44 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/video/gstvideodecoder.c:
+ videodecoder: do not lose events when dropping frames
+ Events must be persisted after a frame is dropped to avoid
+ losing obligatory information for the stream.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721835
+
+2014-01-08 11:29:29 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/libs/videodecoder.c:
+ tests: videodecoder: add test for reverse playback
+ Checks that buffers are pushed backwards in reverse playback
+ https://bugzilla.gnome.org/show_bug.cgi?id=721666
+
+2014-01-06 20:53:15 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/video/gstvideodecoder.c:
+ videodecoder: use new segment earlier for reverse playback
+ For reverse playback, the segment event will only be pushed when
+ the first buffer is actually pushed. But for decoding frames and storing
+ those into the list to be pushed the output_segment.rate value is used
+ to determine if it is forward or reverse playback.
+ In case a previous segment event (or none) is in use it will mistakenly
+ think it is doing forward playback and push the buffers immediatelly and
+ try to clip buffers based on an old segment (or an uninitialized one, leading
+ to an assertion)
+ This patch fixes this by copying the segment earlier if on reverse playback
+ https://bugzilla.gnome.org/show_bug.cgi?id=721666
+
+2014-01-07 22:04:20 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/libs/videodecoder.c:
+ tests: videodecoder: add check for serialization of events
+ Tests that events are properly serialized with buffers, also checks
+ that the usual events are sent (stream start, caps, segment and eos).
+
+2014-01-07 16:28:18 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * tests/check/Makefile.am:
+ * tests/check/libs/.gitignore:
+ * tests/check/libs/videodecoder.c:
+ tests: videodecoder: add simple playback test
+ Add a simple playback test that makes sure that video decoder pushes
+ buffers in the same order it receives and that it respects the
+ set timestamps and durations
+
+2014-01-07 11:51:01 +0100 Wim Taymans <wtaymans@redhat.com>
+
+ * gst-libs/gst/rtsp/gstrtsptransport.c:
+ * gst-libs/gst/rtsp/gstrtsptransport.h:
+ * win32/common/libgstrtsp.def:
+ rtsptransport: add GType for Profile
+ See https://bugzilla.gnome.org/show_bug.cgi?id=720696
+
+2013-12-04 01:08:13 +0100 Sebastian Rasmussen <sebras@hotmail.com>
+
+ * docs/design/Makefile.am:
+ docs: add missing files for distribution
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=720015
+
+2013-11-15 14:17:03 +0000 William Grant <wgrant@ubuntu.com>
+
+ * configure.ac:
+ configure: Prevent the NEON check in configure from passing under aarch64.
+ The test verifies that the NEON C intrinsics work, but the rest of the
+ codebase uses lots of direct ARMv7 NEON assembly. The same intrinsics
+ work in A64, but the assembly is slightly different.
+ Prevent the check from passing so that we don't use this where it won't
+ work.
+ https://bugzilla.gnome.org/show_bug.cgi?id=712367
+
+2013-12-31 10:17:55 +0100 Stéphane Cerveau <scerveau@gmail.com>
+
+ * gst-libs/gst/riff/riff-ids.h:
+ riff: Add id3 tag
+ Add id3 tag for wavparse
+ https://bugzilla.gnome.org/show_bug.cgi?id=721241
+
+2013-12-30 15:28:24 +0000 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/video/gstvideodecoder.c:
+ * gst-libs/gst/video/gstvideoencoder.c:
+ videodec/enc: allow to call negiotate without ouput state
+ Some decoders call set_output_state from GstVideoDecoder::negotiate()
+ So move the g_return_val_if_fail to default_negotiate(), i.e. where
+ it is actually necessary.
+ Fix https://bugzilla.gnome.org/show_bug.cgi?id=721078
+
+2014-01-03 02:18:20 +1100 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/audio/gstaudiobasesrc.c:
+ audiobasesrc: Avoid unnecessary configuration
+ Port a change from audiobasesink from def07410, to ignore setcaps
+ when the caps don't actually change, and avoid a reconfiguration
+ and reset of the ringbuffer in that case.
+
+2013-12-30 19:48:29 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/videotestsrc/gstvideotestsrc.c:
+ videotestsrc: Always set pixel-aspect-ratio and interlace-mode in the fixed caps
+ Otherwise our caps will not be compatible with elements that require a
+ 1/1 pixel-aspect-ratio or progressive video.
+ https://bugzilla.gnome.org/show_bug.cgi?id=721103
+
+2013-12-05 14:31:25 +0000 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/video/gstvideodecoder.c:
+ * gst-libs/gst/video/gstvideoencoder.c:
+ videodec/enc: clear reconfigure flag if negotiate succeeds
+ So that it avoids to send an allocation query twice.
+ One from an early call to gst_video_encoder_negotiate from a
+ subclass, then one from gst_video_encoder_allocate_output_frame.
+ Which means that previously gst_video_encoder_negotiate was not
+ clearing the GST_PAD_FLAG_NEED_RECONFIGURE even on success.
+ Fixes bug https://bugzilla.gnome.org/show_bug.cgi?id=719684
+
+2013-12-05 14:39:57 +0000 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/audio/gstaudiodecoder.c:
+ * gst-libs/gst/audio/gstaudioencoder.c:
+ audiodec/enc: clear reconfigure flag if negotiate succeeds
+ So that it avoids to send an allocation query twice.
+ One from an early call to gst_audio_encoder_negotiate from a
+ subclass, then one from gst_audio_encoder_allocate_output_buffer.
+ Which means that previously gst_audio_encoder_negotiate was not
+ clearing the GST_PAD_FLAG_NEED_RECONFIGURE even on success.
+ Fixes bug https://bugzilla.gnome.org/show_bug.cgi?id=719684
+
+2013-12-26 23:21:45 +1100 Jan Schmidt <jan@centricular.com>
+
+ * gst-libs/gst/audio/gstaudiobasesink.c:
+ * gst-libs/gst/audio/gstaudiodecoder.c:
+ audiodecoder: Choose a default initial caps before sending GAP
+ If there are no caps from the audio decoder when handling a GAP
+ event - as when one is received right at the start on a DVD without
+ initial audio - then choose any default caps for downstream and
+ then send the GAP, so the audio sink has a configured format in
+ which to start the ringbuffer.
+ Also, make the audio sink reject a GAP without caps with a clearer
+ error message.
+ Fixes bug https://bugzilla.gnome.org/show_bug.cgi?id=603921
+
+=== release 1.2.2 ===
+
+2013-12-26 17:37:46 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/inspect/plugin-adder.xml:
+ * docs/plugins/inspect/plugin-alsa.xml:
+ * docs/plugins/inspect/plugin-app.xml:
+ * docs/plugins/inspect/plugin-audioconvert.xml:
+ * docs/plugins/inspect/plugin-audiorate.xml:
+ * docs/plugins/inspect/plugin-audioresample.xml:
+ * docs/plugins/inspect/plugin-audiotestsrc.xml:
+ * docs/plugins/inspect/plugin-cdparanoia.xml:
+ * docs/plugins/inspect/plugin-encoding.xml:
+ * docs/plugins/inspect/plugin-gio.xml:
+ * docs/plugins/inspect/plugin-ivorbisdec.xml:
+ * docs/plugins/inspect/plugin-libvisual.xml:
+ * docs/plugins/inspect/plugin-ogg.xml:
+ * docs/plugins/inspect/plugin-pango.xml:
+ * docs/plugins/inspect/plugin-playback.xml:
+ * docs/plugins/inspect/plugin-subparse.xml:
+ * docs/plugins/inspect/plugin-tcp.xml:
+ * docs/plugins/inspect/plugin-theora.xml:
+ * docs/plugins/inspect/plugin-typefindfunctions.xml:
+ * docs/plugins/inspect/plugin-videoconvert.xml:
+ * docs/plugins/inspect/plugin-videorate.xml:
+ * docs/plugins/inspect/plugin-videoscale.xml:
+ * docs/plugins/inspect/plugin-videotestsrc.xml:
+ * docs/plugins/inspect/plugin-volume.xml:
+ * docs/plugins/inspect/plugin-vorbis.xml:
+ * docs/plugins/inspect/plugin-ximagesink.xml:
+ * docs/plugins/inspect/plugin-xvimagesink.xml:
+ * gst-plugins-base.doap:
+ * gst/videoconvert/gstvideoconvertorc-dist.c:
+ * gst/videoconvert/gstvideoconvertorc-dist.h:
+ * win32/common/_stdint.h:
+ * win32/common/config.h:
+ Release 1.2.2
+
+2013-12-26 17:37:40 +0100 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.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/lv.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.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:
+ Update .po files
2013-12-26 16:45:54 +0100 Sebastian Dröge <sebastian@centricular.com>
diff --git a/Makefile.in b/Makefile.in
index c5fbaa5..25ee26a 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.
@@ -903,9 +903,10 @@
&& $(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 55f04d9..e10add2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,2 +1,2 @@
-This is GStreamer Base Plugins 1.2.2
+This is GStreamer Base Plugins 1.2.3
diff --git a/RELEASE b/RELEASE
index 277ca69..8687ffd 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,5 +1,5 @@
-Release notes for GStreamer Base Plugins 1.2.2
+Release notes for GStreamer Base Plugins 1.2.3
The GStreamer team is proud to announce a new bug-fix release
@@ -60,15 +60,20 @@
Bugs fixed in this release
+ * 603921 : resindvd: DVD menus not working
+ * 697665 : Add format=WMV3 for WMV 3 video
+ * 711816 : audiobasesrc: Avoid unnecessary configuration if caps don't change
+ * 712367 : Prevent the NEON check in configure from passing under aarch64.
* 715138 : xvimagesink 1.2 ignores resize events when used on a QWidget
- * 708200 : multiqueue: Switching audio tracks doesn't work on some files
- * 707621 : decodebin: stream-id can't be retrieved from autoplug-continue signal
- * 709965 : vorbisdec: Does not put timestamps on first buffer sometimes
- * 711819 : rtpbuffer: gst_rtp_buffer_ext_timestamp() returns wrong value when compiled with clang 5 on iOS/ARM
- * 712280 : playsink: Unable to play audio stream with visualization plugin
- * 712796 : videodecoder: incorrect timestamps sequence
- * 712805 : subparse: crashes when loading a sami subtitle
- * 678011 : typefinding: some mpeg files are not identified as mpeg files
+ * 719615 : oggdemux: slow seeking on some ogg files
+ * 719684 : videodecoder: Allocation query is always at least sent twice
+ * 720015 : docs: add missing files for distribution
+ * 720661 : audiobasesink: Fix locking bug accessing ring buffer time
+ * 721078 : videodecoder: cannot call gst_video_decoder_negotiate without output_state
+ * 721666 : videodecoder: push newsegment earlier for reverse playback
+ * 721835 : videodecoder: do not drop events when releasing frames
+ * 722144 : audiodecoder: do not negotiate caps with rate=1 and channels=1 for gap
+ * 722656 : videoconvert: scoring system ranks colour loss very low
==== Download ====
@@ -105,11 +110,15 @@
Contributors to this release
- * Jihyun Cho
- * Justin Joy
- * Mark Nauwelaerts
- * Reynaldo H. Verdejo Pinochet
+ * Holger Kaelberer
+ * Jan Schmidt
+ * Julien Isorce
* Sebastian Dröge
+ * Sebastian Rasmussen
+ * Stéphane Cerveau
+ * Thiago Santos
* Tim-Philipp Müller
+ * Vincent Penquerc'h
+ * William Grant
* Wim Taymans
\ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index f5b9d0a..2b03d8a 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 @@
[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 @@
# 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 d277a03..792ca53 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 eb43627..05e2935 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 ce25013..7b91238 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 Base Plug-ins 1.2.2.
+# Generated by GNU Autoconf 2.69 for GStreamer Base Plug-ins 1.2.3.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
#
@@ -591,8 +591,8 @@
# Identity of this package.
PACKAGE_NAME='GStreamer Base Plug-ins'
PACKAGE_TARNAME='gst-plugins-base'
-PACKAGE_VERSION='1.2.2'
-PACKAGE_STRING='GStreamer Base Plug-ins 1.2.2'
+PACKAGE_VERSION='1.2.3'
+PACKAGE_STRING='GStreamer Base Plug-ins 1.2.3'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -1758,7 +1758,7 @@
# 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 Base Plug-ins 1.2.2 to adapt to many kinds of systems.
+\`configure' configures GStreamer Base Plug-ins 1.2.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1834,7 +1834,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.2.2:";;
+ short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.2.3:";;
esac
cat <<\_ACEOF
@@ -2115,7 +2115,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Base Plug-ins configure 1.2.2
+GStreamer Base Plug-ins configure 1.2.3
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2888,7 +2888,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GStreamer Base Plug-ins $as_me 1.2.2, which was
+It was created by GStreamer Base Plug-ins $as_me 1.2.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3867,7 +3867,7 @@
# Define the identity of the package.
PACKAGE='gst-plugins-base'
- VERSION='1.2.2'
+ VERSION='1.2.3'
cat >>confdefs.h <<_ACEOF
@@ -4077,9 +4077,9 @@
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)
@@ -4090,7 +4090,7 @@
{ $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
@@ -8733,10 +8733,10 @@
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
@@ -22345,6 +22345,7 @@
#include <arm_neon.h>
int32x4_t testfunc(int16_t *a, int16_t *b) {
+ asm volatile ("vmull.s16 q0, d0, d0" : : : "q0");
return vmull_s16(vld1_s16(a), vld1_s16(b));
}
@@ -32232,7 +32233,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by GStreamer Base Plug-ins $as_me 1.2.2, which was
+This file was extended by GStreamer Base Plug-ins $as_me 1.2.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -32298,7 +32299,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-GStreamer Base Plug-ins config.status 1.2.2
+GStreamer Base Plug-ins 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 364c40c..dfc170f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
dnl initialize autoconf
dnl releases only do -Wall, git and prerelease does -Werror too
dnl use a three digit version number for releases, and four for git/prerelease
-AC_INIT([GStreamer Base Plug-ins],[1.2.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
+AC_INIT([GStreamer Base Plug-ins],[1.2.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
AG_GST_INIT
@@ -56,7 +56,7 @@
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 *** required versions of GStreamer stuff ***
GST_REQ=1.2.0
@@ -190,6 +190,7 @@
AC_LANG_PROGRAM([[
#include <arm_neon.h>
int32x4_t testfunc(int16_t *a, int16_t *b) {
+ asm volatile ("vmull.s16 q0, d0, d0" : : : "q0");
return vmull_s16(vld1_s16(a), vld1_s16(b));
}
]])],
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 5b57152..0cec81d 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.
diff --git a/docs/design/Makefile.am b/docs/design/Makefile.am
index 7bd1746..94dece6 100644
--- a/docs/design/Makefile.am
+++ b/docs/design/Makefile.am
@@ -4,8 +4,14 @@
EXTRA_DIST = \
design-audiosinks.txt \
design-decodebin.txt \
- design-encoding.txt \
+ design-encoding.txt \
design-orc-integration.txt \
+ draft-hw-acceleration.txt \
draft-keyframe-force.txt \
+ draft-subtitle-overlays.txt\
draft-va.txt \
+ part-interlaced-video.txt \
+ part-mediatype-audio-raw.txt\
+ part-mediatype-text-raw.txt\
+ part-mediatype-video-raw.txt\
part-playbin.txt
diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in
index 99ad1bc..f13dd73 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.
@@ -495,10 +495,16 @@
EXTRA_DIST = \
design-audiosinks.txt \
design-decodebin.txt \
- design-encoding.txt \
+ design-encoding.txt \
design-orc-integration.txt \
+ draft-hw-acceleration.txt \
draft-keyframe-force.txt \
+ draft-subtitle-overlays.txt\
draft-va.txt \
+ part-interlaced-video.txt \
+ part-mediatype-audio-raw.txt\
+ part-mediatype-text-raw.txt\
+ part-mediatype-video-raw.txt\
part-playbin.txt
all: all-recursive
diff --git a/docs/design/draft-hw-acceleration.txt b/docs/design/draft-hw-acceleration.txt
new file mode 100644
index 0000000..42d5372
--- /dev/null
+++ b/docs/design/draft-hw-acceleration.txt
@@ -0,0 +1,427 @@
+Hardware Acceleration in GStreamer 1.0
+--------------------------------------
+
+Status : DRAFT
+
+
+Preamble:
+
+ This document serves to identify and define the various usages of
+ hardware-acceleration (hereafter hwaccel) in GStreamer 1.0, the
+ problems that arise and need to be solved, and a proposal API.
+
+
+Out of scope:
+
+ This document will initially limit itself to usage of hwaccel in the
+ field of video capture, processing and display due to their
+ complexity.
+ It is not excluded that some parts of the research could be
+ applicable to other fields (audio, text, generic media).
+
+ This document will not cover how encoded data is parsed and
+ fed/obtained to/from the various hardware subsystems.
+
+
+Overall Goal:
+
+ Make the most of the underlying hardware features while at the same
+ time not introduce any noticable overhead [0] and provide the
+ biggest flexibility of use-cases possible.
+
+
+Secondary Goals:
+
+ Avoid Providing a system that only allows (efficient) usage of one
+ use-case and/or through a specific combination or elements. This is
+ contrary to the principles of GStreamer.
+
+ Not introduce any unneeded memory copies.
+
+ Not introduce any extra latency.
+
+ Process data asynchronously wherever possible.
+
+
+Terminology:
+
+ Due to the limitations of the GStreamer 0.10 API, most of these
+ element, especially sink elements, were named "non-raw video
+ elements".
+ In the rest of this document, we will no longer refer to them as
+ non-raw since they _do_ handle raw video and in GStreamer 1.0 it no
+ longer matters where the raw video is located or accessed. We will
+ prefer the term "hardware-accelerated video element".
+
+
+Specificities:
+
+ Hardware-accelerated elements differ from non-hwaccel elements in a
+ few ways:
+
+ * They handle memory which ,in the vast majority of the cases, is
+ not accessible directly.
+ * The processing _can_ happen asynchronously
+ * They _might_ be part of a GPU sub-system and therefore tightly
+ coupled to the display system.
+
+
+Features handled:
+
+ HW-accelerated elements can handle a variety of individual logical
+ features. These should, in the spirit of GStreamer, be controlable
+ in an individual fashion.
+
+ * Video decoding and encoding
+ * Display
+ * Capture
+ * Scaling (Downscaling (preview), Upscaling (Super-resolution))
+ * Deinterlacing (including inverse-telecine)
+ * Post-processing (Noise reduction, ...)
+ * Colorspace conversion
+ * Overlaying and compositing
+
+
+Use-cases:
+----------
+
+UC1 : HW-accelerated video decoding to counterpart sink
+
+ Example : * VDPAU decoder to VDPAU sink
+ * libVA decoder to libVA sink
+
+ In these situations, the HW-accelerated decoder and sink can use the
+ same API to communicate with each other and share data.
+
+ There might be extra processing that can be applied before display
+ (deinterlacing, noise reduction, overlaying, ...) and that is
+ provided by the backing hardware. All these features should be
+ usable in a transparent fashion from GStreamer.
+
+ They might also need to communicate/share a common context.
+
+
+UC2 : HW-accelerated video decoding to different hwaccel sink
+
+ Example : * VDPAU/libVA decoder to OpenGL-based sink
+
+ The goal here is to end up with the decoded pictures as openGL
+ textures, which can then be used in an openGL scene (with all the
+ transformations one can do with those textures).
+
+ GStreamer is responsible for:
+ 1) Filling the contents of those textures
+ 2) Informing the application when to use which texture at which time
+ (i.e. synchronization).
+
+ How the textures are used is not the responsibility of GStreamer,
+ although a fallback could be possible (displaying the texture in a
+ specified X window for ex) if the application does not handle the
+ OpenGL scene.
+
+ Efficient usage is only possible if the HW-accelerated system
+ provides an API by which one can either:
+ * Be given openGL texture IDs for the decoder to decode into
+ * OR 'transform' hwaccel-backed buffers into texture IDs
+
+ Just as for UC1, some information will need to be exchanged between
+ the OpenGL-backed elements and the other HW-accelerated element.
+
+
+UC3 : HW-accelerated decoding to HW-accelerated encoding
+
+ This is needed in cases where we want to reencode a stream from one
+ format/profile to another format/profile, like for example for
+ UPNP/DLNA embedded devices.
+
+ If the encoder and decoder are using the same backing hardware, this
+ is similar to UC1.
+
+ If the encoder and decoder are backed by 1) different hardware but
+ there is an API allowing communication between the two, OR 2) the
+ same hardware but through different APIs this is similar to UC2.
+
+ If the hardware backing the encoder and decoder don't have direct
+ communication means, then best-effort must be ensured to only
+ introduce one copy. The recent ongoing improvements in the kernel
+ regarding DMA usage could help in that regards, allowing some
+ hardware to be aware of another hardware.
+
+
+UC4 : HW-accelerated decoding to software plugin
+
+ Examples : * Transcoding a stream using a software encoder
+ * Applying measurement/transformations
+ * Your crazy idea here
+ * ...
+
+ While the most common usage of HW-accelerated decoding is for
+ display, we do not want to limit users of the GStreamer framework to
+ only be able to use those plugins in some limited use-cases. Users
+ should be able to benefit from the acceleration in any use-cases.
+
+
+UC5 : Software element to HW-accelerated display
+
+ Examples : * Software decoder to VA/VDPAU/GL/.. sink
+ * Visualization to VA/VDPAU/GL/... sink
+ * anything in fact
+
+ We need to ensure in these cases that any GStreamer plugin can
+ output data to a HW-accelerated display.
+
+ This process must not introduce any unwanted synchronization issues,
+ meaning the transfer to the backing hardware needs to happen before
+ the synchronization time in the sinks.
+
+
+UC6 : HW-accelerated capture to HW-accelerated encoder
+
+ Examples : * Camerabin usage
+ * Streaming server
+ * Video-over-IP
+ * ...
+
+ In order to provide not only low-cpu usage (through HW-accelerated
+ encoding) but also low-latency, we need to be able to have capture
+ hardware provide the data to be encoded in such a way that the
+ encoder can read it without any copy.
+
+ Some capture APIs provide means by which the hardware can be
+ provided by a pool of buffers backed by some MMAP contiguous
+ memory.
+
+
+UC6.1 : UC6 + simultaneous preview
+
+ Examples : Camerabin usage (preview of video/photo while shooting)
+
+
+
+Problems:
+---------
+
+P1 : Ranking of decoders
+
+ How do we pick the best decoder available ? Do we just set the
+ ranking of hardware-accelerated plugins to higher ranks ?
+
+
+P2 : Capabilities of HW-accelerated decoders
+
+ Hardware decoders can have much tighter constraints as to what they
+ can handle (limitations in sizes, bitrate, profile, level,
+ ...).
+
+ These limitations might be known without probbing the hardware, but
+ in most cases they require querying it.
+ Getting as much information about the stream to decode is needed.
+ This can be obtained through parsers and only look for a decoder
+ once the parser has provided extensive caps.
+
+
+P3 : Finding and auto-plugging the best elements
+
+ Taking the case where several decoders are available and several
+ sink elements are available, how do we establish which is the best
+ combination ?
+
+ Assuming we take the highest-ranked (and compatible) decoder, how do
+ we figure out which sink element is compatible ?
+
+ Assuming the user/application selects a specific sink, how do we
+ figure out which is the best decoder to use ?
+
+ /!\ Caps are not longer sufficient to establish compatibility
+
+
+P4 : How to handle systems that require calls to happen in one thread
+
+ In OpenGL (for example) calls can only be done from one thread,
+ which might not be a GStreamer thread (the sink could be controlled
+ from an application thread).
+
+ How do we properly (and safely) handle buffers and contexts ? Do we
+ create an API that allows marshalling processing into the proper
+ thread (resulting in an asynchronous API from the GStreamer point of
+ view) ?
+
+
+
+Proposal Design:
+
+D1 : GstCaps
+
+ We use the "video/x-raw" GstCaps.
+
+ The format field and other required fields are filled in the same
+ way they would be for non-HW-accelerated streams.
+
+
+D2 : Buffers and memory access
+
+ The buffers used/provided/consumed by the various HW-accelerated
+ elements must be usable with non-HW-accelerated elements.
+
+ To that extent, the GstMemory backing the various buffers must be
+ accessible via the mapping methods and therefore have the proper
+ GstAllocator implementation if-so required.
+
+ In the un-likelihood that the hardware does not provide any means to
+ map the memory or that there are such limitation (such as on DRM
+ systems), there should still be an implementation of
+ GstMemoryMapFunction that returns NULL (and a size/maxsize of zero)
+ when called.
+
+
+D3 : GstVideoMeta
+
+ In the same way that a custom GstAllocator is required, it is
+ important that elements implement the proper GstVideoMeta API
+ wherever applicable.
+
+ The GstVideoMeta fields should correspond to the memory returned by
+ a call to gst_buffer_map() and/or gst_video_meta_map().
+
+ => gst_video_meta_{map|unmap}() needs to call the
+ GstVideoMeta->{map|unmap} implementations
+
+
+D4 : Custom GstMeta
+
+ In order to pass along API and/or hardware-specific information
+ regarding the various buffers, the elements will be able to create
+ custom GstMeta.
+
+ Ex (For VDPAU):
+
+ struct _GstVDPAUMeta {
+ GstMeta meta;
+
+ VdpDevice device;
+ VdpVideoSurface surface;
+ ...
+ };
+
+ If an element supports multiple APIs for accessing/using the data
+ (like for example VDPAU and GLX), it should all the applicable
+ GstMeta.
+
+
+D5 : Buffer pools
+
+ In order to:
+ * avoid expensive cycles of buffer destruction/creation,
+ * allow upstream elements to end up with the optimal buffers/memory
+ to which to upload,
+ elements should implement GstBufferPools whenever possible.
+
+ If the backing hardware has a system by which it differentiates used
+ buffers and available buffers, the bufferpool should have the proper
+ release_buffer() and acquire_buffer() implementations.
+
+
+D6 : Ahead-of-time/asynchronous uploading
+
+ In the case where the buffers to be displayed are not on the target
+ hardware, we need to ensure the buffers are uploaded before the
+ synchronization time. If data is uploaded at the render time we will
+ end up with an unknown render latency, resulting in bad A/V
+ synchronization.
+
+ In order for this to happen, the buffers provided by downstream
+ elements should have a GstAllocator implementation allowing
+ uploading memory on _map(GST_MAP_WRITE).
+
+ If this uploading happens asynchronously, the GstAllocator should
+ implement a system so that if an intermediary element wishes to map
+ the memory it can do so (either by providing a cached version of the
+ memory, or by using locks).
+
+
+D7 : Overlay and positioning support
+
+ FIXME : Move to a separate design doc
+
+ struct _GstVideoCompositingMeta {
+ GstMeta meta;
+
+ /* zorder : Depth Position of the layer in the final scene
+ * 0 = background
+ * 2**32 = foreground
+ */
+ guint zorder;
+
+ /* x,y : Spatial position of the layer in the final scene
+ */
+ guint x;
+ guint y;
+
+ /* width/height : Target width/height of the layer in the
+ * final scene.
+ */
+
+ guint width;
+ guint height;
+ /* basewidth/baseheight : Reference scene width/height
+ * If both values are zero, the x/y/width/height values above
+ * are to be used as absolute coordinates, regardless of the
+ * final scene's width and height.
+ * If the values are non-zero, the x/y/width/height values
+ * above should be scaled based on those values.
+ * Ex : real x position = x / basewidth * scene_width
+ */
+ guint basewidth;
+ guint baseheight;
+
+ /* alpha : Global alpha multiplier
+ * 0.0 = completely transparent
+ * 1.0 = no modification of original transparency (or opacity)
+ */
+ gdouble alpha;
+ }
+
+
+D8 : De-interlacing support
+
+ FIXME : Move to a separate design doc
+
+ For systems that can apply deinterlacing, the user needs to be in
+ control of whether it should be applied or not.
+
+ This should be done through the usage of the deinterlace element.
+
+ In order to benefit from the HW-acceleration, downstream/upstream
+ elements need a way by which they can indicate that the
+ deinterlacing process will be applied later.
+
+ To this extent, we introduce a new GstMeta : GstDeinterlaceMeta
+
+ typedef const gchar *GstDeinterlaceMethod;
+
+ struct _GstDeinterlaceMeta {
+ GstMeta meta;
+
+ GstDeinterlaceMethod method;
+ }
+
+
+D9 : Context sharing
+
+ Re-use parts of -bad's videocontext ?
+
+
+D10 : Non-MT-safe APIs
+
+ If the wrapped API/system does not offer an API which is MT-safe
+ and/or usable from more than one thread (like OpenGL), we need:
+ * A system by which a global context can be provided to all elements
+ wanting to use that system,
+ * A system by which elements can serialize processing to a 3rd party
+ thread.
+
+
+[0]: Defining "noticeable overhead" is always tricky, but essentially
+means that the overhead introduced by GStreamer core and the element
+code should not exceed the overhead introduced for non-hw-accelerated
+elements.
diff --git a/docs/design/draft-subtitle-overlays.txt b/docs/design/draft-subtitle-overlays.txt
new file mode 100644
index 0000000..87f2c2c
--- /dev/null
+++ b/docs/design/draft-subtitle-overlays.txt
@@ -0,0 +1,546 @@
+===============================================================
+ Subtitle overlays, hardware-accelerated decoding and playbin
+===============================================================
+
+Status: EARLY DRAFT / BRAINSTORMING
+
+ === 1. Background ===
+
+Subtitles can be muxed in containers or come from an external source.
+
+Subtitles come in many shapes and colours. Usually they are either
+text-based (incl. 'pango markup'), or bitmap-based (e.g. DVD subtitles
+and the most common form of DVB subs). Bitmap based subtitles are
+usually compressed in some way, like some form of run-length encoding.
+
+Subtitles are currently decoded and rendered in subtitle-format-specific
+overlay elements. These elements have two sink pads (one for raw video
+and one for the subtitle format in question) and one raw video source pad.
+
+They will take care of synchronising the two input streams, and of
+decoding and rendering the subtitles on top of the raw video stream.
+
+Digression: one could theoretically have dedicated decoder/render elements
+that output an AYUV or ARGB image, and then let a videomixer element do
+the actual overlaying, but this is not very efficient, because it requires
+us to allocate and blend whole pictures (1920x1080 AYUV = 8MB,
+1280x720 AYUV = 3.6MB, 720x576 AYUV = 1.6MB) even if the overlay region
+is only a small rectangle at the bottom. This wastes memory and CPU.
+We could do something better by introducing a new format that only
+encodes the region(s) of interest, but we don't have such a format yet, and
+are not necessarily keen to rewrite this part of the logic in playbin
+at this point - and we can't change existing elements' behaviour, so would
+need to introduce new elements for this.
+
+Playbin2 supports outputting compressed formats, i.e. it does not
+force decoding to a raw format, but is happy to output to a non-raw
+format as long as the sink supports that as well.
+
+In case of certain hardware-accelerated decoding APIs, we will make use
+of that functionality. However, the decoder will not output a raw video
+format then, but some kind of hardware/API-specific format (in the caps)
+and the buffers will reference hardware/API-specific objects that
+the hardware/API-specific sink will know how to handle.
+
+
+ === 2. The Problem ===
+
+In the case of such hardware-accelerated decoding, the decoder will not
+output raw pixels that can easily be manipulated. Instead, it will
+output hardware/API-specific objects that can later be used to render
+a frame using the same API.
+
+Even if we could transform such a buffer into raw pixels, we most
+likely would want to avoid that, in order to avoid the need to
+map the data back into system memory (and then later back to the GPU).
+It's much better to upload the much smaller encoded data to the GPU/DSP
+and then leave it there until rendered.
+
+Currently playbin only supports subtitles on top of raw decoded video.
+It will try to find a suitable overlay element from the plugin registry
+based on the input subtitle caps and the rank. (It is assumed that we
+will be able to convert any raw video format into any format required
+by the overlay using a converter such as videoconvert.)
+
+It will not render subtitles if the video sent to the sink is not
+raw YUV or RGB or if conversions have been disabled by setting the
+native-video flag on playbin.
+
+Subtitle rendering is considered an important feature. Enabling
+hardware-accelerated decoding by default should not lead to a major
+feature regression in this area.
+
+This means that we need to support subtitle rendering on top of
+non-raw video.
+
+
+ === 3. Possible Solutions ===
+
+The goal is to keep knowledge of the subtitle format within the
+format-specific GStreamer plugins, and knowledge of any specific
+video acceleration API to the GStreamer plugins implementing
+that API. We do not want to make the pango/dvbsuboverlay/dvdspu/kate
+plugins link to libva/libvdpau/etc. and we do not want to make
+the vaapi/vdpau plugins link to all of libpango/libkate/libass etc.
+
+
+Multiple possible solutions come to mind:
+
+ (a) backend-specific overlay elements
+
+ e.g. vaapitextoverlay, vdpautextoverlay, vaapidvdspu, vdpaudvdspu,
+ vaapidvbsuboverlay, vdpaudvbsuboverlay, etc.
+
+ This assumes the overlay can be done directly on the backend-specific
+ object passed around.
+
+ The main drawback with this solution is that it leads to a lot of
+ code duplication and may also lead to uncertainty about distributing
+ certain duplicated pieces of code. The code duplication is pretty
+ much unavoidable, since making textoverlay, dvbsuboverlay, dvdspu,
+ kate, assrender, etc. available in form of base classes to derive
+ from is not really an option. Similarly, one would not really want
+ the vaapi/vdpau plugin to depend on a bunch of other libraries
+ such as libpango, libkate, libtiger, libass, etc.
+
+ One could add some new kind of overlay plugin feature though in
+ combination with a generic base class of some sort, but in order
+ to accommodate all the different cases and formats one would end
+ up with quite convoluted/tricky API.
+
+ (Of course there could also be a GstFancyVideoBuffer that provides
+ an abstraction for such video accelerated objects and that could
+ provide an API to add overlays to it in a generic way, but in the
+ end this is just a less generic variant of (c), and it is not clear
+ that there are real benefits to a specialised solution vs. a more
+ generic one).
+
+
+ (b) convert backend-specific object to raw pixels and then overlay
+
+ Even where possible technically, this is most likely very
+ inefficient.
+
+
+ (c) attach the overlay data to the backend-specific video frame buffers
+ in a generic way and do the actual overlaying/blitting later in
+ backend-specific code such as the video sink (or an accelerated
+ encoder/transcoder)
+
+ In this case, the actual overlay rendering (i.e. the actual text
+ rendering or decoding DVD/DVB data into pixels) is done in the
+ subtitle-format-specific GStreamer plugin. All knowledge about
+ the subtitle format is contained in the overlay plugin then,
+ and all knowledge about the video backend in the video backend
+ specific plugin.
+
+ The main question then is how to get the overlay pixels (and
+ we will only deal with pixels here) from the overlay element
+ to the video sink.
+
+ This could be done in multiple ways: One could send custom
+ events downstream with the overlay data, or one could attach
+ the overlay data directly to the video buffers in some way.
+
+ Sending inline events has the advantage that is is fairly
+ transparent to any elements between the overlay element and
+ the video sink: if an effects plugin creates a new video
+ buffer for the output, nothing special needs to be done to
+ maintain the subtitle overlay information, since the overlay
+ data is not attached to the buffer. However, it slightly
+ complicates things at the sink, since it would also need to
+ look for the new event in question instead of just processing
+ everything in its buffer render function.
+
+ If one attaches the overlay data to the buffer directly, any
+ element between overlay and video sink that creates a new
+ video buffer would need to be aware of the overlay data
+ attached to it and copy it over to the newly-created buffer.
+
+ One would have to do implement a special kind of new query
+ (e.g. FEATURE query) that is not passed on automatically by
+ gst_pad_query_default() in order to make sure that all elements
+ downstream will handle the attached overlay data. (This is only
+ a problem if we want to also attach overlay data to raw video
+ pixel buffers; for new non-raw types we can just make it
+ mandatory and assume support and be done with it; for existing
+ non-raw types nothing changes anyway if subtitles don't work)
+ (we need to maintain backwards compatibility for existing raw
+ video pipelines like e.g.: ..decoder ! suboverlay ! encoder..)
+
+ Even though slightly more work, attaching the overlay information
+ to buffers seems more intuitive than sending it interleaved as
+ events. And buffers stored or passed around (e.g. via the
+ "last-buffer" property in the sink when doing screenshots via
+ playbin) always contain all the information needed.
+
+
+ (d) create a video/x-raw-*-delta format and use a backend-specific videomixer
+
+ This possibility was hinted at already in the digression in
+ section 1. It would satisfy the goal of keeping subtitle format
+ knowledge in the subtitle plugins and video backend knowledge
+ in the video backend plugin. It would also add a concept that
+ might be generally useful (think ximagesrc capture with xdamage).
+ However, it would require adding foorender variants of all the
+ existing overlay elements, and changing playbin to that new
+ design, which is somewhat intrusive. And given the general
+ nature of such a new format/API, we would need to take a lot
+ of care to be able to accommodate all possible use cases when
+ designing the API, which makes it considerably more ambitious.
+ Lastly, we would need to write videomixer variants for the
+ various accelerated video backends as well.
+
+
+Overall (c) appears to be the most promising solution. It is the least
+intrusive and should be fairly straight-forward to implement with
+reasonable effort, requiring only small changes to existing elements
+and requiring no new elements.
+
+Doing the final overlaying in the sink as opposed to a videomixer
+or overlay in the middle of the pipeline has other advantages:
+
+ - if video frames need to be dropped, e.g. for QoS reasons,
+ we could also skip the actual subtitle overlaying and
+ possibly the decoding/rendering as well, if the
+ implementation and API allows for that to be delayed.
+
+ - the sink often knows the actual size of the window/surface/screen
+ the output video is rendered to. This *may* make it possible to
+ render the overlay image in a higher resolution than the input
+ video, solving a long standing issue with pixelated subtitles on
+ top of low-resolution videos that are then scaled up in the sink.
+ This would require for the rendering to be delayed of course instead
+ of just attaching an AYUV/ARGB/RGBA blog of pixels to the video buffer
+ in the overlay, but that could all be supported.
+
+ - if the video backend / sink has support for high-quality text
+ rendering (clutter?) we could just pass the text or pango markup
+ to the sink and let it do the rest (this is unlikely to be
+ supported in the general case - text and glyph rendering is
+ hard; also, we don't really want to make up our own text markup
+ system, and pango markup is probably too limited for complex
+ karaoke stuff).
+
+
+ === 4. API needed ===
+
+ (a) Representation of subtitle overlays to be rendered
+
+ We need to pass the overlay pixels from the overlay element to the
+ sink somehow. Whatever the exact mechanism, let's assume we pass
+ a refcounted GstVideoOverlayComposition struct or object.
+
+ A composition is made up of one or more overlays/rectangles.
+
+ In the simplest case an overlay rectangle is just a blob of
+ RGBA/ABGR [FIXME?] or AYUV pixels with positioning info and other
+ metadata, and there is only one rectangle to render.
+
+ We're keeping the naming generic ("OverlayFoo" rather than
+ "SubtitleFoo") here, since this might also be handy for
+ other use cases such as e.g. logo overlays or so. It is not
+ designed for full-fledged video stream mixing though.
+
+ // Note: don't mind the exact implementation details, they'll be hidden
+
+ // FIXME: might be confusing in 0.11 though since GstXOverlay was
+ // renamed to GstVideoOverlay in 0.11, but not much we can do,
+ // maybe we can rename GstVideoOverlay to something better
+
+ struct GstVideoOverlayComposition
+ {
+ guint num_rectangles;
+ GstVideoOverlayRectangle ** rectangles;
+
+ /* lowest rectangle sequence number still used by the upstream
+ * overlay element. This way a renderer maintaining some kind of
+ * rectangles <-> surface cache can know when to free cached
+ * surfaces/rectangles. */
+ guint min_seq_num_used;
+
+ /* sequence number for the composition (same series as rectangles) */
+ guint seq_num;
+ }
+
+ struct GstVideoOverlayRectangle
+ {
+ /* Position on video frame and dimension of output rectangle in
+ * output frame terms (already adjusted for the PAR of the output
+ * frame). x/y can be negative (overlay will be clipped then) */
+ gint x, y;
+ guint render_width, render_height;
+
+ /* Dimensions of overlay pixels */
+ guint width, height, stride;
+
+ /* This is the PAR of the overlay pixels */
+ guint par_n, par_d;
+
+ /* Format of pixels, GST_VIDEO_FORMAT_ARGB on big-endian systems,
+ * and BGRA on little-endian systems (i.e. pixels are treated as
+ * 32-bit values and alpha is always in the most-significant byte,
+ * and blue is in the least-significant byte).
+ *
+ * FIXME: does anyone actually use AYUV in practice? (we do
+ * in our utility function to blend on top of raw video)
+ * What about AYUV and endianness? Do we always have [A][Y][U][V]
+ * in memory? */
+ /* FIXME: maybe use our own enum? */
+ GstVideoFormat format;
+
+ /* Refcounted blob of memory, no caps or timestamps */
+ GstBuffer *pixels;
+
+ // FIXME: how to express source like text or pango markup?
+ // (just add source type enum + source buffer with data)
+ //
+ // FOR 0.10: always send pixel blobs, but attach source data in
+ // addition (reason: if downstream changes, we can't renegotiate
+ // that properly, if we just do a query of supported formats from
+ // the start). Sink will just ignore pixels and use pango markup
+ // from source data if it supports that.
+ //
+ // FOR 0.11: overlay should query formats (pango markup, pixels)
+ // supported by downstream and then only send that. We can
+ // renegotiate via the reconfigure event.
+ //
+
+ /* sequence number: useful for backends/renderers/sinks that want
+ * to maintain a cache of rectangles <-> surfaces. The value of
+ * the min_seq_num_used in the composition tells the renderer which
+ * rectangles have expired. */
+ guint seq_num;
+
+ /* FIXME: we also need a (private) way to cache converted/scaled
+ * pixel blobs */
+ }
+
+ (a1) Overlay consumer API:
+
+ How would this work in a video sink that supports scaling of textures:
+
+ gst_foo_sink_render () {
+ /* assume only one for now */
+ if video_buffer has composition:
+ composition = video_buffer.get_composition()
+
+ for each rectangle in composition:
+ if rectangle.source_data_type == PANGO_MARKUP
+ actor = text_from_pango_markup (rectangle.get_source_data())
+ else
+ pixels = rectangle.get_pixels_unscaled (FORMAT_RGBA, ...)
+ actor = texture_from_rgba (pixels, ...)
+
+ .. position + scale on top of video surface ...
+ }
+
+ (a2) Overlay producer API:
+
+ e.g. logo or subpicture overlay: got pixels, stuff into rectangle:
+
+ if (logoverlay->cached_composition == NULL) {
+ comp = composition_new ();
+
+ rect = rectangle_new (format, pixels_buf,
+ width, height, stride, par_n, par_d,
+ x, y, render_width, render_height);
+
+ /* composition adds its own ref for the rectangle */
+ composition_add_rectangle (comp, rect);
+ rectangle_unref (rect);
+
+ /* buffer adds its own ref for the composition */
+ video_buffer_attach_composition (comp);
+
+ /* we take ownership of the composition and save it for later */
+ logoverlay->cached_composition = comp;
+ } else {
+ video_buffer_attach_composition (logoverlay->cached_composition);
+ }
+
+ FIXME: also add some API to modify render position/dimensions of
+ a rectangle (probably requires creation of new rectangle, unless
+ we handle writability like with other mini objects).
+
+ (b) Fallback overlay rendering/blitting on top of raw video
+
+ Eventually we want to use this overlay mechanism not only for
+ hardware-accelerated video, but also for plain old raw video,
+ either at the sink or in the overlay element directly.
+
+ Apart from the advantages listed earlier in section 3, this
+ allows us to consolidate a lot of overlaying/blitting code that
+ is currently repeated in every single overlay element in one
+ location. This makes it considerably easier to support a whole
+ range of raw video formats out of the box, add SIMD-optimised
+ rendering using ORC, or handle corner cases correctly.
+
+ (Note: side-effect of overlaying raw video at the video sink is
+ that if e.g. a screnshotter gets the last buffer via the last-buffer
+ property of basesink, it would get an image without the subtitles
+ on top. This could probably be fixed by re-implementing the
+ property in GstVideoSink though. Playbin2 could handle this
+ internally as well).
+
+ void
+ gst_video_overlay_composition_blend (GstVideoOverlayComposition * comp
+ GstBuffer * video_buf)
+ {
+ guint n;
+
+ g_return_if_fail (gst_buffer_is_writable (video_buf));
+ g_return_if_fail (GST_BUFFER_CAPS (video_buf) != NULL);
+
+ ... parse video_buffer caps into BlendVideoFormatInfo ...
+
+ for each rectangle in the composition: {
+
+ if (gst_video_format_is_yuv (video_buf_format)) {
+ overlay_format = FORMAT_AYUV;
+ } else if (gst_video_format_is_rgb (video_buf_format)) {
+ overlay_format = FORMAT_ARGB;
+ } else {
+ /* FIXME: grayscale? */
+ return;
+ }
+
+ /* this will scale and convert AYUV<->ARGB if needed */
+ pixels = rectangle_get_pixels_scaled (rectangle, overlay_format);
+
+ ... clip output rectangle ...
+
+ __do_blend (video_buf_format, video_buf->data,
+ overlay_format, pixels->data,
+ x, y, width, height, stride);
+
+ gst_buffer_unref (pixels);
+ }
+ }
+
+
+ (c) Flatten all rectangles in a composition
+
+ We cannot assume that the video backend API can handle any
+ number of rectangle overlays, it's possible that it only
+ supports one single overlay, in which case we need to squash
+ all rectangles into one.
+
+ However, we'll just declare this a corner case for now, and
+ implement it only if someone actually needs it. It's easy
+ to add later API-wise. Might be a bit tricky if we have
+ rectangles with different PARs/formats (e.g. subs and a logo),
+ though we could probably always just use the code from (b)
+ with a fully transparent video buffer to create a flattened
+ overlay buffer.
+
+ (d) core API: new FEATURE query
+
+ For 0.10 we need to add a FEATURE query, so the overlay element
+ can query whether the sink downstream and all elements between
+ the overlay element and the sink support the new overlay API.
+ Elements in between need to support it because the render
+ positions and dimensions need to be updated if the video is
+ cropped or rescaled, for example.
+
+ In order to ensure that all elements support the new API,
+ we need to drop the query in the pad default query handler
+ (so it only succeeds if all elements handle it explicitly).
+
+ Might want two variants of the feature query - one where
+ all elements in the chain need to support it explicitly
+ and one where it's enough if some element downstream
+ supports it.
+
+ In 0.11 this could probably be handled via GstMeta and
+ ALLOCATION queries (and/or we could simply require
+ elements to be aware of this API from the start).
+
+ There appears to be no issue with downstream possibly
+ not being linked yet at the time when an overlay would
+ want to do such a query.
+
+
+Other considerations:
+
+ - renderers (overlays or sinks) may be able to handle only ARGB or only AYUV
+ (for most graphics/hw-API it's likely ARGB of some sort, while our
+ blending utility functions will likely want the same colour space as
+ the underlying raw video format, which is usually YUV of some sort).
+ We need to convert where required, and should cache the conversion.
+
+ - renderers may or may not be able to scale the overlay. We need to
+ do the scaling internally if not (simple case: just horizontal scaling
+ to adjust for PAR differences; complex case: both horizontal and vertical
+ scaling, e.g. if subs come from a different source than the video or the
+ video has been rescaled or cropped between overlay element and sink).
+
+ - renderers may be able to generate (possibly scaled) pixels on demand
+ from the original data (e.g. a string or RLE-encoded data). We will
+ ignore this for now, since this functionality can still be added later
+ via API additions. The most interesting case would be to pass a pango
+ markup string, since e.g. clutter can handle that natively.
+
+ - renderers may be able to write data directly on top of the video pixels
+ (instead of creating an intermediary buffer with the overlay which is
+ then blended on top of the actual video frame), e.g. dvdspu, dvbsuboverlay
+
+ However, in the interest of simplicity, we should probably ignore the
+ fact that some elements can blend their overlays directly on top of the
+ video (decoding/uncompressing them on the fly), even more so as it's
+ not obvious that it's actually faster to decode the same overlay
+ 70-90 times (say) (ie. ca. 3 seconds of video frames) and then blend
+ it 70-90 times instead of decoding it once into a temporary buffer
+ and then blending it directly from there, possibly SIMD-accelerated.
+ Also, this is only relevant if the video is raw video and not some
+ hardware-acceleration backend object.
+
+ And ultimately it is the overlay element that decides whether to do
+ the overlay right there and then or have the sink do it (if supported).
+ It could decide to keep doing the overlay itself for raw video and
+ only use our new API for non-raw video.
+
+ - renderers may want to make sure they only upload the overlay pixels once
+ per rectangle if that rectangle recurs in subsequent frames (as part of
+ the same composition or a different composition), as is likely. This caching
+ of e.g. surfaces needs to be done renderer-side and can be accomplished
+ based on the sequence numbers. The composition contains the lowest
+ sequence number still in use upstream (an overlay element may want to
+ cache created compositions+rectangles as well after all to re-use them
+ for multiple frames), based on that the renderer can expire cached
+ objects. The caching needs to be done renderer-side because attaching
+ renderer-specific objects to the rectangles won't work well given the
+ refcounted nature of rectangles and compositions, making it unpredictable
+ when a rectangle or composition will be freed or from which thread
+ context it will be freed. The renderer-specific objects are likely bound
+ to other types of renderer-specific contexts, and need to be managed
+ in connection with those.
+
+ - composition/rectangles should internally provide a certain degree of
+ thread-safety. Multiple elements (sinks, overlay element) might access
+ or use the same objects from multiple threads at the same time, and it
+ is expected that elements will keep a ref to compositions and rectangles
+ they push downstream for a while, e.g. until the current subtitle
+ composition expires.
+
+ === 5. Future considerations ===
+
+ - alternatives: there may be multiple versions/variants of the same subtitle
+ stream. On DVDs, there may be a 4:3 version and a 16:9 version of the same
+ subtitles. We could attach both variants and let the renderer pick the best
+ one for the situation (currently we just use the 16:9 version). With totem,
+ it's ultimately totem that adds the 'black bars' at the top/bottom, so totem
+ also knows if it's got a 4:3 display and can/wants to fit 4:3 subs (which
+ may render on top of the bars) or not, for example.
+
+ === 6. Misc. FIXMEs ===
+
+TEST: should these look (roughly) alike (note text distortion) - needs fixing in textoverlay
+
+gst-launch-0.10 \
+ videotestsrc ! video/x-raw,width=640,height=480,pixel-aspect-ratio=1/1 ! textoverlay text=Hello font-desc=72 ! xvimagesink \
+ videotestsrc ! video/x-raw,width=320,height=480,pixel-aspect-ratio=2/1 ! textoverlay text=Hello font-desc=72 ! xvimagesink \
+ videotestsrc ! video/x-raw,width=640,height=240,pixel-aspect-ratio=1/2 ! textoverlay text=Hello font-desc=72 ! xvimagesink
+
+ ~~~ THE END ~~~
+
diff --git a/docs/design/part-interlaced-video.txt b/docs/design/part-interlaced-video.txt
new file mode 100644
index 0000000..4ac678e
--- /dev/null
+++ b/docs/design/part-interlaced-video.txt
@@ -0,0 +1,107 @@
+Interlaced Video
+================
+
+Video buffers have a number of states identifiable through a combination of caps
+and buffer flags.
+
+Possible states:
+- Progressive
+- Interlaced
+ - Plain
+ - One field
+ - Two fields
+ - Three fields - this should be a progressive buffer with a repeated 'first'
+ field that can be used for telecine pulldown
+ - Telecine
+ - One field
+ - Two fields
+ - Progressive
+ - Interlaced (a.k.a. 'mixed'; the fields are from different frames)
+ - Three fields - this should be a progressive buffer with a repeated 'first'
+ field that can be used for telecine pulldown
+
+Note: It can be seen that the difference between the plain interlaced and
+telecine states is that in the telecine state, buffers containing two fields may
+be progressive.
+
+Tools for identification:
+- GstVideoInfo
+ - GstVideoInterlaceMode - enum - GST_VIDEO_INTERLACE_MODE_...
+ - PROGRESSIVE
+ - INTERLEAVED
+ - MIXED
+- Buffers flags - GST_VIDEO_BUFFER_FLAG_...
+ - TFF
+ - RFF
+ - ONEFIELD
+ - INTERLACED
+
+
+Identification of Buffer States
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Note that flags are not necessarily interpreted in the same way for all
+different states nor are they necessarily required nor make sense in all cases.
+
+
+Progressive
+...........
+
+If the interlace mode in the video info corresponding to a buffer is
+"progressive", then the buffer is progressive.
+
+
+Plain Interlaced
+................
+
+If the video info interlace mode is "interleaved", then the buffer is plain
+interlaced.
+
+GST_VIDEO_BUFFER_FLAG_TFF indicates whether the top or bottom field is to be
+displayed first. The timestamp on the buffer corresponds to the first field.
+
+GST_VIDEO_BUFFER_FLAG_RFF indicates that the first field (indicated by the TFF flag)
+should be repeated. This is generally only used for telecine purposes but as the
+telecine state was added long after the interlaced state was added and defined,
+this flag remains valid for plain interlaced buffers.
+
+GST_VIDEO_BUFFER_FLAG_ONEFIELD means that only the field indicated through the TFF
+flag is to be used. The other field should be ignored.
+
+
+Telecine
+........
+
+If video info interlace mode is "mixed" then the buffers are in some form of
+telecine state.
+
+The TFF and ONEFIELD flags have the same semantics as for the plain interlaced
+state.
+
+GST_VIDEO_BUFFER_FLAG_RFF in the telecine state indicates that the buffer contains
+only repeated fields that are present in other buffers and are as such
+unneeded. For example, in a sequence of three telecined frames, we might have:
+
+AtAb AtBb BtBb
+
+In this situation, we only need the first and third buffers as the second
+buffer contains fields present in the first and third.
+
+Note that the following state can have its second buffer identified using the
+ONEFIELD flag (and TFF not set):
+
+AtAb AtBb BtCb
+
+The telecine state requires one additional flag to be able to identify
+progressive buffers.
+
+The presence of the GST_VIDEO_BUFFER_FLAG_INTERLACED means that the buffer is an
+'interlaced' or 'mixed' buffer that contains two fields that, when combined
+with fields from adjacent buffers, allow reconstruction of progressive frames.
+The absence of the flag implies the buffer containing two fields is a
+progressive frame.
+
+For example in the following sequence, the third buffer would be mixed (yes, it
+is a strange pattern, but it can happen):
+
+AtAb AtBb BtCb CtDb DtDb
diff --git a/docs/design/part-mediatype-audio-raw.txt b/docs/design/part-mediatype-audio-raw.txt
new file mode 100644
index 0000000..503ef63
--- /dev/null
+++ b/docs/design/part-mediatype-audio-raw.txt
@@ -0,0 +1,76 @@
+Media Types
+-----------
+
+ audio/x-raw
+
+ format, G_TYPE_STRING, mandatory
+ The format of the audio samples, see the Formats section for a list
+ of valid sample formats.
+
+ rate, G_TYPE_INT, mandatory
+ The samplerate of the audio
+
+ channels, G_TYPE_INT, mandatory
+ The number of channels
+
+ channel-mask, GST_TYPE_BITMASK, mandatory for more than 2 channels
+ Bitmask of channel positions present. May be omitted for mono and
+ stereo. May be set to 0 to denote that the channels are unpositioned.
+
+ layout, G_TYPE_STRING, mandatory
+ The layout of channels within a buffer. Possible values are
+ "interleaved" (for LRLRLRLR) and "non-interleaved" (LLLLRRRR)
+
+Use GstAudioInfo and related helper API to create and parse raw audio caps.
+
+
+Metadata
+--------
+
+ "GstAudioDownmixMeta"
+ A matrix for downmixing multichannel audio to a lower numer of channels.
+
+
+Formats
+-------
+
+ The following values can be used for the format string property.
+
+ "S8" 8-bit signed PCM audio
+ "U8" 8-bit unsigned PCM audio
+
+ "S16LE" 16-bit signed PCM audio
+ "S16BE" 16-bit signed PCM audio
+ "U16LE" 16-bit unsigned PCM audio
+ "U16BE" 16-bit unsigned PCM audio
+
+ "S24_32LE" 24-bit signed PCM audio packed into 32-bit
+ "S24_32BE" 24-bit signed PCM audio packed into 32-bit
+ "U24_32LE" 24-bit unsigned PCM audio packed into 32-bit
+ "U24_32BE" 24-bit unsigned PCM audio packed into 32-bit
+
+ "S32LE" 32-bit signed PCM audio
+ "S32BE" 32-bit signed PCM audio
+ "U32LE" 32-bit unsigned PCM audio
+ "U32BE" 32-bit unsigned PCM audio
+
+ "S24LE" 24-bit signed PCM audio
+ "S24BE" 24-bit signed PCM audio
+ "U24LE" 24-bit unsigned PCM audio
+ "U24BE" 24-bit unsigned PCM audio
+
+ "S20LE" 20-bit signed PCM audio
+ "S20BE" 20-bit signed PCM audio
+ "U20LE" 20-bit unsigned PCM audio
+ "U20BE" 20-bit unsigned PCM audio
+
+ "S18LE" 18-bit signed PCM audio
+ "S18BE" 18-bit signed PCM audio
+ "U18LE" 18-bit unsigned PCM audio
+ "U18BE" 18-bit unsigned PCM audio
+
+ "F32LE" 32-bit floating-point audio
+ "F32BE" 32-bit floating-point audio
+ "F64LE" 64-bit floating-point audio
+ "F64BE" 64-bit floating-point audio
+
diff --git a/docs/design/part-mediatype-text-raw.txt b/docs/design/part-mediatype-text-raw.txt
new file mode 100644
index 0000000..82fbdd5
--- /dev/null
+++ b/docs/design/part-mediatype-text-raw.txt
@@ -0,0 +1,28 @@
+Media Types
+-----------
+
+ text/x-raw
+
+ format, G_TYPE_STRING, mandatory
+ The format of the text, see the Formats section for a list of valid format
+ strings.
+
+Metadata
+--------
+
+ There are no common metas for this raw format yet.
+
+Formats
+-------
+
+ "utf8" plain timed utf8 text (formerly text/plain)
+
+ Parsed timed text in utf8 format.
+
+ "pango-markup" plain timed utf8 text with pango markup (formerly text/x-pango-markup)
+
+ Same as "utf8", but text embedded in an XML-style markup language for
+ size, colour, emphasis, etc.
+
+ See http://developer.gnome.org/pango/stable/PangoMarkupFormat.html
+
diff --git a/docs/design/part-mediatype-video-raw.txt b/docs/design/part-mediatype-video-raw.txt
new file mode 100644
index 0000000..5e74dec
--- /dev/null
+++ b/docs/design/part-mediatype-video-raw.txt
@@ -0,0 +1,1190 @@
+Media Types
+-----------
+
+ video/x-raw
+
+ width, G_TYPE_INT, mandatory
+ The width of the image in pixels.
+
+ height, G_TYPE_INT, mandatory
+ The height of the image in pixels
+
+ framerate, GST_TYPE_FRACTION, default 0/1
+ The framerate of the video 0/1 for variable framerate
+
+ max-framerate, GST_TYPE_FRACTION, default as framerate
+ For variable framerates this would be the maximum framerate that
+ is expected. This value is only valid when the framerate is 0/1
+
+ views, G_TYPE_INT, default 1
+ The number of views for multiview video. Each buffer contains
+ multiple GstVideoMeta buffers that describe each view. use the frame id to
+ get access to the different views.
+
+ interlace-mode, G_TYPE_STRING, default progressive
+ The interlace mode. The following values are possible:
+
+ "progressive" : all frames are progressive
+ "interleaved" : 2 fields are interleaved in one video frame. Extra buffer
+ flags describe the field order.
+ "mixed" : progressive and interleaved frames, extra buffer flags describe
+ the frame and fields.
+ "fields" : 2 fields are stored in one buffer, use the frame ID
+ to get access to the required field. For multiview (the
+ 'views' property > 1) the fields of view N can be found at
+ frame ID (N * 2) and (N * 2) + 1.
+ Each view has only half the amount of lines as noted in the
+ height property, pads specifying the "fields" property
+ must be prepared for this. This mode requires multiple
+ GstVideoMeta metadata to describe the fields.
+
+ chroma-site, G_TYPE_STRING, default UNKNOWN
+ The chroma siting of the video frames.
+
+ "jpeg" : GST_VIDEO_CHROMA_SITE_JPEG
+ "mpeg2": GST_VIDEO_CHROMA_SITE_MPEG2
+ "dv" : GST_VIDEO_CHROMA_SITE_DV
+
+ colorimetry, G_TYPE_STRING, default UNKNOWN
+ The colorimetry of the video frames predefined colorimetry is given with
+ the following values:
+
+ "bt601"
+ "bt709"
+ "smpte240m"
+
+ pixel-aspect-ratio, GST_TYPE_FRACTION, default 1/1
+ The pixel aspect ration of the video
+
+ format, G_TYPE_STRING, mandatory
+ The format of the video, see the Formats section for a list of valid format
+ strings.
+
+Metadata
+--------
+
+ "GstVideoMeta"
+ contains the description of one video field or frame. It has
+ stride support and support for having multiple memory regions per frame.
+
+ Multiple GstVideoMeta can be added to a buffer and can be identified with a
+ unique id. This id can be used to select fields in interlaced formats or
+ views in multiview formats.
+
+ "GstVideoCropMeta"
+ Contains the cropping region of the video.
+
+
+Formats
+-------
+
+ "I420" planar 4:2:0 YUV
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth: 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU4 (RU2 (width) / 2)
+ default size: rstride (component1) * RU2 (height) / 2
+
+ Component 2: V
+ depth 8
+ pstride: 1
+ default offset: offset (component1) + size (component1)
+ default rstride: RU4 (RU2 (width) / 2)
+ default size: rstride (component2) * RU2 (height) / 2
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "YV12" planar 4:2:0 YUV
+
+ Same as I420 but with U and V planes swapped
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth 8
+ pstride: 1
+ default offset: offset (component2) + size (component2)
+ default rstride: RU4 (RU2 (width) / 2)
+ default size: rstride (component1) * RU2 (height) / 2
+
+ Component 2: V
+ depth: 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU4 (RU2 (width) / 2)
+ default size: rstride (component2) * RU2 (height) / 2
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "YUY2" packed 4:2:2 YUV
+
+ +--+--+--+--+ +--+--+--+--+
+ |Y0|U0|Y1|V0| |Y2|U2|Y3|V2| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: Y
+ depth: 8
+ pstride: 2
+ offset: 0
+
+ Component 1: U
+ depth: 8
+ offset: 1
+ pstride: 4
+
+ Component 2: V
+ depth 8
+ offset: 3
+ pstride: 4
+
+ Image
+ default rstride: RU4 (width * 2)
+ default size: rstride (image) * height
+
+
+ "YVYU" packed 4:2:2 YUV
+
+ Same as "YUY2" but with U and V planes swapped
+
+ +--+--+--+--+ +--+--+--+--+
+ |Y0|V0|Y1|U0| |Y2|V2|Y3|U2| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: Y
+ depth: 8
+ pstride: 2
+ offset: 0
+
+ Component 1: U
+ depth: 8
+ pstride: 4
+ offset: 3
+
+ Component 2: V
+ depth 8
+ pstride: 4
+ offset: 1
+
+ Image
+ default rstride: RU4 (width * 2)
+ default size: rstride (image) * height
+
+
+ "UYVY" packed 4:2:2 YUV
+
+ +--+--+--+--+ +--+--+--+--+
+ |U0|Y0|V0|Y1| |U2|Y2|V2|Y3| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: Y
+ depth: 8
+ pstride: 2
+ offset: 1
+
+ Component 1: U
+ depth: 8
+ pstride: 4
+ offset: 0
+
+ Component 2: V
+ depth 8
+ pstride: 4
+ offset: 2
+
+ Image
+ default rstride: RU4 (width * 2)
+ default size: rstride (image) * height
+
+
+ "AYUV" packed 4:4:4 YUV with alpha channel
+
+ +--+--+--+--+ +--+--+--+--+
+ |A0|Y0|U0|V0| |A1|Y1|U1|V1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: Y
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 1: U
+ depth: 8
+ pstride: 4
+ offset: 2
+
+ Component 2: V
+ depth 8
+ pstride: 4
+ offset: 3
+
+ Component 3: A
+ depth 8
+ pstride: 4
+ offset: 0
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+
+ "RGBx" sparse rgb packed into 32 bit, space last
+
+ +--+--+--+--+ +--+--+--+--+
+ |R0|G0|B0|X | |R1|G1|B1|X | ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 0
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 2
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "BGRx" sparse reverse rgb packed into 32 bit, space last
+
+ +--+--+--+--+ +--+--+--+--+
+ |B0|G0|R0|X | |B1|G1|R1|X | ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 2
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 0
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "xRGB" sparse rgb packed into 32 bit, space first
+
+ +--+--+--+--+ +--+--+--+--+
+ |X |R0|G0|B0| |X |R1|G1|B1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 2
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 3
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "xBGR" sparse reverse rgb packed into 32 bit, space first
+
+ +--+--+--+--+ +--+--+--+--+
+ |X |B0|G0|R0| |X |B1|G1|R1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 3
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 2
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 1
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "RGBA" rgb with alpha channel last
+
+ +--+--+--+--+ +--+--+--+--+
+ |R0|G0|B0|A0| |R1|G1|B1|A1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 0
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 2
+
+ Component 3: A
+ depth 8
+ pstride: 4
+ offset: 3
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "BGRA" reverse rgb with alpha channel last
+
+ +--+--+--+--+ +--+--+--+--+
+ |B0|G0|R0|A0| |B1|G1|R1|A1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 2
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 0
+
+ Component 3: A
+ depth 8
+ pstride: 4
+ offset: 3
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "ARGB" rgb with alpha channel first
+
+ +--+--+--+--+ +--+--+--+--+
+ |A0|R0|G0|B0| |A1|R1|G1|B1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 2
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 3
+
+ Component 3: A
+ depth 8
+ pstride: 4
+ offset: 0
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "ABGR" reverse rgb with alpha channel first
+
+ +--+--+--+--+ +--+--+--+--+
+ |A0|R0|G0|B0| |A1|R1|G1|B1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 4
+ offset: 1
+
+ Component 1: G
+ depth: 8
+ pstride: 4
+ offset: 2
+
+ Component 2: B
+ depth 8
+ pstride: 4
+ offset: 3
+
+ Component 3: A
+ depth 8
+ pstride: 4
+ offset: 0
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "RGB" rgb
+
+ +--+--+--+ +--+--+--+
+ |R0|G0|B0| |R1|G1|B1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 3
+ offset: 0
+
+ Component 1: G
+ depth: 8
+ pstride: 3
+ offset: 1
+
+ Component 2: B
+ depth 8
+ pstride: 3
+ offset: 2
+
+ Image
+ default rstride: RU4 (width * 3)
+ default size: rstride (image) * height
+
+ "BGR" reverse rgb
+
+ +--+--+--+ +--+--+--+
+ |B0|G0|R0| |B1|G1|R1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: R
+ depth: 8
+ pstride: 3
+ offset: 2
+
+ Component 1: G
+ depth: 8
+ pstride: 3
+ offset: 1
+
+ Component 2: B
+ depth 8
+ pstride: 3
+ offset: 0
+
+ Image
+ default rstride: RU4 (width * 3)
+ default size: rstride (image) * height
+
+ "Y41B" planar 4:1:1 YUV
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * height
+
+ Component 1: U
+ depth 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU16 (width) / 4
+ default size: rstride (component1) * height
+
+ Component 2: V
+ depth: 8
+ pstride: 1
+ default offset: offset (component1) + size (component1)
+ default rstride: RU16 (width) / 4
+ default size: rstride (component2) * height
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "Y42B" planar 4:2:2 YUV
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * height
+
+ Component 1: U
+ depth 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU8 (width) / 2
+ default size: rstride (component1) * height
+
+ Component 2: V
+ depth: 8
+ pstride: 1
+ default offset: offset (component1) + size (component1)
+ default rstride: RU8 (width) / 2
+ default size: rstride (component2) * height
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "Y444" planar 4:4:4 YUV
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * height
+
+ Component 1: U
+ depth 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU4 (width)
+ default size: rstride (component1) * height
+
+ Component 2: V
+ depth: 8
+ pstride: 1
+ default offset: offset (component1) + size (component1)
+ default rstride: RU4 (width)
+ default size: rstride (component2) * height
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "v210" packed 4:2:2 10-bit YUV, complex format
+
+ Component 0: Y
+ depth: 10
+
+ Component 1: U
+ depth 10
+
+ Component 2: V
+ depth: 10
+
+ Image
+ default rstride: RU48 (width) * 128
+ default size: rstride (image) * height
+
+
+ "v216" packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order
+
+ +--+--+--+--+ +--+--+--+--+
+ |U0|Y0|V0|Y1| |U1|Y2|V1|Y3| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: Y
+ depth: 16 LE
+ pstride: 4
+ offset: 2
+
+ Component 1: U
+ depth 16 LE
+ pstride: 8
+ offset: 0
+
+ Component 2: V
+ depth: 16 LE
+ pstride: 8
+ offset: 4
+
+ Image
+ default rstride: RU8 (width * 2)
+ default size: rstride (image) * height
+
+ "NV12" planar 4:2:0 YUV with interleaved UV plane
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth 8
+ pstride: 2
+ default offset: size (component0)
+ default rstride: RU4 (width)
+
+ Component 2: V
+ depth: 8
+ pstride: 2
+ default offset: offset (component1) + 1
+ default rstride: RU4 (width)
+
+ Image
+ default size: RU4 (width) * RU2 (height) * 3 / 2
+
+
+ "NV21" planar 4:2:0 YUV with interleaved VU plane
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth 8
+ pstride: 2
+ default offset: offset (component1) + 1
+ default rstride: RU4 (width)
+
+ Component 2: V
+ depth: 8
+ pstride: 2
+ default offset: size (component0)
+ default rstride: RU4 (width)
+
+ Image
+ default size: RU4 (width) * RU2 (height) * 3 / 2
+
+ "GRAY8" 8-bit grayscale
+ "Y800" same as "GRAY8"
+
+ Component 0: Y
+ depth: 8
+ offset: 0
+ pstride: 1
+ default rstride: RU4 (width)
+ default size: rstride (component0) * height
+
+ Image
+ default size: size (component0)
+
+ "GRAY16_BE" 16-bit grayscale, most significant byte first
+
+ Component 0: Y
+ depth: 16
+ offset: 0
+ pstride: 2
+ default rstride: RU4 (width * 2)
+ default size: rstride (component0) * height
+
+ Image
+ default size: size (component0)
+
+ "GRAY16_LE" 16-bit grayscale, least significant byte first
+ "Y16" same as "GRAY16_LE"
+
+ Component 0: Y
+ depth: 16 LE
+ offset: 0
+ pstride: 2
+ default rstride: RU4 (width * 2)
+ default size: rstride (component0) * height
+
+ Image
+ default size: size (component0)
+
+ "v308" packed 4:4:4 YUV
+
+ +--+--+--+ +--+--+--+
+ |Y0|U0|V0| |Y1|U1|V1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: Y
+ depth: 8
+ pstride: 3
+ offset: 0
+
+ Component 1: U
+ depth 8
+ pstride: 3
+ offset: 1
+
+ Component 2: V
+ depth: 8
+ pstride: 3
+ offset: 2
+
+ Image
+ default rstride: RU4 (width * 3)
+ default size: rstride (image) * height
+
+
+ "RGB16" rgb 5-6-5 bits per component
+
+ +--+--+--+ +--+--+--+
+ |R0|G0|B0| |R1|G1|B1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: R
+ depth: 5
+ pstride: 2
+
+ Component 1: G
+ depth 6
+ pstride: 2
+
+ Component 2: B
+ depth: 5
+ pstride: 2
+
+ Image
+ default rstride: RU4 (width * 2)
+ default size: rstride (image) * height
+
+ "BGR16" reverse rgb 5-6-5 bits per component
+
+ +--+--+--+ +--+--+--+
+ |B0|G0|R0| |B1|G1|R1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: R
+ depth: 5
+ pstride: 2
+
+ Component 1: G
+ depth 6
+ pstride: 2
+
+ Component 2: B
+ depth: 5
+ pstride: 2
+
+ Image
+ default rstride: RU4 (width * 2)
+ default size: rstride (image) * height
+
+ "RGB15" rgb 5-5-5 bits per component
+
+ +--+--+--+ +--+--+--+
+ |R0|G0|B0| |R1|G1|B1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: R
+ depth: 5
+ pstride: 2
+
+ Component 1: G
+ depth 5
+ pstride: 2
+
+ Component 2: B
+ depth: 5
+ pstride: 2
+
+ Image
+ default rstride: RU4 (width * 2)
+ default size: rstride (image) * height
+
+ "BGR15" reverse rgb 5-5-5 bits per component
+
+ +--+--+--+ +--+--+--+
+ |B0|G0|R0| |B1|G1|R1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: R
+ depth: 5
+ pstride: 2
+
+ Component 1: G
+ depth 5
+ pstride: 2
+
+ Component 2: B
+ depth: 5
+ pstride: 2
+
+ Image
+ default rstride: RU4 (width * 2)
+ default size: rstride (image) * height
+
+ "UYVP" packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
+
+ Component 0: Y
+ depth: 10
+
+ Component 1: U
+ depth 10
+
+ Component 2: V
+ depth: 10
+
+ Image
+ default rstride: RU4 (width * 2 * 5)
+ default size: rstride (image) * height
+
+ "A420" planar 4:4:2:0 AYUV
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU4 (RU2 (width) / 2)
+ default size: rstride (component1) * (RU2 (height) / 2)
+
+ Component 2: V
+ depth: 8
+ pstride: 1
+ default offset: size (component0) + size (component1)
+ default rstride: RU4 (RU2 (width) / 2)
+ default size: rstride (component2) * (RU2 (height) / 2)
+
+ Component 3: A
+ depth: 8
+ pstride: 1
+ default offset: size (component0) + size (component1) +
+ size (component2)
+ default rstride: RU4 (width)
+ default size: rstride (component3) * RU2 (height)
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2) +
+ size (component3)
+
+ "RGB8P" 8-bit paletted RGB
+
+ Component 0: INDEX
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * height
+
+ Component 1: PALETTE
+ depth 32
+ pstride: 4
+ default offset: size (component0)
+ rstride: 4
+ size: 256 * 4
+
+ Image
+ default size: size (component0) + size (component1)
+
+ "YUV9" planar 4:1:0 YUV
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * height
+
+ Component 1: U
+ depth 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU4 (RU4 (width) / 4)
+ default size: rstride (component1) * (RU4 (height) / 4)
+
+ Component 2: V
+ depth: 8
+ pstride: 1
+ default offset: offset (component1) + size (component1)
+ default rstride: RU4 (RU4 (width) / 4)
+ default size: rstride (component2) * (RU4 (height) / 4)
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "YVU9" planar 4:1:0 YUV (like YUV9 but UV planes swapped)
+
+ Component 0: Y
+ depth: 8
+ pstride: 1
+ default offset: 0
+ default rstride: RU4 (width)
+ default size: rstride (component0) * height
+
+ Component 1: U
+ depth 8
+ pstride: 1
+ default offset: offset (component2) + size (component2)
+ default rstride: RU4 (RU4 (width) / 4)
+ default size: rstride (component1) * (RU4 (height) / 4)
+
+ Component 2: V
+ depth: 8
+ pstride: 1
+ default offset: size (component0)
+ default rstride: RU4 (RU4 (width) / 4)
+ default size: rstride (component2) * (RU4 (height) / 4)
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "IYU1" packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...)
+
+ +--+--+--+ +--+--+--+
+ |B0|G0|R0| |B1|G1|R1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: Y
+ depth: 8
+ offset: 1
+ pstride: 2
+
+ Component 1: U
+ depth 5
+ offset: 0
+ pstride: 2
+
+ Component 2: V
+ depth: 5
+ offset: 4
+ pstride: 2
+
+ Image
+ default rstride: RU4 (RU4 (width) + RU4 (width) / 2)
+ default size: rstride (image) * height
+
+ "ARGB64" rgb with alpha channel first, 16 bits per channel
+
+ +--+--+--+--+ +--+--+--+--+
+ |A0|R0|G0|B0| |A1|R1|G1|B1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: R
+ depth: 16 LE
+ pstride: 8
+ offset: 2
+
+ Component 1: G
+ depth 16 LE
+ pstride: 8
+ offset: 4
+
+ Component 2: B
+ depth: 16 LE
+ pstride: 8
+ offset: 6
+
+ Component 3: A
+ depth: 16 LE
+ pstride: 8
+ offset: 0
+
+ Image
+ default rstride: width * 8
+ default size: rstride (image) * height
+
+ "AYUV64" packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...)
+
+ +--+--+--+--+ +--+--+--+--+
+ |A0|Y0|U0|V0| |A1|Y1|U1|V1| ...
+ +--+--+--+--+ +--+--+--+--+
+
+ Component 0: Y
+ depth: 16 LE
+ pstride: 8
+ offset: 2
+
+ Component 1: U
+ depth 16 LE
+ pstride: 8
+ offset: 4
+
+ Component 2: V
+ depth: 16 LE
+ pstride: 8
+ offset: 6
+
+ Component 3: A
+ depth: 16 LE
+ pstride: 8
+ offset: 0
+
+ Image
+ default rstride: width * 8
+ default size: rstride (image) * height
+
+ "r210" packed 4:4:4 RGB, 10 bits per channel
+
+ +--+--+--+ +--+--+--+
+ |R0|G0|B0| |R1|G1|B1| ...
+ +--+--+--+ +--+--+--+
+
+ Component 0: R
+ depth: 10
+ pstride: 4
+
+ Component 1: G
+ depth 10
+ pstride: 4
+
+ Component 2: B
+ depth: 10
+ pstride: 4
+
+ Image
+ default rstride: width * 4
+ default size: rstride (image) * height
+
+ "I420_10LE" planar 4:2:0 YUV, 10 bits per channel LE
+
+ Component 0: Y
+ depth: 10 LE
+ pstride: 2
+ default offset: 0
+ default rstride: RU4 (width * 2)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth: 10 LE
+ pstride: 2
+ default offset: size (component0)
+ default rstride: RU4 (width)
+ default size: rstride (component1) * RU2 (height) / 2
+
+ Component 2: V
+ depth 10 LE
+ pstride: 2
+ default offset: offset (component1) + size (component1)
+ default rstride: RU4 (width)
+ default size: rstride (component2) * RU2 (height) / 2
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "I420_10BE" planar 4:2:0 YUV, 10 bits per channel BE
+
+ Component 0: Y
+ depth: 10 BE
+ pstride: 2
+ default offset: 0
+ default rstride: RU4 (width * 2)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth: 10 BE
+ pstride: 2
+ default offset: size (component0)
+ default rstride: RU4 (width)
+ default size: rstride (component1) * RU2 (height) / 2
+
+ Component 2: V
+ depth 10 BE
+ pstride: 2
+ default offset: offset (component1) + size (component1)
+ default rstride: RU4 (width)
+ default size: rstride (component2) * RU2 (height) / 2
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "I422_10LE" planar 4:2:2 YUV, 10 bits per channel LE
+
+ Component 0: Y
+ depth: 10 LE
+ pstride: 2
+ default offset: 0
+ default rstride: RU4 (width * 2)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth: 10 LE
+ pstride: 2
+ default offset: size (component0)
+ default rstride: RU4 (width)
+ default size: rstride (component1) * RU2 (height)
+
+ Component 2: V
+ depth 10 LE
+ pstride: 2
+ default offset: offset (component1) + size (component1)
+ default rstride: RU4 (width)
+ default size: rstride (component2) * RU2 (height)
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
+
+ "I422_10BE" planar 4:2:2 YUV, 10 bits per channel BE
+
+ Component 0: Y
+ depth: 10 BE
+ pstride: 2
+ default offset: 0
+ default rstride: RU4 (width * 2)
+ default size: rstride (component0) * RU2 (height)
+
+ Component 1: U
+ depth: 10 BE
+ pstride: 2
+ default offset: size (component0)
+ default rstride: RU4 (width)
+ default size: rstride (component1) * RU2 (height)
+
+ Component 2: V
+ depth 10 BE
+ pstride: 2
+ default offset: offset (component1) + size (component1)
+ default rstride: RU4 (width)
+ default size: rstride (component2) * RU2 (height)
+
+ Image
+ default size: size (component0) +
+ size (component1) +
+ size (component2)
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index 6557a1d..cdad6dc 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 7750e64..a5f68fd 100644
--- a/docs/libs/html/annotation-glossary.html
+++ b/docs/libs/html/annotation-glossary.html
@@ -20,55 +20,52 @@
<td> </td>
</tr>
<tr><td colspan="5" class="shortcuts">
-<a class="shortcut" href="#glsT">T</a>
- |
- <a class="shortcut" href="#glsE">E</a>
- |
- <a class="shortcut" href="#glsA">A</a>
- |
- <a class="shortcut" href="#glsC">C</a>
- |
- <a class="shortcut" href="#glsT">T</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="#glsA">A</a>
+ |
<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="#glsT">T</a>
+ |
+ <a class="shortcut" href="#glsC">C</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="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-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-type"></a>type</span></dt>
-<dd class="glossdef"><p>Override the parsed C type with given type.</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"></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="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>
+<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%20async"></a>scope async</span></dt>
<dd class="glossdef"><p>The callback is valid until first called.</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="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>
+<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="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>
</div>
<div class="footer">
<hr>
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html b/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
index 6e04233..9863edb 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
@@ -887,7 +887,9 @@
<a name="gst-video-decoder-negotiate"></a><h3>gst_video_decoder_negotiate ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_video_decoder_negotiate (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</code></em>);</pre>
<p>
-Negotiate with downstreame elements to currently configured <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a>.
+Negotiate with downstream elements to currently configured <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a>.
+Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+negotiate fails.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html b/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
index 1999e6a..b9a2aa5 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
@@ -674,6 +674,8 @@
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_video_encoder_negotiate (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder" title="struct GstVideoEncoder"><span class="type">GstVideoEncoder</span></a> *encoder</code></em>);</pre>
<p>
Negotiate with downstream elements to currently configured <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a>.
+Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+negotiate fails.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html b/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
index 4a2414b..2f9390b 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
@@ -610,7 +610,9 @@
<a name="gst-audio-decoder-negotiate"></a><h3>gst_audio_decoder_negotiate ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_audio_decoder_negotiate (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>);</pre>
<p>
-Negotiate with downstreame elements to currently configured <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>.
+Negotiate with downstream elements to currently configured <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>.
+Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+negotiate fails.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html b/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
index 50c7579..6d6f787 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
@@ -620,7 +620,9 @@
<a name="gst-audio-encoder-negotiate"></a><h3>gst_audio_encoder_negotiate ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> gst_audio_encoder_negotiate (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>);</pre>
<p>
-Negotiate with downstreame elements to currently configured <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.
+Negotiate with downstream elements to currently configured <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="type">GstCaps</span></a>.
+Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+negotiate fails.
</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
index c93a69b..478b9a9 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
@@ -88,7 +88,7 @@
<hr>
<div class="refsect2">
<a name="GST-PLUGINS-BASE-VERSION-MICRO:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (2)
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (3)
</pre>
<p>
The micro version of GStreamer's gst-plugins-base libraries at compile time.
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index 63ee425..d702c8c 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 Base Plugins 1.0 Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Base Library 1.0 (1.2.2)
+ for GStreamer Base Library 1.0 (1.2.3)
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/</a>.
</p></div>
</div>
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index 3db3f00..2228406 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -2315,12 +2315,12 @@
<ANCHOR id="GstVideoCodecState" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState">
<ANCHOR id="gst-video-codec-state-ref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#gst-video-codec-state-ref">
<ANCHOR id="gst-video-codec-state-unref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#gst-video-codec-state-unref">
-<ANCHOR id="annotation-glossterm-transfer full" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer full">
<ANCHOR id="annotation-glossterm-element-type" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-element-type">
-<ANCHOR id="annotation-glossterm-allow-none" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-allow-none">
-<ANCHOR id="annotation-glossterm-closure" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-closure">
-<ANCHOR id="annotation-glossterm-type" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-type">
-<ANCHOR id="annotation-glossterm-array" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-array">
<ANCHOR id="annotation-glossterm-out" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-out">
-<ANCHOR id="annotation-glossterm-transfer none" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer none">
+<ANCHOR id="annotation-glossterm-array" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-array">
+<ANCHOR id="annotation-glossterm-type" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-type">
<ANCHOR id="annotation-glossterm-scope async" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-scope async">
+<ANCHOR id="annotation-glossterm-allow-none" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-allow-none">
+<ANCHOR id="annotation-glossterm-transfer none" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer none">
+<ANCHOR id="annotation-glossterm-transfer full" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer full">
+<ANCHOR id="annotation-glossterm-closure" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-closure">
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index 725c49d..32a0053 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/gst-plugins-base-plugins-plugin-adder.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
index c07f2fb..fa4c738 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-alsa.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
index 258cda5..40b48dd 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-app.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
index aa6dc50..082d7bb 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-audioconvert.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
index 6b57c85..9f579a1 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-audiorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
index 800070c..aa31ce2 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-audioresample.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
index c9fa3ee..26af45d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-audiotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
index cd89285..7e31be3 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-cdparanoia.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
index 159f89b..0301eeb 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-encoding.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
index 85fa5e4..72b9e1f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-gio.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
index a034688..acd441e 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-libvisual.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
index b2b7a11..8c2f591 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-ogg.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
index 65b04b9..9493d09 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-pango.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
index 371f669..9dee9f2 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-playback.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
index 1adfa84..18ae88b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-subparse.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
index 2069a6a..bb4a001 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-tcp.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
index a89e0c6..964cbb3 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-theora.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
index 5724e7a..79924fe 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-typefindfunctions.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
index 79135a3..64cf243 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-videoconvert.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
index 91a5ee8..3d93f62 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-videorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
index f6d45a9..103c7bf 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-videoscale.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
index c7e7a46..b80d15d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-videotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
index 7e1d4e8..29f7a91 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-volume.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
index b220b37..9d9af77 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-vorbis.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
index e25c90f..4b575bc 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-ximagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
index c5c235e..712bf44 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
@@ -42,7 +42,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/gst-plugins-base-plugins-plugin-xvimagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
index 9da4b6b..2025c3c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.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 2a64a5c..8186f23 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 Base Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Base Plugins 1.0 (1.2.2)
+ for GStreamer Base 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/gst-plugins-base/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/</a>.
</p></div>
diff --git a/docs/plugins/inspect/plugin-adder.xml b/docs/plugins/inspect/plugin-adder.xml
index e539070..5a652ef 100644
--- a/docs/plugins/inspect/plugin-adder.xml
+++ b/docs/plugins/inspect/plugin-adder.xml
@@ -3,7 +3,7 @@
<description>Adds multiple streams</description>
<filename>../../gst/adder/.libs/libgstadder.so</filename>
<basename>libgstadder.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alsa.xml b/docs/plugins/inspect/plugin-alsa.xml
index 90bb860..fc3c64a 100644
--- a/docs/plugins/inspect/plugin-alsa.xml
+++ b/docs/plugins/inspect/plugin-alsa.xml
@@ -3,7 +3,7 @@
<description>ALSA plugin library</description>
<filename>../../ext/alsa/.libs/libgstalsa.so</filename>
<basename>libgstalsa.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-app.xml b/docs/plugins/inspect/plugin-app.xml
index 8bab2d5..642ceef 100644
--- a/docs/plugins/inspect/plugin-app.xml
+++ b/docs/plugins/inspect/plugin-app.xml
@@ -3,7 +3,7 @@
<description>Elements used to communicate with applications</description>
<filename>../../gst/app/.libs/libgstapp.so</filename>
<basename>libgstapp.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioconvert.xml b/docs/plugins/inspect/plugin-audioconvert.xml
index 96c012e..8136b8c 100644
--- a/docs/plugins/inspect/plugin-audioconvert.xml
+++ b/docs/plugins/inspect/plugin-audioconvert.xml
@@ -3,7 +3,7 @@
<description>Convert audio to different formats</description>
<filename>../../gst/audioconvert/.libs/libgstaudioconvert.so</filename>
<basename>libgstaudioconvert.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiorate.xml b/docs/plugins/inspect/plugin-audiorate.xml
index 15c0b78..803c8a7 100644
--- a/docs/plugins/inspect/plugin-audiorate.xml
+++ b/docs/plugins/inspect/plugin-audiorate.xml
@@ -3,7 +3,7 @@
<description>Adjusts audio frames</description>
<filename>../../gst/audiorate/.libs/libgstaudiorate.so</filename>
<basename>libgstaudiorate.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioresample.xml b/docs/plugins/inspect/plugin-audioresample.xml
index 971ba6c..302a8db 100644
--- a/docs/plugins/inspect/plugin-audioresample.xml
+++ b/docs/plugins/inspect/plugin-audioresample.xml
@@ -3,7 +3,7 @@
<description>Resamples audio</description>
<filename>../../gst/audioresample/.libs/libgstaudioresample.so</filename>
<basename>libgstaudioresample.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiotestsrc.xml b/docs/plugins/inspect/plugin-audiotestsrc.xml
index d0fd330..50fd55a 100644
--- a/docs/plugins/inspect/plugin-audiotestsrc.xml
+++ b/docs/plugins/inspect/plugin-audiotestsrc.xml
@@ -3,7 +3,7 @@
<description>Creates audio test signals of given frequency and volume</description>
<filename>../../gst/audiotestsrc/.libs/libgstaudiotestsrc.so</filename>
<basename>libgstaudiotestsrc.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-cdparanoia.xml b/docs/plugins/inspect/plugin-cdparanoia.xml
index 9b0b82c..4ff1f81 100644
--- a/docs/plugins/inspect/plugin-cdparanoia.xml
+++ b/docs/plugins/inspect/plugin-cdparanoia.xml
@@ -3,7 +3,7 @@
<description>Read audio from CD in paranoid mode</description>
<filename>../../ext/cdparanoia/.libs/libgstcdparanoia.so</filename>
<basename>libgstcdparanoia.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-encoding.xml b/docs/plugins/inspect/plugin-encoding.xml
index d637cf0..1121121 100644
--- a/docs/plugins/inspect/plugin-encoding.xml
+++ b/docs/plugins/inspect/plugin-encoding.xml
@@ -3,7 +3,7 @@
<description>various encoding-related elements</description>
<filename>../../gst/encoding/.libs/libgstencodebin.so</filename>
<basename>libgstencodebin.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gio.xml b/docs/plugins/inspect/plugin-gio.xml
index b0b0fb5..03d127b 100644
--- a/docs/plugins/inspect/plugin-gio.xml
+++ b/docs/plugins/inspect/plugin-gio.xml
@@ -3,7 +3,7 @@
<description>GIO elements</description>
<filename>../../gst/gio/.libs/libgstgio.so</filename>
<basename>libgstgio.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivorbisdec.xml b/docs/plugins/inspect/plugin-ivorbisdec.xml
index 166697d..008c4bb 100644
--- a/docs/plugins/inspect/plugin-ivorbisdec.xml
+++ b/docs/plugins/inspect/plugin-ivorbisdec.xml
@@ -3,7 +3,7 @@
<description>Vorbis Tremor decoder</description>
<filename>../../ext/vorbis/.libs/libgstivorbisdec.so</filename>
<basename>libgstivorbisdec.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-libvisual.xml b/docs/plugins/inspect/plugin-libvisual.xml
index e9fe717..580cbcb 100644
--- a/docs/plugins/inspect/plugin-libvisual.xml
+++ b/docs/plugins/inspect/plugin-libvisual.xml
@@ -3,7 +3,7 @@
<description>libvisual visualization plugins</description>
<filename>../../ext/libvisual/.libs/libgstlibvisual.so</filename>
<basename>libgstlibvisual.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ogg.xml b/docs/plugins/inspect/plugin-ogg.xml
index 3ad08ac..5f68aeb 100644
--- a/docs/plugins/inspect/plugin-ogg.xml
+++ b/docs/plugins/inspect/plugin-ogg.xml
@@ -3,7 +3,7 @@
<description>ogg stream manipulation (info about ogg: http://xiph.org)</description>
<filename>../../ext/ogg/.libs/libgstogg.so</filename>
<basename>libgstogg.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-pango.xml b/docs/plugins/inspect/plugin-pango.xml
index 16ae640..a24d13f 100644
--- a/docs/plugins/inspect/plugin-pango.xml
+++ b/docs/plugins/inspect/plugin-pango.xml
@@ -3,7 +3,7 @@
<description>Pango-based text rendering and overlay</description>
<filename>../../ext/pango/.libs/libgstpango.so</filename>
<basename>libgstpango.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-playback.xml b/docs/plugins/inspect/plugin-playback.xml
index c8385d8..6908e0d 100644
--- a/docs/plugins/inspect/plugin-playback.xml
+++ b/docs/plugins/inspect/plugin-playback.xml
@@ -3,7 +3,7 @@
<description>various playback elements</description>
<filename>../../gst/playback/.libs/libgstplayback.so</filename>
<basename>libgstplayback.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-subparse.xml b/docs/plugins/inspect/plugin-subparse.xml
index bc9a498..681e51c 100644
--- a/docs/plugins/inspect/plugin-subparse.xml
+++ b/docs/plugins/inspect/plugin-subparse.xml
@@ -3,7 +3,7 @@
<description>Subtitle parsing</description>
<filename>../../gst/subparse/.libs/libgstsubparse.so</filename>
<basename>libgstsubparse.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-tcp.xml b/docs/plugins/inspect/plugin-tcp.xml
index 8de13b4..5824067 100644
--- a/docs/plugins/inspect/plugin-tcp.xml
+++ b/docs/plugins/inspect/plugin-tcp.xml
@@ -3,7 +3,7 @@
<description>transfer data over the network via TCP</description>
<filename>../../gst/tcp/.libs/libgsttcp.so</filename>
<basename>libgsttcp.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-theora.xml b/docs/plugins/inspect/plugin-theora.xml
index e36b181..afe0524 100644
--- a/docs/plugins/inspect/plugin-theora.xml
+++ b/docs/plugins/inspect/plugin-theora.xml
@@ -3,7 +3,7 @@
<description>Theora plugin library</description>
<filename>../../ext/theora/.libs/libgsttheora.so</filename>
<basename>libgsttheora.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-typefindfunctions.xml b/docs/plugins/inspect/plugin-typefindfunctions.xml
index 8385224..d0bd09a 100644
--- a/docs/plugins/inspect/plugin-typefindfunctions.xml
+++ b/docs/plugins/inspect/plugin-typefindfunctions.xml
@@ -3,7 +3,7 @@
<description>default typefind functions</description>
<filename>../../gst/typefind/.libs/libgsttypefindfunctions.so</filename>
<basename>libgsttypefindfunctions.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videoconvert.xml b/docs/plugins/inspect/plugin-videoconvert.xml
index 57d1e35..4854b60 100644
--- a/docs/plugins/inspect/plugin-videoconvert.xml
+++ b/docs/plugins/inspect/plugin-videoconvert.xml
@@ -3,7 +3,7 @@
<description>Colorspace conversion</description>
<filename>../../gst/videoconvert/.libs/libgstvideoconvert.so</filename>
<basename>libgstvideoconvert.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videorate.xml b/docs/plugins/inspect/plugin-videorate.xml
index 03616e0..8606aba 100644
--- a/docs/plugins/inspect/plugin-videorate.xml
+++ b/docs/plugins/inspect/plugin-videorate.xml
@@ -3,7 +3,7 @@
<description>Adjusts video frames</description>
<filename>../../gst/videorate/.libs/libgstvideorate.so</filename>
<basename>libgstvideorate.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videoscale.xml b/docs/plugins/inspect/plugin-videoscale.xml
index a4fc45c..d34bbb7 100644
--- a/docs/plugins/inspect/plugin-videoscale.xml
+++ b/docs/plugins/inspect/plugin-videoscale.xml
@@ -3,7 +3,7 @@
<description>Resizes video</description>
<filename>../../gst/videoscale/.libs/libgstvideoscale.so</filename>
<basename>libgstvideoscale.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videotestsrc.xml b/docs/plugins/inspect/plugin-videotestsrc.xml
index 31207c2..4aca436 100644
--- a/docs/plugins/inspect/plugin-videotestsrc.xml
+++ b/docs/plugins/inspect/plugin-videotestsrc.xml
@@ -3,7 +3,7 @@
<description>Creates a test video stream</description>
<filename>../../gst/videotestsrc/.libs/libgstvideotestsrc.so</filename>
<basename>libgstvideotestsrc.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-volume.xml b/docs/plugins/inspect/plugin-volume.xml
index 0c8d6ee..2c68283 100644
--- a/docs/plugins/inspect/plugin-volume.xml
+++ b/docs/plugins/inspect/plugin-volume.xml
@@ -3,7 +3,7 @@
<description>plugin for controlling audio volume</description>
<filename>../../gst/volume/.libs/libgstvolume.so</filename>
<basename>libgstvolume.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vorbis.xml b/docs/plugins/inspect/plugin-vorbis.xml
index 97ae599..cc1bcca 100644
--- a/docs/plugins/inspect/plugin-vorbis.xml
+++ b/docs/plugins/inspect/plugin-vorbis.xml
@@ -3,7 +3,7 @@
<description>Vorbis plugin library</description>
<filename>../../ext/vorbis/.libs/libgstvorbis.so</filename>
<basename>libgstvorbis.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ximagesink.xml b/docs/plugins/inspect/plugin-ximagesink.xml
index 8d7f5cc..6af97ab 100644
--- a/docs/plugins/inspect/plugin-ximagesink.xml
+++ b/docs/plugins/inspect/plugin-ximagesink.xml
@@ -3,7 +3,7 @@
<description>X11 video output element based on standard Xlib calls</description>
<filename>../../sys/ximage/.libs/libgstximagesink.so</filename>
<basename>libgstximagesink.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-xvimagesink.xml b/docs/plugins/inspect/plugin-xvimagesink.xml
index 295ba30..62d6797 100644
--- a/docs/plugins/inspect/plugin-xvimagesink.xml
+++ b/docs/plugins/inspect/plugin-xvimagesink.xml
@@ -3,7 +3,7 @@
<description>XFree86 video output plugin using Xv extension</description>
<filename>../../sys/xvimage/.libs/libgstxvimagesink.so</filename>
<basename>libgstxvimagesink.so</basename>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<license>LGPL</license>
<source>gst-plugins-base</source>
<package>GStreamer Base Plug-ins source release</package>
diff --git a/ext/Makefile.in b/ext/Makefile.in
index 1601e50..6985e31 100644
--- a/ext/Makefile.in
+++ b/ext/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/ext/alsa/Makefile.in b/ext/alsa/Makefile.in
index 3c381fb..442b171 100644
--- a/ext/alsa/Makefile.in
+++ b/ext/alsa/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/ext/cdparanoia/Makefile.in b/ext/cdparanoia/Makefile.in
index bf002d5..d51c00c 100644
--- a/ext/cdparanoia/Makefile.in
+++ b/ext/cdparanoia/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/ext/libvisual/Makefile.in b/ext/libvisual/Makefile.in
index b0909ba..2a9919b 100644
--- a/ext/libvisual/Makefile.in
+++ b/ext/libvisual/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/ext/ogg/Makefile.in b/ext/ogg/Makefile.in
index ad27df5..c748943 100644
--- a/ext/ogg/Makefile.in
+++ b/ext/ogg/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/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c
index 2ca3a7b..3475251 100644
--- a/ext/ogg/gstoggdemux.c
+++ b/ext/ogg/gstoggdemux.c
@@ -2070,6 +2070,8 @@
ogg->stats_bisection_max_steps[1] = 0;
ogg->newsegment = NULL;
+
+ ogg->chunk_size = CHUNKSIZE;
}
static void
@@ -2110,6 +2112,8 @@
GST_DEBUG_OBJECT (ogg, "Resetting current chain");
ogg->current_chain = NULL;
ogg->resync = TRUE;
+
+ ogg->chunk_size = CHUNKSIZE;
}
static gboolean
@@ -2285,15 +2289,17 @@
if (ogg->read_offset == ogg->length)
goto eos;
- oggbuffer = ogg_sync_buffer (&ogg->sync, CHUNKSIZE);
+ oggbuffer = ogg_sync_buffer (&ogg->sync, ogg->chunk_size);
if (G_UNLIKELY (oggbuffer == NULL))
goto no_buffer;
buffer =
- gst_buffer_new_wrapped_full (0, oggbuffer, CHUNKSIZE, 0, CHUNKSIZE, NULL,
- NULL);
+ gst_buffer_new_wrapped_full (0, oggbuffer, ogg->chunk_size, 0,
+ ogg->chunk_size, NULL, NULL);
- ret = gst_pad_pull_range (ogg->sinkpad, ogg->read_offset, CHUNKSIZE, &buffer);
+ ret =
+ gst_pad_pull_range (ogg->sinkpad, ogg->read_offset, ogg->chunk_size,
+ &buffer);
if (ret != GST_FLOW_OK)
goto error;
@@ -2440,11 +2446,12 @@
GST_LOG_OBJECT (ogg, "getting page before %" G_GINT64_FORMAT, begin);
while (cur_offset == -1) {
- begin -= CHUNKSIZE;
+ begin -= ogg->chunk_size;
if (begin < 0)
begin = 0;
- /* seek CHUNKSIZE back */
+ /* seek ogg->chunk_size back */
+ GST_LOG_OBJECT (ogg, "seeking back to %" G_GINT64_FORMAT, begin);
gst_ogg_demux_seek (ogg, begin);
/* now continue reading until we run out of data, if we find a page
@@ -2769,13 +2776,14 @@
while (begin < end) {
gint64 bisect;
- if ((end - begin < CHUNKSIZE) || (endtime == begintime)) {
+ if ((end - begin < ogg->chunk_size) || (endtime == begintime)) {
bisect = begin;
} else {
/* take a (pretty decent) guess, avoiding overflow */
gint64 rate = (end - begin) * GST_MSECOND / (endtime - begintime);
- bisect = (target - begintime) / GST_MSECOND * rate + begin - CHUNKSIZE;
+ bisect =
+ (target - begintime) / GST_MSECOND * rate + begin - ogg->chunk_size;
if (bisect <= begin)
bisect = begin;
@@ -2802,7 +2810,7 @@
if (bisect == 0)
goto seek_error;
- bisect -= CHUNKSIZE;
+ bisect -= ogg->chunk_size;
if (bisect <= begin)
bisect = begin + 1;
@@ -2861,7 +2869,7 @@
} else {
if (end == ogg->offset) { /* we're pretty close - we'd be stuck in */
end = result;
- bisect -= CHUNKSIZE; /* an endless loop otherwise. */
+ bisect -= ogg->chunk_size; /* an endless loop otherwise. */
if (bisect <= begin)
bisect = begin + 1;
gst_ogg_demux_seek (ogg, bisect);
@@ -2973,11 +2981,40 @@
&best, FALSE, 0))
goto seek_error;
- /* second step: find pages for all streams, we use the keyframe_granule to keep
- * track of which ones we saw. If we have seen a page for each stream we can
- * calculate the positions of each keyframe. */
- GST_DEBUG_OBJECT (ogg, "find keyframes");
+ /* second step: find pages for all relevant streams. We use the
+ * keyframe_granule to keep track of which ones we saw. If we have
+ * seen a page for each stream we can calculate the positions of
+ * each keyframe.
+ * Relevant streams are defined as those streams which are not
+ * Skeleton (which only has header pages). Discontinuous streams
+ * such as Kate and CMML are currently excluded, as they could
+ * cause performance issues if there are few pages in the area.
+ * TODO: We might want to include them on a flag, if we want to
+ * not miss a subtitle (Kate has repeat packets for this purpose,
+ * but a stream does not have to use them). */
pending = chain->streams->len;
+ for (i = 0; i < chain->streams->len; i++) {
+ GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+ if (!pad) {
+ GST_WARNING_OBJECT (ogg, "No pad for serialno %08x", pad->map.serialno);
+ pending--;
+ continue;
+ }
+ if (pad->map.is_skeleton) {
+ GST_DEBUG_OBJECT (ogg, "Not finding pages for Skeleton stream %08x",
+ pad->map.serialno);
+ pending--;
+ continue;
+ }
+ if (pad->map.is_sparse) {
+ GST_DEBUG_OBJECT (ogg, "Not finding pages for sparse stream %08x (%s)",
+ pad->map.serialno, gst_ogg_stream_get_media_type (&pad->map));
+ pending--;
+ continue;
+ }
+ }
+ GST_DEBUG_OBJECT (ogg, "find keyframes for %d/%d streams", pending,
+ chain->streams->len);
/* figure out where the keyframes are */
keytarget = target;
@@ -3002,7 +3039,7 @@
if (pad == NULL)
continue;
- if (pad->map.is_skeleton || pad->map.is_cmml)
+ if (pad->map.is_skeleton || pad->map.is_sparse)
goto next;
granulepos = ogg_page_granulepos (&og);
@@ -3517,7 +3554,7 @@
/* offset by typical page length, and ensure our best guess is within
reasonable bounds */
- best -= CHUNKSIZE;
+ best -= ogg->chunk_size;
if (best < 0)
best = 0;
if (ogg->push_byte_length > 0 && best >= ogg->push_byte_length)
@@ -3618,7 +3655,7 @@
while (searched < endsearched) {
gint64 bisect;
- if (endsearched - searched < CHUNKSIZE) {
+ if (endsearched - searched < ogg->chunk_size) {
bisect = searched;
} else {
bisect = (searched + endsearched) / 2;
@@ -3843,7 +3880,7 @@
gint i;
while (!done) {
- begin -= CHUNKSIZE;
+ begin -= ogg->chunk_size;
if (begin < 0)
begin = 0;
@@ -4079,6 +4116,17 @@
}
}
+static void
+gst_ogg_demux_update_chunk_size (GstOggDemux * ogg, ogg_page * page)
+{
+ long size = page->header_len + page->body_len;
+ long chunk_size = size * 2;
+ if (chunk_size > ogg->chunk_size) {
+ GST_LOG_OBJECT (ogg, "Updating chunk size to %ld", chunk_size);
+ ogg->chunk_size = chunk_size;
+ }
+}
+
static GstFlowReturn
gst_ogg_demux_handle_page (GstOggDemux * ogg, ogg_page * page)
{
@@ -4090,6 +4138,8 @@
serialno = ogg_page_serialno (page);
granule = ogg_page_granulepos (page);
+ gst_ogg_demux_update_chunk_size (ogg, page);
+
GST_LOG_OBJECT (ogg,
"processing ogg page (serial %08x, "
"pageno %ld, granulepos %" G_GINT64_FORMAT ", bos %d)", serialno,
@@ -4340,7 +4390,8 @@
}
GST_LOG_OBJECT (ogg, "pull data %" G_GINT64_FORMAT, ogg->offset);
- ret = gst_pad_pull_range (ogg->sinkpad, ogg->offset, CHUNKSIZE, &buffer);
+ ret =
+ gst_pad_pull_range (ogg->sinkpad, ogg->offset, ogg->chunk_size, &buffer);
if (ret != GST_FLOW_OK) {
GST_LOG_OBJECT (ogg, "Failed pull_range");
goto done;
diff --git a/ext/ogg/gstoggdemux.h b/ext/ogg/gstoggdemux.h
index c5829ff..b2b8203 100644
--- a/ext/ogg/gstoggdemux.h
+++ b/ext/ogg/gstoggdemux.h
@@ -197,6 +197,7 @@
/* ogg stuff */
ogg_sync_state sync;
+ long chunk_size;
};
struct _GstOggDemuxClass
diff --git a/ext/pango/Makefile.in b/ext/pango/Makefile.in
index 3d1066f..b09f8c0 100644
--- a/ext/pango/Makefile.in
+++ b/ext/pango/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/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c
index 9dfbbc1..66d79b8 100644
--- a/ext/pango/gstbasetextoverlay.c
+++ b/ext/pango/gstbasetextoverlay.c
@@ -1809,6 +1809,9 @@
GST_BASE_TEXT_OVERLAY_LOCK (overlay);
GST_BASE_TEXT_OVERLAY_BROADCAST (overlay);
GST_BASE_TEXT_OVERLAY_UNLOCK (overlay);
+
+ gst_event_unref (event);
+ ret = TRUE;
break;
}
case GST_EVENT_FLUSH_STOP:
diff --git a/ext/theora/Makefile.in b/ext/theora/Makefile.in
index 8095989..35c7ad7 100644
--- a/ext/theora/Makefile.in
+++ b/ext/theora/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/ext/vorbis/Makefile.in b/ext/vorbis/Makefile.in
index ff4499f..ff60ec6 100644
--- a/ext/vorbis/Makefile.in
+++ b/ext/vorbis/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-libs/Makefile.in b/gst-libs/Makefile.in
index b8ef1ae..1765a26 100644
--- a/gst-libs/Makefile.in
+++ b/gst-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/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
index 1a0e1fe..edfdac4 100644
--- a/gst-libs/gst/Makefile.in
+++ b/gst-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/gst-libs/gst/allocators/Makefile.in b/gst-libs/gst/allocators/Makefile.in
index baa0c18..d9b8ab5 100644
--- a/gst-libs/gst/allocators/Makefile.in
+++ b/gst-libs/gst/allocators/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-libs/gst/app/Makefile.in b/gst-libs/gst/app/Makefile.in
index 1baa62d..fc9a810 100644
--- a/gst-libs/gst/app/Makefile.in
+++ b/gst-libs/gst/app/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-libs/gst/audio/Makefile.in b/gst-libs/gst/audio/Makefile.in
index 356aeef..0175e5c 100644
--- a/gst-libs/gst/audio/Makefile.in
+++ b/gst-libs/gst/audio/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-libs/gst/audio/gstaudiobasesink.c b/gst-libs/gst/audio/gstaudiobasesink.c
index 4062fd5..6153a61 100644
--- a/gst-libs/gst/audio/gstaudiobasesink.c
+++ b/gst-libs/gst/audio/gstaudiobasesink.c
@@ -515,30 +515,36 @@
}
+/* we call this function without holding the lock on sink for performance
+ * reasons. Try hard to not deal with and invalid ringbuffer and rate. */
static GstClockTime
gst_audio_base_sink_get_time (GstClock * clock, GstAudioBaseSink * sink)
{
guint64 raw, samples;
guint delay;
GstClockTime result;
+ GstAudioRingBuffer *ringbuffer;
+ gint rate;
- if (sink->ringbuffer == NULL || sink->ringbuffer->spec.info.rate == 0)
+ if ((ringbuffer = sink->ringbuffer) == NULL)
+ return GST_CLOCK_TIME_NONE;
+
+ if ((rate = ringbuffer->spec.info.rate) == 0)
return GST_CLOCK_TIME_NONE;
/* our processed samples are always increasing */
- raw = samples = gst_audio_ring_buffer_samples_done (sink->ringbuffer);
+ raw = samples = gst_audio_ring_buffer_samples_done (ringbuffer);
/* the number of samples not yet processed, this is still queued in the
* device (not played for playback). */
- delay = gst_audio_ring_buffer_delay (sink->ringbuffer);
+ delay = gst_audio_ring_buffer_delay (ringbuffer);
if (G_LIKELY (samples >= delay))
samples -= delay;
else
samples = 0;
- result = gst_util_uint64_scale_int (samples, GST_SECOND,
- sink->ringbuffer->spec.info.rate);
+ result = gst_util_uint64_scale_int (samples, GST_SECOND, rate);
GST_DEBUG_OBJECT (sink,
"processed samples: raw %" G_GUINT64_FORMAT ", delay %u, real %"
@@ -1023,6 +1029,13 @@
GstMapInfo minfo;
spec = &sink->ringbuffer->spec;
+ if (G_UNLIKELY (spec->info.rate == 0)) {
+ GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL),
+ ("Sink not negotiated before GAP event."));
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+
gst_event_parse_gap (event, ×tamp, &duration);
/* If the GAP event has a duration, handle it like a
diff --git a/gst-libs/gst/audio/gstaudiobasesrc.c b/gst-libs/gst/audio/gstaudiobasesrc.c
index 621c405..53c32b0 100644
--- a/gst-libs/gst/audio/gstaudiobasesrc.c
+++ b/gst-libs/gst/audio/gstaudiobasesrc.c
@@ -534,11 +534,17 @@
GstAudioRingBufferSpec *spec;
gint bpf, rate;
+ spec = &src->ringbuffer->spec;
+
+ if (G_UNLIKELY (spec->caps && gst_caps_is_equal (spec->caps, caps))) {
+ GST_DEBUG_OBJECT (src,
+ "Ringbuffer caps haven't changed, skipping reconfiguration");
+ return TRUE;
+ }
+
GST_DEBUG ("release old ringbuffer");
gst_audio_ring_buffer_release (src->ringbuffer);
- spec = &src->ringbuffer->spec;
-
spec->buffer_time = src->buffer_time;
spec->latency_time = src->latency_time;
diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
index 03ce253..3504678 100644
--- a/gst-libs/gst/audio/gstaudiodecoder.c
+++ b/gst-libs/gst/audio/gstaudiodecoder.c
@@ -276,6 +276,69 @@
GList *pending_events;
};
+//* Default channel layouts taken from audioconvert */
+static const GstAudioChannelPosition default_positions[8][8] = {
+ /* 1 channel */
+ {
+ GST_AUDIO_CHANNEL_POSITION_MONO,
+ },
+ /* 2 channels */
+ {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ },
+ /* 3 channels (2.1) */
+ {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_LFE1,
+ },
+ /* 4 channels (4.0) */
+ {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ },
+ /* 5 channels */
+ {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ },
+ /* 6 channels (5.1) */
+ {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_LFE1,
+ },
+ /* 7 channels (6.1) */
+ {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_LFE1,
+ GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
+ },
+ /* 8 channels (7.1) */
+ {
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_LFE1,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+ GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+ }
+};
static void gst_audio_decoder_finalize (GObject * object);
static void gst_audio_decoder_set_property (GObject * object,
@@ -312,6 +375,7 @@
static gboolean gst_audio_decoder_propose_allocation_default (GstAudioDecoder *
dec, GstQuery * query);
static gboolean gst_audio_decoder_negotiate_default (GstAudioDecoder * dec);
+static gboolean gst_audio_decoder_negotiate_unlocked (GstAudioDecoder * dec);
static GstElementClass *parent_class = NULL;
@@ -651,11 +715,25 @@
}
}
+static gboolean
+gst_audio_decoder_negotiate_unlocked (GstAudioDecoder * dec)
+{
+ GstAudioDecoderClass *klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+ gboolean ret = TRUE;
+
+ if (G_LIKELY (klass->negotiate))
+ ret = klass->negotiate (dec);
+
+ return ret;
+}
+
/**
* gst_audio_decoder_negotiate:
* @dec: a #GstAudioDecoder
*
- * Negotiate with downstreame elements to currently configured #GstAudioInfo.
+ * Negotiate with downstream elements to currently configured #GstAudioInfo.
+ * Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+ * negotiate fails.
*
* Returns: #TRUE if the negotiation succeeded, else #FALSE.
*/
@@ -670,8 +748,12 @@
klass = GST_AUDIO_DECODER_GET_CLASS (dec);
GST_AUDIO_DECODER_STREAM_LOCK (dec);
- if (klass->negotiate)
+ gst_pad_check_reconfigure (dec->srcpad);
+ if (klass->negotiate) {
res = klass->negotiate (dec);
+ if (!res)
+ gst_pad_mark_reconfigure (dec->srcpad);
+ }
GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
return res;
@@ -981,6 +1063,31 @@
g_list_free (pending_events);
}
+static GstFlowReturn
+check_pending_reconfigure (GstAudioDecoder * dec)
+{
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstAudioDecoderContext *ctx;
+ gboolean needs_reconfigure;
+
+ ctx = &dec->priv->ctx;
+
+ needs_reconfigure = gst_pad_check_reconfigure (dec->srcpad);
+ if (G_UNLIKELY (ctx->output_format_changed ||
+ (GST_AUDIO_INFO_IS_VALID (&ctx->info)
+ && needs_reconfigure))) {
+ if (!gst_audio_decoder_negotiate_unlocked (dec)) {
+ gst_pad_mark_reconfigure (dec->srcpad);
+ if (GST_PAD_IS_FLUSHING (dec->srcpad))
+ ret = GST_FLOW_FLUSHING;
+ else
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ }
+ }
+ return ret;
+}
+
+
/**
* gst_audio_decoder_finish_frame:
* @dec: a #GstAudioDecoder
@@ -1032,21 +1139,13 @@
GST_AUDIO_DECODER_STREAM_LOCK (dec);
- if (buf && G_UNLIKELY (ctx->output_format_changed ||
- (GST_AUDIO_INFO_IS_VALID (&ctx->info)
- && gst_pad_check_reconfigure (dec->srcpad)))) {
- if (!gst_audio_decoder_negotiate (dec)) {
- gst_pad_mark_reconfigure (dec->srcpad);
- if (GST_PAD_IS_FLUSHING (dec->srcpad))
- ret = GST_FLOW_FLUSHING;
- else
- ret = GST_FLOW_NOT_NEGOTIATED;
+ if (buf) {
+ ret = check_pending_reconfigure (dec);
+ if (ret == GST_FLOW_FLUSHING || ret == GST_FLOW_NOT_NEGOTIATED)
goto exit;
- }
- }
- if (buf && priv->pending_events) {
- send_pending_events (dec);
+ if (priv->pending_events)
+ send_pending_events (dec);
}
/* output shoud be whole number of sample frames */
@@ -1621,6 +1720,21 @@
return result;
}
+static gboolean
+gst_audio_decoder_do_caps (GstAudioDecoder * dec)
+{
+ GstCaps *caps = gst_pad_get_current_caps (dec->sinkpad);
+ if (caps) {
+ if (!gst_audio_decoder_sink_setcaps (dec, caps)) {
+ gst_caps_unref (caps);
+ return FALSE;
+ }
+ gst_caps_unref (caps);
+ }
+ dec->priv->do_caps = FALSE;
+ return TRUE;
+}
+
static GstFlowReturn
gst_audio_decoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
@@ -1630,15 +1744,9 @@
dec = GST_AUDIO_DECODER (parent);
if (G_UNLIKELY (dec->priv->do_caps)) {
- GstCaps *caps = gst_pad_get_current_caps (dec->sinkpad);
- if (caps) {
- if (!gst_audio_decoder_sink_setcaps (dec, caps)) {
- gst_caps_unref (caps);
- goto not_negotiated;
- }
- gst_caps_unref (caps);
+ if (!gst_audio_decoder_do_caps (dec)) {
+ goto not_negotiated;
}
- dec->priv->do_caps = FALSE;
}
if (G_UNLIKELY (!gst_pad_has_current_caps (pad) && dec->priv->needs_format))
@@ -1702,6 +1810,169 @@
dec->priv->ctx.info.rate <= dec->priv->samples_out;
}
+/* Must be called holding the GST_AUDIO_DECODER_STREAM_LOCK */
+static gboolean
+gst_audio_decoder_negotiate_default_caps (GstAudioDecoder * dec)
+{
+ GstCaps *caps;
+ gint i;
+ gint channels = 0;
+ gint rate;
+ guint64 channel_mask = 0;
+ gint caps_size;
+ GstStructure *structure;
+
+ caps = gst_pad_get_current_caps (dec->srcpad);
+ if (caps && !gst_audio_info_from_caps (&dec->priv->ctx.info, caps))
+ return FALSE;
+
+ caps = gst_pad_get_allowed_caps (dec->srcpad);
+ if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps))
+ return FALSE;
+
+ /* before fixating, try to use whatever upstream provided */
+ caps_size = gst_caps_get_size (caps);
+ if (dec->priv->ctx.input_caps) {
+ GstCaps *sinkcaps = dec->priv->ctx.input_caps;
+ GstStructure *structure = gst_caps_get_structure (sinkcaps, 0);
+
+ if (gst_structure_get_int (structure, "rate", &rate)) {
+ for (i = 0; i < caps_size; i++) {
+ gst_structure_set (gst_caps_get_structure (caps, i), "rate",
+ G_TYPE_INT, rate, NULL);
+ }
+ }
+
+ if (gst_structure_get_int (structure, "channels", &channels)) {
+ for (i = 0; i < caps_size; i++) {
+ gst_structure_set (gst_caps_get_structure (caps, i), "channels",
+ G_TYPE_INT, channels, NULL);
+ }
+ }
+
+ if (gst_structure_get (structure, "channel-mask", GST_TYPE_BITMASK,
+ &channel_mask, NULL)) {
+ for (i = 0; i < caps_size; i++) {
+ gst_structure_set (gst_caps_get_structure (caps, i), "channel-mask",
+ GST_TYPE_BITMASK, channel_mask, NULL);
+ }
+ }
+ }
+
+ for (i = 0; i < caps_size; i++) {
+ structure = gst_caps_get_structure (caps, i);
+ gst_structure_fixate_field_nearest_int (structure,
+ "channels", GST_AUDIO_DEF_CHANNELS);
+ gst_structure_fixate_field_nearest_int (structure,
+ "rate", GST_AUDIO_DEF_RATE);
+ }
+ caps = gst_caps_fixate (caps);
+ structure = gst_caps_get_structure (caps, 0);
+
+ /* Need to add a channel-mask if channels > 2 */
+ gst_structure_get_int (structure, "channels", &channels);
+ if (channels > 2 && !gst_structure_has_field (structure, "channel-mask")) {
+ if (channels <= 8) {
+ channel_mask = 0;
+ for (i = 0; i < channels; i++)
+ channel_mask |=
+ G_GUINT64_CONSTANT (1) << default_positions[channels - 1][i];
+
+ gst_structure_set (structure, "channel-mask",
+ GST_TYPE_BITMASK, channel_mask, NULL);
+ } else {
+ GST_WARNING_OBJECT (dec, "No default channel-mask for %d channels",
+ channels);
+ }
+ }
+
+ if (!caps || !gst_audio_info_from_caps (&dec->priv->ctx.info, caps))
+ return FALSE;
+
+ GST_INFO_OBJECT (dec,
+ "Chose default caps %" GST_PTR_FORMAT " for initial gap", caps);
+ gst_caps_unref (caps);
+
+ if (!gst_audio_decoder_negotiate_unlocked (dec)) {
+ GST_INFO_OBJECT (dec, "Failed to negotiate default caps for initial gap");
+ gst_pad_mark_reconfigure (dec->srcpad);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gst_audio_decoder_handle_gap (GstAudioDecoder * dec, GstEvent * event)
+{
+ gboolean ret;
+ GstClockTime timestamp, duration;
+
+ /* Check if there is a caps pending to be pushed */
+ if (G_UNLIKELY (dec->priv->do_caps)) {
+ if (!gst_audio_decoder_do_caps (dec)) {
+ goto not_negotiated;
+ }
+ }
+
+ /* Ensure we have caps first */
+ GST_AUDIO_DECODER_STREAM_LOCK (dec);
+ if (!GST_AUDIO_INFO_IS_VALID (&dec->priv->ctx.info)) {
+ if (!gst_audio_decoder_negotiate_default_caps (dec)) {
+ GST_ELEMENT_ERROR (dec, STREAM, FORMAT, (NULL),
+ ("Decoder output not negotiated before GAP event."));
+ GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+ return FALSE;
+ }
+ }
+ GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+ gst_event_parse_gap (event, ×tamp, &duration);
+
+ /* time progressed without data, see if we can fill the gap with
+ * some concealment data */
+ GST_DEBUG_OBJECT (dec,
+ "gap event: plc %d, do_plc %d, position %" GST_TIME_FORMAT
+ " duration %" GST_TIME_FORMAT,
+ dec->priv->plc, dec->priv->ctx.do_plc,
+ GST_TIME_ARGS (timestamp), GST_TIME_ARGS (duration));
+
+ if (dec->priv->plc && dec->priv->ctx.do_plc && dec->input_segment.rate > 0.0) {
+ GstAudioDecoderClass *klass = GST_AUDIO_DECODER_GET_CLASS (dec);
+ GstBuffer *buf;
+
+ /* hand subclass empty frame with duration that needs covering */
+ buf = gst_buffer_new ();
+ GST_BUFFER_TIMESTAMP (buf) = timestamp;
+ GST_BUFFER_DURATION (buf) = duration;
+ /* best effort, not much error handling */
+ gst_audio_decoder_handle_frame (dec, klass, buf);
+ ret = TRUE;
+ gst_event_unref (event);
+ } else {
+ GstFlowReturn flowret;
+
+ /* sub-class doesn't know how to handle empty buffers,
+ * so just try sending GAP downstream */
+ flowret = check_pending_reconfigure (dec);
+ if (flowret == GST_FLOW_OK) {
+ send_pending_events (dec);
+ ret = gst_audio_decoder_push_event (dec, event);
+ } else {
+ ret = FALSE;
+ }
+ }
+ return ret;
+
+ /* ERRORS */
+not_negotiated:
+ {
+ GST_ELEMENT_ERROR (dec, CORE, NEGOTIATION, (NULL),
+ ("decoder not initialized"));
+ return FALSE;
+ }
+}
+
static gboolean
gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
{
@@ -1789,39 +2060,9 @@
ret = TRUE;
break;
}
- case GST_EVENT_GAP:{
- GstClockTime timestamp, duration;
- gst_event_parse_gap (event, ×tamp, &duration);
-
- /* time progressed without data, see if we can fill the gap with
- * some concealment data */
- GST_DEBUG_OBJECT (dec,
- "gap event: plc %d, do_plc %d, position %" GST_TIME_FORMAT
- " duration %" GST_TIME_FORMAT,
- dec->priv->plc, dec->priv->ctx.do_plc,
- GST_TIME_ARGS (timestamp), GST_TIME_ARGS (duration));
- if (dec->priv->plc && dec->priv->ctx.do_plc &&
- dec->input_segment.rate > 0.0) {
- GstAudioDecoderClass *klass;
- GstBuffer *buf;
-
- klass = GST_AUDIO_DECODER_GET_CLASS (dec);
- /* hand subclass empty frame with duration that needs covering */
- buf = gst_buffer_new ();
- GST_BUFFER_TIMESTAMP (buf) = timestamp;
- GST_BUFFER_DURATION (buf) = duration;
- /* best effort, not much error handling */
- gst_audio_decoder_handle_frame (dec, klass, buf);
- ret = TRUE;
- gst_event_unref (event);
- } else {
- /* FIXME: sub-class doesn't know how to handle empty buffers,
- * so just try sending GAP downstream */
- send_pending_events (dec);
- ret = gst_audio_decoder_push_event (dec, event);
- }
+ case GST_EVENT_GAP:
+ ret = gst_audio_decoder_handle_gap (dec, event);
break;
- }
case GST_EVENT_FLUSH_STOP:
GST_AUDIO_DECODER_STREAM_LOCK (dec);
/* prepare for fresh start */
@@ -1849,9 +2090,6 @@
case GST_EVENT_CAPS:
{
- GstCaps *caps;
-
- gst_event_parse_caps (event, &caps);
ret = TRUE;
dec->priv->do_caps = TRUE;
gst_event_unref (event);
@@ -2996,6 +3234,7 @@
gst_audio_decoder_allocate_output_buffer (GstAudioDecoder * dec, gsize size)
{
GstBuffer *buffer = NULL;
+ gboolean needs_reconfigure = FALSE;
g_return_val_if_fail (size > 0, NULL);
@@ -3003,10 +3242,11 @@
GST_AUDIO_DECODER_STREAM_LOCK (dec);
+ needs_reconfigure = gst_pad_check_reconfigure (dec->srcpad);
if (G_UNLIKELY (dec->priv->ctx.output_format_changed ||
(GST_AUDIO_INFO_IS_VALID (&dec->priv->ctx.info)
- && gst_pad_check_reconfigure (dec->srcpad)))) {
- if (!gst_audio_decoder_negotiate (dec)) {
+ && needs_reconfigure))) {
+ if (!gst_audio_decoder_negotiate_unlocked (dec)) {
GST_INFO_OBJECT (dec, "Failed to negotiate, fallback allocation");
gst_pad_mark_reconfigure (dec->srcpad);
goto fallback;
diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c
index 375de50..cea186d 100644
--- a/gst-libs/gst/audio/gstaudioencoder.c
+++ b/gst-libs/gst/audio/gstaudioencoder.c
@@ -341,6 +341,7 @@
static gboolean gst_audio_encoder_propose_allocation_default (GstAudioEncoder *
enc, GstQuery * query);
static gboolean gst_audio_encoder_negotiate_default (GstAudioEncoder * enc);
+static gboolean gst_audio_encoder_negotiate_unlocked (GstAudioEncoder * enc);
static void
gst_audio_encoder_class_init (GstAudioEncoderClass * klass)
@@ -605,6 +606,7 @@
GstAudioEncoderPrivate *priv;
GstAudioEncoderContext *ctx;
GstFlowReturn ret = GST_FLOW_OK;
+ gboolean needs_reconfigure = FALSE;
klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
priv = enc->priv;
@@ -624,9 +626,9 @@
"accepting %" G_GSIZE_FORMAT " bytes encoded data as %d samples",
buf ? gst_buffer_get_size (buf) : -1, samples);
- if (G_UNLIKELY (ctx->output_caps_changed
- || gst_pad_check_reconfigure (enc->srcpad))) {
- if (!gst_audio_encoder_negotiate (enc)) {
+ needs_reconfigure = gst_pad_check_reconfigure (enc->srcpad);
+ if (G_UNLIKELY (ctx->output_caps_changed || needs_reconfigure)) {
+ if (!gst_audio_encoder_negotiate_unlocked (enc)) {
gst_pad_mark_reconfigure (enc->srcpad);
if (GST_PAD_IS_FLUSHING (enc->srcpad))
ret = GST_FLOW_FLUSHING;
@@ -2618,12 +2620,26 @@
}
}
+static gboolean
+gst_audio_encoder_negotiate_unlocked (GstAudioEncoder * enc)
+{
+ GstAudioEncoderClass *klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
+ gboolean ret = TRUE;
+
+ if (G_LIKELY (klass->negotiate))
+ ret = klass->negotiate (enc);
+
+ return ret;
+}
+
/**
* gst_audio_encoder_negotiate:
* @enc: a #GstAudioEncoder
*
- * Negotiate with downstreame elements to currently configured #GstCaps.
- *
+ * Negotiate with downstream elements to currently configured #GstCaps.
+ * Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+ * negotiate fails.
+ *
* Returns: #TRUE if the negotiation succeeded, else #FALSE.
*/
gboolean
@@ -2637,8 +2653,12 @@
klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
GST_AUDIO_ENCODER_STREAM_LOCK (enc);
- if (klass->negotiate)
+ gst_pad_check_reconfigure (enc->srcpad);
+ if (klass->negotiate) {
ret = klass->negotiate (enc);
+ if (!ret)
+ gst_pad_mark_reconfigure (enc->srcpad);
+ }
GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
return ret;
@@ -2704,6 +2724,7 @@
gst_audio_encoder_allocate_output_buffer (GstAudioEncoder * enc, gsize size)
{
GstBuffer *buffer = NULL;
+ gboolean needs_reconfigure = FALSE;
g_return_val_if_fail (size > 0, NULL);
@@ -2711,9 +2732,10 @@
GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+ needs_reconfigure = gst_pad_check_reconfigure (enc->srcpad);
if (G_UNLIKELY (enc->priv->ctx.output_caps_changed || (enc->priv->ctx.caps
- && gst_pad_check_reconfigure (enc->srcpad)))) {
- if (!gst_audio_encoder_negotiate (enc)) {
+ && needs_reconfigure))) {
+ if (!gst_audio_encoder_negotiate_unlocked (enc)) {
GST_INFO_OBJECT (enc, "Failed to negotiate, fallback allocation");
gst_pad_mark_reconfigure (enc->srcpad);
goto fallback;
diff --git a/gst-libs/gst/fft/Makefile.in b/gst-libs/gst/fft/Makefile.in
index 2fbdc37..d50c749 100644
--- a/gst-libs/gst/fft/Makefile.in
+++ b/gst-libs/gst/fft/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-libs/gst/pbutils/Makefile.in b/gst-libs/gst/pbutils/Makefile.in
index 43853f6..66a8b03 100644
--- a/gst-libs/gst/pbutils/Makefile.in
+++ b/gst-libs/gst/pbutils/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-libs/gst/riff/Makefile.in b/gst-libs/gst/riff/Makefile.in
index 99b1266..a6d81c5 100644
--- a/gst-libs/gst/riff/Makefile.in
+++ b/gst-libs/gst/riff/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-libs/gst/riff/riff-ids.h b/gst-libs/gst/riff/riff-ids.h
index 9b9f0e5..26aa350 100644
--- a/gst-libs/gst/riff/riff-ids.h
+++ b/gst-libs/gst/riff/riff-ids.h
@@ -47,6 +47,7 @@
#define GST_RIFF_TAG_idx1 GST_MAKE_FOURCC ('i','d','x','1')
#define GST_RIFF_TAG_dmlh GST_MAKE_FOURCC ('d','m','l','h')
#define GST_RIFF_TAG_ID32 GST_MAKE_FOURCC ('I','D','3','2')
+#define GST_RIFF_TAG_id3 GST_MAKE_FOURCC ('i','d','3',' ')
#define GST_RIFF_TAG_IDVX GST_MAKE_FOURCC ('I','D','V','X')
/* WAV stuff */
#define GST_RIFF_TAG_fmt GST_MAKE_FOURCC ('f','m','t',' ')
diff --git a/gst-libs/gst/rtp/Makefile.in b/gst-libs/gst/rtp/Makefile.in
index 0e47a58..3a2d0d5 100644
--- a/gst-libs/gst/rtp/Makefile.in
+++ b/gst-libs/gst/rtp/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-libs/gst/rtsp/Makefile.in b/gst-libs/gst/rtsp/Makefile.in
index cb4c6f6..2f5e509 100644
--- a/gst-libs/gst/rtsp/Makefile.in
+++ b/gst-libs/gst/rtsp/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-libs/gst/rtsp/gstrtsptransport.c b/gst-libs/gst/rtsp/gstrtsptransport.c
index e5d8f26..5207a2c 100644
--- a/gst-libs/gst/rtsp/gstrtsptransport.c
+++ b/gst-libs/gst/rtsp/gstrtsptransport.c
@@ -100,6 +100,24 @@
{NULL, GST_RTSP_PROFILE_UNKNOWN}
};
+GType
+gst_rtsp_profile_get_type (void)
+{
+ static volatile gsize rtsp_profile_type = 0;
+ static const GFlagsValue rtsp_profile[] = {
+ {GST_RTSP_PROFILE_AVP, "GST_RTSP_PROFILE_AVP", "avp"},
+ {GST_RTSP_PROFILE_SAVP, "GST_RTSP_PROFILE_SAVP", "savp"},
+ {0, NULL, NULL},
+ };
+
+ if (g_once_init_enter (&rtsp_profile_type)) {
+ GType tmp = g_flags_register_static ("GstRTSPProfile", rtsp_profile);
+ g_once_init_leave (&rtsp_profile_type, tmp);
+ }
+
+ return (GType) rtsp_profile_type;
+}
+
typedef struct
{
const gchar *name;
@@ -113,7 +131,6 @@
{NULL, GST_RTSP_LOWER_TRANS_UNKNOWN}
};
-
GType
gst_rtsp_lower_trans_get_type (void)
{
diff --git a/gst-libs/gst/rtsp/gstrtsptransport.h b/gst-libs/gst/rtsp/gstrtsptransport.h
index 014b9b9..9de5601 100644
--- a/gst-libs/gst/rtsp/gstrtsptransport.h
+++ b/gst-libs/gst/rtsp/gstrtsptransport.h
@@ -76,6 +76,9 @@
GST_RTSP_PROFILE_SAVP = (1 << 1)
} GstRTSPProfile;
+#define GST_TYPE_RTSP_PROFILE (gst_rtsp_profile_get_type())
+GType gst_rtsp_profile_get_type (void);
+
/**
* GstRTSPLowerTrans:
* @GST_RTSP_LOWER_TRANS_UNKNOWN: invalid transport flag
diff --git a/gst-libs/gst/sdp/Makefile.in b/gst-libs/gst/sdp/Makefile.in
index 7c2f17b..092570c 100644
--- a/gst-libs/gst/sdp/Makefile.in
+++ b/gst-libs/gst/sdp/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-libs/gst/tag/Makefile.in b/gst-libs/gst/tag/Makefile.in
index bcac9b6..a8bfd00 100644
--- a/gst-libs/gst/tag/Makefile.in
+++ b/gst-libs/gst/tag/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-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index 81ef5aa..ada989f 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/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-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
index 78f643f..dd8abe3 100644
--- a/gst-libs/gst/video/gstvideodecoder.c
+++ b/gst-libs/gst/video/gstvideodecoder.c
@@ -456,6 +456,8 @@
static gboolean gst_video_decoder_negotiate_default (GstVideoDecoder * decoder);
static GstFlowReturn gst_video_decoder_parse_available (GstVideoDecoder * dec,
gboolean at_eos, gboolean new_buffer);
+static gboolean gst_video_decoder_negotiate_unlocked (GstVideoDecoder *
+ decoder);
/* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init
* method to get to the padtemplates */
@@ -1868,6 +1870,39 @@
/* move it to the front of the decode queue */
priv->decode = g_list_concat (walk, priv->decode);
+ /* this is reverse playback, check if we need to apply some segment
+ * to the output before decoding, as during decoding the segment.rate
+ * must be used to determine if a buffer should be pushed or added to
+ * the output list for reverse pushing.
+ *
+ * The new segment is not immediately pushed here because we must
+ * wait for negotiation to happen before it can be pushed to avoid
+ * pushing a segment before caps event. Negotiation only happens
+ * when finish_frame is called.
+ */
+ for (walk = frame->events; walk;) {
+ GList *cur = walk;
+ GstEvent *event = walk->data;
+
+ walk = g_list_next (walk);
+ if (GST_EVENT_TYPE (event) <= GST_EVENT_SEGMENT) {
+
+ if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
+ GstSegment segment;
+
+ GST_DEBUG_OBJECT (dec, "Segment at frame %p %" GST_TIME_FORMAT,
+ frame, GST_TIME_ARGS (GST_BUFFER_PTS (frame->input_buffer)));
+ gst_event_copy_segment (event, &segment);
+ if (segment.format == GST_FORMAT_TIME) {
+ dec->output_segment = segment;
+ }
+ }
+ dec->priv->pending_events =
+ g_list_append (dec->priv->pending_events, event);
+ frame->events = g_list_delete_link (frame->events, cur);
+ }
+ }
+
/* if we copied a keyframe, flush and decode the decode queue */
if (GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT (frame)) {
GST_DEBUG_OBJECT (dec, "found keyframe %p with PTS %" GST_TIME_FORMAT
@@ -2047,13 +2082,30 @@
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
switch (transition) {
- case GST_STATE_CHANGE_PAUSED_TO_READY:
+ case GST_STATE_CHANGE_PAUSED_TO_READY:{
+ gboolean stopped = TRUE;
+
GST_VIDEO_DECODER_STREAM_LOCK (decoder);
gst_video_decoder_reset (decoder, TRUE, TRUE);
GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
- if (decoder_class->stop && !decoder_class->stop (decoder))
+
+ if (decoder_class->stop) {
+ stopped = decoder_class->stop (decoder);
+
+ /* the subclass might have released frames and events from freed frames
+ * are stored in the pending_events list */
+ GST_VIDEO_DECODER_STREAM_LOCK (decoder);
+ g_list_free_full (decoder->priv->pending_events, (GDestroyNotify)
+ gst_event_unref);
+ decoder->priv->pending_events = NULL;
+ GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
+ }
+
+ if (!stopped)
goto stop_failed;
+
break;
+ }
case GST_STATE_CHANGE_READY_TO_NULL:
/* close device/library if needed */
if (decoder_class->close && !decoder_class->close (decoder))
@@ -2353,6 +2405,11 @@
gst_video_codec_frame_unref (frame);
dec->priv->frames = g_list_delete_link (dec->priv->frames, link);
}
+ if (frame->events) {
+ dec->priv->pending_events =
+ g_list_concat (dec->priv->pending_events, frame->events);
+ frame->events = NULL;
+ }
GST_VIDEO_DECODER_STREAM_UNLOCK (dec);
/* unref because this function takes ownership */
@@ -2442,14 +2499,16 @@
GstFlowReturn ret = GST_FLOW_OK;
GstVideoDecoderPrivate *priv = decoder->priv;
GstBuffer *output_buffer;
+ gboolean needs_reconfigure = FALSE;
GST_LOG_OBJECT (decoder, "finish frame %p", frame);
GST_VIDEO_DECODER_STREAM_LOCK (decoder);
+ needs_reconfigure = gst_pad_check_reconfigure (decoder->srcpad);
if (G_UNLIKELY (priv->output_state_changed || (priv->output_state
- && gst_pad_check_reconfigure (decoder->srcpad)))) {
- if (!gst_video_decoder_negotiate (decoder)) {
+ && needs_reconfigure))) {
+ if (!gst_video_decoder_negotiate_unlocked (decoder)) {
gst_pad_mark_reconfigure (decoder->srcpad);
if (GST_PAD_IS_FLUSHING (decoder->srcpad))
ret = GST_FLOW_FLUSHING;
@@ -3028,6 +3087,7 @@
GstVideoCodecFrame *frame;
GstCaps *prevcaps;
+ g_return_val_if_fail (state, FALSE);
g_return_val_if_fail (GST_VIDEO_INFO_WIDTH (&state->info) != 0, FALSE);
g_return_val_if_fail (GST_VIDEO_INFO_HEIGHT (&state->info) != 0, FALSE);
@@ -3143,11 +3203,25 @@
}
}
+static gboolean
+gst_video_decoder_negotiate_unlocked (GstVideoDecoder * decoder)
+{
+ GstVideoDecoderClass *klass = GST_VIDEO_DECODER_GET_CLASS (decoder);
+ gboolean ret = TRUE;
+
+ if (G_LIKELY (klass->negotiate))
+ ret = klass->negotiate (decoder);
+
+ return ret;
+}
+
/**
* gst_video_decoder_negotiate:
* @decoder: a #GstVideoDecoder
*
- * Negotiate with downstreame elements to currently configured #GstVideoCodecState.
+ * Negotiate with downstream elements to currently configured #GstVideoCodecState.
+ * Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+ * negotiate fails.
*
* Returns: #TRUE if the negotiation succeeded, else #FALSE.
*/
@@ -3158,13 +3232,16 @@
gboolean ret = TRUE;
g_return_val_if_fail (GST_IS_VIDEO_DECODER (decoder), FALSE);
- g_return_val_if_fail (decoder->priv->output_state, FALSE);
klass = GST_VIDEO_DECODER_GET_CLASS (decoder);
GST_VIDEO_DECODER_STREAM_LOCK (decoder);
- if (klass->negotiate)
+ gst_pad_check_reconfigure (decoder->srcpad);
+ if (klass->negotiate) {
ret = klass->negotiate (decoder);
+ if (!ret)
+ gst_pad_mark_reconfigure (decoder->srcpad);
+ }
GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
return ret;
@@ -3188,18 +3265,23 @@
{
GstFlowReturn flow;
GstBuffer *buffer = NULL;
-
- g_return_val_if_fail (decoder->priv->output_state, NULL);
+ gboolean needs_reconfigure = FALSE;
GST_DEBUG ("alloc src buffer");
GST_VIDEO_DECODER_STREAM_LOCK (decoder);
- if (G_UNLIKELY (decoder->priv->output_state_changed
- || gst_pad_check_reconfigure (decoder->srcpad))) {
- if (!gst_video_decoder_negotiate (decoder)) {
- GST_DEBUG_OBJECT (decoder, "Failed to negotiate, fallback allocation");
- gst_pad_mark_reconfigure (decoder->srcpad);
- goto fallback;
+ needs_reconfigure = gst_pad_check_reconfigure (decoder->srcpad);
+ if (G_UNLIKELY (!decoder->priv->output_state
+ || decoder->priv->output_state_changed || needs_reconfigure)) {
+ if (!gst_video_decoder_negotiate_unlocked (decoder)) {
+ if (decoder->priv->output_state) {
+ GST_DEBUG_OBJECT (decoder, "Failed to negotiate, fallback allocation");
+ gst_pad_mark_reconfigure (decoder->srcpad);
+ goto fallback;
+ } else {
+ GST_DEBUG_OBJECT (decoder, "Failed to negotiate, output_buffer=NULL");
+ goto failed_allocation;
+ }
}
}
@@ -3208,17 +3290,24 @@
if (flow != GST_FLOW_OK) {
GST_INFO_OBJECT (decoder, "couldn't allocate output buffer, flow %s",
gst_flow_get_name (flow));
- goto fallback;
+ if (decoder->priv->output_state && decoder->priv->output_state->info.size)
+ goto fallback;
+ else
+ goto failed_allocation;
}
GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
return buffer;
fallback:
+ GST_INFO_OBJECT (decoder,
+ "Fallback allocation, creating new buffer which doesn't belongs to any buffer pool");
buffer =
gst_buffer_new_allocate (NULL, decoder->priv->output_state->info.size,
NULL);
+failed_allocation:
+ GST_ERROR_OBJECT (decoder, "Failed to allocate the buffer..");
GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
return buffer;
@@ -3245,6 +3334,7 @@
GstFlowReturn flow_ret;
GstVideoCodecState *state;
int num_bytes;
+ gboolean needs_reconfigure = FALSE;
g_return_val_if_fail (decoder->priv->output_state, GST_FLOW_NOT_NEGOTIATED);
g_return_val_if_fail (frame->output_buffer == NULL, GST_FLOW_ERROR);
@@ -3262,9 +3352,9 @@
goto error;
}
- if (G_UNLIKELY (decoder->priv->output_state_changed
- || gst_pad_check_reconfigure (decoder->srcpad))) {
- if (!gst_video_decoder_negotiate (decoder)) {
+ needs_reconfigure = gst_pad_check_reconfigure (decoder->srcpad);
+ if (G_UNLIKELY (decoder->priv->output_state_changed || needs_reconfigure)) {
+ if (!gst_video_decoder_negotiate_unlocked (decoder)) {
GST_DEBUG_OBJECT (decoder, "Failed to negotiate, fallback allocation");
gst_pad_mark_reconfigure (decoder->srcpad);
}
diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c
index f5c1832..8b72168 100644
--- a/gst-libs/gst/video/gstvideoencoder.c
+++ b/gst-libs/gst/video/gstvideoencoder.c
@@ -232,6 +232,8 @@
static gboolean gst_video_encoder_propose_allocation_default (GstVideoEncoder *
encoder, GstQuery * query);
static gboolean gst_video_encoder_negotiate_default (GstVideoEncoder * encoder);
+static gboolean gst_video_encoder_negotiate_unlocked (GstVideoEncoder *
+ encoder);
/* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init
* method to get to the padtemplates */
@@ -1457,13 +1459,16 @@
GstAllocationParams params;
gboolean ret = TRUE;
GstVideoCodecState *state = encoder->priv->output_state;
- GstVideoInfo *info = &state->info;
+ GstVideoInfo *info = NULL;
GstQuery *query = NULL;
GstVideoCodecFrame *frame;
GstCaps *prevcaps;
+ g_return_val_if_fail (state, FALSE);
g_return_val_if_fail (state->caps != NULL, FALSE);
+ info = &state->info;
+
if (encoder->priv->output_state_changed) {
state->caps = gst_caps_make_writable (state->caps);
@@ -1567,11 +1572,25 @@
}
}
+static gboolean
+gst_video_encoder_negotiate_unlocked (GstVideoEncoder * encoder)
+{
+ GstVideoEncoderClass *klass = GST_VIDEO_ENCODER_GET_CLASS (encoder);
+ gboolean ret = TRUE;
+
+ if (G_LIKELY (klass->negotiate))
+ ret = klass->negotiate (encoder);
+
+ return ret;
+}
+
/**
* gst_video_encoder_negotiate:
* @encoder: a #GstVideoEncoder
*
* Negotiate with downstream elements to currently configured #GstVideoCodecState.
+ * Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+ * negotiate fails.
*
* Returns: #TRUE if the negotiation succeeded, else #FALSE.
*/
@@ -1582,13 +1601,16 @@
gboolean ret = TRUE;
g_return_val_if_fail (GST_IS_VIDEO_ENCODER (encoder), FALSE);
- g_return_val_if_fail (encoder->priv->output_state, FALSE);
klass = GST_VIDEO_ENCODER_GET_CLASS (encoder);
GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
- if (klass->negotiate)
+ gst_pad_check_reconfigure (encoder->srcpad);
+ if (klass->negotiate) {
ret = klass->negotiate (encoder);
+ if (!ret)
+ gst_pad_mark_reconfigure (encoder->srcpad);
+ }
GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
return ret;
@@ -1608,16 +1630,17 @@
gst_video_encoder_allocate_output_buffer (GstVideoEncoder * encoder, gsize size)
{
GstBuffer *buffer;
+ gboolean needs_reconfigure = FALSE;
g_return_val_if_fail (size > 0, NULL);
GST_DEBUG ("alloc src buffer");
GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
+ needs_reconfigure = gst_pad_check_reconfigure (encoder->srcpad);
if (G_UNLIKELY (encoder->priv->output_state_changed
- || (encoder->priv->output_state
- && gst_pad_check_reconfigure (encoder->srcpad)))) {
- if (!gst_video_encoder_negotiate (encoder)) {
+ || (encoder->priv->output_state && needs_reconfigure))) {
+ if (!gst_video_encoder_negotiate_unlocked (encoder)) {
GST_DEBUG_OBJECT (encoder, "Failed to negotiate, fallback allocation");
gst_pad_mark_reconfigure (encoder->srcpad);
goto fallback;
@@ -1663,13 +1686,15 @@
gst_video_encoder_allocate_output_frame (GstVideoEncoder *
encoder, GstVideoCodecFrame * frame, gsize size)
{
+ gboolean needs_reconfigure = FALSE;
+
g_return_val_if_fail (frame->output_buffer == NULL, GST_FLOW_ERROR);
GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
+ needs_reconfigure = gst_pad_check_reconfigure (encoder->srcpad);
if (G_UNLIKELY (encoder->priv->output_state_changed
- || (encoder->priv->output_state
- && gst_pad_check_reconfigure (encoder->srcpad)))) {
- if (!gst_video_encoder_negotiate (encoder)) {
+ || (encoder->priv->output_state && needs_reconfigure))) {
+ if (!gst_video_encoder_negotiate_unlocked (encoder)) {
GST_DEBUG_OBJECT (encoder, "Failed to negotiate, fallback allocation");
gst_pad_mark_reconfigure (encoder->srcpad);
}
@@ -1730,6 +1755,7 @@
gboolean send_headers = FALSE;
gboolean discont = (frame->presentation_frame_number == 0);
GstBuffer *buffer;
+ gboolean needs_reconfigure = FALSE;
encoder_class = GST_VIDEO_ENCODER_GET_CLASS (encoder);
@@ -1742,9 +1768,10 @@
GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
+ needs_reconfigure = gst_pad_check_reconfigure (encoder->srcpad);
if (G_UNLIKELY (priv->output_state_changed || (priv->output_state
- && gst_pad_check_reconfigure (encoder->srcpad)))) {
- if (!gst_video_encoder_negotiate (encoder)) {
+ && needs_reconfigure))) {
+ if (!gst_video_encoder_negotiate_unlocked (encoder)) {
gst_pad_mark_reconfigure (encoder->srcpad);
if (GST_PAD_IS_FLUSHING (encoder->srcpad))
ret = GST_FLOW_FLUSHING;
diff --git a/gst-libs/gst/video/video-chroma.c b/gst-libs/gst/video/video-chroma.c
index ed2eb0a..15cf61c 100644
--- a/gst-libs/gst/video/video-chroma.c
+++ b/gst-libs/gst/video/video-chroma.c
@@ -92,7 +92,6 @@
gint width);
};
-
#define PR(i) (p[2 + 4 * (i)])
#define PB(i) (p[3 + 4 * (i)])
@@ -309,6 +308,26 @@
} \
} \
}
+/* 2x vertical downsampling interlaced without cositing
+ *
+ * even odd
+ *
+ * a x--x--x---------------
+ * O O O <---
+ * b --------------x--x--x-
+ * c x--x--x---------------
+ * O O O <---
+ * d --------------x--x--x-
+ */
+#define MAKE_DOWNSAMPLE_VI2(type) \
+static void \
+video_chroma_down_vi2_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) \
+ resample->h_resample (resample, lines[0], width); \
+}
MAKE_UPSAMPLE_H2 (guint16);
MAKE_UPSAMPLE_H2 (guint8);
@@ -320,6 +339,8 @@
MAKE_DOWNSAMPLE_H2 (guint8);
MAKE_DOWNSAMPLE_V2 (guint16);
MAKE_DOWNSAMPLE_V2 (guint8);
+MAKE_DOWNSAMPLE_VI2 (guint16);
+MAKE_DOWNSAMPLE_VI2 (guint8);
/* 4x horizontal upsampling without cositing
*
@@ -411,6 +432,19 @@
} \
} \
}
+/* 4x vertical upsampling interlaced without cositing
+ *
+ */
+#define MAKE_UPSAMPLE_VI4(type) \
+static void \
+video_chroma_up_vi4_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
/* 4x horizontal downsampling without cositing
*
@@ -481,17 +515,34 @@
PB0(i) = FILT_1_1_1_1 (tb0, tb1, tb2, tb3); \
} \
}
+/* 4x vertical downsampling interlaced without cositing
+ *
+ */
+#define MAKE_DOWNSAMPLE_VI4(type) \
+static void \
+video_chroma_down_vi4_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
MAKE_UPSAMPLE_H4 (guint16);
MAKE_UPSAMPLE_H4 (guint8);
MAKE_UPSAMPLE_V4 (guint16);
MAKE_UPSAMPLE_V4 (guint8);
+MAKE_UPSAMPLE_VI4 (guint16);
+MAKE_UPSAMPLE_VI4 (guint8);
MAKE_DOWNSAMPLE_H4 (guint16);
MAKE_DOWNSAMPLE_H4 (guint8);
MAKE_DOWNSAMPLE_V4 (guint16);
MAKE_DOWNSAMPLE_V4 (guint8);
+MAKE_DOWNSAMPLE_VI4 (guint16);
+MAKE_DOWNSAMPLE_VI4 (guint8);
-/* 2x upsampling with cositing
+/* 2x horizontal upsampling with cositing
*
* a +------ (a + b + 1) >> 1
* | |
@@ -502,8 +553,8 @@
*/
#define MAKE_UPSAMPLE_H2_CS(type) \
static void \
-video_chroma_up_h2_cs_##type (GstVideoChromaResample *resample, \
- gpointer pixels, gint width) \
+video_chroma_up_h2_cs_##type (GstVideoChromaResample *resample, \
+ gpointer pixels, gint width) \
{ \
type *p = pixels; \
gint i; \
@@ -513,7 +564,38 @@
PB(i) = FILT_1_1 (PB(i-1), PB(i+1)); \
} \
}
-/* 2x downsampling with cositing
+/* 2x vertical upsampling with cositing
+ *
+ * a x O--O--O- <---- a
+ * O--O--O- <---- (a + b + 1) >> 1
+ * b x O--O--O-
+ * O--O--O-
+ */
+#define MAKE_UPSAMPLE_V2_CS(type) \
+static void \
+video_chroma_up_v2_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
+/* 2x vertical upsampling interlaced with cositing
+ *
+ */
+#define MAKE_UPSAMPLE_VI2_CS(type) \
+static void \
+video_chroma_up_vi2_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
+
+/* 2x horizontal downsampling with cositing
*
* a
* | +------ (b + 2*c + d + 2) >> 2
@@ -524,8 +606,8 @@
*/
#define MAKE_DOWNSAMPLE_H2_CS(type) \
static void \
-video_chroma_down_h2_cs_##type (GstVideoChromaResample *resample, \
- gpointer pixels, gint width) \
+video_chroma_down_h2_cs_##type (GstVideoChromaResample *resample, \
+ gpointer pixels, gint width) \
{ \
type *p = pixels; \
gint i; \
@@ -545,13 +627,53 @@
PB(i) = FILT_1_3 (PB(i-1), PB(i)); \
} \
}
+/* 2x vertical downsampling with cositing
+ *
+ * a x O--O--O- <---- a
+ * b x --------
+ * c x O--O--O- <---- (b + 2*c + d + 2) >> 2
+ * d x --------
+ * e x O--O--O-
+ * f x --------
+ */
+#define MAKE_DOWNSAMPLE_V2_CS(type) \
+static void \
+video_chroma_down_v2_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
+/* 2x vertical downsampling interlaced with cositing
+ *
+ */
+#define MAKE_DOWNSAMPLE_VI2_CS(type) \
+static void \
+video_chroma_down_vi2_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
MAKE_UPSAMPLE_H2_CS (guint16);
MAKE_UPSAMPLE_H2_CS (guint8);
+MAKE_UPSAMPLE_V2_CS (guint16);
+MAKE_UPSAMPLE_V2_CS (guint8);
+MAKE_UPSAMPLE_VI2_CS (guint16);
+MAKE_UPSAMPLE_VI2_CS (guint8);
MAKE_DOWNSAMPLE_H2_CS (guint16);
MAKE_DOWNSAMPLE_H2_CS (guint8);
+MAKE_DOWNSAMPLE_V2_CS (guint16);
+MAKE_DOWNSAMPLE_V2_CS (guint8);
+MAKE_DOWNSAMPLE_VI2_CS (guint16);
+MAKE_DOWNSAMPLE_VI2_CS (guint8);
-/* 4x upsampling with cositing
+/* 4x horizontal upsampling with cositing
*
* +---------- (3*a + b + 2) >> 2
* a | +-------- ( a + b + 1) >> 1
@@ -581,7 +703,39 @@
PB(i+3) = FILT_1_3 (tb0, tb1); \
} \
}
-/* 4x downsampling with cositing
+/* 4x vertical upsampling with cositing
+ *
+ * a x O--O--O- <---- a
+ * O--O--O- <---- (3*a + b + 2) >> 2
+ * O--O--O- <---- ( a + b + 1) >> 1
+ * O--O--O- <---- ( a + 3*b + 2) >> 2
+ * b x O--O--O-
+ * O--O--O-
+ */
+#define MAKE_UPSAMPLE_V4_CS(type) \
+static void \
+video_chroma_up_v4_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
+/* 4x vertical upsampling interlaced with cositing
+ *
+ */
+#define MAKE_UPSAMPLE_VI4_CS(type) \
+static void \
+video_chroma_up_vi4_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
+/* 4x horizontal downsampling with cositing
*
* a
* | +------ (b + 2*c + 3*d + 4*e + 3*f + 2*g + h + 8) >> 16
@@ -613,11 +767,55 @@
PB(i) = FILT_1_2_3_10 (PB(i-3), PB(i-2), PB(i-1), PB(i)); \
} \
}
+/* 4x vertical downsampling with cositing
+ *
+ * a x O--O--O- <---- a
+ * b x --------
+ * c x --------
+ * d x --------
+ * e x O--O--O- <---- (b + 2*c + 3*d + 4*e + 3*f + 2*g + h + 8) >> 16
+ * f x --------
+ * g x --------
+ * h x --------
+ * i x O--O--O-
+ * j x --------
+ */
+#define MAKE_DOWNSAMPLE_V4_CS(type) \
+static void \
+video_chroma_down_v4_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
+/* 4x vertical downsampling interlaced with cositing
+ *
+ */
+#define MAKE_DOWNSAMPLE_VI4_CS(type) \
+static void \
+video_chroma_down_vi4_cs_##type (GstVideoChromaResample *resample, \
+ gpointer lines[], gint width) \
+{ \
+ /* FIXME */ \
+ if (resample->h_resample) { \
+ resample->h_resample (resample, lines[0], width); \
+ } \
+}
MAKE_UPSAMPLE_H4_CS (guint16);
MAKE_UPSAMPLE_H4_CS (guint8);
+MAKE_UPSAMPLE_V4_CS (guint16);
+MAKE_UPSAMPLE_V4_CS (guint8);
+MAKE_UPSAMPLE_VI4_CS (guint16);
+MAKE_UPSAMPLE_VI4_CS (guint8);
MAKE_DOWNSAMPLE_H4_CS (guint16);
MAKE_DOWNSAMPLE_H4_CS (guint8);
+MAKE_DOWNSAMPLE_V4_CS (guint16);
+MAKE_DOWNSAMPLE_V4_CS (guint8);
+MAKE_DOWNSAMPLE_VI4_CS (guint16);
+MAKE_DOWNSAMPLE_VI4_CS (guint8);
typedef struct
{
@@ -665,36 +863,40 @@
{video_chroma_none, 1, 0},
{video_chroma_up_v2_guint8, 2, -1},
{video_chroma_down_v2_guint8, 2, 0},
+ /* 16 bits */
{video_chroma_up_v2_guint16, 2, -1},
{video_chroma_down_v2_guint16, 2, 0},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
+ /* cosited */
+ {video_chroma_up_v2_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_v2_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_v2_cs_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_v2_cs_guint16, 1, 0}, /* IMPLEMENT ME */
+ /* 4x */
{video_chroma_up_v4_guint8, 4, -2},
{video_chroma_down_v4_guint8, 4, 0},
{video_chroma_up_v4_guint16, 4, -2},
{video_chroma_down_v4_guint16, 4, 0},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
+ {video_chroma_up_v4_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_v4_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_v4_cs_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_v4_cs_guint16, 1, 0}, /* IMPLEMENT ME */
+ /* interlaced */
{video_chroma_up_vi2_guint8, 4, -2},
- {NULL},
+ {video_chroma_down_vi2_guint8, 1, 0}, /* IMPLEMENT ME */
{video_chroma_up_vi2_guint16, 4, -2},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL},
- {NULL}
+ {video_chroma_down_vi2_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_vi2_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_vi2_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_vi2_cs_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_vi2_cs_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_vi4_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_vi4_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_vi4_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_vi4_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_vi4_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_vi4_cs_guint8, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_up_vi4_cs_guint16, 1, 0}, /* IMPLEMENT ME */
+ {video_chroma_down_vi4_cs_guint16, 1, 0}, /* IMPLEMENT ME */
};
/**
diff --git a/gst-plugins-base.doap b/gst-plugins-base.doap
index fdf2a26..defd686 100644
--- a/gst-plugins-base.doap
+++ b/gst-plugins-base.doap
@@ -36,6 +36,16 @@
<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/gst-plugins-base/gst-plugins-base-1.2.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.2.2</revision>
<branch>1.2</branch>
<name></name>
diff --git a/gst-plugins-base.spec b/gst-plugins-base.spec
index 8476b5e..09804b1 100644
--- a/gst-plugins-base.spec
+++ b/gst-plugins-base.spec
@@ -4,7 +4,7 @@
%define gst_minver 0.11.0
Name: %{gstreamer}-plugins-base
-Version: 1.2.2
+Version: 1.2.3
Release: 1.gst
Summary: GStreamer streaming media framework plug-ins
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 4095b53..b48feb0 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/adder/Makefile.in b/gst/adder/Makefile.in
index 17cdbd6..2b0a914 100644
--- a/gst/adder/Makefile.in
+++ b/gst/adder/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/app/Makefile.in b/gst/app/Makefile.in
index 16d3f8b..dd51287 100644
--- a/gst/app/Makefile.in
+++ b/gst/app/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/audioconvert/Makefile.in b/gst/audioconvert/Makefile.in
index aebc556..92b1cec 100644
--- a/gst/audioconvert/Makefile.in
+++ b/gst/audioconvert/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/audiorate/Makefile.in b/gst/audiorate/Makefile.in
index 2b8277d..a9a2236 100644
--- a/gst/audiorate/Makefile.in
+++ b/gst/audiorate/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/audioresample/Makefile.in b/gst/audioresample/Makefile.in
index 8fd645d..2045de3 100644
--- a/gst/audioresample/Makefile.in
+++ b/gst/audioresample/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/audiotestsrc/Makefile.in b/gst/audiotestsrc/Makefile.in
index 5361fcf..4a36638 100644
--- a/gst/audiotestsrc/Makefile.in
+++ b/gst/audiotestsrc/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/encoding/Makefile.in b/gst/encoding/Makefile.in
index be625ba..37cee02 100644
--- a/gst/encoding/Makefile.in
+++ b/gst/encoding/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/gio/Makefile.in b/gst/gio/Makefile.in
index c3c3e08..ca72f84 100644
--- a/gst/gio/Makefile.in
+++ b/gst/gio/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/playback/Makefile.in b/gst/playback/Makefile.in
index f893435..de91a8e 100644
--- a/gst/playback/Makefile.in
+++ b/gst/playback/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/subparse/Makefile.in b/gst/subparse/Makefile.in
index ec9aa6b..c9686af 100644
--- a/gst/subparse/Makefile.in
+++ b/gst/subparse/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/tcp/Makefile.in b/gst/tcp/Makefile.in
index 9ee8853..a48ae70 100644
--- a/gst/tcp/Makefile.in
+++ b/gst/tcp/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/typefind/Makefile.in b/gst/typefind/Makefile.in
index 77b1f0b..26a53a7 100644
--- a/gst/typefind/Makefile.in
+++ b/gst/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/gst/videoconvert/Makefile.in b/gst/videoconvert/Makefile.in
index 0609e4a..e540c26 100644
--- a/gst/videoconvert/Makefile.in
+++ b/gst/videoconvert/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/videoconvert/gstvideoconvert.c b/gst/videoconvert/gstvideoconvert.c
index f9b4495..34e3535 100644
--- a/gst/videoconvert/gstvideoconvert.c
+++ b/gst/videoconvert/gstvideoconvert.c
@@ -143,17 +143,49 @@
return res;
}
-#define SCORE_PALETTE_LOSS 1
-#define SCORE_COLOR_LOSS 2
-#define SCORE_ALPHA_LOSS 4
-#define SCORE_CHROMA_W_LOSS 8
-#define SCORE_CHROMA_H_LOSS 16
-#define SCORE_DEPTH_LOSS 32
+/*
+ * This is an incomplete matrix of in formats and a score for the prefered output
+ * format.
+ *
+ * out: RGB24 RGB16 ARGB AYUV YUV444 YUV422 YUV420 YUV411 YUV410 PAL GRAY
+ * in
+ * RGB24 0 2 1 2 2 3 4 5 6 7 8
+ * RGB16 1 0 1 2 2 3 4 5 6 7 8
+ * ARGB 2 3 0 1 4 5 6 7 8 9 10
+ * AYUV 3 4 1 0 2 5 6 7 8 9 10
+ * YUV444 2 4 3 1 0 5 6 7 8 9 10
+ * YUV422 3 5 4 2 1 0 6 7 8 9 10
+ * YUV420 4 6 5 3 2 1 0 7 8 9 10
+ * YUV411 4 6 5 3 2 1 7 0 8 9 10
+ * YUV410 6 8 7 5 4 3 2 1 0 9 10
+ * PAL 1 3 2 6 4 6 7 8 9 0 10
+ * GRAY 1 4 3 2 1 5 6 7 8 9 0
+ *
+ * PAL or GRAY are never prefered, if we can we would convert to PAL instead
+ * of GRAY, though
+ * less subsampling is prefered and if any, preferably horizontal
+ * We would like to keep the alpha, even if we would need to to colorspace conversion
+ * or lose depth.
+ */
+#define SCORE_FORMAT_CHANGE 1
+#define SCORE_DEPTH_CHANGE 1
+#define SCORE_ALPHA_CHANGE 1
+#define SCORE_CHROMA_W_CHANGE 1
+#define SCORE_CHROMA_H_CHANGE 1
+#define SCORE_PALETTE_CHANGE 1
-#define COLOR_MASK (GST_VIDEO_FORMAT_FLAG_YUV | \
- GST_VIDEO_FORMAT_FLAG_RGB | GST_VIDEO_FORMAT_FLAG_GRAY)
-#define ALPHA_MASK (GST_VIDEO_FORMAT_FLAG_ALPHA)
-#define PALETTE_MASK (GST_VIDEO_FORMAT_FLAG_PALETTE)
+#define SCORE_COLORSPACE_LOSS 2 /* RGB <-> YUV */
+#define SCORE_DEPTH_LOSS 4 /* change bit depth */
+#define SCORE_ALPHA_LOSS 8 /* lose the alpha channel */
+#define SCORE_CHROMA_W_LOSS 16 /* vertical subsample */
+#define SCORE_CHROMA_H_LOSS 32 /* horizontal subsample */
+#define SCORE_PALETTE_LOSS 64 /* convert to palette format */
+#define SCORE_COLOR_LOSS 128 /* convert to GRAY */
+
+#define COLORSPACE_MASK (GST_VIDEO_FORMAT_FLAG_YUV | \
+ GST_VIDEO_FORMAT_FLAG_RGB | GST_VIDEO_FORMAT_FLAG_GRAY)
+#define ALPHA_MASK (GST_VIDEO_FORMAT_FLAG_ALPHA)
+#define PALETTE_MASK (GST_VIDEO_FORMAT_FLAG_PALETTE)
/* calculate how much loss a conversion would be */
static void
@@ -177,7 +209,7 @@
return;
}
- loss = 1;
+ loss = SCORE_FORMAT_CHANGE;
in_flags = GST_VIDEO_FORMAT_INFO_FLAGS (in_info);
in_flags &= ~GST_VIDEO_FORMAT_FLAG_LE;
@@ -189,22 +221,40 @@
t_flags &= ~GST_VIDEO_FORMAT_FLAG_COMPLEX;
t_flags &= ~GST_VIDEO_FORMAT_FLAG_UNPACK;
- if ((t_flags & PALETTE_MASK) != (in_flags & PALETTE_MASK))
- loss += SCORE_PALETTE_LOSS;
+ if ((t_flags & PALETTE_MASK) != (in_flags & PALETTE_MASK)) {
+ loss += SCORE_PALETTE_CHANGE;
+ if (t_flags & PALETTE_MASK)
+ loss += SCORE_PALETTE_LOSS;
+ }
- if ((t_flags & COLOR_MASK) != (in_flags & COLOR_MASK))
- loss += SCORE_COLOR_LOSS;
+ if ((t_flags & COLORSPACE_MASK) != (in_flags & COLORSPACE_MASK)) {
+ loss += SCORE_COLORSPACE_LOSS;
+ if (t_flags & GST_VIDEO_FORMAT_FLAG_GRAY)
+ loss += SCORE_COLOR_LOSS;
+ }
- if ((t_flags & ALPHA_MASK) != (in_flags & ALPHA_MASK))
- loss += SCORE_ALPHA_LOSS;
+ if ((t_flags & ALPHA_MASK) != (in_flags & ALPHA_MASK)) {
+ loss += SCORE_ALPHA_CHANGE;
+ if (in_flags & ALPHA_MASK)
+ loss += SCORE_ALPHA_LOSS;
+ }
- if ((in_info->h_sub[1]) < (t_info->h_sub[1]))
- loss += SCORE_CHROMA_H_LOSS;
- if ((in_info->w_sub[1]) < (t_info->w_sub[1]))
- loss += SCORE_CHROMA_W_LOSS;
+ if ((in_info->h_sub[1]) != (t_info->h_sub[1])) {
+ loss += SCORE_CHROMA_H_CHANGE;
+ if ((in_info->h_sub[1]) < (t_info->h_sub[1]))
+ loss += SCORE_CHROMA_H_LOSS;
+ }
+ if ((in_info->w_sub[1]) != (t_info->w_sub[1])) {
+ loss += SCORE_CHROMA_W_CHANGE;
+ if ((in_info->w_sub[1]) < (t_info->w_sub[1]))
+ loss += SCORE_CHROMA_W_LOSS;
+ }
- if ((in_info->bits) > (t_info->bits))
- loss += SCORE_DEPTH_LOSS;
+ if ((in_info->bits) != (t_info->bits)) {
+ loss += SCORE_DEPTH_CHANGE;
+ if ((in_info->bits) > (t_info->bits))
+ loss += SCORE_DEPTH_LOSS;
+ }
GST_DEBUG_OBJECT (base, "score %s -> %s = %d",
GST_VIDEO_FORMAT_INFO_NAME (in_info),
diff --git a/gst/videorate/Makefile.in b/gst/videorate/Makefile.in
index edd4ac3..f6a68e7 100644
--- a/gst/videorate/Makefile.in
+++ b/gst/videorate/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/videoscale/Makefile.in b/gst/videoscale/Makefile.in
index dee2063..a80ac89 100644
--- a/gst/videoscale/Makefile.in
+++ b/gst/videoscale/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/videotestsrc/Makefile.in b/gst/videotestsrc/Makefile.in
index 16af29b..d31c8a0 100644
--- a/gst/videotestsrc/Makefile.in
+++ b/gst/videotestsrc/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/videotestsrc/gstvideotestsrc.c b/gst/videotestsrc/gstvideotestsrc.c
index 87e00eb..88d41e7 100644
--- a/gst/videotestsrc/gstvideotestsrc.c
+++ b/gst/videotestsrc/gstvideotestsrc.c
@@ -320,9 +320,14 @@
gst_structure_fixate_field_nearest_int (structure, "width", 320);
gst_structure_fixate_field_nearest_int (structure, "height", 240);
gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1);
+
if (gst_structure_has_field (structure, "pixel-aspect-ratio"))
gst_structure_fixate_field_nearest_fraction (structure,
"pixel-aspect-ratio", 1, 1);
+ else
+ gst_structure_set (structure, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1,
+ NULL);
+
if (gst_structure_has_field (structure, "colorimetry"))
gst_structure_fixate_field_string (structure, "colorimetry", "bt601");
if (gst_structure_has_field (structure, "chroma-site"))
@@ -331,6 +336,9 @@
if (gst_structure_has_field (structure, "interlace-mode"))
gst_structure_fixate_field_string (structure, "interlace-mode",
"progressive");
+ else
+ gst_structure_set (structure, "interlace-mode", G_TYPE_STRING,
+ "progressive", NULL);
caps = GST_BASE_SRC_CLASS (parent_class)->fixate (bsrc, caps);
diff --git a/gst/volume/Makefile.in b/gst/volume/Makefile.in
index 25f212a..e1a3815 100644
--- a/gst/volume/Makefile.in
+++ b/gst/volume/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 0bc9fea..308569f 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 ec815b5..190f85a 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/po/af.gmo b/po/af.gmo
index 674113e..4584052 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index e76a6ac..2d43f5a 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.7.6\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2004-03-18 14:16+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 f63873a..5b3a597 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 04a912b..ce6bedb 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2004-03-19 18:29+0200\n"
"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/bg.gmo b/po/bg.gmo
index 43c6bc8..4ce4103 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index a7af7e6..e796269 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2011-04-26 22:31+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 7252730..208ee23 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 4ae7403..208e65a 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2012-01-01 14:19+0100\n"
"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index 042a70b..66f3815 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 763b77f..9ab4d9d 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -10,7 +10,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base-1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-09-18 09:38+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 05f8b91..cacdd01 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 8490838..e82dc93 100644
--- a/po/da.po
+++ b/po/da.po
@@ -33,7 +33,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-12-08 16:38+0100\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index 8c63cd3..b4a8bcb 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index d54e865..36f4296 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-12-16 00:25+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 ef71c79..84fd155 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 20473ad..935e504 100644
--- a/po/el.po
+++ b/po/el.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2012-05-05 19:13+0100\n"
"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 958f6ed..3937faa 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 0eb330e..9848e95 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.8.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2004-04-26 10:41-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 d3f4b4d..0238ca5 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 83ecc93..7d792a7 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+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 c732a59..da1eb39 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 832463f..11f9186 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2011-10-02 15:46+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 54f5ff7..c1fa10b 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 25dcdca..36b9e59 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base-0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2010-03-25 12:32+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 ba9afd1..323dd7d 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 6e98ff7..ac820dd 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -12,7 +12,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2010-12-31 23:21+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 3efdabf..042a3cb 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 8f858a5..106dc60 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2011-04-28 09:19+0200\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 73ea559..b8538f7 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index c500ff6..f87373a 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2012-12-15 03:40+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gst-plugins-base-1.0.pot b/po/gst-plugins-base-1.0.pot
index e476beb..4cf96cc 100644
--- a/po/gst-plugins-base-1.0.pot
+++ b/po/gst-plugins-base-1.0.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-base 1.2.2\n"
+"Project-Id-Version: gst-plugins-base 1.2.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+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"
@@ -82,7 +82,7 @@
msgid "Could not read CD."
msgstr ""
-#: ext/ogg/gstoggdemux.c:4559
+#: ext/ogg/gstoggdemux.c:4610
msgid "Internal data stream error."
msgstr ""
@@ -208,7 +208,7 @@
msgid "Error while sending data to \"%s:%d\"."
msgstr ""
-#: gst-libs/gst/audio/gstaudiobasesrc.c:854
+#: gst-libs/gst/audio/gstaudiobasesrc.c:860
msgid "Can't record audio fast enough"
msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index c22becd..e2fc854 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 66b579f..a6907e8 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2012-04-16 04:19+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 fda334f..ce2a3c6 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index be282c6..ed7a1f0 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2012-11-29 14:05+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 2747140..054ae04 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index c90754d..5af08d4 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1,21 +1,20 @@
# Indonesian translations for gst-plugins-base package.
# This file is put in the public domain.
-# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010-2012.
# Andika Triwidada <andika@gmail.com>, 2013.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010-2014.
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-base 1.1.4\n"
+"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
-"PO-Revision-Date: 2013-10-15 16:11+0700\n"
-"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
+"PO-Revision-Date: 2014-01-28 18:53+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"
-"X-Generator: Poedit 1.5.7\n"
msgid "Could not open device for playback in mono mode."
msgstr "Tak dapat membuka divais untuk putar kembali dalam mode mono."
@@ -202,7 +201,7 @@
msgstr "Penyandian sepanjang-jalan"
msgid "Timed Text"
-msgstr ""
+msgstr "Teks Waktu"
msgid "Subtitle"
msgstr "Subjudul"
@@ -231,25 +230,25 @@
msgid "Uncompressed gray"
msgstr "Citra abu-abu tak dikompresi"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed packed YUV %s"
-msgstr "YUV %2s tak dikompresi %1s"
+msgstr "YUV terkemas tak dikompresi %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed semi-planar YUV %s"
-msgstr "YUV %2s tak dikompresi %1s"
+msgstr "YUV semi-planar tak dikompresi %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed planar YUV %s"
-msgstr "YUV %2s tak dikompresi %1s"
+msgstr "YUV palanar tak dikompresi %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed palettized %d-bit %s"
-msgstr "Tak dikompresi %s%d-bit %s"
+msgstr "%d-bit terpalet tak dikompresi %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed %d-bit %s"
-msgstr "Tak dikompresi %s%d-bit %s"
+msgstr "%d tak dikompresi %s"
#, c-format
msgid "DivX MPEG-4 Version %d"
@@ -509,23 +508,24 @@
msgstr "Kunci awal dimana suara dimulai"
msgid "Buffering..."
-msgstr ""
+msgstr "Menyangga..."
msgid "Print version information and exit"
-msgstr ""
+msgstr "Cetak informasi versi lalu keluar"
msgid "Video sink to use (default is autovideosink)"
-msgstr ""
+msgstr "Sink video yang digunakan (standar adalah autovideosink)"
msgid "Audio sink to use (default is autoaudiosink)"
-msgstr ""
+msgstr "Sink audio yang digunakan (standar adalah autoaudiosink)"
msgid "Enable gapless playback"
-msgstr ""
+msgstr "Aktifkan putar balik tanpa jeda"
#, c-format
msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "Penggunaan: %s BERKAS1|URI1 [BERKAS2|URI2] [BERKAS3|URI3] ..."
msgid "You must provide at least one filename or URI to play."
msgstr ""
+"Anda harus menyediakan setidaknya satu nama berkas atau URI untuk diputar."
diff --git a/po/it.gmo b/po/it.gmo
index 697dd1b..671468b 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 29c6579..0a1c1e2 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2010-04-28 14:27+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 b9a6815..8181244 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 78bf85a..2a67a51 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.30.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2010-10-25 10:27+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 feae18f..803e713 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index d9aab74..b4301fd 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base-0.10.15.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2008-03-07 23:43+0200\n"
"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/lv.gmo b/po/lv.gmo
index 7f2755b..e0bfa60 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 180640a..666514c 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2011-09-02 12:02-0000\n"
"Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index fc38f43..7cd1003 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 00e939e..11d1240 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,10 +6,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-base 1.0.3\n"
+"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
-"PO-Revision-Date: 2012-12-21 21:43+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
+"PO-Revision-Date: 2014-01-22 17:42+0100\n"
"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
"Language: nb_NO\n"
@@ -40,7 +40,7 @@
msgstr "Kunne ikke åpne lydenheten for avspilling."
msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
+msgstr "Feil ved sending til lydenhet. Enheten er frakoblet."
msgid "Could not open device for recording in mono mode."
msgstr "Kunne ikke åpne enhet for opptak i monomodus."
@@ -62,7 +62,7 @@
msgstr "Kunne ikke åpne lydenheten for opptak."
msgid "Error recording from audio device. The device has been disconnected."
-msgstr ""
+msgstr "Feil ved opptak fra lydenhet. Enheten er frakoblet."
msgid "Could not open CD device for reading."
msgstr "Kunne ikke åpne CD-enheten for lesing."
@@ -92,9 +92,8 @@
msgid "This appears to be a text file"
msgstr "Dette ser ut som en tekstfil"
-#, fuzzy
msgid "Could not create \"uridecodebin\" element."
-msgstr "Kunne ikke opprette elementet «decodebin»"
+msgstr "Kunne ikke opprette elementet «uridecodebin»"
#, c-format
msgid "Both autovideosink and %s elements are missing."
@@ -206,7 +205,7 @@
msgstr "Kjørelengde-koding"
msgid "Timed Text"
-msgstr ""
+msgstr "Tidsbestemt tekst"
msgid "Subtitle"
msgstr "Undertekst"
@@ -235,25 +234,25 @@
msgid "Uncompressed gray"
msgstr "Ukomprimert grå"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed packed YUV %s"
-msgstr "Ukomprimert pakket YUV 4:2:2"
+msgstr "Ukomprimert pakket YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed semi-planar YUV %s"
-msgstr "Ukomprimert pakket YUV 4:2:0"
+msgstr "Ukomprimert semi-planar YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed planar YUV %s"
-msgstr "Ukomprimert pakket YUV 4:2:0"
+msgstr "Ukomprimert planar YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed palettized %d-bit %s"
-msgstr "Ukomprimert %s%d-bit %s"
+msgstr "Ukomprimert palettopmimert %d-bit %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed %d-bit %s"
-msgstr "Ukomprimert %s%d-bit %s"
+msgstr "Ukomprimert %d-bit %s"
#, c-format
msgid "DivX MPEG-4 Version %d"
@@ -506,32 +505,32 @@
msgstr "Utolket id3v2 merkeramme"
msgid "musical-key"
-msgstr ""
+msgstr "musikal-tast"
msgid "Initial key in which the sound starts"
-msgstr ""
+msgstr "Innledende tast der lyden begynner"
msgid "Buffering..."
-msgstr ""
+msgstr "Bufrer ..."
msgid "Print version information and exit"
-msgstr ""
+msgstr "Skriv ut versjonsinformasjon og avslutt"
msgid "Video sink to use (default is autovideosink)"
-msgstr ""
+msgstr "Video-sink som skal brukes (standard er autovideosink)"
msgid "Audio sink to use (default is autoaudiosink)"
-msgstr ""
+msgstr "Lyd-sink som skal brukes (standard er autoaudiosink)"
msgid "Enable gapless playback"
-msgstr ""
+msgstr "Aktiver sømløs avspilling"
#, c-format
msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "Bruk: %s FIL1|URI1 [FILE|URI2] [FILE|URI3] ..."
msgid "You must provide at least one filename or URI to play."
-msgstr ""
+msgstr "Du må ha med minst ett filnavn eller nettadresse å spille."
#~ msgid "Uncompressed %s YUV %s"
#~ msgstr "Ukomprimert %s YUV %s"
diff --git a/po/nl.gmo b/po/nl.gmo
index 15c9e00..3102a57 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 7c6c222..caa576a 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,13 +1,13 @@
-# translation of gst-plugins-base-1.1.4.po to Dutch
+# translation of gst-plugins-base-1.2.1.po to Dutch
# This file is put in the public domain.
#
-# 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: gst-plugins-base 1.1.4\n"
+"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
-"PO-Revision-Date: 2013-09-15 13:29+0200\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
+"PO-Revision-Date: 2014-01-09 13:01+0100\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
@@ -206,7 +206,7 @@
msgstr "Run-length encoding (RLE)"
msgid "Timed Text"
-msgstr ""
+msgstr "Van tijd voorziene tekst"
msgid "Subtitle"
msgstr "Ondertitel"
@@ -235,25 +235,25 @@
msgid "Uncompressed gray"
msgstr "Niet-gecomprimeerd grijs"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed packed YUV %s"
-msgstr "Niet-gecomprimeerde packed YUV 4:2:2"
+msgstr "Niet-gecomprimeerde packed YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed semi-planar YUV %s"
-msgstr "Niet-gecomprimeerde planar YUV 4:2:0"
+msgstr "Niet-gecomprimeerde planar YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed planar YUV %s"
-msgstr "Niet-gecomprimeerde planar YUV 4:2:0"
+msgstr "Niet-gecomprimeerde planar YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed palettized %d-bit %s"
-msgstr "Niet-gecomprimeerd %s%d-bits %s"
+msgstr "Niet-gecomprimeerd gepalletteerd %d-bits %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed %d-bit %s"
-msgstr "Niet-gecomprimeerd %s%d-bits %s"
+msgstr "Niet-gecomprimeerd %d-bits %s"
#, c-format
msgid "DivX MPEG-4 Version %d"
@@ -520,26 +520,26 @@
msgstr "Initiële sleutel waarin het geluid begint"
msgid "Buffering..."
-msgstr ""
+msgstr "In buffer opslaan..."
msgid "Print version information and exit"
-msgstr ""
+msgstr "Versie-informatie afdrukken en sluiten"
msgid "Video sink to use (default is autovideosink)"
-msgstr ""
+msgstr "Te gebruiken video-sink (standaard is autovideosink)"
msgid "Audio sink to use (default is autoaudiosink)"
-msgstr ""
+msgstr "Te gebruiken audio-sink (standaard is autoaudiosink)"
msgid "Enable gapless playback"
-msgstr ""
+msgstr "Afspelen activeren zonder gaten"
#, c-format
msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "Gebruik: %s BESTAND1|URI1 [BESTAND2|URI2] [BESTAND3|URI3] ..."
msgid "You must provide at least one filename or URI to play."
-msgstr ""
+msgstr "U moet minstens één bestandsnaam of URI leveren om af te spelen."
#~ msgid "Uncompressed %s YUV %s"
#~ msgstr "Niet-gecomprimeerd %s YUV %s"
diff --git a/po/or.gmo b/po/or.gmo
index f2df31c..df19d68 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index afdcee5..d199a5a 100644
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2004-09-27 13:32+0530\n"
"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index 98cbed0..2997288 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index c134009..a5e33eb 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-12-08 08:58+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 b9e0612..45d0e00 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 c7f3e50..00f69a7 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -4,13 +4,15 @@
# Fabrício Godoy <skarllot@gmail.com>, 2008-2013.
#
# PCM -> PCM
+# buffering -> preenchendo buffer
+# sink -> consumidor
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-base-1.0.3\n"
+"Project-Id-Version: gst-plugins-base-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
-"PO-Revision-Date: 2013-08-20 00:39-0300\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
+"PO-Revision-Date: 2013-12-29 17:33-0300\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
"net>\n"
@@ -42,6 +44,7 @@
msgid "Error outputting to audio device. The device has been disconnected."
msgstr ""
+"Erro de saída para o dispositivo de áudio. O dispositivo foi desconectado."
msgid "Could not open device for recording in mono mode."
msgstr "Não foi possível abrir o dispositivo para gravação em mono."
@@ -65,6 +68,7 @@
msgid "Error recording from audio device. The device has been disconnected."
msgstr ""
+"Erro de gravação para o dispositivo de áudio. O dispositivo foi desconectado."
msgid "Could not open CD device for reading."
msgstr "Não foi possível abrir o dispositivo de CD para leitura."
@@ -94,9 +98,8 @@
msgid "This appears to be a text file"
msgstr "Este parece ser um arquivo de texto"
-#, fuzzy
msgid "Could not create \"uridecodebin\" element."
-msgstr "Não foi possível criar o elemento \"decodebin\"."
+msgstr "Não foi possível criar o elemento \"uridecodebin\"."
#, c-format
msgid "Both autovideosink and %s elements are missing."
@@ -209,7 +212,7 @@
msgstr "Codificação Run-length"
msgid "Timed Text"
-msgstr ""
+msgstr "Texto Temporizado"
msgid "Subtitle"
msgstr "Legenda"
@@ -238,25 +241,25 @@
msgid "Uncompressed gray"
msgstr "Arquivo monocromático sem compressão"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed packed YUV %s"
-msgstr "YUV 4:2:2 empacotado sem compressão"
+msgstr "YUV %s empacotado sem compressão"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed semi-planar YUV %s"
-msgstr "YUV 4:2:0 plano sem compressão"
+msgstr "YUV %s semi-plano sem compressão"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed planar YUV %s"
-msgstr "YUV 4:2:0 plano sem compressão"
+msgstr "YUV %s plano sem compressão"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed palettized %d-bit %s"
-msgstr "%1$s de %2$d bits %3$s sem compressão"
+msgstr "%2$s de %1$d bits sem compressão com paletas"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed %d-bit %s"
-msgstr "%1$s de %2$d bits %3$s sem compressão"
+msgstr "%2$s de %1$d bits sem compressão"
#, c-format
msgid "DivX MPEG-4 Version %d"
@@ -515,32 +518,34 @@
msgstr "quadro com etiqueta ID3v2 sem análise"
msgid "musical-key"
-msgstr ""
+msgstr "acorde musical"
msgid "Initial key in which the sound starts"
-msgstr ""
+msgstr "Nota ou acorde inicial da música"
msgid "Buffering..."
-msgstr ""
+msgstr "Preenchendo buffer..."
msgid "Print version information and exit"
-msgstr ""
+msgstr "Exibe informações de versão e sai"
msgid "Video sink to use (default is autovideosink)"
msgstr ""
+"Elemento consumidor de vídeo utilizado (predefinido para autovideosink)"
msgid "Audio sink to use (default is autoaudiosink)"
msgstr ""
+"Elemento consumidor de áudio utilizado (predefinido para autoaudiosink)"
msgid "Enable gapless playback"
-msgstr ""
+msgstr "Ativar reprodução sem intervalos"
#, c-format
msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "Uso: %s ARQ1|URI1 [ARQ2|URI2] [ARQ3|URI3] ..."
msgid "You must provide at least one filename or URI to play."
-msgstr ""
+msgstr "Você deve fornecer ao menos um nome de arquivo ou URI para reproduzir."
#~ msgid "Uncompressed %s YUV %s"
#~ msgstr "%2$s YUV %1$s sem compressão"
diff --git a/po/ro.gmo b/po/ro.gmo
index da1f7f3..b9b5adb 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 2f6f4c9..b0f856d 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.29.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2010-08-16 01:21+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 c0d5b41..e6eca62 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index a8c9553..eddcdd5 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-12-08 12:52+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index 6ff5b18..0afcd76 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 796ed81..133dbde 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -1,14 +1,14 @@
# Slovak translations for gst-plugins-base.
# 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: gst-plugins-base 0.10.30.3\n"
+"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
-"PO-Revision-Date: 2010-11-08 15:34+0100\n"
-"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
+"PO-Revision-Date: 2014-01-30 10:57+0100\n"
+"Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
@@ -41,7 +41,7 @@
msgstr "Nepodarilo sa otvoriť zvukové zariadenie pre prehrávanie."
msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
+msgstr "Chýba výstupu na zvukové zariadenie. Toto zariadenie bolo odpojené."
msgid "Could not open device for recording in mono mode."
msgstr "Nepodarilo sa otvoriť zariadenie pre nahrávanie v režime mono."
@@ -64,7 +64,7 @@
msgstr "Nepodarilo sa otvoriť zvukové zariadenie pre nahrávanie."
msgid "Error recording from audio device. The device has been disconnected."
-msgstr ""
+msgstr "Chýba záznamu zo zvukového zariadenia. Toto zariadenie bolo odpojené."
msgid "Could not open CD device for reading."
msgstr "Nepodarilo sa otvoriť zariadenie CD na čítanie."
@@ -89,14 +89,13 @@
"nainštalovaný."
msgid "Could not determine type of stream"
-msgstr "Nepodarilo sa zistiť typ prádu údajov"
+msgstr "Nepodarilo sa zistiť typ prúdu údajov"
msgid "This appears to be a text file"
msgstr "Tento súbor je asi textový"
-#, fuzzy
msgid "Could not create \"uridecodebin\" element."
-msgstr "Nepodarilo sa vytvoriť prvok \"decodebin\""
+msgstr "Nepodarilo sa vytvoriť prvok \"uridecodebin\"."
#, c-format
msgid "Both autovideosink and %s elements are missing."
@@ -120,7 +119,7 @@
msgstr "Používateľský textový prvok sink nie je použiteľný."
msgid "No volume control found"
-msgstr "+Ziadny ovl8da4 hlasitosti sa nena3iel"
+msgstr "Žiadny ovládač hlasitosti sa nenašiel"
#, c-format
msgid "Both autoaudiosink and %s elements are missing."
@@ -208,71 +207,65 @@
msgstr "Kódovanie počas prehrávania"
msgid "Timed Text"
-msgstr ""
+msgstr "Časovaný text"
msgid "Subtitle"
-msgstr ""
+msgstr "Titulky"
-#, fuzzy
msgid "MPL2 subtitle format"
-msgstr "Titulkový formát TMPlayer"
+msgstr "Formát titulkov MPL2"
-#, fuzzy
msgid "DKS subtitle format"
-msgstr "Formát titulkov sami"
+msgstr "Formát titulkov DKS"
-#, fuzzy
msgid "QTtext subtitle format"
-msgstr "Formát titulkov Kate"
+msgstr "Formát titulkov QTtext"
msgid "Sami subtitle format"
msgstr "Formát titulkov sami"
msgid "TMPlayer subtitle format"
-msgstr "Titulkový formát TMPlayer"
+msgstr "Formát titulkov TMPlayer"
msgid "Kate subtitle format"
msgstr "Formát titulkov Kate"
-#, fuzzy
msgid "Uncompressed video"
-msgstr "Nekomprimovaný YUV"
+msgstr "Nekomprimované video"
-#, fuzzy
msgid "Uncompressed gray"
msgstr "Nekomprimovaný šedotónový obrázok"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed packed YUV %s"
-msgstr "Nekomprimovaný pakovaný YUV 4:2:2"
+msgstr "Nekomprimovaný pakovaný YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed semi-planar YUV %s"
-msgstr "Nekomprimovaný planar YUV 4:2:0"
+msgstr "Nekomprimovaný semi-planár YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed planar YUV %s"
-msgstr "Nekomprimovaný planar YUV 4:2:0"
+msgstr "Nekomprimovaný planár YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed palettized %d-bit %s"
msgstr "Nekomprimovaný paletizovaný %d-bit %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed %d-bit %s"
-msgstr "Nekomprimovaný paletizovaný %d-bit %s"
+msgstr "Nekomprimovaný %d-bit %s"
#, c-format
msgid "DivX MPEG-4 Version %d"
msgstr "DivX MPEG-4 Verzie %d"
-#, fuzzy
msgid "Uncompressed audio"
-msgstr "Nekomprimovaný YUV"
+msgstr "Nekomprimovaný zvuk"
-#, fuzzy, c-format
+#, c-format
msgid "Raw %d-bit %s audio"
-msgstr "Surový %d-bit PCM zvuk"
+msgstr "Surový %d-bit %s zvuk"
msgid "Audio CD source"
msgstr "Zdroj zvukové CD"
@@ -386,112 +379,110 @@
msgstr "ID TRM MusicBrainz"
msgid "capturing shutter speed"
-msgstr "zachytávacia rýchlosť uzávierky"
+msgstr "rýchlosť uzávierky"
msgid "Shutter speed used when capturing an image, in seconds"
msgstr "Rýchlosť uzávierky použitá pri zachytávaní obrázku, v sekundách"
msgid "capturing focal ratio"
-msgstr "zachytávacií pomer F"
+msgstr "pomer F"
msgid "Focal ratio (f-number) used when capturing the image"
msgstr "Pomer (číslo F) použitý pri zachytávaní obrázku"
msgid "capturing focal length"
-msgstr "zachytávacia ohnisková vzdialenosť"
+msgstr "ohnisková vzdialenosť"
msgid "Focal length of the lens used capturing the image, in mm"
msgstr "Ohnisková vzdialenosť objektívu pri zachytávaní obrázku, v mm"
msgid "capturing digital zoom ratio"
-msgstr "zachytávací pomer digitálneho priblíženia"
+msgstr "pomer digitálneho priblíženia"
msgid "Digital zoom ratio used when capturing an image"
msgstr "Pomer digitálneho priblíženia použitý pri zachytávaní obrázku"
msgid "capturing iso speed"
-msgstr "zachytávacia rýchlosť ISO"
+msgstr "rýchlosť ISO"
msgid "The ISO speed used when capturing an image"
-msgstr "Rýchlosť ISO použítá pri zachytávaní obrázku"
+msgstr "Rýchlosť ISO použitá pri zachytávaní obrázku"
msgid "capturing exposure program"
-msgstr "zachytávací program expozície"
+msgstr "program expozície"
msgid "The exposure program used when capturing an image"
-msgstr "Program expozície použitý pri zachytávaní obrázko"
+msgstr "Program expozície použitý pri zachytávaní obrázku"
msgid "capturing exposure mode"
-msgstr "zachytávací režim expozície"
+msgstr "režim expozície"
msgid "The exposure mode used when capturing an image"
msgstr "Režim expozície použitý pri zachytávaní obrázku"
-#, fuzzy
msgid "capturing exposure compensation"
-msgstr "zachytávací režim expozície"
+msgstr "kompenzácia expozície"
-#, fuzzy
msgid "The exposure compensation used when capturing an image"
-msgstr "Režim expozície použitý pri zachytávaní obrázku"
+msgstr "Režim kompenzácie expozície použitý pri zachytávaní obrázku"
msgid "capturing scene capture type"
-msgstr "zachytávací typ zachytenia scény"
+msgstr "scénický režim"
msgid "The scene capture mode used when capturing an image"
-msgstr "Režim zachytenia scény použitý pri zachytávaní obrázku"
+msgstr "Scénický režim použitý pri zachytávaní obrázku"
msgid "capturing gain adjustment"
-msgstr "zachytávacie nastavenie zisku"
+msgstr "nastavenie zisku"
msgid "The overall gain adjustment applied on an image"
msgstr "Celkové nastavenie zisku aplikovaného na obrázok"
msgid "capturing white balance"
-msgstr "zachytávacie vyváženie bielej"
+msgstr "vyváženie bielej"
msgid "The white balance mode set when capturing an image"
msgstr "Režim vyváženia bielej nastavený pri zachytávaní obrázku"
msgid "capturing contrast"
-msgstr "zachytávací kontrast"
+msgstr "kontrast"
msgid "The direction of contrast processing applied when capturing an image"
msgstr "Smerovanie spracovania kontrastu použitého pri zachytávaní obrázku"
msgid "capturing saturation"
-msgstr "zachytávacia sýtosť"
+msgstr "sýtosť"
msgid "The direction of saturation processing applied when capturing an image"
msgstr "Smerovanie spracovania sýtosti použitého pri zachytávaní obrázku"
msgid "capturing sharpness"
-msgstr "zachytávacia ostrosť"
+msgstr "ostrosť"
msgid "The direction of sharpness processing applied when capturing an image"
msgstr "Smerovanie spracovania ostrosti použitého pri zachytávaní obrázku"
msgid "capturing flash fired"
-msgstr "zachytávací blesk"
+msgstr "blesk"
msgid "If the flash fired while capturing an image"
msgstr "Bol alebo nebol použitý blesk pri zachytávaní obrázku"
msgid "capturing flash mode"
-msgstr "zachytávací režim blesku"
+msgstr "režim blesku"
msgid "The selected flash mode while capturing an image"
msgstr "Vybraný režim blesku pri zachytávaní obrázku"
msgid "capturing metering mode"
-msgstr "zachytávacie meranie blesku"
+msgstr "meranie blesku"
msgid ""
"The metering mode used while determining exposure for capturing an image"
msgstr "Režim merania blesku pri zisťovaní expozície pre zachytenie obrázku"
msgid "capturing source"
-msgstr "zachytávací zdroj"
+msgstr "zdroj"
msgid "The source or type of device used for the capture"
msgstr "Zdroj alebo typ zariadenia použitý na zachytenie"
@@ -509,22 +500,22 @@
msgstr "Cieľová zvislá hustota pixlov média (obrázku/videa) v ppi"
msgid "ID3v2 frame"
-msgstr ""
+msgstr "ID3v2 rámec"
msgid "unparsed id3v2 tag frame"
-msgstr ""
+msgstr "nespracovaný id3v2 značkovací rámec"
msgid "musical-key"
-msgstr ""
+msgstr "hudobný-kľúč"
msgid "Initial key in which the sound starts"
-msgstr ""
+msgstr "Úvodný kľúč v ktorom zvuk začína"
msgid "Buffering..."
-msgstr ""
+msgstr "Napĺňam vyrovnávaciu pamäť..."
msgid "Print version information and exit"
-msgstr ""
+msgstr "Zobraziť informáciu o verzii a skončiť"
msgid "Video sink to use (default is autovideosink)"
msgstr ""
@@ -533,18 +524,14 @@
msgstr ""
msgid "Enable gapless playback"
-msgstr ""
+msgstr "Povoliť plynulé prehrávanie"
#, c-format
msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "Použitie: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
msgid "You must provide at least one filename or URI to play."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Uncompressed %s YUV %s"
-#~ msgstr "Nekomprimovaný YUV"
+msgstr "Ak chcete prehrávať, musíte zadať aspoň jeden názov súboru alebo URI."
#~ msgid "Master"
#~ msgstr "Hlavný"
@@ -579,42 +566,6 @@
#~ msgid "Capture"
#~ msgstr "Zachytávanie"
-#~ msgid "Connection to %s:%d refused."
-#~ msgstr "Spojenie s %s:%d bolo odmietnuté."
-
-#~ msgid "Uncompressed planar YVU 4:2:0"
-#~ msgstr "Nekomprimovaný planar YVU 4:2:0"
-
-#~ msgid "Uncompressed packed YUV 4:1:0"
-#~ msgstr "Nekomprimovaný pakovaný YUV 4:1:0"
-
-#~ msgid "Uncompressed packed YVU 4:1:0"
-#~ msgstr "Nekomprimovaný pakovaný YVU 4:1:0"
-
-#~ msgid "Uncompressed packed YUV 4:1:1"
-#~ msgstr "Nekomprimovaný pakovaný YUV 4:1:1"
-
-#~ msgid "Uncompressed packed YUV 4:4:4"
-#~ msgstr "Nekomprimovaný pakovaný YUV 4:4:4"
-
-#~ msgid "Uncompressed planar YUV 4:2:2"
-#~ msgstr "Nekomprimovaný planar YUV 4:2:2"
-
-#~ msgid "Uncompressed planar YUV 4:1:1"
-#~ msgstr "Nekomprimovaný planar YUV 4:1:1"
-
-#~ msgid "Uncompressed black and white Y-plane"
-#~ msgstr "Nekomprimovaný čierno-biely Y-plane"
-
-#~ msgid "Raw PCM audio"
-#~ msgstr "Surový PCM zvuk"
-
-#~ msgid "Raw %d-bit floating-point audio"
-#~ msgstr "Surový %d-bit zvuk s pohyblivou desatinnou čiarkou"
-
-#~ msgid "Raw floating-point audio"
-#~ msgstr "Surový zvuk s pohyblivou desatinnou čiarkou"
-
#~ msgid "Could not open vfs file \"%s\" for writing: %s."
#~ msgstr "Nepodarilo sa otvoriť vfs súbor \"%s\" pre zápis: %s."
@@ -661,6 +612,48 @@
#~ msgid "Both autoaudiosink and alsasink elements are missing."
#~ msgstr "Chýbajú prvky autoaudiosink aj alsasink."
+#~ msgid "Error while sending gdp header data to \"%s:%d\"."
+#~ msgstr "Chyba pri posielaní hlavičky gdp údajov do \"%s:%d\"."
+
+#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
+#~ msgstr "Chyba pri posielaní gdp záťažových údajov do \"%s:%d\"."
+
+#~ msgid "Connection to %s:%d refused."
+#~ msgstr "Spojenie s %s:%d bolo odmietnuté."
+
+#~ msgid "Uncompressed planar YVU 4:2:0"
+#~ msgstr "Nekomprimovaný planar YVU 4:2:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:0"
+#~ msgstr "Nekomprimovaný pakovaný YUV 4:1:0"
+
+#~ msgid "Uncompressed packed YVU 4:1:0"
+#~ msgstr "Nekomprimovaný pakovaný YVU 4:1:0"
+
+#~ msgid "Uncompressed packed YUV 4:1:1"
+#~ msgstr "Nekomprimovaný pakovaný YUV 4:1:1"
+
+#~ msgid "Uncompressed packed YUV 4:4:4"
+#~ msgstr "Nekomprimovaný pakovaný YUV 4:4:4"
+
+#~ msgid "Uncompressed planar YUV 4:2:2"
+#~ msgstr "Nekomprimovaný planar YUV 4:2:2"
+
+#~ msgid "Uncompressed planar YUV 4:1:1"
+#~ msgstr "Nekomprimovaný planar YUV 4:1:1"
+
+#~ msgid "Uncompressed black and white Y-plane"
+#~ msgstr "Nekomprimovaný čierno-biely Y-plane"
+
+#~ msgid "Raw PCM audio"
+#~ msgstr "Surový PCM zvuk"
+
+#~ msgid "Raw %d-bit floating-point audio"
+#~ msgstr "Surový %d-bit zvuk s pohyblivou desatinnou čiarkou"
+
+#~ msgid "Raw floating-point audio"
+#~ msgstr "Surový zvuk s pohyblivou desatinnou čiarkou"
+
#~ msgid "No device specified."
#~ msgstr "Nebolo zadané zariadenie."
@@ -673,12 +666,6 @@
#~ msgid "Could not open device \"%s\" for reading and writing."
#~ msgstr "Nepodarilo sa otvoriť zariadenie \"%s\" pre čítanie a zápis."
-#~ msgid "Error while sending gdp header data to \"%s:%d\"."
-#~ msgstr "Chyba pri posielaní hlavičky gdp údajov do \"%s:%d\"."
-
-#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
-#~ msgstr "Chyba pri posielaní gdp záťažových údajov do \"%s:%d\"."
-
#~ msgid "Can't display both text subtitles and subpictures."
#~ msgstr "Nemôžem zobrazovať naraz textové titulky aj podobrázky."
diff --git a/po/sl.gmo b/po/sl.gmo
index 38b21ba..11095b5 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 1e057be..666b7cd 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base-1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-01-05 10:10+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 7ea6b69..b72df98 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 4e67b23..181f9ae 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2004-08-07 20:29+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 fa33169..6ce92d6 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 9085673..dec83f8 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -2,13 +2,13 @@
# Copyright (C) 2004 Free Software Foundation, Inc.
# This file is distributed under the same license as the gst-plugins-base package.
# Danilo Segan <dsegan@gmx.net>, 2004.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-base-1.1.4\n"
+"Project-Id-Version: gst-plugins-base-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
-"PO-Revision-Date: 2013-10-04 12:00+0200\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
+"PO-Revision-Date: 2014-01-13 20:16+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -204,7 +204,7 @@
msgstr "Кодирање покретања дужине"
msgid "Timed Text"
-msgstr ""
+msgstr "Временски текст"
msgid "Subtitle"
msgstr "Превод"
@@ -228,30 +228,30 @@
msgstr "Кејт запис превода"
msgid "Uncompressed video"
-msgstr "Незапаковани снимак"
+msgstr "Несажети снимак"
msgid "Uncompressed gray"
-msgstr "Незапакована сива слика"
+msgstr "Несажета сива слика"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed packed YUV %s"
-msgstr "Незапакован %s YUV %s"
+msgstr "Несажета упакована YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed semi-planar YUV %s"
-msgstr "Незапакован %s YUV %s"
+msgstr "Несажета полу-равна YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed planar YUV %s"
-msgstr "Незапакован %s YUV %s"
+msgstr "Несажета равна YUV %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed palettized %d-bit %s"
-msgstr "Незапакован %s%d-битни %s"
+msgstr "Несажета палетизована %d-битна %s"
-#, fuzzy, c-format
+#, c-format
msgid "Uncompressed %d-bit %s"
-msgstr "Незапакован %s%d-битни %s"
+msgstr "Несажета %d-битна %s"
#, c-format
msgid "DivX MPEG-4 Version %d"
@@ -509,23 +509,25 @@
msgstr "Почетни кључ у коме почиње звук"
msgid "Buffering..."
-msgstr ""
+msgstr "Смештам у међумеморију..."
msgid "Print version information and exit"
-msgstr ""
+msgstr "Исписује податке о издању и излази"
msgid "Video sink to use (default is autovideosink)"
-msgstr ""
+msgstr "Усаглашавање снимка за коришћење (основно је „autovideosink“)"
msgid "Audio sink to use (default is autoaudiosink)"
-msgstr ""
+msgstr "Усаглашавање звука за коришћење (основно је „autoaudiosink“)"
msgid "Enable gapless playback"
-msgstr ""
+msgstr "Укључује пуштање без застоја"
#, c-format
msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
msgstr ""
+"Употреба: %s ДАТОТЕКА1|ПУТАЊА1 [ДАТОТЕКА2|ПУТАЊА2] [ДАТОТЕКА3|ПУТАЊА3] ..."
msgid "You must provide at least one filename or URI to play."
msgstr ""
+"Морате да доставите барем један назив датотеке или путању да бисте пустили."
diff --git a/po/sv.gmo b/po/sv.gmo
index 7836328..d1cba60 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index a84244c..69f13b4 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2010-06-07 18:17+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 517671a..98f1873 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 9de2083..a5ddc14 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-03-10 12:46+0200\n"
"Last-Translator: Server Acim <serveracim@gmail.com>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index ab99a28..07d6425 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 6e70431..6ce4284 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-12-07 22:59+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 0d89dfd..90b26cd 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index fea28cb..460353d 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2013-12-11 07:50+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 16811c8..00f8c64 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 7995bf9..e3d8fea 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-base 0.10.21.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-12-26 17:36+0100\n"
+"POT-Creation-Date: 2014-02-08 11:40+0100\n"
"PO-Revision-Date: 2009-01-14 12:41+0800\n"
"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/sys/Makefile.in b/sys/Makefile.in
index e13cb0c..4825f2c 100644
--- a/sys/Makefile.in
+++ b/sys/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/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
index 840f252..5f7b837 100644
--- a/sys/ximage/Makefile.in
+++ b/sys/ximage/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/sys/xvimage/Makefile.in b/sys/xvimage/Makefile.in
index 611c6fa..39f0267 100644
--- a/sys/xvimage/Makefile.in
+++ b/sys/xvimage/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/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c
index de1c1f9..11fd6ce 100644
--- a/sys/xvimage/xvimagesink.c
+++ b/sys/xvimage/xvimagesink.c
@@ -1728,17 +1728,20 @@
static gboolean
gst_xvimagesink_open (GstXvImageSink * xvimagesink)
{
- GstXvContext *context;
GError *error = NULL;
- /* Initializing the XvContext */
- if (!(context = gst_xvcontext_new (&xvimagesink->config, &error)))
- goto no_context;
+ /* Initializing the XvContext unless already done through GstVideoOverlay */
+ if (!xvimagesink->context) {
+ GstXvContext *context;
+ if (!(context = gst_xvcontext_new (&xvimagesink->config, &error)))
+ goto no_context;
- GST_OBJECT_LOCK (xvimagesink);
- xvimagesink->context = context;
+ GST_OBJECT_LOCK (xvimagesink);
+ xvimagesink->context = context;
+ } else
+ GST_OBJECT_LOCK (xvimagesink);
/* make an allocator for this context */
- xvimagesink->allocator = gst_xvimage_allocator_new (context);
+ xvimagesink->allocator = gst_xvimage_allocator_new (xvimagesink->context);
GST_OBJECT_UNLOCK (xvimagesink);
/* update object's par with calculated one if not set yet */
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 737f95c..4c96b47 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/check/Makefile.am b/tests/check/Makefile.am
index 3c412c5..815fc08 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -104,6 +104,7 @@
libs/libsabi \
libs/audio \
libs/audiocdsrc \
+ libs/audiodecoder \
libs/discoverer \
libs/fft \
libs/navigation \
@@ -114,6 +115,7 @@
libs/sdp \
libs/tag \
libs/video \
+ libs/videodecoder \
libs/xmpwriter \
$(cxx_checks) \
$(check_orc) \
@@ -198,6 +200,16 @@
$(GST_BASE_LIBS) \
$(LDADD)
+libs_audiodecoder_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(AM_CFLAGS)
+
+libs_audiodecoder_LDADD = \
+ $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+ $(GST_BASE_LIBS) \
+ $(LDADD)
+
libs_audiocdsrc_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
@@ -423,6 +435,16 @@
$(GST_BASE_LIBS) \
$(LDADD)
+libs_videodecoder_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(AM_CFLAGS)
+
+libs_videodecoder_LDADD = \
+ $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+ $(GST_BASE_LIBS) \
+ $(LDADD)
+
elements_multisocketsink_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
elements_multisocketsink_LDADD = $(GIO_LIBS) $(LDADD)
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index 750aa2a..091e19b 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.
@@ -90,10 +90,11 @@
generic/clock-selection$(EXEEXT) generic/states$(EXEEXT) \
gst/typefindfunctions$(EXEEXT) libs/libsabi$(EXEEXT) \
libs/audio$(EXEEXT) libs/audiocdsrc$(EXEEXT) \
- libs/discoverer$(EXEEXT) libs/fft$(EXEEXT) \
- libs/navigation$(EXEEXT) libs/pbutils$(EXEEXT) \
- libs/profile$(EXEEXT) libs/rtp$(EXEEXT) libs/rtsp$(EXEEXT) \
- libs/sdp$(EXEEXT) libs/tag$(EXEEXT) libs/video$(EXEEXT) \
+ libs/audiodecoder$(EXEEXT) libs/discoverer$(EXEEXT) \
+ libs/fft$(EXEEXT) libs/navigation$(EXEEXT) \
+ libs/pbutils$(EXEEXT) libs/profile$(EXEEXT) libs/rtp$(EXEEXT) \
+ libs/rtsp$(EXEEXT) libs/sdp$(EXEEXT) libs/tag$(EXEEXT) \
+ libs/video$(EXEEXT) libs/videodecoder$(EXEEXT) \
libs/xmpwriter$(EXEEXT) $(am__EXEEXT_4) $(am__EXEEXT_5) \
pipelines/simple-launch-lines$(EXEEXT) \
pipelines/basetime$(EXEEXT) \
@@ -405,6 +406,15 @@
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libs_audiocdsrc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
+libs_audiodecoder_SOURCES = libs/audiodecoder.c
+libs_audiodecoder_OBJECTS = \
+ libs/libs_audiodecoder-audiodecoder.$(OBJEXT)
+libs_audiodecoder_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_audiodecoder_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libs_audiodecoder_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
libs_discoverer_SOURCES = libs/discoverer.c
libs_discoverer_OBJECTS = libs/libs_discoverer-discoverer.$(OBJEXT)
libs_discoverer_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_API_VERSION@.la \
@@ -497,6 +507,15 @@
libs_video_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libs_video_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+libs_videodecoder_SOURCES = libs/videodecoder.c
+libs_videodecoder_OBJECTS = \
+ libs/libs_videodecoder-videodecoder.$(OBJEXT)
+libs_videodecoder_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_videodecoder_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libs_videodecoder_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
libs_xmpwriter_SOURCES = libs/xmpwriter.c
libs_xmpwriter_OBJECTS = libs/libs_xmpwriter-xmpwriter.$(OBJEXT)
libs_xmpwriter_DEPENDENCIES = $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_API_VERSION@.la \
@@ -683,10 +702,11 @@
elements/videotestsrc.c elements/volume.c elements/vorbisdec.c \
elements/vorbistag.c generic/clock-selection.c \
generic/states.c gst/typefindfunctions.c libs/audio.c \
- libs/audiocdsrc.c libs/discoverer.c libs/fft.c \
- $(libs_gstlibscpp_SOURCES) libs/libsabi.c libs/navigation.c \
- libs/pbutils.c libs/profile.c libs/rtp.c libs/rtsp.c \
- libs/sdp.c libs/tag.c libs/video.c libs/xmpwriter.c \
+ libs/audiocdsrc.c libs/audiodecoder.c libs/discoverer.c \
+ libs/fft.c $(libs_gstlibscpp_SOURCES) libs/libsabi.c \
+ libs/navigation.c libs/pbutils.c libs/profile.c libs/rtp.c \
+ libs/rtsp.c libs/sdp.c libs/tag.c libs/video.c \
+ libs/videodecoder.c libs/xmpwriter.c \
$(nodist_orc_adder_SOURCES) $(nodist_orc_audio_SOURCES) \
$(nodist_orc_audioconvert_SOURCES) $(nodist_orc_video_SOURCES) \
$(nodist_orc_videoscale_SOURCES) \
@@ -708,14 +728,15 @@
elements/videotestsrc.c elements/volume.c elements/vorbisdec.c \
elements/vorbistag.c generic/clock-selection.c \
generic/states.c gst/typefindfunctions.c libs/audio.c \
- libs/audiocdsrc.c libs/discoverer.c libs/fft.c \
- $(libs_gstlibscpp_SOURCES) libs/libsabi.c libs/navigation.c \
- libs/pbutils.c libs/profile.c libs/rtp.c libs/rtsp.c \
- libs/sdp.c libs/tag.c libs/video.c libs/xmpwriter.c \
- pipelines/basetime.c pipelines/capsfilter-renegotiation.c \
- pipelines/gio.c pipelines/oggmux.c \
- pipelines/simple-launch-lines.c pipelines/theoraenc.c \
- pipelines/vorbisdec.c pipelines/vorbisenc.c
+ libs/audiocdsrc.c libs/audiodecoder.c libs/discoverer.c \
+ libs/fft.c $(libs_gstlibscpp_SOURCES) libs/libsabi.c \
+ libs/navigation.c libs/pbutils.c libs/profile.c libs/rtp.c \
+ libs/rtsp.c libs/sdp.c libs/tag.c libs/video.c \
+ libs/videodecoder.c libs/xmpwriter.c pipelines/basetime.c \
+ pipelines/capsfilter-renegotiation.c pipelines/gio.c \
+ pipelines/oggmux.c pipelines/simple-launch-lines.c \
+ pipelines/theoraenc.c pipelines/vorbisdec.c \
+ pipelines/vorbisenc.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -1336,6 +1357,16 @@
$(GST_BASE_LIBS) \
$(LDADD)
+libs_audiodecoder_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(AM_CFLAGS)
+
+libs_audiodecoder_LDADD = \
+ $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+ $(GST_BASE_LIBS) \
+ $(LDADD)
+
libs_audiocdsrc_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
@@ -1559,6 +1590,16 @@
$(GST_BASE_LIBS) \
$(LDADD)
+libs_videodecoder_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(AM_CFLAGS)
+
+libs_videodecoder_LDADD = \
+ $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+ $(GST_BASE_LIBS) \
+ $(LDADD)
+
elements_multisocketsink_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
elements_multisocketsink_LDADD = $(GIO_LIBS) $(LDADD)
pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
@@ -1858,6 +1899,12 @@
libs/audiocdsrc$(EXEEXT): $(libs_audiocdsrc_OBJECTS) $(libs_audiocdsrc_DEPENDENCIES) $(EXTRA_libs_audiocdsrc_DEPENDENCIES) libs/$(am__dirstamp)
@rm -f libs/audiocdsrc$(EXEEXT)
$(AM_V_CCLD)$(libs_audiocdsrc_LINK) $(libs_audiocdsrc_OBJECTS) $(libs_audiocdsrc_LDADD) $(LIBS)
+libs/libs_audiodecoder-audiodecoder.$(OBJEXT): libs/$(am__dirstamp) \
+ libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/audiodecoder$(EXEEXT): $(libs_audiodecoder_OBJECTS) $(libs_audiodecoder_DEPENDENCIES) $(EXTRA_libs_audiodecoder_DEPENDENCIES) libs/$(am__dirstamp)
+ @rm -f libs/audiodecoder$(EXEEXT)
+ $(AM_V_CCLD)$(libs_audiodecoder_LINK) $(libs_audiodecoder_OBJECTS) $(libs_audiodecoder_LDADD) $(LIBS)
libs/libs_discoverer-discoverer.$(OBJEXT): libs/$(am__dirstamp) \
libs/$(DEPDIR)/$(am__dirstamp)
@@ -1930,6 +1977,12 @@
libs/video$(EXEEXT): $(libs_video_OBJECTS) $(libs_video_DEPENDENCIES) $(EXTRA_libs_video_DEPENDENCIES) libs/$(am__dirstamp)
@rm -f libs/video$(EXEEXT)
$(AM_V_CCLD)$(libs_video_LINK) $(libs_video_OBJECTS) $(libs_video_LDADD) $(LIBS)
+libs/libs_videodecoder-videodecoder.$(OBJEXT): libs/$(am__dirstamp) \
+ libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/videodecoder$(EXEEXT): $(libs_videodecoder_OBJECTS) $(libs_videodecoder_DEPENDENCIES) $(EXTRA_libs_videodecoder_DEPENDENCIES) libs/$(am__dirstamp)
+ @rm -f libs/videodecoder$(EXEEXT)
+ $(AM_V_CCLD)$(libs_videodecoder_LINK) $(libs_videodecoder_OBJECTS) $(libs_videodecoder_LDADD) $(LIBS)
libs/libs_xmpwriter-xmpwriter.$(OBJEXT): libs/$(am__dirstamp) \
libs/$(DEPDIR)/$(am__dirstamp)
@@ -2081,6 +2134,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/gstlibscpp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audio-audio.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audiocdsrc-audiocdsrc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_discoverer-discoverer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_fft-fft.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_libsabi-libsabi.Po@am__quote@
@@ -2092,6 +2146,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_sdp-sdp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_tag-tag.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_video-video.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_videodecoder-videodecoder.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_xmpwriter-xmpwriter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_adder-adder.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_audio-audio.Po@am__quote@
@@ -2441,6 +2496,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audiocdsrc_CFLAGS) $(CFLAGS) -c -o libs/libs_audiocdsrc-audiocdsrc.obj `if test -f 'libs/audiocdsrc.c'; then $(CYGPATH_W) 'libs/audiocdsrc.c'; else $(CYGPATH_W) '$(srcdir)/libs/audiocdsrc.c'; fi`
+libs/libs_audiodecoder-audiodecoder.o: libs/audiodecoder.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audiodecoder_CFLAGS) $(CFLAGS) -MT libs/libs_audiodecoder-audiodecoder.o -MD -MP -MF libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Tpo -c -o libs/libs_audiodecoder-audiodecoder.o `test -f 'libs/audiodecoder.c' || echo '$(srcdir)/'`libs/audiodecoder.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Tpo libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/audiodecoder.c' object='libs/libs_audiodecoder-audiodecoder.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audiodecoder_CFLAGS) $(CFLAGS) -c -o libs/libs_audiodecoder-audiodecoder.o `test -f 'libs/audiodecoder.c' || echo '$(srcdir)/'`libs/audiodecoder.c
+
+libs/libs_audiodecoder-audiodecoder.obj: libs/audiodecoder.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audiodecoder_CFLAGS) $(CFLAGS) -MT libs/libs_audiodecoder-audiodecoder.obj -MD -MP -MF libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Tpo -c -o libs/libs_audiodecoder-audiodecoder.obj `if test -f 'libs/audiodecoder.c'; then $(CYGPATH_W) 'libs/audiodecoder.c'; else $(CYGPATH_W) '$(srcdir)/libs/audiodecoder.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Tpo libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/audiodecoder.c' object='libs/libs_audiodecoder-audiodecoder.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audiodecoder_CFLAGS) $(CFLAGS) -c -o libs/libs_audiodecoder-audiodecoder.obj `if test -f 'libs/audiodecoder.c'; then $(CYGPATH_W) 'libs/audiodecoder.c'; else $(CYGPATH_W) '$(srcdir)/libs/audiodecoder.c'; fi`
+
libs/libs_discoverer-discoverer.o: libs/discoverer.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_discoverer_CFLAGS) $(CFLAGS) -MT libs/libs_discoverer-discoverer.o -MD -MP -MF libs/$(DEPDIR)/libs_discoverer-discoverer.Tpo -c -o libs/libs_discoverer-discoverer.o `test -f 'libs/discoverer.c' || echo '$(srcdir)/'`libs/discoverer.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_discoverer-discoverer.Tpo libs/$(DEPDIR)/libs_discoverer-discoverer.Po
@@ -2595,6 +2664,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_video_CFLAGS) $(CFLAGS) -c -o libs/libs_video-video.obj `if test -f 'libs/video.c'; then $(CYGPATH_W) 'libs/video.c'; else $(CYGPATH_W) '$(srcdir)/libs/video.c'; fi`
+libs/libs_videodecoder-videodecoder.o: libs/videodecoder.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_videodecoder_CFLAGS) $(CFLAGS) -MT libs/libs_videodecoder-videodecoder.o -MD -MP -MF libs/$(DEPDIR)/libs_videodecoder-videodecoder.Tpo -c -o libs/libs_videodecoder-videodecoder.o `test -f 'libs/videodecoder.c' || echo '$(srcdir)/'`libs/videodecoder.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_videodecoder-videodecoder.Tpo libs/$(DEPDIR)/libs_videodecoder-videodecoder.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/videodecoder.c' object='libs/libs_videodecoder-videodecoder.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_videodecoder_CFLAGS) $(CFLAGS) -c -o libs/libs_videodecoder-videodecoder.o `test -f 'libs/videodecoder.c' || echo '$(srcdir)/'`libs/videodecoder.c
+
+libs/libs_videodecoder-videodecoder.obj: libs/videodecoder.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_videodecoder_CFLAGS) $(CFLAGS) -MT libs/libs_videodecoder-videodecoder.obj -MD -MP -MF libs/$(DEPDIR)/libs_videodecoder-videodecoder.Tpo -c -o libs/libs_videodecoder-videodecoder.obj `if test -f 'libs/videodecoder.c'; then $(CYGPATH_W) 'libs/videodecoder.c'; else $(CYGPATH_W) '$(srcdir)/libs/videodecoder.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_videodecoder-videodecoder.Tpo libs/$(DEPDIR)/libs_videodecoder-videodecoder.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libs/videodecoder.c' object='libs/libs_videodecoder-videodecoder.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_videodecoder_CFLAGS) $(CFLAGS) -c -o libs/libs_videodecoder-videodecoder.obj `if test -f 'libs/videodecoder.c'; then $(CYGPATH_W) 'libs/videodecoder.c'; else $(CYGPATH_W) '$(srcdir)/libs/videodecoder.c'; fi`
+
libs/libs_xmpwriter-xmpwriter.o: libs/xmpwriter.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_xmpwriter_CFLAGS) $(CFLAGS) -MT libs/libs_xmpwriter-xmpwriter.o -MD -MP -MF libs/$(DEPDIR)/libs_xmpwriter-xmpwriter.Tpo -c -o libs/libs_xmpwriter-xmpwriter.o `test -f 'libs/xmpwriter.c' || echo '$(srcdir)/'`libs/xmpwriter.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_xmpwriter-xmpwriter.Tpo libs/$(DEPDIR)/libs_xmpwriter-xmpwriter.Po
@@ -3132,6 +3215,13 @@
--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/audiodecoder.log: libs/audiodecoder$(EXEEXT)
+ @p='libs/audiodecoder$(EXEEXT)'; \
+ b='libs/audiodecoder'; \
+ $(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/discoverer.log: libs/discoverer$(EXEEXT)
@p='libs/discoverer$(EXEEXT)'; \
b='libs/discoverer'; \
@@ -3202,6 +3292,13 @@
--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/videodecoder.log: libs/videodecoder$(EXEEXT)
+ @p='libs/videodecoder$(EXEEXT)'; \
+ b='libs/videodecoder'; \
+ $(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/xmpwriter.log: libs/xmpwriter$(EXEEXT)
@p='libs/xmpwriter$(EXEEXT)'; \
b='libs/xmpwriter'; \
diff --git a/tests/check/libs/audiodecoder.c b/tests/check/libs/audiodecoder.c
new file mode 100644
index 0000000..8317346
--- /dev/null
+++ b/tests/check/libs/audiodecoder.c
@@ -0,0 +1,437 @@
+/* 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/audio/audio.h>
+#include <gst/app/app.h>
+
+static GstPad *mysrcpad, *mysinkpad;
+static GstElement *dec;
+static GList *events = NULL;
+
+#define TEST_MSECS_PER_SAMPLE 44100
+
+#define GST_AUDIO_DECODER_TESTER_TYPE gst_audio_decoder_tester_get_type()
+static GType gst_audio_decoder_tester_get_type (void);
+
+typedef struct _GstAudioDecoderTester GstAudioDecoderTester;
+typedef struct _GstAudioDecoderTesterClass GstAudioDecoderTesterClass;
+
+struct _GstAudioDecoderTester
+{
+ GstAudioDecoder parent;
+
+ gboolean setoutputformat_on_decoding;
+};
+
+struct _GstAudioDecoderTesterClass
+{
+ GstAudioDecoderClass parent_class;
+};
+
+G_DEFINE_TYPE (GstAudioDecoderTester, gst_audio_decoder_tester,
+ GST_TYPE_AUDIO_DECODER);
+
+static gboolean
+gst_audio_decoder_tester_start (GstAudioDecoder * dec)
+{
+ return TRUE;
+}
+
+static gboolean
+gst_audio_decoder_tester_stop (GstAudioDecoder * dec)
+{
+ return TRUE;
+}
+
+static void
+gst_audio_decoder_tester_flush (GstAudioDecoder * dec, gboolean hard)
+{
+}
+
+static gboolean
+gst_audio_decoder_tester_set_format (GstAudioDecoder * dec, GstCaps * caps)
+{
+ GstAudioDecoderTester *tester = (GstAudioDecoderTester *) dec;
+ GstAudioInfo info;
+ gst_caps_unref (caps);
+
+ if (!tester->setoutputformat_on_decoding) {
+ caps = gst_caps_new_simple ("audio/x-raw", "format", G_TYPE_STRING, "S16LE",
+ "channels", G_TYPE_INT, 2, "rate", G_TYPE_INT, 44100,
+ "layout", G_TYPE_STRING, "interleaved", NULL);
+ gst_audio_info_from_caps (&info, caps);
+ gst_caps_unref (caps);
+
+ gst_audio_decoder_set_output_format (dec, &info);
+ }
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_audio_decoder_tester_handle_frame (GstAudioDecoder * dec,
+ GstBuffer * buffer)
+{
+ GstAudioDecoderTester *tester = (GstAudioDecoderTester *) dec;
+ guint8 *data;
+ gint size;
+ GstMapInfo map;
+ GstBuffer *output_buffer;
+ guint64 samples;
+
+ if (buffer == NULL)
+ return GST_FLOW_OK;
+
+ if (tester->setoutputformat_on_decoding) {
+ GstCaps *caps;
+ GstAudioInfo info;
+
+ caps = gst_caps_new_simple ("audio/x-raw", "format", G_TYPE_STRING, "S16LE",
+ "channels", G_TYPE_INT, 2, "rate", G_TYPE_INT, 44100,
+ "layout", G_TYPE_STRING, "interleaved", NULL);
+ gst_audio_info_from_caps (&info, caps);
+ gst_caps_unref (caps);
+
+ gst_audio_decoder_set_output_format (dec, &info);
+ }
+
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+
+ /* the output is SE16LE stereo 44100 Hz */
+ samples =
+ gst_util_uint64_scale_round (44100, GST_BUFFER_DURATION (buffer),
+ GST_SECOND);
+ size = 2 * 2 * samples;
+ data = g_malloc0 (size);
+
+ memcpy (data, map.data, sizeof (guint64));
+
+ output_buffer = gst_buffer_new_wrapped (data, size);
+
+ gst_buffer_unmap (buffer, &map);
+
+ return gst_audio_decoder_finish_frame (dec, output_buffer, 1);
+}
+
+static void
+gst_audio_decoder_tester_class_init (GstAudioDecoderTesterClass * klass)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioDecoderClass *audiosink_class = GST_AUDIO_DECODER_CLASS (klass);
+
+ static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK, GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-test-custom"));
+
+ static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC, GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw"));
+
+ 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,
+ "AudioDecoderTester", "Decoder/Audio", "yep", "me");
+
+ audiosink_class->start = gst_audio_decoder_tester_start;
+ audiosink_class->stop = gst_audio_decoder_tester_stop;
+ audiosink_class->flush = gst_audio_decoder_tester_flush;
+ audiosink_class->handle_frame = gst_audio_decoder_tester_handle_frame;
+ audiosink_class->set_format = gst_audio_decoder_tester_set_format;
+}
+
+static void
+gst_audio_decoder_tester_init (GstAudioDecoderTester * tester)
+{
+}
+
+static gboolean
+_mysinkpad_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ events = g_list_append (events, event);
+ return TRUE;
+}
+
+static void
+setup_audiodecodertester (void)
+{
+ GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, format=(string)S16LE, "
+ "rate=(int)[1, 320000], channels=(int)[1, 32],"
+ "layout=(string)interleaved")
+ );
+ GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-test-custom")
+ );
+
+ dec = g_object_new (GST_AUDIO_DECODER_TESTER_TYPE, NULL);
+ mysrcpad = gst_check_setup_src_pad (dec, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (dec, &sinktemplate);
+
+ gst_pad_set_event_function (mysinkpad, _mysinkpad_event);
+}
+
+static void
+cleanup_audiodecodertest (void)
+{
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (dec);
+ gst_check_teardown_sink_pad (dec);
+ gst_check_teardown_element (dec);
+}
+
+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_MSECS_PER_SAMPLE);
+ GST_BUFFER_DURATION (buffer) =
+ gst_util_uint64_scale_round (1, GST_SECOND, TEST_MSECS_PER_SAMPLE);
+
+ 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 ("audio/x-test-custom", "channels", G_TYPE_INT, 2,
+ "rate", G_TYPE_INT, 44100, NULL);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
+
+}
+
+#define NUM_BUFFERS 1000
+GST_START_TEST (audiodecoder_playback)
+{
+ GstSegment segment;
+ GstBuffer *buffer;
+ guint64 i;
+
+ setup_audiodecodertester ();
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ 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 (i = 0; i < NUM_BUFFERS; i++) {
+ GstMapInfo map;
+ guint64 num;
+
+ buffer = create_test_buffer (i);
+
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+
+ /* check that buffer was received by our source pad */
+ buffer = buffers->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_MSECS_PER_SAMPLE));
+ fail_unless (GST_BUFFER_DURATION (buffer) == gst_util_uint64_scale_round (1,
+ GST_SECOND, TEST_MSECS_PER_SAMPLE));
+
+ gst_buffer_unmap (buffer, &map);
+
+ gst_buffer_unref (buffer);
+ buffers = g_list_delete_link (buffers, buffers);
+ }
+
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+
+ fail_unless (buffers == NULL);
+
+ cleanup_audiodecodertest ();
+}
+
+GST_END_TEST;
+
+static void
+check_audiodecoder_negotiation (void)
+{
+ gboolean received_caps = FALSE;
+ GList *iter;
+
+ for (iter = events; iter; iter = g_list_next (iter)) {
+ GstEvent *event = iter->data;
+
+ if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS) {
+ GstCaps *caps;
+ GstStructure *structure;
+ gint channels;
+ gint rate;
+
+ gst_event_parse_caps (event, &caps);
+ structure = gst_caps_get_structure (caps, 0);
+
+ fail_unless (gst_structure_get_int (structure, "rate", &rate));
+ fail_unless (gst_structure_get_int (structure, "channels", &channels));
+
+ fail_unless (rate == 44100, "%d != %d", rate, 44100);
+ fail_unless (channels == 2, "%d != %d", channels, 2);
+
+ received_caps = TRUE;
+ break;
+ }
+ }
+ fail_unless (received_caps);
+}
+
+GST_START_TEST (audiodecoder_negotiation_with_buffer)
+{
+ GstSegment segment;
+ GstBuffer *buffer;
+
+ setup_audiodecodertester ();
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+ /* push a buffer event to force audiodecoder to push a caps event */
+ buffer = create_test_buffer (0);
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+
+ check_audiodecoder_negotiation ();
+
+ cleanup_audiodecodertest ();
+ g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (audiodecoder_negotiation_with_gap_event)
+{
+ GstSegment segment;
+
+ setup_audiodecodertester ();
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+ /* push a gap event to force audiodecoder to push a caps event */
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0,
+ GST_SECOND)));
+ fail_unless (buffers == NULL);
+
+ check_audiodecoder_negotiation ();
+
+ cleanup_audiodecodertest ();
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (audiodecoder_delayed_negotiation_with_gap_event)
+{
+ GstSegment segment;
+
+ setup_audiodecodertester ();
+
+ ((GstAudioDecoderTester *) dec)->setoutputformat_on_decoding = TRUE;
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+ /* push a gap event to force audiodecoder to push a caps event */
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0,
+ GST_SECOND)));
+ fail_unless (buffers == NULL);
+
+ check_audiodecoder_negotiation ();
+
+ cleanup_audiodecodertest ();
+}
+
+GST_END_TEST;
+
+
+static Suite *
+gst_audiodecoder_suite (void)
+{
+ Suite *s = suite_create ("GstAudioDecoder");
+ TCase *tc = tcase_create ("general");
+
+ suite_add_tcase (s, tc);
+ tcase_add_test (tc, audiodecoder_playback);
+ tcase_add_test (tc, audiodecoder_negotiation_with_buffer);
+ tcase_add_test (tc, audiodecoder_negotiation_with_gap_event);
+ tcase_add_test (tc, audiodecoder_delayed_negotiation_with_gap_event);
+
+ return s;
+}
+
+GST_CHECK_MAIN (gst_audiodecoder);
diff --git a/tests/check/libs/videodecoder.c b/tests/check/libs/videodecoder.c
new file mode 100644
index 0000000..7f6bb98
--- /dev/null
+++ b/tests/check/libs/videodecoder.c
@@ -0,0 +1,581 @@
+/* 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/video/video.h>
+#include <gst/app/app.h>
+
+static GstPad *mysrcpad, *mysinkpad;
+static GstElement *dec;
+static GList *events = NULL;
+
+#define TEST_VIDEO_WIDTH 640
+#define TEST_VIDEO_HEIGHT 480
+#define TEST_VIDEO_FPS_N 30
+#define TEST_VIDEO_FPS_D 1
+
+#define GST_VIDEO_DECODER_TESTER_TYPE gst_video_decoder_tester_get_type()
+static GType gst_video_decoder_tester_get_type (void);
+
+typedef struct _GstVideoDecoderTester GstVideoDecoderTester;
+typedef struct _GstVideoDecoderTesterClass GstVideoDecoderTesterClass;
+
+struct _GstVideoDecoderTester
+{
+ GstVideoDecoder parent;
+
+ guint64 last_buf_num;
+ guint64 last_kf_num;
+};
+
+struct _GstVideoDecoderTesterClass
+{
+ GstVideoDecoderClass parent_class;
+};
+
+G_DEFINE_TYPE (GstVideoDecoderTester, gst_video_decoder_tester,
+ GST_TYPE_VIDEO_DECODER);
+
+static gboolean
+gst_video_decoder_tester_start (GstVideoDecoder * dec)
+{
+ GstVideoDecoderTester *dectester = (GstVideoDecoderTester *) dec;
+
+ dectester->last_buf_num = -1;
+ dectester->last_kf_num = -1;
+
+ return TRUE;
+}
+
+static gboolean
+gst_video_decoder_tester_stop (GstVideoDecoder * dec)
+{
+ return TRUE;
+}
+
+static gboolean
+gst_video_decoder_tester_flush (GstVideoDecoder * dec)
+{
+ GstVideoDecoderTester *dectester = (GstVideoDecoderTester *) dec;
+
+ dectester->last_buf_num = -1;
+ dectester->last_kf_num = -1;
+
+ return TRUE;
+}
+
+static gboolean
+gst_video_decoder_tester_set_format (GstVideoDecoder * dec,
+ GstVideoCodecState * state)
+{
+ GstVideoCodecState *res = gst_video_decoder_set_output_state (dec,
+ GST_VIDEO_FORMAT_GRAY8, TEST_VIDEO_WIDTH, TEST_VIDEO_HEIGHT, NULL);
+
+ gst_video_codec_state_unref (res);
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_video_decoder_tester_handle_frame (GstVideoDecoder * dec,
+ GstVideoCodecFrame * frame)
+{
+ GstVideoDecoderTester *dectester = (GstVideoDecoderTester *) dec;
+ guint64 input_num;
+ guint8 *data;
+ gint size;
+ GstMapInfo map;
+
+ gst_buffer_map (frame->input_buffer, &map, GST_MAP_READ);
+
+ input_num = *((guint64 *) map.data);
+
+ if ((input_num == dectester->last_buf_num + 1
+ && dectester->last_buf_num != -1)
+ || !GST_BUFFER_FLAG_IS_SET (frame->input_buffer,
+ GST_BUFFER_FLAG_DELTA_UNIT)) {
+
+ /* the output is gray8 */
+ size = TEST_VIDEO_WIDTH * TEST_VIDEO_HEIGHT;
+ data = g_malloc0 (size);
+
+ memcpy (data, map.data, sizeof (guint64));
+
+ frame->output_buffer = gst_buffer_new_wrapped (data, size);
+ frame->pts = GST_BUFFER_PTS (frame->input_buffer);
+ frame->duration = GST_BUFFER_DURATION (frame->input_buffer);
+ dectester->last_buf_num = input_num;
+ if (!GST_BUFFER_FLAG_IS_SET (frame->input_buffer,
+ GST_BUFFER_FLAG_DELTA_UNIT))
+ dectester->last_kf_num = input_num;
+ }
+
+ gst_buffer_unmap (frame->input_buffer, &map);
+
+ if (frame->output_buffer)
+ return gst_video_decoder_finish_frame (dec, frame);
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_OK;
+}
+
+static void
+gst_video_decoder_tester_class_init (GstVideoDecoderTesterClass * klass)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstVideoDecoderClass *audiosink_class = GST_VIDEO_DECODER_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-raw"));
+
+ 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,
+ "VideoDecoderTester", "Decoder/Video", "yep", "me");
+
+ audiosink_class->start = gst_video_decoder_tester_start;
+ audiosink_class->stop = gst_video_decoder_tester_stop;
+ audiosink_class->flush = gst_video_decoder_tester_flush;
+ audiosink_class->handle_frame = gst_video_decoder_tester_handle_frame;
+ audiosink_class->set_format = gst_video_decoder_tester_set_format;
+}
+
+static void
+gst_video_decoder_tester_init (GstVideoDecoderTester * tester)
+{
+}
+
+static gboolean
+_mysinkpad_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ events = g_list_append (events, event);
+ return TRUE;
+}
+
+static void
+setup_videodecodertester (void)
+{
+ GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw")
+ );
+ GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-test-custom")
+ );
+
+ dec = g_object_new (GST_VIDEO_DECODER_TESTER_TYPE, NULL);
+ mysrcpad = gst_check_setup_src_pad (dec, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (dec, &sinktemplate);
+
+ gst_pad_set_event_function (mysinkpad, _mysinkpad_event);
+}
+
+static void
+cleanup_videodecodertest (void)
+{
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (dec);
+ gst_check_teardown_sink_pad (dec);
+ gst_check_teardown_element (dec);
+}
+
+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)));
+
+}
+
+#define NUM_BUFFERS 1000
+GST_START_TEST (videodecoder_playback)
+{
+ GstSegment segment;
+ GstBuffer *buffer;
+ guint64 i;
+ GList *iter;
+
+ setup_videodecodertester ();
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ 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 (i = 0; i < NUM_BUFFERS; i++) {
+ buffer = create_test_buffer (i);
+
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+ }
+
+ 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) == NUM_BUFFERS);
+ 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_videodecodertest ();
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (videodecoder_playback_with_events)
+{
+ GstSegment segment;
+ GstBuffer *buffer;
+ guint64 i;
+ GList *iter;
+ GList *events_iter;
+
+ setup_videodecodertester ();
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ 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 (i = 0; i < NUM_BUFFERS; i++) {
+ if (i % 10 == 0) {
+ GstTagList *tags;
+
+ tags = gst_tag_list_new (GST_TAG_TRACK_NUMBER, i, NULL);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+ } else {
+ buffer = create_test_buffer (i);
+
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+ }
+ }
+
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+
+ events_iter = events;
+ /* make sure the usual events have been received */
+ {
+ GstEvent *sstart = events_iter->data;
+ fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START);
+ events_iter = g_list_next (events_iter);
+ }
+ {
+ GstEvent *caps_event = events_iter->data;
+ fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
+ events_iter = g_list_next (events_iter);
+ }
+ {
+ GstEvent *segment_event = events_iter->data;
+ fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
+ events_iter = g_list_next (events_iter);
+ }
+
+ /* check that all buffers were received by our source pad */
+ iter = buffers;
+ for (i = 0; i < NUM_BUFFERS; i++) {
+ if (i % 10 == 0) {
+ guint tag_v;
+ GstEvent *tag_event = events_iter->data;
+ GstTagList *taglist = NULL;
+
+ gst_event_parse_tag (tag_event, &taglist);
+
+ fail_unless (gst_tag_list_get_uint (taglist, GST_TAG_TRACK_NUMBER,
+ &tag_v));
+ fail_unless (tag_v == i);
+
+ events_iter = g_list_next (events_iter);
+ } else {
+ 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);
+ iter = g_list_next (iter);
+ }
+ }
+ fail_unless (iter == NULL);
+
+ /* check that EOS was received */
+ {
+ GstEvent *eos = events_iter->data;
+
+ fail_unless (GST_EVENT_TYPE (eos) == GST_EVENT_EOS);
+ events_iter = g_list_next (events_iter);
+ }
+
+ fail_unless (events_iter == NULL);
+
+ g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+ g_list_free_full (events, (GDestroyNotify) gst_event_unref);
+ buffers = NULL;
+ events = NULL;
+
+ cleanup_videodecodertest ();
+}
+
+GST_END_TEST;
+
+
+/* Check https://bugzilla.gnome.org/show_bug.cgi?id=721835 */
+GST_START_TEST (videodecoder_playback_first_frames_not_decoded)
+{
+ GstSegment segment;
+ GstBuffer *buffer;
+ guint64 i = 0;
+
+ setup_videodecodertester ();
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+ /* push a buffer, to have the segment attached to it.
+ * unfortunatelly this buffer can't be decoded as it isn't a keyframe */
+ buffer = create_test_buffer (i++);
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+
+ /* now be evil and ask this frame to be released
+ * this frame has the segment event attached to it, and the
+ * segment shouldn't disappear with it */
+ {
+ GList *l, *ol;
+
+ ol = l = gst_video_decoder_get_frames (GST_VIDEO_DECODER (dec));
+ fail_unless (g_list_length (l) == 1);
+ while (l) {
+ GstVideoCodecFrame *tmp = l->data;
+
+ gst_video_decoder_release_frame (GST_VIDEO_DECODER (dec), tmp);
+
+ l = g_list_next (l);
+ }
+ g_list_free (ol);
+ }
+
+ buffer = create_test_buffer (i++);
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+
+ fail_unless (g_list_length (buffers) == 1);
+
+ g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+ buffers = NULL;
+
+ cleanup_videodecodertest ();
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (videodecoder_backwards_playback)
+{
+ GstSegment segment;
+ GstBuffer *buffer;
+ guint64 i;
+ GList *iter;
+
+ setup_videodecodertester ();
+
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_element_set_state (dec, GST_STATE_PLAYING);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ send_startup_events ();
+
+ /* push a new segment with -1 rate */
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.rate = -1.0;
+ segment.stop = (NUM_BUFFERS + 1) * gst_util_uint64_scale_round (GST_SECOND,
+ TEST_VIDEO_FPS_D, TEST_VIDEO_FPS_N);
+ 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 */
+ i = NUM_BUFFERS;
+ while (i > 0) {
+ gint target = i;
+ gint j;
+
+ /* push groups of 10 buffers
+ * every number that is divisible by 10 is set as a discont,
+ * if it is divisible by 20 it is also a keyframe
+ *
+ * The logic here is that hte current i is the target, and then
+ * it pushes buffers from 'target - 10' up to target.
+ */
+ for (j = MAX (target - 10, 0); j < target; j++) {
+ GstBuffer *buffer = create_test_buffer (j);
+
+ if (j % 10 == 0)
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ if (j % 20 != 0)
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+ i--;
+ }
+ }
+
+ 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) == NUM_BUFFERS);
+ i = NUM_BUFFERS - 1;
+ 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_videodecodertest ();
+}
+
+GST_END_TEST;
+static Suite *
+gst_videodecoder_suite (void)
+{
+ Suite *s = suite_create ("GstVideoDecoder");
+ TCase *tc = tcase_create ("general");
+
+ suite_add_tcase (s, tc);
+ tcase_add_test (tc, videodecoder_playback);
+ tcase_add_test (tc, videodecoder_playback_with_events);
+ tcase_add_test (tc, videodecoder_playback_first_frames_not_decoded);
+
+ tcase_add_test (tc, videodecoder_backwards_playback);
+
+ return s;
+}
+
+GST_CHECK_MAIN (gst_videodecoder);
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 76223fe..0412950 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/app/Makefile.in b/tests/examples/app/Makefile.in
index a7d425f..7ffdc10 100644
--- a/tests/examples/app/Makefile.in
+++ b/tests/examples/app/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/audio/Makefile.in b/tests/examples/audio/Makefile.in
index 0424e4e..6fd6bf1 100644
--- a/tests/examples/audio/Makefile.in
+++ b/tests/examples/audio/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/dynamic/Makefile.in b/tests/examples/dynamic/Makefile.in
index 8c4c337..584ac73 100644
--- a/tests/examples/dynamic/Makefile.in
+++ b/tests/examples/dynamic/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/encoding/Makefile.in b/tests/examples/encoding/Makefile.in
index 778429e..3bf5f55 100644
--- a/tests/examples/encoding/Makefile.in
+++ b/tests/examples/encoding/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/fft/Makefile.in b/tests/examples/fft/Makefile.in
index 52de300..883bca0 100644
--- a/tests/examples/fft/Makefile.in
+++ b/tests/examples/fft/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/gio/Makefile.in b/tests/examples/gio/Makefile.in
index 4cab909..2c9b7da 100644
--- a/tests/examples/gio/Makefile.in
+++ b/tests/examples/gio/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/overlay/Makefile.in b/tests/examples/overlay/Makefile.in
index ee1b048..291bfec 100644
--- a/tests/examples/overlay/Makefile.in
+++ b/tests/examples/overlay/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/playback/Makefile.in b/tests/examples/playback/Makefile.in
index 55706c4..ce80198 100644
--- a/tests/examples/playback/Makefile.in
+++ b/tests/examples/playback/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/playrec/Makefile.in b/tests/examples/playrec/Makefile.in
index fe92dca..a67459d 100644
--- a/tests/examples/playrec/Makefile.in
+++ b/tests/examples/playrec/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/seek/Makefile.in b/tests/examples/seek/Makefile.in
index c38be7a..cdd7926 100644
--- a/tests/examples/seek/Makefile.in
+++ b/tests/examples/seek/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/snapshot/Makefile.in b/tests/examples/snapshot/Makefile.in
index 93c0041..614d2f1 100644
--- a/tests/examples/snapshot/Makefile.in
+++ b/tests/examples/snapshot/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/files/Makefile.in b/tests/files/Makefile.in
index ce5facf..7504064 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/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/icles/Makefile.in b/tests/icles/Makefile.in
index 3abd537..1ec731e 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/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/icles/playback/Makefile.in b/tests/icles/playback/Makefile.in
index 2cb75a3..c2a3067 100644
--- a/tests/icles/playback/Makefile.in
+++ b/tests/icles/playback/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 67366be..d8271a1 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/_stdint.h b/win32/common/_stdint.h
index 627efd6..7c50094 100644
--- a/win32/common/_stdint.h
+++ b/win32/common/_stdint.h
@@ -1,8 +1,8 @@
#ifndef _GST_PLUGINS_BASE__STDINT_H
#define _GST_PLUGINS_BASE__STDINT_H 1
#ifndef _GENERATED_STDINT_H
-#define _GENERATED_STDINT_H "gst-plugins-base 1.2.2"
-/* generated using gnu compiler gcc (Debian 4.8.2-10) 4.8.2 */
+#define _GENERATED_STDINT_H "gst-plugins-base 1.2.3"
+/* generated using gnu compiler gcc (Debian 4.8.2-14) 4.8.2 */
#define _STDINT_HAVE_STDINT_H 1
#include <stdint.h>
#endif
diff --git a/win32/common/config.h b/win32/common/config.h
index 798813e..9720c99 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -84,7 +84,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
@@ -322,7 +322,7 @@
#define PACKAGE_NAME "GStreamer Base Plug-ins"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Base Plug-ins 1.2.2"
+#define PACKAGE_STRING "GStreamer Base Plug-ins 1.2.3"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gst-plugins-base"
@@ -331,7 +331,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
@@ -365,7 +365,7 @@
#undef USE_TREMOLO
/* 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/libgstrtsp.def b/win32/common/libgstrtsp.def
index f97b9e9..a696725 100644
--- a/win32/common/libgstrtsp.def
+++ b/win32/common/libgstrtsp.def
@@ -81,6 +81,7 @@
gst_rtsp_method_get_type
gst_rtsp_options_as_text
gst_rtsp_options_from_text
+ gst_rtsp_profile_get_type
gst_rtsp_range_convert_units
gst_rtsp_range_free
gst_rtsp_range_get_times