New upstream version 1.9.2
diff --git a/ChangeLog b/ChangeLog
index 9c4fd2e..053b2a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,1001 @@
-=== release 1.9.1 ===
+=== release 1.9.2 ===
 
-2016-07-06  Sebastian Dröge <slomo@coaxion.net>
+2016-09-01  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.9.1
+	  releasing 1.9.2
+
+2016-09-01 11:23:33 +0300  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/mt.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:
+	* po/zh_HK.po:
+	* po/zh_TW.po:
+	  po: Update translations
+
+2016-09-01 10:59:51 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/examples/equalizer/demo.c:
+	* tests/examples/spectrum/demo-audiotest.c:
+	* tests/examples/spectrum/demo-osssrc.c:
+	  tests/examples: #define GDK_DISABLE_DEPRECATION_WARNINGS
+	  We use gdk_cairo_create() which is deprecated since 3.22.
+
+2016-08-31 05:50:44 +1000  Jan Schmidt <jan@centricular.com>
+
+	* sys/osxvideo/Makefile.am:
+	* sys/osxvideo/cocoawindow.h:
+	* sys/osxvideo/osxvideosink.h:
+	  osxvideo: Remove QuickTime references.
+	  QuickTime.h is no longer available on OS X 10.12 (Sierra),
+	  and both the header and the framework seem unnecessary
+	  for compilation - at least as of 10.11 (El Capitan).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770526
+
+2016-08-19 11:11:03 -0700  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* ext/dv/gstdvdemux.c:
+	* ext/gdk_pixbuf/gstgdkpixbufdec.c:
+	* gst/avi/gstavidemux.c:
+	* gst/debugutils/rndbuffersize.c:
+	* gst/flv/gstflvdemux.c:
+	* gst/imagefreeze/gstimagefreeze.c:
+	* gst/isomp4/qtdemux.c:
+	* gst/matroska/matroska-demux.c:
+	* gst/matroska/matroska-parse.c:
+	* gst/multifile/gstsplitmuxsrc.c:
+	* gst/rtsp/gstrtspsrc.c:
+	* gst/wavparse/gstwavparse.c:
+	  Use the new API to post flow ERROR messages on the bus
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770158
+
+2016-08-26 21:32:07 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* tests/check/elements/.gitignore:
+	  gitignore: ignore qtdemux, rtph261 and rtpvp9 tests
+
+2016-08-26 21:22:16 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* tests/check/Makefile.am:
+	  tests: use GST_NET_LIBS instead of hardcoded -lgstnet
+	  Fixes build in OSX when running 'make check' in gst-uninstalled.
+
+2016-08-26 21:14:47 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* tests/check/elements/rtp-payloading.c:
+	  tests: remove a wrong 'const' specifier
+	  Fixes "error: duplicate 'const' declaration specifier"
+
+2016-08-26 21:11:59 +0200  Josep Torra <n770galaxy@gmail.com>
+
+	* configure.ac:
+	* tests/check/Makefile.am:
+	  build: silence error about pthread for 'make check' in osx
+	  Fixes "clang: error: argument unused during compilation: '-pthread'"
+
+2016-08-26 20:31:10 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/Makefile.am:
+	  vp9enc: Fix build of unit test by letting it link to libgstvideo
+
+2016-08-26 12:06:35 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/rtpmanager/gstrtpmux.c:
+	* gst/rtpmanager/gstrtpmux.h:
+	  Revert "rtpmux: fix PROP_TIMESTAMP_OFFSET range problems"
+	  This broke API, so we need a better solution!
+	  This reverts commit c7579d31a6e9d788e94b83258309063d0aae481e.
+
+2016-06-08 15:06:28 +0200  Stian Selnes <stian@pexip.com>
+
+	* gst/rtp/gstrtpvp9depay.c:
+	* tests/check/Makefile.am:
+	* tests/check/elements/rtpvp9.c:
+	  rtpvp9depay: Support flexible mode
+
+2016-06-06 17:03:36 +0200  Stian Selnes <stian@pexip.com>
+
+	* ext/vpx/gstvp9enc.c:
+	* tests/check/Makefile.am:
+	* tests/check/elements/vp9enc.c:
+	  vp9enc: Fix leak of vpx_image_t
+
+2016-05-06 13:33:22 +0200  Stian Selnes <stian@pexip.com>
+
+	* gst/rtp/gstrtph263pdepay.c:
+	* tests/check/elements/rtph263.c:
+	  rtph263pdepay: Don't try to push empty frame
+	  If the result of depayloading is an empty frame, just drop it. This is
+	  likely the result of a buggy payloader.
+
+2016-05-06 16:06:53 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* gst/rtpmanager/gstrtpmux.c:
+	* gst/rtpmanager/gstrtpmux.h:
+	  rtpmux: fix PROP_TIMESTAMP_OFFSET range problems
+	  It could not set the offset for the full guint32 range.
+
+2016-05-06 09:44:42 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* gst/rtpmanager/gstrtpbin.c:
+	* gst/rtpmanager/gstrtpbin.h:
+	  rtpbin: introduce max-streams property
+	  To be able to cap the number of allowed streams for one session.
+	  This is useful for preventing DoS attacks, where a sender can change
+	  SSRC for every buffer, effectively bringing rtpbin to a halt.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770292
+
+2016-03-31 00:10:49 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* gst/rtpmanager/rtpsource.c:
+	  rtpsource: reordered packets are very normal, and should not be a warning
+
+2016-02-05 14:19:25 +0100  Havard Graff <havard.graff@gmail.com>
+
+	* gst/rtpmanager/rtpsession.c:
+	  rtpsession: degrade g_warning to GST_ERROR
+	  So we don't blow up while investigating
+
+2016-02-04 14:16:40 +0100  Stian Selnes <stian@pexip.com>
+
+	* gst/rtp/gstrtph263pdepay.c:
+	* tests/check/elements/rtph263.c:
+	  rtph263pdepay: Fix picture header for non-writable payload
+	  Under certain conditions gst_rtp_buffer_get_payload() returns a copy of
+	  the payload. In this case the payload modifications will not affect the
+	  rtp buffer. So instead of modifying the payload buffer directly we
+	  should modify the buffer that actually gets pushed on the adapter.
+
+2015-11-19 11:50:47 +0100  Stian Selnes <stian@pexip.com>
+
+	* gst/rtp/gstrtph261depay.c:
+	* tests/check/Makefile.am:
+	* tests/check/elements/rtph261.c:
+	  rtph261depay: Fix check of valid payload length
+	  Packets with no H.261 payload should be dropped to avoid invalid
+	  write/reads.
+
+2015-11-09 10:06:21 +0100  Stian Selnes <stian@pexip.com>
+
+	* gst/rtp/gstrtph263pay.c:
+	* tests/check/elements/rtph263.c:
+	  rtph263pay: Fix double free, invalid reads and leak
+
+2014-06-30 15:43:58 +0200  Stian Selnes <stian@pexip.com>
+
+	* gst/rtpmanager/rtpsession.c:
+	  rtpsession: sanity check RTT before ignoring PLI/FIR
+
+2014-06-30 15:07:45 +0200  Stian Selnes <stian@pexip.com>
+
+	* gst/rtpmanager/rtpsession.c:
+	  rtpsession: handle sdes messages with non-utf8 more gracefully
+
+2014-06-17 08:52:50 +0200  Stian Selnes <stian.selnes@gmail.com>
+
+	* gst/rtp/gstrtph263pay.c:
+	  rtph263pay: change log level on bitstream parsing messages
+
+2016-07-07 11:13:18 +0200  Mikhail Fludkov <misha@pexip.com>
+
+	* tests/check/elements/rtprtx.c:
+	  tests/rtprtx: refactor the tests to use gstharness
+	  The functionality of all the tests was kept exactly the same. Some tests
+	  were renamed:
+	  test_push_forward_seq -> test_rtxsend_rtxreceive
+	  test_drop_one_sender -> test_rtxsend_rtxreceive_with_packet_loss
+	  test_drop_multiple_sender -> test_multi_rtxsend_rtxreceive_with_packet_loss
+	  test_rtxreceive_data_reconstruction was testing that retransmitted
+	  buffer produced by rtxsend was correctly transformed to the original
+	  buffer by rtxreceive. Now we are checking for this in all the tests
+	  where both rtxsend & rtxreceive are involved. That's why the test was
+	  removed.
+
+2016-08-25 15:52:36 +0200  Jonas Holmberg <jonashg@axis.com>
+
+	* gst/rtp/gstrtph265pay.c:
+	  rtph265pay: Set RTP marker bit
+	  Set the RTP marker bit on the last RTP packet of an H.265 access unit.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770394
+
+2016-07-26 19:39:58 +0200  Xabier Rodriguez Calvar <calvaris@igalia.com>
+
+	* gst/videofilter/gstvideoflip.c:
+	* gst/videofilter/gstvideoflip.h:
+	  videoflip: added GstVideoDirection interface
+	  It implements now this interface with its video-direction
+	  property. Values are changed to GstVideoOrientationMethod but they have
+	  the same value than the originals.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768687
+
+2015-11-06 10:39:16 +0100  Havard Graff <havard.graff@gmail.com>
+
+	* gst/rtpmanager/gstrtpsession.c:
+	  gstrtpsession: refactor duplicate code into a function
+	  Less code, easier to read, more consistent.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770293
+
+2016-08-23 17:06:44 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/rtpmanager/gstrtpbin.c:
+	  rtpbin: fix typo in max-misorder-time property name
+
+2016-08-22 00:05:52 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	  splitmuxsink: fix printf format compiler warning in debug message
+	  On 32-bit x86: gstsplitmuxsink.c:966:31: warning: format ‘%u’ expects
+	  argument of type ‘unsigned int’, but argument 9 has type
+	  ‘guint64 {aka long long unsigned int}’
+
+2016-08-12 21:12:30 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* .gitignore:
+	* config.h.meson:
+	* ext/cairo/meson.build:
+	* ext/dv/meson.build:
+	* ext/flac/meson.build:
+	* ext/gdk_pixbuf/meson.build:
+	* ext/jack/meson.build:
+	* ext/jpeg/meson.build:
+	* ext/libpng/meson.build:
+	* ext/meson.build:
+	* ext/pulse/meson.build:
+	* ext/shout2/meson.build:
+	* ext/soup/meson.build:
+	* ext/speex/meson.build:
+	* ext/taglib/meson.build:
+	* ext/vpx/meson.build:
+	* ext/wavpack/meson.build:
+	* gst/alpha/meson.build:
+	* gst/apetag/meson.build:
+	* gst/audiofx/meson.build:
+	* gst/audioparsers/meson.build:
+	* gst/auparse/meson.build:
+	* gst/autodetect/meson.build:
+	* gst/avi/meson.build:
+	* gst/cutter/meson.build:
+	* gst/debugutils/meson.build:
+	* gst/deinterlace/meson.build:
+	* gst/dtmf/meson.build:
+	* gst/effectv/meson.build:
+	* gst/equalizer/meson.build:
+	* gst/flv/meson.build:
+	* gst/flx/meson.build:
+	* gst/goom/meson.build:
+	* gst/goom2k1/meson.build:
+	* gst/icydemux/meson.build:
+	* gst/id3demux/meson.build:
+	* gst/imagefreeze/meson.build:
+	* gst/interleave/meson.build:
+	* gst/isomp4/meson.build:
+	* gst/law/meson.build:
+	* gst/level/meson.build:
+	* gst/matroska/meson.build:
+	* gst/meson.build:
+	* gst/monoscope/meson.build:
+	* gst/multifile/meson.build:
+	* gst/multipart/meson.build:
+	* gst/replaygain/meson.build:
+	* gst/rtp/meson.build:
+	* gst/rtpmanager/meson.build:
+	* gst/rtsp/meson.build:
+	* gst/shapewipe/meson.build:
+	* gst/smpte/meson.build:
+	* gst/spectrum/meson.build:
+	* gst/udp/meson.build:
+	* gst/videobox/meson.build:
+	* gst/videocrop/meson.build:
+	* gst/videofilter/meson.build:
+	* gst/videomixer/meson.build:
+	* gst/wavenc/meson.build:
+	* gst/wavparse/meson.build:
+	* gst/y4m/meson.build:
+	* meson.build:
+	* meson_options.txt:
+	* sys/directsound/meson.build:
+	* sys/meson.build:
+	* sys/v4l2/meson.build:
+	* sys/ximage/meson.build:
+	* tests/check/meson.build:
+	* tests/meson.build:
+	  Add support for Meson as alternative/parallel build system
+	  https://github.com/mesonbuild/meson
+	  With contributions from:
+	  Tim-Philipp Müller <tim@centricular.com>
+	  Jussi Pakkanen <jpakkane@gmail.com> (original port)
+	  Highlights of the features provided are:
+	  * Faster builds on Linux (~40-50% faster)
+	  * The ability to build with MSVC on Windows
+	  * Generate Visual Studio project files
+	  * Generate XCode project files
+	  * Much faster builds on Windows (on-par with Linux)
+	  * Seriously fast configure and building on embedded
+	  ... and many more. For more details see:
+	  http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
+	  http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
+	  Building with Meson should work on both Linux and Windows, but may
+	  need a few more tweaks on other operating systems.
+
+2016-08-20 16:59:30 +0800  Jie Jiang <jiangjie@nudt.edu.cn>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	* gst/multifile/gstsplitmuxsink.h:
+	  Fixed splitmuxsink 32-bit overflow bug
+	  Extend the byte tracking counters to 64-bit on
+	  all platforms, instead of using gsize, which overflows
+	  after 4GB.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770019
+
+2016-08-19 17:18:16 +0300  Vivia Nikolaidou <vivia@toolsonair.com>
+
+	* gst/isomp4/atoms.c:
+	  isomp4: Fix coverity warning
+	  If atom_copy_data fails to write anything, return 0
+	  CID #1371458
+
+2016-04-09 07:51:03 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* sys/v4l2/gstv4l2deviceprovider.c:
+	* sys/v4l2/v4l2-utils.c:
+	  v4l2: consistently check #ifdef HAVE_GUDEV instead of #if
+	  Both work with autotools but they definitely don't mean the same thing, cause
+	  problems with other build systems, and are bad form. Existence should always be
+	  checked with #ifdef or #if defined.
+
+2016-04-19 10:53:05 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* sys/directsound/gstdirectsoundsink.c:
+	* sys/directsound/gstdirectsoundsink.h:
+	  directsound: port away from old DirectX API
+	  D3DX has been deprecated for the last 4 years and latest versions of
+	  Windows no longer ship headers for it. This is fine as long as you're
+	  building with Cerbero's Wine-based DirectX headers, but sucks if you
+	  want to build against the actual Windows SDK.
+	  We were just using it to get error strings anyway, so just use the
+	  generic error string API.
+
+2016-08-18 12:02:01 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/audioparsers/gstflacparse.c:
+	  Revert "flacparse: Add maximum bitrate tag"
+	  This reverts commit c703ab69f526092bb26cce41ca691a896c8383d8.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769392
+
+2016-08-18 09:57:51 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/rtpjitterbuffer.c:
+	  rtpjitterbuffer: Fix unit test by disabling adaptive misorder/dropout calculations
+	  Need to set max-misorder-time and max-dropout-time to 0 so the
+	  jitterbuffer does not base them on packet rate calculations.
+	  If it does, out gap is big enough to be considered a new stream and
+	  we wait for a few consecutive packets just to be sure
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751311
+
+2016-08-09 12:55:59 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	* gst/multifile/gstsplitmuxsink.h:
+	  splitmuxsink: Add option to split at exactly max-size-time
+	  Will try to request a keyframe from the encoder to be sent at the target
+	  running time.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769664
+
+2016-08-09 20:16:16 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	  splitmuxsink: Allow time and bytes to reach their respective thresholds
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769664
+
+2016-08-17 09:49:04 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/rtsp/gstrtspsrc.c:
+	  rtspsrc: Allow mimetypes with properties as long as they're application/sdp
+	  Some servers add properties like charset, e.g.
+	  application/sdp; charset=utf8
+	  Ideally we should also parse the charset and do conversion of all messages,
+	  but that's for a later time.
+
+2016-06-24 16:32:37 +0300  Vivia Nikolaidou <vivia@toolsonair.com>
+
+	* gst/isomp4/atoms.c:
+	* gst/isomp4/atoms.h:
+	* gst/isomp4/fourcc.h:
+	* gst/isomp4/gstqtmux.c:
+	* gst/isomp4/gstqtmux.h:
+	  qtmux: Added support for writing timecode track
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767950
+
+2016-08-11 16:32:21 -0600  Thomas Bluemel <tbluemel@control4.com>
+
+	* gst/udp/gstmultiudpsink.c:
+	  multiudpsink: Initialize bytes_sent field.
+	  This fixes endpoints not receiving any data intermittently.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769773
+
+2016-08-10 11:45:13 -0600  Thomas Bluemel <tbluemel@control4.com>
+
+	* gst/rtpmanager/gstrtpjitterbuffer.c:
+	* gst/rtpmanager/rtpstats.c:
+	  rtpjitterbuffer: Actually calculate the packet rate for max-dropout and max-misorder calculations.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751311
+
+2016-08-10 11:26:17 -0600  Thomas Bluemel <tbluemel@control4.com>
+
+	* gst/rtpmanager/rtpjitterbuffer.c:
+	  rtpjitterbuffer: Don't warn for duplicate packets
+	  This is a normal scenario and should not be a warning.  This can
+	  happen frequently when re-transmits of lost packets are enabled.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=762208
+
+2016-08-08 13:49:19 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	  splitmux: Fix typo converting to running time.
+	  Use the correct collected timestamp.
+
+2016-08-08 02:53:48 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	* gst/multifile/gstsplitmuxsink.h:
+	  Revert "splitmuxsink: Use GstBin async-handling instead of our own."
+	  This reverts commit fa008f271a52f82dededc28bd81b020ca7939b47.
+	  async-handling in GstBin causes the pipeline to spin at 100%
+	  CPU as the top-level pipeline tries to change that state
+	  to PLAYING constantly. This is a workaround for a core
+	  problem, essentially, but an improvement in this case for now.
+
+2016-08-08 00:56:38 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	  splitmux: Recheck state after unlocking mutex.
+	  After dropping the splitmux lock, re-check the state,
+	  don't just fall through and sleep unconditionally,
+	  as we may have already missed the wakeup.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769514
+
+2016-08-03 03:32:07 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/multifile/gstsplitmuxsrc.c:
+	  splitmuxsrc: Don't stop and error on EOS flow return
+	  Don't immediately halt on EOS flow return from downstream
+	  due to out of segment. Let the demuxer handle it and send
+	  EOS.
+
+2016-08-04 00:36:28 -0300  Thiago Santos <thiagossantos@gmail.com>
+
+	* gst/rtpmanager/gstrtpjitterbuffer.c:
+	  rtpjitterbuffer: avoid unref of null buffer
+	  The current 'l' pointer will be NULL when the loop
+	  is interrupted with a 'break' statement. Need to have
+	  it advance to the next list item before interrupting.
+
+2016-08-02 14:01:14 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* gst/wavparse/Makefile.am:
+	* gst/wavparse/gstwavparse.c:
+	  wavparse: Add tags for container format and bitrate for uncompressed PCM
+	  The PCM bitrate is added to help downstream elements (like uridecodebin)
+	  figure out a proper network buffer size
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769390
+
+2016-08-01 18:52:26 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* gst/audioparsers/gstflacparse.c:
+	  flacparse: Add maximum bitrate tag
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769392
+
+2016-07-28 17:58:16 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/isomp4/qtdemux.c:
+	  qtdemux: When receiving a DISCONT buffer that does not point to a sample, remember the offset
+	  And don't just reset everything. This makes sure that we can continue to
+	  handle data in the following scenario:
+	  moov: discont
+	  moof: discont
+	  mdat: continuous
+	  Previously this would fail because the offset would be the accumulated offset
+	  from moov and moof at the mdat position, while the buffer offset might be
+	  something completely different.
+
+2016-07-25 13:34:02 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/rtp/gstrtpbvpay.c:
+	* gst/rtp/gstrtpceltpay.c:
+	* gst/rtp/gstrtpg722pay.c:
+	* gst/rtp/gstrtph263ppay.c:
+	* gst/rtp/gstrtph265pay.c:
+	* gst/rtp/gstrtpilbcpay.c:
+	  rtp: Filter with the filter caps in the payloader's getcaps
+
+2016-03-03 11:35:06 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/soup/gstsouphttpsrc.c:
+	  souphttpsrc: include http-status-code in error message details
+	  https://bugzilla.gnome.org/show_bug.cgi?id=763038
+
+2016-07-25 18:20:03 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	  splitmuxsink: Fix debug statement signedness.
+	  The ts variable is a GstClockTime, don't print it
+	  as a GstClockTimeDiff.
+
+2016-07-17 22:41:02 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	* gst/multifile/gstsplitmuxsink.h:
+	  splitmuxsink: Handle negative running time
+	  Use signed clock times for running time everywhere
+	  so that we handle negative running times without
+	  going haywire, similar to what queue and multiqueue
+	  do these days.
+
+2016-07-18 00:12:55 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/multifile/gstsplitmuxsink.c:
+	  splitmuxsink: Drop lock when sending dummy event
+	  When pushing the dummy event into the multiqueue,
+	  drop the splitmux lock or else we might deadlock.
+
+2016-06-30 01:56:41 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+	* gst/rtp/gstrtph264pay.c:
+	  rtph264pay: Intersect with filter caps in getcaps function.
+	  Always intersect with the filter caps in the getcaps function
+	  to make sure we return a subset of what was requested.
+	  Other payloaders also have this problem and need fixing
+	  in future commits.
+
+2016-07-12 17:30:56 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/elements/qtdemux.c:
+	  tests: qtdemux: fix element and pad leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768739
+
+2016-07-12 16:45:36 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* tests/check/elements/audiofirfilter.c:
+	* tests/check/elements/audioiirfilter.c:
+	* tests/check/elements/rtp-payloading.c:
+	* tests/check/elements/videobox.c:
+	* tests/check/pipelines/effectv.c:
+	  tests: fix bus leaks
+	  gst_bus_add_signal_watch() takes a ref on the bus which should be
+	  released using gst_bus_remove_signal_watch().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768739
+
+2016-07-14 03:07:11 +0800  Ting-Wei Lan <lantw@src.gnome.org>
+
+	* configure.ac:
+	  configure: Call AG_GST_PKG_CONFIG_PATH to set GST_PKG_CONFIG_PATH
+	  GST_PKG_CONFIG_PATH is used in docs/plugins directory, so
+	  AG_GST_PKG_CONFIG_PATH must be called to set it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768787
+
+2016-07-12 07:39:58 +0200  Edward Hervey <edward@centricular.com>
+
+	* ext/soup/gstsouphttpsrc.c:
+	  souphttpsrc: Don't drop final bytes of a range request
+	  At the end of a range request, we don't want to return GST_FLOW_EOS otherwise
+	  the last bytes we just read will be dropped by basesrc.
+	  Instead just return GST_FLOW_OK (which was set just before) and let basesrc
+	  handle the fact we are at the end of the segment.
+
+2016-07-11 18:30:18 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* sys/v4l2/gstv4l2deviceprovider.c:
+	  v4l2provider: Fix device type detection
+	  The type detection would lead to assertion as it would try
+	  to create a device without having found any type for it. It
+	  also didn't detect MPLANE devices properly.
+
+2016-07-11 18:29:01 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* sys/v4l2/gstv4l2object.c:
+	  v4l2object: Don't assert when used by the monitor
+	  The monitor sets the object->element object as a GstObject. This
+	  works for debug traces, but will assert for ELEMENT_ERROR. This
+	  was the only case where that could happen. Add a check for that.
+
+2016-07-11 17:38:00 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* sys/v4l2/gstv4l2object.c:
+	  v4l2object: Indent very long line
+
+2016-07-12 00:42:02 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/soup/gstsouphttpsrc.c:
+	  souphttpsrc: At the end of a range request, read another time to finalize the request
+	  If we're at the end of a range request, read again to let libsoup
+	  finalize the request. This allows to reuse the connection again later,
+	  otherwise we would have to cancel the message and close the connection.
+
+2016-07-11 21:13:47 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From f363b32 to f49c55e
+
+2016-07-11 19:57:18 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/soup/gstsouphttpsrc.c:
+	  souphttpsrc: Fix keep-alive handling
+	  We have to get rid of the message on EOS when the complete stream is read to
+	  remember that we successfully finished handling this specific message.
+	  Otherwise we will cancel it later and close the connection instead of reusing
+	  it at a later time.
+	  It might also make sense to reuse connections if a non-200 response is
+	  received. As long as there was no connection error, the HTTP connection should
+	  be re-usable.
+
+2016-07-11 12:05:06 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* configure.ac:
+	  Also enable V4L2 probe on aarch64 (aka ARM 64bit)
+
+2016-07-11 11:59:19 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* tests/examples/rtp/client-PCMA.c:
+	  rtp example: Fix leak
+	  Also stop fetching the internal source as this
+	  functionality has been broken.
+
+2016-07-08 14:58:37 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* configure.ac:
+	  Enable v4l2 probe on Linux/ARM
+	  Most of those have V4L2 drivers these days enabling it make sure that it
+	  this code is enabled in major distribution, hence that HW accelerated
+	  decoder/encoder can be used on platforms that support it. The probes are
+	  slightly increasing the first init of gstreamer library, though the
+	  result is cached in the registry for later use.
+
+2016-07-11 09:46:49 +0200  Jonas Holmberg <jonashg@axis.com>
+
+	* gst/rtp/gstrtph265pay.c:
+	* tests/check/elements/rtp-payloading.c:
+	  rtph265pay: Accept array_completeness=1
+	  When parsing NAL unit type in codec_data, check the 6bits of
+	  NAL_unit_type only and do not require the array_completeness bit to be
+	  0, since the default and mandatory value of array_completeness is 1 for
+	  hvc1.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768653
+
+2016-07-10 21:35:06 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* sys/v4l2/v4l2_calls.c:
+	  v4l2: Also copy device_caps in gst_v4l2_dup
+	  This fixes regression where M2M error out saying they have no output
+	  format (the V4L2 CAPTURE side).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-10 21:30:27 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/udp/gstudpsrc.c:
+	  udpsrc: Use correct in6_pktinfo struct instead of in_pktinfo
+	  Fixes the build on FreeBSD, which does not have the latter.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768623
+
+2016-07-08 17:28:19 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* sys/v4l2/v4l2_calls.c:
+	  v4l2: fix multiplanar capture
+	  After switching to using V4L2_CAP_DEVICE_CAPS we lost support for
+	  multiplanar device types. After some research, it looks like
+	  vcap.capabilities treated the multiplanar flag of output and capture
+	  devices equally, but not the new device_caps.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-08 14:56:30 +0200  Mats Lindestam <matslm@axis.com>
+
+	* gst/multipart/multipartmux.c:
+	* gst/multipart/multipartmux.h:
+	  multipartmux: Use PTS and DTS instead of timestamp
+	  And pass-through both of them.
+	  Based on a patch by Göran Jönsson <goranjn@axis.com>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=767900
+
+2016-06-30 14:40:40 +0200  Thomas Scheuermann <Thomas.Scheuermann@barco.com>
+
+	* ext/jack/gstjackaudioclient.c:
+	  jack: don't wait for callbacks if the jack server shut down
+	  Otherwise we'll wait forever.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747275
+
+2016-06-23 15:30:19 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/isomp4/qtdemux.c:
+	  qtdemux: Let upstream events go through upstream
+	  There's no real reason to avoid sending QOS/NAVIGATION events upstrea.
+	  Some elements might want to have that information.
+
+2016-06-23 15:22:56 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/avi/gstavidemux.c:
+	  avidemux: Let upstream events go through upstream
+	  There's no real reason to avoid sending QOS/NAVIGATION events upstrea.
+	  Some elements might want to have that information.
+
+2016-06-23 15:17:36 +0200  Edward Hervey <edward@centricular.com>
+
+	* ext/dv/gstdvdemux.c:
+	  dvdemux: Let upstream events go through upstream
+	  There's no real reason to avoid sending QOS/NAVIGATION events upstrea.
+	  Some elements might want to have that information.
+	  Also remove downstream-only CAPS event handling and minimize code
+
+2016-07-07 23:53:54 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* sys/v4l2/gstv4l2.c:
+	  v4l2: fix v4l2 probe build error
+	  A typo in gst_v4l2_probe_and_register() caused a build error when building
+	  with --enable-v4l2-probe. Fixing it.
+	  gstv4l2.c: In function 'gst_v4l2_probe_and_register':
+	  gstv4l2.c:150:25: error: 'struct v4l2_capability' has no member named 'capabilitites'
+	  device_caps = vcap.capabilitites;
+
+2016-07-01 22:53:33 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* sys/v4l2/gstv4l2src.c:
+	  v4l2src: use gst_caps_intersect_full in negotiate()
+	  Instead of reimplementing the GST_CAPS_INTERSECT_FIRST
+	  interection mode.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-02 01:56:07 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* sys/v4l2/gstv4l2.c:
+	* sys/v4l2/gstv4l2bufferpool.c:
+	* sys/v4l2/gstv4l2deviceprovider.c:
+	* sys/v4l2/gstv4l2object.c:
+	* sys/v4l2/gstv4l2object.h:
+	* sys/v4l2/gstv4l2radio.c:
+	* sys/v4l2/gstv4l2sink.c:
+	* sys/v4l2/v4l2_calls.c:
+	  v4l2: use opened device caps instead of physical device ones
+	  The same physical device can export multiple devices. In
+	  this case, the capabilities field now contains a union of
+	  all caps available from all exported V4L2 devices alongside
+	  a V4L2_CAP_DEVICE_CAPS flag that should be used to decide
+	  what capabilities to consider. In our case, we need the
+	  ones from the exported device we are using.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-07 18:24:59 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/matroska/matroska-mux.c:
+	  matroskamux: Remove suspicious checks for pads being active and linked
+	  We should add all pads, no matter if they are linked or active or not at this
+	  point. Skipping some that are not will cause different behaviour than with
+	  other muxers.
+
+2016-07-07 18:23:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/matroska/matroska-mux.c:
+	  matroskamux: Error out if we start writing data with some pads not having a codec id yet
+	  This can only happen if a) upstream somehow gets around the CAPS event failing
+	  or b) there never being any CAPS event.
+	  The following code assumes that all pads have a codec-id.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768509
+
+2016-07-07 18:14:43 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/matroska/matroska-mux.c:
+	  matroskamux: Consistently use gst_matroska_mux_set_codec_id() for setting the codec id
+
+2016-07-04 09:50:11 +0200  Jonas Holmberg <jonashg@axis.com>
+
+	* gst/rtp/gstrtph265depay.c:
+	* gst/rtp/gstrtph265pay.c:
+	* gst/rtp/gstrtph265pay.h:
+	* tests/check/elements/rtp-payloading.c:
+	  rtph265pay/depay: Sync against RFC 7798
+	  Handle sprop-vps, sprop-sps and sprop-pps in caps instead of
+	  sprop-parameter-sets.
+	  rtph265pay works with byte-stream and hvc1 formats but not hev1 yet. It
+	  handles profile-id, tier-flag and level-id in caps query.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753760
+
+2016-07-06 09:25:00 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+	* gst/flv/gstflvdemux.c:
+	* gst/flv/gstflvdemux.h:
+	  flvdemux: Push nominal bitrate tags
+	  Add per-stream tag lists, which are used to send nominal
+	  bitrate tags. When remuxing FLV => FLV, this now passes
+	  through the upstream bitrate.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768440
+
+2016-07-06 09:24:49 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+	* gst/flv/gstflvdemux.c:
+	* gst/flv/gstflvdemux.h:
+	  flvdemux: Refactor metadata tag handling
+	  The FLV header cannot be trusted to indicate video or
+	  audio presence, as the comments already mention. Don't
+	  delay pushing tags waiting for streams that might never
+	  appear.
+	  Tags are now pushed immediately after they change:
+	  - After parsing an onMetaData script object
+	  - After negotiating caps on a pad
+	  https://bugzilla.gnome.org/show_bug.cgi?id=768440
+
+2016-07-06 12:44:10 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/isomp4/qtdemux.c:
+	  qtdemux: fix AAC codec_data values
+	  As seen in the parent switch for object_type_id, the 4 possible values are
+	  0x40, 0x66, 0x67 and 0x68. Fixing the nested switch to match these values.
+	  Looks like it was a typo making them decimal instead of hexadecimal.
+	  CID 1363328
+
+2016-07-06 13:51:03 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.9.1 ===
+
+2016-07-06 13:06:44 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-good-plugins.args:
+	* docs/plugins/gst-plugins-good-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-1394.xml:
+	* docs/plugins/inspect/plugin-aasink.xml:
+	* docs/plugins/inspect/plugin-alaw.xml:
+	* docs/plugins/inspect/plugin-alpha.xml:
+	* docs/plugins/inspect/plugin-alphacolor.xml:
+	* docs/plugins/inspect/plugin-apetag.xml:
+	* docs/plugins/inspect/plugin-audiofx.xml:
+	* docs/plugins/inspect/plugin-audioparsers.xml:
+	* docs/plugins/inspect/plugin-auparse.xml:
+	* docs/plugins/inspect/plugin-autodetect.xml:
+	* docs/plugins/inspect/plugin-avi.xml:
+	* docs/plugins/inspect/plugin-cacasink.xml:
+	* docs/plugins/inspect/plugin-cairo.xml:
+	* docs/plugins/inspect/plugin-cutter.xml:
+	* docs/plugins/inspect/plugin-debug.xml:
+	* docs/plugins/inspect/plugin-deinterlace.xml:
+	* docs/plugins/inspect/plugin-dtmf.xml:
+	* docs/plugins/inspect/plugin-dv.xml:
+	* docs/plugins/inspect/plugin-effectv.xml:
+	* docs/plugins/inspect/plugin-equalizer.xml:
+	* docs/plugins/inspect/plugin-flac.xml:
+	* docs/plugins/inspect/plugin-flv.xml:
+	* docs/plugins/inspect/plugin-flxdec.xml:
+	* docs/plugins/inspect/plugin-gdkpixbuf.xml:
+	* docs/plugins/inspect/plugin-goom.xml:
+	* docs/plugins/inspect/plugin-goom2k1.xml:
+	* docs/plugins/inspect/plugin-icydemux.xml:
+	* docs/plugins/inspect/plugin-id3demux.xml:
+	* docs/plugins/inspect/plugin-imagefreeze.xml:
+	* docs/plugins/inspect/plugin-interleave.xml:
+	* docs/plugins/inspect/plugin-isomp4.xml:
+	* docs/plugins/inspect/plugin-jack.xml:
+	* docs/plugins/inspect/plugin-jpeg.xml:
+	* docs/plugins/inspect/plugin-level.xml:
+	* docs/plugins/inspect/plugin-matroska.xml:
+	* docs/plugins/inspect/plugin-mulaw.xml:
+	* docs/plugins/inspect/plugin-multifile.xml:
+	* docs/plugins/inspect/plugin-multipart.xml:
+	* docs/plugins/inspect/plugin-navigationtest.xml:
+	* docs/plugins/inspect/plugin-oss4.xml:
+	* docs/plugins/inspect/plugin-ossaudio.xml:
+	* docs/plugins/inspect/plugin-png.xml:
+	* docs/plugins/inspect/plugin-pulseaudio.xml:
+	* docs/plugins/inspect/plugin-replaygain.xml:
+	* docs/plugins/inspect/plugin-rtp.xml:
+	* docs/plugins/inspect/plugin-rtpmanager.xml:
+	* docs/plugins/inspect/plugin-rtsp.xml:
+	* docs/plugins/inspect/plugin-shapewipe.xml:
+	* docs/plugins/inspect/plugin-shout2send.xml:
+	* docs/plugins/inspect/plugin-smpte.xml:
+	* docs/plugins/inspect/plugin-soup.xml:
+	* docs/plugins/inspect/plugin-spectrum.xml:
+	* docs/plugins/inspect/plugin-speex.xml:
+	* docs/plugins/inspect/plugin-taglib.xml:
+	* docs/plugins/inspect/plugin-udp.xml:
+	* docs/plugins/inspect/plugin-video4linux2.xml:
+	* docs/plugins/inspect/plugin-videobox.xml:
+	* docs/plugins/inspect/plugin-videocrop.xml:
+	* docs/plugins/inspect/plugin-videofilter.xml:
+	* docs/plugins/inspect/plugin-videomixer.xml:
+	* docs/plugins/inspect/plugin-vpx.xml:
+	* docs/plugins/inspect/plugin-wavenc.xml:
+	* docs/plugins/inspect/plugin-wavpack.xml:
+	* docs/plugins/inspect/plugin-wavparse.xml:
+	* docs/plugins/inspect/plugin-ximagesrc.xml:
+	* docs/plugins/inspect/plugin-y4menc.xml:
+	* gst-plugins-good.doap:
+	* win32/common/config.h:
+	  Release 1.9.1
+
+2016-07-06 11:46:26 +0300  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/mt.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:
+	* po/zh_HK.po:
+	* po/zh_TW.po:
+	  Update .po files
 
 2016-07-06 11:22:53 +0300  Steven Hoving <sh@bigbrother.nl>
 
@@ -16526,14 +17518,10 @@
 
 	* ext/pulse/Makefile.am:
 	* ext/pulse/plugin.c:
-	* ext/pulse/pulsedevicemonitor.c:
-	* ext/pulse/pulsedevicemonitor.h:
 	* ext/pulse/pulsedeviceprovider.c:
 	* ext/pulse/pulsedeviceprovider.h:
 	* sys/v4l2/Makefile.am:
 	* sys/v4l2/gstv4l2.c:
-	* sys/v4l2/gstv4l2devicemonitor.c:
-	* sys/v4l2/gstv4l2devicemonitor.h:
 	* sys/v4l2/gstv4l2deviceprovider.c:
 	* sys/v4l2/gstv4l2deviceprovider.h:
 	  Rename GstDeviceMonitor to GstDeviceProvider
@@ -24899,8 +25887,6 @@
 
 2013-09-10 16:44:53 -0600  Seán de Búrca <leftmostcat@gmail.com>
 
-	* gst/videomixer/blendorc-dist.c:
-	* gst/videomixer/blendorc-dist.h:
 	* gst/videomixer/videomixerorc-dist.c:
 	* gst/videomixer/videomixerorc-dist.h:
 	  videomixer: fix build if orc is not installed
@@ -29646,8 +30632,6 @@
 	* sys/osxaudio/gstosxaudiosrc.h:
 	* sys/osxaudio/gstosxcoreaudiocommon.c:
 	* sys/osxaudio/gstosxcoreaudiocommon.h:
-	* sys/osxaudio/gstosxringbuffer.c:
-	* sys/osxaudio/gstosxringbuffer.h:
 	  osxaudio: port to v.1.0
 
 2013-04-16 19:29:48 -0400  Olivier Crête <olivier.crete@collabora.com>
@@ -35467,15 +36451,6 @@
 
 2012-09-16 15:33:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
 
-	* ext/vp8/GstVP8Enc.prs:
-	* ext/vp8/Makefile.am:
-	* ext/vp8/gstvp8dec.c:
-	* ext/vp8/gstvp8dec.h:
-	* ext/vp8/gstvp8enc.c:
-	* ext/vp8/gstvp8enc.h:
-	* ext/vp8/gstvp8utils.c:
-	* ext/vp8/gstvp8utils.h:
-	* ext/vp8/plugin.c:
 	* ext/vpx/GstVP8Enc.prs:
 	* ext/vpx/Makefile.am:
 	* ext/vpx/gstvp8dec.c:
@@ -37259,8 +38234,6 @@
 
 	* configure.ac:
 	* ext/gdk_pixbuf/Makefile.am:
-	* ext/gdk_pixbuf/gstgdkpixbuf.c:
-	* ext/gdk_pixbuf/gstgdkpixbuf.h:
 	* ext/gdk_pixbuf/gstgdkpixbufdec.c:
 	* ext/gdk_pixbuf/gstgdkpixbufdec.h:
 	* ext/gdk_pixbuf/gstgdkpixbufplugin.c:
@@ -46514,7 +47487,6 @@
 
 	* docs/plugins/gst-plugins-good-plugins-docs.sgml:
 	* docs/plugins/gst-plugins-good-plugins-sections.txt:
-	* docs/plugins/inspect/plugin-gstrtpmanager.xml:
 	* docs/plugins/inspect/plugin-rtpmanager.xml:
 	* gst/rtpmanager/gstrtpbin.c:
 	* gst/rtpmanager/gstrtpmanager.c:
@@ -48521,8 +49493,6 @@
 	* ext/soup/gstsoup.c:
 	* ext/soup/gstsouphttpclientsink.c:
 	* ext/soup/gstsouphttpclientsink.h:
-	* ext/soup/gstsouphttpsink.c:
-	* ext/soup/gstsouphttpsink.h:
 	  soup: rename souphttpsink to souphttpclientsink
 	  To avoid confusion, and because we might want a server
 	  sink at some point too.
@@ -49606,8 +50576,6 @@
 	* sys/v4l2/gstv4l2sink.c:
 	* sys/v4l2/gstv4l2videooverlay.c:
 	* sys/v4l2/gstv4l2videooverlay.h:
-	* sys/v4l2/gstv4l2xoverlay.c:
-	* sys/v4l2/gstv4l2xoverlay.h:
 	  v4l2: update for GstXOverlay => GstVideoOverlay rename
 
 2011-08-07 12:23:26 +0200  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
@@ -53057,7 +54025,6 @@
 	* docs/plugins/Makefile.am:
 	* docs/plugins/gst-plugins-good-plugins-docs.sgml:
 	* docs/plugins/inspect/plugin-isomp4.xml:
-	* docs/plugins/inspect/plugin-quicktime.xml:
 	* gst-plugins-good.spec.in:
 	* gst/isomp4/LEGAL:
 	* gst/isomp4/Makefile.am:
@@ -53094,41 +54061,6 @@
 	* gst/isomp4/qtdemux_types.c:
 	* gst/isomp4/qtdemux_types.h:
 	* gst/isomp4/qtpalette.h:
-	* gst/quicktime/LEGAL:
-	* gst/quicktime/Makefile.am:
-	* gst/quicktime/atoms.c:
-	* gst/quicktime/atoms.h:
-	* gst/quicktime/atomsrecovery.c:
-	* gst/quicktime/atomsrecovery.h:
-	* gst/quicktime/descriptors.c:
-	* gst/quicktime/descriptors.h:
-	* gst/quicktime/fourcc.h:
-	* gst/quicktime/ftypcc.h:
-	* gst/quicktime/gstqtmoovrecover.c:
-	* gst/quicktime/gstqtmoovrecover.h:
-	* gst/quicktime/gstqtmux-doc.c:
-	* gst/quicktime/gstqtmux-doc.h:
-	* gst/quicktime/gstqtmux.c:
-	* gst/quicktime/gstqtmux.h:
-	* gst/quicktime/gstqtmuxmap.c:
-	* gst/quicktime/gstqtmuxmap.h:
-	* gst/quicktime/gstrtpxqtdepay.c:
-	* gst/quicktime/gstrtpxqtdepay.h:
-	* gst/quicktime/properties.c:
-	* gst/quicktime/properties.h:
-	* gst/quicktime/qtatomparser.h:
-	* gst/quicktime/qtdemux.c:
-	* gst/quicktime/qtdemux.h:
-	* gst/quicktime/qtdemux.vcproj:
-	* gst/quicktime/qtdemux_dump.c:
-	* gst/quicktime/qtdemux_dump.h:
-	* gst/quicktime/qtdemux_fourcc.h:
-	* gst/quicktime/qtdemux_lang.c:
-	* gst/quicktime/qtdemux_lang.h:
-	* gst/quicktime/qtdemux_types.c:
-	* gst/quicktime/qtdemux_types.h:
-	* gst/quicktime/qtpalette.h:
-	* gst/quicktime/quicktime.c:
 	* po/POTFILES.in:
 	  quicktime: rename plugin to isomp4
 	  https://bugzilla.gnome.org/show_bug.cgi?id=648004
@@ -53893,7 +54825,6 @@
 	* gst/dtmf/Makefile.am:
 	* gst/dtmf/gstdtmfcommon.h:
 	* gst/dtmf/gstdtmfsrc.c:
-	* gst/dtmf/gstrtpdtmfcommon.h:
 	* gst/dtmf/gstrtpdtmfdepay.c:
 	* gst/dtmf/gstrtpdtmfdepay.h:
 	* gst/dtmf/gstrtpdtmfsrc.c:
@@ -55212,23 +56143,6 @@
 	* configure.ac:
 	* docs/plugins/Makefile.am:
 	* docs/plugins/inspect/plugin-quicktime.xml:
-	* gst/qtdemux/LEGAL:
-	* gst/qtdemux/Makefile.am:
-	* gst/qtdemux/gstrtpxqtdepay.c:
-	* gst/qtdemux/gstrtpxqtdepay.h:
-	* gst/qtdemux/qtatomparser.h:
-	* gst/qtdemux/qtdemux.c:
-	* gst/qtdemux/qtdemux.h:
-	* gst/qtdemux/qtdemux.vcproj:
-	* gst/qtdemux/qtdemux_dump.c:
-	* gst/qtdemux/qtdemux_dump.h:
-	* gst/qtdemux/qtdemux_fourcc.h:
-	* gst/qtdemux/qtdemux_lang.c:
-	* gst/qtdemux/qtdemux_lang.h:
-	* gst/qtdemux/qtdemux_types.c:
-	* gst/qtdemux/qtdemux_types.h:
-	* gst/qtdemux/qtpalette.h:
-	* gst/qtdemux/quicktime.c:
 	* gst/quicktime/LEGAL:
 	* gst/quicktime/Makefile.am:
 	* gst/quicktime/gstrtpxqtdepay.c:
@@ -56619,11 +57533,6 @@
 2009-11-28 18:13:31 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
 
 	* gst/aacparse/Makefile.am:
-	* gst/aacparse/gstaacparse.c:
-	* gst/aacparse/gstaacparse.h:
-	* gst/aacparse/gstbaseparse.c:
-	* gst/aacparse/gstbaseparse.h:
-	* gst/aacparse/plugin.c:
 	* gst/audioparsers/Makefile.am:
 	* gst/audioparsers/gstaacparse.c:
 	* gst/audioparsers/gstaacparse.h:
@@ -84515,12 +85424,9 @@
 2009-05-15 17:11:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
 
 	* tests/check/Makefile.am:
-	* tests/check/audiotestsrc.flac:
 	* tests/check/elements/id3demux.c:
 	* tests/check/elements/souphttpsrc.c:
 	* tests/check/pipelines/flacdec.c:
-	* tests/check/test-cert.pem:
-	* tests/check/test-key.pem:
 	* tests/files/Makefile.am:
 	* tests/files/audiotestsrc.flac:
 	* tests/files/test-cert.pem:
@@ -84599,42 +85505,6 @@
 	* gst/deinterlace/tvtime/weavebff.c:
 	* gst/deinterlace/tvtime/weavetff.c:
 	* gst/deinterlace/tvtime/x86-64_macros.inc:
-	* gst/deinterlace2/Makefile.am:
-	* gst/deinterlace2/gstdeinterlace2.c:
-	* gst/deinterlace2/gstdeinterlace2.h:
-	* gst/deinterlace2/tvtime/greedy.c:
-	* gst/deinterlace2/tvtime/greedyh.asm:
-	* gst/deinterlace2/tvtime/greedyh.c:
-	* gst/deinterlace2/tvtime/greedyhmacros.h:
-	* gst/deinterlace2/tvtime/linear.c:
-	* gst/deinterlace2/tvtime/linearblend.c:
-	* gst/deinterlace2/tvtime/mmx.h:
-	* gst/deinterlace2/tvtime/plugins.h:
-	* gst/deinterlace2/tvtime/scalerbob.c:
-	* gst/deinterlace2/tvtime/sse.h:
-	* gst/deinterlace2/tvtime/tomsmocomp.c:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoop0A.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopBottom.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopEdgeA.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopEdgeA8.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddA.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddA2.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddA6.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddAH.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddAH2.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopTop.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopVA.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/SearchLoopVAH.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/StrangeBob.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/TomsMoCompAll.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/TomsMoCompAll2.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/WierdBob.inc:
-	* gst/deinterlace2/tvtime/tomsmocomp/tomsmocompmacros.h:
-	* gst/deinterlace2/tvtime/vfir.c:
-	* gst/deinterlace2/tvtime/weave.c:
-	* gst/deinterlace2/tvtime/weavebff.c:
-	* gst/deinterlace2/tvtime/weavetff.c:
-	* gst/deinterlace2/tvtime/x86-64_macros.inc:
 	  Moved 'deinterlace2' from -bad to -good
 	  And rename it to deinterlace.
 
@@ -87436,29 +88306,6 @@
 
 	* configure.ac:
 	* docs/plugins/Makefile.am:
-	* gst/debug/Makefile.am:
-	* gst/debug/breakmydata.c:
-	* gst/debug/debug.vcproj:
-	* gst/debug/efence.c:
-	* gst/debug/efence.h:
-	* gst/debug/efence.vcproj:
-	* gst/debug/gstdebug.c:
-	* gst/debug/gstnavigationtest.c:
-	* gst/debug/gstnavigationtest.h:
-	* gst/debug/gstnavseek.c:
-	* gst/debug/gstnavseek.h:
-	* gst/debug/gstpushfilesrc.c:
-	* gst/debug/gstpushfilesrc.h:
-	* gst/debug/gsttaginject.c:
-	* gst/debug/gsttaginject.h:
-	* gst/debug/navigationtest.vcproj:
-	* gst/debug/negotiation.c:
-	* gst/debug/progressreport.c:
-	* gst/debug/progressreport.h:
-	* gst/debug/rndbuffersize.c:
-	* gst/debug/testplugin.c:
-	* gst/debug/tests.c:
-	* gst/debug/tests.h:
 	* gst/debugutils/Makefile.am:
 	* gst/debugutils/breakmydata.c:
 	* gst/debugutils/debug.vcproj:
@@ -88484,8 +89331,6 @@
 2009-02-24 14:55:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
 
 	* ext/gconf/Makefile.am:
-	* ext/gconf/gconf.c:
-	* ext/gconf/gconf.h:
 	* ext/gconf/gstgconf.c:
 	* ext/gconf/gstgconf.h:
 	* ext/gconf/gstgconfelements.h:
@@ -90060,11 +90905,8 @@
 	* gst/audiofx/audioecho.c:
 	* gst/audiofx/audioecho.h:
 	* gst/audiofx/audiofx.c:
-	* gst/audiofx/audioreverb.c:
-	* gst/audiofx/audioreverb.h:
 	* tests/check/Makefile.am:
 	* tests/check/elements/audioecho.c:
-	* tests/check/elements/audioreverb.c:
 	  Rename audioreverb to audioecho. Fixes bug #568395.
 	  The element can add an echo and a simple reverb effect to
 	  an audio stream but for a real reverb filter it would need
diff --git a/Makefile.in b/Makefile.in
index b101ed1..1220c47 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -109,6 +109,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -208,7 +209,7 @@
 	$(top_srcdir)/common/release.mak \
 	$(top_srcdir)/common/win32.mak ABOUT-NLS AUTHORS COPYING \
 	ChangeLog INSTALL NEWS README compile config.guess \
-	config.rpath config.sub depcomp install-sh ltmain.sh missing
+	config.rpath config.sub install-sh ltmain.sh missing
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -355,6 +356,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -461,6 +463,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -528,6 +533,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/NEWS b/NEWS
index 4c3baab..027c018 100644
--- a/NEWS
+++ b/NEWS
@@ -1 +1 @@
-This is GStreamer 1.9.1
+This is GStreamer 1.9.2
diff --git a/RELEASE b/RELEASE
index 3517f47..280533c 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,12 +1,13 @@
 
-Release notes for GStreamer Good Plugins 1.9.1
+Release notes for GStreamer Good Plugins 1.9.2
 
-The GStreamer team is pleased to announce the first release of the unstable
-1.9 release series. The 1.9 release series is adding new features on top of
-the 1.0, 1.2, 1.4, 1.6 and 1.8 series and is part of the API and ABI-stable 1.x release
-series of the GStreamer multimedia framework. The unstable 1.9 release series
-will lead to the stable 1.10 release series in the next weeks. Any newly added
-API can still change until that point.
+The GStreamer team is pleased to announce the second release of the unstable
+1.9 release series, which marks the feature freeze for 1.10. The 1.9 release
+series is adding new features on top of the 1.0, 1.2, 1.4, 1.6 and 1.8 series
+and is part of the API and ABI-stable 1.x release series of the GStreamer
+multimedia framework. The unstable 1.9 release series will lead to the stable
+1.10 release series in the next weeks. Any newly added API can still change
+until that point.
 
 
 Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.
@@ -55,53 +56,21 @@
 
 Bugs fixed in this release
      
-      * 762207 : flvmux: Ensure we fallback to DTS when clipping
-      * 767071 : qtdemux: Various SEGMENT event related fixes, including regression fixes
-      * 689460 : Can't playback LPCM data via HTTP after playing back something else
-      * 693911 : souphttpsrc: rewrite using new session/request API
-      * 745187 : JPEG2000 RTP video streaming problem
-      * 749110 : qtdemux: Add the function to get channels and sample rate for AAC
-      * 752462 : multifilesrc: set position as offset from start-index
-      * 753614 : qtdemux: PIFF box parsing support
-      * 753625 : splitmuxsrc: add " format-location " signal as a way to specify arbitrarily named files as input
-      * 755725 : rtpj2kdepay: can't sync to a start code and never outputs
-      * 755937 : v4l2object: probe colorspace supported by device
-      * 758059 : Avimux: Add support for PNG images
-      * 762216 : rtpsession: don't lock while emitting the stats signal
-      * 762217 : rtpsession: Add new signal 'on-app-rtcp'
-      * 762259 : rtpjitterbuffer: Add RFC7273 media clock handling
-      * 762489 : rtpjpegdepay may push buffers before setting output caps
-      * 762860 : sdp: Add new sdpsrc element and some sdpdemux bugfixes
-      * 762988 : rtpjitterbuffer: Performance improvements
-      * 763076 : good plugins: use new gst_element_class_add_static_pad_template()
-      * 763326 : gst-launch of 8-channel deinterleave pipeline stalls
-      * 763869 : deinterlace: Add " auto " fields mode
-      * 763965 : qtdemux: Modify data type of duration in handle_src_query function
-      * 763968 : qtdemux: Add check condition for fail case in get_duration function
-      * 764119 : rtpmanager: Set to initial value for 'ntpns' in get_current_times()
-      * 764769 : matroskamux: make timecodescale configurable
-      * 765583 : ximageutil: shouldn't implement transform if don't support it
-      * 765669 : qtdemux: Incorrect handling of video file which has an internal rate not equal to 1
-      * 766236 : rtp j2k payload/depayload messes up colours in sample pattern
-      * 766381 : v4l2object: use G_SELECTION instead of G_CROP in  gst_v4l2_object_acquire_format
-      * 766383 : v4l2object: fill colorimetry in gst_v4l2_object_acquire_format
-      * 766438 : rtpjitterbuffer: Accept streams with non-TIME segments.
-      * 766561 : gst-plugins-good: fix leaks in various tests
-      * 766718 : souphttpsrc: fix buffer leak when flushing
-      * 766970 : aacparse: sticky event criticals with RTL HD mpeg-ts stream
-      * 767156 : good: fix leaks in tests
-      * 767157 : dvdemux: Pass-through buffer DISCONT flags and recalculate frame offsets when needed
-      * 767194 : matroskademux: preserve seek flags
-      * 767195 : rtpsource: complete warn log with SSRC
-      * 767354 : qtdemux: Handle upstream GAP in push-mode/time segment
-      * 767788 : rtpjitterbuffer: fix RTPJitterBufferMode documentation
-      * 767789 : rtph264pay: Deprecated sprop-parameter-set property
-      * 767817 : Build error: gstrtpj2kpay.c:364:21: error: implicit truncation from 'int' to bitfield changes value from -1 to 65535
-      * 767833 : souphttpsrc: use dynamic blocksize
-      * 767861 : make check fail in " elements/splitmux " if theora or ogg plugins are not available
-      * 768006 : flvdemux: Add support for H263 and MPEG4 part2
-      * 768232 : rtspsrc: protocols aren't reset after rtsp redirect
-      * 767799 : rtspsrc: always fill all srtp encoder properties
+      * 753760 : rtph265: sync against latest spec
+      * 763038 : souphttpsrc: add http error code to element error messages
+      * 767900 : multipartmux is not clearing dts timestamp.
+      * 767950 : qtmux: Add support for writing timecode track
+      * 768440 : flvdemux: Create per-stream tag lists
+      * 768653 : rtph265pay: does not accept array_completeness=1 in codec_data
+      * 768739 : tests: fix bus leaks in -good tests
+      * 768787 : AG_GST_PKG_CONFIG_PATH is not called before using GST_PKG_CONFIG_PATH
+      * 769117 : Regression building master
+      * 769390 : wavparse: Add bitrate and container format tags
+      * 769664 : splitmuxsink: Add option to split at exactly max-size-time
+      * 770285 : rtpbin: fix typo in max-misorder-time property name
+      * 770292 : rtpbin: introduce max-streams property
+      * 770394 : rtph265pay does not set RTP marker bit
+      * 770526 : osxvideo: fatal error: 'QuickTime/QuickTime.h' file not found (macOS Sierra)
 
 ==== Download ====
 
@@ -138,62 +107,32 @@
         
 Contributors to this release
     
-      * Aaron Boxer
-      * Aleix Conchillo Flaqué
-      * Alex Ashley
-      * Andreas Naumann
-      * Aurélien Zanelli
-      * Brad Lackey
       * Carlos Rafael Giani
-      * Damian Ziobro
-      * David Buchmann
-      * Dimitrios Katsaros
       * Edward Hervey
-      * Enrico Jorns
-      * George Kiagiadakis
       * Guillaume Desmottes
       * Havard Graff
-      * Hyunjun Ko
+      * Jan Alexander Steffens (heftig)
       * Jan Schmidt
-      * Jesper Larsen
-      * Jihae Yi
-      * Jimmy Ohn
+      * Jie Jiang
       * Jonas Holmberg
       * Josep Torra
-      * Julien Isorce
-      * Jürgen Slowack
-      * Kieran Bingham
       * Luis de Bethencourt
-      * Mario Sanchez Prada
-      * Mark Nauwelaerts
       * Mats Lindestam
-      * Michael Olbrich
-      * Miguel París Díaz
       * Mikhail Fludkov
-      * Minjae Kim
-      * Nicola Murino
       * Nicolas Dufresne
       * Nirbheek Chauhan
       * Olivier Crête
-      * Paolo Pettinato
-      * Patricia Muscalu
-      * Peter Seiderer
-      * Philipp Zabel
-      * Philippe Normand
-      * Pierre Lamot
-      * Prashant Gotarne
       * Reynaldo H. Verdejo Pinochet
       * Sebastian Dröge
-      * Seungha Yang
-      * Song Bing
       * Stefan Sauer
-      * Steven Hoving
       * Stian Selnes
       * Thiago Santos
       * Thibault Saunier
+      * Thomas Bluemel
+      * Thomas Scheuermann
       * Tim-Philipp Müller
-      * Vineeth TM
+      * Ting-Wei Lan
+      * Vincent Penquerc'h
       * Vivia Nikolaidou
-      * Wim Taymans
-      * Xavier Claessens
+      * Xabier Rodriguez Calvar
  
\ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index 18f8476..8cd7778 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1480,6 +1480,7 @@
 m4_include([common/m4/as-libtool.m4])
 m4_include([common/m4/as-version.m4])
 m4_include([common/m4/ax_create_stdint_h.m4])
+m4_include([common/m4/ax_pthread.m4])
 m4_include([common/m4/gst-arch.m4])
 m4_include([common/m4/gst-args.m4])
 m4_include([common/m4/gst-check.m4])
diff --git a/common/Makefile.in b/common/Makefile.in
index 5cb51dd..a490184 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -97,6 +97,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -315,6 +316,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -421,6 +423,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -488,6 +493,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
index 4beebcf..3f83491 100644
--- a/common/gtk-doc.mak
+++ b/common/gtk-doc.mak
@@ -125,7 +125,7 @@
 	for i in $(DOC_SOURCE_DIR) ; do					\
 	    _source_dir="$${_source_dir} --source-dir=$$i" ;	        \
 	done ;							        \
-	gtkdoc-mkdb --module=$(DOC_MODULE) $$(_source_dir)  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+	gtkdoc-mkdb --module=$(DOC_MODULE) $${_source_dir}  --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
 	@cp ../version.entities xml
 	@touch sgml-build.stamp
 
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 559c954..f1ce0bd 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -97,6 +97,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -255,6 +256,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -361,6 +363,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -428,6 +433,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/config.h.in b/config.h.in
index 045cb16..3b317b6 100644
--- a/config.h.in
+++ b/config.h.in
@@ -269,6 +269,12 @@
 /* Define to 1 if you have the <process.h> header file. */
 #undef HAVE_PROCESS_H
 
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
+
 /* Define to enable pulseaudio plug-in (used by pulseaudio). */
 #undef HAVE_PULSE
 
@@ -404,6 +410,10 @@
 /* directory where plugins are located */
 #undef PLUGINDIR
 
+/* Define to necessary symbol if this constant uses a non-standard name on
+   your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
 /* The size of `char', as computed by sizeof. */
 #undef SIZEOF_CHAR
 
diff --git a/configure b/configure
index 2fc8e65..23a3393 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 Good Plug-ins 1.9.1.
+# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 1.9.2.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='GStreamer Good Plug-ins'
 PACKAGE_TARNAME='gst-plugins-good'
-PACKAGE_VERSION='1.9.1'
-PACKAGE_STRING='GStreamer Good Plug-ins 1.9.1'
+PACKAGE_VERSION='1.9.2'
+PACKAGE_STRING='GStreamer Good Plug-ins 1.9.2'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -932,6 +932,10 @@
 GST_HAVE_MMAP_TRUE
 HAVE_GCC_ASM_FALSE
 HAVE_GCC_ASM_TRUE
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
 LIBRT
 LIBM
 ENABLE_PLUGIN_DOCS_FALSE
@@ -1009,6 +1013,7 @@
 HAVE_CPU_PPC_TRUE
 HAVE_CPU_I386_FALSE
 HAVE_CPU_I386_TRUE
+GST_PKG_CONFIG_PATH
 BUILD_EXPERIMENTAL_FALSE
 BUILD_EXPERIMENTAL_TRUE
 USE_EXPERIMENTAL_FALSE
@@ -1964,7 +1969,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 Good Plug-ins 1.9.1 to adapt to many kinds of systems.
+\`configure' configures GStreamer Good Plug-ins 1.9.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -2037,7 +2042,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.9.1:";;
+     short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.9.2:";;
    esac
   cat <<\_ACEOF
 
@@ -2413,7 +2418,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Good Plug-ins configure 1.9.1
+GStreamer Good Plug-ins configure 1.9.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3224,7 +3229,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 Good Plug-ins $as_me 1.9.1, which was
+It was created by GStreamer Good Plug-ins $as_me 1.9.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4206,7 +4211,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-good'
- VERSION='1.9.1'
+ VERSION='1.9.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4417,9 +4422,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.9.1 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.9.1 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.9.1 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.9.2 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.9.2 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.9.2 | cut -d'.' -f3)
 
 
 
@@ -4430,7 +4435,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.9.1 | cut -d'.' -f4)
+  NANO=$(echo 1.9.2 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -9271,10 +9276,10 @@
 done
 
 
-  GST_CURRENT=901
+  GST_CURRENT=902
   GST_REVISION=0
-  GST_AGE=901
-  GST_LIBVERSION=901:0:901
+  GST_AGE=902
+  GST_LIBVERSION=902:0:902
 
 
 
@@ -13902,8 +13907,8 @@
 
 
 
-GST_REQ=1.9.1
-GSTPB_REQ=1.9.1
+GST_REQ=1.9.2
+GSTPB_REQ=1.9.2
 
 
 
@@ -16675,6 +16680,16 @@
 
 
 
+  GST_PKG_CONFIG_PATH="\$(top_builddir)/pkgconfig"
+  if test "x$PKG_CONFIG_PATH" != "x"; then
+    GST_PKG_CONFIG_PATH="$GST_PKG_CONFIG_PATH:$PKG_CONFIG_PATH"
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH" >&5
+$as_echo "$as_me: Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH" >&6;}
+
+
+
 
 
     case "x${target_cpu}" in
@@ -23712,6 +23727,648 @@
 
 
 
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on Tru64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+        ax_pthread_save_CC="$CC"
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        if test "x$PTHREAD_CC" != "x"; then :
+  CC="$PTHREAD_CC"
+fi
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
+$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = "xno"; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        CC="$ax_pthread_save_CC"
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+#           (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads and
+#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
+#      is present but should not be used directly; and before -mthreads,
+#      because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case $host_os in
+
+        freebsd*)
+
+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+        ;;
+
+        hpux*)
+
+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+        # multi-threading and also sets -lpthread."
+
+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+        ;;
+
+        openedition*)
+
+        # IBM z/OS requires a feature-test macro to be defined in order to
+        # enable POSIX threads at all, so give the user a hint if this is
+        # not set. (We don't define these ourselves, as they can affect
+        # other portions of the system API in unpredictable ways.)
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+             AX_PTHREAD_ZOS_MISSING
+#            endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
+$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
+fi
+rm -f conftest*
+
+        ;;
+
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed. (N.B.: The stubs are missing
+        # pthread_cleanup_push, or rather a function called by this macro,
+        # so we could check for that, but who knows whether they'll stub
+        # that too in a future libc.)  So we'll check first for the
+        # standard Solaris way of linking pthreads (-mt -lpthread).
+
+        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
+        ;;
+esac
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+if test "x$GCC" = "xyes"; then :
+  ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
+fi
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+        darwin* | hpux* | linux* | osf* | solaris*)
+        ax_pthread_check_macro="_REENTRANT"
+        ;;
+
+        aix*)
+        ax_pthread_check_macro="_THREAD_SAFE"
+        ;;
+
+        *)
+        ax_pthread_check_macro="--"
+        ;;
+esac
+if test "x$ax_pthread_check_macro" = "x--"; then :
+  ax_pthread_check_cond=0
+else
+  ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
+fi
+
+# Are we compiling with Clang?
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
+$as_echo_n "checking whether $CC is Clang... " >&6; }
+if ${ax_cv_PTHREAD_CLANG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_CLANG=no
+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
+     if test "x$GCC" = "xyes"; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+#            if defined(__clang__) && defined(__llvm__)
+             AX_PTHREAD_CC_IS_CLANG
+#            endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
+  ax_cv_PTHREAD_CLANG=yes
+fi
+rm -f conftest*
+
+     fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+        # Clang takes -pthread; it has never supported any other flag
+
+        # (Note 1: This will need to be revisited if a system that Clang
+        # supports has POSIX threads in a separate library.  This tends not
+        # to be the way of modern systems, but it's conceivable.)
+
+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
+        # to get POSIX threads support; the API is always present and
+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
+        # -pthread does define _REENTRANT, and while the Darwin headers
+        # ignore this macro, third-party headers might not.)
+
+        PTHREAD_CFLAGS="-pthread"
+        PTHREAD_LIBS=
+
+        ax_pthread_ok=yes
+
+        # However, older versions of Clang make a point of warning the user
+        # that, in an invocation where only linking and no compilation is
+        # taking place, the -pthread option has no effect ("argument unused
+        # during compilation").  They expect -pthread to be passed in only
+        # when source code is being compiled.
+        #
+        # Problem is, this is at odds with the way Automake and most other
+        # C build frameworks function, which is that the same flags used in
+        # compilation (CFLAGS) are also used in linking.  Many systems
+        # supported by AX_PTHREAD require exactly this for POSIX threads
+        # support, and in fact it is often not straightforward to specify a
+        # flag that is used only in the compilation phase and not in
+        # linking.  Such a scenario is extremely rare in practice.
+        #
+        # Even though use of the -pthread flag in linking would only print
+        # a warning, this can be a nuisance for well-run software projects
+        # that build with -Werror.  So if the active version of Clang has
+        # this misfeature, we search for an option to squash it.
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
+$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
+if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+             # Create an alternate version of $ac_link that compiles and
+             # links in two steps (.c -> .o, .o -> exe) instead of one
+             # (.c -> exe), because the warning occurs only in the second
+             # step
+             ax_pthread_save_ac_link="$ac_link"
+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+             ax_pthread_save_CFLAGS="$CFLAGS"
+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+                if test "x$ax_pthread_try" = "xunknown"; then :
+  break
+fi
+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+                ac_link="$ax_pthread_save_ac_link"
+                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_link="$ax_pthread_2step_ac_link"
+                     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+             done
+             ac_link="$ax_pthread_save_ac_link"
+             CFLAGS="$ax_pthread_save_CFLAGS"
+             if test "x$ax_pthread_try" = "x"; then :
+  ax_pthread_try=no
+fi
+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
+
+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+                no | unknown) ;;
+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+        esac
+
+fi # $ax_pthread_clang = yes
+
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+        case $ax_pthread_try_flag in
+                none)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+                ;;
+
+                -mt,pthread)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
+$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
+                PTHREAD_CFLAGS="-mt"
+                PTHREAD_LIBS="-lpthread"
+                ;;
+
+                -*)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
+$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
+                ;;
+
+                pthread-config)
+                # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ax_pthread_config"; then
+  ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ax_pthread_config="yes"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
+fi
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+                if test "x$ax_pthread_config" = "xno"; then :
+  continue
+fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
+$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
+                ;;
+        esac
+
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+#                       if $ax_pthread_check_cond
+#                        error "$ax_pthread_check_macro must be defined"
+#                       endif
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+        if test "x$ax_pthread_ok" = "xyes"; then :
+  break
+fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = "xyes"; then
+        ax_pthread_save_CFLAGS="$CFLAGS"
+        ax_pthread_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $ax_pthread_attr; return attr /* ; */
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+             done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
+$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
+        if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+               test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
+_ACEOF
+
+               ax_pthread_joinable_attr_defined=yes
+
+fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
+$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
+if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ax_cv_PTHREAD_SPECIAL_FLAGS=no
+             case $host_os in
+             solaris*)
+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+             ;;
+             esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
+$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
+        if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+               test "x$ax_pthread_special_flags_added" != "xyes"; then :
+  PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+               ax_pthread_special_flags_added=yes
+fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+  ax_cv_PTHREAD_PRIO_INHERIT=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+        if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+               test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
+
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+
+               ax_pthread_prio_inherit_defined=yes
+
+fi
+
+        CFLAGS="$ax_pthread_save_CFLAGS"
+        LIBS="$ax_pthread_save_LIBS"
+
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != "xyes"; then
+            case $host_os in
+                aix*)
+                case "x/$CC" in #(
+  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+    #handle absolute path differently from PATH based program lookup
+                     case "x$CC" in #(
+  x/*) :
+    if as_fn_executable_p ${CC}_r; then :
+  PTHREAD_CC="${CC}_r"
+fi ;; #(
+  *) :
+    for ac_prog in ${CC}_r
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$PTHREAD_CC"; then
+  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PTHREAD_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+                ;;
+            esac
+        fi
+fi
+
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+
+
+
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test "x$ax_pthread_ok" = "xyes"; then
+
+$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
+
+        :
+else
+        ax_pthread_ok=no
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
 if ${ac_cv_header_stdc+:} false; then :
@@ -30423,12 +31080,27 @@
   fi
 fi
 
+case $host in #(
+  *-*linux*) :
+    case $host_cpu in #(
+  arm*) :
+
+          enable_v4l2_probe="yes" ;; #(
+  aarch64*) :
+
+          enable_v4l2_probe="yes" ;; #(
+  *) :
+     ;;
+esac ;; #(
+  *) :
+     ;;
+esac
 # Check whether --enable-v4l2-probe was given.
 if test "${enable_v4l2_probe+set}" = set; then :
   enableval=$enable_v4l2_probe;
 fi
 
-if test "x$enable_v4l2_probe" = xyes; then
+if test "x$enable_v4l2_probe" = "xyes"; then
 
 $as_echo "#define GST_V4L2_ENABLE_PROBE 1" >>confdefs.h
 
@@ -36873,7 +37545,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer Good Plug-ins $as_me 1.9.1, which was
+This file was extended by GStreamer Good Plug-ins $as_me 1.9.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -36939,7 +37611,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 Good Plug-ins config.status 1.9.1
+GStreamer Good Plug-ins config.status 1.9.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -38282,7 +38954,6 @@
     cat <<_LT_EOF >> "$cfgfile"
 #! $SHELL
 # Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 
 # Provide generalized library-building support services.
diff --git a/configure.ac b/configure.ac
index 12d57a9..9c9d043 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/pre
-AC_INIT([GStreamer Good Plug-ins],[1.9.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good])
+AC_INIT([GStreamer Good Plug-ins],[1.9.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good])
 
 AG_GST_INIT
 
@@ -43,11 +43,11 @@
   [GStreamer API Version])
 
 AG_GST_LIBTOOL_PREPARE
-AS_LIBTOOL(GST, 901, 0, 901)
+AS_LIBTOOL(GST, 902, 0, 902)
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.9.1
-GSTPB_REQ=1.9.1
+GST_REQ=1.9.2
+GSTPB_REQ=1.9.2
 
 dnl *** autotools stuff ****
 
@@ -85,6 +85,8 @@
 
 AG_GST_ARG_ENABLE_EXPERIMENTAL
 
+AG_GST_PKG_CONFIG_PATH
+
 dnl *** checks for platform ***
 
 dnl * hardware/architecture *
@@ -143,6 +145,9 @@
   ])
 ])
 
+dnl check for pthreads
+AX_PTHREAD
+
 dnl *** checks for header files ***
 
 dnl check if we have ANSI C header files
@@ -571,12 +576,19 @@
 fi
 
 dnl Allow enabling v4l2 device probing
+AS_CASE([$host],
+    [*-*linux*],
+      [AS_CASE([$host_cpu],
+        [arm*], [
+          enable_v4l2_probe="yes"],
+        [aarch64*], [
+          enable_v4l2_probe="yes"])])
 AC_ARG_ENABLE(
   v4l2-probe,
   AC_HELP_STRING(
     [--enable-v4l2-probe],
     [enable V4L2 plugin to probe devices @<:@default=no@:>@]))
-if test "x$enable_v4l2_probe" = xyes; then
+if test "x$enable_v4l2_probe" = "xyes"; then
   AC_DEFINE(GST_V4L2_ENABLE_PROBE, 1,
     [Define if Video4Linux probe shall be run at plugin load])
 fi
diff --git a/docs/Makefile.in b/docs/Makefile.in
index ce70b0a..c36a67b 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -97,6 +97,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -314,6 +315,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -420,6 +422,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -487,6 +492,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index 17e5ac8..634f9de 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -114,6 +114,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -274,6 +275,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -380,6 +382,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -447,6 +452,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/docs/plugins/gst-plugins-good-plugins.args b/docs/plugins/gst-plugins-good-plugins.args
index 252d228..28c1859 100644
--- a/docs/plugins/gst-plugins-good-plugins.args
+++ b/docs/plugins/gst-plugins-good-plugins.args
@@ -1015,7 +1015,7 @@
 <FLAGS>rw</FLAGS>
 <NICK>User Agent</NICK>
 <BLURB>The User-Agent string to send to the server.</BLURB>
-<DEFAULT>"GStreamer/1.9.1"</DEFAULT>
+<DEFAULT>"GStreamer/1.9.2"</DEFAULT>
 </ARG>
 
 <ARG>
@@ -2234,7 +2234,7 @@
 <RANGE></RANGE>
 <FLAGS>rwx</FLAGS>
 <NICK>method</NICK>
-<BLURB>method.</BLURB>
+<BLURB>method (deprecated, use video-direction instead).</BLURB>
 <DEFAULT>Identity (no rotation)</DEFAULT>
 </ARG>
 
@@ -20559,6 +20559,16 @@
 </ARG>
 
 <ARG>
+<NAME>GstRtpBin::max-streams</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max Streams</NICK>
+<BLURB>The maximum number of streams to create for one session.</BLURB>
+<DEFAULT>4294967295</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstRtpJitterBuffer::do-lost</NAME>
 <TYPE>gboolean</TYPE>
 <RANGE></RANGE>
@@ -23889,6 +23899,16 @@
 </ARG>
 
 <ARG>
+<NAME>GstSplitMuxSink::send-keyframe-requests</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Request keyframes at max-size-time</NICK>
+<BLURB>Request a keyframe every max-size-time ns to try splitting at that point. Needs max-size-bytes to be 0 in order to be effective.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstRtpVP9Pay::picture-id-mode</NAME>
 <TYPE>GstVP9RTPPayMode</TYPE>
 <RANGE></RANGE>
diff --git a/docs/plugins/gst-plugins-good-plugins.hierarchy b/docs/plugins/gst-plugins-good-plugins.hierarchy
index f6e2da5..327d11d 100644
--- a/docs/plugins/gst-plugins-good-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-good-plugins.hierarchy
@@ -358,4 +358,5 @@
   GstTocSetter
   GstTuner
   GstURIHandler
+  GstVideoDirection
   GstVideoOrientation
diff --git a/docs/plugins/gst-plugins-good-plugins.interfaces b/docs/plugins/gst-plugins-good-plugins.interfaces
index a065787..8b96cce 100644
--- a/docs/plugins/gst-plugins-good-plugins.interfaces
+++ b/docs/plugins/gst-plugins-good-plugins.interfaces
@@ -97,6 +97,7 @@
 GstVideoBalance GstColorBalance
 GstVideoBalance GstImplementsInterface GstColorBalance
 GstVideoEncoder GstPreset
+GstVideoFlip GstVideoDirection
 GstVideoMixer GstChildProxy
 GstVideoMixer2 GstChildProxy
 GstWavEnc GstTagSetter GstTocSetter
diff --git a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
index af5bff1..cf8db40 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
@@ -869,6 +869,7 @@
     <keyword type="property" name="The “max-rtcp-rtp-time-diff” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--max-rtcp-rtp-time-diff"/>
     <keyword type="property" name="The “rtcp-sync-send-time” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rtcp-sync-send-time"/>
     <keyword type="property" name="The “rfc7273-sync” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rfc7273-sync"/>
+    <keyword type="property" name="The “max-streams” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--max-streams"/>
     <keyword type="signal" name="The “clear-pt-map” signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-clear-pt-map"/>
     <keyword type="signal" name="The “get-internal-session” signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-get-internal-session"/>
     <keyword type="signal" name="The “on-bye-ssrc” signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-bye-ssrc"/>
@@ -1252,6 +1253,7 @@
     <keyword type="property" name="The “muxer” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--muxer"/>
     <keyword type="property" name="The “sink” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--sink"/>
     <keyword type="property" name="The “max-files” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--max-files"/>
+    <keyword type="property" name="The “send-keyframe-requests” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--send-keyframe-requests"/>
     <keyword type="signal" name="The “format-location” signal" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink-format-location"/>
     <keyword type="struct" name="struct GstSplitMuxSrc" link="gst-plugins-good-plugins-splitmuxsrc.html#GstSplitMuxSrc-struct"/>
     <keyword type="property" name="The “location” property" link="gst-plugins-good-plugins-splitmuxsrc.html#GstSplitMuxSrc--location"/>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
index 8ac03f7..1d3afc7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
@@ -150,27 +150,27 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td>audio/ms-gsm</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)2</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vorbis</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]</td>
+<td> audio/x-ac3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
@@ -178,75 +178,75 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/mpeg, mpegversion=(int)4</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-alaw</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-mulaw</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]</td>
+<td> audio/x-truespeech</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vnd.sony.atrac3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-voxware, voxwaretype=(int)117</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk4</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/AMR, rate=(int)8000, channels=(int)1</td>
+<td> audio/AMR</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/AMR-WB, rate=(int)16000, channels=(int)1</td>
+<td> audio/AMR-WB</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
index 5700a60..5a83d4b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
index 0cf89a3..3b1e3c3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
index f119311..073c67b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
index d9332ac..ff6b1cd 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
index 9641e38..3322980 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
index 09ca302..6c47372 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
index 355bbe9..20caa38 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html
index f3d4c89..3ecc342 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
index 2746b94..1082d2d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
index cecabea..1ba16f1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
index 811ed79..5b64930 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
index cf32874..c3af9e4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
index 1b1355a..da063b9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
index 8de1669..c83682f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
index f0917dc..ac8962d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
index c5b2ffc..109e7cc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html
index 51c54e9..55f7555 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
index 9ff920a..2943dcb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
index 3912dfd..ecc25cc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
index f44701b..476b4ac 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
index 520a100..dc0ed5e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
index ec1b12d..3c275ca 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
index b2f9296..a9dc9f9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
index 0b631d5..9df8607 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
index 3510297..28e4ecc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
index d84e50e..e0d5d8a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
index 489059a..443f39a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
index 5fe9366..e1eb976 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
index f89e55f..e66daaa 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
index 83dff22..16d1ffe 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
index 1339799..dcc9120 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
index 00b05e5..79f4f82 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
index 354e4cd..3020851 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
index bc0c2b3..ecd2797 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
index 339ee52..2f5ee33 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
index cc1aee6..73a58dd 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
index 94d3b0a..5f1d9b3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
index a004485..b294df2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
index a063412..a5b2cdf 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
index 794e694..36e5979 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
index 7857fca..f617844 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
index d8b29b3..8b784c5 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
index 368e406..2cabb01 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
index b937609..d716313 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
index 07790bd..04f0720 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -209,11 +209,11 @@
 </tr>
 <tr>
 <td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-rtph265depay.html" title="rtph265depay">rtph265depay</a></span></p></td>
-<td>Extracts H265 video from RTP packets (draft-ietf-payload-rtp-h265-03.txt)</td>
+<td>Extracts H265 video from RTP packets (RFC 7798)</td>
 </tr>
 <tr>
 <td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-rtph265pay.html" title="rtph265pay">rtph265pay</a></span></p></td>
-<td>Payload-encode H265 video into RTP packets (based on draft-ietf-payload-rtp-h265-03.txt)</td>
+<td>Payload-encode H265 video into RTP packets (RFC 7798)</td>
 </tr>
 <tr>
 <td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-rtpilbcdepay.html" title="rtpilbcdepay">rtpilbcdepay</a></span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
index cd7158b..1246100 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
index 174ad98..b6a8ae9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
index 4b9d114..f3fa7ab 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
index c94a969..0acb0b3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
index 5a906d0..3cf68af 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
index 0e73863..4054e48 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
index 3278778..f97cf3f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
index e56a005..52db47c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
index 313d8ad..927bc96 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
index 149c14c..d5e9775 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
index 2fc7837..6c2625c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
index 26ee4e8..2e22c0e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
index a679e67..921794b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
index 3f53c6f..47ae926 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
index f83bf93..411b74e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html
index 59dbe54..623a4c1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
index ad80180..f3c3d3a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
index c0aa8ce..85ae4f2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
index 097d435..f10d12c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
index e803aff..327d5b1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
index d73b18a..92718e9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
@@ -41,7 +41,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
index 508488c..842020c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
@@ -145,6 +145,11 @@
 <td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rfc7273-sync" title="The “rfc7273-sync” property">rfc7273-sync</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--max-streams" title="The “max-streams” property">max-streams</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -843,6 +848,14 @@
 <p>Flags: Read / Write</p>
 <p>Default value: FALSE</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstRtpBin--max-streams"></a><h3>The <code class="literal">“max-streams”</code> property</h3>
+<pre class="programlisting">  “max-streams”              <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
+<p>The maximum number of streams to create for one session.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 4294967295</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-rtpbin.signal-details"></a><h2>Signal Details</h2>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html b/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html
index b4423c2..72e7868 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html
@@ -131,7 +131,11 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</td>
+<td>video/x-h265, stream-format=(string)hvc1, alignment=(string)au</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</td>
 </tr>
 </tbody>
 </table></div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
index fc52963..44decdf 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
@@ -693,7 +693,7 @@
 <pre class="programlisting">  “user-agent”               <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
 <p>The User-Agent string to send to the server.</p>
 <p>Flags: Read / Write</p>
-<p>Default value: "GStreamer/1.9.1"</p>
+<p>Default value: "GStreamer/1.9.2"</p>
 </div>
 <hr>
 <div class="refsect2">
diff --git a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html
index ba61c2d..6bbd430 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html
@@ -82,6 +82,11 @@
 <td class="property_name"><a class="link" href="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--max-files" title="The “max-files” property">max-files</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--send-keyframe-requests" title="The “send-keyframe-requests” property">send-keyframe-requests</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -334,6 +339,14 @@
 <p>Flags: Read / Write</p>
 <p>Default value: 0</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstSplitMuxSink--send-keyframe-requests"></a><h3>The <code class="literal">“send-keyframe-requests”</code> property</h3>
+<pre class="programlisting">  “send-keyframe-requests”   <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Request a keyframe every max-size-time ns to try splitting at that point. Needs max-size-bytes to be 0 in order to be effective.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-good-plugins-splitmuxsink.signal-details"></a><h2>Signal Details</h2>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
index 1b9b53d..69272b4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
@@ -16,7 +16,8 @@
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
                   <a href="#gst-plugins-good-plugins-videoflip.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-good-plugins-videoflip.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-good-plugins-videoflip.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-good-plugins-videoflip.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-good-plugins-videoflip.properties" class="shortcut">Properties</a></span>
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -79,10 +80,16 @@
 </pre>
 </div>
 <div class="refsect1">
+<a name="gst-plugins-good-plugins-videoflip.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstVideoFlip implements
+ GstVideoDirection.</p>
+</div>
+<div class="refsect1">
 <a name="gst-plugins-good-plugins-videoflip.description"></a><h2>Description</h2>
 <p>Flips and rotates video.</p>
 <div class="refsect2">
-<a name="id-1.2.254.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.254.8.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.254.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.254.8.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -124,7 +131,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.254.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.254.8.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -273,7 +280,7 @@
 <div class="refsect2">
 <a name="GstVideoFlip--method"></a><h3>The <code class="literal">“method”</code> property</h3>
 <pre class="programlisting">  “method”                   <a class="link" href="gst-plugins-good-plugins-videoflip.html#GstVideoFlipMethod" title="enum GstVideoFlipMethod"><span class="type">GstVideoFlipMethod</span></a></pre>
-<p>method.</p>
+<p>method (deprecated, use video-direction instead).</p>
 <p>Flags: Read / Write / Construct</p>
 <p>Default value: Identity (no rotation)</p>
 </div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
index db55742..85f71c3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
@@ -175,27 +175,27 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td>audio/ms-gsm</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)2</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vorbis</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]</td>
+<td> audio/x-ac3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
@@ -203,75 +203,75 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/mpeg, mpegversion=(int)4</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-alaw</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-mulaw</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]</td>
+<td> audio/x-truespeech</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vnd.sony.atrac3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-voxware, voxwaretype=(int)117</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk4</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk3</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/AMR, rate=(int)8000, channels=(int)1</td>
+<td> audio/AMR</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> audio/AMR-WB, rate=(int)16000, channels=(int)1</td>
+<td> audio/AMR-WB</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
diff --git a/docs/plugins/html/home.png b/docs/plugins/html/home.png
index 9346b33..4bf6d92 100644
--- a/docs/plugins/html/home.png
+++ b/docs/plugins/html/home.png
Binary files differ
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 4a3c8ca..3e1557d 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 Good Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Good Plugins 1.0 (1.9.1)
+      for GStreamer Good Plugins 1.0 (1.9.2)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/</a>.
     </p></div>
diff --git a/docs/plugins/html/left-insensitive.png b/docs/plugins/html/left-insensitive.png
index 3269393..82cba0a 100644
--- a/docs/plugins/html/left-insensitive.png
+++ b/docs/plugins/html/left-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/left.png b/docs/plugins/html/left.png
index 2abde03..8444ec0 100644
--- a/docs/plugins/html/left.png
+++ b/docs/plugins/html/left.png
Binary files differ
diff --git a/docs/plugins/html/right-insensitive.png b/docs/plugins/html/right-insensitive.png
index 4c95785..7a90b99 100644
--- a/docs/plugins/html/right-insensitive.png
+++ b/docs/plugins/html/right-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/right.png b/docs/plugins/html/right.png
index 76260ec..55f3359 100644
--- a/docs/plugins/html/right.png
+++ b/docs/plugins/html/right.png
Binary files differ
diff --git a/docs/plugins/html/up-insensitive.png b/docs/plugins/html/up-insensitive.png
index f404986..fdb8cc7 100644
--- a/docs/plugins/html/up-insensitive.png
+++ b/docs/plugins/html/up-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/up.png b/docs/plugins/html/up.png
index 80b4b37..c1aad52 100644
--- a/docs/plugins/html/up.png
+++ b/docs/plugins/html/up.png
Binary files differ
diff --git a/docs/plugins/inspect/plugin-1394.xml b/docs/plugins/inspect/plugin-1394.xml
index a977d77..ad9310a 100644
--- a/docs/plugins/inspect/plugin-1394.xml
+++ b/docs/plugins/inspect/plugin-1394.xml
@@ -3,7 +3,7 @@
   <description>Source for video data via IEEE1394 interface</description>
   <filename>../../ext/raw1394/.libs/libgst1394.so</filename>
   <basename>libgst1394.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-aasink.xml b/docs/plugins/inspect/plugin-aasink.xml
index e991b3e..6f201fb 100644
--- a/docs/plugins/inspect/plugin-aasink.xml
+++ b/docs/plugins/inspect/plugin-aasink.xml
@@ -3,7 +3,7 @@
   <description>ASCII Art video sink</description>
   <filename>../../ext/aalib/.libs/libgstaasink.so</filename>
   <basename>libgstaasink.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alaw.xml b/docs/plugins/inspect/plugin-alaw.xml
index 666fcfe..601e798 100644
--- a/docs/plugins/inspect/plugin-alaw.xml
+++ b/docs/plugins/inspect/plugin-alaw.xml
@@ -3,7 +3,7 @@
   <description>ALaw audio conversion routines</description>
   <filename>../../gst/law/.libs/libgstalaw.so</filename>
   <basename>libgstalaw.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alpha.xml b/docs/plugins/inspect/plugin-alpha.xml
index 7348446..f48da93 100644
--- a/docs/plugins/inspect/plugin-alpha.xml
+++ b/docs/plugins/inspect/plugin-alpha.xml
@@ -3,7 +3,7 @@
   <description>adds an alpha channel to video - constant or via chroma-keying</description>
   <filename>../../gst/alpha/.libs/libgstalpha.so</filename>
   <basename>libgstalpha.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alphacolor.xml b/docs/plugins/inspect/plugin-alphacolor.xml
index 2b486ad..2e3298e 100644
--- a/docs/plugins/inspect/plugin-alphacolor.xml
+++ b/docs/plugins/inspect/plugin-alphacolor.xml
@@ -3,7 +3,7 @@
   <description>RGBA from/to AYUV colorspace conversion preserving the alpha channel</description>
   <filename>../../gst/alpha/.libs/libgstalphacolor.so</filename>
   <basename>libgstalphacolor.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-apetag.xml b/docs/plugins/inspect/plugin-apetag.xml
index 92ca6fa..e3757dc 100644
--- a/docs/plugins/inspect/plugin-apetag.xml
+++ b/docs/plugins/inspect/plugin-apetag.xml
@@ -3,7 +3,7 @@
   <description>APEv1/2 tag reader</description>
   <filename>../../gst/apetag/.libs/libgstapetag.so</filename>
   <basename>libgstapetag.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiofx.xml b/docs/plugins/inspect/plugin-audiofx.xml
index 96a2d67..36f2356 100644
--- a/docs/plugins/inspect/plugin-audiofx.xml
+++ b/docs/plugins/inspect/plugin-audiofx.xml
@@ -3,7 +3,7 @@
   <description>Audio effects plugin</description>
   <filename>../../gst/audiofx/.libs/libgstaudiofx.so</filename>
   <basename>libgstaudiofx.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioparsers.xml b/docs/plugins/inspect/plugin-audioparsers.xml
index e3c125c..313680b 100644
--- a/docs/plugins/inspect/plugin-audioparsers.xml
+++ b/docs/plugins/inspect/plugin-audioparsers.xml
@@ -3,7 +3,7 @@
   <description>Parsers for various audio formats</description>
   <filename>../../gst/audioparsers/.libs/libgstaudioparsers.so</filename>
   <basename>libgstaudioparsers.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-auparse.xml b/docs/plugins/inspect/plugin-auparse.xml
index d90b9c8..553b354 100644
--- a/docs/plugins/inspect/plugin-auparse.xml
+++ b/docs/plugins/inspect/plugin-auparse.xml
@@ -3,7 +3,7 @@
   <description>parses au streams</description>
   <filename>../../gst/auparse/.libs/libgstauparse.so</filename>
   <basename>libgstauparse.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-autodetect.xml b/docs/plugins/inspect/plugin-autodetect.xml
index e26af7c..070d3d4 100644
--- a/docs/plugins/inspect/plugin-autodetect.xml
+++ b/docs/plugins/inspect/plugin-autodetect.xml
@@ -3,7 +3,7 @@
   <description>Plugin contains auto-detection plugins for video/audio in- and outputs</description>
   <filename>../../gst/autodetect/.libs/libgstautodetect.so</filename>
   <basename>libgstautodetect.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-avi.xml b/docs/plugins/inspect/plugin-avi.xml
index e554861..c89e071 100644
--- a/docs/plugins/inspect/plugin-avi.xml
+++ b/docs/plugins/inspect/plugin-avi.xml
@@ -3,7 +3,7 @@
   <description>AVI stream handling</description>
   <filename>../../gst/avi/.libs/libgstavi.so</filename>
   <basename>libgstavi.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
@@ -26,7 +26,7 @@
           <name>audio_%u</name>
           <direction>source</direction>
           <presence>sometimes</presence>
-          <details>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]; audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]; audio/x-dts; audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]; audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/AMR, rate=(int)8000, channels=(int)1; audio/AMR-WB, rate=(int)16000, channels=(int)1; audio/x-siren; application/x-ogg-avi; audio/x-avi-unknown</details>
+          <details>audio/ms-gsm; audio/mpeg, mpegversion=(int)1, layer=(int)3; audio/mpeg, mpegversion=(int)1, layer=(int)2; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved; audio/x-vorbis; audio/x-ac3; audio/x-dts; audio/mpeg, mpegversion=(int)4; audio/x-alaw; audio/x-mulaw; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved; audio/x-voxware, voxwaretype=(int)117; audio/x-adpcm, layout=(string)dk4; audio/x-adpcm, layout=(string)dk3; audio/x-adpcm, layout=(string)dvi; audio/AMR; audio/AMR-WB; audio/x-siren; application/x-ogg-avi; audio/x-avi-unknown</details>
         </caps>
         <caps>
           <name>subpicture_%u</name>
diff --git a/docs/plugins/inspect/plugin-cacasink.xml b/docs/plugins/inspect/plugin-cacasink.xml
index e847c48..b60eaca 100644
--- a/docs/plugins/inspect/plugin-cacasink.xml
+++ b/docs/plugins/inspect/plugin-cacasink.xml
@@ -3,7 +3,7 @@
   <description>Colored ASCII Art video sink</description>
   <filename>../../ext/libcaca/.libs/libgstcacasink.so</filename>
   <basename>libgstcacasink.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-cairo.xml b/docs/plugins/inspect/plugin-cairo.xml
index 626469f..25754f4 100644
--- a/docs/plugins/inspect/plugin-cairo.xml
+++ b/docs/plugins/inspect/plugin-cairo.xml
@@ -3,7 +3,7 @@
   <description>Cairo-based elements</description>
   <filename>../../ext/cairo/.libs/libgstcairo.so</filename>
   <basename>libgstcairo.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-cutter.xml b/docs/plugins/inspect/plugin-cutter.xml
index 26f94ee..556cad4 100644
--- a/docs/plugins/inspect/plugin-cutter.xml
+++ b/docs/plugins/inspect/plugin-cutter.xml
@@ -3,7 +3,7 @@
   <description>Audio Cutter to split audio into non-silent bits</description>
   <filename>../../gst/cutter/.libs/libgstcutter.so</filename>
   <basename>libgstcutter.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-debug.xml b/docs/plugins/inspect/plugin-debug.xml
index c34eb43..8baf539 100644
--- a/docs/plugins/inspect/plugin-debug.xml
+++ b/docs/plugins/inspect/plugin-debug.xml
@@ -3,7 +3,7 @@
   <description>elements for testing and debugging</description>
   <filename>../../gst/debugutils/.libs/libgstdebug.so</filename>
   <basename>libgstdebug.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-deinterlace.xml b/docs/plugins/inspect/plugin-deinterlace.xml
index 989b61d..0d98e67 100644
--- a/docs/plugins/inspect/plugin-deinterlace.xml
+++ b/docs/plugins/inspect/plugin-deinterlace.xml
@@ -3,7 +3,7 @@
   <description>Deinterlacer</description>
   <filename>../../gst/deinterlace/.libs/libgstdeinterlace.so</filename>
   <basename>libgstdeinterlace.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtmf.xml b/docs/plugins/inspect/plugin-dtmf.xml
index 5da71bc..496f1ae 100644
--- a/docs/plugins/inspect/plugin-dtmf.xml
+++ b/docs/plugins/inspect/plugin-dtmf.xml
@@ -3,7 +3,7 @@
   <description>DTMF plugins</description>
   <filename>../../gst/dtmf/.libs/libgstdtmf.so</filename>
   <basename>libgstdtmf.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dv.xml b/docs/plugins/inspect/plugin-dv.xml
index bb08a6e..238bdd0 100644
--- a/docs/plugins/inspect/plugin-dv.xml
+++ b/docs/plugins/inspect/plugin-dv.xml
@@ -3,7 +3,7 @@
   <description>DV demuxer and decoder based on libdv (libdv.sf.net)</description>
   <filename>../../ext/dv/.libs/libgstdv.so</filename>
   <basename>libgstdv.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-effectv.xml b/docs/plugins/inspect/plugin-effectv.xml
index ac36bb1..6beb213 100644
--- a/docs/plugins/inspect/plugin-effectv.xml
+++ b/docs/plugins/inspect/plugin-effectv.xml
@@ -3,7 +3,7 @@
   <description>effect plugins from the effectv project</description>
   <filename>../../gst/effectv/.libs/libgsteffectv.so</filename>
   <basename>libgsteffectv.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-equalizer.xml b/docs/plugins/inspect/plugin-equalizer.xml
index 1cd572b..d240f84 100644
--- a/docs/plugins/inspect/plugin-equalizer.xml
+++ b/docs/plugins/inspect/plugin-equalizer.xml
@@ -3,7 +3,7 @@
   <description>GStreamer audio equalizers</description>
   <filename>../../gst/equalizer/.libs/libgstequalizer.so</filename>
   <basename>libgstequalizer.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-flac.xml b/docs/plugins/inspect/plugin-flac.xml
index f5ac54b..2a20d4a 100644
--- a/docs/plugins/inspect/plugin-flac.xml
+++ b/docs/plugins/inspect/plugin-flac.xml
@@ -3,7 +3,7 @@
   <description>The FLAC Lossless compressor Codec</description>
   <filename>../../ext/flac/.libs/libgstflac.so</filename>
   <basename>libgstflac.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-flv.xml b/docs/plugins/inspect/plugin-flv.xml
index ffa0d8e..fded088 100644
--- a/docs/plugins/inspect/plugin-flv.xml
+++ b/docs/plugins/inspect/plugin-flv.xml
@@ -3,7 +3,7 @@
   <description>FLV muxing and demuxing plugin</description>
   <filename>../../gst/flv/.libs/libgstflv.so</filename>
   <basename>libgstflv.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-flxdec.xml b/docs/plugins/inspect/plugin-flxdec.xml
index 96de942..54ce679 100644
--- a/docs/plugins/inspect/plugin-flxdec.xml
+++ b/docs/plugins/inspect/plugin-flxdec.xml
@@ -3,7 +3,7 @@
   <description>FLC/FLI/FLX video decoder</description>
   <filename>../../gst/flx/.libs/libgstflxdec.so</filename>
   <basename>libgstflxdec.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gdkpixbuf.xml b/docs/plugins/inspect/plugin-gdkpixbuf.xml
index e47af9a..6913e93 100644
--- a/docs/plugins/inspect/plugin-gdkpixbuf.xml
+++ b/docs/plugins/inspect/plugin-gdkpixbuf.xml
@@ -3,7 +3,7 @@
   <description>GdkPixbuf-based image decoder, overlay and sink</description>
   <filename>../../ext/gdk_pixbuf/.libs/libgstgdkpixbuf.so</filename>
   <basename>libgstgdkpixbuf.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-goom.xml b/docs/plugins/inspect/plugin-goom.xml
index 293d32e..c9a8022 100644
--- a/docs/plugins/inspect/plugin-goom.xml
+++ b/docs/plugins/inspect/plugin-goom.xml
@@ -3,7 +3,7 @@
   <description>GOOM visualization filter</description>
   <filename>../../gst/goom/.libs/libgstgoom.so</filename>
   <basename>libgstgoom.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-goom2k1.xml b/docs/plugins/inspect/plugin-goom2k1.xml
index 1964a72..1c967ef 100644
--- a/docs/plugins/inspect/plugin-goom2k1.xml
+++ b/docs/plugins/inspect/plugin-goom2k1.xml
@@ -3,7 +3,7 @@
   <description>GOOM 2k1 visualization filter</description>
   <filename>../../gst/goom2k1/.libs/libgstgoom2k1.so</filename>
   <basename>libgstgoom2k1.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-icydemux.xml b/docs/plugins/inspect/plugin-icydemux.xml
index a76c4df..6d7c380 100644
--- a/docs/plugins/inspect/plugin-icydemux.xml
+++ b/docs/plugins/inspect/plugin-icydemux.xml
@@ -3,7 +3,7 @@
   <description>Demux ICY tags from a stream</description>
   <filename>../../gst/icydemux/.libs/libgsticydemux.so</filename>
   <basename>libgsticydemux.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-id3demux.xml b/docs/plugins/inspect/plugin-id3demux.xml
index bf73c7c..15e57b4 100644
--- a/docs/plugins/inspect/plugin-id3demux.xml
+++ b/docs/plugins/inspect/plugin-id3demux.xml
@@ -3,7 +3,7 @@
   <description>Demux ID3v1 and ID3v2 tags from a file</description>
   <filename>../../gst/id3demux/.libs/libgstid3demux.so</filename>
   <basename>libgstid3demux.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-imagefreeze.xml b/docs/plugins/inspect/plugin-imagefreeze.xml
index 5d40e92..fe70fae 100644
--- a/docs/plugins/inspect/plugin-imagefreeze.xml
+++ b/docs/plugins/inspect/plugin-imagefreeze.xml
@@ -3,7 +3,7 @@
   <description>Still frame stream generator</description>
   <filename>../../gst/imagefreeze/.libs/libgstimagefreeze.so</filename>
   <basename>libgstimagefreeze.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-interleave.xml b/docs/plugins/inspect/plugin-interleave.xml
index fa76988..45b990a 100644
--- a/docs/plugins/inspect/plugin-interleave.xml
+++ b/docs/plugins/inspect/plugin-interleave.xml
@@ -3,7 +3,7 @@
   <description>Audio interleaver/deinterleaver</description>
   <filename>../../gst/interleave/.libs/libgstinterleave.so</filename>
   <basename>libgstinterleave.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-isomp4.xml b/docs/plugins/inspect/plugin-isomp4.xml
index d16a122..9e439e3 100644
--- a/docs/plugins/inspect/plugin-isomp4.xml
+++ b/docs/plugins/inspect/plugin-isomp4.xml
@@ -3,7 +3,7 @@
   <description>ISO base media file format support (mp4, 3gpp, qt, mj2)</description>
   <filename>../../gst/isomp4/.libs/libgstisomp4.so</filename>
   <basename>libgstisomp4.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-jack.xml b/docs/plugins/inspect/plugin-jack.xml
index 50f8fe2..4367901 100644
--- a/docs/plugins/inspect/plugin-jack.xml
+++ b/docs/plugins/inspect/plugin-jack.xml
@@ -3,7 +3,7 @@
   <description>JACK audio elements</description>
   <filename>../../ext/jack/.libs/libgstjack.so</filename>
   <basename>libgstjack.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-jpeg.xml b/docs/plugins/inspect/plugin-jpeg.xml
index 71c5d11..1d3c1b5 100644
--- a/docs/plugins/inspect/plugin-jpeg.xml
+++ b/docs/plugins/inspect/plugin-jpeg.xml
@@ -3,7 +3,7 @@
   <description>JPeg plugin library</description>
   <filename>../../ext/jpeg/.libs/libgstjpeg.so</filename>
   <basename>libgstjpeg.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-level.xml b/docs/plugins/inspect/plugin-level.xml
index 19de71f..4ea8902 100644
--- a/docs/plugins/inspect/plugin-level.xml
+++ b/docs/plugins/inspect/plugin-level.xml
@@ -3,7 +3,7 @@
   <description>Audio level plugin</description>
   <filename>../../gst/level/.libs/libgstlevel.so</filename>
   <basename>libgstlevel.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-matroska.xml b/docs/plugins/inspect/plugin-matroska.xml
index 8e35668..f84631b 100644
--- a/docs/plugins/inspect/plugin-matroska.xml
+++ b/docs/plugins/inspect/plugin-matroska.xml
@@ -3,7 +3,7 @@
   <description>Matroska and WebM stream handling</description>
   <filename>../../gst/matroska/.libs/libgstmatroska.so</filename>
   <basename>libgstmatroska.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mulaw.xml b/docs/plugins/inspect/plugin-mulaw.xml
index 512b297..1b494ad 100644
--- a/docs/plugins/inspect/plugin-mulaw.xml
+++ b/docs/plugins/inspect/plugin-mulaw.xml
@@ -3,7 +3,7 @@
   <description>MuLaw audio conversion routines</description>
   <filename>../../gst/law/.libs/libgstmulaw.so</filename>
   <basename>libgstmulaw.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-multifile.xml b/docs/plugins/inspect/plugin-multifile.xml
index d2df979..20935ca 100644
--- a/docs/plugins/inspect/plugin-multifile.xml
+++ b/docs/plugins/inspect/plugin-multifile.xml
@@ -3,7 +3,7 @@
   <description>Reads/Writes buffers from/to sequentially named files</description>
   <filename>../../gst/multifile/.libs/libgstmultifile.so</filename>
   <basename>libgstmultifile.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-multipart.xml b/docs/plugins/inspect/plugin-multipart.xml
index 012ed67..f17c511 100644
--- a/docs/plugins/inspect/plugin-multipart.xml
+++ b/docs/plugins/inspect/plugin-multipart.xml
@@ -3,7 +3,7 @@
   <description>multipart stream manipulation</description>
   <filename>../../gst/multipart/.libs/libgstmultipart.so</filename>
   <basename>libgstmultipart.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-navigationtest.xml b/docs/plugins/inspect/plugin-navigationtest.xml
index 7e3ffb4..394a3f7 100644
--- a/docs/plugins/inspect/plugin-navigationtest.xml
+++ b/docs/plugins/inspect/plugin-navigationtest.xml
@@ -3,7 +3,7 @@
   <description>Template for a video filter</description>
   <filename>../../gst/debugutils/.libs/libgstnavigationtest.so</filename>
   <basename>libgstnavigationtest.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-oss4.xml b/docs/plugins/inspect/plugin-oss4.xml
index fc995bd..983a341 100644
--- a/docs/plugins/inspect/plugin-oss4.xml
+++ b/docs/plugins/inspect/plugin-oss4.xml
@@ -3,7 +3,7 @@
   <description>Open Sound System (OSS) version 4 support for GStreamer</description>
   <filename>../../sys/oss4/.libs/libgstoss4audio.so</filename>
   <basename>libgstoss4audio.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ossaudio.xml b/docs/plugins/inspect/plugin-ossaudio.xml
index 734e71e..cf2dcd4 100644
--- a/docs/plugins/inspect/plugin-ossaudio.xml
+++ b/docs/plugins/inspect/plugin-ossaudio.xml
@@ -3,7 +3,7 @@
   <description>OSS (Open Sound System) support for GStreamer</description>
   <filename>../../sys/oss/.libs/libgstossaudio.so</filename>
   <basename>libgstossaudio.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-png.xml b/docs/plugins/inspect/plugin-png.xml
index 3c1dc46..cd449c5 100644
--- a/docs/plugins/inspect/plugin-png.xml
+++ b/docs/plugins/inspect/plugin-png.xml
@@ -3,7 +3,7 @@
   <description>PNG plugin library</description>
   <filename>../../ext/libpng/.libs/libgstpng.so</filename>
   <basename>libgstpng.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-pulseaudio.xml b/docs/plugins/inspect/plugin-pulseaudio.xml
index 7edc82f..b57b394 100644
--- a/docs/plugins/inspect/plugin-pulseaudio.xml
+++ b/docs/plugins/inspect/plugin-pulseaudio.xml
@@ -3,7 +3,7 @@
   <description>PulseAudio plugin library</description>
   <filename>../../ext/pulse/.libs/libgstpulse.so</filename>
   <basename>libgstpulse.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-replaygain.xml b/docs/plugins/inspect/plugin-replaygain.xml
index 8c7a749..c450ac1 100644
--- a/docs/plugins/inspect/plugin-replaygain.xml
+++ b/docs/plugins/inspect/plugin-replaygain.xml
@@ -3,7 +3,7 @@
   <description>ReplayGain volume normalization</description>
   <filename>../../gst/replaygain/.libs/libgstreplaygain.so</filename>
   <basename>libgstreplaygain.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtp.xml b/docs/plugins/inspect/plugin-rtp.xml
index fd2c3b9..18decd7 100644
--- a/docs/plugins/inspect/plugin-rtp.xml
+++ b/docs/plugins/inspect/plugin-rtp.xml
@@ -3,7 +3,7 @@
   <description>Real-time protocol plugins</description>
   <filename>../../gst/rtp/.libs/libgstrtp.so</filename>
   <basename>libgstrtp.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
@@ -748,7 +748,7 @@
       <name>rtph265depay</name>
       <longname>RTP H265 depayloader</longname>
       <class>Codec/Depayloader/Network/RTP</class>
-      <description>Extracts H265 video from RTP packets (draft-ietf-payload-rtp-h265-03.txt)</description>
+      <description>Extracts H265 video from RTP packets (RFC 7798)</description>
       <author>Jurgen Slowack &lt;jurgenslowack@gmail.com&gt;</author>
       <pads>
         <caps>
@@ -769,14 +769,14 @@
       <name>rtph265pay</name>
       <longname>RTP H265 payloader</longname>
       <class>Codec/Payloader/Network/RTP</class>
-      <description>Payload-encode H265 video into RTP packets (based on draft-ietf-payload-rtp-h265-03.txt)</description>
+      <description>Payload-encode H265 video into RTP packets (RFC 7798)</description>
       <author>Jurgen Slowack &lt;jurgenslowack@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</details>
+          <details>video/x-h265, stream-format=(string)hvc1, alignment=(string)au; video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</details>
         </caps>
         <caps>
           <name>src</name>
diff --git a/docs/plugins/inspect/plugin-rtpmanager.xml b/docs/plugins/inspect/plugin-rtpmanager.xml
index 863c34f..b0d6a4f 100644
--- a/docs/plugins/inspect/plugin-rtpmanager.xml
+++ b/docs/plugins/inspect/plugin-rtpmanager.xml
@@ -3,7 +3,7 @@
   <description>RTP session management plugin library</description>
   <filename>../../gst/rtpmanager/.libs/libgstrtpmanager.so</filename>
   <basename>libgstrtpmanager.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtsp.xml b/docs/plugins/inspect/plugin-rtsp.xml
index 5c9b749..04bb648 100644
--- a/docs/plugins/inspect/plugin-rtsp.xml
+++ b/docs/plugins/inspect/plugin-rtsp.xml
@@ -3,7 +3,7 @@
   <description>transfer data via RTSP</description>
   <filename>../../gst/rtsp/.libs/libgstrtsp.so</filename>
   <basename>libgstrtsp.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-shapewipe.xml b/docs/plugins/inspect/plugin-shapewipe.xml
index 79c4b46..77e0b2c 100644
--- a/docs/plugins/inspect/plugin-shapewipe.xml
+++ b/docs/plugins/inspect/plugin-shapewipe.xml
@@ -3,7 +3,7 @@
   <description>Shape Wipe transition filter</description>
   <filename>../../gst/shapewipe/.libs/libgstshapewipe.so</filename>
   <basename>libgstshapewipe.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-shout2send.xml b/docs/plugins/inspect/plugin-shout2send.xml
index e025be6..8cc7388 100644
--- a/docs/plugins/inspect/plugin-shout2send.xml
+++ b/docs/plugins/inspect/plugin-shout2send.xml
@@ -3,7 +3,7 @@
   <description>Sends data to an icecast server using libshout2</description>
   <filename>../../ext/shout2/.libs/libgstshout2.so</filename>
   <basename>libgstshout2.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>libshout2</package>
diff --git a/docs/plugins/inspect/plugin-smpte.xml b/docs/plugins/inspect/plugin-smpte.xml
index 1014636..49e7512 100644
--- a/docs/plugins/inspect/plugin-smpte.xml
+++ b/docs/plugins/inspect/plugin-smpte.xml
@@ -3,7 +3,7 @@
   <description>Apply the standard SMPTE transitions on video images</description>
   <filename>../../gst/smpte/.libs/libgstsmpte.so</filename>
   <basename>libgstsmpte.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-soup.xml b/docs/plugins/inspect/plugin-soup.xml
index 17e4d4d..519ad17 100644
--- a/docs/plugins/inspect/plugin-soup.xml
+++ b/docs/plugins/inspect/plugin-soup.xml
@@ -3,7 +3,7 @@
   <description>libsoup HTTP client src/sink</description>
   <filename>../../ext/soup/.libs/libgstsouphttpsrc.so</filename>
   <basename>libgstsouphttpsrc.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-spectrum.xml b/docs/plugins/inspect/plugin-spectrum.xml
index afdbcef..4d4ca7d 100644
--- a/docs/plugins/inspect/plugin-spectrum.xml
+++ b/docs/plugins/inspect/plugin-spectrum.xml
@@ -3,7 +3,7 @@
   <description>Run an FFT on the audio signal, output spectrum data</description>
   <filename>../../gst/spectrum/.libs/libgstspectrum.so</filename>
   <basename>libgstspectrum.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-speex.xml b/docs/plugins/inspect/plugin-speex.xml
index d794c0b..76e3ccd 100644
--- a/docs/plugins/inspect/plugin-speex.xml
+++ b/docs/plugins/inspect/plugin-speex.xml
@@ -3,7 +3,7 @@
   <description>Speex plugin library</description>
   <filename>../../ext/speex/.libs/libgstspeex.so</filename>
   <basename>libgstspeex.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-taglib.xml b/docs/plugins/inspect/plugin-taglib.xml
index 114b384..7d0e90e 100644
--- a/docs/plugins/inspect/plugin-taglib.xml
+++ b/docs/plugins/inspect/plugin-taglib.xml
@@ -3,7 +3,7 @@
   <description>Tag writing plug-in based on taglib</description>
   <filename>../../ext/taglib/.libs/libgsttaglib.so</filename>
   <basename>libgsttaglib.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-udp.xml b/docs/plugins/inspect/plugin-udp.xml
index b65005a..7a3dc28 100644
--- a/docs/plugins/inspect/plugin-udp.xml
+++ b/docs/plugins/inspect/plugin-udp.xml
@@ -3,7 +3,7 @@
   <description>transfer data via UDP</description>
   <filename>../../gst/udp/.libs/libgstudp.so</filename>
   <basename>libgstudp.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-video4linux2.xml b/docs/plugins/inspect/plugin-video4linux2.xml
index d2767a6..0e25e52 100644
--- a/docs/plugins/inspect/plugin-video4linux2.xml
+++ b/docs/plugins/inspect/plugin-video4linux2.xml
@@ -3,7 +3,7 @@
   <description>elements for Video 4 Linux</description>
   <filename>../../sys/v4l2/.libs/libgstvideo4linux2.so</filename>
   <basename>libgstvideo4linux2.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videobox.xml b/docs/plugins/inspect/plugin-videobox.xml
index 86b3c37..8cbb6e5 100644
--- a/docs/plugins/inspect/plugin-videobox.xml
+++ b/docs/plugins/inspect/plugin-videobox.xml
@@ -3,7 +3,7 @@
   <description>resizes a video by adding borders or cropping</description>
   <filename>../../gst/videobox/.libs/libgstvideobox.so</filename>
   <basename>libgstvideobox.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videocrop.xml b/docs/plugins/inspect/plugin-videocrop.xml
index b80df04..c1281d7 100644
--- a/docs/plugins/inspect/plugin-videocrop.xml
+++ b/docs/plugins/inspect/plugin-videocrop.xml
@@ -3,7 +3,7 @@
   <description>Crops video into a user-defined region</description>
   <filename>../../gst/videocrop/.libs/libgstvideocrop.so</filename>
   <basename>libgstvideocrop.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videofilter.xml b/docs/plugins/inspect/plugin-videofilter.xml
index 1abd7f6..3653d59 100644
--- a/docs/plugins/inspect/plugin-videofilter.xml
+++ b/docs/plugins/inspect/plugin-videofilter.xml
@@ -3,7 +3,7 @@
   <description>Video filters plugin</description>
   <filename>../../gst/videofilter/.libs/libgstvideofilter.so</filename>
   <basename>libgstvideofilter.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videomixer.xml b/docs/plugins/inspect/plugin-videomixer.xml
index 53bad47..96e4f2d 100644
--- a/docs/plugins/inspect/plugin-videomixer.xml
+++ b/docs/plugins/inspect/plugin-videomixer.xml
@@ -3,7 +3,7 @@
   <description>Video mixer</description>
   <filename>../../gst/videomixer/.libs/libgstvideomixer.so</filename>
   <basename>libgstvideomixer.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vpx.xml b/docs/plugins/inspect/plugin-vpx.xml
index 46fec71..6c17a51 100644
--- a/docs/plugins/inspect/plugin-vpx.xml
+++ b/docs/plugins/inspect/plugin-vpx.xml
@@ -3,7 +3,7 @@
   <description>VP8 plugin</description>
   <filename>../../ext/vpx/.libs/libgstvpx.so</filename>
   <basename>libgstvpx.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wavenc.xml b/docs/plugins/inspect/plugin-wavenc.xml
index ffcd037..93a01e0 100644
--- a/docs/plugins/inspect/plugin-wavenc.xml
+++ b/docs/plugins/inspect/plugin-wavenc.xml
@@ -3,7 +3,7 @@
   <description>Encode raw audio into WAV</description>
   <filename>../../gst/wavenc/.libs/libgstwavenc.so</filename>
   <basename>libgstwavenc.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wavpack.xml b/docs/plugins/inspect/plugin-wavpack.xml
index 4a4355f..6ab1f1e 100644
--- a/docs/plugins/inspect/plugin-wavpack.xml
+++ b/docs/plugins/inspect/plugin-wavpack.xml
@@ -3,7 +3,7 @@
   <description>Wavpack lossless/lossy audio format handling</description>
   <filename>../../ext/wavpack/.libs/libgstwavpack.so</filename>
   <basename>libgstwavpack.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wavparse.xml b/docs/plugins/inspect/plugin-wavparse.xml
index 507c979..1c55615 100644
--- a/docs/plugins/inspect/plugin-wavparse.xml
+++ b/docs/plugins/inspect/plugin-wavparse.xml
@@ -3,7 +3,7 @@
   <description>Parse a .wav file into raw audio</description>
   <filename>../../gst/wavparse/.libs/libgstwavparse.so</filename>
   <basename>libgstwavparse.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
@@ -26,7 +26,7 @@
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]; audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]; audio/x-dts; audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]; audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/AMR, rate=(int)8000, channels=(int)1; audio/AMR-WB, rate=(int)16000, channels=(int)1; audio/x-siren; application/x-ogg-avi</details>
+          <details>audio/ms-gsm; audio/mpeg, mpegversion=(int)1, layer=(int)3; audio/mpeg, mpegversion=(int)1, layer=(int)2; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved; audio/x-vorbis; audio/x-ac3; audio/x-dts; audio/mpeg, mpegversion=(int)4; audio/x-alaw; audio/x-mulaw; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved; audio/x-voxware, voxwaretype=(int)117; audio/x-adpcm, layout=(string)dk4; audio/x-adpcm, layout=(string)dk3; audio/x-adpcm, layout=(string)dvi; audio/AMR; audio/AMR-WB; audio/x-siren; application/x-ogg-avi</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-ximagesrc.xml b/docs/plugins/inspect/plugin-ximagesrc.xml
index 5515ab5..1ec3d79 100644
--- a/docs/plugins/inspect/plugin-ximagesrc.xml
+++ b/docs/plugins/inspect/plugin-ximagesrc.xml
@@ -3,7 +3,7 @@
   <description>X11 video input plugin using standard Xlib calls</description>
   <filename>../../sys/ximage/.libs/libgstximagesrc.so</filename>
   <basename>libgstximagesrc.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-y4menc.xml b/docs/plugins/inspect/plugin-y4menc.xml
index d86684c..5376ce6 100644
--- a/docs/plugins/inspect/plugin-y4menc.xml
+++ b/docs/plugins/inspect/plugin-y4menc.xml
@@ -3,7 +3,7 @@
   <description>Encodes a YUV frame into the yuv4mpeg format (mjpegtools)</description>
   <filename>../../gst/y4m/.libs/libgsty4menc.so</filename>
   <basename>libgsty4menc.so</basename>
-  <version>1.9.1</version>
+  <version>1.9.2</version>
   <license>LGPL</license>
   <source>gst-plugins-good</source>
   <package>GStreamer Good Plug-ins source release</package>
diff --git a/ext/Makefile.in b/ext/Makefile.in
index a85bda2..ca046b2 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -102,6 +102,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -320,6 +321,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -426,6 +428,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -493,6 +498,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/aalib/Makefile.in b/ext/aalib/Makefile.in
index af12e63..e9016f0 100644
--- a/ext/aalib/Makefile.in
+++ b/ext/aalib/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/cairo/Makefile.in b/ext/cairo/Makefile.in
index c536d73..b268db6 100644
--- a/ext/cairo/Makefile.in
+++ b/ext/cairo/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/dv/Makefile.in b/ext/dv/Makefile.in
index ed4d074..98d18c3 100644
--- a/ext/dv/Makefile.in
+++ b/ext/dv/Makefile.in
@@ -101,6 +101,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -352,6 +353,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -458,6 +460,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -525,6 +530,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c
index a259cc1..06e9297 100644
--- a/ext/dv/gstdvdemux.c
+++ b/ext/dv/gstdvdemux.c
@@ -1220,7 +1220,7 @@
 gst_dvdemux_handle_src_event (GstPad * pad, GstObject * parent,
     GstEvent * event)
 {
-  gboolean res = TRUE;
+  gboolean res = FALSE;
   GstDVDemux *dvdemux;
 
   dvdemux = GST_DVDEMUX (parent);
@@ -1230,25 +1230,12 @@
       /* seek handler is installed based on scheduling mode */
       if (dvdemux->seek_handler)
         res = dvdemux->seek_handler (dvdemux, pad, event);
-      else
-        res = FALSE;
-      break;
-    case GST_EVENT_QOS:
-      /* we can't really (yet) do QoS */
-      res = FALSE;
-      break;
-    case GST_EVENT_NAVIGATION:
-    case GST_EVENT_CAPS:
-      /* no navigation or caps either... */
-      res = FALSE;
+      gst_event_unref (event);
       break;
     default:
       res = gst_pad_push_event (dvdemux->sinkpad, event);
-      event = NULL;
       break;
   }
-  if (event)
-    gst_event_unref (event);
 
   return res;
 }
@@ -1905,8 +1892,7 @@
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
       GstEvent *event = gst_event_new_eos ();
       /* for fatal errors or not-linked we post an error message */
-      GST_ELEMENT_ERROR (dvdemux, STREAM, FAILED,
-          (NULL), ("streaming stopped, reason %s", gst_flow_get_name (ret)));
+      GST_ELEMENT_FLOW_ERROR (dvdemux, ret);
       if (dvdemux->segment_seqnum)
         gst_event_set_seqnum (event, dvdemux->segment_seqnum);
       gst_dvdemux_push_event (dvdemux, event);
diff --git a/ext/flac/Makefile.in b/ext/flac/Makefile.in
index 567f9f9..7eaa048 100644
--- a/ext/flac/Makefile.in
+++ b/ext/flac/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/gdk_pixbuf/Makefile.in b/ext/gdk_pixbuf/Makefile.in
index 02a30b2..459010f 100644
--- a/ext/gdk_pixbuf/Makefile.in
+++ b/ext/gdk_pixbuf/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/gdk_pixbuf/gstgdkpixbufdec.c b/ext/gdk_pixbuf/gstgdkpixbufdec.c
index 735f079..1598c53 100644
--- a/ext/gdk_pixbuf/gstgdkpixbufdec.c
+++ b/ext/gdk_pixbuf/gstgdkpixbufdec.c
@@ -417,8 +417,7 @@
          * things failed */
         if (res != GST_FLOW_OK && res != GST_FLOW_FLUSHING
             && res != GST_FLOW_EOS && res != GST_FLOW_NOT_LINKED) {
-          GST_ELEMENT_ERROR (pixbuf, STREAM, FAILED, (NULL), ("Flow: %s",
-                  gst_flow_get_name (res)));
+          GST_ELEMENT_FLOW_ERROR (pixbuf, res);
           forward = FALSE;
           ret = FALSE;
         }
diff --git a/ext/jack/Makefile.in b/ext/jack/Makefile.in
index 6c100f8..8b6489f 100644
--- a/ext/jack/Makefile.in
+++ b/ext/jack/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/jack/gstjackaudioclient.c b/ext/jack/gstjackaudioclient.c
index 0f06d10..9c50a6a 100644
--- a/ext/jack/gstjackaudioclient.c
+++ b/ext/jack/gstjackaudioclient.c
@@ -85,6 +85,7 @@
   GstJackClientType type;
   gboolean active;
   gboolean deactivate;
+  gboolean server_down;
 
   JackShutdownCallback shutdown;
   JackProcessCallback process;
@@ -227,12 +228,16 @@
   for (walk = conn->src_clients; walk; walk = g_list_next (walk)) {
     GstJackAudioClient *client = (GstJackAudioClient *) walk->data;
 
+    client->server_down = TRUE;
+    g_cond_signal (&conn->flush_cond);
     if (client->shutdown)
       client->shutdown (client->user_data);
   }
   for (walk = conn->sink_clients; walk; walk = g_list_next (walk)) {
     GstJackAudioClient *client = (GstJackAudioClient *) walk->data;
 
+    client->server_down = TRUE;
+    g_cond_signal (&conn->flush_cond);
     if (client->shutdown)
       client->shutdown (client->user_data);
   }
@@ -520,6 +525,7 @@
   client->buffer_size = buffer_size;
   client->sample_rate = sample_rate;
   client->user_data = user_data;
+  client->server_down = FALSE;
 
   /* add the client to the connection */
   gst_jack_audio_connection_add_client (conn, client);
@@ -600,7 +606,7 @@
     client->deactivate = TRUE;
 
     /* need to wait for process_cb run once more */
-    while (client->deactivate)
+    while (client->deactivate && !client->server_down)
       g_cond_wait (&client->conn->flush_cond, &client->conn->lock);
   }
   client->active = active;
diff --git a/ext/jpeg/Makefile.in b/ext/jpeg/Makefile.in
index 1505f34..12afd03 100644
--- a/ext/jpeg/Makefile.in
+++ b/ext/jpeg/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/libcaca/Makefile.in b/ext/libcaca/Makefile.in
index 6175d28..a72eb4e 100644
--- a/ext/libcaca/Makefile.in
+++ b/ext/libcaca/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/libpng/Makefile.in b/ext/libpng/Makefile.in
index 0a5879b..2501e16 100644
--- a/ext/libpng/Makefile.in
+++ b/ext/libpng/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/pulse/Makefile.in b/ext/pulse/Makefile.in
index 72a73d1..2659661 100644
--- a/ext/pulse/Makefile.in
+++ b/ext/pulse/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/raw1394/Makefile.in b/ext/raw1394/Makefile.in
index b27c3a9..40a90bd 100644
--- a/ext/raw1394/Makefile.in
+++ b/ext/raw1394/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -349,6 +350,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -455,6 +457,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -522,6 +527,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/shout2/Makefile.in b/ext/shout2/Makefile.in
index 69ec4d8..0dc751e 100644
--- a/ext/shout2/Makefile.in
+++ b/ext/shout2/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/soup/Makefile.in b/ext/soup/Makefile.in
index 02764c0..36bf1d5 100644
--- a/ext/soup/Makefile.in
+++ b/ext/soup/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c
index cd66704..aef64d3 100644
--- a/ext/soup/gstsouphttpsrc.c
+++ b/ext/soup/gstsouphttpsrc.c
@@ -968,11 +968,16 @@
   GST_DEBUG_OBJECT (src, "Closing session");
 
   g_mutex_lock (&src->mutex);
+  if (src->msg) {
+    soup_session_cancel_message (src->session, src->msg, SOUP_STATUS_CANCELLED);
+    g_object_unref (src->msg);
+    src->msg = NULL;
+  }
+
   if (src->session) {
-    soup_session_abort (src->session);  /* This unrefs the message. */
+    soup_session_abort (src->session);
     g_object_unref (src->session);
     src->session = NULL;
-    src->msg = NULL;
   }
   g_mutex_unlock (&src->mutex);
 }
@@ -1218,10 +1223,13 @@
   if (src->ret == GST_FLOW_CUSTOM_ERROR &&
       src->read_position && msg->status_code != SOUP_STATUS_PARTIAL_CONTENT) {
     src->seekable = FALSE;
-    GST_ELEMENT_ERROR (src, RESOURCE, SEEK,
+    GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, SEEK,
         (_("Server does not support seeking.")),
         ("Server does not accept Range HTTP header, URL: %s, Redirect to: %s",
-            src->location, GST_STR_NULL (src->redirection_uri)));
+            src->location, GST_STR_NULL (src->redirection_uri)),
+        ("http-status-code", G_TYPE_UINT, msg->status_code,
+            "http-redirection-uri", G_TYPE_STRING,
+            GST_STR_NULL (src->redirection_uri), NULL));
     src->ret = GST_FLOW_ERROR;
   }
 
@@ -1250,9 +1258,13 @@
 }
 
 #define SOUP_HTTP_SRC_ERROR(src,soup_msg,cat,code,error_message)     \
-  GST_ELEMENT_ERROR ((src), cat, code, ("%s", error_message),        \
-      ("%s (%d), URL: %s, Redirect to: %s", (soup_msg)->reason_phrase,                \
-          (soup_msg)->status_code, (src)->location, GST_STR_NULL ((src)->redirection_uri)));
+  do { \
+    GST_ELEMENT_ERROR_WITH_DETAILS ((src), cat, code, ("%s", error_message), \
+        ("%s (%d), URL: %s, Redirect to: %s", (soup_msg)->reason_phrase, \
+            (soup_msg)->status_code, (src)->location, GST_STR_NULL ((src)->redirection_uri)), \
+            ("http-status-code", G_TYPE_UINT, msg->status_code, \
+             "http-redirect-uri", G_TYPE_STRING, GST_STR_NULL ((src)->redirection_uri), NULL)); \
+  } while(0)
 
 static void
 gst_soup_http_src_parse_status (SoupMessage * msg, GstSoupHTTPSrc * src)
@@ -1319,25 +1331,33 @@
      * error dialog according to libsoup documentation.
      */
     if (msg->status_code == SOUP_STATUS_NOT_FOUND) {
-      GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND,
+      GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, NOT_FOUND,
           ("%s", msg->reason_phrase),
           ("%s (%d), URL: %s, Redirect to: %s", msg->reason_phrase,
               msg->status_code, src->location,
-              GST_STR_NULL (src->redirection_uri)));
+              GST_STR_NULL (src->redirection_uri)),
+          ("http-status-code", G_TYPE_UINT, msg->status_code,
+              "http-redirect-uri", G_TYPE_STRING,
+              GST_STR_NULL (src->redirection_uri), NULL));
     } else if (msg->status_code == SOUP_STATUS_UNAUTHORIZED
         || msg->status_code == SOUP_STATUS_PAYMENT_REQUIRED
         || msg->status_code == SOUP_STATUS_FORBIDDEN
         || msg->status_code == SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED) {
-      GST_ELEMENT_ERROR (src, RESOURCE, NOT_AUTHORIZED, ("%s",
+      GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, NOT_AUTHORIZED, ("%s",
               msg->reason_phrase), ("%s (%d), URL: %s, Redirect to: %s",
               msg->reason_phrase, msg->status_code, src->location,
-              GST_STR_NULL (src->redirection_uri)));
+              GST_STR_NULL (src->redirection_uri)), ("http-status-code",
+              G_TYPE_UINT, msg->status_code, "http-redirect-uri", G_TYPE_STRING,
+              GST_STR_NULL (src->redirection_uri), NULL));
     } else {
-      GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+      GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, OPEN_READ,
           ("%s", msg->reason_phrase),
           ("%s (%d), URL: %s, Redirect to: %s", msg->reason_phrase,
               msg->status_code, src->location,
-              GST_STR_NULL (src->redirection_uri)));
+              GST_STR_NULL (src->redirection_uri)),
+          ("http-status-code", G_TYPE_UINT, msg->status_code,
+              "http-redirect-uri", G_TYPE_STRING,
+              GST_STR_NULL (src->redirection_uri), NULL));
     }
     src->ret = GST_FLOW_ERROR;
   }
@@ -1626,7 +1646,6 @@
     g_mutex_unlock (&src->mutex);
     return GST_FLOW_FLUSHING;
   }
-  g_mutex_unlock (&src->mutex);
 
   gst_buffer_unmap (*outbuf, &mapinfo);
   if (read_bytes > 0) {
@@ -1639,16 +1658,41 @@
     src->retry_count = 0;
 
     gst_soup_http_src_check_update_blocksize (src, read_bytes);
+
+    /* If we're at the end of a range request, read again to let libsoup
+     * finalize the request. This allows to reuse the connection again later,
+     * otherwise we would have to cancel the message and close the connection
+     */
+    if (bsrc->segment.stop != -1
+        && bsrc->segment.position + read_bytes >= bsrc->segment.stop) {
+      guint8 tmp[128];
+
+      g_object_unref (src->msg);
+      src->msg = NULL;
+      src->have_body = TRUE;
+
+      /* This should return immediately as we're at the end of the range */
+      read_bytes =
+          g_input_stream_read (src->input_stream, tmp, sizeof (tmp),
+          src->cancellable, NULL);
+      if (read_bytes > 0)
+        GST_ERROR_OBJECT (src,
+            "Read %" G_GSIZE_FORMAT " bytes after end of range", read_bytes);
+    }
   } else {
     gst_buffer_unref (*outbuf);
     if (read_bytes < 0) {
       /* Maybe the server disconnected, retry */
       ret = GST_FLOW_CUSTOM_ERROR;
     } else {
+      g_object_unref (src->msg);
+      src->msg = NULL;
       ret = GST_FLOW_EOS;
       src->have_body = TRUE;
     }
   }
+  g_mutex_unlock (&src->mutex);
+
   return ret;
 }
 
diff --git a/ext/speex/Makefile.in b/ext/speex/Makefile.in
index 19ed9ff..1bb3c27 100644
--- a/ext/speex/Makefile.in
+++ b/ext/speex/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/taglib/Makefile.in b/ext/taglib/Makefile.in
index 1aef827..459d8bd 100644
--- a/ext/taglib/Makefile.in
+++ b/ext/taglib/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -360,6 +361,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -466,6 +468,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -533,6 +538,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/vpx/Makefile.in b/ext/vpx/Makefile.in
index 5e78178..458c6ef 100644
--- a/ext/vpx/Makefile.in
+++ b/ext/vpx/Makefile.in
@@ -100,6 +100,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -348,6 +349,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -454,6 +456,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -521,6 +526,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ext/vpx/gstvp9enc.c b/ext/vpx/gstvp9enc.c
index 593544a..0d8f9a2 100644
--- a/ext/vpx/gstvp9enc.c
+++ b/ext/vpx/gstvp9enc.c
@@ -235,9 +235,17 @@
 }
 
 static void
+gst_vp9_enc_user_data_free (vpx_image_t * image)
+{
+  g_slice_free (vpx_image_t, image);
+}
+
+static void
 gst_vp9_enc_set_frame_user_data (GstVPXEnc * enc, GstVideoCodecFrame * frame,
     vpx_image_t * image)
 {
+  gst_video_codec_frame_set_user_data (frame, image,
+      (GDestroyNotify) gst_vp9_enc_user_data_free);
   return;
 }
 
diff --git a/ext/wavpack/Makefile.in b/ext/wavpack/Makefile.in
index 3ad6a40..19e0f1d 100644
--- a/ext/wavpack/Makefile.in
+++ b/ext/wavpack/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -346,6 +347,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -452,6 +454,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -519,6 +524,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst-plugins-good.doap b/gst-plugins-good.doap
index e9d4e2e..c86fed0 100644
--- a/gst-plugins-good.doap
+++ b/gst-plugins-good.doap
@@ -34,6 +34,16 @@
 
  <release>
   <Version>
+   <revision>1.9.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-09-01</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.9.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.9.1</revision>
    <branch>master</branch>
    <name></name>
diff --git a/gst-plugins-good.spec b/gst-plugins-good.spec
index 52db83e..89bbb66 100644
--- a/gst-plugins-good.spec
+++ b/gst-plugins-good.spec
@@ -4,7 +4,7 @@
 %define gst_minver   0.11.0
 
 Name: 		%{gstreamer}-plugins-good
-Version: 	1.9.1
+Version: 	1.9.2
 Release: 	1.gst
 Summary: 	GStreamer plug-ins with good code and licensing
 
diff --git a/gst/Makefile.in b/gst/Makefile.in
index f058069..9de42f2 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -102,6 +102,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -320,6 +321,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -426,6 +428,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -493,6 +498,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/alpha/Makefile.in b/gst/alpha/Makefile.in
index f492c8d..e2c63dc 100644
--- a/gst/alpha/Makefile.in
+++ b/gst/alpha/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -351,6 +352,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -457,6 +459,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -524,6 +529,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/apetag/Makefile.in b/gst/apetag/Makefile.in
index 941c01b..48cc189 100644
--- a/gst/apetag/Makefile.in
+++ b/gst/apetag/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/audiofx/Makefile.in b/gst/audiofx/Makefile.in
index 88465e3..cdf425f 100644
--- a/gst/audiofx/Makefile.in
+++ b/gst/audiofx/Makefile.in
@@ -123,6 +123,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -388,6 +389,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -494,6 +496,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -561,6 +566,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/audioparsers/Makefile.in b/gst/audioparsers/Makefile.in
index 723a13a..f3e75c5 100644
--- a/gst/audioparsers/Makefile.in
+++ b/gst/audioparsers/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -350,6 +351,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -456,6 +458,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -523,6 +528,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/auparse/Makefile.in b/gst/auparse/Makefile.in
index 986936e..3794b33 100644
--- a/gst/auparse/Makefile.in
+++ b/gst/auparse/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/autodetect/Makefile.in b/gst/autodetect/Makefile.in
index 9289d78..c6dec54 100644
--- a/gst/autodetect/Makefile.in
+++ b/gst/autodetect/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/avi/Makefile.in b/gst/avi/Makefile.in
index 19ef4c7..8a07d9b 100644
--- a/gst/avi/Makefile.in
+++ b/gst/avi/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 5ccbbb1..1fe3176 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -926,11 +926,6 @@
       }
       gst_event_unref (event);
       break;
-    case GST_EVENT_QOS:
-    case GST_EVENT_NAVIGATION:
-      res = FALSE;
-      gst_event_unref (event);
-      break;
     default:
       res = gst_pad_event_default (pad, parent, event);
       break;
@@ -5700,9 +5695,7 @@
       /* for fatal errors we post an error message, wrong-state is
        * not fatal because it happens due to flushes and only means
        * that we should stop now. */
-      GST_ELEMENT_ERROR (avi, STREAM, FAILED,
-          (_("Internal data stream error.")),
-          ("streaming stopped, reason %s", gst_flow_get_name (res)));
+      GST_ELEMENT_FLOW_ERROR (avi, res);
       push_eos = TRUE;
     }
     if (push_eos) {
diff --git a/gst/cutter/Makefile.in b/gst/cutter/Makefile.in
index 3a67755..1893e7e 100644
--- a/gst/cutter/Makefile.in
+++ b/gst/cutter/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index 4f8ee29..4579eef 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -358,6 +359,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -464,6 +466,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -531,6 +536,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/debugutils/rndbuffersize.c b/gst/debugutils/rndbuffersize.c
index a5f1d69..d33a23c 100644
--- a/gst/debugutils/rndbuffersize.c
+++ b/gst/debugutils/rndbuffersize.c
@@ -515,9 +515,7 @@
       GST_DEBUG_OBJECT (self, "eos");
       gst_pad_push_event (self->srcpad, gst_event_new_eos ());
     } else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) {
-      GST_ELEMENT_ERROR (self, STREAM, FAILED,
-          ("Internal data stream error."),
-          ("streaming stopped, reason: %s", gst_flow_get_name (ret)));
+      GST_ELEMENT_FLOW_ERROR (self, ret);
     }
     goto pause_task;
   }
diff --git a/gst/deinterlace/Makefile.in b/gst/deinterlace/Makefile.in
index 7e01931..b5b979f 100644
--- a/gst/deinterlace/Makefile.in
+++ b/gst/deinterlace/Makefile.in
@@ -121,6 +121,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -382,6 +383,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -488,6 +490,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -555,6 +560,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/dtmf/Makefile.in b/gst/dtmf/Makefile.in
index 6400e97..bbcc0a0 100644
--- a/gst/dtmf/Makefile.in
+++ b/gst/dtmf/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/effectv/Makefile.in b/gst/effectv/Makefile.in
index 696c4fb..2568302 100644
--- a/gst/effectv/Makefile.in
+++ b/gst/effectv/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -349,6 +350,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -455,6 +457,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -522,6 +527,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/equalizer/Makefile.in b/gst/equalizer/Makefile.in
index 63295a0..eb7222c 100644
--- a/gst/equalizer/Makefile.in
+++ b/gst/equalizer/Makefile.in
@@ -100,6 +100,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -347,6 +348,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -453,6 +455,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -520,6 +525,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/flv/Makefile.in b/gst/flv/Makefile.in
index 8093778..e89eded 100644
--- a/gst/flv/Makefile.in
+++ b/gst/flv/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index f226907..e324b18 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -114,6 +114,8 @@
 
 static GstIndex *gst_flv_demux_get_index (GstElement * element);
 
+static void gst_flv_demux_push_tags (GstFlvDemux * demux);
+
 static void
 gst_flv_demux_parse_and_add_index_entry (GstFlvDemux * demux, GstClockTime ts,
     guint64 pos, gboolean keyframe)
@@ -368,6 +370,12 @@
         demux->h = d;
       } else if (!strcmp (tag_name, "framerate")) {
         demux->framerate = d;
+      } else if (!strcmp (tag_name, "audiodatarate")) {
+        gst_tag_list_add (demux->audio_tags, GST_TAG_MERGE_REPLACE,
+            GST_TAG_NOMINAL_BITRATE, (guint) (d * 1024), NULL);
+      } else if (!strcmp (tag_name, "videodatarate")) {
+        gst_tag_list_add (demux->video_tags, GST_TAG_MERGE_REPLACE,
+            GST_TAG_NOMINAL_BITRATE, (guint) (d * 1024), NULL);
       } else {
         GST_INFO_OBJECT (demux, "Tag \'%s\' not handled", tag_name);
       }
@@ -561,6 +569,28 @@
   return FALSE;
 }
 
+static void
+gst_flv_demux_clear_tags (GstFlvDemux * demux)
+{
+  GST_DEBUG_OBJECT (demux, "clearing taglist");
+
+  if (demux->taglist) {
+    gst_tag_list_unref (demux->taglist);
+  }
+  demux->taglist = gst_tag_list_new_empty ();
+  gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
+
+  if (demux->audio_tags) {
+    gst_tag_list_unref (demux->audio_tags);
+  }
+  demux->audio_tags = gst_tag_list_new_empty ();
+
+  if (demux->video_tags) {
+    gst_tag_list_unref (demux->video_tags);
+  }
+  demux->video_tags = gst_tag_list_new_empty ();
+}
+
 static GstFlowReturn
 gst_flv_demux_parse_tag_script (GstFlvDemux * demux, GstBuffer * buffer)
 {
@@ -594,6 +624,8 @@
       gboolean end_marker = FALSE;
       GST_DEBUG_OBJECT (demux, "we have a metadata script object");
 
+      gst_flv_demux_clear_tags (demux);
+
       if (!gst_byte_reader_get_uint8 (&reader, &type)) {
         g_free (function_name);
         goto cleanup;
@@ -636,7 +668,7 @@
           goto cleanup;
       }
 
-      demux->push_tags = TRUE;
+      gst_flv_demux_push_tags (demux);
     }
 
     g_free (function_name);
@@ -689,7 +721,6 @@
     guint32 rate, guint32 channels, guint32 width)
 {
   GstCaps *caps = NULL, *old_caps;
-  gchar *codec_name = NULL;
   gboolean ret = FALSE;
   guint adjusted_rate = rate;
   GstEvent *event;
@@ -871,18 +902,10 @@
     demux->width = width;
 
     if (caps) {
-      codec_name = gst_pb_utils_get_codec_description (caps);
-
-      if (codec_name) {
-        if (demux->taglist == NULL)
-          demux->taglist = gst_tag_list_new_empty ();
-        gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
-            GST_TAG_AUDIO_CODEC, codec_name, NULL);
-        g_free (codec_name);
-      }
-
       GST_DEBUG_OBJECT (demux->audio_pad, "successfully negotiated caps %"
           GST_PTR_FORMAT, caps);
+
+      gst_flv_demux_push_tags (demux);
     } else {
       GST_DEBUG_OBJECT (demux->audio_pad, "delayed setting caps");
     }
@@ -915,25 +938,49 @@
 }
 
 static void
+gst_flv_demux_add_codec_tag (GstFlvDemux * demux, const gchar * tag,
+    GstPad * pad)
+{
+  if (pad) {
+    GstCaps *caps = gst_pad_get_current_caps (pad);
+
+    if (caps) {
+      gchar *codec_name = gst_pb_utils_get_codec_description (caps);
+
+      if (codec_name) {
+        gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
+            tag, codec_name, NULL);
+        g_free (codec_name);
+      }
+
+      gst_caps_unref (caps);
+    }
+  }
+}
+
+static void
 gst_flv_demux_push_tags (GstFlvDemux * demux)
 {
-  if (demux->has_audio && !demux->audio_pad) {
-    GST_DEBUG_OBJECT (demux,
-        "Waiting for audio stream pad to come up before we can push tags");
-    return;
+  gst_flv_demux_add_codec_tag (demux, GST_TAG_AUDIO_CODEC, demux->audio_pad);
+  gst_flv_demux_add_codec_tag (demux, GST_TAG_VIDEO_CODEC, demux->video_pad);
+
+  GST_DEBUG_OBJECT (demux, "pushing %" GST_PTR_FORMAT, demux->taglist);
+
+  gst_flv_demux_push_src_event (demux,
+      gst_event_new_tag (gst_tag_list_copy (demux->taglist)));
+
+  if (demux->audio_pad) {
+    GST_DEBUG_OBJECT (demux->audio_pad, "pushing audio %" GST_PTR_FORMAT,
+        demux->audio_tags);
+    gst_pad_push_event (demux->audio_pad,
+        gst_event_new_tag (gst_tag_list_copy (demux->audio_tags)));
   }
-  if (demux->has_video && !demux->video_pad) {
-    GST_DEBUG_OBJECT (demux,
-        "Waiting for video stream pad to come up before we can push tags");
-    return;
-  }
-  if (demux->taglist) {
-    GST_DEBUG_OBJECT (demux, "pushing tags out %" GST_PTR_FORMAT,
-        demux->taglist);
-    gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
-    gst_flv_demux_push_src_event (demux, gst_event_new_tag (demux->taglist));
-    demux->taglist = gst_tag_list_new_empty ();
-    demux->push_tags = FALSE;
+
+  if (demux->video_pad) {
+    GST_DEBUG_OBJECT (demux->video_pad, "pushing video %" GST_PTR_FORMAT,
+        demux->video_tags);
+    gst_pad_push_event (demux->video_pad,
+        gst_event_new_tag (gst_tag_list_copy (demux->video_tags)));
   }
 }
 
@@ -1137,7 +1184,6 @@
       GST_DEBUG_OBJECT (demux, "emitting no more pads");
       gst_element_no_more_pads (GST_ELEMENT (demux));
       demux->no_more_pads = TRUE;
-      demux->push_tags = TRUE;
     }
   }
 
@@ -1156,10 +1202,6 @@
     }
   }
 
-  /* Push taglist if present */
-  if (G_UNLIKELY (demux->push_tags))
-    gst_flv_demux_push_tags (demux);
-
   /* Check if we have anything to push */
   if (demux->tag_data_size <= codec_data) {
     GST_LOG_OBJECT (demux, "Nothing left in this tag, returning");
@@ -1241,7 +1283,6 @@
         " after 6 seconds of audio");
     gst_element_no_more_pads (GST_ELEMENT_CAST (demux));
     demux->no_more_pads = TRUE;
-    demux->push_tags = TRUE;
   }
 
   /* Push downstream */
@@ -1273,7 +1314,6 @@
 {
   gboolean ret = FALSE;
   GstCaps *caps = NULL, *old_caps;
-  gchar *codec_name = NULL;
   GstEvent *event;
   gchar *stream_id;
 
@@ -1378,18 +1418,10 @@
     demux->video_codec_tag = codec_tag;
 
     if (caps) {
-      codec_name = gst_pb_utils_get_codec_description (caps);
-
-      if (codec_name) {
-        if (demux->taglist == NULL)
-          demux->taglist = gst_tag_list_new_empty ();
-        gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
-            GST_TAG_VIDEO_CODEC, codec_name, NULL);
-        g_free (codec_name);
-      }
-
       GST_DEBUG_OBJECT (demux->video_pad, "successfully negotiated caps %"
           GST_PTR_FORMAT, caps);
+
+      gst_flv_demux_push_tags (demux);
     } else {
       GST_DEBUG_OBJECT (demux->video_pad, "delayed setting caps");
     }
@@ -1568,7 +1600,6 @@
       GST_DEBUG_OBJECT (demux, "emitting no more pads");
       gst_element_no_more_pads (GST_ELEMENT (demux));
       demux->no_more_pads = TRUE;
-      demux->push_tags = TRUE;
     }
   }
 
@@ -1587,10 +1618,6 @@
     demux->got_par = FALSE;
   }
 
-  /* Push taglist if present */
-  if (G_UNLIKELY (demux->push_tags))
-    gst_flv_demux_push_tags (demux);
-
   /* Check if we have anything to push */
   if (demux->tag_data_size <= codec_data) {
     GST_LOG_OBJECT (demux, "Nothing left in this tag, returning");
@@ -1677,7 +1704,6 @@
         " after 6 seconds of video");
     gst_element_no_more_pads (GST_ELEMENT_CAST (demux));
     demux->no_more_pads = TRUE;
-    demux->push_tags = TRUE;
   }
 
   /* Push downstream */
@@ -1925,7 +1951,6 @@
 
   demux->has_audio = FALSE;
   demux->has_video = FALSE;
-  demux->push_tags = FALSE;
   demux->got_par = FALSE;
 
   demux->indexed = FALSE;
@@ -1997,6 +2022,8 @@
     g_array_free (demux->filepositions, TRUE);
     demux->filepositions = NULL;
   }
+
+  gst_flv_demux_clear_tags (demux);
 }
 
 /*
@@ -2702,9 +2729,7 @@
           GST_WARNING_OBJECT (demux, "failed pushing EOS on streams");
       }
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
-      GST_ELEMENT_ERROR (demux, STREAM, FAILED,
-          ("Internal data stream error."),
-          ("stream stopped, reason %s", reason));
+      GST_ELEMENT_FLOW_ERROR (demux, ret);
       gst_flv_demux_push_src_event (demux, gst_event_new_eos ());
     }
     gst_object_unref (demux);
@@ -3495,6 +3520,16 @@
     demux->taglist = NULL;
   }
 
+  if (demux->audio_tags) {
+    gst_tag_list_unref (demux->audio_tags);
+    demux->audio_tags = NULL;
+  }
+
+  if (demux->video_tags) {
+    gst_tag_list_unref (demux->video_tags);
+    demux->video_tags = NULL;
+  }
+
   if (demux->flowcombiner) {
     gst_flow_combiner_free (demux->flowcombiner);
     demux->flowcombiner = NULL;
@@ -3588,7 +3623,6 @@
   gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
 
   demux->adapter = gst_adapter_new ();
-  demux->taglist = gst_tag_list_new_empty ();
   demux->flowcombiner = gst_flow_combiner_new ();
   gst_segment_init (&demux->segment, GST_FORMAT_TIME);
 
diff --git a/gst/flv/gstflvdemux.h b/gst/flv/gstflvdemux.h
index aa8d6ac..4eb1791 100644
--- a/gst/flv/gstflvdemux.h
+++ b/gst/flv/gstflvdemux.h
@@ -82,6 +82,8 @@
   GstEvent *new_seg_event;
 
   GstTagList *taglist;
+  GstTagList *audio_tags;
+  GstTagList *video_tags;
 
   GstFlvDemuxState state;
 
@@ -126,7 +128,6 @@
   gboolean need_header;
   gboolean has_audio;
   gboolean has_video;
-  gboolean push_tags;
   gboolean strict;
   gboolean flushing;
 
diff --git a/gst/flx/Makefile.in b/gst/flx/Makefile.in
index 5a938cf..90df6f6 100644
--- a/gst/flx/Makefile.in
+++ b/gst/flx/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/goom/Makefile.in b/gst/goom/Makefile.in
index ad13250..0357eaf 100644
--- a/gst/goom/Makefile.in
+++ b/gst/goom/Makefile.in
@@ -98,6 +98,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -360,6 +361,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -466,6 +468,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -533,6 +538,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/goom2k1/Makefile.in b/gst/goom2k1/Makefile.in
index ddd2578..22655a1 100644
--- a/gst/goom2k1/Makefile.in
+++ b/gst/goom2k1/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/icydemux/Makefile.in b/gst/icydemux/Makefile.in
index deaf6b4..039fb86 100644
--- a/gst/icydemux/Makefile.in
+++ b/gst/icydemux/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/id3demux/Makefile.in b/gst/id3demux/Makefile.in
index 12bdcfb..a391eed 100644
--- a/gst/id3demux/Makefile.in
+++ b/gst/id3demux/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/imagefreeze/Makefile.in b/gst/imagefreeze/Makefile.in
index 4b02c41..487dcc8 100644
--- a/gst/imagefreeze/Makefile.in
+++ b/gst/imagefreeze/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/imagefreeze/gstimagefreeze.c b/gst/imagefreeze/gstimagefreeze.c
index 42a14e6..f122645 100644
--- a/gst/imagefreeze/gstimagefreeze.c
+++ b/gst/imagefreeze/gstimagefreeze.c
@@ -846,9 +846,7 @@
     } else if (flow_ret == GST_FLOW_NOT_LINKED || flow_ret < GST_FLOW_EOS) {
       GstEvent *e = gst_event_new_eos ();
 
-      GST_ELEMENT_ERROR (self, STREAM, FAILED,
-          ("Internal data stream error."),
-          ("stream stopped, reason %s", reason));
+      GST_ELEMENT_FLOW_ERROR (self, flow_ret);
 
       if (self->seqnum)
         gst_event_set_seqnum (e, self->seqnum);
diff --git a/gst/interleave/Makefile.in b/gst/interleave/Makefile.in
index d5cd553..d142f96 100644
--- a/gst/interleave/Makefile.in
+++ b/gst/interleave/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/isomp4/Makefile.in b/gst/isomp4/Makefile.in
index d1651cb..2e53256 100644
--- a/gst/isomp4/Makefile.in
+++ b/gst/isomp4/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -350,6 +351,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -456,6 +458,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -523,6 +528,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/isomp4/atoms.c b/gst/isomp4/atoms.c
index e0ec513..f53004e 100644
--- a/gst/isomp4/atoms.c
+++ b/gst/isomp4/atoms.c
@@ -398,6 +398,96 @@
 }
 
 static void
+atom_tcmi_init (AtomTCMI * tcmi)
+{
+  guint8 flags[3] = { 0, 0, 0 };
+
+  atom_full_init (&tcmi->header, FOURCC_tcmi, 0, 0, 0, flags);
+}
+
+static void
+atom_tcmi_clear (AtomTCMI * tcmi)
+{
+  atom_full_clear (&tcmi->header);
+  tcmi->text_font = 0;
+  tcmi->text_face = 0;
+  tcmi->text_size = 0;
+  tcmi->text_color[0] = 0;
+  tcmi->text_color[1] = 0;
+  tcmi->text_color[2] = 0;
+  tcmi->bg_color[0] = 0;
+  tcmi->bg_color[1] = 0;
+  tcmi->bg_color[2] = 0;
+  g_free (tcmi->font_name);
+  tcmi->font_name = NULL;
+}
+
+static void
+atom_tmcd_init (AtomTMCD * tmcd)
+{
+  atom_header_set (&tmcd->header, FOURCC_tmcd, 0, 0);
+  atom_tcmi_init (&tmcd->tcmi);
+}
+
+static void
+atom_tmcd_clear (AtomTMCD * tmcd)
+{
+  atom_clear (&tmcd->header);
+  atom_tcmi_clear (&tmcd->tcmi);
+}
+
+static void
+atom_gmin_init (AtomGMIN * gmin)
+{
+  guint8 flags[3] = { 0, 0, 0 };
+
+  atom_full_init (&gmin->header, FOURCC_gmin, 0, 0, 0, flags);
+}
+
+static void
+atom_gmin_clear (AtomGMIN * gmin)
+{
+  atom_full_clear (&gmin->header);
+  gmin->graphics_mode = 0;
+  gmin->opcolor[0] = 0;
+  gmin->opcolor[1] = 0;
+  gmin->opcolor[2] = 0;
+  gmin->balance = 0;
+  gmin->reserved = 0;
+}
+
+static void
+atom_gmhd_init (AtomGMHD * gmhd)
+{
+  atom_header_set (&gmhd->header, FOURCC_gmhd, 0, 0);
+  atom_gmin_init (&gmhd->gmin);
+  atom_tmcd_init (&gmhd->tmcd);
+}
+
+static void
+atom_gmhd_clear (AtomGMHD * gmhd)
+{
+  atom_clear (&gmhd->header);
+  atom_gmin_clear (&gmhd->gmin);
+  atom_tmcd_clear (&gmhd->tmcd);
+}
+
+static AtomGMHD *
+atom_gmhd_new (void)
+{
+  AtomGMHD *gmhd = g_new0 (AtomGMHD, 1);
+  atom_gmhd_init (gmhd);
+  return gmhd;
+}
+
+static void
+atom_gmhd_free (AtomGMHD * gmhd)
+{
+  atom_gmhd_clear (gmhd);
+  g_free (gmhd);
+}
+
+static void
 atom_sample_entry_init (SampleTableEntry * se, guint32 type)
 {
   atom_header_set (&se->header, type, 0, 0);
@@ -452,6 +542,30 @@
 }
 
 static void
+sample_entry_tmcd_init (SampleTableEntryTMCD * tmcd)
+{
+  atom_sample_entry_init (&tmcd->se, FOURCC_tmcd);
+
+  tmcd->tc_flags = 0;
+  tmcd->timescale = 0;
+  tmcd->frame_duration = 0;
+  tmcd->n_frames = 0;
+
+  tmcd->name.language_code = 0;
+  g_free (tmcd->name.name);
+  tmcd->name.name = NULL;
+}
+
+static SampleTableEntryTMCD *
+sample_entry_tmcd_new (void)
+{
+  SampleTableEntryTMCD *tmcd = g_new0 (SampleTableEntryTMCD, 1);
+
+  sample_entry_tmcd_init (tmcd);
+  return tmcd;
+}
+
+static void
 sample_entry_mp4v_init (SampleTableEntryMP4V * mp4v, AtomsContext * context)
 {
   atom_sample_entry_init (&mp4v->se, FOURCC_mp4v);
@@ -934,6 +1048,7 @@
   minf->vmhd = NULL;
   minf->smhd = NULL;
   minf->hmhd = NULL;
+  minf->gmhd = NULL;
 
   if (context->flavor == ATOMS_TREE_FLAVOR_MOV) {
     minf->hdlr = atom_hdlr_new (context);
@@ -961,6 +1076,10 @@
     atom_hmhd_free (minf->hmhd);
     minf->hmhd = NULL;
   }
+  if (minf->gmhd) {
+    atom_gmhd_free (minf->gmhd);
+    minf->gmhd = NULL;
+  }
 }
 
 static void
@@ -1140,6 +1259,40 @@
     atom_info_list_free (udta->entries);
 }
 
+static void
+atom_tref_init (AtomTREF * tref, guint32 reftype)
+{
+  atom_header_set (&tref->header, FOURCC_tref, 0, 0);
+  tref->reftype = reftype;
+  atom_array_init (&tref->entries, 128);
+}
+
+static void
+atom_tref_clear (AtomTREF * tref)
+{
+  atom_clear (&tref->header);
+  tref->reftype = 0;
+  atom_array_clear (&tref->entries);
+}
+
+AtomTREF *
+atom_tref_new (guint32 reftype)
+{
+  AtomTREF *tref;
+
+  tref = g_new0 (AtomTREF, 1);
+  atom_tref_init (tref, reftype);
+
+  return tref;
+}
+
+static void
+atom_tref_free (AtomTREF * tref)
+{
+  atom_tref_clear (tref);
+  g_free (tref);
+}
+
 /* Clear added tags, but keep the context/flavor the same */
 void
 atom_udta_clear_tags (AtomUDTA * udta)
@@ -1255,6 +1408,7 @@
   atom_udta_init (&trak->udta, context);
   trak->edts = NULL;
   atom_mdia_init (&trak->mdia, context);
+  trak->tref = NULL;
 }
 
 AtomTRAK *
@@ -1275,6 +1429,8 @@
     atom_edts_free (trak->edts);
   atom_udta_clear (&trak->udta);
   atom_mdia_clear (&trak->mdia);
+  if (trak->tref)
+    atom_tref_free (trak->tref);
 }
 
 static void
@@ -1651,6 +1807,91 @@
   return original_offset - *offset;
 }
 
+static guint64
+atom_tcmi_copy_data (AtomTCMI * tcmi, guint8 ** buffer, guint64 * size,
+    guint64 * offset)
+{
+  guint64 original_offset = *offset;
+
+  if (!atom_full_copy_data (&tcmi->header, buffer, size, offset)) {
+    return 0;
+  }
+  prop_copy_uint16 (tcmi->text_font, buffer, size, offset);
+  prop_copy_uint16 (tcmi->text_face, buffer, size, offset);
+  prop_copy_uint16 (tcmi->text_size, buffer, size, offset);
+  prop_copy_uint16 (tcmi->text_color[0], buffer, size, offset);
+  prop_copy_uint16 (tcmi->text_color[1], buffer, size, offset);
+  prop_copy_uint16 (tcmi->text_color[2], buffer, size, offset);
+  prop_copy_uint16 (tcmi->bg_color[0], buffer, size, offset);
+  prop_copy_uint16 (tcmi->bg_color[1], buffer, size, offset);
+  prop_copy_uint16 (tcmi->bg_color[2], buffer, size, offset);
+  /* reserved */
+  prop_copy_uint16 (0, buffer, size, offset);
+  prop_copy_size_string ((guint8 *) tcmi->font_name, strlen (tcmi->font_name),
+      buffer, size, offset);
+
+  atom_write_size (buffer, size, offset, original_offset);
+  return original_offset - *offset;
+}
+
+static guint64
+atom_tmcd_copy_data (AtomTMCD * tmcd, guint8 ** buffer, guint64 * size,
+    guint64 * offset)
+{
+  guint64 original_offset = *offset;
+
+  if (!atom_copy_data (&tmcd->header, buffer, size, offset)) {
+    return 0;
+  }
+  if (!atom_tcmi_copy_data (&tmcd->tcmi, buffer, size, offset)) {
+    return 0;
+  }
+
+  atom_write_size (buffer, size, offset, original_offset);
+  return original_offset - *offset;
+}
+
+static guint64
+atom_gmin_copy_data (AtomGMIN * gmin, guint8 ** buffer, guint64 * size,
+    guint64 * offset)
+{
+  guint64 original_offset = *offset;
+
+  if (!atom_full_copy_data (&gmin->header, buffer, size, offset)) {
+    return 0;
+  }
+  prop_copy_uint16 (gmin->graphics_mode, buffer, size, offset);
+  prop_copy_uint16 (gmin->opcolor[0], buffer, size, offset);
+  prop_copy_uint16 (gmin->opcolor[1], buffer, size, offset);
+  prop_copy_uint16 (gmin->opcolor[2], buffer, size, offset);
+  prop_copy_uint8 (gmin->balance, buffer, size, offset);
+  /* reserved */
+  prop_copy_uint8 (0, buffer, size, offset);
+
+  atom_write_size (buffer, size, offset, original_offset);
+  return original_offset - *offset;
+}
+
+static guint64
+atom_gmhd_copy_data (AtomGMHD * gmhd, guint8 ** buffer, guint64 * size,
+    guint64 * offset)
+{
+  guint64 original_offset = *offset;
+
+  if (!atom_copy_data (&gmhd->header, buffer, size, offset)) {
+    return 0;
+  }
+  if (!atom_gmin_copy_data (&gmhd->gmin, buffer, size, offset)) {
+    return 0;
+  }
+  if (!atom_tmcd_copy_data (&gmhd->tmcd, buffer, size, offset)) {
+    return 0;
+  }
+
+  atom_write_size (buffer, size, offset, original_offset);
+  return original_offset - *offset;
+}
+
 static gboolean
 atom_url_same_file_flag (AtomURL * url)
 {
@@ -1874,7 +2115,8 @@
     Atom atom;
 
     atom_header_set (&atom, FOURCC_ftab, 18, 0);
-    atom_copy_data (&atom, buffer, size, offset);
+    if (!atom_copy_data (&atom, buffer, size, offset))
+      return 0;
     prop_copy_uint16 (1, buffer, size, offset); /* Count must be 1 */
     prop_copy_uint16 (1, buffer, size, offset); /* Font id: 1 */
     prop_copy_size_string ((guint8 *) "Serif", 5, buffer, size, offset);
@@ -1884,6 +2126,45 @@
   return *offset - original_offset;
 }
 
+static guint64
+sample_entry_tmcd_copy_data (SampleTableEntryTMCD * tmcd, guint8 ** buffer,
+    guint64 * size, guint64 * offset)
+{
+  guint64 original_offset = *offset;
+
+  if (!atom_sample_entry_copy_data (&tmcd->se, buffer, size, offset)) {
+    return 0;
+  }
+
+  /* reserved */
+  prop_copy_uint32 (0, buffer, size, offset);
+
+  prop_copy_uint32 (tmcd->tc_flags, buffer, size, offset);
+  prop_copy_uint32 (tmcd->timescale, buffer, size, offset);
+  prop_copy_uint32 (tmcd->frame_duration, buffer, size, offset);
+  prop_copy_uint8 (tmcd->n_frames, buffer, size, offset);
+
+  /* reserved */
+  prop_copy_uint8 (0, buffer, size, offset);
+  {
+    Atom atom;
+    guint64 name_offset = *offset;
+
+    atom_header_set (&atom, FOURCC_name, 0, 0);
+    if (!atom_copy_data (&atom, buffer, size, offset))
+      return 0;
+    prop_copy_uint16 (strlen (tmcd->name.name), buffer, size, offset);
+    prop_copy_uint16 (tmcd->name.language_code, buffer, size, offset);
+    prop_copy_fixed_size_string ((guint8 *) tmcd->name.name,
+        strlen (tmcd->name.name), buffer, size, offset);
+
+    atom_write_size (buffer, size, offset, name_offset);
+  }
+
+  atom_write_size (buffer, size, offset, original_offset);
+  return *offset - original_offset;
+}
+
 guint64
 atom_stsz_copy_data (AtomSTSZ * stsz, guint8 ** buffer, guint64 * size,
     guint64 * offset)
@@ -2074,6 +2355,11 @@
                   walker->data, buffer, size, offset)) {
             return 0;
           }
+        } else if (se->kind == TIMECODE) {
+          if (!sample_entry_tmcd_copy_data ((SampleTableEntryTMCD *)
+                  walker->data, buffer, size, offset)) {
+            return 0;
+          }
         } else {
           if (!atom_hint_sample_entry_copy_data (
                   (AtomHintSampleEntry *) walker->data, buffer, size, offset)) {
@@ -2205,6 +2491,10 @@
     if (!atom_hmhd_copy_data (minf->hmhd, buffer, size, offset)) {
       return 0;
     }
+  } else if (minf->gmhd) {
+    if (!atom_gmhd_copy_data (minf->gmhd, buffer, size, offset)) {
+      return 0;
+    }
   }
 
   if (minf->hdlr) {
@@ -2294,6 +2584,34 @@
 }
 
 static guint64
+atom_tref_copy_data (AtomTREF * tref, guint8 ** buffer, guint64 * size,
+    guint64 * offset)
+{
+  guint64 original_offset = *offset;
+  guint i;
+
+  g_assert (atom_array_get_len (&tref->entries) > 0);
+
+  if (!atom_copy_data (&tref->header, buffer, size, offset)) {
+    return 0;
+  }
+
+  prop_copy_uint32 (8 + 4 * atom_array_get_len (&tref->entries), buffer, size,
+      offset);
+  prop_copy_fourcc (tref->reftype, buffer, size, offset);
+  /* minimize realloc */
+  prop_copy_ensure_buffer (buffer, size, offset,
+      4 * atom_array_get_len (&tref->entries));
+  for (i = 0; i < atom_array_get_len (&tref->entries); i++) {
+    prop_copy_uint32 (atom_array_index (&tref->entries, i), buffer, size,
+        offset);
+  }
+
+  atom_write_size (buffer, size, offset, original_offset);
+  return *offset - original_offset;
+}
+
+static guint64
 atom_edts_copy_data (AtomEDTS * edts, guint8 ** buffer, guint64 * size,
     guint64 * offset)
 {
@@ -2489,6 +2807,14 @@
       return 0;
     }
   }
+  if (trak->tref) {
+    /* Make sure we need this atom (there is a referenced track */
+    if (atom_array_get_len (&trak->tref->entries) > 0) {
+      if (!atom_tref_copy_data (trak->tref, buffer, size, offset)) {
+        return 0;
+      }
+    }
+  }
 
   if (!atom_mdia_copy_data (&trak->mdia, buffer, size, offset)) {
     return 0;
@@ -2628,6 +2954,12 @@
     stco64->header.header.type = FOURCC_co64;
 }
 
+void
+atom_tref_add_entry (AtomTREF * tref, guint32 sample)
+{
+  atom_array_append (&tref->entries, sample, 512);
+}
+
 static void
 atom_stss_add_entry (AtomSTSS * stss, guint32 sample)
 {
@@ -2789,6 +3121,36 @@
   }
 }
 
+static void
+timecode_atom_trak_set_duration (AtomTRAK * trak, guint64 duration,
+    guint64 timescale)
+{
+  STTSEntry *entry;
+  GList *iter;
+
+  /* Sanity checks to ensure we have a timecode */
+  g_assert (trak->mdia.minf.gmhd != NULL);
+  g_assert (atom_array_get_len (&trak->mdia.minf.stbl.stts.entries) == 1);
+
+  trak->tkhd.duration = duration;
+  trak->mdia.mdhd.time_info.duration = duration;
+  trak->mdia.mdhd.time_info.timescale = timescale;
+
+  entry = &atom_array_index (&trak->mdia.minf.stbl.stts.entries, 0);
+  entry->sample_delta = duration;
+
+  for (iter = trak->mdia.minf.stbl.stsd.entries; iter;
+      iter = g_list_next (iter)) {
+    SampleTableEntry *entry = iter->data;
+    if (entry->kind == TIMECODE) {
+      SampleTableEntryTMCD *tmcd = (SampleTableEntryTMCD *) entry;
+
+      tmcd->frame_duration = tmcd->frame_duration * timescale / tmcd->timescale;
+      tmcd->timescale = timescale;
+    }
+  }
+}
+
 static guint32
 atom_moov_get_timescale (AtomMOOV * moov)
 {
@@ -2810,10 +3172,23 @@
   while (traks) {
     AtomTRAK *trak = (AtomTRAK *) traks->data;
 
-    atom_trak_update_duration (trak, atom_moov_get_timescale (moov));
-    dur = atom_trak_get_duration (trak);
-    if (dur > duration)
-      duration = dur;
+    /* Skip timecodes for now: they have a placeholder duration */
+    if (trak->mdia.minf.gmhd == NULL) {
+      atom_trak_update_duration (trak, atom_moov_get_timescale (moov));
+      dur = atom_trak_get_duration (trak);
+      if (dur > duration)
+        duration = dur;
+    }
+    traks = g_list_next (traks);
+  }
+  /* Now update the duration of the timecodes */
+  traks = moov->traks;
+  while (traks) {
+    AtomTRAK *trak = (AtomTRAK *) traks->data;
+
+    if (trak->mdia.minf.gmhd != NULL)
+      timecode_atom_trak_set_duration (trak, duration,
+          atom_moov_get_timescale (moov));
     traks = g_list_next (traks);
   }
   moov->mvhd.time_info.duration = duration;
@@ -3323,6 +3698,34 @@
   return mp4a;
 }
 
+static SampleTableEntryTMCD *
+atom_trak_add_timecode_entry (AtomTRAK * trak, AtomsContext * context,
+    GstVideoTimeCode * tc)
+{
+  AtomSTSD *stsd = &trak->mdia.minf.stbl.stsd;
+  SampleTableEntryTMCD *tmcd = sample_entry_tmcd_new ();
+
+  trak->mdia.hdlr.component_type = FOURCC_mhlr;
+  trak->mdia.hdlr.handler_type = FOURCC_tmcd;
+  trak->mdia.hdlr.name = g_strdup ("Time Code Media Handler");
+  trak->mdia.mdhd.time_info.timescale = tc->config.fps_n / tc->config.fps_d;
+
+  tmcd->se.kind = TIMECODE;
+  tmcd->se.data_reference_index = 1;
+  tmcd->tc_flags = TC_24H_MAX;
+  if (tc->config.flags &= GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME)
+    tmcd->tc_flags |= TC_DROP_FRAME;
+  tmcd->name.language_code = 0;
+  tmcd->name.name = g_strdup ("Tape");
+  tmcd->timescale = tc->config.fps_n;
+  tmcd->frame_duration = tc->config.fps_d;
+  tmcd->n_frames = tc->config.fps_n / tc->config.fps_d;
+
+  stsd->entries = g_list_prepend (stsd->entries, tmcd);
+  stsd->n_entries++;
+  return tmcd;
+}
+
 static SampleTableEntryMP4V *
 atom_trak_add_video_entry (AtomTRAK * trak, AtomsContext * context,
     guint32 type)
@@ -3467,6 +3870,34 @@
   return ste;
 }
 
+SampleTableEntryTMCD *
+atom_trak_set_timecode_type (AtomTRAK * trak, AtomsContext * context,
+    GstVideoTimeCode * tc)
+{
+  SampleTableEntryTMCD *ste;
+  AtomGMHD *gmhd = trak->mdia.minf.gmhd;
+
+  if (context->flavor != ATOMS_TREE_FLAVOR_MOV) {
+    return NULL;
+  }
+
+  ste = atom_trak_add_timecode_entry (trak, context, tc);
+
+  gmhd = atom_gmhd_new ();
+  gmhd->gmin.graphics_mode = 0x0040;
+  gmhd->gmin.opcolor[0] = 0x8000;
+  gmhd->gmin.opcolor[1] = 0x8000;
+  gmhd->gmin.opcolor[2] = 0x8000;
+  gmhd->tmcd.tcmi.text_size = 12;
+  gmhd->tmcd.tcmi.font_name = g_strdup ("Chicago");     /* Pascal string */
+
+  trak->mdia.minf.gmhd = gmhd;
+  trak->is_video = FALSE;
+  trak->is_h264 = FALSE;
+
+  return ste;
+}
+
 static AtomInfo *
 build_pasp_extension (gint par_width, gint par_height)
 {
diff --git a/gst/isomp4/atoms.h b/gst/isomp4/atoms.h
index b105a4d..283d9cf 100644
--- a/gst/isomp4/atoms.h
+++ b/gst/isomp4/atoms.h
@@ -45,6 +45,7 @@
 
 #include <glib.h>
 #include <string.h>
+#include <gst/video/video.h>
 
 #include "descriptors.h"
 #include "properties.h"
@@ -281,6 +282,45 @@
   guint32 sliding_avg_bitrate;
 } AtomHMHD;
 
+typedef struct _AtomTCMI
+{
+  AtomFull header;
+
+  guint16 text_font;
+  guint16 text_face;
+  guint16 text_size;
+  guint16 text_color[3];
+  guint16 bg_color[3];
+  gchar *font_name;
+} AtomTCMI;
+
+typedef struct _AtomTMCD
+{
+  Atom header;
+
+  AtomTCMI tcmi;
+} AtomTMCD;
+
+typedef struct _AtomGMIN
+{
+  AtomFull header;
+
+  guint16 graphics_mode;
+  guint16 opcolor[3];
+  guint8 balance;
+  guint8 reserved;
+
+} AtomGMIN;
+
+typedef struct _AtomGMHD
+{
+  Atom header;
+
+  AtomGMIN gmin;
+  AtomTMCD tmcd;
+
+} AtomGMHD;
+
 typedef struct _AtomURL
 {
   AtomFull header;
@@ -342,6 +382,7 @@
   AUDIO,
   VIDEO,
   SUBTITLE,
+  TIMECODE
 } SampleEntryKind;
 
 typedef struct _SampleTableEntry
@@ -415,6 +456,27 @@
   GList *extension_atoms;
 } SampleTableEntryMP4A;
 
+typedef struct _AtomNAME
+{
+  Atom header;
+
+  guint8 language_code;
+  gchar *name;
+} AtomNAME;
+
+typedef struct _SampleTableEntryTMCD
+{
+  SampleTableEntry se;
+
+  guint32 tc_flags;
+  guint32 timescale;
+  guint32 frame_duration;
+  guint8 n_frames;
+
+  AtomNAME name;
+
+} SampleTableEntryTMCD;
+
 typedef struct _SampleTableEntryTX3G
 {
   SampleTableEntry se;
@@ -463,6 +525,14 @@
   ATOM_ARRAY (STSCEntry) entries;
 } AtomSTSC;
 
+/* FIXME: this can support multiple tracks */
+typedef struct _AtomTREF
+{
+  Atom header;
+
+  guint32 reftype;
+  ATOM_ARRAY (guint32) entries;
+} AtomTREF;
 
 /*
  * used for both STCO and CO64
@@ -514,6 +584,7 @@
   AtomVMHD *vmhd;
   AtomSMHD *smhd;
   AtomHMHD *hmhd;
+  AtomGMHD *gmhd;
 
   AtomHDLR *hdlr;
   AtomDINF dinf;
@@ -616,6 +687,15 @@
   TF_DEFAULT_BASE_IS_MOOF     = 0x020000  /* default-base-is-moof */
 };
 
+/* Timecode flags */
+enum TcFlags
+{
+  TC_DROP_FRAME = 0x0001,   /* Drop-frame timecode */
+  TC_24H_MAX = 0x0002,      /* Whether the timecode wraps after 24 hours */
+  TC_NEGATIVE_OK = 0x0004,  /* Whether negative time values are OK */
+  TC_COUNTER = 0x0008       /* Whether the time value corresponds to a tape counter value */
+};
+
 typedef struct _AtomTRAK
 {
   Atom header;
@@ -624,6 +704,7 @@
   AtomEDTS *edts;
   AtomMDIA mdia;
   AtomUDTA udta;
+  AtomTREF *tref;
 
   /* some helper info for structural conformity checks */
   gboolean is_video;
@@ -937,6 +1018,9 @@
 SampleTableEntryTX3G * atom_trak_set_subtitle_type (AtomTRAK * trak, AtomsContext * context,
                                SubtitleSampleEntry * entry);
 
+SampleTableEntryTMCD *
+atom_trak_set_timecode_type (AtomTRAK * trak, AtomsContext * context, GstVideoTimeCode * tc);
+
 void atom_trak_update_bitrates (AtomTRAK * trak, guint32 avg_bitrate,
                                 guint32 max_bitrate);
 
@@ -997,6 +1081,9 @@
 
 void atom_udta_add_xmp_tags          (AtomUDTA *udta, GstBuffer * xmp);
 
+AtomTREF * atom_tref_new (guint32 reftype);
+void atom_tref_add_entry (AtomTREF * tref, guint32 sample);
+
 #define GST_QT_MUX_DEFAULT_TAG_LANGUAGE   "und" /* undefined/unknown */
 guint16  language_code               (const char * lang);
 
diff --git a/gst/isomp4/fourcc.h b/gst/isomp4/fourcc.h
index 5bb43e9..9e7408b 100644
--- a/gst/isomp4/fourcc.h
+++ b/gst/isomp4/fourcc.h
@@ -215,7 +215,9 @@
 #define FOURCC_subp     GST_MAKE_FOURCC('s','u','b','p')
 #define FOURCC_subt     GST_MAKE_FOURCC('s','u','b','t')
 #define FOURCC_text     GST_MAKE_FOURCC('t','e','x','t')
+#define FOURCC_tcmi     GST_MAKE_FOURCC('t','c','m','i')
 #define FOURCC_tkhd     GST_MAKE_FOURCC('t','k','h','d')
+#define FOURCC_tmcd     GST_MAKE_FOURCC('t','m','c','d')
 #define FOURCC_tmpo     GST_MAKE_FOURCC('t','m','p','o')
 #define FOURCC_trak     GST_MAKE_FOURCC('t','r','a','k')
 #define FOURCC_tref     GST_MAKE_FOURCC('t','r','e','f')
diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c
index 5cabb8f..cf6633d 100644
--- a/gst/isomp4/gstqtmux.c
+++ b/gst/isomp4/gstqtmux.c
@@ -504,6 +504,7 @@
   qtpad->total_duration = 0;
   qtpad->total_bytes = 0;
   qtpad->sparse = FALSE;
+  qtpad->tc_trak = NULL;
 
   qtpad->buf_head = 0;
   qtpad->buf_tail = 0;
@@ -604,6 +605,8 @@
   qtmux->last_moov_update = GST_CLOCK_TIME_NONE;
   qtmux->muxed_since_last_update = 0;
   qtmux->reserved_duration_remaining = GST_CLOCK_TIME_NONE;
+  qtmux->first_pts = GST_CLOCK_TIME_NONE;
+  qtmux->tc_pos = -1;
 }
 
 static void
@@ -2498,6 +2501,10 @@
       duration += lateness;
 
       qtpad->trak->tkhd.duration = duration;
+      if (qtpad->tc_trak) {
+        qtpad->tc_trak->tkhd.duration = duration;
+        qtpad->tc_trak->mdia.mdhd.time_info.duration = duration;
+      }
 
       /* And possibly grow the moov duration */
       if (duration > qtmux->moov->mvhd.time_info.duration) {
@@ -2509,6 +2516,33 @@
 }
 
 static GstFlowReturn
+gst_qt_mux_update_timecode (GstQTMux * qtmux)
+{
+  GstSegment segment;
+  GstBuffer *buf;
+  GstMapInfo map;
+  guint64 offset = qtmux->tc_pos;
+
+  g_assert (qtmux->tc_pos != -1);
+
+  gst_segment_init (&segment, GST_FORMAT_BYTES);
+  segment.start = offset;
+  gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment));
+
+  buf = gst_buffer_new_and_alloc (4);
+  gst_buffer_map (buf, &map, GST_MAP_WRITE);
+
+  GST_WRITE_UINT32_BE (map.data,
+      gst_video_time_code_frames_since_daily_jam (qtmux->first_tc));
+  gst_buffer_unmap (buf, &map);
+
+  /* Reset this value, so the timecode won't be re-rewritten */
+  qtmux->tc_pos = -1;
+
+  return gst_qt_mux_send_buffer (qtmux, buf, &offset, FALSE);
+}
+
+static GstFlowReturn
 gst_qt_mux_stop_file (GstQTMux * qtmux)
 {
   gboolean ret = GST_FLOW_OK;
@@ -2528,6 +2562,13 @@
   }
 
   gst_qt_mux_update_global_statistics (qtmux);
+  if (qtmux->tc_pos != -1) {
+    /* File is being stopped and timecode hasn't been updated. Update it now
+     * with whatever we have */
+    ret = gst_qt_mux_update_timecode (qtmux);
+    if (ret != GST_FLOW_OK)
+      return ret;
+  }
 
   switch (qtmux->mux_mode) {
     case GST_QT_MUX_MODE_FRAGMENTED:{
@@ -2979,6 +3020,84 @@
   return ret;
 }
 
+static GstFlowReturn
+gst_qt_mux_check_and_update_timecode (GstQTMux * qtmux, GstQTPad * pad,
+    GstBuffer * buf, GstFlowReturn ret)
+{
+  if (buf != NULL && (pad->tc_trak == NULL || qtmux->tc_pos != -1)) {
+    GstVideoTimeCodeMeta *tc_meta = gst_buffer_get_video_time_code_meta (buf);
+    if (tc_meta) {
+      GstVideoTimeCode *tc = &tc_meta->tc;
+      GstBuffer *tc_buf;
+      gsize szret;
+      guint32 frames_since_daily_jam;
+
+      /* This means we never got a timecode before */
+      if (qtmux->first_tc == NULL) {
+#ifndef GST_DISABLE_GST_DEBUG
+        gchar *tc_str = gst_video_time_code_to_string (tc);
+        GST_DEBUG_OBJECT (qtmux, "Found first timecode %s", tc_str);
+        g_free (tc_str);
+#endif
+        g_assert (pad->tc_trak == NULL);
+        tc_buf = gst_buffer_new_allocate (NULL, 4, NULL);
+        qtmux->first_tc = gst_video_time_code_copy (tc);
+        /* If frames are out of order, the frame we're currently getting might
+         * not be the first one. Just write a 0 timecode for now and wait
+         * until we receive a timecode that's lower than the current one */
+        if (pad->is_out_of_order) {
+          qtmux->first_pts = GST_BUFFER_PTS (buf);
+          frames_since_daily_jam = 0;
+          /* Position to rewrite */
+          qtmux->tc_pos = qtmux->mdat_size;
+        } else {
+          frames_since_daily_jam =
+              gst_video_time_code_frames_since_daily_jam (qtmux->first_tc);
+          frames_since_daily_jam = GUINT32_TO_BE (frames_since_daily_jam);
+        }
+        /* Write the timecode trak now */
+        pad->tc_trak = atom_trak_new (qtmux->context);
+        atom_moov_add_trak (qtmux->moov, pad->tc_trak);
+
+        pad->trak->tref = atom_tref_new (FOURCC_tmcd);
+        atom_tref_add_entry (pad->trak->tref, pad->tc_trak->tkhd.track_ID);
+
+        atom_trak_set_timecode_type (pad->tc_trak, qtmux->context,
+            qtmux->first_tc);
+
+        szret = gst_buffer_fill (tc_buf, 0, &frames_since_daily_jam, 4);
+        g_assert (szret == 4);
+
+        atom_trak_add_samples (pad->tc_trak, 1, 1, 4, qtmux->mdat_size, FALSE,
+            0);
+        ret = gst_qt_mux_send_buffer (qtmux, tc_buf, &qtmux->mdat_size, TRUE);
+      } else if (pad->is_out_of_order) {
+        /* Check for a lower timecode than the one stored */
+        g_assert (pad->tc_trak != NULL);
+        if (GST_BUFFER_DTS (buf) <= qtmux->first_pts) {
+          if (gst_video_time_code_compare (tc, qtmux->first_tc) == -1) {
+            gst_video_time_code_free (qtmux->first_tc);
+            qtmux->first_tc = gst_video_time_code_copy (tc);
+          }
+        } else {
+          guint64 bk_size = qtmux->mdat_size;
+          GstSegment segment;
+          /* If this frame's DTS is after the first PTS received, it means
+           * we've already received the first frame to be presented. Otherwise
+           * the decoder would need to go back in time */
+          gst_qt_mux_update_timecode (qtmux);
+
+          /* Reset writing position */
+          gst_segment_init (&segment, GST_FORMAT_BYTES);
+          segment.start = bk_size;
+          gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment));
+        }
+      }
+    }
+  }
+  return ret;
+}
+
 /*
  * Here we push the buffer and update the tables in the track atoms
  */
@@ -3025,6 +3144,8 @@
     }
   }
 
+  ret = gst_qt_mux_check_and_update_timecode (qtmux, pad, buf, ret);
+
   if (last_buf && !buf && !GST_BUFFER_DURATION_IS_VALID (last_buf)) {
     /* this is last buffer; there is no next buffer so we need valid number as duration */
     last_buf = gst_buffer_make_writable (last_buf);
@@ -4567,6 +4688,8 @@
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       gst_collect_pads_start (qtmux->collect);
       qtmux->state = GST_QT_MUX_STATE_STARTED;
+      qtmux->first_tc = NULL;
+      qtmux->tc_pos = -1;
       break;
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
       break;
diff --git a/gst/isomp4/gstqtmux.h b/gst/isomp4/gstqtmux.h
index 81a23fa..5fd7df9 100644
--- a/gst/isomp4/gstqtmux.h
+++ b/gst/isomp4/gstqtmux.h
@@ -123,6 +123,7 @@
   /* all the atom and chunk book-keeping is delegated here
    * unowned/uncounted reference, parent MOOV owns */
   AtomTRAK *trak;
+  AtomTRAK *tc_trak;
   SampleTableEntry *trak_ste;
   /* fragmented support */
   /* meta data book-keeping delegated here */
@@ -205,6 +206,10 @@
   /* Set when tags are received, cleared when written to moov */
   gboolean tags_changed;
 
+  /* SMPTE timecode */
+  GstVideoTimeCode *first_tc;
+  GstClockTime first_pts;
+  guint64 tc_pos;
 
   /* fragmented file index */
   AtomMFRA *mfra;
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index be9b4e7..9768cc9 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -1719,11 +1719,6 @@
       }
       gst_event_unref (event);
       break;
-    case GST_EVENT_QOS:
-    case GST_EVENT_NAVIGATION:
-      res = FALSE;
-      gst_event_unref (event);
-      break;
     default:
     upstream:
       res = gst_pad_event_default (pad, parent, event);
@@ -5771,8 +5766,7 @@
         gst_qtdemux_push_event (qtdemux, event);
       }
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
-      GST_ELEMENT_ERROR (qtdemux, STREAM, FAILED,
-          (NULL), ("streaming stopped, reason %s", reason));
+      GST_ELEMENT_FLOW_ERROR (qtdemux, ret);
       gst_qtdemux_push_event (qtdemux, gst_event_new_eos ());
     }
     goto done;
@@ -6095,6 +6089,7 @@
         /* Reset state if it's a real discont */
         demux->neededbytes = 16;
         demux->state = QTDEMUX_STATE_INITIAL;
+        demux->offset = GST_BUFFER_OFFSET (inbuf);
       }
     }
     /* Reverse fragmented playback, need to flush all we have before
@@ -12693,11 +12688,11 @@
             profile_str = "main";
             profile = 0;
             break;
-          case 67:
+          case 0x67:
             profile_str = "lc";
             profile = 1;
             break;
-          case 68:
+          case 0x68:
             profile_str = "ssr";
             profile = 2;
             break;
diff --git a/gst/law/Makefile.in b/gst/law/Makefile.in
index 310f2fa..d7a6cc6 100644
--- a/gst/law/Makefile.in
+++ b/gst/law/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -352,6 +353,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -458,6 +460,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -525,6 +530,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/level/Makefile.in b/gst/level/Makefile.in
index 6d1908d..f619003 100644
--- a/gst/level/Makefile.in
+++ b/gst/level/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/matroska/Makefile.in b/gst/matroska/Makefile.in
index 3e526c9..3a1382c 100644
--- a/gst/matroska/Makefile.in
+++ b/gst/matroska/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -350,6 +351,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -456,6 +458,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -523,6 +528,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index ccfa04d..bceda52 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -4756,8 +4756,7 @@
       }
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
       /* for fatal errors we post an error message */
-      GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
-          ("stream stopped, reason %s", reason));
+      GST_ELEMENT_FLOW_ERROR (demux, ret);
       push_eos = TRUE;
     }
     if (push_eos) {
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index 9f28024..4922496 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -1216,7 +1216,8 @@
   } else if (!strcmp (mimetype, "video/x-msmpeg")) {
   msmpeg43:
     /* can only make it here if preceding case verified it was version 3 */
-    context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3);
+    gst_matroska_mux_set_codec_id (context,
+        GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3);
   } else if (!strcmp (mimetype, "video/x-pn-realvideo")) {
     gint rmversion;
     const GValue *mdpr_data;
@@ -1854,7 +1855,8 @@
         }
 
         if (buf) {
-          context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_AUDIO_AAC);
+          gst_matroska_mux_set_codec_id (context,
+              GST_MATROSKA_CODEC_ID_AUDIO_AAC);
           context->codec_priv_size = gst_buffer_get_size (buf);
           context->codec_priv = g_malloc (context->codec_priv_size);
           gst_buffer_extract (buf, 0, context->codec_priv,
@@ -2290,7 +2292,7 @@
   GstMatroskaTrackContext *context = NULL;
   gint pad_id;
   gboolean locked = TRUE;
-  gchar *id = NULL;
+  const gchar *id = NULL;
 
   if (templ == gst_element_class_get_pad_template (klass, "audio_%u")) {
     /* don't mix named and unnamed pads, if the pad already exists we fail when
@@ -2335,7 +2337,7 @@
     context->type = GST_MATROSKA_TRACK_TYPE_SUBTITLE;
     context->name = g_strdup ("Subtitle");
     /* setcaps may only provide proper one a lot later */
-    id = g_strdup ("S_SUB_UNKNOWN");
+    id = "S_SUB_UNKNOWN";
     locked = FALSE;
   } else {
     GST_WARNING_OBJECT (mux, "This is not our template!");
@@ -2354,7 +2356,8 @@
   collect_pad->mux = mux;
   collect_pad->track = context;
   gst_matroska_pad_reset (collect_pad, FALSE);
-  collect_pad->track->codec_id = id;
+  if (id)
+    gst_matroska_mux_set_codec_id (collect_pad->track, id);
   collect_pad->track->dts_only = FALSE;
 
   collect_pad->capsfunc = capsfunc;
@@ -2872,22 +2875,21 @@
   for (collected = mux->collect->data; collected;
       collected = g_slist_next (collected)) {
     GstMatroskaPad *collect_pad;
-    GstPad *thepad;
 
     collect_pad = (GstMatroskaPad *) collected->data;
-    thepad = collect_pad->collect.pad;
 
-    if (gst_pad_is_linked (thepad) && gst_pad_is_active (thepad) &&
-        collect_pad->track->codec_id != 0) {
-      collect_pad->track->num = tracknum++;
-      child = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_TRACKENTRY);
-      gst_matroska_mux_track_header (mux, collect_pad->track);
-      gst_ebml_write_master_finish (ebml, child);
-      /* some remaining pad/track setup */
-      collect_pad->default_duration_scaled =
-          gst_util_uint64_scale (collect_pad->track->default_duration,
-          1, mux->time_scale);
-    }
+    /* This will cause an error at a later time */
+    if (collect_pad->track->codec_id == NULL)
+      continue;
+
+    collect_pad->track->num = tracknum++;
+    child = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_TRACKENTRY);
+    gst_matroska_mux_track_header (mux, collect_pad->track);
+    gst_ebml_write_master_finish (ebml, child);
+    /* some remaining pad/track setup */
+    collect_pad->default_duration_scaled =
+        gst_util_uint64_scale (collect_pad->track->default_duration,
+        1, mux->time_scale);
   }
   gst_ebml_write_master_finish (ebml, master);
 
@@ -3541,12 +3543,11 @@
   }
 
   /* for dirac we have to queue up everything up to a picture unit */
-  if (!g_strcmp0 (collect_pad->track->codec_id,
-          GST_MATROSKA_CODEC_ID_VIDEO_DIRAC)) {
+  if (!strcmp (collect_pad->track->codec_id, GST_MATROSKA_CODEC_ID_VIDEO_DIRAC)) {
     buf = gst_matroska_mux_handle_dirac_packet (mux, collect_pad, buf);
     if (!buf)
       return GST_FLOW_OK;
-  } else if (!g_strcmp0 (collect_pad->track->codec_id,
+  } else if (!strcmp (collect_pad->track->codec_id,
           GST_MATROSKA_CODEC_ID_VIDEO_PRORES)) {
     /* Remove the 'Frame container atom' header' */
     buf = gst_buffer_make_writable (buf);
@@ -3817,6 +3818,12 @@
     goto exit;
   }
 
+  if (best->track->codec_id == NULL) {
+    GST_ERROR_OBJECT (best->collect.pad, "No codec-id for pad");
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto exit;
+  }
+
   /* if we have a best stream, should also have a buffer */
   g_assert (buf);
 
diff --git a/gst/matroska/matroska-parse.c b/gst/matroska/matroska-parse.c
index cc064b0..97c57e7 100644
--- a/gst/matroska/matroska-parse.c
+++ b/gst/matroska/matroska-parse.c
@@ -2920,8 +2920,7 @@
       }
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
       /* for fatal errors we post an error message */
-      GST_ELEMENT_ERROR (parse, STREAM, FAILED, (NULL),
-          ("stream stopped, reason %s", reason));
+      GST_ELEMENT_FLOW_ERROR (parse, ret);
       push_eos = TRUE;
     }
     if (push_eos) {
diff --git a/gst/monoscope/Makefile.in b/gst/monoscope/Makefile.in
index 28a2bff..efa790b 100644
--- a/gst/monoscope/Makefile.in
+++ b/gst/monoscope/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/multifile/Makefile.in b/gst/multifile/Makefile.in
index 6fb713f..80583fc 100644
--- a/gst/multifile/Makefile.in
+++ b/gst/multifile/Makefile.in
@@ -101,6 +101,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -371,6 +372,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -477,6 +479,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -544,6 +549,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/multifile/gstsplitmuxsink.c b/gst/multifile/gstsplitmuxsink.c
index 88fdce0..585b1ff 100644
--- a/gst/multifile/gstsplitmuxsink.c
+++ b/gst/multifile/gstsplitmuxsink.c
@@ -55,6 +55,7 @@
 
 #include <string.h>
 #include <glib/gstdio.h>
+#include <gst/video/video.h>
 #include "gstsplitmuxsink.h"
 
 GST_DEBUG_CATEGORY_STATIC (splitmux_debug);
@@ -71,6 +72,7 @@
   PROP_LOCATION,
   PROP_MAX_SIZE_TIME,
   PROP_MAX_SIZE_BYTES,
+  PROP_SEND_KEYFRAME_REQUESTS,
   PROP_MAX_FILES,
   PROP_MUXER_OVERHEAD,
   PROP_MUXER,
@@ -81,6 +83,7 @@
 #define DEFAULT_MAX_SIZE_BYTES      0
 #define DEFAULT_MAX_FILES           0
 #define DEFAULT_MUXER_OVERHEAD      0.02
+#define DEFAULT_SEND_KEYFRAME_REQUESTS FALSE
 #define DEFAULT_MUXER "mp4mux"
 #define DEFAULT_SINK "filesink"
 
@@ -207,11 +210,18 @@
       g_param_spec_uint64 ("max-size-bytes", "Max. size bytes",
           "Max. amount of data per file (in bytes, 0=disable)", 0, G_MAXUINT64,
           DEFAULT_MAX_SIZE_BYTES, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_SEND_KEYFRAME_REQUESTS,
+      g_param_spec_boolean ("send-keyframe-requests",
+          "Request keyframes at max-size-time",
+          "Request a keyframe every max-size-time ns to try splitting at that point. "
+          "Needs max-size-bytes to be 0 in order to be effective.",
+          DEFAULT_SEND_KEYFRAME_REQUESTS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_MAX_FILES,
       g_param_spec_uint ("max-files", "Max files",
           "Maximum number of files to keep on disk. Once the maximum is reached,"
-          "old files start to be deleted to make room for new ones.",
-          0, G_MAXUINT, DEFAULT_MAX_FILES,
+          "old files start to be deleted to make room for new ones.", 0,
+          G_MAXUINT, DEFAULT_MAX_FILES,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
 
@@ -246,9 +256,9 @@
   splitmux->threshold_time = DEFAULT_MAX_SIZE_TIME;
   splitmux->threshold_bytes = DEFAULT_MAX_SIZE_BYTES;
   splitmux->max_files = DEFAULT_MAX_FILES;
+  splitmux->send_keyframe_requests = DEFAULT_SEND_KEYFRAME_REQUESTS;
 
   GST_OBJECT_FLAG_SET (splitmux, GST_ELEMENT_FLAG_SINK);
-  g_object_set (splitmux, "async-handling", TRUE, NULL);
 }
 
 static void
@@ -321,6 +331,11 @@
       splitmux->threshold_time = g_value_get_uint64 (value);
       GST_OBJECT_UNLOCK (splitmux);
       break;
+    case PROP_SEND_KEYFRAME_REQUESTS:
+      GST_OBJECT_LOCK (splitmux);
+      splitmux->send_keyframe_requests = g_value_get_boolean (value);
+      GST_OBJECT_UNLOCK (splitmux);
+      break;
     case PROP_MAX_FILES:
       GST_OBJECT_LOCK (splitmux);
       splitmux->max_files = g_value_get_uint (value);
@@ -373,6 +388,11 @@
       g_value_set_uint64 (value, splitmux->threshold_time);
       GST_OBJECT_UNLOCK (splitmux);
       break;
+    case PROP_SEND_KEYFRAME_REQUESTS:
+      GST_OBJECT_LOCK (splitmux);
+      g_value_set_boolean (value, splitmux->send_keyframe_requests);
+      GST_OBJECT_UNLOCK (splitmux);
+      break;
     case PROP_MAX_FILES:
       GST_OBJECT_LOCK (splitmux);
       g_value_set_uint (value, splitmux->max_files);
@@ -399,6 +419,23 @@
   }
 }
 
+/* Convenience function */
+static inline GstClockTimeDiff
+my_segment_to_running_time (GstSegment * segment, GstClockTime val)
+{
+  GstClockTimeDiff res = GST_CLOCK_STIME_NONE;
+
+  if (GST_CLOCK_TIME_IS_VALID (val)) {
+    gboolean sign =
+        gst_segment_to_running_time_full (segment, GST_FORMAT_TIME, val, &val);
+    if (sign > 0)
+      res = val;
+    else if (sign < 0)
+      res = -val;
+  }
+  return res;
+}
+
 static GstPad *
 mq_sink_to_src (GstElement * mq, GstPad * sink_pad)
 {
@@ -454,7 +491,7 @@
   ctx->splitmux = splitmux;
   gst_segment_init (&ctx->in_segment, GST_FORMAT_UNDEFINED);
   gst_segment_init (&ctx->out_segment, GST_FORMAT_UNDEFINED);
-  ctx->in_running_time = ctx->out_running_time = 0;
+  ctx->in_running_time = ctx->out_running_time = GST_CLOCK_STIME_NONE;
   g_queue_init (&ctx->queued_bufs);
   return ctx;
 }
@@ -546,11 +583,11 @@
   do {
 
     GST_LOG_OBJECT (ctx->srcpad,
-        "Checking running time %" GST_TIME_FORMAT " against max %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (ctx->out_running_time),
-        GST_TIME_ARGS (splitmux->max_out_running_time));
+        "Checking running time %" GST_STIME_FORMAT " against max %"
+        GST_STIME_FORMAT, GST_STIME_ARGS (ctx->out_running_time),
+        GST_STIME_ARGS (splitmux->max_out_running_time));
 
-    if (splitmux->max_out_running_time == GST_CLOCK_TIME_NONE ||
+    if (splitmux->max_out_running_time == GST_CLOCK_STIME_NONE ||
         ctx->out_running_time < splitmux->max_out_running_time) {
       splitmux->have_muxed_something = TRUE;
       return;
@@ -571,20 +608,36 @@
 
     GST_INFO_OBJECT (ctx->srcpad,
         "Sleeping for running time %"
-        GST_TIME_FORMAT " (max %" GST_TIME_FORMAT ")",
-        GST_TIME_ARGS (ctx->out_running_time),
-        GST_TIME_ARGS (splitmux->max_out_running_time));
+        GST_STIME_FORMAT " (max %" GST_STIME_FORMAT ")",
+        GST_STIME_ARGS (ctx->out_running_time),
+        GST_STIME_ARGS (splitmux->max_out_running_time));
     ctx->out_blocked = TRUE;
     /* Expand the mq if needed before sleeping */
     check_queue_length (splitmux, ctx);
     GST_SPLITMUX_WAIT (splitmux);
     ctx->out_blocked = FALSE;
     GST_INFO_OBJECT (ctx->srcpad,
-        "Woken for new max running time %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (splitmux->max_out_running_time));
+        "Woken for new max running time %" GST_STIME_FORMAT,
+        GST_STIME_ARGS (splitmux->max_out_running_time));
   } while (1);
 }
 
+static gboolean
+request_next_keyframe (GstSplitMuxSink * splitmux)
+{
+  GstEvent *ev;
+
+  if (splitmux->send_keyframe_requests == FALSE || splitmux->threshold_time == 0
+      || splitmux->threshold_bytes != 0)
+    return TRUE;
+
+  ev = gst_video_event_new_upstream_force_key_unit (splitmux->fragment_id *
+      splitmux->threshold_time, TRUE, 0);
+  GST_DEBUG_OBJECT (splitmux, "Requesting next keyframe at %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (splitmux->fragment_id * splitmux->threshold_time));
+  return gst_pad_push_event (splitmux->reference_ctx->sinkpad, ev);
+}
+
 static GstPadProbeReturn
 handle_mq_output (GstPad * pad, GstPadProbeInfo * info, MqStreamCtx * ctx)
 {
@@ -631,6 +684,7 @@
         break;
       case GST_EVENT_GAP:{
         GstClockTime gap_ts;
+        GstClockTimeDiff rtime;
 
         gst_event_parse_gap (event, &gap_ts, NULL);
         if (gap_ts == GST_CLOCK_TIME_NONE)
@@ -638,28 +692,30 @@
 
         GST_SPLITMUX_LOCK (splitmux);
 
-        gap_ts = gst_segment_to_running_time (&ctx->out_segment,
-            GST_FORMAT_TIME, gap_ts);
+        rtime = my_segment_to_running_time (&ctx->out_segment, gap_ts);
 
-        GST_LOG_OBJECT (pad, "Have GAP w/ ts %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (gap_ts));
+        GST_LOG_OBJECT (pad, "Have GAP w/ ts %" GST_STIME_FORMAT,
+            GST_STIME_ARGS (rtime));
 
         if (splitmux->state == SPLITMUX_STATE_STOPPED)
           goto beach;
-        ctx->out_running_time = gap_ts;
-        complete_or_wait_on_out (splitmux, ctx);
+
+        if (rtime != GST_CLOCK_STIME_NONE) {
+          ctx->out_running_time = rtime;
+          complete_or_wait_on_out (splitmux, ctx);
+        }
         GST_SPLITMUX_UNLOCK (splitmux);
         break;
       }
       case GST_EVENT_CUSTOM_DOWNSTREAM:{
         const GstStructure *s;
-        GstClockTime ts = 0;
+        GstClockTimeDiff ts = 0;
 
         s = gst_event_get_structure (event);
         if (!gst_structure_has_name (s, "splitmuxsink-unblock"))
           break;
 
-        gst_structure_get_uint64 (s, "timestamp", &ts);
+        gst_structure_get_int64 (s, "timestamp", &ts);
 
         GST_SPLITMUX_LOCK (splitmux);
 
@@ -691,29 +747,33 @@
   ctx->out_running_time = buf_info->run_ts;
 
   GST_LOG_OBJECT (splitmux,
-      "Pad %" GST_PTR_FORMAT " buffer with TS %" GST_TIME_FORMAT
-      " size %" G_GSIZE_FORMAT,
-      pad, GST_TIME_ARGS (ctx->out_running_time), buf_info->buf_size);
+      "Pad %" GST_PTR_FORMAT " buffer with run TS %" GST_STIME_FORMAT
+      " size %" G_GUINT64_FORMAT,
+      pad, GST_STIME_ARGS (ctx->out_running_time), buf_info->buf_size);
 
   if (splitmux->opening_first_fragment) {
+    if (request_next_keyframe (splitmux) == FALSE)
+      GST_WARNING_OBJECT (splitmux,
+          "Could not request a keyframe. Files may not split at the exact location they should");
     send_fragment_opened_closed_msg (splitmux, TRUE);
     splitmux->opening_first_fragment = FALSE;
   }
 
   complete_or_wait_on_out (splitmux, ctx);
 
-  if (splitmux->muxed_out_time == GST_CLOCK_TIME_NONE ||
+  if (splitmux->muxed_out_time == GST_CLOCK_STIME_NONE ||
       splitmux->muxed_out_time < buf_info->run_ts)
     splitmux->muxed_out_time = buf_info->run_ts;
 
   splitmux->muxed_out_bytes += buf_info->buf_size;
+  splitmux->last_frame_duration = buf_info->duration;
 
 #ifndef GST_DISABLE_GST_DEBUG
   {
     GstBuffer *buf = gst_pad_probe_info_get_buffer (info);
     GST_LOG_OBJECT (pad, "Returning to pass buffer %" GST_PTR_FORMAT
-        " run ts %" GST_TIME_FORMAT, buf,
-        GST_TIME_ARGS (ctx->out_running_time));
+        " run ts %" GST_STIME_FORMAT, buf,
+        GST_STIME_ARGS (ctx->out_running_time));
   }
 #endif
 
@@ -756,6 +816,8 @@
 start_next_fragment (GstSplitMuxSink * splitmux)
 {
   /* 1 change to new file */
+  splitmux->switching_fragment = TRUE;
+
   gst_element_set_locked_state (splitmux->muxer, TRUE);
   gst_element_set_locked_state (splitmux->active_sink, TRUE);
   gst_element_set_state (splitmux->muxer, GST_STATE_NULL);
@@ -768,6 +830,8 @@
   gst_element_set_locked_state (splitmux->muxer, FALSE);
   gst_element_set_locked_state (splitmux->active_sink, FALSE);
 
+  splitmux->switching_fragment = FALSE;
+
   g_list_foreach (splitmux->contexts, (GFunc) restart_context, splitmux);
 
   /* Switch state and go back to processing */
@@ -776,7 +840,7 @@
     splitmux->max_out_running_time = splitmux->reference_ctx->in_running_time;
   } else {
     splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
-    splitmux->max_out_running_time = GST_CLOCK_TIME_NONE;
+    splitmux->max_out_running_time = GST_CLOCK_STIME_NONE;
     splitmux->have_muxed_something = FALSE;
   }
   splitmux->have_muxed_something =
@@ -784,13 +848,18 @@
 
   /* Store the overflow parameters as the basis for the next fragment */
   splitmux->mux_start_time = splitmux->muxed_out_time;
+  if (splitmux->last_frame_duration != GST_CLOCK_STIME_NONE)
+    splitmux->mux_start_time += splitmux->last_frame_duration;
   splitmux->mux_start_bytes = splitmux->muxed_out_bytes;
 
   GST_DEBUG_OBJECT (splitmux,
-      "Restarting flow for new fragment. New running time %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (splitmux->max_out_running_time));
+      "Restarting flow for new fragment. New running time %" GST_STIME_FORMAT,
+      GST_STIME_ARGS (splitmux->max_out_running_time));
 
   send_fragment_opened_closed_msg (splitmux, TRUE);
+  if (request_next_keyframe (splitmux) == FALSE)
+    GST_WARNING_OBJECT (splitmux,
+        "Could not request a keyframe. Files may not split at the exact location they should");
 
   GST_SPLITMUX_BROADCAST (splitmux);
 }
@@ -808,7 +877,7 @@
       send_fragment_opened_closed_msg (splitmux, FALSE);
 
       if (splitmux->state == SPLITMUX_STATE_ENDING_FILE &&
-          splitmux->max_out_running_time != GST_CLOCK_TIME_NONE) {
+          splitmux->max_out_running_time != GST_CLOCK_STIME_NONE) {
         GST_DEBUG_OBJECT (splitmux, "Caught EOS at end of fragment, dropping");
         splitmux->state = SPLITMUX_STATE_START_NEXT_FRAGMENT;
         GST_SPLITMUX_BROADCAST (splitmux);
@@ -819,6 +888,20 @@
       }
       GST_SPLITMUX_UNLOCK (splitmux);
       break;
+    case GST_MESSAGE_ASYNC_START:
+    case GST_MESSAGE_ASYNC_DONE:
+      /* Ignore state changes from our children while switching */
+      if (splitmux->switching_fragment) {
+        if (GST_MESSAGE_SRC (message) == (GstObject *) splitmux->active_sink ||
+            GST_MESSAGE_SRC (message) == (GstObject *) splitmux->muxer) {
+          GST_LOG_OBJECT (splitmux,
+              "Ignoring state change from child %" GST_PTR_FORMAT
+              " while switching", GST_MESSAGE_SRC (message));
+          gst_message_unref (message);
+          return;
+        }
+      }
+      break;
     default:
       break;
   }
@@ -837,8 +920,8 @@
 handle_gathered_gop (GstSplitMuxSink * splitmux)
 {
   GList *cur;
-  gsize queued_bytes = 0;
-  GstClockTime queued_time = 0;
+  guint64 queued_bytes = 0;
+  GstClockTimeDiff queued_time = 0;
 
   /* Assess if the multiqueue contents overflowed the current file */
   for (cur = g_list_first (splitmux->contexts);
@@ -849,6 +932,9 @@
     queued_bytes += tmpctx->in_bytes;
   }
 
+  GST_LOG_OBJECT (splitmux, " queued_bytes %" G_GUINT64_FORMAT
+      " splitmuxsink->mux_start_bytes %" G_GUINT64_FORMAT, queued_bytes,
+      splitmux->mux_start_bytes);
   g_assert (queued_bytes >= splitmux->mux_start_bytes);
   g_assert (queued_time >= splitmux->mux_start_time);
 
@@ -858,31 +944,30 @@
   /* Expand queued bytes estimate by muxer overhead */
   queued_bytes += (queued_bytes * splitmux->mux_overhead);
 
-  GST_LOG_OBJECT (splitmux, "mq at TS %" GST_TIME_FORMAT
-      " bytes %" G_GSIZE_FORMAT, GST_TIME_ARGS (queued_time), queued_bytes);
+  GST_LOG_OBJECT (splitmux, "mq at TS %" GST_STIME_FORMAT
+      " bytes %" G_GUINT64_FORMAT, GST_STIME_ARGS (queued_time), queued_bytes);
 
   /* Check for overrun - have we output at least one byte and overrun
    * either threshold? */
   if ((splitmux->have_muxed_something &&
           ((splitmux->threshold_bytes > 0 &&
-                  queued_bytes >= splitmux->threshold_bytes) ||
+                  queued_bytes > splitmux->threshold_bytes) ||
               (splitmux->threshold_time > 0 &&
-                  queued_time >= splitmux->threshold_time)))) {
+                  queued_time > splitmux->threshold_time)))) {
 
     splitmux->state = SPLITMUX_STATE_ENDING_FILE;
-
     GST_INFO_OBJECT (splitmux,
         "mq overflowed since last, draining out. max out TS is %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (splitmux->max_out_running_time));
+        GST_STIME_FORMAT, GST_STIME_ARGS (splitmux->max_out_running_time));
     GST_SPLITMUX_BROADCAST (splitmux);
 
   } else {
     /* No overflow */
     GST_LOG_OBJECT (splitmux,
-        "This GOP didn't overflow the fragment. Bytes sent %" G_GSIZE_FORMAT
-        " queued %" G_GSIZE_FORMAT " time %" GST_TIME_FORMAT " Continuing.",
+        "This GOP didn't overflow the fragment. Bytes sent %" G_GUINT64_FORMAT
+        " queued %" G_GUINT64_FORMAT " time %" GST_STIME_FORMAT " Continuing.",
         splitmux->muxed_out_bytes - splitmux->mux_start_bytes,
-        queued_bytes, GST_TIME_ARGS (queued_time));
+        queued_bytes, GST_STIME_ARGS (queued_time));
 
     /* Wake everyone up to push this one GOP, then sleep */
     splitmux->have_muxed_something = TRUE;
@@ -892,11 +977,11 @@
       splitmux->max_out_running_time = splitmux->reference_ctx->in_running_time;
     } else {
       splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
-      splitmux->max_out_running_time = GST_CLOCK_TIME_NONE;
+      splitmux->max_out_running_time = GST_CLOCK_STIME_NONE;
     }
 
     GST_LOG_OBJECT (splitmux, "Waking output for complete GOP, TS %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (splitmux->max_out_running_time));
+        GST_STIME_FORMAT, GST_STIME_ARGS (splitmux->max_out_running_time));
     GST_SPLITMUX_BROADCAST (splitmux);
   }
 
@@ -912,24 +997,24 @@
 {
   GList *cur;
   gboolean ready = TRUE;
-  GstClockTime current_max_in_running_time;
+  GstClockTimeDiff current_max_in_running_time;
 
   if (splitmux->state == SPLITMUX_STATE_WAITING_GOP_COMPLETE) {
     /* Iterate each pad, and check that the input running time is at least
      * up to the reference running time, and if so handle the collected GOP */
     GST_LOG_OBJECT (splitmux, "Checking GOP collected, Max in running time %"
-        GST_TIME_FORMAT " ctx %p",
-        GST_TIME_ARGS (splitmux->max_in_running_time), ctx);
+        GST_STIME_FORMAT " ctx %p",
+        GST_STIME_ARGS (splitmux->max_in_running_time), ctx);
     for (cur = g_list_first (splitmux->contexts); cur != NULL;
         cur = g_list_next (cur)) {
       MqStreamCtx *tmpctx = (MqStreamCtx *) (cur->data);
 
       GST_LOG_OBJECT (splitmux,
-          "Context %p (src pad %" GST_PTR_FORMAT ") TS %" GST_TIME_FORMAT
+          "Context %p (src pad %" GST_PTR_FORMAT ") TS %" GST_STIME_FORMAT
           " EOS %d", tmpctx, tmpctx->srcpad,
-          GST_TIME_ARGS (tmpctx->in_running_time), tmpctx->in_eos);
+          GST_STIME_ARGS (tmpctx->in_running_time), tmpctx->in_eos);
 
-      if (splitmux->max_in_running_time != GST_CLOCK_TIME_NONE &&
+      if (splitmux->max_in_running_time != G_MAXINT64 &&
           tmpctx->in_running_time < splitmux->max_in_running_time &&
           !tmpctx->in_eos) {
         GST_LOG_OBJECT (splitmux,
@@ -1050,7 +1135,7 @@
         gst_segment_init (&ctx->in_segment, GST_FORMAT_UNDEFINED);
         ctx->in_eos = FALSE;
         ctx->in_bytes = 0;
-        ctx->in_running_time = 0;
+        ctx->in_running_time = GST_CLOCK_STIME_NONE;
         GST_SPLITMUX_UNLOCK (splitmux);
         break;
       case GST_EVENT_EOS:
@@ -1063,7 +1148,7 @@
         if (ctx->is_reference) {
           GST_INFO_OBJECT (splitmux, "Got Reference EOS. Finishing up");
           /* Act as if this is a new keyframe with infinite timestamp */
-          splitmux->max_in_running_time = GST_CLOCK_TIME_NONE;
+          splitmux->max_in_running_time = G_MAXINT64;
           splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
           /* Wake up other input pads to collect this GOP */
           GST_SPLITMUX_BROADCAST (splitmux);
@@ -1091,6 +1176,8 @@
   else
     ts = GST_BUFFER_DTS (buf);
 
+  GST_LOG_OBJECT (pad, "Buffer TS is %" GST_TIME_FORMAT, GST_TIME_ARGS (ts));
+
   GST_SPLITMUX_LOCK (splitmux);
 
   if (splitmux->state == SPLITMUX_STATE_STOPPED)
@@ -1099,36 +1186,47 @@
   /* If this buffer has a timestamp, advance the input timestamp of the
    * stream */
   if (GST_CLOCK_TIME_IS_VALID (ts)) {
-    GstClockTime running_time =
-        gst_segment_to_running_time (&ctx->in_segment, GST_FORMAT_TIME,
-        GST_BUFFER_TIMESTAMP (buf));
+    GstClockTimeDiff running_time =
+        my_segment_to_running_time (&ctx->in_segment, ts);
 
-    if (GST_CLOCK_TIME_IS_VALID (running_time) &&
-        (ctx->in_running_time == GST_CLOCK_TIME_NONE
-            || running_time > ctx->in_running_time))
+    GST_LOG_OBJECT (pad, "Buffer running TS is %" GST_STIME_FORMAT,
+        GST_STIME_ARGS (running_time));
+
+    if (GST_CLOCK_STIME_IS_VALID (running_time)
+        && running_time > ctx->in_running_time)
       ctx->in_running_time = running_time;
   }
 
   /* Try to make sure we have a valid running time */
-  if (!GST_CLOCK_TIME_IS_VALID (ctx->in_running_time)) {
+  if (!GST_CLOCK_STIME_IS_VALID (ctx->in_running_time)) {
     ctx->in_running_time =
-        gst_segment_to_running_time (&ctx->in_segment, GST_FORMAT_TIME,
-        ctx->in_segment.start);
+        my_segment_to_running_time (&ctx->in_segment, ctx->in_segment.start);
   }
 
+  GST_LOG_OBJECT (pad, "in running time now %" GST_STIME_FORMAT,
+      GST_STIME_ARGS (ctx->in_running_time));
+
   buf_info->run_ts = ctx->in_running_time;
   buf_info->buf_size = gst_buffer_get_size (buf);
+  buf_info->duration = GST_BUFFER_DURATION (buf);
 
   /* Update total input byte counter for overflow detect */
   ctx->in_bytes += buf_info->buf_size;
 
   /* initialize mux_start_time */
-  if (ctx->is_reference && splitmux->mux_start_time == 0)
+  if (ctx->is_reference && splitmux->mux_start_time == GST_CLOCK_STIME_NONE) {
     splitmux->mux_start_time = buf_info->run_ts;
+    GST_LOG_OBJECT (splitmux, "Mux start time now %" GST_STIME_FORMAT,
+        GST_STIME_ARGS (splitmux->mux_start_time));
+    /* Also take this as the first start time when starting up,
+     * so that we start counting overflow from the first frame */
+    if (!GST_CLOCK_STIME_IS_VALID (splitmux->max_in_running_time))
+      splitmux->max_in_running_time = splitmux->mux_start_time;
+  }
 
-  GST_DEBUG_OBJECT (pad, "Buf TS %" GST_TIME_FORMAT
-      " total in_bytes %" G_GSIZE_FORMAT,
-      GST_TIME_ARGS (buf_info->run_ts), ctx->in_bytes);
+  GST_DEBUG_OBJECT (pad, "Buf TS %" GST_STIME_FORMAT
+      " total in_bytes %" G_GUINT64_FORMAT,
+      GST_STIME_ARGS (buf_info->run_ts), ctx->in_bytes);
 
   loop_again = TRUE;
   do {
@@ -1140,15 +1238,15 @@
         if (ctx->is_reference) {
           /* If a keyframe, we have a complete GOP */
           if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT) ||
-              !GST_CLOCK_TIME_IS_VALID (ctx->in_running_time) ||
+              !GST_CLOCK_STIME_IS_VALID (ctx->in_running_time) ||
               splitmux->max_in_running_time >= ctx->in_running_time) {
             /* Pass this buffer through */
             loop_again = FALSE;
             break;
           }
           GST_INFO_OBJECT (pad,
-              "Have keyframe with running time %" GST_TIME_FORMAT,
-              GST_TIME_ARGS (ctx->in_running_time));
+              "Have keyframe with running time %" GST_STIME_FORMAT,
+              GST_STIME_ARGS (ctx->in_running_time));
           keyframe = TRUE;
           splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
           splitmux->max_in_running_time = ctx->in_running_time;
@@ -1164,14 +1262,14 @@
         }
         break;
       case SPLITMUX_STATE_WAITING_GOP_COMPLETE:
-        /* After a GOP start is found, this buffer might complete the GOP */
+
         /* If we overran the target timestamp, it might be time to process
          * the GOP, otherwise bail out for more data
          */
         GST_LOG_OBJECT (pad,
-            "Checking TS %" GST_TIME_FORMAT " against max %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (ctx->in_running_time),
-            GST_TIME_ARGS (splitmux->max_in_running_time));
+            "Checking TS %" GST_STIME_FORMAT " against max %" GST_STIME_FORMAT,
+            GST_STIME_ARGS (ctx->in_running_time),
+            GST_STIME_ARGS (splitmux->max_in_running_time));
 
         if (ctx->in_running_time < splitmux->max_in_running_time) {
           loop_again = FALSE;
@@ -1195,8 +1293,14 @@
         event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM |
             GST_EVENT_TYPE_SERIALIZED,
             gst_structure_new ("splitmuxsink-unblock", "timestamp",
-                G_TYPE_UINT64, splitmux->max_in_running_time, NULL));
+                G_TYPE_INT64, splitmux->max_in_running_time, NULL));
+
+        GST_SPLITMUX_UNLOCK (splitmux);
         gst_pad_send_event (ctx->sinkpad, event);
+        GST_SPLITMUX_LOCK (splitmux);
+        /* state may have changed while we were unlocked. Loop again if so */
+        if (splitmux->state != SPLITMUX_STATE_ENDING_FILE)
+          break;
         /* fallthrough */
       }
       case SPLITMUX_STATE_START_NEXT_FRAGMENT:
@@ -1224,7 +1328,7 @@
   check_queue_length (splitmux, ctx);
 
   GST_LOG_OBJECT (pad, "Returning to queue buffer %" GST_PTR_FORMAT
-      " run ts %" GST_TIME_FORMAT, buf, GST_TIME_ARGS (ctx->in_running_time));
+      " run ts %" GST_STIME_FORMAT, buf, GST_STIME_ARGS (ctx->in_running_time));
 
   GST_SPLITMUX_UNLOCK (splitmux);
   return GST_PAD_PROBE_PASS;
@@ -1602,8 +1706,9 @@
       GST_SPLITMUX_LOCK (splitmux);
       /* Start by collecting one input on each pad */
       splitmux->state = SPLITMUX_STATE_COLLECTING_GOP_START;
-      splitmux->max_in_running_time = 0;
-      splitmux->muxed_out_time = splitmux->mux_start_time = 0;
+      splitmux->max_in_running_time = GST_CLOCK_STIME_NONE;
+      splitmux->muxed_out_time = splitmux->mux_start_time =
+          splitmux->last_frame_duration = GST_CLOCK_STIME_NONE;
       splitmux->muxed_out_bytes = splitmux->mux_start_bytes = 0;
       splitmux->opening_first_fragment = TRUE;
       GST_SPLITMUX_UNLOCK (splitmux);
diff --git a/gst/multifile/gstsplitmuxsink.h b/gst/multifile/gstsplitmuxsink.h
index a233642..aeda8a5 100644
--- a/gst/multifile/gstsplitmuxsink.h
+++ b/gst/multifile/gstsplitmuxsink.h
@@ -48,8 +48,9 @@
 typedef struct _MqStreamBuf
 {
   gboolean keyframe;
-  GstClockTime run_ts;
-  gsize buf_size;
+  GstClockTimeDiff run_ts;
+  guint64 buf_size;
+  GstClockTime duration;
 } MqStreamBuf;
 
 typedef struct _MqStreamCtx
@@ -70,10 +71,10 @@
   GstSegment in_segment;
   GstSegment out_segment;
 
-  GstClockTime in_running_time;
-  GstClockTime out_running_time;
+  GstClockTimeDiff in_running_time;
+  GstClockTimeDiff out_running_time;
 
-  gsize in_bytes;
+  guint64 in_bytes;
 
   GQueue queued_bufs;
 
@@ -95,6 +96,7 @@
   GstClockTime threshold_time;
   guint64 threshold_bytes;
   guint max_files;
+  gboolean send_keyframe_requests;
 
   guint mq_max_buffers;
 
@@ -114,17 +116,19 @@
 
   MqStreamCtx *reference_ctx;
   guint queued_gops;
-  GstClockTime max_in_running_time;
-  GstClockTime max_out_running_time;
+  GstClockTimeDiff max_in_running_time;
+  GstClockTimeDiff max_out_running_time;
 
-  GstClockTime muxed_out_time;
-  gsize muxed_out_bytes;
+  GstClockTimeDiff muxed_out_time;
+  guint64 muxed_out_bytes;
   gboolean have_muxed_something;
 
-  GstClockTime mux_start_time;
-  gsize mux_start_bytes;
+  GstClockTimeDiff mux_start_time;
+  guint64 mux_start_bytes;
+  GstClockTime last_frame_duration;
 
   gboolean opening_first_fragment;
+  gboolean switching_fragment;
 };
 
 struct _GstSplitMuxSinkClass {
diff --git a/gst/multifile/gstsplitmuxsrc.c b/gst/multifile/gstsplitmuxsrc.c
index c55db9f..b710ca6 100644
--- a/gst/multifile/gstsplitmuxsrc.c
+++ b/gst/multifile/gstsplitmuxsrc.c
@@ -544,15 +544,12 @@
   } else {
     GstBuffer *buf = (GstBuffer *) (item->object);
     GstFlowReturn ret = gst_splitmux_handle_buffer (splitmux, splitpad, buf);
-    if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+    if (G_UNLIKELY (ret != GST_FLOW_OK && ret != GST_FLOW_EOS)) {
       /* Stop immediately on error or flushing */
       GST_INFO_OBJECT (splitpad, "Stopping due to pad_push() result %d", ret);
       gst_pad_pause_task (pad);
-      if (ret <= GST_FLOW_EOS) {
-        const gchar *reason = gst_flow_get_name (ret);
-        GST_ELEMENT_ERROR (splitmux, STREAM, FAILED,
-            (_("Internal data flow error.")),
-            ("streaming task paused, reason %s (%d)", reason, ret));
+      if (ret < GST_FLOW_EOS) {
+        GST_ELEMENT_FLOW_ERROR (splitmux, ret);
       }
     }
   }
diff --git a/gst/multipart/Makefile.in b/gst/multipart/Makefile.in
index 94dedcf..67064d1 100644
--- a/gst/multipart/Makefile.in
+++ b/gst/multipart/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/multipart/multipartmux.c b/gst/multipart/multipartmux.c
index 17ae919..e6271ff 100644
--- a/gst/multipart/multipartmux.c
+++ b/gst/multipart/multipartmux.c
@@ -310,13 +310,20 @@
   if (new == NULL || new->buffer == NULL)
     return -1;
 
+  if (GST_CLOCK_TIME_IS_VALID (old->dts_timestamp) &&
+      GST_CLOCK_TIME_IS_VALID (new->dts_timestamp)) {
+    oldtime = old->dts_timestamp;
+    newtime = new->dts_timestamp;
+  } else {
+    oldtime = old->pts_timestamp;
+    newtime = new->pts_timestamp;
+  }
+
   /* no timestamp on old buffer, it must go first */
-  oldtime = old->timestamp;
   if (oldtime == GST_CLOCK_TIME_NONE)
     return -1;
 
   /* no timestamp on new buffer, it must go first */
-  newtime = new->timestamp;
   if (newtime == GST_CLOCK_TIME_NONE)
     return 1;
 
@@ -355,14 +362,22 @@
 
       buf = gst_collect_pads_pop (mux->collect, data);
 
-      /* Store timestamp with segment_start and preroll */
-      if (buf && GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
-        pad->timestamp =
+      /* Store timestamps with segment_start and preroll */
+      if (buf && GST_BUFFER_PTS_IS_VALID (buf)) {
+        pad->pts_timestamp =
             gst_segment_to_running_time (&data->segment, GST_FORMAT_TIME,
-            GST_BUFFER_TIMESTAMP (buf));
+            GST_BUFFER_PTS (buf));
       } else {
-        pad->timestamp = GST_CLOCK_TIME_NONE;
+        pad->pts_timestamp = GST_CLOCK_TIME_NONE;
       }
+      if (buf && GST_BUFFER_DTS_IS_VALID (buf)) {
+        pad->dts_timestamp =
+            gst_segment_to_running_time (&data->segment, GST_FORMAT_TIME,
+            GST_BUFFER_DTS (buf));
+      } else {
+        pad->dts_timestamp = GST_CLOCK_TIME_NONE;
+      }
+
 
       pad->buffer = buf;
     }
@@ -462,10 +477,13 @@
     GstClockTime time;
     GstSegment segment;
 
-    if (best->timestamp != -1)
-      time = best->timestamp;
-    else
+    if (best->dts_timestamp != GST_CLOCK_TIME_NONE) {
+      time = best->dts_timestamp;
+    } else if (best->pts_timestamp != GST_CLOCK_TIME_NONE) {
+      time = best->pts_timestamp;
+    } else {
       time = 0;
+    }
 
     /* for the segment, we take the first timestamp we see, we don't know the
      * length and the position is 0 */
@@ -500,9 +518,10 @@
   gst_buffer_fill (headerbuf, 0, header, headerlen);
   g_free (header);
 
-  /* the header has the same timestamp as the data buffer (which we will push
+  /* the header has the same timestamps as the data buffer (which we will push
    * below) and has a duration of 0 */
-  GST_BUFFER_TIMESTAMP (headerbuf) = best->timestamp;
+  GST_BUFFER_PTS (headerbuf) = best->pts_timestamp;
+  GST_BUFFER_DTS (headerbuf) = best->dts_timestamp;
   GST_BUFFER_DURATION (headerbuf) = 0;
   GST_BUFFER_OFFSET (headerbuf) = mux->offset;
   mux->offset += headerlen;
@@ -521,8 +540,9 @@
   databuf = gst_buffer_make_writable (best->buffer);
   best->buffer = NULL;
 
-  /* we need to updated the timestamp to match the running_time */
-  GST_BUFFER_TIMESTAMP (databuf) = best->timestamp;
+  /* we need to updated the timestamps to match the running_time */
+  GST_BUFFER_PTS (databuf) = best->pts_timestamp;
+  GST_BUFFER_DTS (databuf) = best->dts_timestamp;
   GST_BUFFER_OFFSET (databuf) = mux->offset;
   mux->offset += gst_buffer_get_size (databuf);
   GST_BUFFER_OFFSET_END (databuf) = mux->offset;
@@ -539,9 +559,10 @@
   footerbuf = gst_buffer_new_allocate (NULL, 2, NULL);
   gst_buffer_fill (footerbuf, 0, "\r\n", 2);
 
-  /* the footer has the same timestamp as the data buffer and has a
+  /* the footer has the same timestamps as the data buffer and has a
    * duration of 0 */
-  GST_BUFFER_TIMESTAMP (footerbuf) = best->timestamp;
+  GST_BUFFER_PTS (footerbuf) = best->pts_timestamp;
+  GST_BUFFER_DTS (footerbuf) = best->dts_timestamp;
   GST_BUFFER_DURATION (footerbuf) = 0;
   GST_BUFFER_OFFSET (footerbuf) = mux->offset;
   mux->offset += 2;
diff --git a/gst/multipart/multipartmux.h b/gst/multipart/multipartmux.h
index f66d35e..3b44f5a 100644
--- a/gst/multipart/multipartmux.h
+++ b/gst/multipart/multipartmux.h
@@ -45,7 +45,9 @@
   GstCollectData collect;       /* we extend the CollectData */
 
   GstBuffer *buffer;            /* the queued buffer for this pad */
-  GstClockTime timestamp;       /* its timestamp, converted to running_time so that we can
+  GstClockTime pts_timestamp;   /* its pts timestamp, converted to running_time so that we can
+                                   correctly sort over multiple segments. */
+  GstClockTime dts_timestamp;   /* its dts timestamp, converted to running_time so that we can
                                    correctly sort over multiple segments. */
   GstPad *pad;
 }
diff --git a/gst/replaygain/Makefile.in b/gst/replaygain/Makefile.in
index d644145..8b1101a 100644
--- a/gst/replaygain/Makefile.in
+++ b/gst/replaygain/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -346,6 +347,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -452,6 +454,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -519,6 +524,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/rtp/Makefile.in b/gst/rtp/Makefile.in
index 4645fc5..866e878 100644
--- a/gst/rtp/Makefile.in
+++ b/gst/rtp/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -394,6 +395,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -500,6 +502,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -567,6 +572,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/rtp/gstrtpbvpay.c b/gst/rtp/gstrtpbvpay.c
index 9292681..e202015 100644
--- a/gst/rtp/gstrtpbvpay.c
+++ b/gst/rtp/gstrtpbvpay.c
@@ -217,6 +217,17 @@
     }
     gst_caps_unref (otherpadcaps);
   }
+
+  if (filter) {
+    GstCaps *tmp;
+
+    GST_DEBUG_OBJECT (rtppayload, "Intersect %" GST_PTR_FORMAT " and filter %"
+        GST_PTR_FORMAT, caps, filter);
+    tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = tmp;
+  }
+
   return caps;
 }
 
diff --git a/gst/rtp/gstrtpceltpay.c b/gst/rtp/gstrtpceltpay.c
index db2ebff..1d5287d 100644
--- a/gst/rtp/gstrtpceltpay.c
+++ b/gst/rtp/gstrtpceltpay.c
@@ -200,6 +200,16 @@
     gst_caps_unref (otherpadcaps);
   }
 
+  if (filter) {
+    GstCaps *tmp;
+
+    GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+        GST_PTR_FORMAT, caps, filter);
+    tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = tmp;
+  }
+
   return caps;
 }
 
diff --git a/gst/rtp/gstrtpg722pay.c b/gst/rtp/gstrtpg722pay.c
index eb88c3c..c2fe88d 100644
--- a/gst/rtp/gstrtpg722pay.c
+++ b/gst/rtp/gstrtpg722pay.c
@@ -213,6 +213,17 @@
     }
     gst_caps_unref (otherpadcaps);
   }
+
+  if (filter) {
+    GstCaps *tmp;
+
+    GST_DEBUG_OBJECT (rtppayload, "Intersect %" GST_PTR_FORMAT " and filter %"
+        GST_PTR_FORMAT, caps, filter);
+    tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = tmp;
+  }
+
   return caps;
 }
 
diff --git a/gst/rtp/gstrtph261depay.c b/gst/rtp/gstrtph261depay.c
index 1f99bd4..e9040c9 100644
--- a/gst/rtp/gstrtph261depay.c
+++ b/gst/rtp/gstrtph261depay.c
@@ -105,9 +105,9 @@
 
   marker = gst_rtp_buffer_get_marker (rtp);
 
-  if (payload_len < 4) {
-    GST_WARNING_OBJECT (depay,
-        "Dropping packet with payload length invalid length");
+  if (payload_len < header_len + 1) {
+    /* Must have at least one byte payload */
+    GST_WARNING_OBJECT (depay, "Dropping packet with invalid payload length");
     return NULL;
   }
 
diff --git a/gst/rtp/gstrtph263pay.c b/gst/rtp/gstrtph263pay.c
index 06091fc..6e40700 100644
--- a/gst/rtp/gstrtph263pay.c
+++ b/gst/rtp/gstrtph263pay.c
@@ -770,7 +770,7 @@
 
   code = value >> 16;
 
-  GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+  GST_LOG ("value:0x%08x, code:0x%04x", value, code);
 
   for (i = 0; i < MCBPC_I_LEN; i++) {
     if ((code & mcbpc_I[i][1]) == mcbpc_I[i][0]) {
@@ -795,7 +795,7 @@
 
   code = value >> 16;
 
-  GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+  GST_LOG ("value:0x%08x, code:0x%04x", value, code);
 
   for (i = 0; i < MCBPC_P_LEN; i++) {
     if ((code & mcbpc_P[i][1]) == mcbpc_P[i][0]) {
@@ -820,7 +820,7 @@
 
   code = value >> 24;
 
-  GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+  GST_LOG ("value:0x%08x, code:0x%04x", value, code);
 
   for (i = 0; i < CBPY_LEN; i++) {
     if ((code & cbpy_table[i][1]) == cbpy_table[i][0]) {
@@ -845,7 +845,7 @@
 
   code = value >> 16;
 
-  GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+  GST_LOG ("value:0x%08x, code:0x%04x", value, code);
 
   for (i = 0; i < MVD_LEN; i++) {
     if ((code & mvd[i][1]) == mvd[i][0]) {
@@ -870,7 +870,7 @@
 
   code = value >> 16;
 
-  GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+  GST_LOG ("value:0x%08x, code:0x%04x", value, code);
 
   for (i = 0; i < TCOEF_LEN; i++) {
     if ((code & tcoef[i][1]) == tcoef[i][0]) {
@@ -894,21 +894,20 @@
     guint rest_bits, guint8 ** orig_data, guint8 ** data_end)
 {
 
-  GST_DEBUG ("Moving window: 0x%08x from: %p for %d bits, rest_bits: %d",
-      context->window, context->win_end, n, rest_bits);
+  GST_LOG ("Moving window: 0x%08x from: %p for %d bits, rest_bits: %d, data_end %p",
+      context->window, context->win_end, n, rest_bits, *data_end);
 
   if (n == 0)
     return rest_bits;
 
   while (n != 0 || context->win_end == ((*data_end) + 1)) {
-    //guint8 a = *data;
+    guint8 b = context->win_end <= *data_end ? *context->win_end : 0;
     if (rest_bits == 0) {
       if (n > 8) {
-        context->window = (context->window << 8) | *context->win_end;
+        context->window = (context->window << 8) | b;
         n -= 8;
       } else {
-        context->window =
-            (context->window << n) | (*context->win_end >> (8 - n));
+        context->window = (context->window << n) | (b >> (8 - n));
         rest_bits = 8 - n;
         if (rest_bits == 0)
           context->win_end++;
@@ -916,15 +915,14 @@
       }
     } else {
       if (n > rest_bits) {
-        context->window =
-            (context->window << rest_bits) | (*context->
-            win_end & (((guint) pow (2.0, (double) rest_bits)) - 1));
+        context->window = (context->window << rest_bits) |
+          (b & (((guint) pow (2.0, (double) rest_bits)) - 1));
         n -= rest_bits;
         rest_bits = 0;
       } else {
-        context->window =
-            (context->window << n) | ((*context->win_end & (((guint) pow (2.0,
-                            (double) rest_bits)) - 1)) >> (rest_bits - n));
+        context->window = (context->window << n) |
+          ((b & (((guint) pow (2.0, (double) rest_bits)) - 1)) >>
+              (rest_bits - n));
         rest_bits -= n;
         if (rest_bits == 0)
           context->win_end++;
@@ -937,7 +935,7 @@
 
   *orig_data = context->win_end - 4;
 
-  GST_DEBUG
+  GST_LOG
       ("Window moved to %p with value: 0x%08x and orig_data: %p rest_bits: %d",
       context->win_end, context->window, *orig_data, rest_bits);
   return rest_bits;
@@ -985,7 +983,7 @@
     //Step 2 decode MCBPC I
     mb_type_index = gst_rtp_h263_pay_decode_mcbpc_I (context->window);
 
-    GST_DEBUG ("MCBPC index: %d", mb_type_index);
+    GST_LOG ("MCBPC index: %d", mb_type_index);
     if (mb_type_index == -1) {
       GST_ERROR ("MB index shouldn't be -1 in window: %08x", context->window);
       goto beach;
@@ -1004,7 +1002,7 @@
     //Step 3 decode CBPY I
     cbpy_type_index = gst_rtp_h263_pay_decode_cbpy (context->window, cbpy_I);
 
-    GST_DEBUG ("CBPY index: %d", cbpy_type_index);
+    GST_LOG ("CBPY index: %d", cbpy_type_index);
     if (cbpy_type_index == -1) {
       GST_ERROR ("CBPY index shouldn't be -1 in window: %08x", context->window);
       goto beach;
@@ -1017,7 +1015,7 @@
     //Step 4 decode rest of MB
     //MB type 1 and 4 have DQUANT - we store it for packaging purposes
     if (mcbpc_I[mb_type_index][5] == 4) {
-      GST_DEBUG ("Shifting DQUANT");
+      GST_LOG ("Shifting DQUANT");
 
       mac->quant = (context->window >> 30);
 
@@ -1029,7 +1027,7 @@
     last = 0;
     for (i = 0; i < N_BLOCKS; i++) {
 
-      GST_DEBUG ("Decoding INTRADC and TCOEF, i:%d", i);
+      GST_LOG ("Decoding INTRADC and TCOEF, i:%d", i);
       mac->ebit =
           gst_rtp_h263_pay_move_window_right (context, 8, mac->ebit, &mac->end,
           &gob->end);
@@ -1044,7 +1042,7 @@
         while (last == 0) {
           tcoef_type_index = gst_rtp_h263_pay_decode_tcoef (context->window);
 
-          GST_DEBUG ("TCOEF index: %d", tcoef_type_index);
+          GST_LOG ("TCOEF index: %d", tcoef_type_index);
           if (tcoef_type_index == -1) {
             GST_ERROR ("TCOEF index shouldn't be -1 in window: %08x",
                 context->window);
@@ -1077,13 +1075,13 @@
     guint ind;
 
     //Step 1 check COD
-    GST_DEBUG ("Checking for COD");
+    GST_LOG ("Checking for COD");
     if ((context->window & 0x80000000) == 0x80000000) {
       //The MB is not coded
       mac->ebit =
           gst_rtp_h263_pay_move_window_right (context, 1, mac->ebit, &mac->end,
           &gob->end);
-      GST_DEBUG ("COOOOOOOOOOOD = 1");
+      GST_LOG ("COOOOOOOOOOOD = 1");
 
       return mac;
     } else {
@@ -1096,7 +1094,7 @@
     //Step 2 decode MCBPC P
     mb_type_index = gst_rtp_h263_pay_decode_mcbpc_P (context->window);
 
-    GST_DEBUG ("MCBPC index: %d", mb_type_index);
+    GST_LOG ("MCBPC index: %d", mb_type_index);
     if (mb_type_index == -1) {
       GST_ERROR ("MB index shouldn't be -1 in window: %08x", context->window);
       goto beach;
@@ -1114,7 +1112,7 @@
     //Step 3 decode CBPY P
     cbpy_type_index = gst_rtp_h263_pay_decode_cbpy (context->window, cbpy_P);
 
-    GST_DEBUG ("CBPY index: %d", cbpy_type_index);
+    GST_LOG ("CBPY index: %d", cbpy_type_index);
     if (cbpy_type_index == -1) {
       GST_ERROR ("CBPY index shouldn't be -1 in window: %08x", context->window);
       goto beach;
@@ -1125,7 +1123,7 @@
 
     //MB type 1 and 4 have DQUANT - we add it to MB object and jump over
     if (mcbpc_P[mb_type_index][5] == 4 || mcbpc_P[mb_type_index][5] == 1) {
-      GST_DEBUG ("Shifting DQUANT");
+      GST_LOG ("Shifting DQUANT");
 
       mac->quant = context->window >> 30;
 
@@ -1169,12 +1167,12 @@
 
       //if MB type 3 or 4 then INTRADC coef are present in blocks
       if (mcbpc_P[mb_type_index][5] > 2) {
-        GST_DEBUG ("INTRADC coef: %d", i);
+        GST_LOG ("INTRADC coef: %d", i);
         mac->ebit =
             gst_rtp_h263_pay_move_window_right (context, 8, mac->ebit,
             &mac->end, &gob->end);
       } else {
-        GST_DEBUG ("INTRADC coef is not present");
+        GST_LOG ("INTRADC coef is not present");
       }
 
       //check if the block has TCOEF
@@ -1192,7 +1190,7 @@
         while (last == 0) {
           tcoef_type_index = gst_rtp_h263_pay_decode_tcoef (context->window);
 
-          GST_DEBUG ("TCOEF index: %d", tcoef_type_index);
+          GST_LOG ("TCOEF index: %d", tcoef_type_index);
           if (tcoef_type_index == -1) {
             GST_ERROR ("TCOEF index shouldn't be -1 in window: %08x",
                 context->window);
@@ -1413,7 +1411,7 @@
 
 
     /*---------- MODE B MODE FRAGMENTATION ----------*/
-  GstRtpH263PayMB *mac = NULL;
+  GstRtpH263PayMB *mac, *mac0;
   guint max_payload_size;
   GstRtpH263PayBoundry boundry;
   guint mb;
@@ -1509,20 +1507,25 @@
 
   // We are on MB layer
 
-  mac = gst_rtp_h263_pay_mb_new (&boundry, 0);
+  mac = mac0 = gst_rtp_h263_pay_mb_new (&boundry, 0);
   for (mb = 0; mb < format_props[context->piclayer->ptype_srcformat][1]; mb++) {
 
-    GST_DEBUG ("================ START MB %d =================", mb);
+    GST_LOG ("================ START MB %d =================", mb);
 
     //Find next macroblock boundaries
     ebit = mac->ebit;
     if (!(mac = gst_rtp_h263_pay_B_mbfinder (context, gob, mac, mb))) {
 
-      GST_DEBUG ("Error decoding MB - sbit: %d", 8 - ebit);
+      GST_LOG ("Error decoding MB - sbit: %d", 8 - ebit);
       GST_ERROR ("Error decoding in GOB");
 
+      gst_rtp_h263_pay_mb_destroy (mac0);
       goto decode_error;
     }
+
+    gst_rtp_h263_pay_mb_destroy (gob->macroblocks[mb]);
+    gob->macroblocks[mb] = mac;
+
     //If mb_type == stuffing, don't increment the mb address
     if (mac->mb_type == 10) {
       mb--;
@@ -1531,8 +1534,6 @@
       gob->nmacroblocs++;
     }
 
-    gob->macroblocks[mb] = mac;
-
     if (mac->end >= gob->end) {
       GST_LOG ("No more MBs in this GOB");
       if (!mac->ebit) {
@@ -1543,8 +1544,9 @@
     }
     GST_DEBUG ("Found MB: mba: %d start: %p end: %p len: %d sbit: %d ebit: %d",
         mac->mba, mac->start, mac->end, mac->length, mac->sbit, mac->ebit);
-    GST_DEBUG ("================ END MB %d =================", mb);
+    GST_LOG ("================ END MB %d =================", mb);
   }
+  gst_rtp_h263_pay_mb_destroy (mac0);
 
   mb = 0;
   first = 0;
@@ -1562,6 +1564,8 @@
       //GST_DEBUG ("Pushing GOBS %d to %d because payload size is %d", first,
       //    first == mb - 1, payload_len);
 
+      // FIXME: segfault if mb == 0 (first MB is larger than max_payload_size)
+      GST_DEBUG ("Push B mode fragment from mb %d to %d", first, mb - 1);
       if (gst_rtp_h263_pay_B_fragment_push (rtph263pay, context, gob, first,
               mb - 1, &boundry)) {
         GST_ERROR ("Oooops, there was an error sending");
@@ -1580,6 +1584,7 @@
   /* Push rest */
   GST_DEBUG ("Remainder first: %d, MB: %d", first, mb);
   if (payload_len != 0) {
+    GST_DEBUG ("Push B mode fragment from mb %d to %d", first, mb - 1);
     if (gst_rtp_h263_pay_B_fragment_push (rtph263pay, context, gob, first,
             mb - 1, &boundry)) {
       GST_ERROR ("Oooops, there was an error sending!");
@@ -1588,11 +1593,10 @@
   }
 
     /*---------- END OF MODE B FRAGMENTATION ----------*/
-  gst_rtp_h263_pay_mb_destroy (mac);
+
   return TRUE;
 
 decode_error:
-  gst_rtp_h263_pay_mb_destroy (mac);
   return FALSE;
 }
 
diff --git a/gst/rtp/gstrtph263pdepay.c b/gst/rtp/gstrtph263pdepay.c
index dbfcb66..8290614 100644
--- a/gst/rtp/gstrtph263pdepay.c
+++ b/gst/rtp/gstrtph263pdepay.c
@@ -287,12 +287,8 @@
     goto too_small;
 
   if (P) {
-    /* FIXME, have to make the packet writable hear. Better to reset these
-     * bytes when we copy the packet below */
     rtph263pdepay->wait_start = FALSE;
     header_len -= 2;
-    payload[header_len] = 0;
-    payload[header_len + 1] = 0;
   }
 
   if (rtph263pdepay->wait_start)
@@ -304,7 +300,6 @@
   /* FIXME do not ignore the VRC header (See RFC 2429 section 4.2) */
   /* FIXME actually use the RTP picture header when it is lost in the network */
   /* for now strip off header */
-  payload += header_len;
   payload_len -= header_len;
 
   if (M) {
@@ -317,6 +312,8 @@
 
     outbuf =
         gst_rtp_buffer_get_payload_subbuffer (rtp, header_len, payload_len);
+    if (P)
+      gst_buffer_memset (outbuf, 0, 0, 2);
     gst_adapter_push (rtph263pdepay->adapter, outbuf);
     outbuf = NULL;
 
@@ -324,6 +321,9 @@
     len = avail + payload_len;
     padlen = (len % 4) + 4;
 
+    if (avail == 0)
+      goto empty_frame;
+
     outbuf = gst_adapter_take_buffer (rtph263pdepay->adapter, avail);
     if (padlen) {
       padbuf = gst_buffer_new_and_alloc (padlen);
@@ -341,6 +341,8 @@
 
     outbuf =
         gst_rtp_buffer_get_payload_subbuffer (rtp, header_len, payload_len);
+    if (P)
+      gst_buffer_memset (outbuf, 0, 0, 2);
     gst_adapter_push (rtph263pdepay->adapter, outbuf);
   }
   return NULL;
@@ -356,6 +358,11 @@
     GST_DEBUG_OBJECT (rtph263pdepay, "waiting for picture start");
     return NULL;
   }
+empty_frame:
+  {
+    GST_WARNING_OBJECT (rtph263pdepay, "Depayloaded frame is empty, dropping");
+    return NULL;
+  }
 }
 
 static GstStateChangeReturn
diff --git a/gst/rtp/gstrtph263ppay.c b/gst/rtp/gstrtph263ppay.c
index 844d3f7..176d7cc 100644
--- a/gst/rtp/gstrtph263ppay.c
+++ b/gst/rtp/gstrtph263ppay.c
@@ -254,8 +254,9 @@
   if (!peercaps || gst_caps_is_any (peercaps)) {
     if (peercaps)
       gst_caps_unref (peercaps);
-    return
+    caps =
         gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
+    goto done;
   }
 
   /* We basically need to differentiate two use-cases here: One where there's
@@ -264,9 +265,11 @@
    * we want it to produce. The second case is simply payloader ! depayloader
    * where we are dealing with the depayloader's template caps. In this case
    * we should accept any input compatible with our sink template caps. */
-  if (!gst_caps_is_fixed (peercaps))
-    return
+  if (!gst_caps_is_fixed (peercaps)) {
+    caps =
         gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
+    goto done;
+  }
 
   templ = gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload));
   intersect = gst_caps_intersect (peercaps, templ);
@@ -601,6 +604,18 @@
 
   gst_caps_unref (intersect);
 
+done:
+
+  if (filter) {
+    GstCaps *tmp;
+
+    GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+        GST_PTR_FORMAT, caps, filter);
+    tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = tmp;
+  }
+
   return caps;
 }
 
diff --git a/gst/rtp/gstrtph264pay.c b/gst/rtp/gstrtph264pay.c
index f5167da..808eb1d 100644
--- a/gst/rtp/gstrtph264pay.c
+++ b/gst/rtp/gstrtph264pay.c
@@ -340,6 +340,13 @@
   caps = icaps;
 
 done:
+  if (filter) {
+    GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+        GST_PTR_FORMAT, caps, filter);
+    icaps = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = icaps;
+  }
 
   gst_caps_unref (template_caps);
   gst_caps_unref (allowed_caps);
diff --git a/gst/rtp/gstrtph265depay.c b/gst/rtp/gstrtph265depay.c
index 9705c4d..97353af 100644
--- a/gst/rtp/gstrtph265depay.c
+++ b/gst/rtp/gstrtph265depay.c
@@ -131,7 +131,7 @@
 
   gst_element_class_set_static_metadata (gstelement_class,
       "RTP H265 depayloader", "Codec/Depayloader/Network/RTP",
-      "Extracts H265 video from RTP packets (draft-ietf-payload-rtp-h265-03.txt)",
+      "Extracts H265 video from RTP packets (RFC 7798)",
       "Jurgen Slowack <jurgenslowack@gmail.com>");
   gstelement_class->change_state = gst_rtp_h265_depay_change_state;
 
@@ -754,8 +754,10 @@
   gint clock_rate;
   GstStructure *structure = gst_caps_get_structure (caps, 0);
   GstRtpH265Depay *rtph265depay;
-  const gchar *ps;
-  GstBuffer *codec_data;
+  const gchar *vps;
+  const gchar *sps;
+  const gchar *pps;
+  gchar *ps;
   GstMapInfo map;
   guint8 *ptr;
 
@@ -766,7 +768,14 @@
   depayload->clock_rate = clock_rate;
 
   /* Base64 encoded, comma separated config NALs */
-  ps = gst_structure_get_string (structure, "sprop-parameter-sets");
+  vps = gst_structure_get_string (structure, "sprop-vps");
+  sps = gst_structure_get_string (structure, "sprop-sps");
+  pps = gst_structure_get_string (structure, "sprop-pps");
+  if (vps == NULL || sps == NULL || pps == NULL) {
+    ps = NULL;
+  } else {
+    ps = g_strdup_printf ("%s,%s,%s", vps, sps, pps);
+  }
 
   /* negotiate with downstream w.r.t. output format and alignment */
   gst_rtp_h265_depay_negotiate (rtph265depay);
@@ -775,6 +784,7 @@
     /* for bytestream we only need the parameter sets but we don't error out
      * when they are not there, we assume they are in the stream. */
     gchar **params;
+    GstBuffer *codec_data;
     guint len, total;
     gint i;
 
@@ -855,10 +865,14 @@
     }
     g_strfreev (params);
 
-    if (rtph265depay->sps->len == 0 || rtph265depay->pps->len == 0)
+    if (rtph265depay->vps->len == 0 || rtph265depay->sps->len == 0 ||
+        rtph265depay->pps->len == 0) {
       goto incomplete_caps;
+    }
   }
 
+  g_free (ps);
+
   return gst_rtp_h265_set_src_caps (rtph265depay);
 
   /* ERRORS */
@@ -866,6 +880,7 @@
   {
     GST_DEBUG_OBJECT (depayload, "we have incomplete caps,"
         " doing setcaps later");
+    g_free (ps);
     return TRUE;
   }
 }
diff --git a/gst/rtp/gstrtph265pay.c b/gst/rtp/gstrtph265pay.c
index 067e522..8e9a887 100644
--- a/gst/rtp/gstrtph265pay.c
+++ b/gst/rtp/gstrtph265pay.c
@@ -53,13 +53,12 @@
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS (
-        /* Only bytestream format supported for now */
+        /* only hvc1 and byte-stream formats supported for now */
+        "video/x-h265, stream-format = (string) hvc1, alignment = (string) au; "
         /* "video/x-h265, "
-           "stream-format = (string) hvc1, alignment = (string) au; "
-           "video/x-h265, "
            "stream-format = (string) hev1, alignment = (string) au; " */
-        "video/x-h265, "
-        "stream-format = (string) byte-stream, alignment = (string) { nal, au }")
+        "video/x-h265, stream-format = (string) byte-stream, "
+        "alignment = (string) { nal, au }")
     );
 
 static GstStaticPadTemplate gst_rtp_h265_pay_src_template =
@@ -110,7 +109,7 @@
   PROP_CONFIG_INTERVAL
 };
 
-#define IS_ACCESS_UNIT(x) (((x) > 0x00) && ((x) < 0x06))
+#define IS_ACCESS_UNIT(x) (((x) >= 0x00) && ((x) < 0x20))
 
 static void gst_rtp_h265_pay_finalize (GObject * object);
 
@@ -167,7 +166,7 @@
 
   gst_element_class_set_static_metadata (gstelement_class, "RTP H265 payloader",
       "Codec/Payloader/Network/RTP",
-      "Payload-encode H265 video into RTP packets (based on draft-ietf-payload-rtp-h265-03.txt)",
+      "Payload-encode H265 video into RTP packets (RFC 7798)",
       "Jurgen Slowack <jurgenslowack@gmail.com>");
 
   gstelement_class->change_state =
@@ -186,7 +185,6 @@
 gst_rtp_h265_pay_init (GstRtpH265Pay * rtph265pay)
 {
   rtph265pay->queue = g_array_new (FALSE, FALSE, sizeof (guint));
-  rtph265pay->profile = 0;
   rtph265pay->sps = g_ptr_array_new_with_free_func (
       (GDestroyNotify) gst_buffer_unref);
   rtph265pay->pps = g_ptr_array_new_with_free_func (
@@ -241,6 +239,32 @@
   "6.2"
 };
 
+static gboolean
+parse_field (GstStructure * s, const gchar * field, gulong min, gulong max,
+    guint8 * result)
+{
+  const gchar *str;
+
+  g_assert (result != NULL);
+
+  str = gst_structure_get_string (s, field);
+  if (str != NULL && *str != '\0') {
+    gulong value;
+    gchar *end;
+
+    value = strtoul (str, &end, 10);
+    if (*end == '\0' && value >= min && value <= max) {
+      *result = (guint8) value;
+    } else {
+      return FALSE;
+    }
+  } else {
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
 static GstCaps *
 gst_rtp_h265_pay_getcaps (GstRTPBasePayload * payload, GstPad * pad,
     GstCaps * filter)
@@ -249,7 +273,6 @@
   GstCaps *allowed_caps;
   GstCaps *caps;
   GstCaps *icaps;
-  gboolean append_unrestricted;
   guint i;
 
   allowed_caps =
@@ -272,54 +295,48 @@
   }
 
   caps = gst_caps_new_empty ();
-
-  append_unrestricted = FALSE;
   for (i = 0; i < gst_caps_get_size (allowed_caps); i++) {
     GstStructure *s = gst_caps_get_structure (allowed_caps, i);
     GstStructure *new_s = gst_structure_new_empty ("video/x-h265");
-    const gchar *profile_level_id;
+    guint8 ptl[12] = { 0, };
+    guint8 value;
 
-    profile_level_id = gst_structure_get_string (s, "profile-level-id");
-
-    if (profile_level_id && strlen (profile_level_id) == 6) {   /* Code taken from gstrtph264pay.c, needs to be revised for H.265 */
+    if (parse_field (s, "profile-id", 0, 31, &value)) {
       const gchar *profile;
+
+      ptl[0] = value;
+      profile = gst_codec_utils_h265_get_profile (ptl, sizeof (ptl));
+      if (profile != NULL) {
+        GST_DEBUG_OBJECT (payload, "profile %s", profile);
+        gst_structure_set (new_s, "profile", G_TYPE_STRING, profile, NULL);
+      } else {
+        GST_WARNING_OBJECT (payload, "invalid profile-id %d in caps", value);
+      }
+    } else {
+      GST_DEBUG_OBJECT (payload, "no valid profile-id in caps");
+    }
+
+    if (parse_field (s, "tier-flag", 0, 1, &value)) {
+      const gchar *tier;
+
+      ptl[0] |= value << 5;
+      tier = gst_codec_utils_h265_get_tier (ptl, sizeof (ptl));
+      GST_DEBUG_OBJECT (payload, "tier %s", tier);
+      gst_structure_set (new_s, "tier", G_TYPE_STRING, tier, NULL);
+    } else {
+      GST_DEBUG_OBJECT (payload, "no valid tier-flag in caps");
+    }
+
+    if (parse_field (s, "level-id", 0, 255, &value)) {
       const gchar *level;
-      long int spsint;
-      guint8 sps[3];
 
-      spsint = strtol (profile_level_id, NULL, 16);
-      sps[0] = spsint >> 16;
-      sps[1] = spsint >> 8;
-      sps[2] = spsint;
-
-      profile = gst_codec_utils_h265_get_profile (sps, 3);
-      level = gst_codec_utils_h265_get_level (sps, 3);
-
-      if (profile && level) {
-        GST_LOG_OBJECT (payload, "In caps, have profile %s and level %s",
-            profile, level);
-
-        if (!strcmp (profile, "main"))
-          gst_structure_set (new_s, "profile", G_TYPE_STRING, profile, NULL);
-        else {
-          GValue val = { 0, };
-          GValue profiles = { 0, };
-
-          g_value_init (&profiles, GST_TYPE_LIST);
-          g_value_init (&val, G_TYPE_STRING);
-
-          g_value_set_static_string (&val, profile);
-          gst_value_list_append_value (&profiles, &val);
-
-          g_value_set_static_string (&val, "main");
-          gst_value_list_append_value (&profiles, &val);
-
-          gst_structure_take_value (new_s, "profile", &profiles);
-        }
-
-        if (!strcmp (level, "1"))
+      ptl[11] = value;
+      level = gst_codec_utils_h265_get_level (ptl, sizeof (ptl));
+      if (level != NULL) {
+        GST_DEBUG_OBJECT (payload, "level %s", level);
+        if (strcmp (level, "1") == 0) {
           gst_structure_set (new_s, "level", G_TYPE_STRING, level, NULL);
-        else {
+        } else {
           GValue levels = { 0, };
           GValue val = { 0, };
           int j;
@@ -336,32 +353,31 @@
           gst_structure_take_value (new_s, "level", &levels);
         }
       } else {
-        /* Invalid profile-level-id means main */
-
-        gst_structure_set (new_s, "profile", G_TYPE_STRING, "main", NULL);
+        GST_WARNING_OBJECT (payload, "invalid level-id %d in caps", value);
       }
     } else {
-      /* No profile-level-id means main or unrestricted */
-
-      gst_structure_set (new_s, "profile", G_TYPE_STRING, "main", NULL);
-      append_unrestricted = TRUE;
+      GST_DEBUG_OBJECT (payload, "no valid level-id in caps");
     }
 
     caps = gst_caps_merge_structure (caps, new_s);
   }
 
-  if (append_unrestricted) {
-    caps =
-        gst_caps_merge_structure (caps, gst_structure_new ("video/x-h265", NULL,
-            NULL));
-  }
-
   icaps = gst_caps_intersect (caps, template_caps);
   gst_caps_unref (caps);
   caps = icaps;
 
 done:
 
+  if (filter) {
+    GstCaps *tmp;
+
+    GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+        GST_PTR_FORMAT, caps, filter);
+    tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = tmp;
+  }
+
   gst_caps_unref (template_caps);
   gst_caps_unref (allowed_caps);
 
@@ -369,27 +385,26 @@
   return caps;
 }
 
-/* take the currently configured VPS, SPS and PPS lists and set them on the caps as
- * sprop-parameter-sets */
+/* take the currently configured VPS, SPS and PPS lists and set them on the
+ * caps */
 static gboolean
 gst_rtp_h265_pay_set_vps_sps_pps (GstRTPBasePayload * basepayload)
 {
   GstRtpH265Pay *payloader = GST_RTP_H265_PAY (basepayload);
-  gchar *profile;
   gchar *set;
-  GString *sprops;
+  GString *vps;
+  GString *sps;
+  GString *pps;
   guint count;
   gboolean res;
   GstMapInfo map;
   guint i;
 
-  sprops = g_string_new ("");
+  vps = g_string_new ("");
+  sps = g_string_new ("");
+  pps = g_string_new ("");
   count = 0;
 
-  GST_DEBUG_OBJECT (payloader,
-      "Entering function gst_rtp_h265_pay_set_vps_sps_pps");
-
-  /* build the sprop-parameter-sets */
   for (i = 0; i < payloader->vps->len; i++) {
     GstBuffer *vps_buf =
         GST_BUFFER_CAST (g_ptr_array_index (payloader->vps, i));
@@ -398,7 +413,7 @@
     set = g_base64_encode (map.data, map.size);
     gst_buffer_unmap (vps_buf, &map);
 
-    g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
+    g_string_append_printf (vps, "%s%s", i ? "," : "", set);
     g_free (set);
     count++;
   }
@@ -410,7 +425,7 @@
     set = g_base64_encode (map.data, map.size);
     gst_buffer_unmap (sps_buf, &map);
 
-    g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
+    g_string_append_printf (sps, "%s%s", i ? "," : "", set);
     g_free (set);
     count++;
   }
@@ -422,22 +437,23 @@
     set = g_base64_encode (map.data, map.size);
     gst_buffer_unmap (pps_buf, &map);
 
-    g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
+    g_string_append_printf (pps, "%s%s", i ? "," : "", set);
     g_free (set);
     count++;
   }
 
   if (G_LIKELY (count)) {
-    /* profile is 24 bit. Force it to respect the limit */
-    profile = g_strdup_printf ("%06x", payloader->profile & 0xffffff);
     /* combine into output caps */
     res = gst_rtp_base_payload_set_outcaps (basepayload,
-        "sprop-parameter-sets", G_TYPE_STRING, sprops->str, NULL);
-    g_free (profile);
+        "sprop-vps", G_TYPE_STRING, vps->str,
+        "sprop-sps", G_TYPE_STRING, sps->str,
+        "sprop-pps", G_TYPE_STRING, pps->str, NULL);
   } else {
     res = gst_rtp_base_payload_set_outcaps (basepayload, NULL);
   }
-  g_string_free (sprops, TRUE);
+  g_string_free (vps, TRUE);
+  g_string_free (sps, TRUE);
+  g_string_free (pps, TRUE);
 
   return res;
 }
@@ -505,8 +521,7 @@
       goto wrong_version;
 
     /* profile_space | tier_flag | profile_idc */
-    rtph265pay->profile = data[1];
-    GST_DEBUG_OBJECT (rtph265pay, "profile %06x", rtph265pay->profile);
+    GST_DEBUG_OBJECT (rtph265pay, "profile %06x", data[1]);
 
     /* profile_compatibility_flags */
     for (i = 2; i < 6; i++) {
@@ -561,7 +576,7 @@
     size -= 23;
 
     if (num_arrays > 0) {
-      if (data[0] == (0x00 | 0x20)) {   /* VPS */
+      if ((data[0] & 0x3f) == 0x20) {   /* VPS */
 
         data++;
         num_vps = data[0] << 8 | data[1];
@@ -598,7 +613,7 @@
     }
 
     if (num_arrays > 0) {
-      if (data[0] == (0x00 | 0x21)) {   /* SPS */
+      if ((data[0] & 0x3f) == 0x21) {   /* SPS */
 
         data++;
         num_sps = data[0] << 8 | data[1];
@@ -635,7 +650,7 @@
     }
 
     if (num_arrays > 0) {
-      if (data[0] == (0x00 | 0x22)) {   /* PPS */
+      if ((data[0] & 0x3f) == 0x22) {   /* PPS */
 
         data++;
         num_pps = data[0] << 8 | data[1];
@@ -773,7 +788,7 @@
     /* encode the entire NAL in base64 */
     GST_DEBUG_OBJECT (payloader, "found %s (type 0x%x), size %u",
         type == GST_H265_NAL_VPS ? "VPS" : type == GST_H265_NAL_SPS ?
-            "SPS" : "PPS", type, size);
+        "SPS" : "PPS", type, size);
 
     nal = gst_buffer_new_allocate (NULL, size, NULL);
     gst_buffer_fill (nal, 0, data, size);
@@ -948,8 +963,6 @@
 
   packet_len = gst_rtp_buffer_calc_packet_len (size, 0, 0);
 
-  GST_FIXME_OBJECT (rtph265pay, "Set RTP marker bit appropriately");
-
   if (packet_len < mtu) {
     GST_DEBUG_OBJECT (rtph265pay,
         "NAL Unit fit in one packet datasize=%d mtu=%d", size, mtu);
@@ -962,10 +975,10 @@
 
     gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
 
-    /* FIXME : only set the marker bit on packets containing access units */
-    /* if (IS_ACCESS_UNIT (nalType) && end_of_au) {
-       gst_rtp_buffer_set_marker (&rtp, 1);
-       } */
+    /* only set the marker bit on packets containing access units */
+    if (IS_ACCESS_UNIT (nalType) && end_of_au) {
+      gst_rtp_buffer_set_marker (&rtp, 1);
+    }
 
     /* timestamp the outbuffer */
     GST_BUFFER_PTS (outbuf) = pts;
@@ -1030,10 +1043,10 @@
       payload[0] = (nalHeader[0] & 0x81) | (49 << 1);
       payload[1] = nalHeader[1];
 
-      /* FIXME - set RTP marker bit appropriately */
-      /* if (IS_ACCESS_UNIT (nalType)) {
-         gst_rtp_buffer_set_marker (&rtp, end && end_of_au);
-         } */
+      /* set the marker bit on the last packet of an access unit */
+      if (IS_ACCESS_UNIT (nalType)) {
+        gst_rtp_buffer_set_marker (&rtp, end && end_of_au);
+      }
 
       /* FU Header */
       payload[2] = (start << 7) | (end << 6) | (nalType & 0x3f);
@@ -1189,7 +1202,7 @@
     GST_DEBUG_OBJECT (basepayload,
         "found first start at %u, bytes left %" G_GSIZE_FORMAT, next, size);
 
-    /* first pass to locate NALs and parse SPS/PPS */
+    /* first pass to locate NALs and parse VPS/SPS/PPS */
     while (size > 4) {
       /* skip start code */
       data += 3;
@@ -1217,10 +1230,9 @@
           nal_len);
 
       /* We know our stream is a valid H265 NAL packet,
-       * go parse it for SPS/PPS to enrich the caps */
+       * go parse it for VPS/SPS/PPS to enrich the caps */
       /* order: make sure to check nal */
-      update =
-          gst_rtp_h265_pay_decode_nal (rtph265pay, data, nal_len, dts, pts)
+      update = gst_rtp_h265_pay_decode_nal (rtph265pay, data, nal_len, dts, pts)
           || update;
 
       /* move to next NAL packet */
diff --git a/gst/rtp/gstrtph265pay.h b/gst/rtp/gstrtph265pay.h
index 9e6bb29..cd42fba 100644
--- a/gst/rtp/gstrtph265pay.h
+++ b/gst/rtp/gstrtph265pay.h
@@ -51,7 +51,6 @@
 {
   GstRTPBasePayload payload;
 
-  guint profile;
   GPtrArray *sps, *pps, *vps;
 
   GstH265StreamFormat stream_format;
diff --git a/gst/rtp/gstrtpilbcpay.c b/gst/rtp/gstrtpilbcpay.c
index 83161ff..cbc7d93 100644
--- a/gst/rtp/gstrtpilbcpay.c
+++ b/gst/rtp/gstrtpilbcpay.c
@@ -206,6 +206,17 @@
     }
     gst_caps_unref (otherpadcaps);
   }
+
+  if (filter) {
+    GstCaps *tmp;
+
+    GST_DEBUG_OBJECT (rtppayload, "Intersect %" GST_PTR_FORMAT " and filter %"
+        GST_PTR_FORMAT, caps, filter);
+    tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (caps);
+    caps = tmp;
+  }
+
   return caps;
 }
 
diff --git a/gst/rtp/gstrtpvp9depay.c b/gst/rtp/gstrtpvp9depay.c
index 3d78e64..ad1b220 100644
--- a/gst/rtp/gstrtpvp9depay.c
+++ b/gst/rtp/gstrtpvp9depay.c
@@ -165,14 +165,6 @@
     }
   }
 
-  /* flexible-mode not implemented */
-  if (f_bit) {
-    GST_ELEMENT_WARNING (depay, STREAM, NOT_IMPLEMENTED,
-        ("Stream type not supported"),
-        ("Depayloader does not implement flexible mode"));
-    return NULL;
-  }
-
   /* Check L optional header layer indices */
   if (l_bit) {
     hdrsize++;
@@ -181,6 +173,24 @@
       hdrsize++;
   }
 
+  if (p_bit && f_bit) {
+    /* At least one P_DIFF|N, up to three times */
+    for (gint i = 0; i < 3; i++) {
+      guint p_diff, n_bit;
+
+      if (G_UNLIKELY (size < hdrsize + 1))
+        goto too_small;
+
+      p_diff = data[hdrsize] >> 1;
+      n_bit = data[hdrsize] & 0x1;
+      GST_TRACE_OBJECT (self, "P_DIFF[%d]=%d", i, p_diff);
+      hdrsize++;
+
+      if (!n_bit)
+        break;
+    }
+  }
+
   /* Check V optional Scalability Structure */
   if (v_bit) {
     guint n_s, y_bit, g_bit;
@@ -252,7 +262,6 @@
     GstBuffer *out;
     gboolean key_frame_first_layer = !p_bit && spatial_layer == 0;
 
-
     if (gst_adapter_available (self->adapter) < 10)
       goto too_small;
 
diff --git a/gst/rtpmanager/Makefile.in b/gst/rtpmanager/Makefile.in
index 928943e..b3ab0b4 100644
--- a/gst/rtpmanager/Makefile.in
+++ b/gst/rtpmanager/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -356,6 +357,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -462,6 +464,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -529,6 +534,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index cbe6901..648adb9 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -299,6 +299,7 @@
 #define DEFAULT_MAX_DROPOUT_TIME     60000
 #define DEFAULT_MAX_MISORDER_TIME    2000
 #define DEFAULT_RFC7273_SYNC         FALSE
+#define DEFAULT_MAX_STREAMS          G_MAXUINT
 
 enum
 {
@@ -322,7 +323,8 @@
   PROP_MAX_RTCP_RTP_TIME_DIFF,
   PROP_MAX_DROPOUT_TIME,
   PROP_MAX_MISORDER_TIME,
-  PROP_RFC7273_SYNC
+  PROP_RFC7273_SYNC,
+  PROP_MAX_STREAMS
 };
 
 #define GST_RTP_BIN_RTCP_SYNC_TYPE (gst_rtp_bin_rtcp_sync_get_type())
@@ -1583,6 +1585,9 @@
 
   rtpbin = session->bin;
 
+  if (g_slist_length (session->streams) >= rtpbin->max_streams)
+    goto max_streams;
+
   if (!(buffer = gst_element_factory_make ("rtpjitterbuffer", NULL)))
     goto no_jitterbuffer;
 
@@ -1659,6 +1664,12 @@
   return stream;
 
   /* ERRORS */
+max_streams:
+  {
+    GST_WARNING_OBJECT (rtpbin, "stream exeeds maximum (%d)",
+        rtpbin->max_streams);
+    return NULL;
+  }
 no_jitterbuffer:
   {
     g_warning ("rtpbin: could not create rtpjitterbuffer element");
@@ -2323,6 +2334,12 @@
           "(requires clock and offset to be provided)", DEFAULT_RFC7273_SYNC,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (gobject_class, PROP_MAX_STREAMS,
+      g_param_spec_uint ("max-streams", "Max Streams",
+          "The maximum number of streams to create for one session",
+          0, G_MAXUINT, DEFAULT_MAX_STREAMS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_bin_change_state);
   gstelement_class->request_new_pad =
       GST_DEBUG_FUNCPTR (gst_rtp_bin_request_new_pad);
@@ -2393,6 +2410,7 @@
   rtpbin->max_dropout_time = DEFAULT_MAX_DROPOUT_TIME;
   rtpbin->max_misorder_time = DEFAULT_MAX_MISORDER_TIME;
   rtpbin->rfc7273_sync = DEFAULT_RFC7273_SYNC;
+  rtpbin->max_streams = DEFAULT_MAX_STREAMS;
 
   /* some default SDES entries */
   cname = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ());
@@ -2606,7 +2624,7 @@
       GST_RTP_BIN_UNLOCK (rtpbin);
       gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin,
           "max-misorder-time", value);
-      gst_rtp_bin_propagate_property_to_session (rtpbin, "max-dropout-time",
+      gst_rtp_bin_propagate_property_to_session (rtpbin, "max-misorder-time",
           value);
       break;
     case PROP_RFC7273_SYNC:
@@ -2614,6 +2632,9 @@
       gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin,
           "rfc7273-sync", value);
       break;
+    case PROP_MAX_STREAMS:
+      rtpbin->max_streams = g_value_get_uint (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2699,6 +2720,9 @@
     case PROP_RFC7273_SYNC:
       g_value_set_boolean (value, rtpbin->rfc7273_sync);
       break;
+    case PROP_MAX_STREAMS:
+      g_value_set_uint (value, rtpbin->max_streams);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/rtpmanager/gstrtpbin.h b/gst/rtpmanager/gstrtpbin.h
index 15eb88a..fb13a47 100644
--- a/gst/rtpmanager/gstrtpbin.h
+++ b/gst/rtpmanager/gstrtpbin.h
@@ -74,6 +74,7 @@
   guint32         max_dropout_time;
   guint32         max_misorder_time;
   gboolean        rfc7273_sync;
+  guint           max_streams;
 
   /* a list of session */
   GSList         *sessions;
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index d9ea04c..1fc313b 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -1299,6 +1299,8 @@
 
   rtp_jitter_buffer_set_clock_rate (priv->jbuf, priv->clock_rate);
 
+  gst_rtp_packet_rate_ctx_reset (&priv->packet_rate_ctx, priv->clock_rate);
+
   /* The clock base is the RTP timestamp corrsponding to the npt-start value. We
    * can use this to track the amount of time elapsed on the sender. */
   if (gst_structure_get_uint (caps_struct, "clock-base", &val))
@@ -2632,6 +2634,8 @@
 
     if (G_UNLIKELY (priv->clock_rate == -1))
       goto no_clock_rate;
+
+    gst_rtp_packet_rate_ctx_reset (&priv->packet_rate_ctx, priv->clock_rate);
   }
 
   /* don't accept more data on EOS */
@@ -2783,8 +2787,10 @@
         for (l = buffers; l; l = l->next) {
           ret = gst_rtp_jitter_buffer_chain (pad, parent, l->data);
           l->data = NULL;
-          if (ret != GST_FLOW_OK)
+          if (ret != GST_FLOW_OK) {
+            l = l->next;
             break;
+          }
         }
         for (; l; l = l->next)
           gst_buffer_unref (l->data);
diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index 3914f36..3688e85 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -1074,6 +1074,17 @@
     *ntpnstime = ntpns;
 }
 
+/* must be called with GST_RTP_SESSION_LOCK */
+static void
+signal_waiting_rtcp_thread_unlocked (GstRtpSession * rtpsession)
+{
+  if (rtpsession->priv->wait_send) {
+    GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
+    rtpsession->priv->wait_send = FALSE;
+    GST_RTP_SESSION_SIGNAL (rtpsession);
+  }
+}
+
 static void
 rtcp_thread (GstRtpSession * rtpsession)
 {
@@ -1194,8 +1205,7 @@
 
   GST_RTP_SESSION_LOCK (rtpsession);
   rtpsession->priv->stop_thread = TRUE;
-  rtpsession->priv->wait_send = FALSE;
-  GST_RTP_SESSION_SIGNAL (rtpsession);
+  signal_waiting_rtcp_thread_unlocked (rtpsession);
   if (rtpsession->priv->id)
     gst_clock_id_unschedule (rtpsession->priv->id);
   GST_RTP_SESSION_UNLOCK (rtpsession);
@@ -1333,11 +1343,7 @@
   GST_RTP_SESSION_LOCK (rtpsession);
   if ((rtp_src = rtpsession->send_rtp_src))
     gst_object_ref (rtp_src);
-  if (rtpsession->priv->wait_send) {
-    GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
-    rtpsession->priv->wait_send = FALSE;
-    GST_RTP_SESSION_SIGNAL (rtpsession);
-  }
+  signal_waiting_rtcp_thread_unlocked (rtpsession);
   GST_RTP_SESSION_UNLOCK (rtpsession);
 
   if (rtp_src) {
@@ -1901,11 +1907,7 @@
   GST_LOG_OBJECT (rtpsession, "received RTP packet");
 
   GST_RTP_SESSION_LOCK (rtpsession);
-  if (rtpsession->priv->wait_send) {
-    GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
-    rtpsession->priv->wait_send = FALSE;
-    GST_RTP_SESSION_SIGNAL (rtpsession);
-  }
+  signal_waiting_rtcp_thread_unlocked (rtpsession);
   GST_RTP_SESSION_UNLOCK (rtpsession);
 
   /* get NTP time when this packet was captured, this depends on the timestamp. */
@@ -1990,11 +1992,7 @@
   GST_LOG_OBJECT (rtpsession, "received RTCP packet");
 
   GST_RTP_SESSION_LOCK (rtpsession);
-  if (rtpsession->priv->wait_send) {
-    GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
-    rtpsession->priv->wait_send = FALSE;
-    GST_RTP_SESSION_SIGNAL (rtpsession);
-  }
+  signal_waiting_rtcp_thread_unlocked (rtpsession);
   GST_RTP_SESSION_UNLOCK (rtpsession);
 
   current_time = gst_clock_get_time (priv->sysclock);
diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c
index 380948a..0ffbe54 100644
--- a/gst/rtpmanager/rtpjitterbuffer.c
+++ b/gst/rtpmanager/rtpjitterbuffer.c
@@ -1032,7 +1032,7 @@
   /* ERRORS */
 duplicate:
   {
-    GST_WARNING ("duplicate packet %d found", (gint) seqnum);
+    GST_DEBUG ("duplicate packet %d found", (gint) seqnum);
     return FALSE;
   }
 }
diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c
index 553d793..b33e909 100644
--- a/gst/rtpmanager/rtpsession.c
+++ b/gst/rtpmanager/rtpsession.c
@@ -2393,7 +2393,11 @@
 
       value = g_strndup ((const gchar *) data, len);
 
-      gst_structure_set (sdes, name, G_TYPE_STRING, value, NULL);
+      if (g_utf8_validate (value, -1, NULL)) {
+        gst_structure_set (sdes, name, G_TYPE_STRING, value, NULL);
+      } else {
+        GST_WARNING ("ignore SDES field %s with non-utf8 data %s", name, value);
+      }
 
       g_free (name);
       g_free (value);
@@ -2571,6 +2575,11 @@
     GstClockTime round_trip_in_ns = gst_util_uint64_scale (round_trip,
         GST_SECOND, 65536);
 
+     /* Sanity check to avoid always ignoring PLI/FIR if we receive RTCP
+      * packets with erroneous values resulting in crazy high RTT. */
+     if (round_trip_in_ns > 5 * GST_SECOND)
+       round_trip_in_ns = GST_SECOND / 2;
+
     if (current_time - sess->last_keyframe_request < 2 * round_trip_in_ns) {
       GST_DEBUG ("Ignoring %s request because one was send without one "
           "RTT (%" GST_TIME_FORMAT " < %" GST_TIME_FORMAT ")",
@@ -4077,7 +4086,7 @@
     empty_buffer = gst_buffer_get_size (buffer) == 0;
 
     if (empty_buffer)
-      g_warning ("rtpsession: Trying to send an empty RTCP packet");
+      GST_ERROR ("rtpsession: Trying to send an empty RTCP packet");
 
     if (sess->callbacks.send_rtcp &&
         !empty_buffer && (do_not_suppress || !data.may_suppress)) {
diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c
index 9fe5888..b0177d4 100644
--- a/gst/rtpmanager/rtpsource.c
+++ b/gst/rtpmanager/rtpsource.c
@@ -1143,7 +1143,7 @@
       g_queue_clear (src->packets);
 
       /* duplicate or reordered packet, will be filtered by jitterbuffer. */
-      GST_WARNING ("duplicate or reordered packet (seqnr %u, expected %u)",
+      GST_INFO ("duplicate or reordered packet (seqnr %u, expected %u)",
           seqnr, expected);
     }
   }
diff --git a/gst/rtpmanager/rtpstats.c b/gst/rtpmanager/rtpstats.c
index 984bc9f..cc25dbf 100644
--- a/gst/rtpmanager/rtpstats.c
+++ b/gst/rtpmanager/rtpstats.c
@@ -27,6 +27,7 @@
   ctx->clock_rate = clock_rate;
   ctx->probed = FALSE;
   ctx->avg_packet_rate = -1;
+  ctx->last_ts = -1;
 }
 
 guint32
@@ -41,15 +42,16 @@
     return ctx->avg_packet_rate;
   }
 
+  new_ts = ctx->last_ts;
+  gst_rtp_buffer_ext_timestamp (&new_ts, ts);
+
   if (!ctx->probed) {
     ctx->last_seqnum = seqnum;
-    ctx->last_ts = ts;
+    ctx->last_ts = new_ts;
     ctx->probed = TRUE;
     return ctx->avg_packet_rate;
   }
 
-  new_ts = ctx->last_ts;
-  gst_rtp_buffer_ext_timestamp (&new_ts, ts);
   diff_seqnum = gst_rtp_buffer_compare_seqnum (ctx->last_seqnum, seqnum);
   if (diff_seqnum <= 0 || new_ts <= ctx->last_ts) {
     return ctx->avg_packet_rate;
@@ -64,6 +66,7 @@
    * but it will go down again slowly.
    * This is useful for bursty cases, where a lot of packets are close
    * to each other and should allow a higher reorder/dropout there.
+   * Round up the new average.
    */
   if (ctx->avg_packet_rate > new_packet_rate) {
     ctx->avg_packet_rate = (7 * ctx->avg_packet_rate + new_packet_rate + 7) / 8;
diff --git a/gst/rtsp/Makefile.in b/gst/rtsp/Makefile.in
index 44d9127..e550688 100644
--- a/gst/rtsp/Makefile.in
+++ b/gst/rtsp/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index 58bed88..52fd737 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -5119,9 +5119,7 @@
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
       /* for fatal errors we post an error message, post the error before the
        * EOS so the app knows about the error first. */
-      GST_ELEMENT_ERROR (src, STREAM, FAILED,
-          ("Internal data flow error."),
-          ("streaming task paused, reason %s (%d)", reason, ret));
+      GST_ELEMENT_FLOW_ERROR (src, ret);
       gst_rtspsrc_push_event (src, gst_event_new_eos ());
     }
     gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, CMD_LOOP);
@@ -6792,8 +6790,24 @@
   /* could not be set but since the request returned OK, we assume it
    * was SDP, else check it. */
   if (respcont) {
-    if (g_ascii_strcasecmp (respcont, "application/sdp") != 0)
+    const gchar *props = strchr (respcont, ';');
+
+    if (props) {
+      gchar *mimetype = g_strndup (respcont, props - respcont);
+
+      mimetype = g_strstrip (mimetype);
+      if (g_ascii_strcasecmp (mimetype, "application/sdp") != 0) {
+        g_free (mimetype);
+        goto wrong_content_type;
+      }
+
+      /* TODO: Check for charset property and do conversions of all messages if
+       * needed. Some servers actually send that property */
+
+      g_free (mimetype);
+    } else if (g_ascii_strcasecmp (respcont, "application/sdp") != 0) {
       goto wrong_content_type;
+    }
   }
 
   /* get message body and parse as SDP */
diff --git a/gst/shapewipe/Makefile.in b/gst/shapewipe/Makefile.in
index 3fde0ae..aecbc8e 100644
--- a/gst/shapewipe/Makefile.in
+++ b/gst/shapewipe/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/smpte/Makefile.in b/gst/smpte/Makefile.in
index 8916318..a3a877a 100644
--- a/gst/smpte/Makefile.in
+++ b/gst/smpte/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/spectrum/Makefile.in b/gst/spectrum/Makefile.in
index 528b843..6d5a75e 100644
--- a/gst/spectrum/Makefile.in
+++ b/gst/spectrum/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/udp/Makefile.in b/gst/udp/Makefile.in
index 9d05a84..bf9c930 100644
--- a/gst/udp/Makefile.in
+++ b/gst/udp/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c
index fc8725a..379986c 100644
--- a/gst/udp/gstmultiudpsink.c
+++ b/gst/udp/gstmultiudpsink.c
@@ -818,6 +818,7 @@
     msgs[i].vectors = &vecs[mem];
     msgs[i].num_vectors = mem_nums[i];
     msgs[i].num_control_messages = 0;
+    msgs[i].bytes_sent = 0;
     msgs[i].control_messages = NULL;
     msgs[i].address = clients[0]->addr;
     mem += mem_nums[i];
diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c
index efa2095..dcd99ba 100644
--- a/gst/udp/gstudpsrc.c
+++ b/gst/udp/gstudpsrc.c
@@ -285,7 +285,7 @@
   if (level != IPPROTO_IPV6 || type != IPV6_PKTINFO)
     return NULL;
 
-  if (size < sizeof (struct in_pktinfo))
+  if (size < sizeof (struct in6_pktinfo))
     return NULL;
 
   pktinfo = data;
diff --git a/gst/videobox/Makefile.in b/gst/videobox/Makefile.in
index 8ef3c64..9ed9882 100644
--- a/gst/videobox/Makefile.in
+++ b/gst/videobox/Makefile.in
@@ -121,6 +121,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -369,6 +370,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -475,6 +477,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -542,6 +547,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/videocrop/Makefile.in b/gst/videocrop/Makefile.in
index 38445e4..dc9899c 100644
--- a/gst/videocrop/Makefile.in
+++ b/gst/videocrop/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/videofilter/Makefile.in b/gst/videofilter/Makefile.in
index 74c2fa5..9c6e7ed 100644
--- a/gst/videofilter/Makefile.in
+++ b/gst/videofilter/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/videofilter/gstvideoflip.c b/gst/videofilter/gstvideoflip.c
index beccd9d..f59f930 100644
--- a/gst/videofilter/gstvideoflip.c
+++ b/gst/videofilter/gstvideoflip.c
@@ -52,7 +52,8 @@
 enum
 {
   PROP_0,
-  PROP_METHOD
+  PROP_METHOD,
+  PROP_VIDEO_DIRECTION
       /* FILL ME */
 };
 
@@ -112,8 +113,17 @@
   return video_flip_method_type;
 }
 
+static void
+gst_video_flip_video_direction_interface_init (GstVideoDirectionInterface *
+    iface)
+{
+  /* We implement the video-direction property */
+}
+
 #define gst_video_flip_parent_class parent_class
-G_DEFINE_TYPE (GstVideoFlip, gst_video_flip, GST_TYPE_VIDEO_FILTER);
+G_DEFINE_TYPE_WITH_CODE (GstVideoFlip, gst_video_flip, GST_TYPE_VIDEO_FILTER,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_DIRECTION,
+        gst_video_flip_video_direction_interface_init))
 
 static GstCaps *
 gst_video_flip_transform_caps (GstBaseTransform * trans,
@@ -133,10 +143,10 @@
         gst_structure_get_int (structure, "height", &height)) {
 
       switch (videoflip->active_method) {
-        case GST_VIDEO_FLIP_METHOD_90R:
-        case GST_VIDEO_FLIP_METHOD_90L:
-        case GST_VIDEO_FLIP_METHOD_TRANS:
-        case GST_VIDEO_FLIP_METHOD_OTHER:
+        case GST_VIDEO_ORIENTATION_90R:
+        case GST_VIDEO_ORIENTATION_90L:
+        case GST_VIDEO_ORIENTATION_UL_LR:
+        case GST_VIDEO_ORIENTATION_UR_LL:
           gst_structure_set (structure, "width", G_TYPE_INT, height,
               "height", G_TYPE_INT, width, NULL);
           if (gst_structure_get_fraction (structure, "pixel-aspect-ratio",
@@ -151,13 +161,16 @@
             }
           }
           break;
-        case GST_VIDEO_FLIP_METHOD_IDENTITY:
-        case GST_VIDEO_FLIP_METHOD_180:
-        case GST_VIDEO_FLIP_METHOD_HORIZ:
-        case GST_VIDEO_FLIP_METHOD_VERT:
+        case GST_VIDEO_ORIENTATION_IDENTITY:
+        case GST_VIDEO_ORIENTATION_180:
+        case GST_VIDEO_ORIENTATION_HORIZ:
+        case GST_VIDEO_ORIENTATION_VERT:
           gst_structure_set (structure, "width", G_TYPE_INT, width,
               "height", G_TYPE_INT, height, NULL);
           break;
+        case GST_VIDEO_ORIENTATION_CUSTOM:
+          GST_WARNING_OBJECT (videoflip, "unsuported custom orientation");
+          break;
         default:
           g_assert_not_reached ();
           break;
@@ -221,7 +234,7 @@
   dest_v_height = GST_VIDEO_FRAME_COMP_HEIGHT (dest, 2);
 
   switch (videoflip->active_method) {
-    case GST_VIDEO_FLIP_METHOD_90R:
+    case GST_VIDEO_ORIENTATION_90R:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -250,7 +263,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_90L:
+    case GST_VIDEO_ORIENTATION_90L:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -279,7 +292,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_180:
+    case GST_VIDEO_ORIENTATION_180:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -308,7 +321,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_HORIZ:
+    case GST_VIDEO_ORIENTATION_HORIZ:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -337,7 +350,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_VERT:
+    case GST_VIDEO_ORIENTATION_VERT:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -366,7 +379,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_TRANS:
+    case GST_VIDEO_ORIENTATION_UL_LR:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -392,7 +405,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_OTHER:
+    case GST_VIDEO_ORIENTATION_UR_LL:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -421,7 +434,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_IDENTITY:
+    case GST_VIDEO_ORIENTATION_IDENTITY:
       g_assert_not_reached ();
       break;
     default:
@@ -465,7 +478,7 @@
   dest_uv_height = GST_VIDEO_FRAME_COMP_HEIGHT (dest, 1);
 
   switch (videoflip->active_method) {
-    case GST_VIDEO_FLIP_METHOD_90R:
+    case GST_VIDEO_ORIENTATION_90R:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -487,7 +500,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_90L:
+    case GST_VIDEO_ORIENTATION_90L:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -509,7 +522,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_180:
+    case GST_VIDEO_ORIENTATION_180:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -532,7 +545,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_HORIZ:
+    case GST_VIDEO_ORIENTATION_HORIZ:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -554,7 +567,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_VERT:
+    case GST_VIDEO_ORIENTATION_VERT:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -576,7 +589,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_TRANS:
+    case GST_VIDEO_ORIENTATION_UL_LR:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -597,7 +610,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_OTHER:
+    case GST_VIDEO_ORIENTATION_UR_LL:
       /* Flip Y */
       s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
       d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -620,7 +633,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_IDENTITY:
+    case GST_VIDEO_ORIENTATION_IDENTITY:
       g_assert_not_reached ();
       break;
     default:
@@ -652,7 +665,7 @@
   bpp = GST_VIDEO_FRAME_COMP_PSTRIDE (src, 0);
 
   switch (videoflip->active_method) {
-    case GST_VIDEO_FLIP_METHOD_90R:
+    case GST_VIDEO_ORIENTATION_90R:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x++) {
           for (z = 0; z < bpp; z++) {
@@ -662,7 +675,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_90L:
+    case GST_VIDEO_ORIENTATION_90L:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x++) {
           for (z = 0; z < bpp; z++) {
@@ -672,7 +685,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_180:
+    case GST_VIDEO_ORIENTATION_180:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x++) {
           for (z = 0; z < bpp; z++) {
@@ -682,7 +695,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_HORIZ:
+    case GST_VIDEO_ORIENTATION_HORIZ:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x++) {
           for (z = 0; z < bpp; z++) {
@@ -692,7 +705,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_VERT:
+    case GST_VIDEO_ORIENTATION_VERT:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x++) {
           for (z = 0; z < bpp; z++) {
@@ -702,7 +715,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_TRANS:
+    case GST_VIDEO_ORIENTATION_UL_LR:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x++) {
           for (z = 0; z < bpp; z++) {
@@ -711,7 +724,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_OTHER:
+    case GST_VIDEO_ORIENTATION_UR_LL:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x++) {
           for (z = 0; z < bpp; z++) {
@@ -721,7 +734,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_IDENTITY:
+    case GST_VIDEO_ORIENTATION_IDENTITY:
       g_assert_not_reached ();
       break;
     default:
@@ -762,7 +775,7 @@
   bpp = y_stride;
 
   switch (videoflip->active_method) {
-    case GST_VIDEO_FLIP_METHOD_90R:
+    case GST_VIDEO_ORIENTATION_90R:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x += 2) {
           guint8 u;
@@ -789,7 +802,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_90L:
+    case GST_VIDEO_ORIENTATION_90L:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x += 2) {
           guint8 u;
@@ -814,7 +827,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_180:
+    case GST_VIDEO_ORIENTATION_180:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x += 2) {
           guint8 u;
@@ -838,7 +851,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_HORIZ:
+    case GST_VIDEO_ORIENTATION_HORIZ:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x += 2) {
           guint8 u;
@@ -861,7 +874,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_VERT:
+    case GST_VIDEO_ORIENTATION_VERT:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x += 2) {
           guint8 u;
@@ -884,7 +897,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_TRANS:
+    case GST_VIDEO_ORIENTATION_UL_LR:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x += 2) {
           guint8 u;
@@ -909,7 +922,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_OTHER:
+    case GST_VIDEO_ORIENTATION_UR_LL:
       for (y = 0; y < dh; y++) {
         for (x = 0; x < dw; x += 2) {
           guint8 u;
@@ -937,7 +950,7 @@
         }
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_IDENTITY:
+    case GST_VIDEO_ORIENTATION_IDENTITY:
       g_assert_not_reached ();
       break;
     default:
@@ -961,10 +974,10 @@
 
   /* Check that they are correct */
   switch (vf->active_method) {
-    case GST_VIDEO_FLIP_METHOD_90R:
-    case GST_VIDEO_FLIP_METHOD_90L:
-    case GST_VIDEO_FLIP_METHOD_TRANS:
-    case GST_VIDEO_FLIP_METHOD_OTHER:
+    case GST_VIDEO_ORIENTATION_90R:
+    case GST_VIDEO_ORIENTATION_90L:
+    case GST_VIDEO_ORIENTATION_UL_LR:
+    case GST_VIDEO_ORIENTATION_UR_LL:
       if ((in_info->width != out_info->height) ||
           (in_info->height != out_info->width)) {
         GST_ERROR_OBJECT (vf, "we are inverting width and height but caps "
@@ -973,12 +986,12 @@
         goto beach;
       }
       break;
-    case GST_VIDEO_FLIP_METHOD_IDENTITY:
+    case GST_VIDEO_ORIENTATION_IDENTITY:
 
       break;
-    case GST_VIDEO_FLIP_METHOD_180:
-    case GST_VIDEO_FLIP_METHOD_HORIZ:
-    case GST_VIDEO_FLIP_METHOD_VERT:
+    case GST_VIDEO_ORIENTATION_180:
+    case GST_VIDEO_ORIENTATION_HORIZ:
+    case GST_VIDEO_ORIENTATION_VERT:
       if ((in_info->width != out_info->width) ||
           (in_info->height != out_info->height)) {
         GST_ERROR_OBJECT (vf, "we are keeping width and height but caps "
@@ -1039,11 +1052,17 @@
 }
 
 static void
-gst_video_flip_set_method (GstVideoFlip * videoflip, GstVideoFlipMethod method,
-    gboolean from_tag)
+gst_video_flip_set_method (GstVideoFlip * videoflip,
+    GstVideoOrientationMethod method, gboolean from_tag)
 {
   GST_OBJECT_LOCK (videoflip);
 
+  if (method == GST_VIDEO_ORIENTATION_CUSTOM) {
+    GST_WARNING_OBJECT (videoflip, "unsupported custom orientation");
+    GST_OBJECT_UNLOCK (videoflip);
+    return;
+  }
+
   /* Store updated method */
   if (from_tag)
     videoflip->tag_method = method;
@@ -1051,24 +1070,31 @@
     videoflip->method = method;
 
   /* Get the new method */
-  if (videoflip->method == GST_VIDEO_FLIP_METHOD_AUTO)
+  if (videoflip->method == GST_VIDEO_ORIENTATION_AUTO)
     method = videoflip->tag_method;
   else
     method = videoflip->method;
 
   if (method != videoflip->active_method) {
+    GEnumValue *active_method_enum, *method_enum;
     GstBaseTransform *btrans = GST_BASE_TRANSFORM (videoflip);
+    GEnumClass *enum_class =
+        g_type_class_ref (GST_TYPE_VIDEO_ORIENTATION_METHOD);
 
+    active_method_enum =
+        g_enum_get_value (enum_class, videoflip->active_method);
+    method_enum = g_enum_get_value (enum_class, method);
     GST_DEBUG_OBJECT (videoflip, "Changing method from %s to %s",
-        video_flip_methods[videoflip->active_method].value_nick,
-        video_flip_methods[method].value_nick);
+        active_method_enum ? active_method_enum->value_nick : "(nil)",
+        method_enum ? method_enum->value_nick : "(nil)");
+    g_type_class_unref (enum_class);
 
     videoflip->active_method = method;
 
     GST_OBJECT_UNLOCK (videoflip);
 
     gst_base_transform_set_passthrough (btrans,
-        method == GST_VIDEO_FLIP_METHOD_IDENTITY);
+        method == GST_VIDEO_ORIENTATION_IDENTITY);
     gst_base_transform_reconfigure_src (btrans);
   } else {
     GST_OBJECT_UNLOCK (videoflip);
@@ -1096,13 +1122,18 @@
 gst_video_flip_transform_frame (GstVideoFilter * vfilter,
     GstVideoFrame * in_frame, GstVideoFrame * out_frame)
 {
+  GEnumClass *enum_class;
+  GEnumValue *active_method_enum;
   GstVideoFlip *videoflip = GST_VIDEO_FLIP (vfilter);
 
   if (G_UNLIKELY (videoflip->process == NULL))
     goto not_negotiated;
 
+  enum_class = g_type_class_ref (GST_TYPE_VIDEO_ORIENTATION_METHOD);
+  active_method_enum = g_enum_get_value (enum_class, videoflip->active_method);
   GST_LOG_OBJECT (videoflip, "videoflip: flipping (%s)",
-      video_flip_methods[videoflip->active_method].value_nick);
+      active_method_enum ? active_method_enum->value_nick : "(nil)");
+  g_type_class_unref (enum_class);
 
   GST_OBJECT_LOCK (videoflip);
   videoflip->process (videoflip, out_frame, in_frame);
@@ -1138,31 +1169,31 @@
           gst_structure_get_double (structure, "pointer_y", &y)) {
         GST_DEBUG_OBJECT (vf, "converting %fx%f", x, y);
         switch (vf->active_method) {
-          case GST_VIDEO_FLIP_METHOD_90R:
+          case GST_VIDEO_ORIENTATION_90R:
             new_x = y;
             new_y = out_info->width - x;
             break;
-          case GST_VIDEO_FLIP_METHOD_90L:
+          case GST_VIDEO_ORIENTATION_90L:
             new_x = out_info->height - y;
             new_y = x;
             break;
-          case GST_VIDEO_FLIP_METHOD_OTHER:
+          case GST_VIDEO_ORIENTATION_UR_LL:
             new_x = out_info->height - y;
             new_y = out_info->width - x;
             break;
-          case GST_VIDEO_FLIP_METHOD_TRANS:
+          case GST_VIDEO_ORIENTATION_UL_LR:
             new_x = y;
             new_y = x;
             break;
-          case GST_VIDEO_FLIP_METHOD_180:
+          case GST_VIDEO_ORIENTATION_180:
             new_x = out_info->width - x;
             new_y = out_info->height - y;
             break;
-          case GST_VIDEO_FLIP_METHOD_HORIZ:
+          case GST_VIDEO_ORIENTATION_HORIZ:
             new_x = out_info->width - x;
             new_y = y;
             break;
-          case GST_VIDEO_FLIP_METHOD_VERT:
+          case GST_VIDEO_ORIENTATION_VERT:
             new_x = x;
             new_y = out_info->height - y;
             break;
@@ -1201,21 +1232,21 @@
 
       if (gst_tag_list_get_string (taglist, "image-orientation", &orientation)) {
         if (!g_strcmp0 ("rotate-0", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_IDENTITY, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_IDENTITY, TRUE);
         else if (!g_strcmp0 ("rotate-90", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_90R, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_90R, TRUE);
         else if (!g_strcmp0 ("rotate-180", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_180, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_180, TRUE);
         else if (!g_strcmp0 ("rotate-270", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_90L, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_90L, TRUE);
         else if (!g_strcmp0 ("flip-rotate-0", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_HORIZ, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_HORIZ, TRUE);
         else if (!g_strcmp0 ("flip-rotate-90", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_TRANS, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_UL_LR, TRUE);
         else if (!g_strcmp0 ("flip-rotate-180", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_VERT, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_VERT, TRUE);
         else if (!g_strcmp0 ("flip-rotate-270", orientation))
-          gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_OTHER, TRUE);
+          gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_UR_LL, TRUE);
 
         g_free (orientation);
       }
@@ -1237,6 +1268,7 @@
 
   switch (prop_id) {
     case PROP_METHOD:
+    case PROP_VIDEO_DIRECTION:
       gst_video_flip_set_method (videoflip, g_value_get_enum (value), FALSE);
       break;
     default:
@@ -1253,6 +1285,7 @@
 
   switch (prop_id) {
     case PROP_METHOD:
+    case PROP_VIDEO_DIRECTION:
       g_value_set_enum (value, videoflip->method);
       break;
     default:
@@ -1275,10 +1308,13 @@
   gobject_class->get_property = gst_video_flip_get_property;
 
   g_object_class_install_property (gobject_class, PROP_METHOD,
-      g_param_spec_enum ("method", "method", "method",
+      g_param_spec_enum ("method", "method",
+          "method (deprecated, use video-direction instead)",
           GST_TYPE_VIDEO_FLIP_METHOD, PROP_METHOD_DEFAULT,
           GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
           G_PARAM_STATIC_STRINGS));
+  g_object_class_override_property (gobject_class, PROP_VIDEO_DIRECTION,
+      "video-direction");
 
   gst_element_class_set_static_metadata (gstelement_class, "Video flipper",
       "Filter/Effect/Video",
@@ -1306,5 +1342,5 @@
 {
   /* AUTO is not valid for active method, this is just to ensure we setup the
    * method in gst_video_flip_set_method() */
-  videoflip->active_method = GST_VIDEO_FLIP_METHOD_AUTO;
+  videoflip->active_method = GST_VIDEO_ORIENTATION_AUTO;
 }
diff --git a/gst/videofilter/gstvideoflip.h b/gst/videofilter/gstvideoflip.h
index 490de29..0fca8e9 100644
--- a/gst/videofilter/gstvideoflip.h
+++ b/gst/videofilter/gstvideoflip.h
@@ -75,9 +75,9 @@
   GstVideoFilter videofilter;
 
   /* < private > */
-  GstVideoFlipMethod method;
-  GstVideoFlipMethod tag_method;
-  GstVideoFlipMethod active_method;
+  GstVideoOrientationMethod method;
+  GstVideoOrientationMethod tag_method;
+  GstVideoOrientationMethod active_method;
   void (*process) (GstVideoFlip *videoflip, GstVideoFrame *dest, const GstVideoFrame *src);
 };
 
diff --git a/gst/videomixer/Makefile.in b/gst/videomixer/Makefile.in
index 0012aee..95c1dff 100644
--- a/gst/videomixer/Makefile.in
+++ b/gst/videomixer/Makefile.in
@@ -121,6 +121,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -370,6 +371,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -476,6 +478,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -543,6 +548,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/wavenc/Makefile.in b/gst/wavenc/Makefile.in
index 5947dcb..44df2b9 100644
--- a/gst/wavenc/Makefile.in
+++ b/gst/wavenc/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/gst/wavparse/Makefile.am b/gst/wavparse/Makefile.am
index d3f1818..4d4247e 100644
--- a/gst/wavparse/Makefile.am
+++ b/gst/wavparse/Makefile.am
@@ -10,6 +10,7 @@
 	-lgstriff-@GST_API_VERSION@ \
 	-lgstaudio-@GST_API_VERSION@ \
 	-lgsttag-@GST_API_VERSION@ \
+	-lgstpbutils-@GST_API_VERSION@ \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
 	$(LIBM)
diff --git a/gst/wavparse/Makefile.in b/gst/wavparse/Makefile.in
index 93b8128..40de741 100644
--- a/gst/wavparse/Makefile.in
+++ b/gst/wavparse/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -577,6 +583,7 @@
 	-lgstriff-@GST_API_VERSION@ \
 	-lgstaudio-@GST_API_VERSION@ \
 	-lgsttag-@GST_API_VERSION@ \
+	-lgstpbutils-@GST_API_VERSION@ \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
 	$(LIBM)
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index a83b068..6650d18 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -54,6 +54,7 @@
 #include "gstwavparse.h"
 #include "gst/riff/riff-media.h"
 #include <gst/base/gsttypefindhelper.h>
+#include <gst/pbutils/descriptions.h>
 #include <gst/gst-i18n-plugin.h>
 
 GST_DEBUG_CATEGORY_STATIC (wavparse_debug);
@@ -1223,9 +1224,25 @@
 
     wav->got_fmt = TRUE;
 
-    if (codec_name) {
+    if (wav->tags == NULL)
       wav->tags = gst_tag_list_new_empty ();
 
+    {
+      GstCaps *templ_caps = gst_pad_get_pad_template_caps (wav->sinkpad);
+      gst_pb_utils_add_codec_description_to_tag_list (wav->tags,
+          GST_TAG_CONTAINER_FORMAT, templ_caps);
+      gst_caps_unref (templ_caps);
+    }
+
+    /* If bps is nonzero, then we do have a valid bitrate that can be
+     * announced in a tag list. */
+    if (wav->bps) {
+      guint bitrate = wav->bps * 8;
+      gst_tag_list_add (wav->tags, GST_TAG_MERGE_REPLACE,
+          GST_TAG_BITRATE, bitrate, NULL);
+    }
+
+    if (codec_name) {
       gst_tag_list_add (wav->tags, GST_TAG_MERGE_REPLACE,
           GST_TAG_AUDIO_CODEC, codec_name, NULL);
 
@@ -2229,9 +2246,7 @@
     } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
       /* for fatal errors we post an error message, post the error
        * first so the app knows about the error first. */
-      GST_ELEMENT_ERROR (wav, STREAM, FAILED,
-          (_("Internal data flow error.")),
-          ("streaming task paused, reason %s (%d)", reason, ret));
+      GST_ELEMENT_FLOW_ERROR (wav, ret);
       gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
     }
     return;
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index 403a92e..47600eb 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/ltmain.sh b/ltmain.sh
index 147d758..a736cf9 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-0.1"
+VERSION="2.4.6 Debian-2.4.6-2"
 package_revision=2.4.6
 
 
@@ -2068,7 +2068,7 @@
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname (GNU libtool) 2.4.6
+       version:        $progname $scriptversion Debian-2.4.6-2
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 9dc24c0..2d47c19 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -97,6 +97,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -255,6 +256,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -361,6 +363,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -428,6 +433,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 10ab284..ee80844 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -728,7 +728,6 @@
     cat <<_LT_EOF >> "$cfgfile"
 #! $SHELL
 # Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 
 # Provide generalized library-building support services.
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 3944f08..921639d 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -97,6 +97,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -256,6 +257,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -362,6 +364,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -429,6 +434,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/po/af.gmo b/po/af.gmo
index a0db1a7..f1578a6 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 52f6a6b..41d9bdd 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: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\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"
@@ -55,9 +55,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Geen of ongeldige klanktoevoer, AVI-stroom sal korrup wees."
 
@@ -86,9 +83,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-msgid "Internal data flow error."
-msgstr ""
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
diff --git a/po/az.gmo b/po/az.gmo
index c50fc7a..65d4a77 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 19d13c1..1a2bbc4 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: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\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"
@@ -56,9 +56,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Səhv ya da olmayan audio girişi, AVI yayımı pozulacaqdır."
 
@@ -87,9 +84,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-msgid "Internal data flow error."
-msgstr ""
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
diff --git a/po/bg.gmo b/po/bg.gmo
index bc14aef..2610551 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 5b8f64d..e3df66f 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-21 21:03+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@ludost.net>\n"
@@ -54,9 +54,6 @@
 msgid "Server sent bad data."
 msgstr "Сървърът изпрати лоши данни."
 
-msgid "Internal data stream error."
-msgstr "Вътрешна грешка на потока от данни."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Аудио входът липсва или е грешен. Потокът с AVI ще бъде повреден."
 
@@ -86,9 +83,6 @@
 msgstr ""
 "Този файл съдържа прекалено много потоци. Изпълняват се само първите %d"
 
-msgid "Internal data flow error."
-msgstr "Вътрешна грешка в потока с данни."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -427,3 +421,9 @@
 
 msgid "Cannot operate without a clock"
 msgstr "Работата без часовник е невъзможна."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Вътрешна грешка на потока от данни."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Вътрешна грешка в потока с данни."
diff --git a/po/ca.gmo b/po/ca.gmo
index fcade88..c1d6fcc 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 33798cb..1d7d7ac 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\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"
@@ -58,9 +58,6 @@
 msgid "Server sent bad data."
 msgstr "El servidor ha enviat dades errònies."
 
-msgid "Internal data stream error."
-msgstr "S'ha produït un error intern de flux de dades."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Manca o no és vàlida l'entrada d'àudio, el flux AVI estarà malmès."
 
@@ -90,9 +87,6 @@
 msgstr ""
 "Aquest fitxer conté massa fluxos. Només s'estan reproduint els primers %d"
 
-msgid "Internal data flow error."
-msgstr "S'ha produït un error intern de flux de dades."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -470,6 +464,12 @@
 msgid "Cannot operate without a clock"
 msgstr "No es pot operar sense un rellotge"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "El dispositiu «%s» no és un dispositiu de sortida."
diff --git a/po/cs.gmo b/po/cs.gmo
index 22cf1c0..f679647 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index cfaecd1..483bb16 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-27 16:40+0100\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Server odeslal chybná data."
 
-msgid "Internal data stream error."
-msgstr "Vnitřní chyba datového proudu."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Žádný nebo neplatný zvukový vstup, proud AVI bude poškozen."
 
@@ -88,9 +85,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Tento soubor obsahuje příliš mnoho proudů. Přehrává se pouze první %d"
 
-msgid "Internal data flow error."
-msgstr "Vnitřní chyba datového toku."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -429,3 +423,9 @@
 
 msgid "Cannot operate without a clock"
 msgstr "Není možné fungovat bez hodin"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Vnitřní chyba datového proudu."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Vnitřní chyba datového toku."
diff --git a/po/da.gmo b/po/da.gmo
index 0f4b838..cace6fd 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index b860f03..f1bb97c 100644
--- a/po/da.po
+++ b/po/da.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-03-27 23:54+0200\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Server sendte ugyldige data."
 
-msgid "Internal data stream error."
-msgstr "Intern datastrømsfejl."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Ingen eller defekt inddatalyd, AVI-sekvens vil blive ødelagt."
 
@@ -91,9 +88,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Denne fil indeholder for mange strømme. Afspil først kun %d"
 
-msgid "Internal data flow error."
-msgstr "Intern datastrømsfejl."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -432,5 +426,11 @@
 msgid "Cannot operate without a clock"
 msgstr "Kan ikke fungere uden et ur"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern datastrømsfejl."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Intern datastrømsfejl."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Enheden »%s« understøtter ikke videooptagelse"
diff --git a/po/de.gmo b/po/de.gmo
index d08cabf..2dba3a0 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index b184296..d627439 100644
--- a/po/de.po
+++ b/po/de.po
@@ -14,7 +14,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-22 23:42+0100\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -63,9 +63,6 @@
 msgid "Server sent bad data."
 msgstr "Server gab unerwartete Daten zurück."
 
-msgid "Internal data stream error."
-msgstr "Interner Datenstromfehler."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Kein oder ungültiger Eingabeton, der AVI-Strom wird fehlerhaft sein."
 
@@ -98,9 +95,6 @@
 "Diese Datei enthält zu viele Ströme. Es werden nur die ersten %d "
 "wiedergegeben"
 
-msgid "Internal data flow error."
-msgstr "Interner Datenstromfehler."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -451,6 +445,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Es kann nicht ohne einen Taktgeber gearbeitet werden."
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interner Datenstromfehler."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Interner Datenstromfehler."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Gerät »%s« unterstützt keine Videoaufnahme"
 
diff --git a/po/el.gmo b/po/el.gmo
index bcf5998..aa7f41c 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index cb018bb..3cb143a 100644
--- a/po/el.po
+++ b/po/el.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2012-05-05 19:05+0100\n"
 "Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Ο διακομιστής έστειλε λάθος δεδομένα."
 
-msgid "Internal data stream error."
-msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Καμία ή άκυρη εισαγωγή ήχου, η AVI ροή θα καταρρεύσει."
 
@@ -88,9 +85,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Αυτό το αρχείο περιέχει πολλές ροές. Αναπαράγεται μόνο η πρώτη %d"
 
-msgid "Internal data flow error."
-msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -446,6 +440,12 @@
 #~ msgid "Failed to query sound server capabilities"
 #~ msgstr "Αποτυχία αναζήτησης των δυνατοτήτων του διακομιστή ήχου"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+
 #~ msgid "Bass"
 #~ msgstr "Μπάσα"
 
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 6149a13..d9cd4a5 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 41d3716..15ae1e5 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: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\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"
@@ -55,9 +55,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "No or invalid input audio, AVI stream will be corrupt."
 
@@ -86,9 +83,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-msgid "Internal data flow error."
-msgstr ""
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
diff --git a/po/eo.gmo b/po/eo.gmo
index b701d35..89ddba6 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 4c270ae..e3f8381 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2011-06-04 21:48+0100\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -53,9 +53,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "Interna datumflu-eraro."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 
@@ -84,9 +81,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-msgid "Internal data flow error."
-msgstr ""
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -408,6 +402,9 @@
 msgid "Cannot operate without a clock"
 msgstr ""
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna datumflu-eraro."
+
 #~ msgid "Bass"
 #~ msgstr "Baso"
 
diff --git a/po/es.gmo b/po/es.gmo
index 6ca1b99..35c5cfc 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 307734a..f3edfa0 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2011-02-12 18:30+0100\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -56,9 +56,6 @@
 msgid "Server sent bad data."
 msgstr "El servidor envió datos erróneos."
 
-msgid "Internal data stream error."
-msgstr "Error interno de flujo de datos."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "El audio no existe o no es válido, el flujo AVI estará corrupto."
 
@@ -89,9 +86,6 @@
 msgstr ""
 "Este archivo contiene demasiados flujos. Sólo se reproducirá el primer %d"
 
-msgid "Internal data flow error."
-msgstr "Error en el flujo de datos interno."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -466,6 +460,12 @@
 msgid "Cannot operate without a clock"
 msgstr "No se puede operar sin reloj"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Error interno de flujo de datos."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Error en el flujo de datos interno."
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "El dispositivo «%s» no es un dispositivo de salida."
diff --git a/po/eu.gmo b/po/eu.gmo
index 0799966..c393772 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index e848654..3377c78 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.18.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2010-03-25 12:37+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "Datu-korrontearen barne-errorea."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 "Ez dago audio-sarrerarik, edo baliogabea da. AVI korrontea hondatua egongo "
@@ -92,9 +89,6 @@
 msgstr ""
 "Fitxategi horrek korronte gehiegi ditu. Erreproduzitu soilik lehen %d(r)ak"
 
-msgid "Internal data flow error."
-msgstr "Datu-fluxuaren barne-errorea."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -460,6 +454,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Ezin du funtzionatu erlojurik gabe"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Datu-korrontearen barne-errorea."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Datu-fluxuaren barne-errorea."
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "'%s' gailua ez da irteerako gailu bat."
diff --git a/po/fi.gmo b/po/fi.gmo
index 6130182..65da6dc 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index b374076..9e5339d 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2010-11-17 23:03+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -58,9 +58,6 @@
 msgid "Server sent bad data."
 msgstr "Palvelin lähetti virheellistä dataa."
 
-msgid "Internal data stream error."
-msgstr "Sisäisen tietovirran virhe."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 "Ääntä ei ole tai äänilähde on viallinen, AVI-virta tulee olemaan "
@@ -91,9 +88,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Tiedosto sisältää useita virtoja. Soitetaan vain ensimmäiset %d"
 
-msgid "Internal data flow error."
-msgstr "Sisäisen tietovirran virhe."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -438,6 +432,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Ei voitu toimia ilman kelloa"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Sisäisen tietovirran virhe."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Sisäisen tietovirran virhe."
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Laite ”%s” ei ole ulostulolaite."
diff --git a/po/fr.gmo b/po/fr.gmo
index 9ad0c66..11f56b7 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index d0c7adc..e3639f8 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-20 16:27+0100\n"
 "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Le serveur a envoyé de mauvaises données."
 
-msgid "Internal data stream error."
-msgstr "Erreur du flux de données interne."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Entrée audio absente ou non valide, le flux AVI sera corrompu."
 
@@ -90,9 +87,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Ce fichier contient trop de flux. Seuls les %d premiers seront lus"
 
-msgid "Internal data flow error."
-msgstr "Erreur du flux de données interne."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -459,3 +453,9 @@
 
 msgid "Cannot operate without a clock"
 msgstr "Impossible de fonctionner sans horloge"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erreur du flux de données interne."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Erreur du flux de données interne."
diff --git a/po/gl.gmo b/po/gl.gmo
index 0465f3d..9af1e42 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 8697bb9..c6320af 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2012-12-15 03:46+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -58,9 +58,6 @@
 msgid "Server sent bad data."
 msgstr "O servidor enviou datos erróneos."
 
-msgid "Internal data stream error."
-msgstr "Produciuse un erro no fluxo de datos interno."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "O audio non existe ou non é válido, o fluxo AVI está corrompido."
 
@@ -90,9 +87,6 @@
 msgstr ""
 "Este ficheiro contén demasiados fluxos. Só se reproducirá o primeiro %d"
 
-msgid "Internal data flow error."
-msgstr "Produciuse un erro interno no fluxo de datos."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -459,6 +453,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Non é posíbel operar sen reloxo"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Produciuse un erro no fluxo de datos interno."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Produciuse un erro interno no fluxo de datos."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "O dispositivo «%s» non admite a captura de vídeo."
 
diff --git a/po/gst-plugins-good-1.0.pot b/po/gst-plugins-good-1.0.pot
index 917f580..21e46de 100644
--- a/po/gst-plugins-good-1.0.pot
+++ b/po/gst-plugins-good-1.0.pot
@@ -5,9 +5,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good 1.9.1\n"
+"Project-Id-Version: gst-plugins-good 1.9.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\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"
@@ -41,35 +41,31 @@
 msgid "No URL set."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1222
+#: ext/soup/gstsouphttpsrc.c:1227
 msgid "Server does not support seeking."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1269
+#: ext/soup/gstsouphttpsrc.c:1281
 msgid "Could not resolve server name."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1275
+#: ext/soup/gstsouphttpsrc.c:1287
 msgid "Could not establish connection to server."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1280
+#: ext/soup/gstsouphttpsrc.c:1292
 msgid "Secure connection setup failed."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1288
+#: ext/soup/gstsouphttpsrc.c:1300
 msgid ""
 "A network error occurred, or the server closed the connection unexpectedly."
 msgstr ""
 
-#: ext/soup/gstsouphttpsrc.c:1295
+#: ext/soup/gstsouphttpsrc.c:1307
 msgid "Server sent bad data."
 msgstr ""
 
-#: gst/avi/gstavidemux.c:5704
-msgid "Internal data stream error."
-msgstr ""
-
 #: gst/avi/gstavimux.c:1832
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
@@ -78,50 +74,46 @@
 msgid "This file contains no playable streams."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:714 gst/isomp4/qtdemux.c:6170 gst/isomp4/qtdemux.c:6237
-#: gst/isomp4/qtdemux.c:6526
+#: gst/isomp4/qtdemux.c:714 gst/isomp4/qtdemux.c:6165 gst/isomp4/qtdemux.c:6232
+#: gst/isomp4/qtdemux.c:6521
 msgid "This file is invalid and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:2742
+#: gst/isomp4/qtdemux.c:2737
 msgid "Cannot play stream because it is encrypted with PlayReady DRM."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:3859 gst/isomp4/qtdemux.c:7259
-#: gst/isomp4/qtdemux.c:7266 gst/isomp4/qtdemux.c:8100
-#: gst/isomp4/qtdemux.c:8529 gst/isomp4/qtdemux.c:8536
-#: gst/isomp4/qtdemux.c:10901
+#: gst/isomp4/qtdemux.c:3854 gst/isomp4/qtdemux.c:7254
+#: gst/isomp4/qtdemux.c:7261 gst/isomp4/qtdemux.c:8095
+#: gst/isomp4/qtdemux.c:8524 gst/isomp4/qtdemux.c:8531
+#: gst/isomp4/qtdemux.c:10896
 msgid "This file is corrupt and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4101
+#: gst/isomp4/qtdemux.c:4096
 msgid "Invalid atom size."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:4179
+#: gst/isomp4/qtdemux.c:4174
 msgid "This file is incomplete and cannot be played."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:9510
+#: gst/isomp4/qtdemux.c:9505
 msgid "The video in this file might not play correctly."
 msgstr ""
 
-#: gst/isomp4/qtdemux.c:10942
+#: gst/isomp4/qtdemux.c:10937
 #, c-format
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-#: gst/multifile/gstsplitmuxsrc.c:554 gst/wavparse/gstwavparse.c:2233
-msgid "Internal data flow error."
-msgstr ""
-
-#: gst/rtsp/gstrtspsrc.c:6438
+#: gst/rtsp/gstrtspsrc.c:6436
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
 msgstr ""
 
-#: gst/rtsp/gstrtspsrc.c:6443
+#: gst/rtsp/gstrtspsrc.c:6441
 msgid ""
 "No supported stream was found. You might need to allow more transport "
 "protocols or may otherwise be missing the right GStreamer RTSP extension "
@@ -261,109 +253,109 @@
 msgid "Error reading %d bytes from device '%s'."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:1160
+#: sys/v4l2/gstv4l2object.c:1168
 #, c-format
 msgid "Failed to enumerate possible video formats device '%s' can work with"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2865
+#: sys/v4l2/gstv4l2object.c:2876
 #, c-format
 msgid "Could not map buffers from device '%s'"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2873
+#: sys/v4l2/gstv4l2object.c:2884
 #, c-format
 msgid "The driver of device '%s' does not support the IO method %d"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:2880
+#: sys/v4l2/gstv4l2object.c:2891
 #, c-format
 msgid "The driver of device '%s' does not support any known IO method."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3503 sys/v4l2/gstv4l2object.c:3514
+#: sys/v4l2/gstv4l2object.c:3514 sys/v4l2/gstv4l2object.c:3525
 #, c-format
 msgid "Device '%s' is busy"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3520 sys/v4l2/gstv4l2object.c:3532
+#: sys/v4l2/gstv4l2object.c:3531 sys/v4l2/gstv4l2object.c:3543
 #, c-format
 msgid "Device '%s' cannot capture at %dx%d"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3543
+#: sys/v4l2/gstv4l2object.c:3554
 #, c-format
 msgid "Device '%s' cannot capture in the specified format"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3556
+#: sys/v4l2/gstv4l2object.c:3567
 #, c-format
 msgid "Device '%s' does support non-contiguous planes"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3567
+#: sys/v4l2/gstv4l2object.c:3578
 #, c-format
 msgid "Could not get parameters on device '%s'"
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3575
+#: sys/v4l2/gstv4l2object.c:3586
 msgid "Video device did not accept new frame rate setting."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3697
+#: sys/v4l2/gstv4l2object.c:3708
 msgid "Video device did not provide output format."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3703
+#: sys/v4l2/gstv4l2object.c:3714
 msgid "Video device returned invalid dimensions."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3711
+#: sys/v4l2/gstv4l2object.c:3722
 msgid "Video devices uses an unsupported interlacing method."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:3718
+#: sys/v4l2/gstv4l2object.c:3729
 msgid "Video devices uses an unsupported pixel format."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:4145
+#: sys/v4l2/gstv4l2object.c:4156
 msgid "Failed to configure internal buffer pool."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:4151
+#: sys/v4l2/gstv4l2object.c:4162
 msgid "Video device did not suggest any buffer size."
 msgstr ""
 
-#: sys/v4l2/gstv4l2object.c:4166
+#: sys/v4l2/gstv4l2object.c:4177
 msgid "No downstream pool to import from."
 msgstr ""
 
-#: sys/v4l2/gstv4l2radio.c:138
+#: sys/v4l2/gstv4l2radio.c:143
 #, c-format
 msgid "Failed to get settings of tuner %d on device '%s'."
 msgstr ""
 
-#: sys/v4l2/gstv4l2radio.c:145
+#: sys/v4l2/gstv4l2radio.c:150
 #, c-format
 msgid "Error getting capabilities for device '%s'."
 msgstr ""
 
-#: sys/v4l2/gstv4l2radio.c:152
+#: sys/v4l2/gstv4l2radio.c:157
 #, c-format
 msgid "Device '%s' is not a tuner."
 msgstr ""
 
-#: sys/v4l2/gstv4l2radio.c:179
+#: sys/v4l2/gstv4l2radio.c:184
 #, c-format
 msgid "Failed to get radio input on device '%s'. "
 msgstr ""
 
-#: sys/v4l2/gstv4l2radio.c:202 sys/v4l2/v4l2_calls.c:1067
+#: sys/v4l2/gstv4l2radio.c:207 sys/v4l2/v4l2_calls.c:1073
 #, c-format
 msgid "Failed to set input %d on device %s."
 msgstr ""
 
-#: sys/v4l2/gstv4l2radio.c:236
+#: sys/v4l2/gstv4l2radio.c:241
 #, c-format
 msgid "Failed to change mute state for device '%s'."
 msgstr ""
@@ -372,7 +364,7 @@
 msgid "Failed to allocated required memory."
 msgstr ""
 
-#: sys/v4l2/gstv4l2src.c:543 sys/v4l2/gstv4l2videodec.c:709
+#: sys/v4l2/gstv4l2src.c:530 sys/v4l2/gstv4l2videodec.c:709
 msgid "Failed to allocate required memory."
 msgstr ""
 
@@ -404,110 +396,110 @@
 msgid "Failed to process frame."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:89
+#: sys/v4l2/v4l2_calls.c:94
 #, c-format
 msgid ""
 "Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
 "it is a v4l1 driver."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:153
+#: sys/v4l2/v4l2_calls.c:158
 #, c-format
 msgid "Failed to query attributes of input %d in device %s"
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:184
+#: sys/v4l2/v4l2_calls.c:189
 #, c-format
 msgid "Failed to get setting of tuner %d on device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:232
+#: sys/v4l2/v4l2_calls.c:237
 #, c-format
 msgid "Failed to query norm on device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:411
+#: sys/v4l2/v4l2_calls.c:416
 #, c-format
 msgid "Failed getting controls attributes on device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:605
+#: sys/v4l2/v4l2_calls.c:610
 #, c-format
 msgid "Cannot identify device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:612
+#: sys/v4l2/v4l2_calls.c:617
 #, c-format
 msgid "This isn't a device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:619
+#: sys/v4l2/v4l2_calls.c:624
 #, c-format
 msgid "Could not open device '%s' for reading and writing."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:626
+#: sys/v4l2/v4l2_calls.c:631
 #, c-format
 msgid "Device '%s' is not a capture device."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:634
+#: sys/v4l2/v4l2_calls.c:639
 #, c-format
 msgid "Device '%s' is not a output device."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:642
+#: sys/v4l2/v4l2_calls.c:647
 #, c-format
 msgid "Device '%s' is not a M2M device."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:693
+#: sys/v4l2/v4l2_calls.c:699
 #, c-format
 msgid "Could not dup device '%s' for reading and writing."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:777
+#: sys/v4l2/v4l2_calls.c:783
 #, c-format
 msgid "Failed to set norm for device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:815
+#: sys/v4l2/v4l2_calls.c:821
 #, c-format
 msgid "Failed to get current tuner frequency for device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:857
+#: sys/v4l2/v4l2_calls.c:863
 #, c-format
 msgid "Failed to set current tuner frequency for device '%s' to %lu Hz."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:891
+#: sys/v4l2/v4l2_calls.c:897
 #, c-format
 msgid "Failed to get signal strength for device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:927
+#: sys/v4l2/v4l2_calls.c:933
 #, c-format
 msgid "Failed to get value for control %d on device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:962
+#: sys/v4l2/v4l2_calls.c:968
 #, c-format
 msgid "Failed to set value %d for control %d on device '%s'."
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:1042
+#: sys/v4l2/v4l2_calls.c:1048
 #, c-format
 msgid "Failed to get current input on device '%s'. May be it is a radio device"
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:1099
+#: sys/v4l2/v4l2_calls.c:1105
 #, c-format
 msgid ""
 "Failed to get current output on device '%s'. May be it is a radio device"
 msgstr ""
 
-#: sys/v4l2/v4l2_calls.c:1124
+#: sys/v4l2/v4l2_calls.c:1130
 #, c-format
 msgid "Failed to set output %d on device %s."
 msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index 54949f4..6a6514d 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index e6cd2da..6fe811c 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-05-27 12:47-0700\n"
 "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -56,9 +56,6 @@
 msgid "Server sent bad data."
 msgstr "Poslužitelj je poslao neispravne podatke."
 
-msgid "Internal data stream error."
-msgstr "Interna greška toka (stream) podataka."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Nema audio ulaza ili je neispravan, AVI stream će biti iskvaren."
 
@@ -90,9 +87,6 @@
 "U ovoj datoteci ima previše streamova (streams). Samo prvih %d će se "
 "reproducirati"
 
-msgid "Internal data flow error."
-msgstr "Interna greška protoka podataka."
-
 # https://gstreamer.freedesktop.org/documentation/rtp.html
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
@@ -436,6 +430,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Ne mogu raditi bez takta (sata)"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna greška toka (stream) podataka."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Interna greška protoka podataka."
+
 #~ msgid "Could not establish connection to sound server"
 #~ msgstr "Ne mogu ostvariti vezu prema poslužitelju zvuka"
 
diff --git a/po/hu.gmo b/po/hu.gmo
index 4797948..2ffafa0 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 5f419b0..13756a3 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-03-14 18:35+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -59,9 +59,6 @@
 msgid "Server sent bad data."
 msgstr "A kiszolgáló hibás adatokat küldött."
 
-msgid "Internal data stream error."
-msgstr "Belső adatfolyam-hiba."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Nincs vagy érvénytelen bemeneti hang, az AVI-folyam sérült lesz."
 
@@ -92,9 +89,6 @@
 msgstr ""
 "A fájl túl sok adatfolyamot tartalmaz. Csak az első %d kerül lejátszásra."
 
-msgid "Internal data flow error."
-msgstr "Belső adatfolyam-hiba."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -438,6 +432,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Óra nélkül lehetetlen a működés"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Belső adatfolyam-hiba."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Belső adatfolyam-hiba."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "A(z) „%s” eszköz nem támogatja a videofelvételt"
 
diff --git a/po/id.gmo b/po/id.gmo
index 40d8eba..36c6e03 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 08a1062..3f372da 100644
--- a/po/id.po
+++ b/po/id.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.3.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2014-07-06 21:37+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Server mengirim data rusak."
 
-msgid "Internal data stream error."
-msgstr "Galat arus data internal."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Masukan audio tidak ada atau tidak sah, arus AVI akan rusak."
 
@@ -88,9 +85,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Berkas ini berisi terlalu banyak arus. Hanya memutar %d pertama"
 
-msgid "Internal data flow error."
-msgstr "Galat aliran data internal."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -428,5 +422,11 @@
 msgid "Cannot operate without a clock"
 msgstr "Tak dapat beroperasi tanpa jam"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Galat arus data internal."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Galat aliran data internal."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Divais '%s' tak mendukung penangkapan video"
diff --git a/po/it.gmo b/po/it.gmo
index 6e30743..b91aac1 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 0f3e084..8fd4c60 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.25.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2010-10-25 10:11+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -55,9 +55,6 @@
 msgid "Server sent bad data."
 msgstr "In server ha inviato dati errati."
 
-msgid "Internal data stream error."
-msgstr "Errore interno nello stream dei dati."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 "Ingresso audio assente o non valido. Lo stream AVI risulterà danneggiato."
@@ -87,9 +84,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Questo file contiene troppi stream. Riprodotti solo i primi %d"
 
-msgid "Internal data flow error."
-msgstr "Errore interno nel flusso di dati."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -458,6 +452,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Impossibile operare senza un clock"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Errore interno nello stream dei dati."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Errore interno nel flusso di dati."
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Il device «%s» non è un dispositivo di uscita."
diff --git a/po/ja.gmo b/po/ja.gmo
index 9c165ec..66e3526 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 795d1e5..70ee454 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2012-12-22 20:13+0900\n"
 "Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -56,9 +56,6 @@
 msgid "Server sent bad data."
 msgstr "サーバが不正なデータを送信しました。"
 
-msgid "Internal data stream error."
-msgstr "内部データストリームエラー"
-
 # SUN REVIEWED
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "入力オーディオが存在しないか無効であるため、AVI ストリームは壊れます。"
@@ -90,9 +87,6 @@
 "このファイルには多くのストリームが格納されているため、最初の %d 個のみ再生し"
 "ます"
 
-msgid "Internal data flow error."
-msgstr "内部データフローエラー。"
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -450,6 +444,12 @@
 msgid "Cannot operate without a clock"
 msgstr "クロックなしでは動作できません。"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "内部データストリームエラー"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "内部データフローエラー。"
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "デバイス '%s' はビデオキャプチャをサポートしていません"
 
diff --git a/po/lt.gmo b/po/lt.gmo
index 919db8d..0f14791 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 20b068a..76b74e2 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.23.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2010-07-16 19:34+0300\n"
 "Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "Vidinė duomenų srauto klaida."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Nėra įvesties garso arba jis netinkamas, AVI srautas bus sugadintas."
 
@@ -88,9 +85,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Šiame faile per daug srautų. Grojami tik pirmieji %d"
 
-msgid "Internal data flow error."
-msgstr "Vidinė duomenų srauto klaida."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -433,6 +427,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Negali veikti be laikrodžio"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Vidinė duomenų srauto klaida."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Vidinė duomenų srauto klaida."
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Įrenginys „%s“ nėra išvesties įrenginys."
diff --git a/po/lv.gmo b/po/lv.gmo
index aa4aaa9..39abb9f 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index c7e1af4..d1f94b3 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2014-04-20 16:38+0300\n"
 "Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
 "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
@@ -58,9 +58,6 @@
 msgid "Server sent bad data."
 msgstr "Serveris nosūtīja sliktus datus."
 
-msgid "Internal data stream error."
-msgstr "Iekšēja datu plūsmas kļūda."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Nav vai nederīgs ievades audio, AVI straume tiks bojāta."
 
@@ -89,9 +86,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Šī datne satur pārāk daudz straumju. Tiek atskaņota tikai pirmā %d"
 
-msgid "Internal data flow error."
-msgstr "Iekšēja datu plūsmas kļūda."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -434,6 +428,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Nevar veikt darbības bez pulksteņa"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Iekšēja datu plūsmas kļūda."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Iekšēja datu plūsmas kļūda."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Ierīce “%s” neatbalsta video tveršanu"
 
diff --git a/po/mt.gmo b/po/mt.gmo
index b855350..23ef444 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index 9dd1090..839c1db 100644
--- a/po/mt.po
+++ b/po/mt.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.10.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2008-10-26 19:09+0100\n"
 "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
 "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
@@ -55,9 +55,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "Problema interna fid-data stream"
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Input audio ma nstabx jew mhux validu. AVI stream jista jkun korrott."
 
@@ -86,9 +83,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Il-fajl fiħ aktar streams milli suppost. Ser indoqq l-ewwel %d"
 
-msgid "Internal data flow error."
-msgstr "Problema interna ta' data flow"
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -438,6 +432,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Ma nistax nħaddem mingħajr arloġġ"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Problema interna fid-data stream"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Problema interna ta' data flow"
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Device '%s' mhux capture device."
diff --git a/po/nb.gmo b/po/nb.gmo
index 5b18045..988aa45 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 8845dbb..ddce766 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -2,21 +2,21 @@
 # This file is put in the public domain.
 #
 # Kjartan Maraas <kmaraas@gnome.org>, 2004-2010.
-# Johnny A. Solbu <johnny@solbu.net>, 2012-2015
+# Johnny A. Solbu <johnny@solbu.net>, 2012-2016
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good 1.6.0\n"
+"Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
-"PO-Revision-Date: 2015-12-22 21:12+0100\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"PO-Revision-Date: 2016-08-05 23:47+0200\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"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.6.9\n"
+"X-Generator: Poedit 1.8.7.1\n"
 
 msgid "Jack server not found"
 msgstr "Jack-server ikke funnet"
@@ -54,9 +54,6 @@
 msgid "Server sent bad data."
 msgstr "Tjener sendte ugyldige data."
 
-msgid "Internal data stream error."
-msgstr "Intern feil i datastrøm."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Ingen eller ugyldig inndatalyd, AVI-strømmen vil bli skadet."
 
@@ -85,9 +82,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Filen inneholder for mange strømmer. Spiller bare første %d"
 
-msgid "Internal data flow error."
-msgstr "Intern dataflytfeil."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -151,10 +145,10 @@
 msgstr "Kunne ikke åpne lydenhet for opptak."
 
 msgid "CoreAudio device not found"
-msgstr ""
+msgstr "CoreAudio-enhet ikke funnet"
 
 msgid "CoreAudio device could not be opened"
-msgstr ""
+msgstr "CoreAudio-enhet kune ikke åpnes"
 
 msgid "Record Source"
 msgstr "Opptakskilde"
@@ -424,6 +418,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Kan ikke operere uten en klokke"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern feil i datastrøm."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Intern dataflytfeil."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Enhet «%s» støtter ikke videoopptak"
 
diff --git a/po/nl.gmo b/po/nl.gmo
index e0f4fde..d0376ca 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index f1f255b..30d2cf5 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-20 16:40+0100\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -55,9 +55,6 @@
 msgid "Server sent bad data."
 msgstr "De server stuurde onjuiste gegevens."
 
-msgid "Internal data stream error."
-msgstr "Interne fout in gegevensstroom."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Geen of ongeldig invoergeluid, AVI-stroom zal slecht zijn."
 
@@ -87,9 +84,6 @@
 msgstr ""
 "Dit bestand bevat te veel stromen. Alleen de eerste %d worden afgespeeld."
 
-msgid "Internal data flow error."
-msgstr "Interne fout in de gegevensdoorvoer."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -430,6 +424,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Kan niet werken zonder een klok."
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Interne fout in gegevensstroom."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Interne fout in de gegevensdoorvoer."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Apparaat '%s' ondersteunt het opnemen van video niet"
 
diff --git a/po/or.gmo b/po/or.gmo
index af8ea9c..1fac66f 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index fd6b48b..953edbc 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: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\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"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "ନିବେଶ ଧ୍ବନି ନାହିଁ ବା ଅବୈଧ ଅଛି. ଏ.ଭି.ଆଇ. ଧାରା ଭ୍ରଷ୍ଟ ହୋଇଯିବ."
 
@@ -88,9 +85,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-msgid "Internal data flow error."
-msgstr ""
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
diff --git a/po/pl.gmo b/po/pl.gmo
index ea296e4..4860f6b 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 2b5ddd3..be08aef 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-20 21:43+0100\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -51,9 +51,6 @@
 msgid "Server sent bad data."
 msgstr "Serwer przysłał błędne dane."
 
-msgid "Internal data stream error."
-msgstr "Błąd wewnętrzny strumienia danych."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Brak lub niepoprawne wejście dźwięku, strumień AVI będzie uszkodzony."
 
@@ -83,9 +80,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Ten plik zawiera zbyt dużo strumieni. Odtwarzanie tylko %d pierwszych"
 
-msgid "Internal data flow error."
-msgstr "Błąd wewnętrzny przepływu danych."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -426,3 +420,9 @@
 
 msgid "Cannot operate without a clock"
 msgstr "Nie można pracować bez zegara"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Błąd wewnętrzny strumienia danych."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Błąd wewnętrzny przepływu danych."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 7f37350..c39470d 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 5b5e022..a6d700a 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -13,7 +13,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-05-06 17:49-0300\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
@@ -61,9 +61,6 @@
 msgid "Server sent bad data."
 msgstr "O servidor enviou dados ruins."
 
-msgid "Internal data stream error."
-msgstr "Erro interno no fluxo de dados."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Entrada de áudio nula ou inválida, o fluxo AVI pode estar corrompido."
 
@@ -94,9 +91,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Este arquivo contêm muitos fluxos. Apenas reproduzindo o primeiro %d"
 
-msgid "Internal data flow error."
-msgstr "Erro interno no fluxo de dados."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -446,6 +440,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Não é possível operar sem um temporizador"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Erro interno no fluxo de dados."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Erro interno no fluxo de dados."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "O dispositivo \"%s\" não tem suporte a captura de vídeo"
 
diff --git a/po/ro.gmo b/po/ro.gmo
index 36dbb98..9e13855 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index b72cabb..a8a9c15 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 0.10.23.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2010-08-16 03:22+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -56,9 +56,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "Eroare internă a fluxului de date."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 "Intrarea audio nu există sau este nevalidă, fluxul de date AVI va fi corupt."
@@ -88,9 +85,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Fișierul conține prea multe fluxuri. Se redau doar primele %d"
 
-msgid "Internal data flow error."
-msgstr "Eroare internă a fluxului de date."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -454,6 +448,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Nu se poate opera fără un ceas"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Eroare internă a fluxului de date."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Eroare internă a fluxului de date."
+
 #, fuzzy
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Dispozitivul „%s” nu este un dispozitiv de ieșire."
diff --git a/po/ru.gmo b/po/ru.gmo
index 7262c2c..5201165 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 66afa19..84fe0a8 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-21 09:55+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Сервер прислал некорректные данные."
 
-msgid "Internal data stream error."
-msgstr "Внутренняя ошибка потока данных."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 "Входящие аудио-данные отсутствуют или недействительны, поток AVI будет "
@@ -93,9 +90,6 @@
 msgstr ""
 "Файл содержит слишком много потоков. Будет воспроизведёно только первых %d"
 
-msgid "Internal data flow error."
-msgstr "Внутренняя ошибка потока данных."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -440,6 +434,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Операция невозможна без часов"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Внутренняя ошибка потока данных."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Внутренняя ошибка потока данных."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Устройство «%s» не поддерживает захват видео"
 
diff --git a/po/sk.gmo b/po/sk.gmo
index eda983c..255a034 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 58508b5..f5a8372 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-05-20 12:31+0100\n"
 "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -53,9 +53,6 @@
 msgid "Server sent bad data."
 msgstr "Server odoslal chybné údaje."
 
-msgid "Internal data stream error."
-msgstr "Vnútorná chyba prúdu údajov."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Žiadny alebo chybný vstup zvuku, prúd údajov AVI bude poškodený."
 
@@ -85,9 +82,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Tento súbor obsahuje príliš mnoho prúdov údajov. Prehrávam iba prvý %d"
 
-msgid "Internal data flow error."
-msgstr "Vnútorná chyba toku údajov."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -429,6 +423,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Nemôžem fungovať bez hodín"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Vnútorná chyba prúdu údajov."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Vnútorná chyba toku údajov."
+
 #~ msgid "Could not establish connection to sound server"
 #~ msgstr "Nepodarilo sa nadviazať spojenie so zvukovým serverom"
 
diff --git a/po/sl.gmo b/po/sl.gmo
index e952517..0a394ed 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 9c27c2a..8c56466 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2014-04-09 22:52+0100\n"
 "Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -59,9 +59,6 @@
 msgid "Server sent bad data."
 msgstr "Strežnik je poslal slabe podatke."
 
-msgid "Internal data stream error."
-msgstr "Notranja napaka pretoka podatkov."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Napaka vhodnega zvoka, AVI pretok bo pokvarjen."
 
@@ -90,9 +87,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Datoteka vsebuje več pretokov. Predvajano bo le začetnih %d"
 
-msgid "Internal data flow error."
-msgstr "Notranja napaka pretoka podatkov."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -440,5 +434,11 @@
 msgid "Cannot operate without a clock"
 msgstr "Izvajanje opravil brez ure ni mogoče"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Naprava \"%s\" ne podpira zajemanja videa."
diff --git a/po/sq.gmo b/po/sq.gmo
index 04c50c0..85c42d6 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index b0efbd9..3cd328c 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: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\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"
@@ -55,9 +55,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr ""
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Input audio i gabuar ose mungon, stream AVI mund të jetë i dëmtuar."
 
@@ -86,9 +83,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-msgid "Internal data flow error."
-msgstr ""
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
diff --git a/po/sr.gmo b/po/sr.gmo
index ad6144f..4e635cf 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 81a563b..c2e8706 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-03-05 09:52+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
@@ -54,9 +54,6 @@
 msgid "Server sent bad data."
 msgstr "Сервер је послао лоше податке."
 
-msgid "Internal data stream error."
-msgstr "Унутрашња грешка тока података."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Улазног звука нема или је неисправан, АВИ ток ће бити оштећен."
 
@@ -86,9 +83,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Ова датотека садржи превише токова. Пуштам само први %d"
 
-msgid "Internal data flow error."
-msgstr "Унутрaшња грешка протока података."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -428,5 +422,11 @@
 msgid "Cannot operate without a clock"
 msgstr "Не могу да радим без сата"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Унутрашња грешка тока података."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Унутрaшња грешка протока података."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Уређај „%s“ не подржава видео снимање"
diff --git a/po/sv.gmo b/po/sv.gmo
index 8e271ce..1a84481 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index ded95c6..676b37d 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-20 16:13+0100\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -55,9 +55,6 @@
 msgid "Server sent bad data."
 msgstr "Servern skickade felaktigt data."
 
-msgid "Internal data stream error."
-msgstr "Internt fel i dataström."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Inget eller ogiltigt ingångsljud. AVI-strömmen kommer att skadas."
 
@@ -87,9 +84,6 @@
 msgstr ""
 "Den här filen innehåller för många strömmar. Spelar endast upp de första %d"
 
-msgid "Internal data flow error."
-msgstr "Internt fel i dataflöde."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -437,5 +431,11 @@
 msgid "Cannot operate without a clock"
 msgstr "Kan inte fungera utan en klocka"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Internt fel i dataström."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Internt fel i dataflöde."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Enheten \"%s\" stöder inte videoinfångning."
diff --git a/po/tr.gmo b/po/tr.gmo
index 4f2b0c7..4508878 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 763b231..0241ae8 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2015-01-10 21:07+0100\n"
 "Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -58,9 +58,6 @@
 msgid "Server sent bad data."
 msgstr "Sunucu yetersiz veri gönderdi."
 
-msgid "Internal data stream error."
-msgstr "İç veri akım hatası."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Geçerli bir ses girişi bulunamadı. AVI akışı kesilecek."
 
@@ -89,9 +86,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Bu dosya çok fazla akış içeriyor. Sadece ilki oynatılıyor %d"
 
-msgid "Internal data flow error."
-msgstr "İç veri akış hatası."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -424,6 +418,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Saat olmadan çalışamaz"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "İç veri akım hatası."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "İç veri akış hatası."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Aygıt '%s' video yakalamayı desteklemiyor"
 
diff --git a/po/uk.gmo b/po/uk.gmo
index 72e703f..0d05967 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index b3eb1a9..a7251ca 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-20 17:27+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Сервером надіслано помилкові дані."
 
-msgid "Internal data stream error."
-msgstr "Внутрішня помилка потоку даних."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 "Не вказано або вказано некоректний вхід звукових даних, AVI-потік буде "
@@ -93,9 +90,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Файл містить надто багато потоків. Відтворюються лише перші %d"
 
-msgid "Internal data flow error."
-msgstr "Помилка внутрішнього перенесення даних."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -446,6 +440,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Робота без годинника неможлива"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Внутрішня помилка потоку даних."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Помилка внутрішнього перенесення даних."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Пристрій «%s» не може захоплювати відеодані"
 
diff --git a/po/vi.gmo b/po/vi.gmo
index 1cb1298..7f1b079 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 346d394..17fa315 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-21 07:25+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
 msgid "Server sent bad data."
 msgstr "Máy chủ gửi dữ liệu sai."
 
-msgid "Internal data stream error."
-msgstr "Lỗi luồng dữ liệu nội bộ."
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr ""
 "Chưa có dữ liệu âm thanh nhập, hoặc dữ liệu âm thanh nhập không hợp lệ. Vì "
@@ -90,9 +87,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "Tập tin này chứa quá nhiều luồng nên chỉ phát %d đầu tiên"
 
-msgid "Internal data flow error."
-msgstr "Lỗi luồng dữ liệu nội bộ."
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -439,6 +433,12 @@
 msgid "Cannot operate without a clock"
 msgstr "Không thể thao tác khi không có đồng hồ"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "Lỗi luồng dữ liệu nội bộ."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Lỗi luồng dữ liệu nội bộ."
+
 #~ msgid "Device '%s' does not support video capture"
 #~ msgstr "Thiết bị “%s” không hỗ trợ chức năng quay video"
 
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 3f0aa31..721a92f 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 b4e5112..ae271fa 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2016-02-21 16:52+0800\n"
 "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -53,9 +53,6 @@
 msgid "Server sent bad data."
 msgstr "服务器发送了错误的数据。"
 
-msgid "Internal data stream error."
-msgstr "内部数据流错误。"
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "没有或无效的输入音频,AVI 流将损坏。"
 
@@ -84,9 +81,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr "此文件包含了太多的流。只播放前面 %d 个"
 
-msgid "Internal data flow error."
-msgstr "内部数据流错误。"
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -409,6 +403,12 @@
 msgid "Cannot operate without a clock"
 msgstr "没有时钟的话无法操作"
 
+#~ msgid "Internal data stream error."
+#~ msgstr "内部数据流错误。"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "内部数据流错误。"
+
 #~ msgid "Failed to query sound server capabilities"
 #~ msgstr "查寻音频服务器的服务失败"
 
diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo
index b2c2f0e..a5a37ee 100644
--- a/po/zh_HK.gmo
+++ b/po/zh_HK.gmo
Binary files differ
diff --git a/po/zh_HK.po b/po/zh_HK.po
index f3eda69..537fe66 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2006-08-29 01:08+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
@@ -51,9 +51,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "內部資料串流發生錯誤。"
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "沒有任何輸入的音效資料或者資料無效,表示 AVI 串流出現錯誤。"
 
@@ -82,10 +79,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-#, fuzzy
-msgid "Internal data flow error."
-msgstr "內部資料串流發生錯誤。"
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -407,6 +400,13 @@
 msgid "Cannot operate without a clock"
 msgstr ""
 
+#~ msgid "Internal data stream error."
+#~ msgstr "內部資料串流發生錯誤。"
+
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "內部資料串流發生錯誤。"
+
 #~ msgid ""
 #~ "Could not open audio device for mixer control handling. This version of "
 #~ "the Open Sound System is not supported by this element."
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index e87405a..b442619 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 64ac7af..5eaecb6 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
 "PO-Revision-Date: 2006-08-29 01:08+0800\n"
 "Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -51,9 +51,6 @@
 msgid "Server sent bad data."
 msgstr ""
 
-msgid "Internal data stream error."
-msgstr "內部資料串流發生錯誤。"
-
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "沒有任何輸入的音效資料或者資料無效,表示 AVI 串流出現錯誤。"
 
@@ -82,10 +79,6 @@
 msgid "This file contains too many streams. Only playing first %d"
 msgstr ""
 
-#, fuzzy
-msgid "Internal data flow error."
-msgstr "內部資料串流發生錯誤。"
-
 msgid ""
 "No supported stream was found. You might need to install a GStreamer RTSP "
 "extension plugin for Real media streams."
@@ -407,6 +400,13 @@
 msgid "Cannot operate without a clock"
 msgstr ""
 
+#~ msgid "Internal data stream error."
+#~ msgstr "內部資料串流發生錯誤。"
+
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "內部資料串流發生錯誤。"
+
 #~ msgid ""
 #~ "Could not open audio device for mixer control handling. This version of "
 #~ "the Open Sound System is not supported by this element."
diff --git a/sys/Makefile.in b/sys/Makefile.in
index 882d2c7..b119e1b 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -108,6 +108,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -326,6 +327,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -432,6 +434,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -499,6 +504,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index c143c56..9ceebfe 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/directsound/gstdirectsoundsink.c b/sys/directsound/gstdirectsoundsink.c
index 0f299ae..573e2b8 100644
--- a/sys/directsound/gstdirectsoundsink.c
+++ b/sys/directsound/gstdirectsoundsink.c
@@ -109,6 +109,8 @@
 static gboolean gst_directsound_sink_is_spdif_format (GstAudioRingBufferSpec *
     spec);
 
+static gchar *gst_hres_to_string (HRESULT hRes);
+
 static GstStaticPadTemplate directsoundsink_sink_factory =
     GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
@@ -442,10 +444,12 @@
 
   /* create and initialize a DirecSound object */
   if (FAILED (hRes = DirectSoundCreate (lpGuid, &dsoundsink->pDS, NULL))) {
+    gchar *error_text = gst_hres_to_string (hRes);
     GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_READ,
         ("gst_directsound_sink_open: DirectSoundCreate: %s",
-            DXGetErrorString9 (hRes)), (NULL));
+            error_text), (NULL));
     g_free (lpGuid);
+    g_free (error_text);
     return FALSE;
   }
 
@@ -453,9 +457,11 @@
 
   if (FAILED (hRes = IDirectSound_SetCooperativeLevel (dsoundsink->pDS,
               GetDesktopWindow (), DSSCL_PRIORITY))) {
+    gchar *error_text = gst_hres_to_string (hRes);
     GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_READ,
         ("gst_directsound_sink_open: IDirectSound_SetCooperativeLevel: %s",
-            DXGetErrorString9 (hRes)), (NULL));
+            error_text), (NULL));
+    g_free (error_text);
     return FALSE;
   }
 
@@ -548,9 +554,11 @@
   hRes = IDirectSound_CreateSoundBuffer (dsoundsink->pDS, &descSecondary,
       &dsoundsink->pDSBSecondary, NULL);
   if (FAILED (hRes)) {
+    gchar *error_text = gst_hres_to_string (hRes);
     GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_READ,
         ("gst_directsound_sink_prepare: IDirectSound_CreateSoundBuffer: %s",
-            DXGetErrorString9 (hRes)), (NULL));
+            error_text), (NULL));
+    g_free (error_text);
     return FALSE;
   }
 
@@ -649,12 +657,19 @@
           && (dwStatus & DSBSTATUS_PLAYING))
         goto calculate_freesize;
       else {
+        gchar *err1, *err2;
+
         dsoundsink->first_buffer_after_reset = FALSE;
         GST_DSOUND_UNLOCK (dsoundsink);
+
+        err1 = gst_hres_to_string (hRes);
+        err2 = gst_hres_to_string (hRes2);
         GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_WRITE,
-            ("gst_directsound_sink_write: IDirectSoundBuffer_GetStatus %s, IDirectSoundBuffer_GetCurrentPosition: %s, dwStatus: %lu",
-                DXGetErrorString9 (hRes2), DXGetErrorString9 (hRes), dwStatus),
-            (NULL));
+            ("gst_directsound_sink_write: IDirectSoundBuffer_GetStatus %s, "
+                "IDirectSoundBuffer_GetCurrentPosition: %s, dwStatus: %lu",
+                err2, err1, dwStatus), (NULL));
+        g_free (err1);
+        g_free (err2);
         return -1;
       }
     }
@@ -819,9 +834,10 @@
   hRes = IDirectSound_CreateSoundBuffer (dsoundsink->pDS, &descSecondary,
       &tmpBuffer, NULL);
   if (FAILED (hRes)) {
+    gchar *error_text = gst_hres_to_string (hRes);
     GST_INFO_OBJECT (dsoundsink, "AC3 passthrough not supported "
-        "(IDirectSound_CreateSoundBuffer returned: %s)\n",
-        DXGetErrorString9 (hRes));
+        "(IDirectSound_CreateSoundBuffer returned: %s)\n", error_text);
+    g_free (error_text);
     tmp = gst_caps_new_empty_simple ("audio/x-ac3");
     tmp2 = gst_caps_subtract (caps, tmp);
     gst_caps_unref (tmp);
@@ -836,9 +852,10 @@
     GST_INFO_OBJECT (dsoundsink, "AC3 passthrough supported");
     hRes = IDirectSoundBuffer_Release (tmpBuffer);
     if (FAILED (hRes)) {
+      gchar *error_text = gst_hres_to_string (hRes);
       GST_DEBUG_OBJECT (dsoundsink,
-          "(IDirectSoundBuffer_Release returned: %s)\n",
-          DXGetErrorString9 (hRes));
+          "(IDirectSoundBuffer_Release returned: %s)\n", error_text);
+      g_free (error_text);
     }
   }
 #else
@@ -967,3 +984,28 @@
   g_free (dsoundsink->device_id);
   dsoundsink->device_id = g_strdup (device_id);
 }
+
+/* Converts a HRESULT error to a text string
+ * LPTSTR is either a */
+static gchar *
+gst_hres_to_string (HRESULT hRes)
+{
+  DWORD flags;
+  gchar *ret_text;
+  LPTSTR error_text = NULL;
+
+  flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER
+      | FORMAT_MESSAGE_IGNORE_INSERTS;
+  FormatMessage (flags, NULL, hRes, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+      (LPTSTR) & error_text, 0, NULL);
+
+#ifdef UNICODE
+  /* If UNICODE is defined, LPTSTR is LPWSTR which is UTF-16 */
+  ret_text = g_utf16_to_utf8 (error_text, 0, NULL, NULL, NULL);
+#else
+  ret_text = g_strdup (error_text);
+#endif
+
+  LocalFree (error_text);
+  return ret_text;
+}
diff --git a/sys/directsound/gstdirectsoundsink.h b/sys/directsound/gstdirectsoundsink.h
index c9f5879..51f7648 100644
--- a/sys/directsound/gstdirectsoundsink.h
+++ b/sys/directsound/gstdirectsoundsink.h
@@ -34,7 +34,6 @@
 #include <gst/audio/gstaudiosink.h>
 
 #include <windows.h>
-#include <dxerr9.h>
 #include <dsound.h>
 #include <mmreg.h> 
 #include <ks.h> 
diff --git a/sys/oss/Makefile.in b/sys/oss/Makefile.in
index a6632bc..1a107b6 100644
--- a/sys/oss/Makefile.in
+++ b/sys/oss/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/oss4/Makefile.in b/sys/oss4/Makefile.in
index 74cacec..2b36cac 100644
--- a/sys/oss4/Makefile.in
+++ b/sys/oss4/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/osxaudio/Makefile.in b/sys/osxaudio/Makefile.in
index 0bacb76..7b93512 100644
--- a/sys/osxaudio/Makefile.in
+++ b/sys/osxaudio/Makefile.in
@@ -101,6 +101,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -355,6 +356,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -461,6 +463,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -528,6 +533,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/osxvideo/Makefile.am b/sys/osxvideo/Makefile.am
index e908695..0d92a87 100644
--- a/sys/osxvideo/Makefile.am
+++ b/sys/osxvideo/Makefile.am
@@ -12,7 +12,7 @@
 	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-$(GST_API_VERSION)
 
-libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,QuickTime -Wl,-framework -Wl,OpenGL
+libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,OpenGL
 libgstosxvideosink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) --tag=CC
 
 noinst_HEADERS = osxvideosink.h cocoawindow.h
diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in
index f020480..71b151b 100644
--- a/sys/osxvideo/Makefile.in
+++ b/sys/osxvideo/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -580,7 +586,7 @@
 	$(GST_PLUGINS_BASE_LIBS) \
 	-lgstvideo-$(GST_API_VERSION)
 
-libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,QuickTime -Wl,-framework -Wl,OpenGL
+libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,OpenGL
 libgstosxvideosink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) --tag=CC
 noinst_HEADERS = osxvideosink.h cocoawindow.h
 all: all-am
diff --git a/sys/osxvideo/cocoawindow.h b/sys/osxvideo/cocoawindow.h
index 9355d3c..816f1bb 100644
--- a/sys/osxvideo/cocoawindow.h
+++ b/sys/osxvideo/cocoawindow.h
@@ -27,7 +27,6 @@
  */
 
 #import <Cocoa/Cocoa.h>
-#import <QuickTime/QuickTime.h>
 #import <glib.h>
 #import <gst/video/navigation.h>
 
diff --git a/sys/osxvideo/osxvideosink.h b/sys/osxvideo/osxvideosink.h
index 2bf5d25..d467b0e 100644
--- a/sys/osxvideo/osxvideosink.h
+++ b/sys/osxvideo/osxvideosink.h
@@ -35,7 +35,6 @@
 #include <objc/runtime.h>
 #include <Cocoa/Cocoa.h>
 
-#include <QuickTime/QuickTime.h>
 #import "cocoawindow.h"
 
 GST_DEBUG_CATEGORY_EXTERN (gst_debug_osx_video_sink);
diff --git a/sys/sunaudio/Makefile.in b/sys/sunaudio/Makefile.in
index 7c9c124..305ec72 100644
--- a/sys/sunaudio/Makefile.in
+++ b/sys/sunaudio/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -347,6 +348,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -453,6 +455,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -520,6 +525,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/v4l2/Makefile.in b/sys/v4l2/Makefile.in
index efe2bff..47afae7 100644
--- a/sys/v4l2/Makefile.in
+++ b/sys/v4l2/Makefile.in
@@ -107,6 +107,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -370,6 +371,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -476,6 +478,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -543,6 +548,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c
index 83fcc98..b5e826a 100644
--- a/sys/v4l2/gstv4l2.c
+++ b/sys/v4l2/gstv4l2.c
@@ -119,6 +119,7 @@
   gint video_fd = -1;
   struct v4l2_capability vcap;
   gboolean ret = TRUE;
+  guint32 device_caps;
 
   it = gst_v4l2_iterator_new ();
 
@@ -143,12 +144,16 @@
       continue;
     }
 
-    if (!((vcap.capabilities & (V4L2_CAP_VIDEO_M2M |
-                    V4L2_CAP_VIDEO_M2M_MPLANE)) ||
+    if (vcap.capabilities & V4L2_CAP_DEVICE_CAPS)
+      device_caps = vcap.device_caps;
+    else
+      device_caps = vcap.capabilities;
+
+    if (!((device_caps & (V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE)) ||
             /* But legacy driver may expose both CAPTURE and OUTPUT */
-            ((vcap.capabilities &
+            ((device_caps &
                     (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) &&
-                (vcap.capabilities &
+                (device_caps &
                     (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)))))
       continue;
 
diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
index 3184bd8..bfcfbaa 100644
--- a/sys/v4l2/gstv4l2bufferpool.c
+++ b/sys/v4l2/gstv4l2bufferpool.c
@@ -716,7 +716,7 @@
        * poll before that will always fail. Doing an empty read, forces the
        * queue to be initialized now. We only do this if we have a streaming
        * driver. */
-      if (obj->vcap.capabilities & V4L2_CAP_STREAMING)
+      if (obj->device_caps & V4L2_CAP_STREAMING)
         v4l2_read (obj->video_fd, NULL, 0);
 #endif
       break;
diff --git a/sys/v4l2/gstv4l2deviceprovider.c b/sys/v4l2/gstv4l2deviceprovider.c
index d521838..61ca135 100644
--- a/sys/v4l2/gstv4l2deviceprovider.c
+++ b/sys/v4l2/gstv4l2deviceprovider.c
@@ -49,7 +49,7 @@
 static void gst_v4l2_device_provider_finalize (GObject * object);
 static GList *gst_v4l2_device_provider_probe (GstDeviceProvider * provider);
 
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
 static gboolean gst_v4l2_device_provider_start (GstDeviceProvider * provider);
 static void gst_v4l2_device_provider_stop (GstDeviceProvider * provider);
 #endif
@@ -63,7 +63,7 @@
 
   dm_class->probe = gst_v4l2_device_provider_probe;
 
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
   dm_class->start = gst_v4l2_device_provider_start;
   dm_class->stop = gst_v4l2_device_provider_stop;
 #endif
@@ -79,7 +79,7 @@
 static void
 gst_v4l2_device_provider_init (GstV4l2DeviceProvider * provider)
 {
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
   g_cond_init (&provider->started_cond);
 #endif
 }
@@ -87,7 +87,7 @@
 static void
 gst_v4l2_device_provider_finalize (GObject * object)
 {
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
   GstV4l2DeviceProvider *provider = GST_V4L2_DEVICE_PROVIDER (object);
 
   g_cond_clear (&provider->started_cond);
@@ -136,22 +136,30 @@
   gst_structure_set (props, "v4l2.device.device_caps", G_TYPE_UINT,
       v4l2obj->vcap.device_caps, NULL);
 
-  if (v4l2obj->vcap.capabilities & V4L2_CAP_VIDEO_CAPTURE)
+  if (v4l2obj->device_caps &
+      (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE))
     type = GST_V4L2_DEVICE_TYPE_SOURCE;
 
-  if (v4l2obj->vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT) {
-    /* Morph it in case our initial guess was wrong */
-    v4l2obj->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-
-    if (type == GST_V4L2_DEVICE_TYPE_INVALID)
-      type = GST_V4L2_DEVICE_TYPE_SINK;
-    else
-      /* We ignore M2M devices that are both capture and output for now
-       * The provider is not for them
-       */
+  if (v4l2obj->device_caps &
+      (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)) {
+    /* We ignore M2M devices that are both capture and output for now
+     * The provider is not for them */
+    if (type != GST_V4L2_DEVICE_TYPE_INVALID)
       goto close;
+
+    type = GST_V4L2_DEVICE_TYPE_SINK;
+
+    /* We have opened as a capture as we didn't know, now that know,
+     * let's fixed it */
+    if (v4l2obj->device_caps & V4L2_CAP_VIDEO_OUTPUT_MPLANE)
+      v4l2obj->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+    else
+      v4l2obj->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
   }
 
+  if (type == GST_V4L2_DEVICE_TYPE_INVALID)
+    goto close;
+
   caps = gst_v4l2_object_get_caps (v4l2obj, NULL);
 
   if (caps == NULL)
@@ -211,7 +219,7 @@
   return devices;
 }
 
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
 
 static GstDevice *
 gst_v4l2_device_provider_device_from_udev (GstV4l2DeviceProvider * provider,
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index d4acbf9..e7637d2 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -700,17 +700,17 @@
       guint flags = 0;
 
       if (GST_V4L2_IS_OPEN (v4l2object)) {
-        flags |= v4l2object->vcap.capabilities &
+        flags |= v4l2object->device_caps &
             (V4L2_CAP_VIDEO_CAPTURE |
             V4L2_CAP_VIDEO_OUTPUT |
             V4L2_CAP_VIDEO_OVERLAY |
             V4L2_CAP_VBI_CAPTURE |
             V4L2_CAP_VBI_OUTPUT | V4L2_CAP_TUNER | V4L2_CAP_AUDIO);
 
-        if (v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_CAPTURE_MPLANE)
+        if (v4l2object->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE)
           flags |= V4L2_CAP_VIDEO_CAPTURE;
 
-        if (v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT_MPLANE)
+        if (v4l2object->device_caps & V4L2_CAP_VIDEO_OUTPUT_MPLANE)
           flags |= V4L2_CAP_VIDEO_OUTPUT;
       }
       g_value_set_flags (value, flags);
@@ -873,6 +873,9 @@
 
   gst_caps_replace (&v4l2object->probed_caps, NULL);
 
+  /* reset our copy of the device caps */
+  v4l2object->device_caps = 0;
+
   if (v4l2object->formats) {
     gst_v4l2_object_clear_format_list (v4l2object);
   }
@@ -1156,9 +1159,17 @@
   /* ERRORS */
 failed:
   {
-    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
-        (_("Failed to enumerate possible video formats device '%s' can work with"), v4l2object->videodev), ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)", n, v4l2object->videodev, errno, g_strerror (errno)));
     g_free (format);
+
+    if (!GST_IS_ELEMENT (v4l2object->element))
+      return FALSE;
+
+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
+        (_("Failed to enumerate possible video formats device '%s' can work "
+                "with"), v4l2object->videodev),
+        ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)",
+            n, v4l2object->videodev, errno, g_strerror (errno)));
+
     return FALSE;
   }
 }
@@ -2824,13 +2835,13 @@
   /* find transport */
   mode = v4l2object->req_mode;
 
-  if (v4l2object->vcap.capabilities & V4L2_CAP_READWRITE) {
+  if (v4l2object->device_caps & V4L2_CAP_READWRITE) {
     if (v4l2object->req_mode == GST_V4L2_IO_AUTO)
       mode = GST_V4L2_IO_RW;
   } else if (v4l2object->req_mode == GST_V4L2_IO_RW)
     goto method_not_supported;
 
-  if (v4l2object->vcap.capabilities & V4L2_CAP_STREAMING) {
+  if (v4l2object->device_caps & V4L2_CAP_STREAMING) {
     if (v4l2object->req_mode == GST_V4L2_IO_AUTO)
       mode = GST_V4L2_IO_MMAP;
   } else if (v4l2object->req_mode == GST_V4L2_IO_MMAP)
diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
index 7117d43..5fff161 100644
--- a/sys/v4l2/gstv4l2object.h
+++ b/sys/v4l2/gstv4l2object.h
@@ -133,6 +133,8 @@
 
   /* the video device's capabilities */
   struct v4l2_capability vcap;
+  /* opened device specific capabilities */
+  guint32 device_caps;
 
   /* the video device's window properties */
   struct v4l2_window vwin;
diff --git a/sys/v4l2/gstv4l2radio.c b/sys/v4l2/gstv4l2radio.c
index 7a6463c..5d74e7e 100644
--- a/sys/v4l2/gstv4l2radio.c
+++ b/sys/v4l2/gstv4l2radio.c
@@ -90,7 +90,12 @@
   if (res < 0)
     goto caps_failed;
 
-  if (!(vc.capabilities & V4L2_CAP_TUNER))
+  if (vc.capabilities & V4L2_CAP_DEVICE_CAPS)
+    v4l2object->device_caps = vc.device_caps;
+  else
+    v4l2object->device_caps = vc.capabilities;
+
+  if (!(v4l2object->device_caps & V4L2_CAP_TUNER))
     goto not_a_tuner;
 
   /* getting audio input */
diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c
index ae4a3c2..b5f34eb 100644
--- a/sys/v4l2/gstv4l2sink.c
+++ b/sys/v4l2/gstv4l2sink.c
@@ -250,10 +250,10 @@
     struct v4l2_format format;
 
     memset (&format, 0x00, sizeof (struct v4l2_format));
-    if ( v4l2sink->v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT_OVERLAY )
-		format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY;
-	else
-		format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
+    if (v4l2sink->v4l2object->device_caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
+      format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY;
+    else
+      format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
 
     if (v4l2_ioctl (fd, VIDIOC_G_FMT, &format) < 0) {
       GST_WARNING_OBJECT (v4l2sink, "VIDIOC_G_FMT failed");
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
index a6d34b1..3b722b2 100644
--- a/sys/v4l2/gstv4l2src.c
+++ b/sys/v4l2/gstv4l2src.c
@@ -308,27 +308,13 @@
   peercaps = gst_pad_peer_query_caps (GST_BASE_SRC_PAD (basesrc), NULL);
   GST_DEBUG_OBJECT (basesrc, "caps of peer: %" GST_PTR_FORMAT, peercaps);
   LOG_CAPS (basesrc, peercaps);
+
   if (peercaps && !gst_caps_is_any (peercaps)) {
     GstCaps *icaps = NULL;
-    int i;
 
     /* Prefer the first caps we are compatible with that the peer proposed */
-    for (i = 0; i < gst_caps_get_size (peercaps); i++) {
-      /* get intersection */
-      GstCaps *ipcaps = gst_caps_copy_nth (peercaps, i);
-
-      GST_DEBUG_OBJECT (basesrc, "peer: %" GST_PTR_FORMAT, ipcaps);
-      LOG_CAPS (basesrc, ipcaps);
-
-      icaps = gst_caps_intersect (thiscaps, ipcaps);
-      gst_caps_unref (ipcaps);
-
-      if (!gst_caps_is_empty (icaps))
-        break;
-
-      gst_caps_unref (icaps);
-      icaps = NULL;
-    }
+    icaps = gst_caps_intersect_full (peercaps, thiscaps,
+        GST_CAPS_INTERSECT_FIRST);
 
     GST_DEBUG_OBJECT (basesrc, "intersect: %" GST_PTR_FORMAT, icaps);
     LOG_CAPS (basesrc, icaps);
@@ -343,6 +329,7 @@
 
         if (gst_structure_get_int (s, "width", &twidth)
             && gst_structure_get_int (s, "height", &theight)) {
+          int i;
 
           /* Walk the structure backwards to get the first entry of the
            * smallest resolution bigger (or equal to) the preferred resolution)
diff --git a/sys/v4l2/v4l2-utils.c b/sys/v4l2/v4l2-utils.c
index 73506b9..260c5df 100644
--- a/sys/v4l2/v4l2-utils.c
+++ b/sys/v4l2/v4l2-utils.c
@@ -29,7 +29,7 @@
 /* Common device iterator */
 /**************************/
 
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
 #include <gudev/gudev.h>
 
 struct _GstV4l2GUdevIterator
diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
index bfb6557..23581ff 100644
--- a/sys/v4l2/v4l2_calls.c
+++ b/sys/v4l2/v4l2_calls.c
@@ -74,11 +74,16 @@
   if (v4l2_ioctl (v4l2object->video_fd, VIDIOC_QUERYCAP, &v4l2object->vcap) < 0)
     goto cap_failed;
 
+  if (v4l2object->vcap.capabilities & V4L2_CAP_DEVICE_CAPS)
+    v4l2object->device_caps = v4l2object->vcap.device_caps;
+  else
+    v4l2object->device_caps = v4l2object->vcap.capabilities;
+
   GST_LOG_OBJECT (e, "driver:      '%s'", v4l2object->vcap.driver);
   GST_LOG_OBJECT (e, "card:        '%s'", v4l2object->vcap.card);
   GST_LOG_OBJECT (e, "bus_info:    '%s'", v4l2object->vcap.bus_info);
   GST_LOG_OBJECT (e, "version:     %08x", v4l2object->vcap.version);
-  GST_LOG_OBJECT (e, "capabilites: %08x", v4l2object->vcap.capabilities);
+  GST_LOG_OBJECT (e, "capabilites: %08x", v4l2object->device_caps);
 
   return TRUE;
 
@@ -484,16 +489,17 @@
    * in a contiguous manner. In this case the first v4l2 plane
    * contains all the gst planes.
    */
-#define CHECK_CAPS (V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_VIDEO_M2M_MPLANE)
   switch (v4l2object->type) {
     case V4L2_BUF_TYPE_VIDEO_OUTPUT:
-      if (v4l2object->vcap.capabilities & CHECK_CAPS) {
+      if (v4l2object->device_caps &
+          (V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_VIDEO_M2M_MPLANE)) {
         GST_DEBUG ("adjust type to multi-planar output");
         v4l2object->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
       }
       break;
     case V4L2_BUF_TYPE_VIDEO_CAPTURE:
-      if (v4l2object->vcap.capabilities & CHECK_CAPS) {
+      if (v4l2object->device_caps &
+          (V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_M2M_MPLANE)) {
         GST_DEBUG ("adjust type to multi-planar capture");
         v4l2object->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
       }
@@ -501,7 +507,6 @@
     default:
       break;
   }
-#undef CHECK_CAPS
 }
 
 /******************************************************
@@ -556,23 +561,23 @@
 
   /* do we need to be a capture device? */
   if (GST_IS_V4L2SRC (v4l2object->element) &&
-      !(v4l2object->vcap.capabilities & (V4L2_CAP_VIDEO_CAPTURE |
+      !(v4l2object->device_caps & (V4L2_CAP_VIDEO_CAPTURE |
               V4L2_CAP_VIDEO_CAPTURE_MPLANE)))
     goto not_capture;
 
   if (GST_IS_V4L2SINK (v4l2object->element) &&
-      !(v4l2object->vcap.capabilities & (V4L2_CAP_VIDEO_OUTPUT |
+      !(v4l2object->device_caps & (V4L2_CAP_VIDEO_OUTPUT |
               V4L2_CAP_VIDEO_OUTPUT_MPLANE)))
     goto not_output;
 
   if (GST_IS_V4L2_VIDEO_DEC (v4l2object->element) &&
       /* Today's M2M device only expose M2M */
-      !((v4l2object->vcap.capabilities & (V4L2_CAP_VIDEO_M2M |
+      !((v4l2object->device_caps & (V4L2_CAP_VIDEO_M2M |
                   V4L2_CAP_VIDEO_M2M_MPLANE)) ||
           /* But legacy driver may expose both CAPTURE and OUTPUT */
-          ((v4l2object->vcap.capabilities &
+          ((v4l2object->device_caps &
                   (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) &&
-              (v4l2object->vcap.capabilities &
+              (v4l2object->device_caps &
                   (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)))))
     goto not_m2m;
 
@@ -625,7 +630,7 @@
     GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, NOT_FOUND,
         (_("Device '%s' is not a capture device."),
             v4l2object->videodev),
-        ("Capabilities: 0x%x", v4l2object->vcap.capabilities));
+        ("Capabilities: 0x%x", v4l2object->device_caps));
     goto error;
   }
 not_output:
@@ -633,7 +638,7 @@
     GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, NOT_FOUND,
         (_("Device '%s' is not a output device."),
             v4l2object->videodev),
-        ("Capabilities: 0x%x", v4l2object->vcap.capabilities));
+        ("Capabilities: 0x%x", v4l2object->device_caps));
     goto error;
   }
 not_m2m:
@@ -641,7 +646,7 @@
     GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, NOT_FOUND,
         (_("Device '%s' is not a M2M device."),
             v4l2object->videodev),
-        ("Capabilities: 0x%x", v4l2object->vcap.capabilities));
+        ("Capabilities: 0x%x", v4l2object->device_caps));
     goto error;
   }
 error:
@@ -670,6 +675,7 @@
   GST_V4L2_CHECK_NOT_ACTIVE (v4l2object);
 
   v4l2object->vcap = other->vcap;
+  v4l2object->device_caps = other->device_caps;
   gst_v4l2_adjust_buf_type (v4l2object);
 
   v4l2object->video_fd = v4l2_dup (other->video_fd);
@@ -1034,7 +1040,7 @@
 
   /* ERRORS */
 input_failed:
-  if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+  if (v4l2object->device_caps & V4L2_CAP_TUNER) {
     /* only give a warning message if driver actually claims to have tuner
      * support
      */
@@ -1059,7 +1065,7 @@
 
   /* ERRORS */
 input_failed:
-  if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+  if (v4l2object->device_caps & V4L2_CAP_TUNER) {
     /* only give a warning message if driver actually claims to have tuner
      * support
      */
@@ -1091,7 +1097,7 @@
 
   /* ERRORS */
 output_failed:
-  if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+  if (v4l2object->device_caps & V4L2_CAP_TUNER) {
     /* only give a warning message if driver actually claims to have tuner
      * support
      */
@@ -1116,7 +1122,7 @@
 
   /* ERRORS */
 output_failed:
-  if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+  if (v4l2object->device_caps & V4L2_CAP_TUNER) {
     /* only give a warning message if driver actually claims to have tuner
      * support
      */
diff --git a/sys/waveform/Makefile.in b/sys/waveform/Makefile.in
index 17d9922..5a6e9d9 100644
--- a/sys/waveform/Makefile.in
+++ b/sys/waveform/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
index ff70e60..78977c5 100644
--- a/sys/ximage/Makefile.in
+++ b/sys/ximage/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index f313808..2e05f3a 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -97,6 +97,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -314,6 +315,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -420,6 +422,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -487,6 +492,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index e6f146c..aa40c70 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -221,7 +221,9 @@
 if USE_PLUGIN_RTP
 check_rtp = \
 	elements/rtp-payloading \
-	elements/rtph263
+	elements/rtph261 \
+	elements/rtph263 \
+	elements/rtpvp9
 else
 check_rtp =
 endif
@@ -307,7 +309,7 @@
 endif
 
 if USE_VPX
-check_vpx=elements/vp8enc elements/vp8dec
+check_vpx=elements/vp8enc elements/vp8dec elements/vp9enc
 else
 check_vpx=
 endif
@@ -401,7 +403,7 @@
 AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) \
 	$(GST_OPTION_CFLAGS) $(GST_CFLAGS) -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
 	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
-	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS $(PTHREAD_CFLAGS)
 LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS)
 
 # valgrind testing
@@ -531,6 +533,9 @@
              $(GST_BASE_LIBS) $(GST_LIBS) $(GST_CHECK_LIBS) $(LDADD)
 elements_rtpbin_buffer_list_SOURCES = elements/rtpbin_buffer_list.c
 
+elements_rtph261_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtph261_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+
 elements_rtph263_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_rtph263_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 
@@ -563,10 +568,10 @@
 elements_rtprtx_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
 
 elements_rtpsession_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
 
 elements_rtpcollision_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
 
 elements_rtpaux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 elements_rtpaux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
@@ -584,6 +589,9 @@
 pipelines_flacdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 pipelines_flacdec_LDADD  = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
 
+elements_vp9enc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
+elements_vp9enc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(LDADD)
+
 pipelines_wavenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 pipelines_wavenc_LDADD  = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
 
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index f64999f..9dcc99d 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -115,6 +115,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -223,7 +224,9 @@
 @USE_PLUGIN_REPLAYGAIN_TRUE@	elements/rglimiter$(EXEEXT) \
 @USE_PLUGIN_REPLAYGAIN_TRUE@	elements/rgvolume$(EXEEXT)
 @USE_PLUGIN_RTP_TRUE@am__EXEEXT_25 = elements/rtp-payloading$(EXEEXT) \
-@USE_PLUGIN_RTP_TRUE@	elements/rtph263$(EXEEXT)
+@USE_PLUGIN_RTP_TRUE@	elements/rtph261$(EXEEXT) \
+@USE_PLUGIN_RTP_TRUE@	elements/rtph263$(EXEEXT) \
+@USE_PLUGIN_RTP_TRUE@	elements/rtpvp9$(EXEEXT)
 @USE_PLUGIN_RTPMANAGER_TRUE@am__EXEEXT_26 = elements/rtpaux$(EXEEXT) \
 @USE_PLUGIN_RTPMANAGER_TRUE@	elements/rtpbin$(EXEEXT) \
 @USE_PLUGIN_RTPMANAGER_TRUE@	elements/rtpbin_buffer_list$(EXEEXT) \
@@ -250,7 +253,8 @@
 @USE_PLUGIN_VIDEOMIXER_TRUE@am__EXEEXT_36 =  \
 @USE_PLUGIN_VIDEOMIXER_TRUE@	elements/videomixer$(EXEEXT)
 @USE_VPX_TRUE@am__EXEEXT_37 = elements/vp8enc$(EXEEXT) \
-@USE_VPX_TRUE@	elements/vp8dec$(EXEEXT)
+@USE_VPX_TRUE@	elements/vp8dec$(EXEEXT) \
+@USE_VPX_TRUE@	elements/vp9enc$(EXEEXT)
 @USE_PLUGIN_WAVENC_TRUE@am__EXEEXT_38 = pipelines/wavenc$(EXEEXT)
 @USE_WAVPACK_TRUE@am__EXEEXT_39 = elements/wavpackdec$(EXEEXT) \
 @USE_WAVPACK_TRUE@	elements/wavpackenc$(EXEEXT) \
@@ -646,11 +650,21 @@
 elements_rtpcollision_OBJECTS =  \
 	elements/elements_rtpcollision-rtpcollision.$(OBJEXT)
 elements_rtpcollision_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
 elements_rtpcollision_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_rtpcollision_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+elements_rtph261_SOURCES = elements/rtph261.c
+elements_rtph261_OBJECTS =  \
+	elements/elements_rtph261-rtph261.$(OBJEXT)
+elements_rtph261_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_rtph261_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_rtph261_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 elements_rtph263_SOURCES = elements/rtph263.c
 elements_rtph263_OBJECTS =  \
 	elements/elements_rtph263-rtph263.$(OBJEXT)
@@ -689,11 +703,16 @@
 elements_rtpsession_OBJECTS =  \
 	elements/elements_rtpsession-rtpsession.$(OBJEXT)
 elements_rtpsession_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
 elements_rtpsession_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_rtpsession_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+elements_rtpvp9_SOURCES = elements/rtpvp9.c
+elements_rtpvp9_OBJECTS = elements/rtpvp9.$(OBJEXT)
+elements_rtpvp9_LDADD = $(LDADD)
+elements_rtpvp9_DEPENDENCIES = $(am__DEPENDENCIES_1)
 elements_shapewipe_SOURCES = elements/shapewipe.c
 elements_shapewipe_OBJECTS = elements/shapewipe.$(OBJEXT)
 elements_shapewipe_LDADD = $(LDADD)
@@ -780,6 +799,14 @@
 elements_vp8enc_OBJECTS = elements/vp8enc.$(OBJEXT)
 elements_vp8enc_LDADD = $(LDADD)
 elements_vp8enc_DEPENDENCIES = $(am__DEPENDENCIES_1)
+elements_vp9enc_SOURCES = elements/vp9enc.c
+elements_vp9enc_OBJECTS = elements/elements_vp9enc-vp9enc.$(OBJEXT)
+elements_vp9enc_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+elements_vp9enc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_vp9enc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 elements_wavpackdec_SOURCES = elements/wavpackdec.c
 elements_wavpackdec_OBJECTS = elements/wavpackdec.$(OBJEXT)
 elements_wavpackdec_LDADD = $(LDADD)
@@ -925,16 +952,17 @@
 	elements/rglimiter.c elements/rgvolume.c \
 	elements/rtp-payloading.c elements/rtpaux.c elements/rtpbin.c \
 	$(elements_rtpbin_buffer_list_SOURCES) elements/rtpcollision.c \
-	elements/rtph263.c elements/rtpjitterbuffer.c \
-	elements/rtpmux.c elements/rtprtx.c elements/rtpsession.c \
-	elements/shapewipe.c elements/souphttpsrc.c \
-	elements/spectrum.c elements/splitmux.c elements/sunaudio.c \
-	elements/udpsink.c elements/udpsrc.c elements/videobox.c \
-	elements/videocrop.c elements/videofilter.c \
-	elements/videomixer.c elements/vp8dec.c elements/vp8enc.c \
-	elements/wavpackdec.c elements/wavpackenc.c \
-	elements/wavpackparse.c elements/wavparse.c elements/y4menc.c \
-	generic/states.c $(nodist_orc_deinterlace_SOURCES) \
+	elements/rtph261.c elements/rtph263.c \
+	elements/rtpjitterbuffer.c elements/rtpmux.c elements/rtprtx.c \
+	elements/rtpsession.c elements/rtpvp9.c elements/shapewipe.c \
+	elements/souphttpsrc.c elements/spectrum.c elements/splitmux.c \
+	elements/sunaudio.c elements/udpsink.c elements/udpsrc.c \
+	elements/videobox.c elements/videocrop.c \
+	elements/videofilter.c elements/videomixer.c elements/vp8dec.c \
+	elements/vp8enc.c elements/vp9enc.c elements/wavpackdec.c \
+	elements/wavpackenc.c elements/wavpackparse.c \
+	elements/wavparse.c elements/y4menc.c generic/states.c \
+	$(nodist_orc_deinterlace_SOURCES) \
 	$(nodist_orc_videobox_SOURCES) \
 	$(nodist_orc_videomixer_SOURCES) pipelines/effectv.c \
 	pipelines/flacdec.c pipelines/simple-launch-lines.c \
@@ -964,16 +992,17 @@
 	elements/rglimiter.c elements/rgvolume.c \
 	elements/rtp-payloading.c elements/rtpaux.c elements/rtpbin.c \
 	$(elements_rtpbin_buffer_list_SOURCES) elements/rtpcollision.c \
-	elements/rtph263.c elements/rtpjitterbuffer.c \
-	elements/rtpmux.c elements/rtprtx.c elements/rtpsession.c \
-	elements/shapewipe.c elements/souphttpsrc.c \
-	elements/spectrum.c elements/splitmux.c elements/sunaudio.c \
-	elements/udpsink.c elements/udpsrc.c elements/videobox.c \
-	elements/videocrop.c elements/videofilter.c \
-	elements/videomixer.c elements/vp8dec.c elements/vp8enc.c \
-	elements/wavpackdec.c elements/wavpackenc.c \
-	elements/wavpackparse.c elements/wavparse.c elements/y4menc.c \
-	generic/states.c pipelines/effectv.c pipelines/flacdec.c \
+	elements/rtph261.c elements/rtph263.c \
+	elements/rtpjitterbuffer.c elements/rtpmux.c elements/rtprtx.c \
+	elements/rtpsession.c elements/rtpvp9.c elements/shapewipe.c \
+	elements/souphttpsrc.c elements/spectrum.c elements/splitmux.c \
+	elements/sunaudio.c elements/udpsink.c elements/udpsrc.c \
+	elements/videobox.c elements/videocrop.c \
+	elements/videofilter.c elements/videomixer.c elements/vp8dec.c \
+	elements/vp8enc.c elements/vp9enc.c elements/wavpackdec.c \
+	elements/wavpackenc.c elements/wavpackparse.c \
+	elements/wavparse.c elements/y4menc.c generic/states.c \
+	pipelines/effectv.c pipelines/flacdec.c \
 	pipelines/simple-launch-lines.c pipelines/tagschecking.c \
 	pipelines/wavenc.c pipelines/wavpack.c
 am__can_run_installinfo = \
@@ -1311,6 +1340,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -1417,6 +1447,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -1484,6 +1517,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
@@ -1667,7 +1701,9 @@
 @USE_PLUGIN_RTP_FALSE@check_rtp = 
 @USE_PLUGIN_RTP_TRUE@check_rtp = \
 @USE_PLUGIN_RTP_TRUE@	elements/rtp-payloading \
-@USE_PLUGIN_RTP_TRUE@	elements/rtph263
+@USE_PLUGIN_RTP_TRUE@	elements/rtph261 \
+@USE_PLUGIN_RTP_TRUE@	elements/rtph263 \
+@USE_PLUGIN_RTP_TRUE@	elements/rtpvp9
 
 @USE_PLUGIN_RTPMANAGER_FALSE@check_rtpmanager = 
 @USE_PLUGIN_RTPMANAGER_TRUE@check_rtpmanager = \
@@ -1710,7 +1746,7 @@
 @USE_PLUGIN_VIDEOMIXER_FALSE@check_videomixer = 
 @USE_PLUGIN_VIDEOMIXER_TRUE@check_videomixer = elements/videomixer
 @USE_VPX_FALSE@check_vpx = 
-@USE_VPX_TRUE@check_vpx = elements/vp8enc elements/vp8dec
+@USE_VPX_TRUE@check_vpx = elements/vp8enc elements/vp8dec elements/vp9enc
 @USE_PLUGIN_WAVENC_FALSE@check_wavenc = 
 @USE_PLUGIN_WAVENC_TRUE@check_wavenc = pipelines/wavenc
 @USE_WAVPACK_FALSE@check_wavpack = 
@@ -1732,7 +1768,7 @@
 AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) \
 	$(GST_OPTION_CFLAGS) $(GST_CFLAGS) -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
 	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
-	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS $(PTHREAD_CFLAGS)
 
 LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS)
 
@@ -1835,6 +1871,8 @@
              $(GST_BASE_LIBS) $(GST_LIBS) $(GST_CHECK_LIBS) $(LDADD)
 
 elements_rtpbin_buffer_list_SOURCES = elements/rtpbin_buffer_list.c
+elements_rtph261_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtph261_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 elements_rtph263_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_rtph263_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
 elements_rtpmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
@@ -1860,9 +1898,9 @@
 elements_rtprtx_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 elements_rtprtx_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
 elements_rtpsession_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
 elements_rtpcollision_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
 elements_rtpaux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 elements_rtpaux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
 
@@ -1878,6 +1916,8 @@
 elements_videomixer_CFLAGS = $(GST_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 pipelines_flacdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 pipelines_flacdec_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
+elements_vp9enc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
+elements_vp9enc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(LDADD)
 pipelines_wavenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
 pipelines_wavenc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
 pipelines_wavpack_LDADD = $(LDADD) $(GST_BASE_LIBS)
@@ -2296,6 +2336,12 @@
 elements/rtpcollision$(EXEEXT): $(elements_rtpcollision_OBJECTS) $(elements_rtpcollision_DEPENDENCIES) $(EXTRA_elements_rtpcollision_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/rtpcollision$(EXEEXT)
 	$(AM_V_CCLD)$(elements_rtpcollision_LINK) $(elements_rtpcollision_OBJECTS) $(elements_rtpcollision_LDADD) $(LIBS)
+elements/elements_rtph261-rtph261.$(OBJEXT): elements/$(am__dirstamp) \
+	elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/rtph261$(EXEEXT): $(elements_rtph261_OBJECTS) $(elements_rtph261_DEPENDENCIES) $(EXTRA_elements_rtph261_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/rtph261$(EXEEXT)
+	$(AM_V_CCLD)$(elements_rtph261_LINK) $(elements_rtph261_OBJECTS) $(elements_rtph261_LDADD) $(LIBS)
 elements/elements_rtph263-rtph263.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2326,6 +2372,12 @@
 elements/rtpsession$(EXEEXT): $(elements_rtpsession_OBJECTS) $(elements_rtpsession_DEPENDENCIES) $(EXTRA_elements_rtpsession_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/rtpsession$(EXEEXT)
 	$(AM_V_CCLD)$(elements_rtpsession_LINK) $(elements_rtpsession_OBJECTS) $(elements_rtpsession_LDADD) $(LIBS)
+elements/rtpvp9.$(OBJEXT): elements/$(am__dirstamp) \
+	elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/rtpvp9$(EXEEXT): $(elements_rtpvp9_OBJECTS) $(elements_rtpvp9_DEPENDENCIES) $(EXTRA_elements_rtpvp9_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/rtpvp9$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(elements_rtpvp9_OBJECTS) $(elements_rtpvp9_LDADD) $(LIBS)
 elements/shapewipe.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2404,6 +2456,12 @@
 elements/vp8enc$(EXEEXT): $(elements_vp8enc_OBJECTS) $(elements_vp8enc_DEPENDENCIES) $(EXTRA_elements_vp8enc_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/vp8enc$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(elements_vp8enc_OBJECTS) $(elements_vp8enc_LDADD) $(LIBS)
+elements/elements_vp9enc-vp9enc.$(OBJEXT): elements/$(am__dirstamp) \
+	elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/vp9enc$(EXEEXT): $(elements_vp9enc_OBJECTS) $(elements_vp9enc_DEPENDENCIES) $(EXTRA_elements_vp9enc_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/vp9enc$(EXEEXT)
+	$(AM_V_CCLD)$(elements_vp9enc_LINK) $(elements_vp9enc_OBJECTS) $(elements_vp9enc_LDADD) $(LIBS)
 elements/wavpackdec.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2567,6 +2625,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpaux-rtpaux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpbin_buffer_list-rtpbin_buffer_list.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpcollision-rtpcollision.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtph261-rtph261.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtph263-rtph263.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpjitterbuffer-rtpjitterbuffer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpmux-rtpmux.Po@am__quote@
@@ -2579,6 +2638,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videocrop-videocrop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videofilter-videofilter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videomixer-videomixer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_vp9enc-vp9enc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/flacparse.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/flvmux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/gdkpixbufoverlay.Po@am__quote@
@@ -2593,6 +2653,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/qtdemux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/rtp-payloading.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/rtpbin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/rtpvp9.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/shapewipe.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/splitmux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/udpsink.Po@am__quote@
@@ -3122,6 +3183,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) $(elements_rtpcollision_CFLAGS) $(CFLAGS) -c -o elements/elements_rtpcollision-rtpcollision.obj `if test -f 'elements/rtpcollision.c'; then $(CYGPATH_W) 'elements/rtpcollision.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtpcollision.c'; fi`
 
+elements/elements_rtph261-rtph261.o: elements/rtph261.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph261_CFLAGS) $(CFLAGS) -MT elements/elements_rtph261-rtph261.o -MD -MP -MF elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo -c -o elements/elements_rtph261-rtph261.o `test -f 'elements/rtph261.c' || echo '$(srcdir)/'`elements/rtph261.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo elements/$(DEPDIR)/elements_rtph261-rtph261.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtph261.c' object='elements/elements_rtph261-rtph261.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) $(elements_rtph261_CFLAGS) $(CFLAGS) -c -o elements/elements_rtph261-rtph261.o `test -f 'elements/rtph261.c' || echo '$(srcdir)/'`elements/rtph261.c
+
+elements/elements_rtph261-rtph261.obj: elements/rtph261.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph261_CFLAGS) $(CFLAGS) -MT elements/elements_rtph261-rtph261.obj -MD -MP -MF elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo -c -o elements/elements_rtph261-rtph261.obj `if test -f 'elements/rtph261.c'; then $(CYGPATH_W) 'elements/rtph261.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtph261.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo elements/$(DEPDIR)/elements_rtph261-rtph261.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/rtph261.c' object='elements/elements_rtph261-rtph261.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) $(elements_rtph261_CFLAGS) $(CFLAGS) -c -o elements/elements_rtph261-rtph261.obj `if test -f 'elements/rtph261.c'; then $(CYGPATH_W) 'elements/rtph261.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtph261.c'; fi`
+
 elements/elements_rtph263-rtph263.o: elements/rtph263.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph263_CFLAGS) $(CFLAGS) -MT elements/elements_rtph263-rtph263.o -MD -MP -MF elements/$(DEPDIR)/elements_rtph263-rtph263.Tpo -c -o elements/elements_rtph263-rtph263.o `test -f 'elements/rtph263.c' || echo '$(srcdir)/'`elements/rtph263.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtph263-rtph263.Tpo elements/$(DEPDIR)/elements_rtph263-rtph263.Po
@@ -3290,6 +3365,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) $(elements_videomixer_CFLAGS) $(CFLAGS) -c -o elements/elements_videomixer-videomixer.obj `if test -f 'elements/videomixer.c'; then $(CYGPATH_W) 'elements/videomixer.c'; else $(CYGPATH_W) '$(srcdir)/elements/videomixer.c'; fi`
 
+elements/elements_vp9enc-vp9enc.o: elements/vp9enc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vp9enc_CFLAGS) $(CFLAGS) -MT elements/elements_vp9enc-vp9enc.o -MD -MP -MF elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo -c -o elements/elements_vp9enc-vp9enc.o `test -f 'elements/vp9enc.c' || echo '$(srcdir)/'`elements/vp9enc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo elements/$(DEPDIR)/elements_vp9enc-vp9enc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/vp9enc.c' object='elements/elements_vp9enc-vp9enc.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) $(elements_vp9enc_CFLAGS) $(CFLAGS) -c -o elements/elements_vp9enc-vp9enc.o `test -f 'elements/vp9enc.c' || echo '$(srcdir)/'`elements/vp9enc.c
+
+elements/elements_vp9enc-vp9enc.obj: elements/vp9enc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vp9enc_CFLAGS) $(CFLAGS) -MT elements/elements_vp9enc-vp9enc.obj -MD -MP -MF elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo -c -o elements/elements_vp9enc-vp9enc.obj `if test -f 'elements/vp9enc.c'; then $(CYGPATH_W) 'elements/vp9enc.c'; else $(CYGPATH_W) '$(srcdir)/elements/vp9enc.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo elements/$(DEPDIR)/elements_vp9enc-vp9enc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/vp9enc.c' object='elements/elements_vp9enc-vp9enc.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) $(elements_vp9enc_CFLAGS) $(CFLAGS) -c -o elements/elements_vp9enc-vp9enc.obj `if test -f 'elements/vp9enc.c'; then $(CYGPATH_W) 'elements/vp9enc.c'; else $(CYGPATH_W) '$(srcdir)/elements/vp9enc.c'; fi`
+
 orc/orc_deinterlace-deinterlace.o: orc/deinterlace.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_deinterlace_CFLAGS) $(CFLAGS) -MT orc/orc_deinterlace-deinterlace.o -MD -MP -MF orc/$(DEPDIR)/orc_deinterlace-deinterlace.Tpo -c -o orc/orc_deinterlace-deinterlace.o `test -f 'orc/deinterlace.c' || echo '$(srcdir)/'`orc/deinterlace.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_deinterlace-deinterlace.Tpo orc/$(DEPDIR)/orc_deinterlace-deinterlace.Po
@@ -3969,6 +4058,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)
+elements/rtph261.log: elements/rtph261$(EXEEXT)
+	@p='elements/rtph261$(EXEEXT)'; \
+	b='elements/rtph261'; \
+	$(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)
 elements/rtph263.log: elements/rtph263$(EXEEXT)
 	@p='elements/rtph263$(EXEEXT)'; \
 	b='elements/rtph263'; \
@@ -3976,6 +4072,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)
+elements/rtpvp9.log: elements/rtpvp9$(EXEEXT)
+	@p='elements/rtpvp9$(EXEEXT)'; \
+	b='elements/rtpvp9'; \
+	$(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)
 elements/rtpaux.log: elements/rtpaux$(EXEEXT)
 	@p='elements/rtpaux$(EXEEXT)'; \
 	b='elements/rtpaux'; \
@@ -4137,6 +4240,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)
+elements/vp9enc.log: elements/vp9enc$(EXEEXT)
+	@p='elements/vp9enc$(EXEEXT)'; \
+	b='elements/vp9enc'; \
+	$(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)
 pipelines/wavenc.log: pipelines/wavenc$(EXEEXT)
 	@p='pipelines/wavenc$(EXEEXT)'; \
 	b='pipelines/wavenc'; \
diff --git a/tests/check/elements/audiofirfilter.c b/tests/check/elements/audiofirfilter.c
index dd31e87..d8b452c 100644
--- a/tests/check/elements/audiofirfilter.c
+++ b/tests/check/elements/audiofirfilter.c
@@ -158,7 +158,6 @@
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
   gst_bus_add_signal_watch (bus);
   g_signal_connect (G_OBJECT (bus), "message", G_CALLBACK (on_message), loop);
-  gst_object_unref (GST_OBJECT (bus));
 
   fail_if (gst_element_set_state (pipeline,
           GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE);
@@ -171,6 +170,8 @@
   fail_unless (gst_element_set_state (pipeline,
           GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS);
 
+  gst_bus_remove_signal_watch (bus);
+  gst_object_unref (GST_OBJECT (bus));
   g_main_loop_unref (loop);
   gst_object_unref (pipeline);
 }
diff --git a/tests/check/elements/audioiirfilter.c b/tests/check/elements/audioiirfilter.c
index 8faae79..af2c9d3 100644
--- a/tests/check/elements/audioiirfilter.c
+++ b/tests/check/elements/audioiirfilter.c
@@ -155,7 +155,6 @@
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
   gst_bus_add_signal_watch (bus);
   g_signal_connect (G_OBJECT (bus), "message", G_CALLBACK (on_message), loop);
-  gst_object_unref (GST_OBJECT (bus));
 
   fail_if (gst_element_set_state (pipeline,
           GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE);
@@ -168,6 +167,8 @@
   fail_unless (gst_element_set_state (pipeline,
           GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS);
 
+  gst_bus_remove_signal_watch (bus);
+  gst_object_unref (GST_OBJECT (bus));
   g_main_loop_unref (loop);
   gst_object_unref (pipeline);
 }
diff --git a/tests/check/elements/qtdemux.c b/tests/check/elements/qtdemux.c
index 55d2862..56b6693 100644
--- a/tests/check/elements/qtdemux.c
+++ b/tests/check/elements/qtdemux.c
@@ -131,6 +131,10 @@
     offset += seg_1_sample_sizes[i];
     pts += seg_1_sample_duration;
   }
+
+  gst_object_unref (sinkpad);
+  gst_element_set_state (qtdemux, GST_STATE_NULL);
+  gst_object_unref (qtdemux);
 }
 
 GST_END_TEST;
diff --git a/tests/check/elements/rtp-payloading.c b/tests/check/elements/rtp-payloading.c
index 2eea4a9..c59f9be 100644
--- a/tests/check/elements/rtp-payloading.c
+++ b/tests/check/elements/rtp-payloading.c
@@ -60,6 +60,7 @@
    * Count the size of the payload in the buffer list.
    */
   len = gst_buffer_list_length (list);
+  GST_LOG ("list length %u", len);
 
   /* Loop through all groups */
   for (i = 0; i < len; i++) {
@@ -69,12 +70,14 @@
 
     paybuf = gst_buffer_list_get (list, i);
     /* only count real data which is expected in last memory block */
+    GST_LOG ("n_memory %d", gst_buffer_n_memory (paybuf));
     fail_unless (gst_buffer_n_memory (paybuf) > 1);
     mem = gst_buffer_get_memory_range (paybuf, gst_buffer_n_memory (paybuf) - 1,
         1);
     size = gst_memory_get_sizes (mem, NULL, NULL);
     gst_memory_unref (mem);
     chain_list_bytes_received += size;
+    GST_LOG ("size %d, total %u", size, chain_list_bytes_received);
   }
   gst_buffer_list_unref (list);
 
@@ -296,7 +299,6 @@
   bus = gst_pipeline_get_bus (GST_PIPELINE (p->pipeline));
 
   gst_bus_add_watch (bus, rtp_bus_callback, (gpointer) mainloop);
-  gst_object_unref (bus);
 
   /* Set pipeline to PLAYING. */
   gst_element_set_state (p->pipeline, GST_STATE_PLAYING);
@@ -351,6 +353,9 @@
   /* Release mainloop. */
   g_main_loop_unref (mainloop);
 
+  gst_bus_remove_watch (bus);
+  gst_object_unref (bus);
+
   fail_if (p->custom_event);
 }
 
@@ -752,6 +757,161 @@
 
 GST_END_TEST;
 
+static const guint8 rtp_h265_frame_data[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static int rtp_h265_frame_data_size = 20;
+
+static int rtp_h265_frame_count = 1;
+
+GST_START_TEST (rtp_h265)
+{
+  rtp_pipeline_test (rtp_h265_frame_data, rtp_h265_frame_data_size,
+      rtp_h265_frame_count,
+      "video/x-h265,stream-format=(string)byte-stream,alignment=(string)nal",
+      "rtph265pay", "rtph265depay", 0, 0, FALSE);
+
+  /* config-interval property used to be of uint type, was changed to int,
+   * make sure old GValue stuff still works */
+  {
+    GValue val = G_VALUE_INIT;
+    GstElement *rtph265pay;
+    GParamSpec *pspec;
+
+
+    rtph265pay = gst_element_factory_make ("rtph265pay", NULL);
+    pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (rtph265pay),
+        "config-interval");
+    fail_unless (pspec->value_type == G_TYPE_INT);
+    g_value_init (&val, G_TYPE_UINT);
+    g_value_set_uint (&val, 10);
+    g_object_set_property (G_OBJECT (rtph265pay), "config-interval", &val);
+    g_value_set_uint (&val, 0);
+    g_object_get_property (G_OBJECT (rtph265pay), "config-interval", &val);
+    fail_unless_equals_int (10, g_value_get_uint (&val));
+    g_object_set (G_OBJECT (rtph265pay), "config-interval", -1, NULL);
+    g_object_get_property (G_OBJECT (rtph265pay), "config-interval", &val);
+    fail_unless (g_value_get_uint (&val) == G_MAXUINT);
+    g_value_unset (&val);
+    gst_object_unref (rtph265pay);
+  }
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_lt_mtu_frame_data[] = {
+  /* not packetized, next NALU starts with 0x00000001 */
+  0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+  0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x10
+};
+
+static int rtp_h265_list_lt_mtu_frame_data_size = 16;
+
+static int rtp_h265_list_lt_mtu_frame_count = 2;
+
+/* 3 bytes start code prefixed with one zero byte, NALU header is in payload */
+static int rtp_h265_list_lt_mtu_bytes_sent = 2 * (16 - 3 - 1);
+
+static int rtp_h265_list_lt_mtu_mtu_size = 1024;
+
+GST_START_TEST (rtp_h265_list_lt_mtu)
+{
+  rtp_pipeline_test (rtp_h265_list_lt_mtu_frame_data,
+      rtp_h265_list_lt_mtu_frame_data_size, rtp_h265_list_lt_mtu_frame_count,
+      "video/x-h265,stream-format=(string)byte-stream,alignment=(string)nal",
+      "rtph265pay", "rtph265depay", rtp_h265_list_lt_mtu_bytes_sent,
+      rtp_h265_list_lt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_lt_mtu_frame_data_hvc1[] = {
+  /* packetized data */
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+};
+
+/* length size is 3 bytes */
+static int rtp_h265_list_lt_mtu_bytes_sent_hvc1 = 2 * (16 - 2 * 3);
+
+
+GST_START_TEST (rtp_h265_list_lt_mtu_hvc1)
+{
+  rtp_pipeline_test (rtp_h265_list_lt_mtu_frame_data_hvc1,
+      rtp_h265_list_lt_mtu_frame_data_size, rtp_h265_list_lt_mtu_frame_count,
+      "video/x-h265,stream-format=(string)hvc1,alignment=(string)au,"
+      "codec_data=(buffer)0101c000000080000000000099f000fcfdf8f800000203a000010"
+      "01840010c01ffff01c000000300800000030000030099ac0900a10001003042010101c00"
+      "0000300800000030000030099a00a080f1fe36bbb5377725d602dc040404100000300010"
+      "00003000a0800a2000100074401c172b02240",
+      "rtph265pay", "rtph265depay", rtp_h265_list_lt_mtu_bytes_sent_hvc1,
+      rtp_h265_list_lt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_gt_mtu_frame_data[] = {
+  /* not packetized, next NAL starts with 0x000001 */
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x10
+};
+
+static const int rtp_h265_list_gt_mtu_frame_data_size = 62;
+
+static const int rtp_h265_list_gt_mtu_frame_count = 1;
+
+/* start code is 3 bytes, NALU header is 2 bytes */
+static int rtp_h265_list_gt_mtu_bytes_sent = 1 * (62 - 3 - 2);
+
+static int rtp_h265_list_gt_mtu_mtu_size = 28;
+
+GST_START_TEST (rtp_h265_list_gt_mtu)
+{
+  rtp_pipeline_test (rtp_h265_list_gt_mtu_frame_data,
+      rtp_h265_list_gt_mtu_frame_data_size, rtp_h265_list_gt_mtu_frame_count,
+      "video/x-h265,stream-format=(string)byte-stream,alignment=(string)nal",
+      "rtph265pay", "rtph265depay", rtp_h265_list_gt_mtu_bytes_sent,
+      rtp_h265_list_gt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_gt_mtu_frame_data_hvc1[] = {
+  /* packetized data */
+  0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* length size is 3 bytes, NALU header is 2 bytes */
+static int rtp_h265_list_gt_mtu_bytes_sent_hvc1 = 1 * (62 - 2 * 3 - 2 * 2);
+
+GST_START_TEST (rtp_h265_list_gt_mtu_hvc1)
+{
+  rtp_pipeline_test (rtp_h265_list_gt_mtu_frame_data_hvc1,
+      rtp_h265_list_gt_mtu_frame_data_size, rtp_h265_list_gt_mtu_frame_count,
+      "video/x-h265,stream-format=(string)hvc1,alignment=(string)au,"
+      "codec_data=(buffer)0101c000000080000000000099f000fcfdf8f800000203a000010"
+      "01840010c01ffff01c000000300800000030000030099ac0900a10001003042010101c00"
+      "0000300800000030000030099a00a080f1fe36bbb5377725d602dc040404100000300010"
+      "00003000a0800a2000100074401c172b02240",
+      "rtph265pay", "rtph265depay", rtp_h265_list_gt_mtu_bytes_sent_hvc1,
+      rtp_h265_list_gt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+
 /* KLV data from Day_Flight.mpg */
 static const guint8 rtp_KLV_frame_data[] = {
   0x06, 0x0e, 0x2b, 0x34, 0x02, 0x0b, 0x01, 0x01,
@@ -1200,6 +1360,11 @@
   tcase_add_test (tc_chain, rtp_h264_list_lt_mtu_avc);
   tcase_add_test (tc_chain, rtp_h264_list_gt_mtu);
   tcase_add_test (tc_chain, rtp_h264_list_gt_mtu_avc);
+  tcase_add_test (tc_chain, rtp_h265);
+  tcase_add_test (tc_chain, rtp_h265_list_lt_mtu);
+  tcase_add_test (tc_chain, rtp_h265_list_lt_mtu_hvc1);
+  tcase_add_test (tc_chain, rtp_h265_list_gt_mtu);
+  tcase_add_test (tc_chain, rtp_h265_list_gt_mtu_hvc1);
   tcase_add_test (tc_chain, rtp_klv);
   tcase_add_test (tc_chain, rtp_klv_fragmented);
   tcase_add_test (tc_chain, rtp_L16);
diff --git a/tests/check/elements/rtph261.c b/tests/check/elements/rtph261.c
new file mode 100644
index 0000000..7c34d37
--- /dev/null
+++ b/tests/check/elements/rtph261.c
@@ -0,0 +1,142 @@
+#include <gst/check/check.h>
+#include <gst/check/gstharness.h>
+#include <gst/rtp/gstrtpbuffer.h>
+
+#define H261_RTP_CAPS_STR                                               \
+  "application/x-rtp,media=video,encoding-name=H261,clock-rate=90000,payload=31"
+
+typedef struct _GstRtpH261PayHeader
+{
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  unsigned int v:1;             /* Motion vector flag */
+  unsigned int i:1;             /* Intra encoded data */
+  unsigned int ebit:3;          /* End position */
+  unsigned int sbit:3;          /* Start position */
+
+  unsigned int mbap1:4;         /* MB address predictor - part1 */
+  unsigned int gobn:4;          /* GOB number */
+
+  unsigned int hmvd1:2;         /* Horizontal motion vector data - part1 */
+  unsigned int quant:5;         /* Quantizer */
+  unsigned int mbap2:1;         /* MB address predictor - part2 */
+
+  unsigned int vmvd:5;          /* Horizontal motion vector data - part1 */
+  unsigned int hmvd2:3;         /* Vertical motion vector data */
+#elif G_BYTE_ORDER == G_BIG_ENDIAN
+  unsigned int sbit:3;          /* Start position */
+  unsigned int ebit:3;          /* End position */
+  unsigned int i:1;             /* Intra encoded data */
+  unsigned int v:1;             /* Motion vector flag */
+
+  unsigned int gobn:4;          /* GOB number */
+  unsigned int mbap1:4;         /* MB address predictor - part1 */
+
+  unsigned int mbap2:1;         /* MB address predictor - part2 */
+  unsigned int quant:5;         /* Quantizer */
+  unsigned int hmvd1:2;         /* Horizontal motion vector data - part1 */
+
+  unsigned int hmvd2:3;         /* Vertical motion vector data */
+  unsigned int vmvd:5;          /* Horizontal motion vector data - part1 */
+#else
+#error "G_BYTE_ORDER should be big or little endian."
+#endif
+} GstRtpH261PayHeader;
+
+#define GST_RTP_H261_PAYLOAD_HEADER_LEN 4
+
+static guint8 *
+create_h261_payload (gint sbit, gint ebit, gint psc, gsize size)
+{
+  GstRtpH261PayHeader header;
+  const gint header_len = 4;
+  guint8 *data = g_malloc0 (size);
+
+  memset (&header, 0x00, sizeof (header));
+
+  header.sbit = sbit;
+  header.ebit = ebit;
+
+  memset (data, 0xff, size);
+  memcpy (data, &header, header_len);
+
+  if (psc) {
+    guint32 word = 0x000100ff >> sbit;
+    data[header_len + 0] = (word >> 24) & 0xff;
+    data[header_len + 1] = (word >> 16) & 0xff;
+    data[header_len + 2] = (word >> 8) & 0xff;
+    data[header_len + 3] = (word >> 0) & 0xff;
+  }
+
+  return data;
+}
+
+static GstBuffer *
+create_rtp_copy_payload (const guint8 * data, gsize size, guint ts, guint16 seq,
+    gboolean marker, guint csrcs)
+{
+  GstBuffer *buf = gst_rtp_buffer_new_allocate (size, 0, csrcs);
+  GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+
+  gst_rtp_buffer_map (buf, GST_MAP_WRITE, &rtp);
+
+  gst_rtp_buffer_set_seq (&rtp, seq);
+  gst_rtp_buffer_set_marker (&rtp, marker);
+  memcpy (gst_rtp_buffer_get_payload (&rtp), data, size);
+
+  GST_BUFFER_PTS (buf) = (ts) * (GST_SECOND / 30);
+  GST_BUFFER_DURATION (buf) = (GST_SECOND / 30);
+
+  gst_rtp_buffer_unmap (&rtp);
+
+  return buf;
+}
+
+GST_START_TEST (test_h263depay_empty_payload)
+{
+  GstHarness *h = gst_harness_new ("rtph261depay");
+  gint sbit = 4;
+  gint ebit = 4;
+  gsize size;
+  guint8 *payload;
+  guint seq = 0;
+
+  gst_harness_set_src_caps_str (h, H261_RTP_CAPS_STR);
+
+  /* First send a proper packet with picture start code */
+  size = 100;
+  payload = create_h261_payload (sbit, ebit, TRUE, size);
+  gst_harness_push (h, create_rtp_copy_payload (payload, size, 0, seq++, FALSE,
+          0));
+  g_free (payload);
+
+  /* Not a complete frame */
+  fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+  /* Second buffer has invalid empty payload */
+  size = GST_RTP_H261_PAYLOAD_HEADER_LEN;
+  payload = create_h261_payload (sbit, ebit, FALSE, size);
+  gst_harness_push (h, create_rtp_copy_payload (payload, size, 0, seq++, TRUE,
+          0));
+  g_free (payload);
+
+  /* Invalid payload should be dropped */
+  fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+static Suite *
+rtph261_suite (void)
+{
+  Suite *s = suite_create ("rtph261");
+  TCase *tc_chain;
+
+  suite_add_tcase (s, (tc_chain = tcase_create ("h261depay")));
+  tcase_add_test (tc_chain, test_h263depay_empty_payload);
+
+  return s;
+}
+
+GST_CHECK_MAIN (rtph261);
diff --git a/tests/check/elements/rtph263.c b/tests/check/elements/rtph263.c
index 90f4d5c..64e97f5 100644
--- a/tests/check/elements/rtph263.c
+++ b/tests/check/elements/rtph263.c
@@ -27,6 +27,25 @@
   "application/x-rtp,media=video,encoding-name=H263,clock-rate=90000,"  \
   "payload=" G_STRINGIFY(p)
 
+#define H263P_RTP_CAPS_STR(p)                                           \
+  "application/x-rtp,media=video,encoding-name=H263-1998,clock-rate=90000," \
+  "payload="G_STRINGIFY(p)
+
+static gboolean
+have_element (const gchar * element_name)
+{
+  GstElement *element;
+  gboolean ret;
+
+  element = gst_element_factory_make (element_name, NULL);
+  ret = element != NULL;
+
+  if (element)
+    gst_object_unref (element);
+
+  return ret;
+}
+
 static GstBuffer *
 create_rtp_buffer (guint8 * data, gsize size, guint ts, gint seqnum)
 {
@@ -102,6 +121,158 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_h263pay_mode_b_snow)
+{
+  /* Payloading one large frame (like snow) is more likely to use mode b and
+   * trigger issues in valgrind seen previously like double free, invalid read
+   * etc. */
+  GstHarness *h;
+  guint frames = 1;
+  guint i;
+
+  if (!have_element ("avenc_h263"))
+    return;
+
+  h = gst_harness_new_parse (
+      "avenc_h263 rtp-payload-size=1 ! rtph263pay mtu=1350 ");
+  gst_harness_add_src_parse (h, "videotestsrc pattern=snow is-live=1 ! "
+      "capsfilter caps=\"video/x-raw,format=I420,width=176,height=144\"", TRUE);
+
+  for (i = 0; i < frames; i++)
+    gst_harness_push_from_src (h);
+  fail_unless (gst_harness_buffers_received (h) >= frames);
+
+  gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+/* gst_rtp_buffer_get_payload() may return a copy of the payload. This test
+ * makes sure that the rtph263pdepay also produces the correct output in this
+ * case. */
+GST_START_TEST (test_h263pdepay_fragmented_memory_non_writable_buffer)
+{
+  GstHarness *h;
+  GstBuffer *header_buf, *payload_buf, *buf;
+  GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+  guint8 header[] = {
+    0x04, 0x00 };
+  guint8 payload[] = {
+    0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+  guint8 frame[] = {
+    0x00, 0x00, 0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+
+  h = gst_harness_new ("rtph263pdepay");
+  gst_harness_set_src_caps_str (h, "application/x-rtp, media=video, "
+      "clock-rate=90000, encoding-name=H263-1998");
+
+  /* Packet with M=1, P=1 */
+  header_buf = gst_rtp_buffer_new_allocate (sizeof (header), 0, 0);
+  gst_rtp_buffer_map (header_buf, GST_MAP_WRITE, &rtp);
+  gst_rtp_buffer_set_marker (&rtp, TRUE);
+  memcpy (gst_rtp_buffer_get_payload (&rtp), header, sizeof (header));
+  gst_rtp_buffer_unmap (&rtp);
+
+  payload_buf = gst_buffer_new_allocate (NULL, sizeof (payload), NULL);
+  gst_buffer_fill (payload_buf, 0, payload, sizeof (payload));
+  buf = gst_buffer_append (header_buf, payload_buf);
+
+  gst_harness_push (h, gst_buffer_ref (buf));
+  gst_buffer_unref (buf);
+
+  buf = gst_harness_pull (h);
+  fail_unless (gst_buffer_memcmp (buf, 0, frame, sizeof (frame)) == 0);
+  gst_buffer_unref (buf);
+
+  gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+/* gst_rtp_buffer_get_payload() may return a copy of the payload. This test
+ * makes sure that the rtph263pdepay also produces the correct output in this
+ * case. */
+GST_START_TEST (test_h263pdepay_fragmented_memory_non_writable_buffer_split_frame)
+{
+  GstHarness *h;
+  GstBuffer *header_buf, *payload_buf, *buf;
+  GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+  guint8 header[] = {
+    0x04, 0x00 };
+  guint8 payload[] = {
+    0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+  guint8 frame[] = {
+    0x00, 0x00, 0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+
+  h = gst_harness_new ("rtph263pdepay");
+  gst_harness_set_src_caps_str (h, "application/x-rtp, media=video, "
+      "clock-rate=90000, encoding-name=H263-1998");
+
+  /* First packet, M=0, P=1 */
+  header_buf = gst_rtp_buffer_new_allocate (sizeof (header), 0, 0);
+  gst_rtp_buffer_map (header_buf, GST_MAP_WRITE, &rtp);
+  gst_rtp_buffer_set_marker (&rtp, FALSE);
+  gst_rtp_buffer_set_seq (&rtp, 0);
+  memcpy (gst_rtp_buffer_get_payload (&rtp), header, sizeof (header));
+  gst_rtp_buffer_unmap (&rtp);
+
+  payload_buf = gst_buffer_new_allocate (NULL, sizeof (payload), NULL);
+  gst_buffer_fill (payload_buf, 0, payload, sizeof (payload));
+  buf = gst_buffer_append (header_buf, payload_buf);
+
+  gst_harness_push (h, gst_buffer_ref (buf));
+  gst_buffer_unref (buf);
+  fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+  /* Second packet, M=1, P=1 */
+  header_buf = gst_rtp_buffer_new_allocate (sizeof (header), 0, 0);
+  gst_rtp_buffer_map (header_buf, GST_MAP_WRITE, &rtp);
+  gst_rtp_buffer_set_marker (&rtp, TRUE);
+  gst_rtp_buffer_set_seq (&rtp, 1);
+  memcpy (gst_rtp_buffer_get_payload (&rtp), header, sizeof (header));
+  gst_rtp_buffer_unmap (&rtp);
+
+  payload_buf = gst_buffer_new_allocate (NULL, sizeof (payload), NULL);
+  gst_buffer_memset (payload_buf, 0, 0, 10);
+  buf = gst_buffer_append (header_buf, payload_buf);
+
+  gst_harness_push (h, gst_buffer_ref (buf));
+  gst_buffer_unref (buf);
+  fail_unless_equals_int (gst_harness_buffers_received (h), 1);
+
+  buf = gst_harness_pull (h);
+  fail_unless (gst_buffer_memcmp (buf, 0, frame, sizeof (frame)) == 0);
+  gst_buffer_unref (buf);
+
+  gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+GST_START_TEST (test_h263pdepay_dont_push_empty_frame)
+{
+  GstHarness *h = gst_harness_new ("rtph263pdepay");
+
+  /* Packet that only contains header information and an extra picture header
+   * (PLEN > 0). Partly handcrafted packet. Originally this packet did not
+   * have P=1 (hence it was not start of a picture). With both P=1 and M=1 we
+   * only need one packet to reproduce the issue where trying to push an empty
+   * frame when PLEN is set */
+  guint8 packet[] = {
+    0x80, 0xe8, 0xbc, 0xaa, 0x14, 0x12, 0x16, 0x5c, 0xb8, 0x4e, 0x39, 0x04,
+    0x25, 0x00, 0x54, 0x39, 0xd0, 0x12, 0x06, 0x9e, 0xb5, 0x0a, 0xf5, 0xe8,
+    0x32, 0xeb, 0xd0, 0x6b, 0xd6, 0xa2, 0xfa, 0xd4, 0x3d, 0xd7, 0xa0, 0x2b,
+    0x24, 0x97, 0xc3, 0xbf, 0xc0, 0xbb, 0xd7, 0xa0,
+  };
+
+  gst_harness_set_src_caps_str (h, H263P_RTP_CAPS_STR (100));
+
+  fail_unless_equals_int (GST_FLOW_OK, gst_harness_push (h,
+          create_rtp_buffer (packet, sizeof (packet), 0, 0)));
+
+  fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+  gst_harness_teardown (h);
+}
+GST_END_TEST;
+
 static Suite *
 rtph263_suite (void)
 {
@@ -113,6 +284,14 @@
   tcase_add_test (tc_chain, test_h263depay_start_packet_too_small_mode_b);
   tcase_add_test (tc_chain, test_h263depay_start_packet_too_small_mode_c);
 
+  suite_add_tcase (s, (tc_chain = tcase_create ("h263pay")));
+  tcase_add_test (tc_chain, test_h263pay_mode_b_snow);
+
+  suite_add_tcase (s, (tc_chain = tcase_create ("h263pdepay")));
+  tcase_add_test (tc_chain, test_h263pdepay_fragmented_memory_non_writable_buffer);
+  tcase_add_test (tc_chain, test_h263pdepay_fragmented_memory_non_writable_buffer_split_frame);
+  tcase_add_test (tc_chain, test_h263pdepay_dont_push_empty_frame);
+
   return s;
 }
 
diff --git a/tests/check/elements/rtpjitterbuffer.c b/tests/check/elements/rtpjitterbuffer.c
index 3b519e0..10810fa 100644
--- a/tests/check/elements/rtpjitterbuffer.c
+++ b/tests/check/elements/rtpjitterbuffer.c
@@ -532,7 +532,13 @@
 
   gst_harness_set_src_caps (h, generate_caps ());
   testclock = gst_harness_get_testclock (h);
-  g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL);
+  /* Need to set max-misorder-time and max-dropout-time to 0 so the
+   * jitterbuffer does not base them on packet rate calculations.
+   * If it does, out gap is big enough to be considered a new stream and
+   * we wait for a few consecutive packets just to be sure
+   */
+  g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms,
+      "max-misorder-time", 0, "max-dropout-time", 0, NULL);
 
   /* push the first buffer in */
   fail_unless_equals_int (GST_FLOW_OK,
diff --git a/tests/check/elements/rtprtx.c b/tests/check/elements/rtprtx.c
index d3c5c6a..aaa1ac4 100644
--- a/tests/check/elements/rtprtx.c
+++ b/tests/check/elements/rtprtx.c
@@ -18,1249 +18,40 @@
  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  * Boston, MA 02110-1301, USA.
  */
-
 #include <gst/check/gstcheck.h>
-#include <gst/check/gstconsistencychecker.h>
-
+#include <gst/check/gstharness.h>
 #include <gst/rtp/gstrtpbuffer.h>
 
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *srcpad, *sinkpad;
-/* we also have a list of src buffers */
-static GList *inbuffers = NULL;
+#define verify_buf(buf, is_rtx, expected_ssrc, expted_pt, expected_seqnum)       \
+  G_STMT_START {                                                                 \
+    GstRTPBuffer _rtp = GST_RTP_BUFFER_INIT;                                     \
+    fail_unless (gst_rtp_buffer_map (buf, GST_MAP_READ, &_rtp));                 \
+    fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&_rtp), expected_ssrc);     \
+    fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&_rtp), expted_pt); \
+    if (!(is_rtx)) {                                                             \
+      fail_unless_equals_int (gst_rtp_buffer_get_seq (&_rtp), expected_seqnum);  \
+    } else {                                                                     \
+      fail_unless_equals_int (GST_READ_UINT16_BE (gst_rtp_buffer_get_payload     \
+              (&_rtp)), expected_seqnum);                                        \
+    }                                                                            \
+    gst_rtp_buffer_unmap (&_rtp);                                                \
+  } G_STMT_END
 
-#define RTP_CAPS_STRING    \
-    "application/x-rtp, "               \
-    "media = (string)audio, "           \
-    "payload = (int) 0, "               \
-    "clock-rate = (int) 8000, "         \
-    "ssrc = (uint) 42, "                \
-    "encoding-name = (string)PCMU"
+#define pull_and_verify(h, is_rtx, expected_ssrc, expted_pt, expected_seqnum) \
+  G_STMT_START {                                                              \
+    GstBuffer *_buf = gst_harness_pull (h);                                   \
+    verify_buf (_buf, is_rtx, expected_ssrc, expted_pt, expected_seqnum);     \
+    gst_buffer_unref (_buf);                                                  \
+  } G_STMT_END
 
-#define RTP_FRAME_SIZE 20
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp")
-    );
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rtp")
-    );
-
-static void
-setup_rtprtx (GstElement * rtprtxsend, GstElement * rtprtxreceive,
-    gint num_buffers)
-{
-  GstBuffer *buffer;
-  GstPad *sendsrcpad;
-  GstPad *receivesinkpad;
-  gboolean ret = FALSE;
-
-  /* a 20 sample audio block (2,5 ms) generated with
-   * gst-launch audiotestsrc wave=silence blocksize=40 num-buffers=3 !
-   *    "audio/x-raw,channels=1,rate=8000" ! mulawenc ! rtppcmupay !
-   *     fakesink dump=1
-   */
-  guint8 in[] = {               /* first 4 bytes are rtp-header, next 4 bytes are timestamp */
-    0x80, 0x80, 0x1c, 0x24, 0x46, 0xcd, 0xb7, 0x11, 0x3c, 0x3a, 0x7c, 0x5b,
-    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-  };
-  GstClockTime ts = G_GUINT64_CONSTANT (0);
-  GstClockTime tso = gst_util_uint64_scale (RTP_FRAME_SIZE, GST_SECOND, 8000);
-  gint i;
-
-  srcpad = gst_check_setup_src_pad (rtprtxsend, &srctemplate);
-  sendsrcpad = gst_element_get_static_pad (rtprtxsend, "src");
-  ret = gst_pad_set_active (srcpad, TRUE);
-  fail_if (ret == FALSE);
-
-  sinkpad = gst_check_setup_sink_pad (rtprtxreceive, &sinktemplate);
-  receivesinkpad = gst_element_get_static_pad (rtprtxreceive, "sink");
-  ret = gst_pad_set_active (sinkpad, TRUE);
-  fail_if (ret == FALSE);
-
-  fail_if (gst_pad_link (sendsrcpad, receivesinkpad) != GST_PAD_LINK_OK);
-
-  ret = gst_pad_set_active (sendsrcpad, TRUE);
-  fail_if (ret == FALSE);
-  ret = gst_pad_set_active (receivesinkpad, TRUE);
-  fail_if (ret == FALSE);
-
-  gst_object_unref (sendsrcpad);
-  gst_object_unref (receivesinkpad);
-
-  for (i = 0; i < num_buffers; i++) {
-    buffer = gst_buffer_new_and_alloc (sizeof (in));
-    gst_buffer_fill (buffer, 0, in, sizeof (in));
-    GST_BUFFER_DTS (buffer) = ts;
-    GST_BUFFER_PTS (buffer) = ts;
-    GST_BUFFER_DURATION (buffer) = tso;
-    GST_DEBUG ("created buffer: %p", buffer);
-
-    /*if (!i)
-       GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT); */
-
-    inbuffers = g_list_append (inbuffers, buffer);
-
-    /* hackish way to update the rtp header */
-    in[1] = 0x00;
-    in[3]++;                    /* seqnumber */
-    in[7] += RTP_FRAME_SIZE;    /* inc. timestamp with framesize */
-    ts += tso;
-  }
-}
-
-static GstStateChangeReturn
-start_rtprtx (GstElement * element)
-{
-  GstStateChangeReturn ret;
-
-  ret = gst_element_set_state (element, GST_STATE_PLAYING);
-  ck_assert_int_ne (ret, GST_STATE_CHANGE_FAILURE);
-
-  ret = gst_element_get_state (element, NULL, NULL, GST_CLOCK_TIME_NONE);
-  ck_assert_int_ne (ret, GST_STATE_CHANGE_FAILURE);
-
-  return ret;
-}
-
-static void
-cleanup_rtprtx (GstElement * rtprtxsend, GstElement * rtprtxreceive)
-{
-  GST_DEBUG ("cleanup_rtprtx");
-
-  g_list_free (inbuffers);
-  inbuffers = NULL;
-
-  gst_check_drop_buffers ();
-  gst_pad_set_active (srcpad, FALSE);
-  gst_check_teardown_src_pad (rtprtxsend);
-  gst_check_teardown_element (rtprtxsend);
-
-  gst_pad_set_active (sinkpad, FALSE);
-  gst_check_teardown_sink_pad (rtprtxreceive);
-  gst_check_teardown_element (rtprtxreceive);
-}
-
-static void
-check_rtprtx_results (GstElement * rtprtxsend, GstElement * rtprtxreceive,
-    gint num_buffers)
-{
-  guint nbrtxrequests = 0;
-  guint nbrtxpackets = 0;
-
-  g_object_get (G_OBJECT (rtprtxsend), "num-rtx-requests", &nbrtxrequests,
-      NULL);
-  fail_unless_equals_int (nbrtxrequests, 3);
-
-  g_object_get (G_OBJECT (rtprtxsend), "num-rtx-packets", &nbrtxpackets, NULL);
-  fail_unless_equals_int (nbrtxpackets, 3);
-
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-requests", &nbrtxrequests,
-      NULL);
-  fail_unless_equals_int (nbrtxrequests, 3);
-
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-packets", &nbrtxpackets,
-      NULL);
-  fail_unless_equals_int (nbrtxpackets, 3);
-
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-assoc-packets",
-      &nbrtxpackets, NULL);
-  fail_unless_equals_int (nbrtxpackets, 3);
-}
-
-
-GST_START_TEST (test_push_forward_seq)
-{
-  GstElement *rtprtxsend;
-  GstElement *rtprtxreceive;
-  const guint num_buffers = 4;
-  GList *node;
-  gint i = 0;
-  GstCaps *caps = NULL;
-  GstStructure *pt_map;
-
-  rtprtxsend = gst_check_setup_element ("rtprtxsend");
-  rtprtxreceive = gst_check_setup_element ("rtprtxreceive");
-  setup_rtprtx (rtprtxsend, rtprtxreceive, num_buffers);
-  GST_DEBUG ("setup_rtprtx");
-
-  fail_unless (start_rtprtx (rtprtxsend)
-      == GST_STATE_CHANGE_SUCCESS, "could not set to playing");
-
-  fail_unless (start_rtprtx (rtprtxreceive)
-      == GST_STATE_CHANGE_SUCCESS, "could not set to playing");
-
-  caps = gst_caps_from_string (RTP_CAPS_STRING);
-  gst_check_setup_events (srcpad, rtprtxsend, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  pt_map = gst_structure_new ("application/x-rtp-pt-map",
-      "0", G_TYPE_UINT, 97, NULL);
-  g_object_set (rtprtxsend, "payload-type-map", pt_map, NULL);
-  g_object_set (rtprtxreceive, "payload-type-map", pt_map, NULL);
-  gst_structure_free (pt_map);
-
-  /* push buffers: 0,1,2, */
-  for (node = inbuffers; node; node = g_list_next (node)) {
-    GstEvent *event = NULL;
-    GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
-    GstBuffer *buffer = (GstBuffer *) node->data;
-    GList *last_out_buffer;
-    guint64 end_time;
-    gboolean res;
-
-    gst_buffer_ref (buffer);
-    fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
-
-    if (i < 3) {
-      gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
-      event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
-          gst_structure_new ("GstRTPRetransmissionRequest",
-              "seqnum", G_TYPE_UINT, (guint) gst_rtp_buffer_get_seq (&rtp),
-              "ssrc", G_TYPE_UINT, (guint) gst_rtp_buffer_get_ssrc (&rtp),
-              "payload-type", G_TYPE_UINT,
-              (guint) gst_rtp_buffer_get_payload_type (&rtp), NULL));
-      gst_rtp_buffer_unmap (&rtp);
-
-      /* synchronize with the chain() function of the "sinkpad"
-       * to make sure that rtxsend has pushed the rtx buffer out
-       * before continuing */
-      last_out_buffer = g_list_last (buffers);
-      g_mutex_lock (&check_mutex);
-      fail_unless (gst_pad_push_event (sinkpad, event));
-      end_time = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
-      do
-        res = g_cond_wait_until (&check_cond, &check_mutex, end_time);
-      while (res == TRUE && last_out_buffer == g_list_last (buffers));
-      g_mutex_unlock (&check_mutex);
-    }
-    gst_buffer_unref (buffer);
-    ++i;
-  }
-
-  /* check the buffer list */
-  check_rtprtx_results (rtprtxsend, rtprtxreceive, num_buffers);
-
-  /* cleanup */
-  cleanup_rtprtx (rtprtxsend, rtprtxreceive);
-}
-
-GST_END_TEST;
-
-static void
-message_received (GstBus * bus, GstMessage * message, gboolean * eos)
-{
-  GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
-      GST_MESSAGE_SRC (message), message);
-
-  switch (message->type) {
-    case GST_MESSAGE_EOS:
-      *eos = TRUE;
-      break;
-    case GST_MESSAGE_WARNING:{
-      GError *gerror;
-      gchar *debug;
-
-      gst_message_parse_warning (message, &gerror, &debug);
-      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
-      g_error_free (gerror);
-      g_free (debug);
-      break;
-    }
-    case GST_MESSAGE_ERROR:{
-      GError *gerror;
-      gchar *debug;
-
-      gst_message_parse_error (message, &gerror, &debug);
-      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
-      fail ("Error: %s / %s", gerror->message, debug);
-      g_error_free (gerror);
-      g_free (debug);
-      break;
-    }
-    default:
-      break;
-  }
-}
-
-typedef struct
-{
-  guint count;
-  guint nb_packets;
-  guint drop_every_n_packets;
-} RTXSendData;
-
-typedef struct
-{
-  guint nb_packets;
-  guint seqnum_offset;
-  guint seqnum_prev;
-} RTXReceiveData;
-
-static GstPadProbeReturn
-do_buffer_list_as_buffers_probe (GstPad * pad, GstPadProbeInfo * info,
-    gpointer user_data, GstPadProbeCallback callback)
-{
-  /* Iterate the buffer list, removing any items that we're
-   * told to drop and creating a new bufferlist. If all buffers
-   * are dropped, return DROP.
-   */
-  guint i, len;
-  GstBufferList *list;
-  GstBufferList *outlist;
-  GstPadProbeInfo buf_info = *info;
-
-  GST_INFO_OBJECT (pad, "probing each buffer in list individually");
-
-  list = gst_pad_probe_info_get_buffer_list (info);
-
-  g_return_val_if_fail (list != NULL, GST_PAD_PROBE_REMOVE);
-
-  len = gst_buffer_list_length (list);
-  outlist = gst_buffer_list_new_sized (len);
-
-  buf_info.type = GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH;
-  for (i = 0; i < len; i++) {
-    GstBuffer *buffer = gst_buffer_list_get (list, i);
-    GstPadProbeReturn ret;
-    buf_info.data = buffer;
-    ret = callback (pad, &buf_info, user_data);
-    /* If the buffer wasn't dropped, add it to the output list */
-    if (ret != GST_PAD_PROBE_DROP)
-      gst_buffer_list_insert (outlist, -1, gst_buffer_ref (buffer));
-  }
-
-  len = gst_buffer_list_length (outlist);
-  if (len == 0) {
-    /* Everything was discarded, drop our outlist */
-    gst_buffer_list_unref (outlist);
-    return GST_PAD_PROBE_DROP;
-  }
-
-  /* Replace the original buffer list with the modified one */
-  gst_buffer_list_unref (list);
-  info->data = outlist;
-  return GST_PAD_PROBE_OK;
-}
-
-static GstPadProbeReturn
-rtprtxsend_srcpad_probe (GstPad * pad, GstPadProbeInfo * info,
-    gpointer user_data)
-{
-  GstPadProbeReturn ret = GST_PAD_PROBE_OK;
-
-  GST_LOG_OBJECT (pad, "here");
-  if (info->type == (GST_PAD_PROBE_TYPE_BUFFER_LIST | GST_PAD_PROBE_TYPE_PUSH))
-    return do_buffer_list_as_buffers_probe (pad, info, user_data,
-        rtprtxsend_srcpad_probe);
-
-  if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
-    GstBuffer *buffer = GST_BUFFER (info->data);
-    RTXSendData *rtxdata = (RTXSendData *) user_data;
-    GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
-    guint payload_type = 0;
-
-    gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
-    payload_type = gst_rtp_buffer_get_payload_type (&rtp);
-
-    /* main stream packets */
-    if (payload_type == 96) {
-      /* count packets of the main stream */
-      ++rtxdata->nb_packets;
-      /* drop some packets */
-      if (rtxdata->count < rtxdata->drop_every_n_packets) {
-        ++rtxdata->count;
-      } else {
-        /* drop a packet every 'rtxdata->count' packets */
-        rtxdata->count = 1;
-        ret = GST_PAD_PROBE_DROP;
-      }
-    } else {
-      /* retransmission packets */
-    }
-
-    gst_rtp_buffer_unmap (&rtp);
-  }
-
-  return ret;
-}
-
-static GstPadProbeReturn
-rtprtxreceive_srcpad_probe (GstPad * pad, GstPadProbeInfo * info,
-    gpointer user_data)
-{
-  if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
-    GstBuffer *buffer = GST_BUFFER (info->data);
-    RTXReceiveData *rtxdata = (RTXReceiveData *) user_data;
-    GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
-    guint seqnum = 0;
-    guint i = 0;
-
-    gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
-    seqnum = gst_rtp_buffer_get_seq (&rtp);
-
-    /* check if there is a dropped packet */
-    if (seqnum > rtxdata->seqnum_prev + rtxdata->seqnum_offset) {
-      GstPad *peerpad = gst_pad_get_peer (pad);
-
-      /* ask retransmission of missing packet */
-      for (i = rtxdata->seqnum_prev + rtxdata->seqnum_offset; i < seqnum;
-          i += rtxdata->seqnum_offset) {
-        GstEvent *event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
-            gst_structure_new ("GstRTPRetransmissionRequest",
-                "seqnum", G_TYPE_UINT, i,
-                "ssrc", G_TYPE_UINT, gst_rtp_buffer_get_ssrc (&rtp),
-                "payload-type", G_TYPE_UINT,
-                gst_rtp_buffer_get_payload_type (&rtp),
-                NULL));
-        gst_pad_push_event (peerpad, event);
-      }
-      gst_object_unref (peerpad);
-
-      rtxdata->seqnum_prev = seqnum;
-    } else if (seqnum == rtxdata->seqnum_prev + rtxdata->seqnum_offset) {
-      /* also update previous seqnum in this case */
-      rtxdata->seqnum_prev = seqnum;
-    }
-
-    gst_rtp_buffer_unmap (&rtp);
-
-    ++rtxdata->nb_packets;
-  }
-
-  return GST_PAD_PROBE_OK;
-}
-
-static void
-start_test_drop_and_check_results (GstElement * bin, GstElement * rtppayloader,
-    GstElement * rtprtxsend, GstElement * rtprtxreceive,
-    RTXSendData * send_rtxdata, RTXReceiveData * receive_rtxdata,
-    guint drop_every_n_packets, gboolean * eos)
-{
-  GstStateChangeReturn state_res = GST_STATE_CHANGE_FAILURE;
-  guint nbrtxrequests = 0;
-  guint nbrtxpackets = 0;
-  guint nb_expected_requests = 0;
-  GstStructure *pt_map;
-
-  GST_INFO ("starting test");
-
-  pt_map = gst_structure_new ("application/x-rtp-pt-map",
-      "96", G_TYPE_UINT, 99, NULL);
-  g_object_set (rtppayloader, "pt", 96, NULL);
-  g_object_set (rtppayloader, "seqnum-offset", 1, NULL);
-  g_object_set (rtprtxsend, "payload-type-map", pt_map, NULL);
-  g_object_set (rtprtxreceive, "payload-type-map", pt_map, NULL);
-  gst_structure_free (pt_map);
-
-  send_rtxdata->count = 1;
-  send_rtxdata->nb_packets = 0;
-  send_rtxdata->drop_every_n_packets = drop_every_n_packets;
-
-  receive_rtxdata->nb_packets = 0;
-  receive_rtxdata->seqnum_offset = 0;
-  receive_rtxdata->seqnum_prev = 0;
-
-  *eos = FALSE;
-
-  /* retrieve offset before going to paused */
-  g_object_get (G_OBJECT (rtppayloader), "seqnum-offset",
-      &receive_rtxdata->seqnum_offset, NULL);
-
-  /* prepare playing */
-  state_res = gst_element_set_state (bin, GST_STATE_PAUSED);
-  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
-  /* wait for completion */
-  state_res = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
-  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
-  /* retrieve seqnum_prev here to make sure it has been reseted */
-  g_object_get (G_OBJECT (rtppayloader), "seqnum",
-      &receive_rtxdata->seqnum_prev, NULL);
-
-  /* run pipeline */
-  state_res = gst_element_set_state (bin, GST_STATE_PLAYING);
-  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
-  GST_INFO ("running main loop");
-  while (!*eos)
-    g_main_context_iteration (NULL, TRUE);
-
-  /* check results */
-
-  if (send_rtxdata->nb_packets % drop_every_n_packets == 0) {
-    /* special case because the last buffer will be dropped
-     * so the receiver cannot know if it has been dropped (no next packet)
-     */
-    nb_expected_requests = send_rtxdata->nb_packets / drop_every_n_packets - 1;
-    fail_unless_equals_int (send_rtxdata->nb_packets,
-        receive_rtxdata->nb_packets + 1);
-  } else {
-    nb_expected_requests = send_rtxdata->nb_packets / drop_every_n_packets;
-    fail_unless_equals_int (send_rtxdata->nb_packets,
-        receive_rtxdata->nb_packets);
-  }
-
-  g_object_get (G_OBJECT (rtprtxsend), "num-rtx-requests", &nbrtxrequests,
-      NULL);
-  fail_unless_equals_int (nbrtxrequests, nb_expected_requests);
-
-  g_object_get (G_OBJECT (rtprtxsend), "num-rtx-packets", &nbrtxpackets, NULL);
-  fail_unless_equals_int (nbrtxpackets, nb_expected_requests);
-
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-requests", &nbrtxrequests,
-      NULL);
-  fail_unless_equals_int (nbrtxrequests, nb_expected_requests);
-
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-packets", &nbrtxpackets,
-      NULL);
-  fail_unless_equals_int (nbrtxpackets, nb_expected_requests);
-
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-assoc-packets",
-      &nbrtxpackets, NULL);
-  fail_unless_equals_int (nbrtxpackets, nb_expected_requests);
-
-  state_res = gst_element_set_state (bin, GST_STATE_NULL);
-  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-}
-
-/* This test build the pipeline videotestsrc ! rtpvrawpay ! rtprtxsend ! rtprtxreceive ! fakesink
- * and drop some buffer between rtprtxsend and rtprtxreceive
- * Then it checks that every dropped packet has been re-sent and it checks that
- * not too much requests has been sent.
- */
-GST_START_TEST (test_drop_one_sender)
-{
-  GstElement *bin, *src, *rtppayloader, *rtprtxsend, *rtprtxreceive, *sink;
-  GstBus *bus;
-  gboolean res;
-  GstPad *srcpad, *sinkpad;
-  GstStreamConsistency *chk_1, *chk_2, *chk_3;
-  gint num_buffers = 20;
-  guint drop_every_n_packets = 0;
-  RTXSendData send_rtxdata;
-  RTXReceiveData receive_rtxdata;
-  gboolean eos = FALSE;
-
-  GST_INFO ("preparing test");
-
-  /* build pipeline */
-  bin = gst_pipeline_new ("pipeline");
-  bus = gst_element_get_bus (bin);
-  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
-
-  src = gst_element_factory_make ("videotestsrc", "src");
-  g_object_set (src, "num-buffers", num_buffers, NULL);
-  rtppayloader = gst_element_factory_make ("rtpvrawpay", "rtppayloader");
-  rtprtxsend = gst_element_factory_make ("rtprtxsend", "rtprtxsend");
-  rtprtxreceive = gst_element_factory_make ("rtprtxreceive", "rtprtxreceive");
-  sink = gst_element_factory_make ("fakesink", "sink");
-  gst_bin_add_many (GST_BIN (bin), src, rtppayloader, rtprtxsend, rtprtxreceive,
-      sink, NULL);
-
-  res = gst_element_link (src, rtppayloader);
-  fail_unless (res == TRUE, NULL);
-  res = gst_element_link (rtppayloader, rtprtxsend);
-  fail_unless (res == TRUE, NULL);
-  res = gst_element_link (rtprtxsend, rtprtxreceive);
-  fail_unless (res == TRUE, NULL);
-  res = gst_element_link (rtprtxreceive, sink);
-  fail_unless (res == TRUE, NULL);
-
-  /* create consistency checkers for the pads */
-
-  srcpad = gst_element_get_static_pad (rtppayloader, "src");
-  chk_1 = gst_consistency_checker_new (srcpad);
-  gst_object_unref (srcpad);
-
-  srcpad = gst_element_get_static_pad (rtprtxsend, "src");
-  gst_pad_add_probe (srcpad,
-      (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST |
-          GST_PAD_PROBE_TYPE_PUSH),
-      (GstPadProbeCallback) rtprtxsend_srcpad_probe, &send_rtxdata, NULL);
-  sinkpad = gst_pad_get_peer (srcpad);
-  fail_if (sinkpad == NULL);
-  chk_2 = gst_consistency_checker_new (sinkpad);
-  gst_object_unref (sinkpad);
-  gst_object_unref (srcpad);
-
-  srcpad = gst_element_get_static_pad (rtprtxreceive, "src");
-  gst_pad_add_probe (srcpad,
-      (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH),
-      (GstPadProbeCallback) rtprtxreceive_srcpad_probe, &receive_rtxdata, NULL);
-  sinkpad = gst_pad_get_peer (srcpad);
-  fail_if (sinkpad == NULL);
-  chk_3 = gst_consistency_checker_new (sinkpad);
-  gst_object_unref (sinkpad);
-  gst_object_unref (srcpad);
-
-  g_signal_connect (bus, "message::error", (GCallback) message_received, NULL);
-  g_signal_connect (bus, "message::warning", (GCallback) message_received,
-      NULL);
-  g_signal_connect (bus, "message::eos", (GCallback) message_received, &eos);
-
-  for (drop_every_n_packets = 2; drop_every_n_packets < 10;
-      drop_every_n_packets++) {
-    start_test_drop_and_check_results (bin, rtppayloader, rtprtxsend,
-        rtprtxreceive, &send_rtxdata, &receive_rtxdata, drop_every_n_packets,
-        &eos);
-  }
-
-  /* cleanup */
-  gst_consistency_checker_free (chk_1);
-  gst_consistency_checker_free (chk_2);
-  gst_consistency_checker_free (chk_3);
-  gst_bus_remove_signal_watch (bus);
-  gst_object_unref (bus);
-  gst_object_unref (bin);
-}
-
-GST_END_TEST;
-
-static void
-message_received_multiple (GstBus * bus, GstMessage * message, gpointer data)
-{
-  GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
-      GST_MESSAGE_SRC (message), message);
-
-  switch (message->type) {
-    case GST_MESSAGE_WARNING:{
-      GError *gerror;
-      gchar *debug;
-
-      gst_message_parse_warning (message, &gerror, &debug);
-      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
-      g_error_free (gerror);
-      g_free (debug);
-      break;
-    }
-    case GST_MESSAGE_ERROR:{
-      GError *gerror;
-      gchar *debug;
-
-      gst_message_parse_error (message, &gerror, &debug);
-      gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
-      fail ("Error: %s / %s", gerror->message, debug);
-      g_error_free (gerror);
-      g_free (debug);
-      break;
-    }
-    default:
-      break;
-  }
-}
-
-typedef struct
-{
-  guint count;
-  guint nb_packets;
-  guint drop_every_n_packets;
-  guint payload_type_master;
-  guint total_packets;
-} RTXSendMultipleData;
-
-/* drop some packets */
-static GstPadProbeReturn
-rtprtxsend_srcpad_probe_multiple (GstPad * pad, GstPadProbeInfo * info,
-    gpointer user_data)
-{
-  GstPadProbeReturn ret = GST_PAD_PROBE_OK;
-
-  if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
-    GstBuffer *buffer = GST_BUFFER (info->data);
-    RTXSendMultipleData *rtxdata = (RTXSendMultipleData *) user_data;
-    GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
-    guint payload_type = 0;
-
-    gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
-    payload_type = gst_rtp_buffer_get_payload_type (&rtp);
-
-    /* main stream packets */
-    if (payload_type == rtxdata->payload_type_master) {
-      /* count packets of the main stream */
-      ++rtxdata->nb_packets;
-      /* drop some packets */
-      /* but make sure we never drop the last one, otherwise there
-       * will be nothing to trigger a retransmission.
-       */
-      if (rtxdata->count < rtxdata->drop_every_n_packets ||
-          rtxdata->nb_packets == rtxdata->total_packets) {
-        ++rtxdata->count;
-      } else {
-        /* drop a packet every 'rtxdata->count' packets */
-        rtxdata->count = 1;
-        ret = GST_PAD_PROBE_DROP;
-      }
-    } else {
-      /* retransmission packets */
-    }
-
-    gst_rtp_buffer_unmap (&rtp);
-  }
-
-  return ret;
-}
-
-/* make sure every sources has sent all their buffers */
-static GstPadProbeReturn
-source_srcpad_probe_multiple_drop_eos (GstPad * pad, GstPadProbeInfo * info,
-    gpointer user_data)
-{
-  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
-
-  if (GST_EVENT_TYPE (event) == GST_EVENT_EOS)
-    return GST_PAD_PROBE_DROP;
-  else
-    return GST_PAD_PROBE_OK;
-}
-
-typedef struct
-{
-  GHashTable *ssrc_to_nb_packets_map;
-  GHashTable *ssrc_to_seqnum_offset_map;
-  guint seqnum_offset;
-
-  gint to_send;
-  volatile gint dropped_requests;
-  volatile gint received;
-  gboolean request_passed;
-} RTXReceiveMultipleData;
-
-/* add one branch videotestsrc ! rtpvrawpay ! rtprtxsend ! queue ! funnel. */
-static RTXSendMultipleData *
-add_sender (GstElement * bin, const gchar * src_name,
-    const gchar * payloader_name, guint payload_type_master,
-    guint payload_type_aux, RTXReceiveMultipleData * rtxdata)
-{
-  GstElement *src = NULL;
-  GstCaps *caps;
-  GstElement *rtppayloader = NULL;
-  GstElement *rtprtxsend = NULL;
-  GstElement *queue = NULL;
-  GstElement *funnel = NULL;
-  GstPad *srcpad = NULL;
-  gboolean res = FALSE;
-  RTXSendMultipleData *send_rtxdata = g_slice_new0 (RTXSendMultipleData);
-  gchar *pt_master;
-  GstStructure *pt_map;
-
-  send_rtxdata->count = 1;
-  send_rtxdata->nb_packets = 0;
-  send_rtxdata->drop_every_n_packets = 0;
-  send_rtxdata->payload_type_master = payload_type_master;
-  send_rtxdata->total_packets = 25;
-  rtxdata->to_send += send_rtxdata->total_packets;
-
-  src = gst_element_factory_make (src_name, NULL);
-  rtppayloader = gst_element_factory_make (payloader_name, NULL);
-  rtprtxsend = gst_element_factory_make ("rtprtxsend", NULL);
-  queue = gst_element_factory_make ("queue", NULL);
-  funnel = gst_bin_get_by_name (GST_BIN (bin), "funnel");
-
-  pt_master = g_strdup_printf ("%" G_GUINT32_FORMAT, payload_type_master);
-  pt_map = gst_structure_new ("application/x-rtp-pt-map",
-      pt_master, G_TYPE_UINT, payload_type_aux, NULL);
-  g_free (pt_master);
-
-  g_object_set (src, "num-buffers", send_rtxdata->total_packets, NULL);
-  g_object_set (src, "is-live", TRUE, NULL);
-  g_object_set (rtppayloader, "pt", payload_type_master, NULL);
-  g_object_set (rtppayloader, "seqnum-offset", 1, NULL);
-  g_object_set (rtprtxsend, "payload-type-map", pt_map, NULL);
-  /* we want that every drop packet be resent fast */
-  g_object_set (queue, "max-size-buffers", 1, NULL);
-  g_object_set (queue, "flush-on-eos", FALSE, NULL);
-
-  gst_structure_free (pt_map);
-
-  gst_bin_add_many (GST_BIN (bin), src, rtppayloader, rtprtxsend, queue, NULL);
-
-  /* Make sure we have one buffer per frame, makes it easier to count! */
-  caps =
-      gst_caps_from_string ("video/x-raw, width=20, height=10, framerate=30/1");
-  res = gst_element_link_filtered (src, rtppayloader, caps);
-  gst_caps_unref (caps);
-  fail_unless (res == TRUE, NULL);
-  res = gst_element_link (rtppayloader, rtprtxsend);
-  fail_unless (res == TRUE, NULL);
-  res = gst_element_link (rtprtxsend, queue);
-  fail_unless (res == TRUE, NULL);
-  res = gst_element_link (queue, funnel);
-  fail_unless (res == TRUE, NULL);
-  gst_object_unref (funnel);
-
-  /* to drop some packets */
-  srcpad = gst_element_get_static_pad (rtprtxsend, "src");
-  gst_pad_add_probe (srcpad,
-      (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH),
-      (GstPadProbeCallback) rtprtxsend_srcpad_probe_multiple, send_rtxdata,
-      NULL);
-  gst_object_unref (srcpad);
-
-  /* to make sure every sources has sent all their buffers */
-  srcpad = gst_element_get_static_pad (src, "src");
-  gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
-      (GstPadProbeCallback) source_srcpad_probe_multiple_drop_eos, NULL, NULL);
-  gst_object_unref (srcpad);
-
-  return send_rtxdata;
-}
-
-static GstPadProbeReturn
-rtprtxreceive_sinkpad_probe_check_drop (GstPad * pad, GstPadProbeInfo * info,
-    gpointer user_data)
-{
-  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
-  RTXReceiveMultipleData *rtxdata = (RTXReceiveMultipleData *) user_data;
-
-  if (GST_EVENT_TYPE (event) == GST_EVENT_CUSTOM_UPSTREAM &&
-      gst_event_get_structure (event) != NULL &&
-      gst_structure_has_name (gst_event_get_structure (event),
-          "GstRTPRetransmissionRequest"))
-    rtxdata->request_passed = TRUE;
-
-  return GST_PAD_PROBE_OK;
-}
-
-static gboolean
-check_finished (RTXReceiveMultipleData * rtxdata)
-{
-  return (g_atomic_int_get (&rtxdata->received) >= (rtxdata->to_send -
-          g_atomic_int_get (&rtxdata->dropped_requests)));
-}
-
-static GstPadProbeReturn
-rtprtxreceive_srcpad_probe_multiple (GstPad * pad, GstPadProbeInfo * info,
-    gpointer user_data)
-{
-  if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
-    GstBuffer *buffer = GST_BUFFER (info->data);
-    RTXReceiveMultipleData *rtxdata = (RTXReceiveMultipleData *) user_data;
-    GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
-    guint ssrc = 0;
-    guint seqnum = 0;
-    gpointer seqnum_prev = 0;
-    guint nb_packets = 0;
-
-    gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
-    ssrc = gst_rtp_buffer_get_ssrc (&rtp);
-    seqnum = gst_rtp_buffer_get_seq (&rtp);
-
-    g_atomic_int_inc (&rtxdata->received);
-    if (check_finished (rtxdata))
-      g_main_context_wakeup (NULL);
-
-    if (!g_hash_table_lookup_extended (rtxdata->ssrc_to_seqnum_offset_map,
-            GUINT_TO_POINTER (ssrc), NULL, &seqnum_prev)) {
-      /*In our test we take care to never drop the first buffer */
-      g_hash_table_insert (rtxdata->ssrc_to_seqnum_offset_map,
-          GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (seqnum));
-      g_hash_table_insert (rtxdata->ssrc_to_nb_packets_map,
-          GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (1));
-      gst_rtp_buffer_unmap (&rtp);
-      return GST_PAD_PROBE_OK;
-    }
-
-
-    /* check if there is a dropped packet
-     * (in our test every packet arrived in increasing order) */
-    if (seqnum > GPOINTER_TO_UINT (seqnum_prev) + rtxdata->seqnum_offset) {
-      GstPad *peerpad = gst_pad_get_peer (pad);
-      guint i = 0;
-
-      /* ask retransmission of missing packets */
-      for (i = GPOINTER_TO_UINT (seqnum_prev) + rtxdata->seqnum_offset;
-          i < seqnum; i += rtxdata->seqnum_offset) {
-        GstEvent *event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
-            gst_structure_new ("GstRTPRetransmissionRequest",
-                "seqnum", G_TYPE_UINT, i,
-                "ssrc", G_TYPE_UINT, gst_rtp_buffer_get_ssrc (&rtp),
-                "payload-type", G_TYPE_UINT,
-                gst_rtp_buffer_get_payload_type (&rtp),
-                NULL));
-        rtxdata->request_passed = FALSE;
-        gst_pad_push_event (peerpad, event);
-        if (!rtxdata->request_passed) {
-          g_atomic_int_inc (&rtxdata->dropped_requests);
-          if (check_finished (rtxdata))
-            g_main_context_wakeup (NULL);
-        }
-      }
-      gst_object_unref (peerpad);
-
-      g_hash_table_insert (rtxdata->ssrc_to_seqnum_offset_map,
-          GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (seqnum));
-    } else if (seqnum ==
-        GPOINTER_TO_UINT (seqnum_prev) + rtxdata->seqnum_offset) {
-      /* also update previous seqnum in this case */
-      g_hash_table_insert (rtxdata->ssrc_to_seqnum_offset_map,
-          GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (seqnum));
-    } else {
-      /* receive retransmited packet */
-    }
-
-    gst_rtp_buffer_unmap (&rtp);
-
-    nb_packets =
-        GPOINTER_TO_UINT (g_hash_table_lookup (rtxdata->ssrc_to_nb_packets_map,
-            GUINT_TO_POINTER (ssrc)));
-    g_hash_table_insert (rtxdata->ssrc_to_nb_packets_map,
-        GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (++nb_packets));
-  }
-
-  return GST_PAD_PROBE_OK;
-}
-
-static void
-reset_rtx_send_data (RTXSendMultipleData * send_rtxdata, gpointer data)
-{
-  send_rtxdata->count = 1;
-  send_rtxdata->nb_packets = 0;
-  send_rtxdata->drop_every_n_packets = *(guint *) data;
-}
-
-/* compute number of all packets sent by all sender */
-static void
-compute_total_packets_sent (RTXSendMultipleData * send_rtxdata, gpointer data)
-{
-  guint *sum = (guint *) data;
-  *sum += send_rtxdata->nb_packets;
-}
-
-/* compute number of all packets received by rtprtxreceive::src pad */
-static void
-compute_total_packets_received (gpointer key, gpointer value, gpointer data)
-{
-  guint *sum = (guint *) data;
-  *sum += GPOINTER_TO_UINT (value);
-}
-
-static void
-start_test_drop_multiple_and_check_results (GstElement * bin,
-    GList * send_rtxdata_list, RTXReceiveMultipleData * receive_rtxdata,
-    guint drop_every_n_packets)
-{
-  GstStateChangeReturn state_res = GST_STATE_CHANGE_FAILURE;
-  GstElement *rtprtxreceive =
-      gst_bin_get_by_name (GST_BIN (bin), "rtprtxreceive");
-  guint sum_all_packets_sent = 0;
-  guint sum_rtx_packets_sent = 0;
-  guint sum_all_packets_received = 0;
-  guint sum_rtx_packets_received = 0;
-  guint sum_rtx_assoc_packets_received = 0;
-  guint sum_rtx_dropped_packets_received = 0;
-  gdouble error_sent_recv = 0;
-  GstIterator *itr_elements = NULL;
-  gboolean done = FALSE;
-  GValue item = { 0 };
-  GstElement *element = NULL;
-  gchar *name = NULL;
-
-  GST_INFO ("starting test");
-
-  g_atomic_int_set (&receive_rtxdata->received, 0);
-  g_atomic_int_set (&receive_rtxdata->dropped_requests, 0);
-
-  g_hash_table_remove_all (receive_rtxdata->ssrc_to_nb_packets_map);
-  g_hash_table_remove_all (receive_rtxdata->ssrc_to_seqnum_offset_map);
-
-  g_list_foreach (send_rtxdata_list, (GFunc) reset_rtx_send_data,
-      &drop_every_n_packets);
-
-  /* run pipeline */
-  state_res = gst_element_set_state (bin, GST_STATE_PLAYING);
-  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
-  state_res = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
-  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
-  GST_INFO ("running main loop");
-  while (!check_finished (receive_rtxdata))
-    g_main_context_iteration (NULL, TRUE);
-
-  /* check results */
-  itr_elements = gst_bin_iterate_elements (GST_BIN (bin));
-  done = FALSE;
-  while (!done) {
-    switch (gst_iterator_next (itr_elements, &item)) {
-      case GST_ITERATOR_OK:
-        element = GST_ELEMENT (g_value_get_object (&item));
-        name = gst_element_get_name (element);
-        if (g_str_has_prefix (name, "rtprtxsend") > 0) {
-          guint nb_packets = 0;
-          g_object_get (G_OBJECT (element), "num-rtx-packets", &nb_packets,
-              NULL);
-          sum_rtx_packets_sent += nb_packets;
-        }
-        g_free (name);
-        g_value_reset (&item);
-        break;
-      case GST_ITERATOR_RESYNC:
-        gst_iterator_resync (itr_elements);
-        break;
-      case GST_ITERATOR_ERROR:
-        done = TRUE;
-        break;
-      case GST_ITERATOR_DONE:
-        done = TRUE;
-        break;
-    }
-  }
-  g_value_unset (&item);
-  gst_iterator_free (itr_elements);
-
-  /* compute number of all packets sent by all sender */
-  g_list_foreach (send_rtxdata_list, (GFunc) compute_total_packets_sent,
-      &sum_all_packets_sent);
-
-  /* compute number of all packets received by rtprtxreceive::src pad */
-  g_hash_table_foreach (receive_rtxdata->ssrc_to_nb_packets_map,
-      compute_total_packets_received, (gpointer) & sum_all_packets_received);
-
-  sum_all_packets_received +=
-      g_atomic_int_get (&receive_rtxdata->dropped_requests);
-  fail_if (sum_all_packets_sent < sum_all_packets_received);
-
-  /* some packet are not received, I still have to figure out why
-   * but I suspect it comes from pipeline setup/shutdown
-   */
-  if (sum_all_packets_sent != sum_all_packets_received) {
-    error_sent_recv =
-        1 - sum_all_packets_received / (gdouble) sum_all_packets_sent;
-    fail_if (error_sent_recv > 0.30);
-    /* it should be 0% */
-  }
-
-  /* retrieve number of retransmit packets received by rtprtxreceive */
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-packets",
-      &sum_rtx_packets_received, NULL);
-
-  /* some of rtx packet are not received because the receiver avoids
-   * collision (= requests that have the same seqnum)
-   */
-  fail_if (sum_rtx_packets_sent < sum_rtx_packets_received);
-  g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-assoc-packets",
-      &sum_rtx_assoc_packets_received, NULL);
-  sum_rtx_dropped_packets_received =
-      sum_rtx_packets_received - sum_rtx_assoc_packets_received;
-  fail_unless_equals_int (sum_rtx_packets_sent,
-      sum_rtx_assoc_packets_received + sum_rtx_dropped_packets_received);
-
-  gst_object_unref (rtprtxreceive);
-  state_res = gst_element_set_state (bin, GST_STATE_NULL);
-  ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-}
-
-static void
-free_rtx_send_data (gpointer data)
-{
-  g_slice_free (RTXSendMultipleData, data);
-}
-
-/* This test build the pipeline funnel name=funnel
- * videotestsrc ! rtpvrawpay ! rtprtxsend ! queue ! funnel.
- * videotestsrc ! rtpvrawpay ! rtprtxsend ! queue ! funnel.
- * N
- * funnel. ! rtprtxreceive ! fakesink
- * and drop some buffer just after each rtprtxsend
- * Then it checks that every dropped packet has been re-sent and it checks
- * that not too much requests has been sent.
- */
-GST_START_TEST (test_drop_multiple_sender)
-{
-  GstElement *bin, *funnel, *rtprtxreceive, *sink;
-  GstBus *bus;
-  gboolean res;
-  GstPad *srcpad, *sinkpad;
-  guint drop_every_n_packets = 0;
-  GList *send_rtxdata_list = NULL;
-  RTXReceiveMultipleData receive_rtxdata = { NULL };
-  GstStructure *pt_map;
-
-  GST_INFO ("preparing test");
-
-  receive_rtxdata.ssrc_to_nb_packets_map =
-      g_hash_table_new (g_direct_hash, g_direct_equal);
-  receive_rtxdata.ssrc_to_seqnum_offset_map =
-      g_hash_table_new (g_direct_hash, g_direct_equal);
-  receive_rtxdata.seqnum_offset = 1;
-
-  /* build pipeline */
-  bin = gst_pipeline_new ("pipeline");
-  bus = gst_element_get_bus (bin);
-  gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
-
-  funnel = gst_element_factory_make ("funnel", "funnel");
-  rtprtxreceive = gst_element_factory_make ("rtprtxreceive", "rtprtxreceive");
-  sink = gst_element_factory_make ("fakesink", "sink");
-  g_object_set (sink, "sync", TRUE, NULL);
-  g_object_set (sink, "qos", FALSE, NULL);
-  gst_bin_add_many (GST_BIN (bin), funnel, rtprtxreceive, sink, NULL);
-
-  send_rtxdata_list =
-      g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
-          "rtpvrawpay", 96, 121, &receive_rtxdata));
-  send_rtxdata_list =
-      g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
-          "rtpvrawpay", 97, 122, &receive_rtxdata));
-  send_rtxdata_list =
-      g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
-          "rtpvrawpay", 98, 123, &receive_rtxdata));
-  send_rtxdata_list =
-      g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
-          "rtpvrawpay", 99, 124, &receive_rtxdata));
-
-  pt_map = gst_structure_new ("application/x-rtp-pt-map",
-      "96", G_TYPE_UINT, 121, "97", G_TYPE_UINT, 122,
-      "98", G_TYPE_UINT, 123, "99", G_TYPE_UINT, 124, NULL);
-  g_object_set (rtprtxreceive, "payload-type-map", pt_map, NULL);
-  gst_structure_free (pt_map);
-
-  res = gst_element_link (funnel, rtprtxreceive);
-  fail_unless (res == TRUE, NULL);
-  res = gst_element_link (rtprtxreceive, sink);
-  fail_unless (res == TRUE, NULL);
-
-  srcpad = gst_element_get_static_pad (rtprtxreceive, "src");
-  gst_pad_add_probe (srcpad,
-      (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH),
-      (GstPadProbeCallback) rtprtxreceive_srcpad_probe_multiple,
-      &receive_rtxdata, NULL);
-  gst_object_unref (srcpad);
-
-  sinkpad = gst_element_get_static_pad (rtprtxreceive, "sink");
-  gst_pad_add_probe (sinkpad,
-      GST_PAD_PROBE_TYPE_EVENT_UPSTREAM,
-      (GstPadProbeCallback) rtprtxreceive_sinkpad_probe_check_drop,
-      &receive_rtxdata, NULL);
-  gst_object_unref (sinkpad);
-
-  g_signal_connect (bus, "message::error",
-      (GCallback) message_received_multiple, NULL);
-  g_signal_connect (bus, "message::warning",
-      (GCallback) message_received_multiple, NULL);
-
-  for (drop_every_n_packets = 2; drop_every_n_packets < 10;
-      drop_every_n_packets++) {
-    start_test_drop_multiple_and_check_results (bin, send_rtxdata_list,
-        &receive_rtxdata, drop_every_n_packets);
-  }
-
-  /* cleanup */
-
-  g_list_free_full (send_rtxdata_list, free_rtx_send_data);
-  g_hash_table_destroy (receive_rtxdata.ssrc_to_nb_packets_map);
-  g_hash_table_destroy (receive_rtxdata.ssrc_to_seqnum_offset_map);
-
-  gst_bus_remove_signal_watch (bus);
-  gst_object_unref (bus);
-  gst_object_unref (bin);
-}
-
-GST_END_TEST;
-
-struct GenerateTestBuffersData
-{
-  GstElement *src, *capsfilter, *payloader, *sink;
-  GMutex mutex;
-  GCond cond;
-  GList *buffers;
-  gint num_buffers;
-  guint last_seqnum;
-};
-
-static void
-fakesink_handoff (GstElement * sink, GstBuffer * buf, GstPad * pad,
-    gpointer user_data)
-{
-  struct GenerateTestBuffersData *data = user_data;
-
-  g_mutex_lock (&data->mutex);
-
-  if (data->num_buffers > 0)
-    data->buffers = g_list_append (data->buffers, gst_buffer_ref (buf));
-
-  /* if we have collected enough buffers, unblock the main thread to stop */
-  if (--data->num_buffers <= 0)
-    g_cond_signal (&data->cond);
-
-  if (data->num_buffers == 0)
-    g_object_get (data->payloader, "seqnum", &data->last_seqnum, NULL);
-
-  g_mutex_unlock (&data->mutex);
-}
-
-static GList *
-generate_test_buffers (const gint num_buffers, guint ssrc, guint * payload_type)
-{
-  GstElement *bin;
-  GstCaps *videotestsrc_caps;
-  gboolean res;
-  struct GenerateTestBuffersData data;
-
-  fail_unless (num_buffers > 0);
-
-  g_mutex_init (&data.mutex);
-  g_cond_init (&data.cond);
-  data.buffers = NULL;
-  data.num_buffers = num_buffers;
-
-  bin = gst_pipeline_new (NULL);
-  data.src = gst_element_factory_make ("videotestsrc", NULL);
-  data.capsfilter = gst_element_factory_make ("capsfilter", NULL);
-  data.payloader = gst_element_factory_make ("rtpvrawpay", NULL);
-  data.sink = gst_element_factory_make ("fakesink", NULL);
-
-  /* small frame size will cause vrawpay to generate exactly one rtp packet
-   * per video frame, which we need for the max-size-time test */
-  videotestsrc_caps =
-      gst_caps_from_string
-      ("video/x-raw,format=I420,width=10,height=10,framerate=30/1");
-
-  g_object_set (data.src, "do-timestamp", TRUE, NULL);
-  g_object_set (data.capsfilter, "caps", videotestsrc_caps, NULL);
-  g_object_set (data.payloader, "seqnum-offset", 1, "ssrc", ssrc, NULL);
-  g_object_set (data.sink, "signal-handoffs", TRUE, NULL);
-  g_signal_connect (data.sink, "handoff", (GCallback) fakesink_handoff, &data);
-
-  gst_caps_unref (videotestsrc_caps);
-
-  gst_bin_add_many (GST_BIN (bin), data.src, data.capsfilter, data.payloader,
-      data.sink, NULL);
-  res = gst_element_link_many (data.src, data.capsfilter, data.payloader,
-      data.sink, NULL);
-  fail_unless_equals_int (res, TRUE);
-
-  g_mutex_lock (&data.mutex);
-  ASSERT_SET_STATE (bin, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
-  while (data.num_buffers > 0)
-    g_cond_wait (&data.cond, &data.mutex);
-  g_mutex_unlock (&data.mutex);
-
-  g_object_get (data.payloader, "pt", payload_type, NULL);
-
-  ASSERT_SET_STATE (bin, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
-
-  fail_unless_equals_int (g_list_length (data.buffers), num_buffers);
-  fail_unless_equals_int (num_buffers, data.last_seqnum);
-
-  g_mutex_clear (&data.mutex);
-  g_cond_clear (&data.cond);
-  gst_object_unref (bin);
-
-  return data.buffers;
-}
+#define push_pull_and_verify(h, buf, is_rtx, expected_ssrc, expted_pt, expected_seqnum) \
+  G_STMT_START {                                                                        \
+    gst_harness_push (h, buf);                                                          \
+    pull_and_verify (h, is_rtx, expected_ssrc, expted_pt, expected_seqnum);             \
+  } G_STMT_END
 
 static GstEvent *
-create_rtx_event (guint seqnum, guint ssrc, guint payload_type)
+create_rtx_event (guint32 ssrc, guint8 payload_type, guint16 seqnum)
 {
   return gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
       gst_structure_new ("GstRTPRetransmissionRequest",
@@ -1270,187 +61,6 @@
 }
 
 static void
-test_rtxsender_packet_retention (gboolean test_with_time)
-{
-  const gint num_buffers = test_with_time ? 30 : 10;
-  const gint half_buffers = num_buffers / 2;
-  const guint ssrc = 1234567;
-  const guint rtx_ssrc = 7654321;
-  const guint rtx_payload_type = 99;
-  GstStructure *pt_map;
-  GstStructure *ssrc_map;
-  GList *in_buffers, *node;
-  guint payload_type;
-  GstElement *rtxsend;
-  GstPad *srcpad, *sinkpad;
-  GstCaps *caps;
-  GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
-  gint i, j;
-  gboolean res;
-
-  /* generate test data  */
-  in_buffers = generate_test_buffers (num_buffers, ssrc, &payload_type);
-
-  /* clear the global buffers list, which we are going to use later */
-  gst_check_drop_buffers ();
-
-  /* setup element & pads */
-  rtxsend = gst_check_setup_element ("rtprtxsend");
-
-  pt_map = gst_structure_new ("application/x-rtp-pt-map",
-      "96", G_TYPE_UINT, rtx_payload_type, NULL);
-  ssrc_map = gst_structure_new ("application/x-rtp-ssrc-map",
-      "1234567", G_TYPE_UINT, rtx_ssrc, NULL);
-
-  /* in both cases we want the rtxsend queue to store 'half_buffers'
-   * amount of buffers at most. In max-size-packets mode, it's trivial.
-   * In max-size-time mode, we specify almost half a second, which is
-   * the equivalent of 15 frames in a 30fps video stream */
-  g_object_set (rtxsend,
-      "max-size-packets", test_with_time ? 0 : half_buffers,
-      "max-size-time", test_with_time ? 499 : 0,
-      "payload-type-map", pt_map, "ssrc-map", ssrc_map, NULL);
-  gst_structure_free (pt_map);
-  gst_structure_free (ssrc_map);
-
-  srcpad = gst_check_setup_src_pad (rtxsend, &srctemplate);
-  fail_unless_equals_int (gst_pad_set_active (srcpad, TRUE), TRUE);
-
-  sinkpad = gst_check_setup_sink_pad (rtxsend, &sinktemplate);
-  fail_unless_equals_int (gst_pad_set_active (sinkpad, TRUE), TRUE);
-
-  ASSERT_SET_STATE (rtxsend, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
-
-  caps = gst_caps_from_string ("application/x-rtp, "
-      "media = (string)video, payload = (int)96, "
-      "ssrc = (uint)1234567, clock-rate = (int)90000, "
-      "encoding-name = (string)RAW");
-  gst_check_setup_events (srcpad, rtxsend, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  /* now push all buffers and request retransmission every time for all of them */
-  node = in_buffers;
-  for (i = 1; i <= num_buffers; i++) {
-    GstBuffer *buffer = GST_BUFFER (node->data);
-
-    /* verify that the original packets are correct */
-    res = gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
-    fail_unless_equals_int (res, TRUE);
-    fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), ssrc);
-    fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&rtp),
-        payload_type);
-    fail_unless_equals_int (gst_rtp_buffer_get_seq (&rtp), i);
-    gst_rtp_buffer_unmap (&rtp);
-
-    /* retransmit all the previous ones */
-    for (j = 1; j < i; j++) {
-      /* synchronize with the chain() function of the "sinkpad"
-       * to make sure that rtxsend has pushed the rtx buffer out
-       * before continuing */
-      GList *last_out_buffer = g_list_last (buffers);
-      g_mutex_lock (&check_mutex);
-      fail_unless_equals_int (gst_pad_push_event (sinkpad,
-              create_rtx_event (j, ssrc, payload_type)), TRUE);
-      /* wait for the rtx packet only if we expect the element
-       * to actually retransmit something */
-      if (j >= MAX (i - half_buffers, 1)) {
-        guint64 end_time = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
-
-        while (last_out_buffer == g_list_last (buffers))
-          fail_unless (g_cond_wait_until (&check_cond, &check_mutex, end_time));
-      }
-      g_mutex_unlock (&check_mutex);
-    }
-
-    /* push this one */
-    gst_pad_push (srcpad, gst_buffer_ref (buffer));
-    node = g_list_next (node);
-  }
-
-  /* verify the result. buffers should be in this order (numbers are seqnums):
-   * 1, 1rtx, 2, 1rtx, 2rtx, 3, ... , 9, 5rtx, 6rtx, 7rtx, 8rtx, 9rtx, 10 */
-  {
-    GstRTPBuffer orig_rtp = GST_RTP_BUFFER_INIT;
-    gint expected_rtx_requests, expected_rtx_packets;
-    gint real_rtx_requests, real_rtx_packets;
-
-    /* verify statistics first */
-    expected_rtx_packets = half_buffers * half_buffers +
-        ((half_buffers - 1) / 2.0f) * half_buffers;
-    for (i = 1, expected_rtx_requests = 0; i < num_buffers; i++)
-      expected_rtx_requests += i;
-
-    g_object_get (rtxsend, "num-rtx-requests", &real_rtx_requests,
-        "num-rtx-packets", &real_rtx_packets, NULL);
-    fail_unless_equals_int (expected_rtx_requests, real_rtx_requests);
-    fail_unless_equals_int (expected_rtx_packets, real_rtx_packets);
-
-    /* and the number of actual buffers that we were pushed out of rtxsend */
-    fail_unless_equals_int (g_list_length (buffers),
-        num_buffers + expected_rtx_packets);
-
-    node = buffers;
-    for (i = 1; i <= num_buffers; i++) {
-      /* verify the retransmission packets */
-      for (j = MAX (i - half_buffers, 1); j < i; j++) {
-        GST_INFO ("checking %d, %d", i, j);
-
-        res = gst_rtp_buffer_map (GST_BUFFER (node->data), GST_MAP_READ, &rtp);
-        fail_unless_equals_int (res, TRUE);
-
-        fail_if (gst_rtp_buffer_get_ssrc (&rtp) == ssrc);
-        fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), rtx_ssrc);
-        fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&rtp),
-            rtx_payload_type);
-        fail_unless_equals_int (GST_READ_UINT16_BE (gst_rtp_buffer_get_payload (&rtp)), j);     /* j == rtx seqnum */
-
-        /* open the original packet for this rtx packet and verify timestamps */
-        res = gst_rtp_buffer_map (GST_BUFFER (g_list_nth_data (in_buffers,
-                    j - 1)), GST_MAP_READ, &orig_rtp);
-        fail_unless_equals_int (res, TRUE);
-        fail_unless_equals_int (gst_rtp_buffer_get_timestamp (&orig_rtp),
-            gst_rtp_buffer_get_timestamp (&rtp));
-        gst_rtp_buffer_unmap (&orig_rtp);
-
-        gst_rtp_buffer_unmap (&rtp);
-        node = g_list_next (node);
-      }
-
-      /* verify the normal rtp flow packet */
-      res = gst_rtp_buffer_map (GST_BUFFER (node->data), GST_MAP_READ, &rtp);
-      fail_unless_equals_int (res, TRUE);
-      fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), ssrc);
-      fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&rtp),
-          payload_type);
-      fail_unless_equals_int (gst_rtp_buffer_get_seq (&rtp), i);
-      gst_rtp_buffer_unmap (&rtp);
-      node = g_list_next (node);
-    }
-  }
-
-  g_list_free_full (in_buffers, (GDestroyNotify) gst_buffer_unref);
-  gst_check_drop_buffers ();
-
-  gst_check_teardown_src_pad (rtxsend);
-  gst_check_teardown_sink_pad (rtxsend);
-  gst_check_teardown_element (rtxsend);
-}
-
-GST_START_TEST (test_rtxsender_max_size_packets)
-{
-  test_rtxsender_packet_retention (FALSE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_rtxsender_max_size_time)
-{
-  test_rtxsender_packet_retention (TRUE);
-}
-
-GST_END_TEST;
-
-static void
 compare_rtp_packets (GstBuffer * a, GstBuffer * b)
 {
   GstRTPBuffer rtp_a = GST_RTP_BUFFER_INIT;
@@ -1488,90 +98,469 @@
   gst_rtp_buffer_unmap (&rtp_b);
 }
 
-GST_START_TEST (test_rtxreceive_data_reconstruction)
+static GstBuffer *
+create_rtp_buffer (guint32 ssrc, guint8 payload_type, guint16 seqnum)
 {
-  const guint ssrc = 1234567;
-  GList *in_buffers;
-  guint payload_type;
-  GstElement *rtxsend, *rtxrecv;
-  GstPad *srcpad, *sinkpad;
-  GstCaps *caps;
-  GstBuffer *buffer;
+  GstRTPBuffer rtpbuf = GST_RTP_BUFFER_INIT;
+  guint payload_size = 29;
+  guint64 timestamp = gst_util_uint64_scale_int (seqnum, 90000, 30);
+  GstBuffer *buf = gst_rtp_buffer_new_allocate (payload_size, 0, 0);
+
+  gst_rtp_buffer_map (buf, GST_MAP_WRITE, &rtpbuf);
+  gst_rtp_buffer_set_ssrc (&rtpbuf, ssrc);
+  gst_rtp_buffer_set_payload_type (&rtpbuf, payload_type);
+  gst_rtp_buffer_set_seq (&rtpbuf, seqnum);
+  gst_rtp_buffer_set_timestamp (&rtpbuf, (guint32) timestamp);
+  memset (gst_rtp_buffer_get_payload (&rtpbuf), 0x29, payload_size);
+  gst_rtp_buffer_unmap (&rtpbuf);
+  return buf;
+}
+
+static GstBuffer *
+create_rtp_buffer_with_timestamp (guint32 ssrc, guint8 payload_type,
+    guint16 seqnum, guint32 timestamp)
+{
+  GstRTPBuffer rtpbuf = GST_RTP_BUFFER_INIT;
+  GstBuffer *buf = create_rtp_buffer (ssrc, payload_type, seqnum);
+  gst_rtp_buffer_map (buf, GST_MAP_WRITE, &rtpbuf);
+  gst_rtp_buffer_set_timestamp (&rtpbuf, timestamp);
+  gst_rtp_buffer_unmap (&rtpbuf);
+  return buf;
+}
+
+GST_START_TEST (test_rtxsend_rtxreceive)
+{
+  const guint packets_num = 5;
+  guint master_ssrc = 1234567;
+  guint master_pt = 96;
+  guint rtx_pt = 99;
   GstStructure *pt_map;
-
-  /* generate test data  */
-  in_buffers = generate_test_buffers (1, ssrc, &payload_type);
-
-  /* clear the global buffers list, which we are going to use later */
-  gst_check_drop_buffers ();
-
-  /* setup element & pads */
-  rtxsend = gst_check_setup_element ("rtprtxsend");
-  rtxrecv = gst_check_setup_element ("rtprtxreceive");
+  GstBuffer *inbufs[5];
+  GstHarness *hrecv = gst_harness_new ("rtprtxreceive");
+  GstHarness *hsend = gst_harness_new ("rtprtxsend");
 
   pt_map = gst_structure_new ("application/x-rtp-pt-map",
-      "96", G_TYPE_UINT, 99, NULL);
-  g_object_set (rtxsend, "payload-type-map", pt_map, NULL);
-  g_object_set (rtxrecv, "payload-type-map", pt_map, NULL);
-  gst_structure_free (pt_map);
+      "96", G_TYPE_UINT, rtx_pt, NULL);
+  g_object_set (hrecv->element, "payload-type-map", pt_map, NULL);
+  g_object_set (hsend->element, "payload-type-map", pt_map, NULL);
 
-  fail_unless_equals_int (gst_element_link (rtxsend, rtxrecv), TRUE);
-
-  srcpad = gst_check_setup_src_pad (rtxsend, &srctemplate);
-  fail_unless_equals_int (gst_pad_set_active (srcpad, TRUE), TRUE);
-
-  sinkpad = gst_check_setup_sink_pad (rtxrecv, &sinktemplate);
-  fail_unless_equals_int (gst_pad_set_active (sinkpad, TRUE), TRUE);
-
-  ASSERT_SET_STATE (rtxsend, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
-  ASSERT_SET_STATE (rtxrecv, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
-
-  caps = gst_caps_from_string ("application/x-rtp, "
+  gst_harness_set_src_caps_str (hsend, "application/x-rtp, "
       "media = (string)video, payload = (int)96, "
       "ssrc = (uint)1234567, clock-rate = (int)90000, "
       "encoding-name = (string)RAW");
-  gst_check_setup_events (srcpad, rtxsend, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
+  gst_harness_set_src_caps_str (hrecv, "application/x-rtp, "
+      "media = (string)video, payload = (int)96, "
+      "ssrc = (uint)1234567, clock-rate = (int)90000, "
+      "encoding-name = (string)RAW");
 
-  /* push buffer */
-  buffer = gst_buffer_ref (GST_BUFFER (in_buffers->data));
-  fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
-
-  /* push retransmission request */
-  {
-    GList *last_out_buffer;
-    guint64 end_time;
-    gboolean res;
-
-    /* synchronize with the chain() function of the "sinkpad"
-     * to make sure that rtxsend has pushed the rtx buffer out
-     * before continuing */
-    last_out_buffer = g_list_last (buffers);
-    g_mutex_lock (&check_mutex);
-    fail_unless_equals_int (gst_pad_push_event (sinkpad,
-            create_rtx_event (1, ssrc, payload_type)), TRUE);
-    end_time = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
-    do
-      res = g_cond_wait_until (&check_cond, &check_mutex, end_time);
-    while (res == TRUE && last_out_buffer == g_list_last (buffers));
-    fail_unless_equals_int (res, TRUE);
-    g_mutex_unlock (&check_mutex);
+  /* Push 'packets_num' packets through rtxsend to rtxreceive */
+  for (gint i = 0; i < packets_num; ++i) {
+    inbufs[i] = create_rtp_buffer (master_ssrc, master_pt, 100 + i);
+    gst_harness_push (hsend, gst_buffer_ref (inbufs[i]));
+    gst_harness_push (hrecv, gst_harness_pull (hsend));
+    pull_and_verify (hrecv, FALSE, master_ssrc, master_pt, 100 + i);
   }
 
-  /* verify */
-  fail_unless_equals_int (g_list_length (buffers), 2);
-  compare_rtp_packets (GST_BUFFER (buffers->data),
-      GST_BUFFER (buffers->next->data));
+  /* Getting rid of reconfigure event. Preparation before the next step */
+  gst_event_unref (gst_harness_pull_upstream_event (hrecv));
+  fail_unless_equals_int (gst_harness_upstream_events_in_queue (hrecv), 0);
 
-  /* cleanup */
-  g_list_free_full (in_buffers, (GDestroyNotify) gst_buffer_unref);
-  gst_check_drop_buffers ();
+  /* Push 'packets_num' RTX events through rtxreceive to rtxsend.
+     Push RTX packets from rtxsend to rtxreceive and
+     check that the packet produced out of RTX packet is the same
+     as an original packet */
+  for (gint i = 0; i < packets_num; ++i) {
+    GstBuffer *outbuf;
+    gst_harness_push_upstream_event (hrecv,
+        create_rtx_event (master_ssrc, master_pt, 100 + i));
+    gst_harness_push_upstream_event (hsend,
+        gst_harness_pull_upstream_event (hrecv));
+    gst_harness_push (hrecv, gst_harness_pull (hsend));
 
-  gst_check_teardown_src_pad (rtxsend);
-  gst_check_teardown_sink_pad (rtxrecv);
-  gst_element_unlink (rtxsend, rtxrecv);
-  gst_check_teardown_element (rtxsend);
-  gst_check_teardown_element (rtxrecv);
+    outbuf = gst_harness_pull (hrecv);
+    compare_rtp_packets (inbufs[i], outbuf);
+    gst_buffer_unref (inbufs[i]);
+    gst_buffer_unref (outbuf);
+  }
+
+  /* Check RTX stats */
+  {
+    guint rtx_requests;
+    guint rtx_packets;
+    guint rtx_assoc_packets;
+    g_object_get (G_OBJECT (hsend->element),
+        "num-rtx-requests", &rtx_requests,
+        "num-rtx-packets", &rtx_packets, NULL);
+    fail_unless_equals_int (rtx_packets, packets_num);
+    fail_unless_equals_int (rtx_requests, packets_num);
+
+    g_object_get (G_OBJECT (hrecv->element),
+        "num-rtx-requests", &rtx_requests,
+        "num-rtx-packets", &rtx_packets,
+        "num-rtx-assoc-packets", &rtx_assoc_packets, NULL);
+    fail_unless_equals_int (rtx_packets, packets_num);
+    fail_unless_equals_int (rtx_requests, packets_num);
+    fail_unless_equals_int (rtx_assoc_packets, packets_num);
+  }
+
+  gst_structure_free (pt_map);
+  gst_harness_teardown (hrecv);
+  gst_harness_teardown (hsend);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtxsend_rtxreceive_with_packet_loss)
+{
+  guint packets_num = 20;
+  guint master_ssrc = 1234567;
+  guint master_pt = 96;
+  guint rtx_pt = 99;
+  guint seqnum = 100;
+  guint expected_rtx_packets = 0;
+  GstStructure *pt_map;
+  GstHarness *hrecv = gst_harness_new ("rtprtxreceive");
+  GstHarness *hsend = gst_harness_new ("rtprtxsend");
+
+  pt_map = gst_structure_new ("application/x-rtp-pt-map",
+      "96", G_TYPE_UINT, rtx_pt, NULL);
+  g_object_set (hrecv->element, "payload-type-map", pt_map, NULL);
+  g_object_set (hsend->element, "payload-type-map", pt_map, NULL);
+
+  gst_harness_set_src_caps_str (hsend, "application/x-rtp, "
+      "media = (string)video, payload = (int)96, "
+      "ssrc = (uint)1234567, clock-rate = (int)90000, "
+      "encoding-name = (string)RAW");
+  gst_harness_set_src_caps_str (hrecv, "application/x-rtp, "
+      "media = (string)video, payload = (int)96, "
+      "ssrc = (uint)1234567, clock-rate = (int)90000, "
+      "encoding-name = (string)RAW");
+
+  /* Getting rid of reconfigure event. Making sure there is no upstream
+     events in the queue. Preparation step before the test. */
+  gst_event_unref (gst_harness_pull_upstream_event (hrecv));
+  fail_unless_equals_int (gst_harness_upstream_events_in_queue (hrecv), 0);
+
+  /* Push 'packets_num' packets through rtxsend to rtxreceive loosing every
+     'drop_every_n_packets' packet. When we loose the packet we send RTX event
+     through rtxreceive to rtxsend, and verify the packet was retransmitted */
+  for (gint drop_nth_packet = 2; drop_nth_packet < 10; ++drop_nth_packet) {
+    for (gint i = 0; i < packets_num; ++i, ++seqnum) {
+      GstBuffer *outbuf;
+      GstBuffer *inbuf = create_rtp_buffer (master_ssrc, master_pt, seqnum);
+      gboolean drop_this_packet = ((i + 1) % drop_nth_packet) == 0;
+
+      gst_harness_push (hsend, gst_buffer_ref (inbuf));
+      if (drop_this_packet) {
+        /* Dropping original packet */
+        gst_buffer_unref (gst_harness_pull (hsend));
+        /* Requesting retransmission */
+        gst_harness_push_upstream_event (hrecv,
+            create_rtx_event (master_ssrc, master_pt, seqnum));
+        gst_harness_push_upstream_event (hsend,
+            gst_harness_pull_upstream_event (hrecv));
+        /* Pushing RTX packet to rtxreceive */
+        gst_harness_push (hrecv, gst_harness_pull (hsend));
+        ++expected_rtx_packets;
+      } else {
+        gst_harness_push (hrecv, gst_harness_pull (hsend));
+      }
+
+      /* We making sure every buffer we pull is the same as original input
+         buffer */
+      outbuf = gst_harness_pull (hrecv);
+      compare_rtp_packets (inbuf, outbuf);
+      gst_buffer_unref (inbuf);
+      gst_buffer_unref (outbuf);
+
+      /*
+         We should not have any packets in the harness queue by this point. It
+         means rtxsend didn't send more packets than RTX events and rtxreceive
+         didn't produce more than one packet per RTX packet.
+       */
+      fail_unless_equals_int (gst_harness_buffers_in_queue (hsend), 0);
+      fail_unless_equals_int (gst_harness_buffers_in_queue (hrecv), 0);
+    }
+  }
+
+  /* Check RTX stats */
+  {
+    guint rtx_requests;
+    guint rtx_packets;
+    guint rtx_assoc_packets;
+    g_object_get (G_OBJECT (hsend->element),
+        "num-rtx-requests", &rtx_requests,
+        "num-rtx-packets", &rtx_packets, NULL);
+    fail_unless_equals_int (rtx_packets, expected_rtx_packets);
+    fail_unless_equals_int (rtx_requests, expected_rtx_packets);
+
+    g_object_get (G_OBJECT (hrecv->element),
+        "num-rtx-requests", &rtx_requests,
+        "num-rtx-packets", &rtx_packets,
+        "num-rtx-assoc-packets", &rtx_assoc_packets, NULL);
+    fail_unless_equals_int (rtx_packets, expected_rtx_packets);
+    fail_unless_equals_int (rtx_requests, expected_rtx_packets);
+    fail_unless_equals_int (rtx_assoc_packets, expected_rtx_packets);
+  }
+
+  gst_structure_free (pt_map);
+  gst_harness_teardown (hrecv);
+  gst_harness_teardown (hsend);
+}
+
+GST_END_TEST;
+
+typedef struct
+{
+  GstHarness *h;
+  guint master_ssrc;
+  guint master_pt;
+  guint rtx_ssrc;
+  guint rtx_pt;
+  guint seqnum;
+  guint expected_rtx_packets;
+} RtxSender;
+
+static GstStructure *
+create_rtxsenders (RtxSender * senders, guint senders_num)
+{
+  GstStructure *recv_pt_map =
+      gst_structure_new_empty ("application/x-rtp-pt-map");
+
+  for (gint i = 0; i < senders_num; ++i) {
+    gchar *master_pt_str;
+    gchar *master_caps_str;
+    GstStructure *send_pt_map;
+
+    senders[i].h = gst_harness_new ("rtprtxsend");
+    senders[i].master_ssrc = 1234567 + i;
+    senders[i].rtx_ssrc = 7654321 + i;
+    senders[i].master_pt = 80 + i;
+    senders[i].rtx_pt = 20 + i;
+    senders[i].seqnum = i * 1000;
+    senders[i].expected_rtx_packets = 0;
+
+    master_pt_str = g_strdup_printf ("%u", senders[i].master_pt);
+    master_caps_str = g_strdup_printf ("application/x-rtp, "
+        "media = (string)video, payload = (int)%u, "
+        "ssrc = (uint)%u, clock-rate = (int)90000, "
+        "encoding-name = (string)RAW",
+        senders[i].master_pt, senders[i].master_ssrc);
+
+    send_pt_map = gst_structure_new ("application/x-rtp-pt-map",
+        master_pt_str, G_TYPE_UINT, senders[i].rtx_pt, NULL);
+    gst_structure_set (recv_pt_map,
+        master_pt_str, G_TYPE_UINT, senders[i].rtx_pt, NULL);
+
+    g_object_set (senders[i].h->element, "payload-type-map", send_pt_map, NULL);
+    gst_harness_set_src_caps_str (senders[i].h, master_caps_str);
+
+    gst_structure_free (send_pt_map);
+    g_free (master_pt_str);
+    g_free (master_caps_str);
+  }
+  return recv_pt_map;
+}
+
+static guint
+check_rtxsenders_stats_and_teardown (RtxSender * senders, guint senders_num)
+{
+  guint total_pakets_num = 0;
+  for (gint i = 0; i < senders_num; ++i) {
+    guint rtx_requests;
+    guint rtx_packets;
+    g_object_get (G_OBJECT (senders[i].h->element),
+        "num-rtx-requests", &rtx_requests,
+        "num-rtx-packets", &rtx_packets, NULL);
+    fail_unless_equals_int (rtx_packets, senders[i].expected_rtx_packets);
+    fail_unless_equals_int (rtx_requests, senders[i].expected_rtx_packets);
+    total_pakets_num += rtx_packets;
+
+    gst_harness_teardown (senders[i].h);
+  }
+  return total_pakets_num;
+}
+
+GST_START_TEST (test_multi_rtxsend_rtxreceive_with_packet_loss)
+{
+  guint senders_num = 5;
+  guint packets_num = 10;
+  guint total_pakets_num = senders_num * packets_num;
+  guint total_dropped_packets = 0;
+  RtxSender senders[5];
+  GstStructure *pt_map;
+  GstHarness *hrecv = gst_harness_new ("rtprtxreceive");
+
+  pt_map = create_rtxsenders (senders, 5);
+  g_object_set (hrecv->element, "payload-type-map", pt_map, NULL);
+  gst_harness_set_src_caps_str (hrecv, "application/x-rtp, "
+      "media = (string)video, payload = (int)80, "
+      "ssrc = (uint)1234567, clock-rate = (int)90000, "
+      "encoding-name = (string)RAW");
+
+  /* Getting rid of reconfigure event. Making sure there is no upstream
+     events in the queue. Preparation step before the test. */
+  gst_event_unref (gst_harness_pull_upstream_event (hrecv));
+  fail_unless_equals_int (gst_harness_upstream_events_in_queue (hrecv), 0);
+
+  /* We are going to push the 1st packet from the 1st sender, 2nd from the 2nd,
+     3rd from the 3rd, etc. until all the senders will push 'packets_num' packets.
+     We will drop every 'drop_nth_packet' packet and request its retransmission
+     from all the senders. Because only one of them can produce RTX packet.
+     We need to make sure that all other senders will ignore the RTX event they
+     can't act upon.
+   */
+  for (gint drop_nth_packet = 2; drop_nth_packet < 5; ++drop_nth_packet) {
+    for (gint i = 0; i < total_pakets_num; ++i) {
+      RtxSender *sender = &senders[i % senders_num];
+      gboolean drop_this_packet = ((i + 1) % drop_nth_packet) == 0;
+      GstBuffer *outbuf, *inbuf;
+      inbuf =
+          create_rtp_buffer (sender->master_ssrc, sender->master_pt,
+          sender->seqnum);
+
+      gst_harness_push (sender->h, gst_buffer_ref (inbuf));
+      if (drop_this_packet) {
+        GstEvent *rtxevent;
+        /* Dropping original packet */
+        gst_buffer_unref (gst_harness_pull (sender->h));
+
+        /* Pushing RTX event through rtxreceive to all the senders */
+        gst_harness_push_upstream_event (hrecv,
+            create_rtx_event (sender->master_ssrc, sender->master_pt,
+                sender->seqnum));
+        rtxevent = gst_harness_pull_upstream_event (hrecv);
+
+        /* ... to all the senders */
+        for (gint j = 0; j < senders_num; ++j)
+          gst_harness_push_upstream_event (senders[j].h,
+              gst_event_ref (rtxevent));
+        gst_event_unref (rtxevent);
+
+        /* Pushing RTX packet to rtxreceive */
+        gst_harness_push (hrecv, gst_harness_pull (sender->h));
+        ++sender->expected_rtx_packets;
+        ++total_dropped_packets;
+      } else {
+        gst_harness_push (hrecv, gst_harness_pull (sender->h));
+      }
+
+      /* It should not matter whether the buffer was dropped (and retransmitted)
+         or it went straight through rtxsend to rtxreceive. We should always pull
+         the same buffer that was pushed */
+      outbuf = gst_harness_pull (hrecv);
+      compare_rtp_packets (inbuf, outbuf);
+      gst_buffer_unref (inbuf);
+      gst_buffer_unref (outbuf);
+
+      /*
+         We should not have any packets in the harness queue by this point. It
+         means our senders didn't produce the packets for the unknown RTX event.
+       */
+      for (gint j = 0; j < senders_num; ++j)
+        fail_unless_equals_int (gst_harness_buffers_in_queue (senders[j].h), 0);
+
+      ++sender->seqnum;
+    }
+  }
+
+  /* Check RTX stats */
+  {
+    guint total_rtx_packets;
+    guint rtx_requests;
+    guint rtx_packets;
+    guint rtx_assoc_packets;
+
+    total_rtx_packets =
+        check_rtxsenders_stats_and_teardown (senders, senders_num);
+    fail_unless_equals_int (total_rtx_packets, total_dropped_packets);
+
+    g_object_get (G_OBJECT (hrecv->element),
+        "num-rtx-requests", &rtx_requests,
+        "num-rtx-packets", &rtx_packets,
+        "num-rtx-assoc-packets", &rtx_assoc_packets, NULL);
+    fail_unless_equals_int (rtx_packets, total_rtx_packets);
+    fail_unless_equals_int (rtx_requests, total_rtx_packets);
+    fail_unless_equals_int (rtx_assoc_packets, total_rtx_packets);
+  }
+
+  gst_structure_free (pt_map);
+  gst_harness_teardown (hrecv);
+}
+
+GST_END_TEST;
+
+static void
+test_rtxsender_packet_retention (gboolean test_with_time)
+{
+  guint master_ssrc = 1234567;
+  guint master_pt = 96;
+  guint rtx_ssrc = 7654321;
+  guint rtx_pt = 99;
+  gint num_buffers = test_with_time ? 30 : 10;
+  gint half_buffers = num_buffers / 2;
+  guint timestamp_delta = 90000 / 30;
+  guint timestamp = G_MAXUINT32 - half_buffers * timestamp_delta;
+  GstHarness *h;
+  GstStructure *pt_map = gst_structure_new ("application/x-rtp-pt-map",
+      "96", G_TYPE_UINT, rtx_pt, NULL);
+  GstStructure *ssrc_map = gst_structure_new ("application/x-rtp-ssrc-map",
+      "1234567", G_TYPE_UINT, rtx_ssrc, NULL);
+
+  h = gst_harness_new ("rtprtxsend");
+
+  /* In both cases we want the rtxsend queue to store 'half_buffers'
+     amount of buffers at most. In max-size-packets mode, it's trivial.
+     In max-size-time mode, we specify almost half a second, which is
+     the equivalent of 15 frames in a 30fps video stream.
+   */
+  g_object_set (h->element,
+      "max-size-packets", test_with_time ? 0 : half_buffers,
+      "max-size-time", test_with_time ? 499 : 0,
+      "payload-type-map", pt_map, "ssrc-map", ssrc_map, NULL);
+
+  gst_harness_set_src_caps_str (h, "application/x-rtp, "
+      "media = (string)video, payload = (int)96, "
+      "ssrc = (uint)1234567, clock-rate = (int)90000, "
+      "encoding-name = (string)RAW");
+
+  /* Now push all buffers and request retransmission every time for all of them */
+  for (gint i = 0; i < num_buffers; ++i, timestamp += timestamp_delta) {
+    /* Request to retransmit all the previous ones */
+    for (gint j = 0; j < i; ++j) {
+      guint rtx_seqnum = 0x100 + j;
+      gst_harness_push_upstream_event (h,
+          create_rtx_event (master_ssrc, master_pt, rtx_seqnum));
+
+      /* Pull only the ones supposed to be retransmited */
+      if (j >= i - half_buffers)
+        pull_and_verify (h, TRUE, rtx_ssrc, rtx_pt, rtx_seqnum);
+    }
+    /* Check there no extra buffers in the harness queue */
+    fail_unless_equals_int (gst_harness_buffers_in_queue (h), 0);
+
+    /* We create RTP buffers with timestamps that will eventualy wrap around 0
+       to be sure, rtprtxsend can handle it properly */
+    push_pull_and_verify (h,
+        create_rtp_buffer_with_timestamp (master_ssrc, master_pt, 0x100 + i,
+            timestamp), FALSE, master_ssrc, master_pt, 0x100 + i);
+  }
+
+  gst_structure_free (pt_map);
+  gst_structure_free (ssrc_map);
+  gst_harness_teardown (h);
+}
+
+GST_START_TEST (test_rtxsender_max_size_packets)
+{
+  test_rtxsender_packet_retention (FALSE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtxsender_max_size_time)
+{
+  test_rtxsender_packet_retention (TRUE);
 }
 
 GST_END_TEST;
@@ -1586,12 +575,11 @@
 
   suite_add_tcase (s, tc_chain);
 
-  tcase_add_test (tc_chain, test_push_forward_seq);
-  tcase_add_test (tc_chain, test_drop_one_sender);
-  tcase_add_test (tc_chain, test_drop_multiple_sender);
+  tcase_add_test (tc_chain, test_rtxsend_rtxreceive);
+  tcase_add_test (tc_chain, test_rtxsend_rtxreceive_with_packet_loss);
+  tcase_add_test (tc_chain, test_multi_rtxsend_rtxreceive_with_packet_loss);
   tcase_add_test (tc_chain, test_rtxsender_max_size_packets);
   tcase_add_test (tc_chain, test_rtxsender_max_size_time);
-  tcase_add_test (tc_chain, test_rtxreceive_data_reconstruction);
 
   return s;
 }
diff --git a/tests/check/elements/rtpvp9.c b/tests/check/elements/rtpvp9.c
new file mode 100644
index 0000000..1430c5f
--- /dev/null
+++ b/tests/check/elements/rtpvp9.c
@@ -0,0 +1,113 @@
+/* GStreamer
+ *
+ * Copyright (C) 2016 Pexip AS
+ *   @author Stian Selnes <stian@pexip.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.
+ */
+
+#include <gst/check/check.h>
+#include <gst/check/gstharness.h>
+
+#define RTP_VP9_CAPS_STR \
+  "application/x-rtp,media=video,encoding-name=VP9,clock-rate=90000,payload=96"
+
+
+GST_START_TEST (test_depay_flexible_mode)
+{
+  /* b-bit, e-bit, f-bit and marker bit set */
+  /* First packet of first frame, handcrafted to also set the e-bit and marker
+   * bit in addition to changing the seqnum */
+  guint8 intra[] = {
+    0x80, 0xf4, 0x00, 0x00, 0x49, 0xb5, 0xbe, 0x32, 0xb1, 0x01, 0x64, 0xd1,
+    0xbc, 0x98, 0xbf, 0x00, 0x83, 0x49, 0x83, 0x42, 0x00, 0x77, 0xf0, 0x43,
+    0x71, 0xd8, 0xe0, 0x90, 0x70, 0x66, 0x80, 0x60, 0x0e, 0xf0, 0x5f, 0xfd,
+  };
+  /* b-bit, e-bit, p-bit, f-bit and marker bit set */
+  /* First packet of second frame, handcrafted to also set the e-bit and
+   * marker bit in addition to changing the seqnum */
+  guint8 inter[] = {
+    0x80, 0xf4, 0x00, 0x01, 0x49, 0xb6, 0x02, 0xc0, 0xb1, 0x01, 0x64, 0xd1,
+    0xfc, 0x98, 0xc0, 0x00, 0x02, 0x87, 0x01, 0x00, 0x09, 0x3f, 0x1c, 0x12,
+    0x0e, 0x0c, 0xd0, 0x1b, 0xa7, 0x80, 0x80, 0xb0, 0x18, 0x0f, 0xda, 0x11,
+  };
+
+  GstHarness *h = gst_harness_new ("rtpvp9depay");
+  gst_harness_set_src_caps_str (h, RTP_VP9_CAPS_STR);
+
+  gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+          intra, sizeof (intra), 0, sizeof (intra), NULL, NULL));
+  fail_unless_equals_int (1, gst_harness_buffers_received (h));
+
+  gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+          inter, sizeof (inter), 0, sizeof (inter), NULL, NULL));
+  fail_unless_equals_int (2, gst_harness_buffers_received (h));
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_depay_non_flexible_mode)
+{
+  /* b-bit, e-bit and  marker bit set. f-bit NOT set */
+  /* First packet of first frame, handcrafted to also set the e-bit and marker
+   * bit in addition to changing the seqnum */
+  guint8 intra[] = {
+    0x80, 0xf4, 0x00, 0x00, 0x49, 0x88, 0xd9, 0xf8, 0xa0, 0x6c, 0x65, 0x6c,
+    0x8c, 0x98, 0xc0, 0x87, 0x01, 0x02, 0x49, 0x3f, 0x1c, 0x12, 0x0e, 0x0c,
+    0xd0, 0x1b, 0xb9, 0x80, 0x80, 0xb0, 0x18, 0x0f, 0xa6, 0x4d, 0x01, 0xa5
+  };
+  /* b-bit, e-bit, p-bit  and marker bit set. f-bit NOT set */
+  /* First packet of second frame, handcrafted to also set the e-bit and
+   * marker bit in addition to changing the seqnum */
+  guint8 inter[] = {
+    0x80, 0xf4, 0x00, 0x01, 0x49, 0x88, 0xe5, 0x38, 0xa0, 0x6c, 0x65, 0x6c,
+    0xcc, 0x98, 0xc1, 0x87, 0x01, 0x02, 0x49, 0x3f, 0x1c, 0x12, 0x0e, 0x0c,
+    0xd0, 0x1b, 0x97, 0x80, 0x80, 0xb0, 0x18, 0x0f, 0x8a, 0x9f, 0x01, 0xbc
+  };
+
+  GstHarness *h = gst_harness_new ("rtpvp9depay");
+  gst_harness_set_src_caps_str (h, RTP_VP9_CAPS_STR);
+
+  gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+          intra, sizeof (intra), 0, sizeof (intra), NULL, NULL));
+  fail_unless_equals_int (1, gst_harness_buffers_received (h));
+
+  gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+          inter, sizeof (inter), 0, sizeof (inter), NULL, NULL));
+  fail_unless_equals_int (2, gst_harness_buffers_received (h));
+
+  gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+
+
+static Suite *
+rtpvp9_suite (void)
+{
+  Suite *s = suite_create ("rtpvp9");
+  TCase *tc_chain;
+
+  suite_add_tcase (s, (tc_chain = tcase_create ("vp9depay")));
+  tcase_add_test (tc_chain, test_depay_flexible_mode);
+  tcase_add_test (tc_chain, test_depay_non_flexible_mode);
+
+  return s;
+}
+
+GST_CHECK_MAIN (rtpvp9);
diff --git a/tests/check/elements/videobox.c b/tests/check/elements/videobox.c
index ec4825a..2d26535 100644
--- a/tests/check/elements/videobox.c
+++ b/tests/check/elements/videobox.c
@@ -163,7 +163,6 @@
   fail_unless (bus != NULL);
 
   gst_bus_add_watch (bus, bus_handler, loop);
-  gst_object_unref (bus);
 
   conversions_test_size = G_N_ELEMENTS (conversion_table);
   for (itr = 0; itr < conversions_test_size; itr++) {
@@ -200,6 +199,8 @@
         "couldn't set pipeline to READY state");
   }
 
+  gst_bus_remove_watch (bus);
+  gst_object_unref (bus);
   g_main_loop_unref (loop);
 
   videobox_test_deinit_context (&ctx);
diff --git a/tests/check/elements/vp9enc.c b/tests/check/elements/vp9enc.c
new file mode 100644
index 0000000..62bc97f
--- /dev/null
+++ b/tests/check/elements/vp9enc.c
@@ -0,0 +1,76 @@
+/* GStreamer
+ *
+ * Copyright (c) 2016 Stian Selnes <stian@pexip.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.
+ */
+#include <gst/check/gstharness.h>
+#include <gst/check/gstcheck.h>
+#include <gst/video/video.h>
+
+GST_START_TEST (test_encode_lag_in_frames)
+{
+  GstHarness *h = gst_harness_new_parse ("vp9enc lag-in-frames=5 cpu-used=8 "
+      "deadline=1");
+  gst_harness_add_src_parse (h, "videotestsrc is-live=true pattern=black ! "
+      "capsfilter caps=\"video/x-raw,width=320,height=240,framerate=25/1\"",
+      TRUE);
+
+  /* Push 20 buffers into the encoder */
+  fail_unless_equals_int (GST_FLOW_OK,
+      gst_harness_src_crank_and_push_many (h, 20, 20));
+
+  /* Only 5 buffers are allowed to be queued now */
+  fail_unless (gst_harness_buffers_received (h) > 15);
+
+  /* EOS will cause the remaining buffers to be drained */
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
+  fail_unless_equals_int (gst_harness_buffers_received (h), 20);
+
+  for (gint i = 0; i < 20; i++) {
+    GstBuffer *buffer = gst_harness_pull (h);
+
+    if (i == 0)
+      fail_if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT));
+
+    fail_unless_equals_uint64 (GST_BUFFER_TIMESTAMP (buffer),
+        gst_util_uint64_scale (i, GST_SECOND, 25));
+    fail_unless_equals_uint64 (GST_BUFFER_DURATION (buffer),
+        gst_util_uint64_scale (1, GST_SECOND, 25));
+
+    gst_buffer_unref (buffer);
+  }
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+vp9enc_suite (void)
+{
+  Suite *s = suite_create ("vp9enc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+
+  tcase_add_test (tc_chain, test_encode_lag_in_frames);
+
+  return s;
+}
+
+GST_CHECK_MAIN (vp9enc);
diff --git a/tests/check/pipelines/effectv.c b/tests/check/pipelines/effectv.c
index 6c25e4b..a14806e 100644
--- a/tests/check/pipelines/effectv.c
+++ b/tests/check/pipelines/effectv.c
@@ -72,7 +72,6 @@
 
   g_signal_connect (bus, "message", (GCallback) on_message_cb, &omud);
 
-  gst_object_unref (bus);
 
   ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
   fail_unless (ret == GST_STATE_CHANGE_SUCCESS
@@ -85,6 +84,8 @@
 
   fail_unless (omud.eos == TRUE);
 
+  gst_bus_remove_signal_watch (bus);
+  gst_object_unref (bus);
   gst_object_unref (pipeline);
   g_main_loop_unref (loop);
 }
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 008ae56..6426db1 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -102,6 +102,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -320,6 +321,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -426,6 +428,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -493,6 +498,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/audiofx/Makefile.in b/tests/examples/audiofx/Makefile.in
index 6829e56..3b2c0b1 100644
--- a/tests/examples/audiofx/Makefile.in
+++ b/tests/examples/audiofx/Makefile.in
@@ -100,6 +100,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -324,6 +325,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -430,6 +432,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -497,6 +502,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/cairo/Makefile.in b/tests/examples/cairo/Makefile.in
index a024e6a..529d892 100644
--- a/tests/examples/cairo/Makefile.in
+++ b/tests/examples/cairo/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/equalizer/Makefile.in b/tests/examples/equalizer/Makefile.in
index aa96796..8c6e9b4 100644
--- a/tests/examples/equalizer/Makefile.in
+++ b/tests/examples/equalizer/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/equalizer/demo.c b/tests/examples/equalizer/demo.c
index 03b4ff6..70000e5 100644
--- a/tests/examples/equalizer/demo.c
+++ b/tests/examples/equalizer/demo.c
@@ -17,6 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
+/* TODO: We use gdk_cairo_create() and others, which are deprecated */
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
diff --git a/tests/examples/jack/Makefile.in b/tests/examples/jack/Makefile.in
index 644fe88..c98b1e4 100644
--- a/tests/examples/jack/Makefile.in
+++ b/tests/examples/jack/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -309,6 +310,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -415,6 +417,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -482,6 +487,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/level/Makefile.in b/tests/examples/level/Makefile.in
index 256b887..aa7e7bc 100644
--- a/tests/examples/level/Makefile.in
+++ b/tests/examples/level/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/pulse/Makefile.in b/tests/examples/pulse/Makefile.in
index 62d670a..fe47d0d 100644
--- a/tests/examples/pulse/Makefile.in
+++ b/tests/examples/pulse/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/rtp/Makefile.in b/tests/examples/rtp/Makefile.in
index 27134c5..89f412e 100644
--- a/tests/examples/rtp/Makefile.in
+++ b/tests/examples/rtp/Makefile.in
@@ -101,6 +101,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -337,6 +338,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -443,6 +445,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -510,6 +515,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/rtp/client-PCMA.c b/tests/examples/rtp/client-PCMA.c
index 664b336..8d7da61 100644
--- a/tests/examples/rtp/client-PCMA.c
+++ b/tests/examples/rtp/client-PCMA.c
@@ -88,13 +88,19 @@
   /* get the right session */
   g_signal_emit_by_name (rtpbin, "get-internal-session", sessid, &session);
 
+#if 0
+  /* FIXME: This is broken in rtpbin */
   /* get the internal source (the SSRC allocated to us, the receiver */
   g_object_get (session, "internal-source", &isrc, NULL);
   print_source_stats (isrc);
+  g_object_unref (isrc);
+#endif
 
   /* get the remote source that sent us RTCP */
   g_signal_emit_by_name (session, "get-source-by-ssrc", ssrc, &osrc);
   print_source_stats (osrc);
+  g_object_unref (osrc);
+  g_object_unref (session);
 }
 
 /* will be called when rtpbin has validated a payload that we can depayload */
diff --git a/tests/examples/shapewipe/Makefile.in b/tests/examples/shapewipe/Makefile.in
index 126e873..3d78500 100644
--- a/tests/examples/shapewipe/Makefile.in
+++ b/tests/examples/shapewipe/Makefile.in
@@ -100,6 +100,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -315,6 +316,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -421,6 +423,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -488,6 +493,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/spectrum/Makefile.in b/tests/examples/spectrum/Makefile.in
index 5732c30..88a8948 100644
--- a/tests/examples/spectrum/Makefile.in
+++ b/tests/examples/spectrum/Makefile.in
@@ -101,6 +101,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -332,6 +333,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -438,6 +440,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -505,6 +510,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/examples/spectrum/demo-audiotest.c b/tests/examples/spectrum/demo-audiotest.c
index a5151c9..afa90c4 100644
--- a/tests/examples/spectrum/demo-audiotest.c
+++ b/tests/examples/spectrum/demo-audiotest.c
@@ -35,6 +35,9 @@
 #include "config.h"
 #endif
 
+/* TODO: We use gdk_cairo_create() and others, which are deprecated */
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/tests/examples/spectrum/demo-osssrc.c b/tests/examples/spectrum/demo-osssrc.c
index da684c9..2e5b195 100644
--- a/tests/examples/spectrum/demo-osssrc.c
+++ b/tests/examples/spectrum/demo-osssrc.c
@@ -21,6 +21,9 @@
 #include "config.h"
 #endif
 
+/* TODO: We use gdk_cairo_create() and others, which are deprecated */
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/tests/examples/v4l2/Makefile.in b/tests/examples/v4l2/Makefile.in
index d0e38db..2b61ba1 100644
--- a/tests/examples/v4l2/Makefile.in
+++ b/tests/examples/v4l2/Makefile.in
@@ -99,6 +99,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 6fff90a..c4beb9b 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -97,6 +97,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -255,6 +256,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -361,6 +363,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -428,6 +433,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index 8aaa73e..b6f88cf 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -103,6 +103,7 @@
 	$(top_srcdir)/common/m4/as-libtool.m4 \
 	$(top_srcdir)/common/m4/as-version.m4 \
 	$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+	$(top_srcdir)/common/m4/ax_pthread.m4 \
 	$(top_srcdir)/common/m4/gst-arch.m4 \
 	$(top_srcdir)/common/m4/gst-args.m4 \
 	$(top_srcdir)/common/m4/gst-check.m4 \
@@ -410,6 +411,7 @@
 GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
 GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
 GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
 GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
 GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -516,6 +518,9 @@
 PLUGINDIR = @PLUGINDIR@
 POSUB = @POSUB@
 PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
 PULSE_CFLAGS = @PULSE_CFLAGS@
 PULSE_LIBS = @PULSE_LIBS@
 PYTHON = @PYTHON@
@@ -583,6 +588,7 @@
 am__quote = @am__quote@
 am__tar = @am__tar@
 am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
 bindir = @bindir@
 build = @build@
 build_alias = @build_alias@
diff --git a/win32/common/config.h b/win32/common/config.h
index 451017a..5a46b02 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -64,7 +64,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2016-06-06"
+#define GST_PACKAGE_RELEASE_DATETIME "2016-09-01"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -274,6 +274,12 @@
 /* Define to 1 if you have the <process.h> header file. */
 #define HAVE_PROCESS_H 1
 
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
+
 /* Define to enable pulseaudio plug-in (used by pulseaudio). */
 #undef HAVE_PULSE
 
@@ -395,7 +401,7 @@
 #define PACKAGE_NAME "GStreamer Good Plug-ins"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Good Plug-ins 1.9.1"
+#define PACKAGE_STRING "GStreamer Good Plug-ins 1.9.2"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-good"
@@ -404,7 +410,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.9.1"
+#define PACKAGE_VERSION "1.9.2"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -413,6 +419,10 @@
 #  define PLUGINDIR PREFIX "\\lib\\gstreamer-0.11"
 #endif
 
+/* Define to necessary symbol if this constant uses a non-standard name on
+   your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
 /* The size of `char', as computed by sizeof. */
 #undef SIZEOF_CHAR
 
@@ -435,7 +445,7 @@
 #undef TARGET_CPU
 
 /* Version number of package */
-#define VERSION "1.9.1"
+#define VERSION "1.9.2"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */