Merge tag 'upstream/1.2.3'

Upstream version 1.2.3

Conflicts:
	ChangeLog
	NEWS
	RELEASE
	configure
	configure.ac
	docs/libs/html/annotation-glossary.html
	docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
	docs/libs/html/index.html
	docs/libs/html/index.sgml
	docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
	docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
	docs/plugins/html/index.html
	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-libs/gst/video/gstvideodecoder.c
	gst-plugins-base.doap
	gst-plugins-base.spec
	po/af.gmo
	po/af.po
	po/az.gmo
	po/az.po
	po/bg.gmo
	po/bg.po
	po/ca.gmo
	po/ca.po
	po/cs.gmo
	po/cs.po
	po/da.gmo
	po/da.po
	po/de.gmo
	po/de.po
	po/el.gmo
	po/el.po
	po/en_GB.gmo
	po/en_GB.po
	po/eo.gmo
	po/eo.po
	po/es.gmo
	po/es.po
	po/eu.gmo
	po/eu.po
	po/fi.gmo
	po/fi.po
	po/fr.gmo
	po/fr.po
	po/gl.gmo
	po/gl.po
	po/gst-plugins-base-1.0.pot
	po/hr.gmo
	po/hr.po
	po/hu.gmo
	po/hu.po
	po/id.gmo
	po/id.po
	po/it.gmo
	po/it.po
	po/ja.gmo
	po/ja.po
	po/lt.gmo
	po/lt.po
	po/lv.gmo
	po/lv.po
	po/nb.gmo
	po/nb.po
	po/nl.gmo
	po/nl.po
	po/or.gmo
	po/or.po
	po/pl.gmo
	po/pl.po
	po/pt_BR.gmo
	po/pt_BR.po
	po/ro.gmo
	po/ro.po
	po/ru.gmo
	po/ru.po
	po/sk.gmo
	po/sk.po
	po/sl.gmo
	po/sl.po
	po/sq.gmo
	po/sq.po
	po/sr.gmo
	po/sr.po
	po/sv.gmo
	po/sv.po
	po/tr.gmo
	po/tr.po
	po/uk.gmo
	po/uk.po
	po/vi.gmo
	po/vi.po
	po/zh_CN.gmo
	po/zh_CN.po
	win32/common/_stdint.h
	win32/common/config.h
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, &timestamp, &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, &timestamp, &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, &timestamp, &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