Merge tag 'upstream/1.9.90' into debian-experimental

Upstream version 1.9.90
diff --git a/ChangeLog b/ChangeLog
index 2a64354..c6f423a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,339 @@
-=== release 1.9.2 ===
+=== release 1.9.90 ===
 
-2016-09-01  Sebastian Dröge <slomo@coaxion.net>
+2016-09-30  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.9.2
+	  releasing 1.9.90
+
+2016-09-30 11:42:21 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/de.po:
+	  po: Update translations
+
+2016-09-29 19:54:52 +0530  Arun Raghavan <arun@osg.samsung.com>
+
+	* gst-libs/gst/audio/Makefile.am:
+	  audio-resampler: Add a missing header to noinst_HEADERS
+
+2016-09-29 19:45:16 +0530  Arun Raghavan <arun@osg.samsung.com>
+
+	* gst-libs/gst/audio/audio-resampler-x86-sse41.c:
+	* gst-libs/gst/audio/audio-resampler-x86.h:
+	  audiorsample: Fix build on 32-bit x86
+	  Turns out _mm_cvtsi128_si64() isn't available on 32-bit, so only build
+	  SSE 4.1 optimisations on x86-64 for now.
+
+2016-09-28 17:37:38 +0530  Arun Raghavan <arun@osg.samsung.com>
+
+	* configure.ac:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/audio-resampler-macros.h:
+	* gst-libs/gst/audio/audio-resampler-neon.h:
+	* gst-libs/gst/audio/audio-resampler-private.h:
+	* gst-libs/gst/audio/audio-resampler-x86-sse.c:
+	* gst-libs/gst/audio/audio-resampler-x86-sse.h:
+	* gst-libs/gst/audio/audio-resampler-x86-sse2.c:
+	* gst-libs/gst/audio/audio-resampler-x86-sse2.h:
+	* gst-libs/gst/audio/audio-resampler-x86-sse41.c:
+	* gst-libs/gst/audio/audio-resampler-x86-sse41.h:
+	* gst-libs/gst/audio/audio-resampler-x86.h:
+	* gst-libs/gst/audio/audio-resampler.c:
+	  audioresample: Separate out CFLAGS used for SSE* code
+	  This makes sure that we only build files that need explicit SIMD support
+	  with the relevant CFLAGS. This allows the rest of the code to be built
+	  without, and specific SSE* code is only called after runtime checks for
+	  CPU features.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=729276
+
+2016-09-28 19:08:52 +0530  Arun Raghavan <arun@osg.samsung.com>
+
+	* gst-libs/gst/audio/audio-resampler.c:
+	  audioresample: Fix some gobject introspection warnings
+
+2016-09-26 10:01:08 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/playback/gstplaybin3.c:
+	  playbin3: Remove fallback properties/signals
+	  These can all be used via the GstStream API
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769079
+
+2016-09-25 22:02:22 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/meson.build:
+	  tests: playbin-complex test needs oggdemux
+
+2016-09-24 21:11:32 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/videotimecode.c:
+	  tests: videotimecode: fix floating point comparisons
+	  Comparing floats for equality is not necessarily going to
+	  work reliably, so use fail_unless_equals_float() for this.
+	  Test would fail on x86 (Intel Atom x5-Z8300).
+
+2016-09-25 16:22:16 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/adder.c:
+	  tests: adder: disable racy flush_start_flush_stop test
+	  It's been broken for years, and it's unlikely it will ever
+	  be fixed for collectpads/adder now that there's audiomixer
+	  which works fine. So let's disable it, since all it does
+	  is that it creates noise that distracts from other failures.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=708891
+
+2016-09-22 16:15:54 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: take number of bits into account when copying
+	  Copy twice the amount of pixels for 16 bits formats.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=747225
+
+2016-09-20 15:12:22 -0400  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Correctly calculate group start times in reverse playback mode
+	  We have to calculate from the segment.stop, not the segment.start, as
+	  playback goes from stop to start. This fix works around another race
+	  condition in streamsynchronizer in my testcase.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=771479
+
+2016-09-20 17:31:55 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/examples/seek/stepping.c:
+	* tests/examples/seek/stepping2.c:
+	  examples: seek: fix build with MSVC
+	  Use G_PI instead of M_PI. Could also have defined
+	  _USE_MATH_DEFINES or included gst/math-compat.h but
+	  this seems simplest.
+
+2016-09-19 11:27:10 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/video/video-frame.c:
+	  doc: Add missing map flag to gst_video_frame_map()
+	  Add missing map flag, and also add unmap call.
+
+2016-09-17 12:42:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: Fix segment boundary checking for reverse playback
+
+2016-09-14 16:51:30 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: Don't adjust segment time in seek handler
+	  basesrc already did that very well for us, adjusting it again on top of
+	  that just breaks various non-standard seeks.
+
+2016-09-14 11:29:59 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  configure: Depend on gstreamer 1.9.2.1
+
+2016-09-14 10:14:18 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+	* gst-libs/gst/video/video-overlay-composition.c:
+	  videooverlaycomposition: document required map flags
+	  Fix documentation for gst_video_overlay_composition_blend(). The video frame
+	  needs to be mapped with GST_MAP_READWRITE flag.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=771382
+
+2016-09-12 18:37:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/playback/gsturisourcebin.c:
+	  playback: Use new gst_bin_set_suppressed_flags() API instead of worrying about the flags in multiple places
+
+2016-09-10 20:50:56 +1000  Jan Schmidt <jan@centricular.com>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From b18d820 to f980fd9
+
+2016-09-10 10:05:28 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/elements/.gitignore:
+	* tests/check/elements/videoscale.c:
+	* tests/check/meson.build:
+	  tests: videoscale: split test into multiple ones
+	  The videoscale test takes eternities to run, that's not
+	  great. Split the test into multiple ones. That way they
+	  can be run in parallel. Reduces time to run all tests in
+	  -base from 29 secs to 12 secs when using meson/ninja.
+
+2016-09-10 09:53:49 +1000  Jan Schmidt <jan@centricular.com>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From f49c55e to b18d820
+
+2016-09-07 17:02:23 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* tests/check/meson.build:
+	  meson: Raise test timeout to 3 minutes
+	  The videoscale testsuite (with 50 tests) last almost 2 minutes here
+
+2016-09-07 14:24:54 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* tests/check/libs/video.c:
+	  video/test: Coding style fix
+
+2016-09-05 19:55:58 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* tests/examples/overlay/meson.build:
+	  meson: Workaround the qt5 module not letting us now the preprocessor is not avalaible
+	  If moc-qt5 is not avalaible, meson breaks:
+	  https://github.com/mesonbuild/meson/issues/758
+
+2016-09-05 18:40:19 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* tests/examples/overlay/meson.build:
+	  meson: tests: Do not pull qt5 as a hard dependency
+
+2016-09-05 17:43:13 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* meson.build:
+	* tests/check/getpluginsdir:
+	* tests/check/meson.build:
+	  meson: Properly find where GStreamer plugins are when using subprojects
+	  And fix building with meson 0.34
+
+2016-09-05 12:22:36 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+	* meson.build:
+	  meson: Bump version to 1.9.2
+
+2016-08-26 11:30:16 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: safety for failing to determine time length in push mode
+	  If we can't find a valid granule near the end of the file, we
+	  disable seeking. This guards against the whole file being then
+	  read and never going to PLAYING.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770314
+
+2016-08-26 11:27:17 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: increase EOS granpos detection chunk size
+	  This can be too small on some files to find a valid granule.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770314
+
+2016-09-04 21:41:04 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/examples/seek/meson.build:
+	  meson: fix joystick header check for jseek example
+
+2016-09-03 11:57:22 +1000  Jonathan Matthew <jonathan@d14n.org>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  pbutils: store missing-plugin structure in current_info->misc again
+	  This allows gst_discoverer_info_get_misc to work again, until it
+	  finally gets removed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770643
+
+2016-09-04 16:04:00 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: cycle between video tracks without disabling video
+
+2016-09-01 17:56:24 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* win32/common/libgstrtp.def:
+	  win32: Update exports
+
+2016-09-01 22:48:40 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/video-frame.h:
+	  video-frame: Expand the range of caps for extended buffer flags
+	  The video buffer flags can be applied to encoded video streams,
+	  such as video/x-h264 marked up by a demuxer or parser.
+
+2016-09-01 13:07:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybackutils.h:
+	  playback: Mark internal functions as G_GNUC_INTERNAL
+
+2016-09-01 14:47:02 +0900  Wonchul Lee <wonchul.lee@collabora.com>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybackutils.c:
+	* gst/playback/gstplaybackutils.h:
+	* gst/playback/gsturidecodebin.c:
+	* gst/playback/gsturisourcebin.c:
+	  playbackutils: Move compare_factories_func
+	  Move _decode_bin_compare_factories_func function to playbackutils
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770692
+
+2016-09-01 09:59:06 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* gst-libs/gst/video/video-frame.h:
+	  video-frame: GST_VIDEO_BUFFER_FLAG are only valid for video/x-raw caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769771
+
+2016-09-01 09:57:33 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.h:
+	  rtpbuffer: Add buffer flag RETRANSMISSION
+	  Useful for elements to know if a buffer is a retransmitted RTP packet.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=769771
+
+2016-09-01 12:38:14 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  configure: Require orc >= 0.4.24
+	  Needed for being able to compile video.orc
+	  https://bugzilla.gnome.org/show_bug.cgi?id=770698
+
+2016-09-01 12:26:40 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.9.2 ===
+
+2016-09-01 12:26:20 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-opus.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-videoconvert.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  Release 1.9.2
 
 2016-09-01 11:23:10 +0300  Sebastian Dröge <sebastian@centricular.com>
 
diff --git a/Makefile.in b/Makefile.in
index 027d9c1..4eaa664 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -460,6 +460,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
@@ -1158,8 +1161,11 @@
 
 update-exports:
 	make check-exports 2>&1 | patch -p1
-	git add win32/common/libgst*.def
-	git diff --cached -- win32/common/
+	if test -f "$(top_srcdir)/win32/common/libgstgl.def"; then \
+	  git checkout "$(top_srcdir)/win32/common/libgstgl.def";  \
+	fi
+	git add $(top_srcdir)/win32/common/libgst*.def
+	git diff --cached -- $(top_srcdir)/win32/common/
 	echo '^^^--- updated and staged changes above'
 
 # complain about nonportable printf format strings (%lld, %llu, %zu etc.)
diff --git a/NEWS b/NEWS
index 027c018..072b2df 100644
--- a/NEWS
+++ b/NEWS
@@ -1 +1 @@
-This is GStreamer 1.9.2
+This is GStreamer 1.9.90
diff --git a/RELEASE b/RELEASE
index c655d19..32a0af3 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,13 +1,10 @@
 
-Release notes for GStreamer Base Plugins 1.9.2
+Release notes for GStreamer Base Plugins 1.9.90
 
-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.
+The GStreamer team is pleased to announce the first release candidate of the
+stable 1.10 release series. The 1.10 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.
 
 
 Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.
@@ -59,23 +56,12 @@
 
 Bugs fixed in this release
      
-      * 761514 : riff: remove limits for sample rate and channel count
-      * 766419 : videotimecode: Added support for SMPTE time code metadata
-      * 767816 : Comparison of constant 64 with expression of type 'GstVideoFormat' is always false in Mac OS X
-      * 768495 : POTFILES.in is out of date
-      * 768525 : subparse: don't reset allowed tags
-      * 768687 : Rework video orientation
-      * 768718 : videoscale: fix leak in test
-      * 768811 : decodebin3/playbin3: fix leaks
-      * 768852 : appsink: add _try_pull_{sample,preroll} with timeout parameter
-      * 768990 : audioclock: use GST_STIME_FORMAT for the correct argument
-      * 769080 : decodebin3: fix collection refcounting
-      * 769270 : decodebin3/playbin3: fix ref handling
-      * 769298 : decodebin3: handle full removal of streams
-      * 769299 : ogg: check return values in gst_ogg_parse_new_stream
-      * 769303 : pbutils: Add more h264 scalable profiles
-      * 769624 : videorate: Does not support reverse playback
-      * 770053 : parsebin: sometimes sets global tags to stream
+      * 729276 : audioresample: Misdetected and/or misused intrinsics headers
+      * 769771 : rtpbuffer: Add buffer flag RETRANSMISSION
+      * 770314 : oggdemux: Does not go back to beginning point on EOS when determining stream length
+      * 770446 : pulsesrc, audiosrc: No audio captured with new GStreamer 1.8.2
+      * 770692 : playbackutils: Move compare_factories_func
+      * 770698 : video-orc.orc doesn't compile with orc 0.4.23
 
 ==== Download ====
 
@@ -113,29 +99,16 @@
 Contributors to this release
     
       * Arun Raghavan
-      * Carlos Rafael Giani
-      * Duncan Palmer
       * Edward Hervey
-      * Guillaume Desmottes
+      * Havard Graff
       * Jan Schmidt
-      * Joan Pau Beltran
-      * Josep Torra
-      * Luis de Bethencourt
-      * Matej Knopp
-      * Michael Olbrich
-      * Nirbheek Chauhan
-      * Piotr Drąg
+      * Jonathan Matthew
+      * Nicolas Dufresne
       * Sebastian Dröge
-      * Sergio Torres Soldado
-      * Seungha Yang
-      * Sreerenj Balachandran
-      * Stefan Sauer
       * Thibault Saunier
-      * Thijs Vermeir
       * Tim-Philipp Müller
       * Vincent Penquerc'h
-      * Vivia Nikolaidou
       * Víctor Manuel Jáquez Leal
       * Wim Taymans
-      * Xabier Rodriguez Calvar
+      * Wonchul Lee
  
\ No newline at end of file
diff --git a/common/Makefile.in b/common/Makefile.in
index 2a0b963..ef5dca8 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -422,6 +422,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 7b19cdb..65ddad5 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -362,6 +362,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/common/win32.mak b/common/win32.mak
index 87cd346..6060532 100644
--- a/common/win32.mak
+++ b/common/win32.mak
@@ -61,8 +61,11 @@
 
 update-exports:
 	make check-exports 2>&1 | patch -p1
-	git add win32/common/libgst*.def
-	git diff --cached -- win32/common/
+	if test -f "$(top_srcdir)/win32/common/libgstgl.def"; then \
+	  git checkout "$(top_srcdir)/win32/common/libgstgl.def";  \
+	fi
+	git add $(top_srcdir)/win32/common/libgst*.def
+	git diff --cached -- $(top_srcdir)/win32/common/
 	echo '^^^--- updated and staged changes above'
 
 # complain about nonportable printf format strings (%lld, %llu, %zu etc.)
diff --git a/config.h.in b/config.h.in
index ed89cad..91a3a5b 100644
--- a/config.h.in
+++ b/config.h.in
@@ -161,6 +161,14 @@
    */
 #undef HAVE_DCGETTEXT
 
+/* Define to 1 if you have the declaration of `__i386__', and to 0 if you
+   don't. */
+#undef HAVE_DECL___I386__
+
+/* Define to 1 if you have the declaration of `__x86_64__', and to 0 if you
+   don't. */
+#undef HAVE_DECL___X86_64__
+
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
@@ -257,6 +265,15 @@
 /* Define to 1 if you have the <smmintrin.h> header file. */
 #undef HAVE_SMMINTRIN_H
 
+/* SSE support is enabled */
+#undef HAVE_SSE
+
+/* SSE2 support is enabled */
+#undef HAVE_SSE2
+
+/* SSE4.1 support is enabled */
+#undef HAVE_SSE41
+
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
diff --git a/configure b/configure
index 52cdce5..2c3f00f 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer Base Plug-ins 1.9.2.
+# Generated by GNU Autoconf 2.69 for GStreamer Base Plug-ins 1.9.90.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='GStreamer Base Plug-ins'
 PACKAGE_TARNAME='gst-plugins-base'
-PACKAGE_VERSION='1.9.2'
-PACKAGE_STRING='GStreamer Base Plug-ins 1.9.2'
+PACKAGE_VERSION='1.9.90'
+PACKAGE_STRING='GStreamer Base Plug-ins 1.9.90'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -821,6 +821,11 @@
 HAVE_WINSOCK2_H_TRUE
 HAVE_SYS_SOCKET_H_FALSE
 HAVE_SYS_SOCKET_H_TRUE
+SSE41_CFLAGS
+SSE2_CFLAGS
+SSE_CFLAGS
+HAVE_X86_FALSE
+HAVE_X86_TRUE
 PTHREAD_CFLAGS
 PTHREAD_LIBS
 PTHREAD_CC
@@ -1793,7 +1798,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GStreamer Base Plug-ins 1.9.2 to adapt to many kinds of systems.
+\`configure' configures GStreamer Base Plug-ins 1.9.90 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1866,7 +1871,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.9.2:";;
+     short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.9.90:";;
    esac
   cat <<\_ACEOF
 
@@ -2161,7 +2166,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Base Plug-ins configure 1.9.2
+GStreamer Base Plug-ins configure 1.9.90
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2934,7 +2939,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GStreamer Base Plug-ins $as_me 1.9.2, which was
+It was created by GStreamer Base Plug-ins $as_me 1.9.90, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3913,7 +3918,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-base'
- VERSION='1.9.2'
+ VERSION='1.9.90'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4124,9 +4129,9 @@
 
 
 
-  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)
+  PACKAGE_VERSION_MAJOR=$(echo 1.9.90 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.9.90 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.9.90 | cut -d'.' -f3)
 
 
 
@@ -4137,7 +4142,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.9.2 | cut -d'.' -f4)
+  NANO=$(echo 1.9.90 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -8971,10 +8976,10 @@
 done
 
 
-  GST_CURRENT=902
+  GST_CURRENT=990
   GST_REVISION=0
-  GST_AGE=902
-  GST_LIBVERSION=902:0:902
+  GST_AGE=990
+  GST_LIBVERSION=990:0:990
 
 
 
@@ -13602,7 +13607,7 @@
 
 
 
-GST_REQ=1.9.2
+GST_REQ=1.9.90
 
 
 
@@ -23664,6 +23669,177 @@
 done
 
 
+ac_fn_c_check_decl "$LINENO" "__i386__" "ac_cv_have_decl___i386__" "$ac_includes_default"
+if test "x$ac_cv_have_decl___i386__" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL___I386__ $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+  HAVE_X86=1
+fi
+
+ac_fn_c_check_decl "$LINENO" "__x86_64__" "ac_cv_have_decl___x86_64__" "$ac_includes_default"
+if test "x$ac_cv_have_decl___x86_64__" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL___X86_64__ $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+  HAVE_X86=1
+fi
+
+
+SSE_CFLAGS="-msse"
+SSE2_CFLAGS="-msse2"
+SSE41_CFLAGS="-msse4.1"
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands $SSE_CFLAGS" >&5
+$as_echo_n "checking to see if compiler understands $SSE_CFLAGS... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $SSE_CFLAGS"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    HAVE_SSE=1
+    true
+  else
+    HAVE_SSE=0
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands $SSE2_CFLAGS" >&5
+$as_echo_n "checking to see if compiler understands $SSE2_CFLAGS... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $SSE2_CFLAGS"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    HAVE_SSE2=1
+    true
+  else
+    HAVE_SSE2=0
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands $SSE41_CFLAGS" >&5
+$as_echo_n "checking to see if compiler understands $SSE41_CFLAGS... " >&6; }
+
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $SSE41_CFLAGS"
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  flag_ok=yes
+else
+  flag_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+
+  if test "X$flag_ok" = Xyes ; then
+    HAVE_SSE41=1
+    true
+  else
+    HAVE_SSE41=0
+    true
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
+$as_echo "$flag_ok" >&6; }
+
+
+ if test "x${HAVE_X86}" = "x1"; then
+  HAVE_X86_TRUE=
+  HAVE_X86_FALSE='#'
+else
+  HAVE_X86_TRUE='#'
+  HAVE_X86_FALSE=
+fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SSE $HAVE_SSE
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SSE2 $HAVE_SSE2
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SSE41 $HAVE_SSE41
+_ACEOF
+
+
+
+
+
+
 for ac_header in sys/socket.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default
@@ -24885,7 +25061,7 @@
 
 
 
-  ORC_REQ=0.4.23
+  ORC_REQ=0.4.24
 
   # Check whether --enable-orc was given.
 if test "${enable_orc+set}" = set; then :
@@ -32120,6 +32296,10 @@
   as_fn_error $? "conditional \"ENABLE_PLUGIN_DOCS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_X86_TRUE}" && test -z "${HAVE_X86_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_X86\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_SYS_SOCKET_H_TRUE}" && test -z "${HAVE_SYS_SOCKET_H_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_SYS_SOCKET_H\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -32733,7 +32913,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer Base Plug-ins $as_me 1.9.2, which was
+This file was extended by GStreamer Base Plug-ins $as_me 1.9.90, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -32799,7 +32979,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-GStreamer Base Plug-ins config.status 1.9.2
+GStreamer Base Plug-ins config.status 1.9.90
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 7e70428..6e9dc52 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
 dnl initialize autoconf
 dnl releases only do -Wall, git and prerelease does -Werror too
 dnl use a three digit version number for releases, and four for git/prerelease
-AC_INIT([GStreamer Base Plug-ins],[1.9.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
+AC_INIT([GStreamer Base Plug-ins],[1.9.90],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
 
 AG_GST_INIT
 
@@ -56,10 +56,10 @@
 dnl      1.10.9 (who knows) => 1009
 dnl
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 902, 0, 902)
+AS_LIBTOOL(GST, 990, 0, 990)
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.9.2
+GST_REQ=1.9.90
 
 dnl *** autotools stuff ****
 
@@ -179,6 +179,30 @@
 dnl these are used by the speex resampler code
 AC_CHECK_HEADERS([xmmintrin.h emmintrin.h smmintrin.h])
 
+dnl also check which architecture we're on for building files with intrinsics
+dnl separately
+AC_CHECK_DECLS([__i386__], [HAVE_X86=1])
+AC_CHECK_DECLS([__x86_64__], [HAVE_X86=1])
+
+dnl check for -m* compiler flags too
+SSE_CFLAGS="-msse"
+SSE2_CFLAGS="-msse2"
+SSE41_CFLAGS="-msse4.1"
+
+AS_COMPILER_FLAG([$SSE_CFLAGS], [HAVE_SSE=1], [HAVE_SSE=0])
+AS_COMPILER_FLAG([$SSE2_CFLAGS], [HAVE_SSE2=1], [HAVE_SSE2=0])
+AS_COMPILER_FLAG([$SSE41_CFLAGS], [HAVE_SSE41=1], [HAVE_SSE41=0])
+
+AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"])
+
+AC_DEFINE_UNQUOTED(HAVE_SSE, [$HAVE_SSE], [SSE support is enabled])
+AC_DEFINE_UNQUOTED(HAVE_SSE2, [$HAVE_SSE2], [SSE2 support is enabled])
+AC_DEFINE_UNQUOTED(HAVE_SSE41, [$HAVE_SSE41], [SSE4.1 support is enabled])
+
+AC_SUBST(SSE_CFLAGS)
+AC_SUBST(SSE2_CFLAGS)
+AC_SUBST(SSE41_CFLAGS)
+
 dnl used in gst/tcp
 AC_CHECK_HEADERS([sys/socket.h],
   [HAVE_SYS_SOCKET_H="yes"], [HAVE_SYS_SOCKET_H="no"], [AC_INCLUDES_DEFAULT])
@@ -254,7 +278,7 @@
 GLIB_REQ=2.40.0
 AG_GST_GLIB_CHECK([$GLIB_REQ])
 
-ORC_CHECK([0.4.23])
+ORC_CHECK([0.4.24])
 
 dnl checks for gstreamer
 dnl uninstalled is selected preferentially -- see pkg-config(1)
diff --git a/docs/Makefile.in b/docs/Makefile.in
index a748b04..94cd2a5 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -421,6 +421,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in
index 59f08dc..6d9c958 100644
--- a/docs/design/Makefile.in
+++ b/docs/design/Makefile.in
@@ -422,6 +422,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index 70aacc9..b058347 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -383,6 +383,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
index 574f6d4..8031929 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
@@ -184,7 +184,7 @@
 <hr>
 <div class="refsect2">
 <a name="GST-PLUGINS-BASE-VERSION-MICRO:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (2)
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (90)
 </pre>
 <p>The micro version of GStreamer's gst-plugins-base libraries at compile time.</p>
 </div>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideo.html b/docs/libs/html/gst-plugins-base-libs-gstvideo.html
index b9af0e7..5baab99 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideo.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideo.html
@@ -3708,11 +3708,13 @@
 14
 15
 16
-17</pre></td>
+17
+18
+19</pre></td>
         <td class="listing_code"><pre class="programlisting">GstVideoFrame vframe<span class="gtkdoc opt">;</span>
 <span class="gtkdoc opt">...</span>
 <span class="gtkdoc slc">// set RGB pixels to black one at a time</span>
-<span class="keyword">if</span> <span class="gtkdoc opt">(</span><span class="function"><a href="gst-plugins-base-libs-gstvideo.html#gst-video-frame-map">gst_video_frame_map</a></span> <span class="gtkdoc opt">(&amp;</span>vframe<span class="gtkdoc opt">,</span> video_info<span class="gtkdoc opt">,</span> video_buffer<span class="gtkdoc opt">)) {</span>
+<span class="keyword">if</span> <span class="gtkdoc opt">(</span><span class="function"><a href="gst-plugins-base-libs-gstvideo.html#gst-video-frame-map">gst_video_frame_map</a></span> <span class="gtkdoc opt">(&amp;</span>vframe<span class="gtkdoc opt">,</span> video_info<span class="gtkdoc opt">,</span> video_buffer<span class="gtkdoc opt">,</span> GST_MAP_WRITE<span class="gtkdoc opt">)) {</span>
   guint8 <span class="gtkdoc opt">*</span>pixels <span class="gtkdoc opt">=</span> <span class="function"><a href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-PLANE-DATA:CAPS">GST_VIDEO_FRAME_PLANE_DATA</a></span> <span class="gtkdoc opt">(</span>vframe<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">);</span>
   guint stride <span class="gtkdoc opt">=</span> <span class="function"><a href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-PLANE-STRIDE:CAPS">GST_VIDEO_FRAME_PLANE_STRIDE</a></span> <span class="gtkdoc opt">(</span>vframe<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">);</span>
   guint pixel_stride <span class="gtkdoc opt">=</span> <span class="function"><a href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-COMP-PSTRIDE:CAPS">GST_VIDEO_FRAME_COMP_PSTRIDE</a></span> <span class="gtkdoc opt">(</span>vframe<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">);</span>
@@ -3724,6 +3726,8 @@
       <span class="function">memset</span> <span class="gtkdoc opt">(</span>pixel<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> pixel_stride<span class="gtkdoc opt">);</span>
     <span class="gtkdoc opt">}</span>
   <span class="gtkdoc opt">}</span>
+
+  <span class="function"><a href="gst-plugins-base-libs-gstvideo.html#gst-video-frame-unmap">gst_video_frame_unmap</a></span> <span class="gtkdoc opt">(&amp;</span>vframe<span class="gtkdoc opt">);</span>
 <span class="gtkdoc opt">}</span>
 <span class="gtkdoc opt">...</span></pre></td>
       </tr>
@@ -7269,6 +7273,8 @@
 <a name="GstVideoBufferFlags"></a><h3>enum GstVideoBufferFlags</h3>
 <p>Additional video buffer flags. These flags can potentially be used on any
 buffers carrying video data - even encoded data.</p>
+<p>Note that these are only valid for <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstCaps.html#GstCaps-struct"><span class="type">GstCaps</span></a> of type: video/...
+They can conflict with other extended buffer flags.</p>
 <div class="refsect3">
 <a name="GstVideoBufferFlags.members"></a><h4>Members</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html b/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
index b7d0e8f..be3fd72 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
@@ -651,6 +651,9 @@
 . The data in <em class="parameter"><code>video_buf</code></em>
  must be writable and
 mapped appropriately.</p>
+<p>Since <em class="parameter"><code>video_buf</code></em>
+ data is read and will be modified, it ought be
+mapped with flag GST_MAP_READWRITE.</p>
 <div class="refsect3">
 <a name="gst-video-overlay-composition-blend.parameters"></a><h4>Parameters</h4>
 <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -667,7 +670,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>video_buf</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> containing raw video data in a supported format</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> containing raw video data in a
+supported format. It should be mapped using GST_MAP_READWRITE</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index 63de253..188af43 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/html/index.html
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Base Plugins 1.0 Library Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Base Library 1.0 (1.9.2)
+      for GStreamer Base Library 1.0 (1.9.90)
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/</a>.
     </p></div>
 </div>
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index bef8068..50768e9 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -381,6 +381,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
index 3af4f5e..926fbbc 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
index 7a4da23..9e50cc1 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
index 9d0b352..7642de6 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
index a867458..3a13941 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
index 22b3733..406086d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
index 7ca97a1..af25b2f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
index 260ae1e..96a7825 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
index d333753..c908992 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
index 68b4bc0..1039767 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
index 67cabe0..1ccbc6c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
index 9abe5b6..59a142b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
index 7b1e614..b3960b0 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-opus.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-opus.html
index a7f3a21..ae6272e 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-opus.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-opus.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
index 24ed8cb..da3e404 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
index c6d4cd2..34619ed 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
index 46d9c24..455b3ff 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
index effcd94..6d90926 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
index a4516ef..bbc44de 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
index 6ef0998..719115f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
index 18b7796..0270be7 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
index 4e262f5..5630349 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
index d52a015..6f28975 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
index f321cdd..5dd8861 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
index d2a134c..fd75d4f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
index 87bbafe..036bb85 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
index 5e731c1..0a00988 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
index 9e05513..dd786fa 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
@@ -41,7 +41,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.9.2</td>
+<td>1.9.90</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 79b3401..e794f07 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Base Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Base Plugins 1.0 (1.9.2)
+      for GStreamer Base Plugins 1.0 (1.9.90)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/</a>.
     </p></div>
diff --git a/docs/plugins/inspect/plugin-adder.xml b/docs/plugins/inspect/plugin-adder.xml
index d8012c6..4b33951 100644
--- a/docs/plugins/inspect/plugin-adder.xml
+++ b/docs/plugins/inspect/plugin-adder.xml
@@ -3,7 +3,7 @@
   <description>Adds multiple streams</description>
   <filename>../../gst/adder/.libs/libgstadder.so</filename>
   <basename>libgstadder.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alsa.xml b/docs/plugins/inspect/plugin-alsa.xml
index cf61e62..93639ed 100644
--- a/docs/plugins/inspect/plugin-alsa.xml
+++ b/docs/plugins/inspect/plugin-alsa.xml
@@ -3,7 +3,7 @@
   <description>ALSA plugin library</description>
   <filename>../../ext/alsa/.libs/libgstalsa.so</filename>
   <basename>libgstalsa.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-app.xml b/docs/plugins/inspect/plugin-app.xml
index ca8109c..5f00d19 100644
--- a/docs/plugins/inspect/plugin-app.xml
+++ b/docs/plugins/inspect/plugin-app.xml
@@ -3,7 +3,7 @@
   <description>Elements used to communicate with applications</description>
   <filename>../../gst/app/.libs/libgstapp.so</filename>
   <basename>libgstapp.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioconvert.xml b/docs/plugins/inspect/plugin-audioconvert.xml
index 7f01b2d..d4482f7 100644
--- a/docs/plugins/inspect/plugin-audioconvert.xml
+++ b/docs/plugins/inspect/plugin-audioconvert.xml
@@ -3,7 +3,7 @@
   <description>Convert audio to different formats</description>
   <filename>../../gst/audioconvert/.libs/libgstaudioconvert.so</filename>
   <basename>libgstaudioconvert.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiorate.xml b/docs/plugins/inspect/plugin-audiorate.xml
index 34b7636..1ed6e56 100644
--- a/docs/plugins/inspect/plugin-audiorate.xml
+++ b/docs/plugins/inspect/plugin-audiorate.xml
@@ -3,7 +3,7 @@
   <description>Adjusts audio frames</description>
   <filename>../../gst/audiorate/.libs/libgstaudiorate.so</filename>
   <basename>libgstaudiorate.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioresample.xml b/docs/plugins/inspect/plugin-audioresample.xml
index 8ba114d..fe9634e 100644
--- a/docs/plugins/inspect/plugin-audioresample.xml
+++ b/docs/plugins/inspect/plugin-audioresample.xml
@@ -3,7 +3,7 @@
   <description>Resamples audio</description>
   <filename>../../gst/audioresample/.libs/libgstaudioresample.so</filename>
   <basename>libgstaudioresample.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiotestsrc.xml b/docs/plugins/inspect/plugin-audiotestsrc.xml
index d42239c..ac1f95e 100644
--- a/docs/plugins/inspect/plugin-audiotestsrc.xml
+++ b/docs/plugins/inspect/plugin-audiotestsrc.xml
@@ -3,7 +3,7 @@
   <description>Creates audio test signals of given frequency and volume</description>
   <filename>../../gst/audiotestsrc/.libs/libgstaudiotestsrc.so</filename>
   <basename>libgstaudiotestsrc.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-cdparanoia.xml b/docs/plugins/inspect/plugin-cdparanoia.xml
index c498c18..874ebc8 100644
--- a/docs/plugins/inspect/plugin-cdparanoia.xml
+++ b/docs/plugins/inspect/plugin-cdparanoia.xml
@@ -3,7 +3,7 @@
   <description>Read audio from CD in paranoid mode</description>
   <filename>../../ext/cdparanoia/.libs/libgstcdparanoia.so</filename>
   <basename>libgstcdparanoia.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-encoding.xml b/docs/plugins/inspect/plugin-encoding.xml
index c1bcfec..30a693e 100644
--- a/docs/plugins/inspect/plugin-encoding.xml
+++ b/docs/plugins/inspect/plugin-encoding.xml
@@ -3,7 +3,7 @@
   <description>various encoding-related elements</description>
   <filename>../../gst/encoding/.libs/libgstencodebin.so</filename>
   <basename>libgstencodebin.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gio.xml b/docs/plugins/inspect/plugin-gio.xml
index 50c7fee..bf7049b 100644
--- a/docs/plugins/inspect/plugin-gio.xml
+++ b/docs/plugins/inspect/plugin-gio.xml
@@ -3,7 +3,7 @@
   <description>GIO elements</description>
   <filename>../../gst/gio/.libs/libgstgio.so</filename>
   <basename>libgstgio.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-libvisual.xml b/docs/plugins/inspect/plugin-libvisual.xml
index e4b68ab..d16008a 100644
--- a/docs/plugins/inspect/plugin-libvisual.xml
+++ b/docs/plugins/inspect/plugin-libvisual.xml
@@ -3,7 +3,7 @@
   <description>libvisual visualization plugins</description>
   <filename>../../ext/libvisual/.libs/libgstlibvisual.so</filename>
   <basename>libgstlibvisual.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ogg.xml b/docs/plugins/inspect/plugin-ogg.xml
index cae7aeb..e7eb52b 100644
--- a/docs/plugins/inspect/plugin-ogg.xml
+++ b/docs/plugins/inspect/plugin-ogg.xml
@@ -3,7 +3,7 @@
   <description>ogg stream manipulation (info about ogg: http://xiph.org)</description>
   <filename>../../ext/ogg/.libs/libgstogg.so</filename>
   <basename>libgstogg.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opus.xml b/docs/plugins/inspect/plugin-opus.xml
index 04d4e4c..2ede8a1 100644
--- a/docs/plugins/inspect/plugin-opus.xml
+++ b/docs/plugins/inspect/plugin-opus.xml
@@ -3,7 +3,7 @@
   <description>OPUS plugin library</description>
   <filename>../../ext/opus/.libs/libgstopus.so</filename>
   <basename>libgstopus.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-pango.xml b/docs/plugins/inspect/plugin-pango.xml
index 355dc4e..5179d85 100644
--- a/docs/plugins/inspect/plugin-pango.xml
+++ b/docs/plugins/inspect/plugin-pango.xml
@@ -3,7 +3,7 @@
   <description>Pango-based text rendering and overlay</description>
   <filename>../../ext/pango/.libs/libgstpango.so</filename>
   <basename>libgstpango.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-playback.xml b/docs/plugins/inspect/plugin-playback.xml
index a1f8627..65ad797 100644
--- a/docs/plugins/inspect/plugin-playback.xml
+++ b/docs/plugins/inspect/plugin-playback.xml
@@ -3,7 +3,7 @@
   <description>various playback elements</description>
   <filename>../../gst/playback/.libs/libgstplayback.so</filename>
   <basename>libgstplayback.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-subparse.xml b/docs/plugins/inspect/plugin-subparse.xml
index 48b86fe..b237508 100644
--- a/docs/plugins/inspect/plugin-subparse.xml
+++ b/docs/plugins/inspect/plugin-subparse.xml
@@ -3,7 +3,7 @@
   <description>Subtitle parsing</description>
   <filename>../../gst/subparse/.libs/libgstsubparse.so</filename>
   <basename>libgstsubparse.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-tcp.xml b/docs/plugins/inspect/plugin-tcp.xml
index 900a19a..9ff7b1d 100644
--- a/docs/plugins/inspect/plugin-tcp.xml
+++ b/docs/plugins/inspect/plugin-tcp.xml
@@ -3,7 +3,7 @@
   <description>transfer data over the network via TCP</description>
   <filename>../../gst/tcp/.libs/libgsttcp.so</filename>
   <basename>libgsttcp.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-theora.xml b/docs/plugins/inspect/plugin-theora.xml
index 184ad55..135ec2e 100644
--- a/docs/plugins/inspect/plugin-theora.xml
+++ b/docs/plugins/inspect/plugin-theora.xml
@@ -3,7 +3,7 @@
   <description>Theora plugin library</description>
   <filename>../../ext/theora/.libs/libgsttheora.so</filename>
   <basename>libgsttheora.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-typefindfunctions.xml b/docs/plugins/inspect/plugin-typefindfunctions.xml
index 7b1eac9..5a8ee77 100644
--- a/docs/plugins/inspect/plugin-typefindfunctions.xml
+++ b/docs/plugins/inspect/plugin-typefindfunctions.xml
@@ -3,7 +3,7 @@
   <description>default typefind functions</description>
   <filename>../../gst/typefind/.libs/libgsttypefindfunctions.so</filename>
   <basename>libgsttypefindfunctions.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videoconvert.xml b/docs/plugins/inspect/plugin-videoconvert.xml
index 7c544af..a90b084 100644
--- a/docs/plugins/inspect/plugin-videoconvert.xml
+++ b/docs/plugins/inspect/plugin-videoconvert.xml
@@ -3,7 +3,7 @@
   <description>Colorspace conversion</description>
   <filename>../../gst/videoconvert/.libs/libgstvideoconvert.so</filename>
   <basename>libgstvideoconvert.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videorate.xml b/docs/plugins/inspect/plugin-videorate.xml
index 55ebd6d..3ebf6f6 100644
--- a/docs/plugins/inspect/plugin-videorate.xml
+++ b/docs/plugins/inspect/plugin-videorate.xml
@@ -3,7 +3,7 @@
   <description>Adjusts video frames</description>
   <filename>../../gst/videorate/.libs/libgstvideorate.so</filename>
   <basename>libgstvideorate.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videoscale.xml b/docs/plugins/inspect/plugin-videoscale.xml
index f8fe61d..32de3e6 100644
--- a/docs/plugins/inspect/plugin-videoscale.xml
+++ b/docs/plugins/inspect/plugin-videoscale.xml
@@ -3,7 +3,7 @@
   <description>Resizes video</description>
   <filename>../../gst/videoscale/.libs/libgstvideoscale.so</filename>
   <basename>libgstvideoscale.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videotestsrc.xml b/docs/plugins/inspect/plugin-videotestsrc.xml
index 8b97d83..4db9ddc 100644
--- a/docs/plugins/inspect/plugin-videotestsrc.xml
+++ b/docs/plugins/inspect/plugin-videotestsrc.xml
@@ -3,7 +3,7 @@
   <description>Creates a test video stream</description>
   <filename>../../gst/videotestsrc/.libs/libgstvideotestsrc.so</filename>
   <basename>libgstvideotestsrc.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-volume.xml b/docs/plugins/inspect/plugin-volume.xml
index e3ffd31..31353a6 100644
--- a/docs/plugins/inspect/plugin-volume.xml
+++ b/docs/plugins/inspect/plugin-volume.xml
@@ -3,7 +3,7 @@
   <description>plugin for controlling audio volume</description>
   <filename>../../gst/volume/.libs/libgstvolume.so</filename>
   <basename>libgstvolume.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vorbis.xml b/docs/plugins/inspect/plugin-vorbis.xml
index 91001d4..3782b02 100644
--- a/docs/plugins/inspect/plugin-vorbis.xml
+++ b/docs/plugins/inspect/plugin-vorbis.xml
@@ -3,7 +3,7 @@
   <description>Vorbis plugin library</description>
   <filename>../../ext/vorbis/.libs/libgstvorbis.so</filename>
   <basename>libgstvorbis.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ximagesink.xml b/docs/plugins/inspect/plugin-ximagesink.xml
index 5438bc3..88d8078 100644
--- a/docs/plugins/inspect/plugin-ximagesink.xml
+++ b/docs/plugins/inspect/plugin-ximagesink.xml
@@ -3,7 +3,7 @@
   <description>X11 video output element based on standard Xlib calls</description>
   <filename>../../sys/ximage/.libs/libgstximagesink.so</filename>
   <basename>libgstximagesink.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-xvimagesink.xml b/docs/plugins/inspect/plugin-xvimagesink.xml
index 7a42f42..5e92856 100644
--- a/docs/plugins/inspect/plugin-xvimagesink.xml
+++ b/docs/plugins/inspect/plugin-xvimagesink.xml
@@ -3,7 +3,7 @@
   <description>XFree86 video output plugin using Xv extension</description>
   <filename>../../sys/xvimage/.libs/libgstxvimagesink.so</filename>
   <basename>libgstxvimagesink.so</basename>
-  <version>1.9.2</version>
+  <version>1.9.90</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/ext/Makefile.in b/ext/Makefile.in
index 0fdfb16..f83c95e 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -427,6 +427,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/alsa/Makefile.in b/ext/alsa/Makefile.in
index 5a7a013..4cd4ec2 100644
--- a/ext/alsa/Makefile.in
+++ b/ext/alsa/Makefile.in
@@ -451,6 +451,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/cdparanoia/Makefile.in b/ext/cdparanoia/Makefile.in
index f021f67..f0d1f91 100644
--- a/ext/cdparanoia/Makefile.in
+++ b/ext/cdparanoia/Makefile.in
@@ -450,6 +450,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/libvisual/Makefile.in b/ext/libvisual/Makefile.in
index 92c7cfa..a690c35 100644
--- a/ext/libvisual/Makefile.in
+++ b/ext/libvisual/Makefile.in
@@ -452,6 +452,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/ogg/Makefile.in b/ext/ogg/Makefile.in
index bc2337d..f54e0e0 100644
--- a/ext/ogg/Makefile.in
+++ b/ext/ogg/Makefile.in
@@ -456,6 +456,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c
index d653df8..517430e 100644
--- a/ext/ogg/gstoggdemux.c
+++ b/ext/ogg/gstoggdemux.c
@@ -48,7 +48,7 @@
 #define CHUNKSIZE (8500)        /* this is out of vorbisfile */
 
 /* we hope we get a granpos within this many bytes off the end */
-#define DURATION_CHUNK_OFFSET (64*1024)
+#define DURATION_CHUNK_OFFSET (128*1024)
 
 /* An Ogg page can not be larger than 255 segments of 255 bytes, plus
    26 bytes of header */
@@ -1538,6 +1538,10 @@
   event = ogg->push_mode_seek_delayed_event;
   ogg->push_mode_seek_delayed_event = NULL;
 
+  /* if we haven't learnt about the total time yet, disable seeking */
+  if (ogg->total_time == -1)
+    ogg->push_disable_seeking = TRUE;
+
   ogg->push_state = PUSH_PLAYING;
 
   /* If there is one, perform it. Otherwise, seek back at start to start
diff --git a/ext/opus/Makefile.in b/ext/opus/Makefile.in
index b5b0c32..eda9240 100644
--- a/ext/opus/Makefile.in
+++ b/ext/opus/Makefile.in
@@ -453,6 +453,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/pango/Makefile.in b/ext/pango/Makefile.in
index 79bf545..2f92a4c 100644
--- a/ext/pango/Makefile.in
+++ b/ext/pango/Makefile.in
@@ -453,6 +453,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/theora/Makefile.in b/ext/theora/Makefile.in
index 5c69c3a..dd19bdc 100644
--- a/ext/theora/Makefile.in
+++ b/ext/theora/Makefile.in
@@ -453,6 +453,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/ext/vorbis/Makefile.in b/ext/vorbis/Makefile.in
index c3745b5..88b3b17 100644
--- a/ext/vorbis/Makefile.in
+++ b/ext/vorbis/Makefile.in
@@ -479,6 +479,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in
index b288fdc..3f1b9ea 100644
--- a/gst-libs/Makefile.in
+++ b/gst-libs/Makefile.in
@@ -422,6 +422,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
index a9dce3d..42cb21e 100644
--- a/gst-libs/gst/Makefile.in
+++ b/gst-libs/gst/Makefile.in
@@ -425,6 +425,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/allocators/Makefile.in b/gst-libs/gst/allocators/Makefile.in
index 72c7b88..e222ce1 100644
--- a/gst-libs/gst/allocators/Makefile.in
+++ b/gst-libs/gst/allocators/Makefile.in
@@ -440,6 +440,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/app/Makefile.in b/gst-libs/gst/app/Makefile.in
index 64fc856..1c900f4 100644
--- a/gst-libs/gst/app/Makefile.in
+++ b/gst-libs/gst/app/Makefile.in
@@ -446,6 +446,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am
index 1f3ec51..41f9c4d 100644
--- a/gst-libs/gst/audio/Makefile.am
+++ b/gst-libs/gst/audio/Makefile.am
@@ -82,8 +82,13 @@
 	audio-enumtypes.h
 
 noinst_HEADERS = \
-	gstaudioutilsprivate.h \
-	audio-resampler-x86.h \
+	gstaudioutilsprivate.h 		\
+	audio-resampler-private.h 	\
+	audio-resampler-macros.h 	\
+	audio-resampler-x86.h 		\
+	audio-resampler-x86-sse.h	\
+	audio-resampler-x86-sse2.h	\
+	audio-resampler-x86-sse41.h	\
 	audio-resampler-neon.h
 
 libgstaudio_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \
@@ -93,6 +98,50 @@
   $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(ORC_LIBS)
 libgstaudio_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 
+
+# Arch-specific bits
+
+noinst_LTLIBRARIES =
+
+if HAVE_X86
+# Don't use full GST_LT_LDFLAGS in LDFLAGS because we get things like
+# -version-info that cause a warning on private libs
+
+noinst_LTLIBRARIES += libaudio_resampler_sse.la
+libaudio_resampler_sse_la_SOURCES = audio-resampler-x86-sse.c
+libaudio_resampler_sse_la_CFLAGS = \
+	$(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
+	$(SSE_CFLAGS)
+libaudio_resampler_sse_la_LDFLAGS = \
+	$(GST_LIB_LDFLAGS) \
+	$(GST_ALL_LDFLAGS)
+libgstaudio_@GST_API_VERSION@_la_LIBADD += libaudio_resampler_sse.la
+
+noinst_LTLIBRARIES += libaudio_resampler_sse2.la
+libaudio_resampler_sse2_la_SOURCES = audio-resampler-x86-sse2.c
+libaudio_resampler_sse2_la_CFLAGS = \
+	$(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
+	$(SSE2_CFLAGS)
+libaudio_resampler_sse2_la_LDFLAGS = \
+	$(GST_LIB_LDFLAGS) \
+	$(GST_ALL_LDFLAGS)
+libgstaudio_@GST_API_VERSION@_la_LIBADD += libaudio_resampler_sse2.la
+
+noinst_LTLIBRARIES += libaudio_resampler_sse41.la
+libaudio_resampler_sse41_la_SOURCES = audio-resampler-x86-sse41.c
+libaudio_resampler_sse41_la_CFLAGS = \
+	$(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
+	$(SSE41_CFLAGS)
+libaudio_resampler_sse41_la_LDFLAGS = \
+	$(GST_LIB_LDFLAGS) \
+	$(GST_ALL_LDFLAGS)
+libgstaudio_@GST_API_VERSION@_la_LIBADD += libaudio_resampler_sse41.la
+
+endif
+
+
+# Introspection
+
 include $(top_srcdir)/common/gst-glib-gen.mak
 
 if HAVE_INTROSPECTION
diff --git a/gst-libs/gst/audio/Makefile.in b/gst-libs/gst/audio/Makefile.in
index cd31641..add64b1 100644
--- a/gst-libs/gst/audio/Makefile.in
+++ b/gst-libs/gst/audio/Makefile.in
@@ -121,7 +121,16 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+
+# Don't use full GST_LT_LDFLAGS in LDFLAGS because we get things like
+# -version-info that cause a warning on private libs
+@HAVE_X86_TRUE@am__append_1 = libaudio_resampler_sse.la \
+@HAVE_X86_TRUE@	libaudio_resampler_sse2.la \
+@HAVE_X86_TRUE@	libaudio_resampler_sse41.la
+@HAVE_X86_TRUE@am__append_2 = libaudio_resampler_sse.la \
+@HAVE_X86_TRUE@	libaudio_resampler_sse2.la \
+@HAVE_X86_TRUE@	libaudio_resampler_sse41.la
+@HAVE_INTROSPECTION_TRUE@am__append_3 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = gst-libs/gst/audio
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -197,11 +206,48 @@
 	"$(DESTDIR)$(typelibsdir)" \
 	"$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)" \
 	"$(DESTDIR)$(libgstaudio_@GST_API_VERSION@includedir)"
-LTLIBRARIES = $(lib_LTLIBRARIES)
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libaudio_resampler_sse_la_LIBADD =
+am__libaudio_resampler_sse_la_SOURCES_DIST =  \
+	audio-resampler-x86-sse.c
+@HAVE_X86_TRUE@am_libaudio_resampler_sse_la_OBJECTS = libaudio_resampler_sse_la-audio-resampler-x86-sse.lo
+libaudio_resampler_sse_la_OBJECTS =  \
+	$(am_libaudio_resampler_sse_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libaudio_resampler_sse_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libaudio_resampler_sse_la_CFLAGS) $(CFLAGS) \
+	$(libaudio_resampler_sse_la_LDFLAGS) $(LDFLAGS) -o $@
+@HAVE_X86_TRUE@am_libaudio_resampler_sse_la_rpath =
+libaudio_resampler_sse2_la_LIBADD =
+am__libaudio_resampler_sse2_la_SOURCES_DIST =  \
+	audio-resampler-x86-sse2.c
+@HAVE_X86_TRUE@am_libaudio_resampler_sse2_la_OBJECTS = libaudio_resampler_sse2_la-audio-resampler-x86-sse2.lo
+libaudio_resampler_sse2_la_OBJECTS =  \
+	$(am_libaudio_resampler_sse2_la_OBJECTS)
+libaudio_resampler_sse2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libaudio_resampler_sse2_la_CFLAGS) $(CFLAGS) \
+	$(libaudio_resampler_sse2_la_LDFLAGS) $(LDFLAGS) -o $@
+@HAVE_X86_TRUE@am_libaudio_resampler_sse2_la_rpath =
+libaudio_resampler_sse41_la_LIBADD =
+am__libaudio_resampler_sse41_la_SOURCES_DIST =  \
+	audio-resampler-x86-sse41.c
+@HAVE_X86_TRUE@am_libaudio_resampler_sse41_la_OBJECTS = libaudio_resampler_sse41_la-audio-resampler-x86-sse41.lo
+libaudio_resampler_sse41_la_OBJECTS =  \
+	$(am_libaudio_resampler_sse41_la_OBJECTS)
+libaudio_resampler_sse41_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libaudio_resampler_sse41_la_CFLAGS) $(CFLAGS) \
+	$(libaudio_resampler_sse41_la_LDFLAGS) $(LDFLAGS) -o $@
+@HAVE_X86_TRUE@am_libaudio_resampler_sse41_la_rpath =
 am__DEPENDENCIES_1 =
 libgstaudio_@GST_API_VERSION@_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_2)
 am_libgstaudio_@GST_API_VERSION@_la_OBJECTS =  \
 	libgstaudio_@GST_API_VERSION@_la-audio.lo \
 	libgstaudio_@GST_API_VERSION@_la-audio-format.lo \
@@ -233,10 +279,6 @@
 libgstaudio_@GST_API_VERSION@_la_OBJECTS =  \
 	$(am_libgstaudio_@GST_API_VERSION@_la_OBJECTS) \
 	$(nodist_libgstaudio_@GST_API_VERSION@_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 = 
 libgstaudio_@GST_API_VERSION@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) \
@@ -275,9 +317,15 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstaudio_@GST_API_VERSION@_la_SOURCES) \
+SOURCES = $(libaudio_resampler_sse_la_SOURCES) \
+	$(libaudio_resampler_sse2_la_SOURCES) \
+	$(libaudio_resampler_sse41_la_SOURCES) \
+	$(libgstaudio_@GST_API_VERSION@_la_SOURCES) \
 	$(nodist_libgstaudio_@GST_API_VERSION@_la_SOURCES)
-DIST_SOURCES = $(libgstaudio_@GST_API_VERSION@_la_SOURCES)
+DIST_SOURCES = $(am__libaudio_resampler_sse_la_SOURCES_DIST) \
+	$(am__libaudio_resampler_sse2_la_SOURCES_DIST) \
+	$(am__libaudio_resampler_sse41_la_SOURCES_DIST) \
+	$(libgstaudio_@GST_API_VERSION@_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -520,6 +568,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
@@ -640,7 +691,7 @@
 lib_LTLIBRARIES = \
 	libgstaudio-@GST_API_VERSION@.la
 
-CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+CLEANFILES = $(BUILT_SOURCES) $(am__append_3)
 libgstaudio_@GST_API_VERSION@_la_SOURCES = \
 	audio.c \
 	audio-format.c \
@@ -694,19 +745,55 @@
 	audio-enumtypes.h
 
 noinst_HEADERS = \
-	gstaudioutilsprivate.h \
-	audio-resampler-x86.h \
+	gstaudioutilsprivate.h 		\
+	audio-resampler-private.h 	\
+	audio-resampler-macros.h 	\
+	audio-resampler-x86.h 		\
+	audio-resampler-x86-sse.h	\
+	audio-resampler-x86-sse2.h	\
+	audio-resampler-x86-sse41.h	\
 	audio-resampler-neon.h
 
 libgstaudio_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \
 		$(ORC_CFLAGS)
 
-libgstaudio_@GST_API_VERSION@_la_LIBADD = \
-  $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_API_VERSION@.la \
-  $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(ORC_LIBS)
-
+libgstaudio_@GST_API_VERSION@_la_LIBADD = $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_API_VERSION@.la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(ORC_LIBS) \
+	$(am__append_2)
 libgstaudio_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
+# Arch-specific bits
+noinst_LTLIBRARIES = $(am__append_1)
+@HAVE_X86_TRUE@libaudio_resampler_sse_la_SOURCES = audio-resampler-x86-sse.c
+@HAVE_X86_TRUE@libaudio_resampler_sse_la_CFLAGS = \
+@HAVE_X86_TRUE@	$(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
+@HAVE_X86_TRUE@	$(SSE_CFLAGS)
+
+@HAVE_X86_TRUE@libaudio_resampler_sse_la_LDFLAGS = \
+@HAVE_X86_TRUE@	$(GST_LIB_LDFLAGS) \
+@HAVE_X86_TRUE@	$(GST_ALL_LDFLAGS)
+
+@HAVE_X86_TRUE@libaudio_resampler_sse2_la_SOURCES = audio-resampler-x86-sse2.c
+@HAVE_X86_TRUE@libaudio_resampler_sse2_la_CFLAGS = \
+@HAVE_X86_TRUE@	$(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
+@HAVE_X86_TRUE@	$(SSE2_CFLAGS)
+
+@HAVE_X86_TRUE@libaudio_resampler_sse2_la_LDFLAGS = \
+@HAVE_X86_TRUE@	$(GST_LIB_LDFLAGS) \
+@HAVE_X86_TRUE@	$(GST_ALL_LDFLAGS)
+
+@HAVE_X86_TRUE@libaudio_resampler_sse41_la_SOURCES = audio-resampler-x86-sse41.c
+@HAVE_X86_TRUE@libaudio_resampler_sse41_la_CFLAGS = \
+@HAVE_X86_TRUE@	$(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
+@HAVE_X86_TRUE@	$(SSE41_CFLAGS)
+
+@HAVE_X86_TRUE@libaudio_resampler_sse41_la_LDFLAGS = \
+@HAVE_X86_TRUE@	$(GST_LIB_LDFLAGS) \
+@HAVE_X86_TRUE@	$(GST_ALL_LDFLAGS)
+
 enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
+
+# Introspection
 @HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstAudio-@GST_API_VERSION@.gir
 @HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \
 @HAVE_INTROSPECTION_TRUE@	$(libgstaudio_@GST_API_VERSION@include_HEADERS)) \
@@ -794,6 +881,26 @@
 	  rm -f $${locs}; \
 	}
 
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libaudio_resampler_sse.la: $(libaudio_resampler_sse_la_OBJECTS) $(libaudio_resampler_sse_la_DEPENDENCIES) $(EXTRA_libaudio_resampler_sse_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libaudio_resampler_sse_la_LINK) $(am_libaudio_resampler_sse_la_rpath) $(libaudio_resampler_sse_la_OBJECTS) $(libaudio_resampler_sse_la_LIBADD) $(LIBS)
+
+libaudio_resampler_sse2.la: $(libaudio_resampler_sse2_la_OBJECTS) $(libaudio_resampler_sse2_la_DEPENDENCIES) $(EXTRA_libaudio_resampler_sse2_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libaudio_resampler_sse2_la_LINK) $(am_libaudio_resampler_sse2_la_rpath) $(libaudio_resampler_sse2_la_OBJECTS) $(libaudio_resampler_sse2_la_LIBADD) $(LIBS)
+
+libaudio_resampler_sse41.la: $(libaudio_resampler_sse41_la_OBJECTS) $(libaudio_resampler_sse41_la_DEPENDENCIES) $(EXTRA_libaudio_resampler_sse41_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libaudio_resampler_sse41_la_LINK) $(am_libaudio_resampler_sse41_la_rpath) $(libaudio_resampler_sse41_la_OBJECTS) $(libaudio_resampler_sse41_la_LIBADD) $(LIBS)
+
 libgstaudio-@GST_API_VERSION@.la: $(libgstaudio_@GST_API_VERSION@_la_OBJECTS) $(libgstaudio_@GST_API_VERSION@_la_DEPENDENCIES) $(EXTRA_libgstaudio_@GST_API_VERSION@_la_DEPENDENCIES) 
 	$(AM_V_CCLD)$(libgstaudio_@GST_API_VERSION@_la_LINK) -rpath $(libdir) $(libgstaudio_@GST_API_VERSION@_la_OBJECTS) $(libgstaudio_@GST_API_VERSION@_la_LIBADD) $(LIBS)
 
@@ -803,6 +910,9 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libaudio_resampler_sse2_la-audio-resampler-x86-sse2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libaudio_resampler_sse41_la-audio-resampler-x86-sse41.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libaudio_resampler_sse_la-audio-resampler-x86-sse.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-channel-mixer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-channels.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-converter.Plo@am__quote@
@@ -852,6 +962,27 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+libaudio_resampler_sse_la-audio-resampler-x86-sse.lo: audio-resampler-x86-sse.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaudio_resampler_sse_la_CFLAGS) $(CFLAGS) -MT libaudio_resampler_sse_la-audio-resampler-x86-sse.lo -MD -MP -MF $(DEPDIR)/libaudio_resampler_sse_la-audio-resampler-x86-sse.Tpo -c -o libaudio_resampler_sse_la-audio-resampler-x86-sse.lo `test -f 'audio-resampler-x86-sse.c' || echo '$(srcdir)/'`audio-resampler-x86-sse.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libaudio_resampler_sse_la-audio-resampler-x86-sse.Tpo $(DEPDIR)/libaudio_resampler_sse_la-audio-resampler-x86-sse.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='audio-resampler-x86-sse.c' object='libaudio_resampler_sse_la-audio-resampler-x86-sse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaudio_resampler_sse_la_CFLAGS) $(CFLAGS) -c -o libaudio_resampler_sse_la-audio-resampler-x86-sse.lo `test -f 'audio-resampler-x86-sse.c' || echo '$(srcdir)/'`audio-resampler-x86-sse.c
+
+libaudio_resampler_sse2_la-audio-resampler-x86-sse2.lo: audio-resampler-x86-sse2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaudio_resampler_sse2_la_CFLAGS) $(CFLAGS) -MT libaudio_resampler_sse2_la-audio-resampler-x86-sse2.lo -MD -MP -MF $(DEPDIR)/libaudio_resampler_sse2_la-audio-resampler-x86-sse2.Tpo -c -o libaudio_resampler_sse2_la-audio-resampler-x86-sse2.lo `test -f 'audio-resampler-x86-sse2.c' || echo '$(srcdir)/'`audio-resampler-x86-sse2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libaudio_resampler_sse2_la-audio-resampler-x86-sse2.Tpo $(DEPDIR)/libaudio_resampler_sse2_la-audio-resampler-x86-sse2.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='audio-resampler-x86-sse2.c' object='libaudio_resampler_sse2_la-audio-resampler-x86-sse2.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaudio_resampler_sse2_la_CFLAGS) $(CFLAGS) -c -o libaudio_resampler_sse2_la-audio-resampler-x86-sse2.lo `test -f 'audio-resampler-x86-sse2.c' || echo '$(srcdir)/'`audio-resampler-x86-sse2.c
+
+libaudio_resampler_sse41_la-audio-resampler-x86-sse41.lo: audio-resampler-x86-sse41.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaudio_resampler_sse41_la_CFLAGS) $(CFLAGS) -MT libaudio_resampler_sse41_la-audio-resampler-x86-sse41.lo -MD -MP -MF $(DEPDIR)/libaudio_resampler_sse41_la-audio-resampler-x86-sse41.Tpo -c -o libaudio_resampler_sse41_la-audio-resampler-x86-sse41.lo `test -f 'audio-resampler-x86-sse41.c' || echo '$(srcdir)/'`audio-resampler-x86-sse41.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libaudio_resampler_sse41_la-audio-resampler-x86-sse41.Tpo $(DEPDIR)/libaudio_resampler_sse41_la-audio-resampler-x86-sse41.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='audio-resampler-x86-sse41.c' object='libaudio_resampler_sse41_la-audio-resampler-x86-sse41.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libaudio_resampler_sse41_la_CFLAGS) $(CFLAGS) -c -o libaudio_resampler_sse41_la-audio-resampler-x86-sse41.lo `test -f 'audio-resampler-x86-sse41.c' || echo '$(srcdir)/'`audio-resampler-x86-sse41.c
+
 libgstaudio_@GST_API_VERSION@_la-audio.lo: audio.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_API_VERSION@_la-audio.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-audio.lo `test -f 'audio.c' || echo '$(srcdir)/'`audio.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio.Plo
@@ -1239,7 +1370,7 @@
 clean: clean-am
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \
-	mostlyclean-am
+	clean-noinstLTLIBRARIES mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
@@ -1316,14 +1447,14 @@
 .MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \
-	ctags ctags-am dist-hook distclean distclean-compile \
-	distclean-generic distclean-libtool distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-girDATA install-html \
-	install-html-am install-info install-info-am \
-	install-libLTLIBRARIES \
+	clean-libLTLIBRARIES clean-libtool clean-local \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am dist-hook \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-girDATA install-html install-html-am \
+	install-info install-info-am install-libLTLIBRARIES \
 	install-libgstaudio_@GST_API_VERSION@includeHEADERS \
 	install-man \
 	install-nodist_libgstaudio_@GST_API_VERSION@includeHEADERS \
diff --git a/gst-libs/gst/audio/audio-resampler-macros.h b/gst-libs/gst/audio/audio-resampler-macros.h
new file mode 100644
index 0000000..fd6652c
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-macros.h
@@ -0,0 +1,108 @@
+/* GStreamer
+ * Copyright (C) <2015> Wim Taymans <wim.taymans@gmail.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.
+ */
+
+#ifndef __GST_AUDIO_RESAMPLER_MACROS_H__
+#define __GST_AUDIO_RESAMPLER_MACROS_H__
+
+#include <string.h>
+
+#include "audio-resampler-private.h"
+
+#define PRECISION_S16 15
+#define PRECISION_S32 31
+
+#define DECL_GET_TAPS_FULL_FUNC(type)                           \
+gpointer                                                        \
+get_taps_##type##_full (GstAudioResampler * resampler,          \
+    gint *samp_index, gint *samp_phase, type icoeff[4])
+
+DECL_GET_TAPS_FULL_FUNC (gint16);
+DECL_GET_TAPS_FULL_FUNC (gint32);
+DECL_GET_TAPS_FULL_FUNC (gfloat);
+DECL_GET_TAPS_FULL_FUNC (gdouble);
+
+
+#define DECL_GET_TAPS_INTERPOLATE_FUNC(type, inter)             \
+gpointer                                                        \
+get_taps_##type##_##inter (GstAudioResampler * resampler,       \
+    gint *samp_index, gint *samp_phase, type icoeff[4])         \
+
+DECL_GET_TAPS_INTERPOLATE_FUNC (gint16, linear);
+DECL_GET_TAPS_INTERPOLATE_FUNC (gint32, linear);
+DECL_GET_TAPS_INTERPOLATE_FUNC (gfloat, linear);
+DECL_GET_TAPS_INTERPOLATE_FUNC (gdouble, linear);
+
+DECL_GET_TAPS_INTERPOLATE_FUNC (gint16, cubic);
+DECL_GET_TAPS_INTERPOLATE_FUNC (gint32, cubic);
+DECL_GET_TAPS_INTERPOLATE_FUNC (gfloat, cubic);
+DECL_GET_TAPS_INTERPOLATE_FUNC (gdouble, cubic);
+
+
+#define DECL_RESAMPLE_FUNC(type,inter,channels,arch)                    \
+void                                                                    \
+resample_ ##type## _ ##inter## _ ##channels## _ ##arch (GstAudioResampler * resampler,      \
+    gpointer in[], gsize in_len,  gpointer out[], gsize out_len,        \
+    gsize * consumed)
+
+#define MAKE_RESAMPLE_FUNC(type,inter,channels,arch)            \
+DECL_RESAMPLE_FUNC (type, inter, channels, arch)                \
+{                                                               \
+  gint c, di = 0;                                               \
+  gint n_taps = resampler->n_taps;                              \
+  gint blocks = resampler->blocks;                              \
+  gint ostride = resampler->ostride;                            \
+  gint taps_stride = resampler->taps_stride;                    \
+  gint samp_index = 0;                                          \
+  gint samp_phase = 0;                                          \
+                                                                \
+  for (c = 0; c < blocks; c++) {                                \
+    type *ip = in[c];                                           \
+    type *op = ostride == 1 ? out[c] : (type *)out[0] + c;      \
+                                                                \
+    samp_index = resampler->samp_index;                         \
+    samp_phase = resampler->samp_phase;                         \
+                                                                \
+    for (di = 0; di < out_len; di++) {                          \
+      type *ipp, icoeff[4], *taps;                              \
+                                                                \
+      ipp = &ip[samp_index * channels];                         \
+                                                                \
+      taps = get_taps_ ##type##_##inter                         \
+              (resampler, &samp_index, &samp_phase, icoeff);    \
+      inner_product_ ##type##_##inter##_##channels##_##arch     \
+              (op, ipp, taps, n_taps, icoeff, taps_stride);     \
+      op += ostride;                                            \
+    }                                                           \
+    if (in_len > samp_index)                                    \
+      memmove (ip, &ip[samp_index * channels],                  \
+          (in_len - samp_index) * sizeof(type) * channels);     \
+  }                                                             \
+  *consumed = samp_index - resampler->samp_index;               \
+                                                                \
+  resampler->samp_index = 0;                                    \
+  resampler->samp_phase = samp_phase;                           \
+}
+
+#define DECL_RESAMPLE_FUNC_STATIC(type,inter,channels,arch)     \
+static DECL_RESAMPLE_FUNC (type, inter, channels, arch)
+
+#define MAKE_RESAMPLE_FUNC_STATIC(type,inter,channels,arch)     \
+static MAKE_RESAMPLE_FUNC (type, inter, channels, arch)
+
+#endif /* __GST_AUDIO_RESAMPLER_MACROS_H__ */
diff --git a/gst-libs/gst/audio/audio-resampler-neon.h b/gst-libs/gst/audio/audio-resampler-neon.h
index 5520b07..5863e18 100644
--- a/gst-libs/gst/audio/audio-resampler-neon.h
+++ b/gst-libs/gst/audio/audio-resampler-neon.h
@@ -650,17 +650,17 @@
                     "q10", "q11", "q12", "q13", "q14", "q15", "memory");
 }
 
-MAKE_RESAMPLE_FUNC (gint16, full, 1, neon);
-MAKE_RESAMPLE_FUNC (gint16, linear, 1, neon);
-MAKE_RESAMPLE_FUNC (gint16, cubic, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gint16, full, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gint16, linear, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gint16, cubic, 1, neon);
 
-MAKE_RESAMPLE_FUNC (gint32, full, 1, neon);
-MAKE_RESAMPLE_FUNC (gint32, linear, 1, neon);
-MAKE_RESAMPLE_FUNC (gint32, cubic, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gint32, full, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gint32, linear, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gint32, cubic, 1, neon);
 
-MAKE_RESAMPLE_FUNC (gfloat, full, 1, neon);
-MAKE_RESAMPLE_FUNC (gfloat, linear, 1, neon);
-MAKE_RESAMPLE_FUNC (gfloat, cubic, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gfloat, full, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gfloat, linear, 1, neon);
+MAKE_RESAMPLE_FUNC_STATIC (gfloat, cubic, 1, neon);
 
 static void
 audio_resampler_check_neon (const gchar *option)
diff --git a/gst-libs/gst/audio/audio-resampler-private.h b/gst-libs/gst/audio/audio-resampler-private.h
new file mode 100644
index 0000000..c8d1a7e
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-private.h
@@ -0,0 +1,113 @@
+/* GStreamer
+ * Copyright (C) <2015> Wim Taymans <wim.taymans@gmail.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.
+ */
+
+#ifndef __GST_AUDIO_RESAMPLER_PRIVATE_H__
+#define __GST_AUDIO_RESAMPLER_PRIVATE_H__
+
+#include "audio-resampler.h"
+
+/* Contains a collection of all things found in other resamplers:
+ * speex (filter construction, optimizations), ffmpeg (fixed phase filter, blackman filter),
+ * SRC (linear interpolation, fixed precomputed tables),...
+ *
+ *  Supports:
+ *   - S16, S32, F32 and F64 formats
+ *   - nearest, linear and cubic interpolation
+ *   - sinc based interpolation with kaiser or blackman-nutall windows
+ *   - fully configurable kaiser parameters
+ *   - dynamic linear or cubic interpolation of filter table, this can
+ *     use less memory but more CPU
+ *   - full filter table, generated from optionally linear or cubic
+ *     interpolation of filter table
+ *   - fixed filter table size with nearest neighbour phase, optionally
+ *     using a precomputed tables
+ *   - dynamic samplerate changes
+ *   - x86 and neon optimizations
+ */
+typedef void (*ConvertTapsFunc) (gdouble * tmp_taps, gpointer taps,
+    gdouble weight, gint n_taps);
+typedef void (*InterpolateFunc) (gpointer o, const gpointer a, gint len,
+    const gpointer icoeff, gint astride);
+typedef void (*ResampleFunc) (GstAudioResampler * resampler, gpointer in[],
+    gsize in_len, gpointer out[], gsize out_len, gsize * consumed);
+typedef void (*DeinterleaveFunc) (GstAudioResampler * resampler,
+    gpointer * sbuf, gpointer in[], gsize in_frames);
+
+struct _GstAudioResampler
+{
+  GstAudioResamplerMethod method;
+  GstAudioResamplerFlags flags;
+  GstAudioFormat format;
+  GstStructure *options;
+  gint format_index;
+  gint channels;
+  gint in_rate;
+  gint out_rate;
+
+  gint bps;
+  gint ostride;
+
+  GstAudioResamplerFilterMode filter_mode;
+  guint filter_threshold;
+  GstAudioResamplerFilterInterpolation filter_interpolation;
+
+  gdouble cutoff;
+  gdouble kaiser_beta;
+  /* for cubic */
+  gdouble b, c;
+
+  /* temp taps */
+  gpointer tmp_taps;
+
+  /* oversampled main filter table */
+  gint oversample;
+  gint n_taps;
+  gpointer taps;
+  gpointer taps_mem;
+  gsize taps_stride;
+  gint n_phases;
+  gint alloc_taps;
+  gint alloc_phases;
+
+  /* cached taps */
+  gpointer *cached_phases;
+  gpointer cached_taps;
+  gpointer cached_taps_mem;
+  gsize cached_taps_stride;
+
+  ConvertTapsFunc convert_taps;
+  InterpolateFunc interpolate;
+  DeinterleaveFunc deinterleave;
+  ResampleFunc resample;
+
+  gint blocks;
+  gint inc;
+  gint samp_inc;
+  gint samp_frac;
+  gint samp_index;
+  gint samp_phase;
+  gint skip;
+
+  gpointer samples;
+  gsize samples_len;
+  gsize samples_avail;
+  gpointer *sbuf;
+};
+
+#endif /* __GST_AUDIO_RESAMPLER_PRIVATE_H__ */
diff --git a/gst-libs/gst/audio/audio-resampler-x86-sse.c b/gst-libs/gst/audio/audio-resampler-x86-sse.c
new file mode 100644
index 0000000..d100c59
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-x86-sse.c
@@ -0,0 +1,168 @@
+/* GStreamer
+ * Copyright (C) <2016> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "audio-resampler-x86-sse.h"
+
+#if defined (HAVE_XMMINTRIN_H) && defined(__SSE__)
+#include <xmmintrin.h>
+
+static inline void
+inner_product_gfloat_full_1_sse (gfloat * o, const gfloat * a,
+    const gfloat * b, gint len, const gfloat * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128 sum = _mm_setzero_ps ();
+
+  for (; i < len; i += 8) {
+    sum =
+        _mm_add_ps (sum, _mm_mul_ps (_mm_loadu_ps (a + i + 0),
+            _mm_load_ps (b + i + 0)));
+    sum =
+        _mm_add_ps (sum, _mm_mul_ps (_mm_loadu_ps (a + i + 4),
+            _mm_load_ps (b + i + 4)));
+  }
+  sum = _mm_add_ps (sum, _mm_movehl_ps (sum, sum));
+  sum = _mm_add_ss (sum, _mm_shuffle_ps (sum, sum, 0x55));
+  _mm_store_ss (o, sum);
+}
+
+static inline void
+inner_product_gfloat_linear_1_sse (gfloat * o, const gfloat * a,
+    const gfloat * b, gint len, const gfloat * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128 sum[2], t;
+  const gfloat *c[2] = { (gfloat *) ((gint8 *) b + 0 * bstride),
+    (gfloat *) ((gint8 *) b + 1 * bstride)
+  };
+
+  sum[0] = sum[1] = _mm_setzero_ps ();
+
+  for (; i < len; i += 8) {
+    t = _mm_loadu_ps (a + i + 0);
+    sum[0] = _mm_add_ps (sum[0], _mm_mul_ps (t, _mm_load_ps (c[0] + i + 0)));
+    sum[1] = _mm_add_ps (sum[1], _mm_mul_ps (t, _mm_load_ps (c[1] + i + 0)));
+    t = _mm_loadu_ps (a + i + 4);
+    sum[0] = _mm_add_ps (sum[0], _mm_mul_ps (t, _mm_load_ps (c[0] + i + 4)));
+    sum[1] = _mm_add_ps (sum[1], _mm_mul_ps (t, _mm_load_ps (c[1] + i + 4)));
+  }
+  sum[0] = _mm_mul_ps (_mm_sub_ps (sum[0], sum[1]), _mm_load1_ps (icoeff));
+  sum[0] = _mm_add_ps (sum[0], sum[1]);
+  sum[0] = _mm_add_ps (sum[0], _mm_movehl_ps (sum[0], sum[0]));
+  sum[0] = _mm_add_ss (sum[0], _mm_shuffle_ps (sum[0], sum[0], 0x55));
+  _mm_store_ss (o, sum[0]);
+}
+
+static inline void
+inner_product_gfloat_cubic_1_sse (gfloat * o, const gfloat * a,
+    const gfloat * b, gint len, const gfloat * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128 sum[4];
+  __m128 t, f = _mm_loadu_ps (icoeff);
+  const gfloat *c[4] = { (gfloat *) ((gint8 *) b + 0 * bstride),
+    (gfloat *) ((gint8 *) b + 1 * bstride),
+    (gfloat *) ((gint8 *) b + 2 * bstride),
+    (gfloat *) ((gint8 *) b + 3 * bstride)
+  };
+
+  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_ps ();
+
+  for (; i < len; i += 4) {
+    t = _mm_loadu_ps (a + i);
+    sum[0] = _mm_add_ps (sum[0], _mm_mul_ps (t, _mm_load_ps (c[0] + i)));
+    sum[1] = _mm_add_ps (sum[1], _mm_mul_ps (t, _mm_load_ps (c[1] + i)));
+    sum[2] = _mm_add_ps (sum[2], _mm_mul_ps (t, _mm_load_ps (c[2] + i)));
+    sum[3] = _mm_add_ps (sum[3], _mm_mul_ps (t, _mm_load_ps (c[3] + i)));
+  }
+  sum[0] = _mm_mul_ps (sum[0], _mm_shuffle_ps (f, f, 0x00));
+  sum[1] = _mm_mul_ps (sum[1], _mm_shuffle_ps (f, f, 0x55));
+  sum[2] = _mm_mul_ps (sum[2], _mm_shuffle_ps (f, f, 0xaa));
+  sum[3] = _mm_mul_ps (sum[3], _mm_shuffle_ps (f, f, 0xff));
+  sum[0] = _mm_add_ps (sum[0], sum[1]);
+  sum[2] = _mm_add_ps (sum[2], sum[3]);
+  sum[0] = _mm_add_ps (sum[0], sum[2]);
+  sum[0] = _mm_add_ps (sum[0], _mm_movehl_ps (sum[0], sum[0]));
+  sum[0] = _mm_add_ss (sum[0], _mm_shuffle_ps (sum[0], sum[0], 0x55));
+  _mm_store_ss (o, sum[0]);
+}
+
+MAKE_RESAMPLE_FUNC (gfloat, full, 1, sse);
+MAKE_RESAMPLE_FUNC (gfloat, linear, 1, sse);
+MAKE_RESAMPLE_FUNC (gfloat, cubic, 1, sse);
+
+void
+interpolate_gfloat_linear_sse (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride)
+{
+  gint i;
+  gfloat *o = op, *a = ap, *ic = icp;
+  __m128 f[2], t1, t2;
+  const gfloat *c[2] = { (gfloat *) ((gint8 *) a + 0 * astride),
+    (gfloat *) ((gint8 *) a + 1 * astride)
+  };
+
+  f[0] = _mm_load1_ps (ic + 0);
+  f[1] = _mm_load1_ps (ic + 1);
+
+  for (i = 0; i < len; i += 8) {
+    t1 = _mm_mul_ps (_mm_load_ps (c[0] + i + 0), f[0]);
+    t2 = _mm_mul_ps (_mm_load_ps (c[1] + i + 0), f[1]);
+    _mm_store_ps (o + i + 0, _mm_add_ps (t1, t2));
+
+    t1 = _mm_mul_ps (_mm_load_ps (c[0] + i + 4), f[0]);
+    t2 = _mm_mul_ps (_mm_load_ps (c[1] + i + 4), f[1]);
+    _mm_store_ps (o + i + 4, _mm_add_ps (t1, t2));
+  }
+}
+
+void
+interpolate_gfloat_cubic_sse (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride)
+{
+  gint i;
+  gfloat *o = op, *a = ap, *ic = icp;
+  __m128 f[4], t[4];
+  const gfloat *c[4] = { (gfloat *) ((gint8 *) a + 0 * astride),
+    (gfloat *) ((gint8 *) a + 1 * astride),
+    (gfloat *) ((gint8 *) a + 2 * astride),
+    (gfloat *) ((gint8 *) a + 3 * astride)
+  };
+
+  f[0] = _mm_load1_ps (ic + 0);
+  f[1] = _mm_load1_ps (ic + 1);
+  f[2] = _mm_load1_ps (ic + 2);
+  f[3] = _mm_load1_ps (ic + 3);
+
+  for (i = 0; i < len; i += 4) {
+    t[0] = _mm_mul_ps (_mm_load_ps (c[0] + i + 0), f[0]);
+    t[1] = _mm_mul_ps (_mm_load_ps (c[1] + i + 0), f[1]);
+    t[2] = _mm_mul_ps (_mm_load_ps (c[2] + i + 0), f[2]);
+    t[3] = _mm_mul_ps (_mm_load_ps (c[3] + i + 0), f[3]);
+    t[0] = _mm_add_ps (t[0], t[1]);
+    t[2] = _mm_add_ps (t[2], t[3]);
+    _mm_store_ps (o + i + 0, _mm_add_ps (t[0], t[2]));
+  }
+}
+
+#endif
diff --git a/gst-libs/gst/audio/audio-resampler-x86-sse.h b/gst-libs/gst/audio/audio-resampler-x86-sse.h
new file mode 100644
index 0000000..1d3e9a4
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-x86-sse.h
@@ -0,0 +1,35 @@
+/* GStreamer
+ * Copyright (C) <2016> Wim Taymans <wim.taymans@gmail.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.
+ */
+
+#ifndef AUDIO_RESAMPLER_X86_SSE_H
+#define AUDIO_RESAMPLER_X86_SSE_H
+
+#include "audio-resampler-macros.h"
+
+DECL_RESAMPLE_FUNC (gfloat, full, 1, sse);
+DECL_RESAMPLE_FUNC (gfloat, linear, 1, sse);
+DECL_RESAMPLE_FUNC (gfloat, cubic, 1, sse);
+
+void interpolate_gfloat_linear_sse (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride);
+
+void interpolate_gfloat_cubic_sse (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride);
+
+#endif /* AUDIO_RESAMPLER_X86_SSE_H */
diff --git a/gst-libs/gst/audio/audio-resampler-x86-sse2.c b/gst-libs/gst/audio/audio-resampler-x86-sse2.c
new file mode 100644
index 0000000..a89fb41
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-x86-sse2.c
@@ -0,0 +1,399 @@
+/* GStreamer
+ * Copyright (C) <2016> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "audio-resampler-x86-sse2.h"
+
+#if defined (HAVE_EMMINTRIN_H) && defined(__SSE2__)
+#include <emmintrin.h>
+
+static inline void
+inner_product_gint16_full_1_sse2 (gint16 * o, const gint16 * a,
+    const gint16 * b, gint len, const gint16 * icoeff, gint bstride)
+{
+  gint i;
+  __m128i sum, t;
+
+  sum = _mm_setzero_si128 ();
+
+  for (i = 0; i < len; i += 16) {
+    t = _mm_loadu_si128 ((__m128i *) (a + i));
+    sum =
+        _mm_add_epi32 (sum, _mm_madd_epi16 (t,
+            _mm_load_si128 ((__m128i *) (b + i + 0))));
+
+    t = _mm_loadu_si128 ((__m128i *) (a + i + 8));
+    sum =
+        _mm_add_epi32 (sum, _mm_madd_epi16 (t,
+            _mm_load_si128 ((__m128i *) (b + i + 8))));
+  }
+  sum = _mm_add_epi32 (sum, _mm_shuffle_epi32 (sum, _MM_SHUFFLE (2, 3, 2, 3)));
+  sum = _mm_add_epi32 (sum, _mm_shuffle_epi32 (sum, _MM_SHUFFLE (1, 1, 1, 1)));
+
+  sum = _mm_add_epi32 (sum, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
+  sum = _mm_srai_epi32 (sum, PRECISION_S16);
+  sum = _mm_packs_epi32 (sum, sum);
+  *o = _mm_extract_epi16 (sum, 0);
+}
+
+static inline void
+inner_product_gint16_linear_1_sse2 (gint16 * o, const gint16 * a,
+    const gint16 * b, gint len, const gint16 * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128i sum[2], t;
+  __m128i f = _mm_set_epi64x (0, *((gint64 *) icoeff));
+  const gint16 *c[2] = { (gint16 *) ((gint8 *) b + 0 * bstride),
+    (gint16 *) ((gint8 *) b + 1 * bstride)
+  };
+
+  sum[0] = sum[1] = _mm_setzero_si128 ();
+  f = _mm_unpacklo_epi16 (f, sum[0]);
+
+  for (; i < len; i += 16) {
+    t = _mm_loadu_si128 ((__m128i *) (a + i + 0));
+    sum[0] =
+        _mm_add_epi32 (sum[0], _mm_madd_epi16 (t,
+            _mm_load_si128 ((__m128i *) (c[0] + i + 0))));
+    sum[1] =
+        _mm_add_epi32 (sum[1], _mm_madd_epi16 (t,
+            _mm_load_si128 ((__m128i *) (c[1] + i + 0))));
+
+    t = _mm_loadu_si128 ((__m128i *) (a + i + 8));
+    sum[0] =
+        _mm_add_epi32 (sum[0], _mm_madd_epi16 (t,
+            _mm_load_si128 ((__m128i *) (c[0] + i + 8))));
+    sum[1] =
+        _mm_add_epi32 (sum[1], _mm_madd_epi16 (t,
+            _mm_load_si128 ((__m128i *) (c[1] + i + 8))));
+  }
+  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
+  sum[1] = _mm_srai_epi32 (sum[1], PRECISION_S16);
+
+  sum[0] =
+      _mm_madd_epi16 (sum[0], _mm_shuffle_epi32 (f, _MM_SHUFFLE (0, 0, 0, 0)));
+  sum[1] =
+      _mm_madd_epi16 (sum[1], _mm_shuffle_epi32 (f, _MM_SHUFFLE (1, 1, 1, 1)));
+  sum[0] = _mm_add_epi32 (sum[0], sum[1]);
+
+  sum[0] =
+      _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (2, 3, 2,
+              3)));
+  sum[0] =
+      _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (1, 1, 1,
+              1)));
+
+  sum[0] = _mm_add_epi32 (sum[0], _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
+  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
+  sum[0] = _mm_packs_epi32 (sum[0], sum[0]);
+  *o = _mm_extract_epi16 (sum[0], 0);
+}
+
+static inline void
+inner_product_gint16_cubic_1_sse2 (gint16 * o, const gint16 * a,
+    const gint16 * b, gint len, const gint16 * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128i sum[4], t[4];
+  __m128i f = _mm_set_epi64x (0, *((long long *) icoeff));
+  const gint16 *c[4] = { (gint16 *) ((gint8 *) b + 0 * bstride),
+    (gint16 *) ((gint8 *) b + 1 * bstride),
+    (gint16 *) ((gint8 *) b + 2 * bstride),
+    (gint16 *) ((gint8 *) b + 3 * bstride)
+  };
+
+  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_si128 ();
+  f = _mm_unpacklo_epi16 (f, sum[0]);
+
+  for (; i < len; i += 8) {
+    t[0] = _mm_loadu_si128 ((__m128i *) (a + i));
+    sum[0] =
+        _mm_add_epi32 (sum[0], _mm_madd_epi16 (t[0],
+            _mm_load_si128 ((__m128i *) (c[0] + i))));
+    sum[1] =
+        _mm_add_epi32 (sum[1], _mm_madd_epi16 (t[0],
+            _mm_load_si128 ((__m128i *) (c[1] + i))));
+    sum[2] =
+        _mm_add_epi32 (sum[2], _mm_madd_epi16 (t[0],
+            _mm_load_si128 ((__m128i *) (c[2] + i))));
+    sum[3] =
+        _mm_add_epi32 (sum[3], _mm_madd_epi16 (t[0],
+            _mm_load_si128 ((__m128i *) (c[3] + i))));
+  }
+  t[0] = _mm_unpacklo_epi32 (sum[0], sum[1]);
+  t[1] = _mm_unpacklo_epi32 (sum[2], sum[3]);
+  t[2] = _mm_unpackhi_epi32 (sum[0], sum[1]);
+  t[3] = _mm_unpackhi_epi32 (sum[2], sum[3]);
+
+  sum[0] =
+      _mm_add_epi32 (_mm_unpacklo_epi64 (t[0], t[1]), _mm_unpackhi_epi64 (t[0],
+          t[1]));
+  sum[2] =
+      _mm_add_epi32 (_mm_unpacklo_epi64 (t[2], t[3]), _mm_unpackhi_epi64 (t[2],
+          t[3]));
+  sum[0] = _mm_add_epi32 (sum[0], sum[2]);
+
+  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
+  sum[0] = _mm_madd_epi16 (sum[0], f);
+
+  sum[0] =
+      _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (2, 3, 2,
+              3)));
+  sum[0] =
+      _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (1, 1, 1,
+              1)));
+
+  sum[0] = _mm_add_epi32 (sum[0], _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
+  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
+  sum[0] = _mm_packs_epi32 (sum[0], sum[0]);
+  *o = _mm_extract_epi16 (sum[0], 0);
+}
+
+static inline void
+inner_product_gdouble_full_1_sse2 (gdouble * o, const gdouble * a,
+    const gdouble * b, gint len, const gdouble * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128d sum = _mm_setzero_pd ();
+
+  for (; i < len; i += 8) {
+    sum =
+        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 0),
+            _mm_load_pd (b + i + 0)));
+    sum =
+        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 2),
+            _mm_load_pd (b + i + 2)));
+    sum =
+        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 4),
+            _mm_load_pd (b + i + 4)));
+    sum =
+        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 6),
+            _mm_load_pd (b + i + 6)));
+  }
+  sum = _mm_add_sd (sum, _mm_unpackhi_pd (sum, sum));
+  _mm_store_sd (o, sum);
+}
+
+static inline void
+inner_product_gdouble_linear_1_sse2 (gdouble * o, const gdouble * a,
+    const gdouble * b, gint len, const gdouble * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128d sum[2], t;
+  const gdouble *c[2] = { (gdouble *) ((gint8 *) b + 0 * bstride),
+    (gdouble *) ((gint8 *) b + 1 * bstride)
+  };
+
+  sum[0] = sum[1] = _mm_setzero_pd ();
+
+  for (; i < len; i += 4) {
+    t = _mm_loadu_pd (a + i + 0);
+    sum[0] = _mm_add_pd (sum[0], _mm_mul_pd (t, _mm_load_pd (c[0] + i + 0)));
+    sum[1] = _mm_add_pd (sum[1], _mm_mul_pd (t, _mm_load_pd (c[1] + i + 0)));
+    t = _mm_loadu_pd (a + i + 2);
+    sum[0] = _mm_add_pd (sum[0], _mm_mul_pd (t, _mm_load_pd (c[0] + i + 2)));
+    sum[1] = _mm_add_pd (sum[1], _mm_mul_pd (t, _mm_load_pd (c[1] + i + 2)));
+  }
+  sum[0] = _mm_mul_pd (_mm_sub_pd (sum[0], sum[1]), _mm_load1_pd (icoeff));
+  sum[0] = _mm_add_pd (sum[0], sum[1]);
+  sum[0] = _mm_add_sd (sum[0], _mm_unpackhi_pd (sum[0], sum[0]));
+  _mm_store_sd (o, sum[0]);
+}
+
+static inline void
+inner_product_gdouble_cubic_1_sse2 (gdouble * o, const gdouble * a,
+    const gdouble * b, gint len, const gdouble * icoeff, gint bstride)
+{
+  gint i;
+  __m128d f[2], sum[4], t;
+  const gdouble *c[4] = { (gdouble *) ((gint8 *) b + 0 * bstride),
+    (gdouble *) ((gint8 *) b + 1 * bstride),
+    (gdouble *) ((gint8 *) b + 2 * bstride),
+    (gdouble *) ((gint8 *) b + 3 * bstride)
+  };
+
+  f[0] = _mm_loadu_pd (icoeff + 0);
+  f[1] = _mm_loadu_pd (icoeff + 2);
+  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_pd ();
+
+  for (i = 0; i < len; i += 2) {
+    t = _mm_loadu_pd (a + i + 0);
+    sum[0] = _mm_add_pd (sum[0], _mm_mul_pd (t, _mm_load_pd (c[0] + i)));
+    sum[1] = _mm_add_pd (sum[1], _mm_mul_pd (t, _mm_load_pd (c[1] + i)));
+    sum[2] = _mm_add_pd (sum[2], _mm_mul_pd (t, _mm_load_pd (c[2] + i)));
+    sum[3] = _mm_add_pd (sum[3], _mm_mul_pd (t, _mm_load_pd (c[3] + i)));
+  }
+  sum[0] =
+      _mm_mul_pd (sum[0], _mm_shuffle_pd (f[0], f[0], _MM_SHUFFLE2 (0, 0)));
+  sum[1] =
+      _mm_mul_pd (sum[1], _mm_shuffle_pd (f[0], f[0], _MM_SHUFFLE2 (1, 1)));
+  sum[2] =
+      _mm_mul_pd (sum[2], _mm_shuffle_pd (f[1], f[1], _MM_SHUFFLE2 (0, 0)));
+  sum[3] =
+      _mm_mul_pd (sum[3], _mm_shuffle_pd (f[1], f[1], _MM_SHUFFLE2 (1, 1)));
+  sum[0] = _mm_add_pd (sum[0], sum[1]);
+  sum[2] = _mm_add_pd (sum[2], sum[3]);
+  sum[0] = _mm_add_pd (sum[0], sum[2]);
+  sum[0] = _mm_add_sd (sum[0], _mm_unpackhi_pd (sum[0], sum[0]));
+  _mm_store_sd (o, sum[0]);
+}
+
+MAKE_RESAMPLE_FUNC (gint16, full, 1, sse2);
+MAKE_RESAMPLE_FUNC (gint16, linear, 1, sse2);
+MAKE_RESAMPLE_FUNC (gint16, cubic, 1, sse2);
+
+MAKE_RESAMPLE_FUNC (gdouble, full, 1, sse2);
+MAKE_RESAMPLE_FUNC (gdouble, linear, 1, sse2);
+MAKE_RESAMPLE_FUNC (gdouble, cubic, 1, sse2);
+
+void
+interpolate_gint16_linear_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride)
+{
+  gint i = 0;
+  gint16 *o = op, *a = ap, *ic = icp;
+  __m128i ta, tb, t1, t2;
+  __m128i f = _mm_set_epi64x (0, *((gint64 *) ic));
+  const gint16 *c[2] = { (gint16 *) ((gint8 *) a + 0 * astride),
+    (gint16 *) ((gint8 *) a + 1 * astride)
+  };
+
+  f = _mm_unpacklo_epi32 (f, f);
+  f = _mm_unpacklo_epi64 (f, f);
+
+  for (; i < len; i += 8) {
+    ta = _mm_load_si128 ((__m128i *) (c[0] + i));
+    tb = _mm_load_si128 ((__m128i *) (c[1] + i));
+
+    t1 = _mm_madd_epi16 (_mm_unpacklo_epi16 (ta, tb), f);
+    t2 = _mm_madd_epi16 (_mm_unpackhi_epi16 (ta, tb), f);
+
+    t1 = _mm_add_epi32 (t1, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
+    t2 = _mm_add_epi32 (t2, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
+
+    t1 = _mm_srai_epi32 (t1, PRECISION_S16);
+    t2 = _mm_srai_epi32 (t2, PRECISION_S16);
+
+    t1 = _mm_packs_epi32 (t1, t2);
+    _mm_store_si128 ((__m128i *) (o + i), t1);
+  }
+}
+
+void
+interpolate_gint16_cubic_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride)
+{
+  gint i = 0;
+  gint16 *o = op, *a = ap, *ic = icp;
+  __m128i ta, tb, tl1, tl2, th1, th2;
+  __m128i f[2];
+  const gint16 *c[4] = { (gint16 *) ((gint8 *) a + 0 * astride),
+    (gint16 *) ((gint8 *) a + 1 * astride),
+    (gint16 *) ((gint8 *) a + 2 * astride),
+    (gint16 *) ((gint8 *) a + 3 * astride)
+  };
+
+  f[0] = _mm_set_epi16 (ic[1], ic[0], ic[1], ic[0], ic[1], ic[0], ic[1], ic[0]);
+  f[1] = _mm_set_epi16 (ic[3], ic[2], ic[3], ic[2], ic[3], ic[2], ic[3], ic[2]);
+
+  for (; i < len; i += 8) {
+    ta = _mm_load_si128 ((__m128i *) (c[0] + i));
+    tb = _mm_load_si128 ((__m128i *) (c[1] + i));
+
+    tl1 = _mm_madd_epi16 (_mm_unpacklo_epi16 (ta, tb), f[0]);
+    th1 = _mm_madd_epi16 (_mm_unpackhi_epi16 (ta, tb), f[0]);
+
+    ta = _mm_load_si128 ((__m128i *) (c[2] + i));
+    tb = _mm_load_si128 ((__m128i *) (c[3] + i));
+
+    tl2 = _mm_madd_epi16 (_mm_unpacklo_epi16 (ta, tb), f[1]);
+    th2 = _mm_madd_epi16 (_mm_unpackhi_epi16 (ta, tb), f[1]);
+
+    tl1 = _mm_add_epi32 (tl1, tl2);
+    th1 = _mm_add_epi32 (th1, th2);
+
+    tl1 = _mm_add_epi32 (tl1, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
+    th1 = _mm_add_epi32 (th1, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
+
+    tl1 = _mm_srai_epi32 (tl1, PRECISION_S16);
+    th1 = _mm_srai_epi32 (th1, PRECISION_S16);
+
+    tl1 = _mm_packs_epi32 (tl1, th1);
+    _mm_store_si128 ((__m128i *) (o + i), tl1);
+  }
+}
+
+void
+interpolate_gdouble_linear_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride)
+{
+  gint i;
+  gdouble *o = op, *a = ap, *ic = icp;
+  __m128d f[2], t1, t2;
+  const gdouble *c[2] = { (gdouble *) ((gint8 *) a + 0 * astride),
+    (gdouble *) ((gint8 *) a + 1 * astride)
+  };
+
+  f[0] = _mm_load1_pd (ic + 0);
+  f[1] = _mm_load1_pd (ic + 1);
+
+  for (i = 0; i < len; i += 4) {
+    t1 = _mm_mul_pd (_mm_load_pd (c[0] + i + 0), f[0]);
+    t2 = _mm_mul_pd (_mm_load_pd (c[1] + i + 0), f[1]);
+    _mm_store_pd (o + i + 0, _mm_add_pd (t1, t2));
+
+    t1 = _mm_mul_pd (_mm_load_pd (c[0] + i + 2), f[0]);
+    t2 = _mm_mul_pd (_mm_load_pd (c[1] + i + 2), f[1]);
+    _mm_store_pd (o + i + 2, _mm_add_pd (t1, t2));
+  }
+}
+
+void
+interpolate_gdouble_cubic_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride)
+{
+  gint i;
+  gdouble *o = op, *a = ap, *ic = icp;
+  __m128d f[4], t[4];
+  const gdouble *c[4] = { (gdouble *) ((gint8 *) a + 0 * astride),
+    (gdouble *) ((gint8 *) a + 1 * astride),
+    (gdouble *) ((gint8 *) a + 2 * astride),
+    (gdouble *) ((gint8 *) a + 3 * astride)
+  };
+
+  f[0] = _mm_load1_pd (ic + 0);
+  f[1] = _mm_load1_pd (ic + 1);
+  f[2] = _mm_load1_pd (ic + 2);
+  f[3] = _mm_load1_pd (ic + 3);
+
+  for (i = 0; i < len; i += 2) {
+    t[0] = _mm_mul_pd (_mm_load_pd (c[0] + i + 0), f[0]);
+    t[1] = _mm_mul_pd (_mm_load_pd (c[1] + i + 0), f[1]);
+    t[2] = _mm_mul_pd (_mm_load_pd (c[2] + i + 0), f[2]);
+    t[3] = _mm_mul_pd (_mm_load_pd (c[3] + i + 0), f[3]);
+    t[0] = _mm_add_pd (t[0], t[1]);
+    t[2] = _mm_add_pd (t[2], t[3]);
+    _mm_store_pd (o + i + 0, _mm_add_pd (t[0], t[2]));
+  }
+}
+
+#endif
diff --git a/gst-libs/gst/audio/audio-resampler-x86-sse2.h b/gst-libs/gst/audio/audio-resampler-x86-sse2.h
new file mode 100644
index 0000000..3bbf5cd
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-x86-sse2.h
@@ -0,0 +1,49 @@
+/* GStreamer
+ * Copyright (C) <2016> Wim Taymans <wim.taymans@gmail.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.
+ */
+
+#ifndef AUDIO_RESAMPLER_X86_SSE2_H
+#define AUDIO_RESAMPLER_X86_SSE2_H
+
+#include "audio-resampler-macros.h"
+
+DECL_RESAMPLE_FUNC (gint16, full, 1, sse2);
+DECL_RESAMPLE_FUNC (gint16, linear, 1, sse2);
+DECL_RESAMPLE_FUNC (gint16, cubic, 1, sse2);
+
+DECL_RESAMPLE_FUNC (gdouble, full, 1, sse2);
+DECL_RESAMPLE_FUNC (gdouble, linear, 1, sse2);
+DECL_RESAMPLE_FUNC (gdouble, cubic, 1, sse2);
+
+void
+interpolate_gint16_linear_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride);
+
+void
+interpolate_gint16_cubic_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride);
+
+void
+interpolate_gdouble_linear_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride);
+
+void
+interpolate_gdouble_cubic_sse2 (gpointer op, const gpointer ap,
+    gint len, const gpointer icp, gint astride);
+
+#endif /* AUDIO_RESAMPLER_X86_SSE2_H */
diff --git a/gst-libs/gst/audio/audio-resampler-x86-sse41.c b/gst-libs/gst/audio/audio-resampler-x86-sse41.c
new file mode 100644
index 0000000..ce1cc24
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-x86-sse41.c
@@ -0,0 +1,188 @@
+/* GStreamer
+ * Copyright (C) <2016> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "audio-resampler-x86-sse41.h"
+
+#if 0
+#define __SSE4_1__
+#pragma GCC target("sse4.1")
+#endif
+
+#if defined (__x86_64__) && \
+    defined (HAVE_SMMINTRIN_H) && defined (HAVE_EMMINTRIN_H) && \
+    defined (__SSE4_1__)
+
+#include <emmintrin.h>
+#include <smmintrin.h>
+
+static inline void
+inner_product_gint32_full_1_sse41 (gint32 * o, const gint32 * a,
+    const gint32 * b, gint len, const gint32 * icoeff, gint bstride)
+{
+  gint i = 0;
+  __m128i sum, ta, tb;
+  gint64 res;
+
+  sum = _mm_setzero_si128 ();
+
+  for (; i < len; i += 8) {
+    ta = _mm_loadu_si128 ((__m128i *) (a + i));
+    tb = _mm_load_si128 ((__m128i *) (b + i));
+
+    sum =
+        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum =
+        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+
+    ta = _mm_loadu_si128 ((__m128i *) (a + i + 4));
+    tb = _mm_load_si128 ((__m128i *) (b + i + 4));
+
+    sum =
+        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum =
+        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+  }
+  sum = _mm_add_epi64 (sum, _mm_unpackhi_epi64 (sum, sum));
+  res = _mm_cvtsi128_si64 (sum);
+
+  res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
+  *o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
+}
+
+static inline void
+inner_product_gint32_linear_1_sse41 (gint32 * o, const gint32 * a,
+    const gint32 * b, gint len, const gint32 * icoeff, gint bstride)
+{
+  gint i = 0;
+  gint64 res;
+  __m128i sum[2], ta, tb;
+  __m128i f = _mm_loadu_si128 ((__m128i *) icoeff);
+  const gint32 *c[2] = { (gint32 *) ((gint8 *) b + 0 * bstride),
+    (gint32 *) ((gint8 *) b + 1 * bstride)
+  };
+
+  sum[0] = sum[1] = _mm_setzero_si128 ();
+
+  for (; i < len; i += 4) {
+    ta = _mm_loadu_si128 ((__m128i *) (a + i));
+
+    tb = _mm_load_si128 ((__m128i *) (c[0] + i));
+    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+
+    tb = _mm_load_si128 ((__m128i *) (c[1] + i));
+    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+  }
+  sum[0] = _mm_srli_epi64 (sum[0], PRECISION_S32);
+  sum[1] = _mm_srli_epi64 (sum[1], PRECISION_S32);
+  sum[0] =
+      _mm_mul_epi32 (sum[0], _mm_shuffle_epi32 (f, _MM_SHUFFLE (0, 0, 0, 0)));
+  sum[1] =
+      _mm_mul_epi32 (sum[1], _mm_shuffle_epi32 (f, _MM_SHUFFLE (1, 1, 1, 1)));
+  sum[0] = _mm_add_epi64 (sum[0], sum[1]);
+  sum[0] = _mm_add_epi64 (sum[0], _mm_unpackhi_epi64 (sum[0], sum[0]));
+  res = _mm_cvtsi128_si64 (sum[0]);
+
+  res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
+  *o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
+}
+
+static inline void
+inner_product_gint32_cubic_1_sse41 (gint32 * o, const gint32 * a,
+    const gint32 * b, gint len, const gint32 * icoeff, gint bstride)
+{
+  gint i = 0;
+  gint64 res;
+  __m128i sum[4], ta, tb;
+  __m128i f = _mm_loadu_si128 ((__m128i *) icoeff);
+  const gint32 *c[4] = { (gint32 *) ((gint8 *) b + 0 * bstride),
+    (gint32 *) ((gint8 *) b + 1 * bstride),
+    (gint32 *) ((gint8 *) b + 2 * bstride),
+    (gint32 *) ((gint8 *) b + 3 * bstride)
+  };
+
+  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_si128 ();
+
+  for (; i < len; i += 4) {
+    ta = _mm_loadu_si128 ((__m128i *) (a + i));
+
+    tb = _mm_load_si128 ((__m128i *) (c[0] + i));
+    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+
+    tb = _mm_load_si128 ((__m128i *) (c[1] + i));
+    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+
+    tb = _mm_load_si128 ((__m128i *) (c[2] + i));
+    sum[2] = _mm_add_epi64 (sum[2], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum[2] = _mm_add_epi64 (sum[2], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+
+    tb = _mm_load_si128 ((__m128i *) (c[3] + i));
+    sum[3] = _mm_add_epi64 (sum[3], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
+            _mm_unpacklo_epi32 (tb, tb)));
+    sum[3] = _mm_add_epi64 (sum[3], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
+            _mm_unpackhi_epi32 (tb, tb)));
+  }
+  sum[0] = _mm_srli_epi64 (sum[0], PRECISION_S32);
+  sum[1] = _mm_srli_epi64 (sum[1], PRECISION_S32);
+  sum[2] = _mm_srli_epi64 (sum[2], PRECISION_S32);
+  sum[3] = _mm_srli_epi64 (sum[3], PRECISION_S32);
+  sum[0] =
+      _mm_mul_epi32 (sum[0], _mm_shuffle_epi32 (f, _MM_SHUFFLE (0, 0, 0, 0)));
+  sum[1] =
+      _mm_mul_epi32 (sum[1], _mm_shuffle_epi32 (f, _MM_SHUFFLE (1, 1, 1, 1)));
+  sum[2] =
+      _mm_mul_epi32 (sum[2], _mm_shuffle_epi32 (f, _MM_SHUFFLE (2, 2, 2, 2)));
+  sum[3] =
+      _mm_mul_epi32 (sum[3], _mm_shuffle_epi32 (f, _MM_SHUFFLE (3, 3, 3, 3)));
+  sum[0] = _mm_add_epi64 (sum[0], sum[1]);
+  sum[2] = _mm_add_epi64 (sum[2], sum[3]);
+  sum[0] = _mm_add_epi64 (sum[0], sum[2]);
+  sum[0] = _mm_add_epi64 (sum[0], _mm_unpackhi_epi64 (sum[0], sum[0]));
+  res = _mm_cvtsi128_si64 (sum[0]);
+
+  res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
+  *o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
+}
+
+MAKE_RESAMPLE_FUNC (gint32, full, 1, sse41);
+MAKE_RESAMPLE_FUNC (gint32, linear, 1, sse41);
+MAKE_RESAMPLE_FUNC (gint32, cubic, 1, sse41);
+
+#endif
diff --git a/gst-libs/gst/audio/audio-resampler-x86-sse41.h b/gst-libs/gst/audio/audio-resampler-x86-sse41.h
new file mode 100644
index 0000000..d8706b0
--- /dev/null
+++ b/gst-libs/gst/audio/audio-resampler-x86-sse41.h
@@ -0,0 +1,29 @@
+/* GStreamer
+ * Copyright (C) <2016> Wim Taymans <wim.taymans@gmail.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.
+ */
+
+#ifndef AUDIO_RESAMPLER_X86_SSE41_H
+#define AUDIO_RESAMPLER_X86_SSE41_H
+
+#include "audio-resampler-macros.h"
+
+DECL_RESAMPLE_FUNC (gint32, full, 1, sse41);
+DECL_RESAMPLE_FUNC (gint32, linear, 1, sse41);
+DECL_RESAMPLE_FUNC (gint32, cubic, 1, sse41);
+
+#endif /* AUDIO_RESAMPLER_X86_SSE41_H */
diff --git a/gst-libs/gst/audio/audio-resampler-x86.h b/gst-libs/gst/audio/audio-resampler-x86.h
index c1b73d0..47bc430 100644
--- a/gst-libs/gst/audio/audio-resampler-x86.h
+++ b/gst-libs/gst/audio/audio-resampler-x86.h
@@ -17,631 +17,16 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#if defined (HAVE_XMMINTRIN_H) && defined(__SSE__)
-#include <xmmintrin.h>
-
-static inline void
-inner_product_gfloat_full_1_sse (gfloat * o, const gfloat * a,
-    const gfloat * b, gint len, const gfloat * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128 sum = _mm_setzero_ps ();
-
-  for (; i < len; i += 8) {
-    sum =
-        _mm_add_ps (sum, _mm_mul_ps (_mm_loadu_ps (a + i + 0),
-            _mm_load_ps (b + i + 0)));
-    sum =
-        _mm_add_ps (sum, _mm_mul_ps (_mm_loadu_ps (a + i + 4),
-            _mm_load_ps (b + i + 4)));
-  }
-  sum = _mm_add_ps (sum, _mm_movehl_ps (sum, sum));
-  sum = _mm_add_ss (sum, _mm_shuffle_ps (sum, sum, 0x55));
-  _mm_store_ss (o, sum);
-}
-
-static inline void
-inner_product_gfloat_linear_1_sse (gfloat * o, const gfloat * a,
-    const gfloat * b, gint len, const gfloat * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128 sum[2], t;
-  const gfloat *c[2] = {(gfloat*)((gint8*)b + 0*bstride),
-                        (gfloat*)((gint8*)b + 1*bstride)};
-
-  sum[0] = sum[1] = _mm_setzero_ps ();
-
-  for (; i < len; i += 8) {
-    t = _mm_loadu_ps (a + i + 0);
-    sum[0] = _mm_add_ps (sum[0], _mm_mul_ps (t, _mm_load_ps (c[0] + i + 0)));
-    sum[1] = _mm_add_ps (sum[1], _mm_mul_ps (t, _mm_load_ps (c[1] + i + 0)));
-    t = _mm_loadu_ps (a + i + 4);
-    sum[0] = _mm_add_ps (sum[0], _mm_mul_ps (t, _mm_load_ps (c[0] + i + 4)));
-    sum[1] = _mm_add_ps (sum[1], _mm_mul_ps (t, _mm_load_ps (c[1] + i + 4)));
-  }
-  sum[0] = _mm_mul_ps (_mm_sub_ps (sum[0], sum[1]), _mm_load1_ps (icoeff));
-  sum[0] = _mm_add_ps (sum[0], sum[1]);
-  sum[0] = _mm_add_ps (sum[0], _mm_movehl_ps (sum[0], sum[0]));
-  sum[0] = _mm_add_ss (sum[0], _mm_shuffle_ps (sum[0], sum[0], 0x55));
-  _mm_store_ss (o, sum[0]);
-}
-
-static inline void
-inner_product_gfloat_cubic_1_sse (gfloat * o, const gfloat * a,
-    const gfloat * b, gint len, const gfloat * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128 sum[4];
-  __m128 t, f = _mm_loadu_ps(icoeff);
-  const gfloat *c[4] = {(gfloat*)((gint8*)b + 0*bstride),
-                        (gfloat*)((gint8*)b + 1*bstride),
-                        (gfloat*)((gint8*)b + 2*bstride),
-                        (gfloat*)((gint8*)b + 3*bstride)};
-
-  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_ps ();
-
-  for (; i < len; i += 4) {
-    t = _mm_loadu_ps (a + i);
-    sum[0] = _mm_add_ps (sum[0], _mm_mul_ps (t, _mm_load_ps (c[0] + i)));
-    sum[1] = _mm_add_ps (sum[1], _mm_mul_ps (t, _mm_load_ps (c[1] + i)));
-    sum[2] = _mm_add_ps (sum[2], _mm_mul_ps (t, _mm_load_ps (c[2] + i)));
-    sum[3] = _mm_add_ps (sum[3], _mm_mul_ps (t, _mm_load_ps (c[3] + i)));
-  }
-  sum[0] = _mm_mul_ps (sum[0], _mm_shuffle_ps (f, f, 0x00));
-  sum[1] = _mm_mul_ps (sum[1], _mm_shuffle_ps (f, f, 0x55));
-  sum[2] = _mm_mul_ps (sum[2], _mm_shuffle_ps (f, f, 0xaa));
-  sum[3] = _mm_mul_ps (sum[3], _mm_shuffle_ps (f, f, 0xff));
-  sum[0] = _mm_add_ps (sum[0], sum[1]);
-  sum[2] = _mm_add_ps (sum[2], sum[3]);
-  sum[0] = _mm_add_ps (sum[0], sum[2]);
-  sum[0] = _mm_add_ps (sum[0], _mm_movehl_ps (sum[0], sum[0]));
-  sum[0] = _mm_add_ss (sum[0], _mm_shuffle_ps (sum[0], sum[0], 0x55));
-  _mm_store_ss (o, sum[0]);
-}
-
-MAKE_RESAMPLE_FUNC (gfloat, full, 1, sse);
-MAKE_RESAMPLE_FUNC (gfloat, linear, 1, sse);
-MAKE_RESAMPLE_FUNC (gfloat, cubic, 1, sse);
-
-static void
-interpolate_gfloat_linear_sse (gpointer op, const gpointer ap,
-    gint len, const gpointer icp, gint astride)
-{
-  gint i;
-  gfloat *o = op, *a = ap, *ic = icp;
-  __m128 f[2], t1, t2;
-  const gfloat *c[2] = {(gfloat*)((gint8*)a + 0*astride),
-                        (gfloat*)((gint8*)a + 1*astride)};
-
-  f[0] = _mm_load1_ps (ic+0);
-  f[1] = _mm_load1_ps (ic+1);
-
-  for (i = 0; i < len; i += 8) {
-    t1 = _mm_mul_ps (_mm_load_ps (c[0] + i + 0), f[0]);
-    t2 = _mm_mul_ps (_mm_load_ps (c[1] + i + 0), f[1]);
-    _mm_store_ps (o + i + 0, _mm_add_ps (t1, t2));
-
-    t1 = _mm_mul_ps (_mm_load_ps (c[0] + i + 4), f[0]);
-    t2 = _mm_mul_ps (_mm_load_ps (c[1] + i + 4), f[1]);
-    _mm_store_ps (o + i + 4, _mm_add_ps (t1, t2));
-  }
-}
-
-static void
-interpolate_gfloat_cubic_sse (gpointer op, const gpointer ap,
-    gint len, const gpointer icp, gint astride)
-{
-  gint i;
-  gfloat *o = op, *a = ap, *ic = icp;
-  __m128 f[4], t[4];
-  const gfloat *c[4] = {(gfloat*)((gint8*)a + 0*astride),
-                        (gfloat*)((gint8*)a + 1*astride),
-                        (gfloat*)((gint8*)a + 2*astride),
-                        (gfloat*)((gint8*)a + 3*astride)};
-
-  f[0] = _mm_load1_ps (ic+0);
-  f[1] = _mm_load1_ps (ic+1);
-  f[2] = _mm_load1_ps (ic+2);
-  f[3] = _mm_load1_ps (ic+3);
-
-  for (i = 0; i < len; i += 4) {
-    t[0] = _mm_mul_ps (_mm_load_ps (c[0] + i + 0), f[0]);
-    t[1] = _mm_mul_ps (_mm_load_ps (c[1] + i + 0), f[1]);
-    t[2] = _mm_mul_ps (_mm_load_ps (c[2] + i + 0), f[2]);
-    t[3] = _mm_mul_ps (_mm_load_ps (c[3] + i + 0), f[3]);
-    t[0] = _mm_add_ps (t[0], t[1]);
-    t[2] = _mm_add_ps (t[2], t[3]);
-    _mm_store_ps (o + i + 0, _mm_add_ps (t[0], t[2]));
-  }
-}
-
-#endif
-
-#if defined (HAVE_EMMINTRIN_H) && defined(__SSE2__)
-#include <emmintrin.h>
-
-static inline void
-inner_product_gint16_full_1_sse2 (gint16 * o, const gint16 * a,
-    const gint16 * b, gint len, const gint16 * icoeff, gint bstride)
-{
-  gint i;
-  __m128i sum, t;
-
-  sum = _mm_setzero_si128 ();
-
-  for (i = 0; i < len; i += 16) {
-    t = _mm_loadu_si128 ((__m128i *) (a + i));
-    sum = _mm_add_epi32 (sum, _mm_madd_epi16 (t, _mm_load_si128 ((__m128i *) (b + i + 0))));
-
-    t = _mm_loadu_si128 ((__m128i *) (a + i + 8));
-    sum = _mm_add_epi32 (sum, _mm_madd_epi16 (t, _mm_load_si128 ((__m128i *) (b + i + 8))));
-  }
-  sum = _mm_add_epi32 (sum, _mm_shuffle_epi32 (sum, _MM_SHUFFLE (2, 3, 2, 3)));
-  sum = _mm_add_epi32 (sum, _mm_shuffle_epi32 (sum, _MM_SHUFFLE (1, 1, 1, 1)));
-
-  sum = _mm_add_epi32 (sum, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
-  sum = _mm_srai_epi32 (sum, PRECISION_S16);
-  sum = _mm_packs_epi32 (sum, sum);
-  *o = _mm_extract_epi16 (sum, 0);
-}
-
-static inline void
-inner_product_gint16_linear_1_sse2 (gint16 * o, const gint16 * a,
-    const gint16 * b, gint len, const gint16 * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128i sum[2], t;
-  __m128i f = _mm_set_epi64x (0, *((gint64*)icoeff));
-  const gint16 *c[2] = {(gint16*)((gint8*)b + 0*bstride),
-                        (gint16*)((gint8*)b + 1*bstride)};
-
-  sum[0] = sum[1] = _mm_setzero_si128 ();
-  f = _mm_unpacklo_epi16 (f, sum[0]);
-
-  for (; i < len; i += 16) {
-    t = _mm_loadu_si128 ((__m128i *) (a + i + 0));
-    sum[0] = _mm_add_epi32 (sum[0], _mm_madd_epi16 (t, _mm_load_si128 ((__m128i *) (c[0] + i + 0))));
-    sum[1] = _mm_add_epi32 (sum[1], _mm_madd_epi16 (t, _mm_load_si128 ((__m128i *) (c[1] + i + 0))));
-
-    t = _mm_loadu_si128 ((__m128i *) (a + i + 8));
-    sum[0] = _mm_add_epi32 (sum[0], _mm_madd_epi16 (t, _mm_load_si128 ((__m128i *) (c[0] + i + 8))));
-    sum[1] = _mm_add_epi32 (sum[1], _mm_madd_epi16 (t, _mm_load_si128 ((__m128i *) (c[1] + i + 8))));
-  }
-  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
-  sum[1] = _mm_srai_epi32 (sum[1], PRECISION_S16);
-
-  sum[0] = _mm_madd_epi16 (sum[0], _mm_shuffle_epi32 (f,  _MM_SHUFFLE (0, 0, 0, 0)));
-  sum[1] = _mm_madd_epi16 (sum[1], _mm_shuffle_epi32 (f,  _MM_SHUFFLE (1, 1, 1, 1)));
-  sum[0] = _mm_add_epi32 (sum[0], sum[1]);
-
-  sum[0] = _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (2, 3, 2, 3)));
-  sum[0] = _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (1, 1, 1, 1)));
-
-  sum[0] = _mm_add_epi32 (sum[0], _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
-  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
-  sum[0] = _mm_packs_epi32 (sum[0], sum[0]);
-  *o = _mm_extract_epi16 (sum[0], 0);
-}
-
-static inline void
-inner_product_gint16_cubic_1_sse2 (gint16 * o, const gint16 * a,
-    const gint16 * b, gint len, const gint16 * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128i sum[4], t[4];
-  __m128i f = _mm_set_epi64x (0, *((long long*)icoeff));
-  const gint16 *c[4] = {(gint16*)((gint8*)b + 0*bstride),
-                        (gint16*)((gint8*)b + 1*bstride),
-                        (gint16*)((gint8*)b + 2*bstride),
-                        (gint16*)((gint8*)b + 3*bstride)};
-
-  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_si128 ();
-  f = _mm_unpacklo_epi16 (f, sum[0]);
-
-  for (; i < len; i += 8) {
-    t[0] = _mm_loadu_si128 ((__m128i *) (a + i));
-    sum[0] = _mm_add_epi32 (sum[0], _mm_madd_epi16 (t[0], _mm_load_si128 ((__m128i *) (c[0] + i))));
-    sum[1] = _mm_add_epi32 (sum[1], _mm_madd_epi16 (t[0], _mm_load_si128 ((__m128i *) (c[1] + i))));
-    sum[2] = _mm_add_epi32 (sum[2], _mm_madd_epi16 (t[0], _mm_load_si128 ((__m128i *) (c[2] + i))));
-    sum[3] = _mm_add_epi32 (sum[3], _mm_madd_epi16 (t[0], _mm_load_si128 ((__m128i *) (c[3] + i))));
-  }
-  t[0] = _mm_unpacklo_epi32 (sum[0], sum[1]);
-  t[1] = _mm_unpacklo_epi32 (sum[2], sum[3]);
-  t[2] = _mm_unpackhi_epi32 (sum[0], sum[1]);
-  t[3] = _mm_unpackhi_epi32 (sum[2], sum[3]);
-
-  sum[0] = _mm_add_epi32 (_mm_unpacklo_epi64(t[0], t[1]), _mm_unpackhi_epi64(t[0], t[1]));
-  sum[2] = _mm_add_epi32 (_mm_unpacklo_epi64(t[2], t[3]), _mm_unpackhi_epi64(t[2], t[3]));
-  sum[0] = _mm_add_epi32 (sum[0], sum[2]);
-
-  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
-  sum[0] = _mm_madd_epi16 (sum[0], f);
-
-  sum[0] = _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (2, 3, 2, 3)));
-  sum[0] = _mm_add_epi32 (sum[0], _mm_shuffle_epi32 (sum[0], _MM_SHUFFLE (1, 1, 1, 1)));
-
-  sum[0] = _mm_add_epi32 (sum[0], _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
-  sum[0] = _mm_srai_epi32 (sum[0], PRECISION_S16);
-  sum[0] = _mm_packs_epi32 (sum[0], sum[0]);
-  *o = _mm_extract_epi16 (sum[0], 0);
-}
-
-static inline void
-inner_product_gdouble_full_1_sse2 (gdouble * o, const gdouble * a,
-    const gdouble * b, gint len, const gdouble * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128d sum = _mm_setzero_pd ();
-
-  for (; i < len; i += 8) {
-    sum =
-        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 0),
-            _mm_load_pd (b + i + 0)));
-    sum =
-        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 2),
-            _mm_load_pd (b + i + 2)));
-    sum =
-        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 4),
-            _mm_load_pd (b + i + 4)));
-    sum =
-        _mm_add_pd (sum, _mm_mul_pd (_mm_loadu_pd (a + i + 6),
-            _mm_load_pd (b + i + 6)));
-  }
-  sum = _mm_add_sd (sum, _mm_unpackhi_pd (sum, sum));
-  _mm_store_sd (o, sum);
-}
-
-static inline void
-inner_product_gdouble_linear_1_sse2 (gdouble * o, const gdouble * a,
-    const gdouble * b, gint len, const gdouble * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128d sum[2], t;
-  const gdouble *c[2] = {(gdouble*)((gint8*)b + 0*bstride),
-                         (gdouble*)((gint8*)b + 1*bstride)};
-
-  sum[0] = sum[1] = _mm_setzero_pd ();
-
-  for (; i < len; i += 4) {
-    t = _mm_loadu_pd (a + i + 0);
-    sum[0] = _mm_add_pd (sum[0], _mm_mul_pd (t, _mm_load_pd (c[0] + i + 0)));
-    sum[1] = _mm_add_pd (sum[1], _mm_mul_pd (t, _mm_load_pd (c[1] + i + 0)));
-    t = _mm_loadu_pd (a + i + 2);
-    sum[0] = _mm_add_pd (sum[0], _mm_mul_pd (t, _mm_load_pd (c[0] + i + 2)));
-    sum[1] = _mm_add_pd (sum[1], _mm_mul_pd (t, _mm_load_pd (c[1] + i + 2)));
-  }
-  sum[0] = _mm_mul_pd (_mm_sub_pd (sum[0], sum[1]), _mm_load1_pd (icoeff));
-  sum[0] = _mm_add_pd (sum[0], sum[1]);
-  sum[0] = _mm_add_sd (sum[0], _mm_unpackhi_pd (sum[0], sum[0]));
-  _mm_store_sd (o, sum[0]);
-}
-
-static inline void
-inner_product_gdouble_cubic_1_sse2 (gdouble * o, const gdouble * a,
-    const gdouble * b, gint len, const gdouble * icoeff, gint bstride)
-{
-  gint i;
-  __m128d f[2], sum[4], t;
-  const gdouble *c[4] = {(gdouble*)((gint8*)b + 0*bstride),
-                         (gdouble*)((gint8*)b + 1*bstride),
-                         (gdouble*)((gint8*)b + 2*bstride),
-                         (gdouble*)((gint8*)b + 3*bstride)};
-
-  f[0] = _mm_loadu_pd (icoeff + 0);
-  f[1] = _mm_loadu_pd (icoeff + 2);
-  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_pd ();
-
-  for (i = 0; i < len; i += 2) {
-    t = _mm_loadu_pd (a + i + 0);
-    sum[0] = _mm_add_pd (sum[0], _mm_mul_pd (t, _mm_load_pd (c[0] + i)));
-    sum[1] = _mm_add_pd (sum[1], _mm_mul_pd (t, _mm_load_pd (c[1] + i)));
-    sum[2] = _mm_add_pd (sum[2], _mm_mul_pd (t, _mm_load_pd (c[2] + i)));
-    sum[3] = _mm_add_pd (sum[3], _mm_mul_pd (t, _mm_load_pd (c[3] + i)));
-  }
-  sum[0] = _mm_mul_pd (sum[0], _mm_shuffle_pd (f[0], f[0], _MM_SHUFFLE2 (0, 0)));
-  sum[1] = _mm_mul_pd (sum[1], _mm_shuffle_pd (f[0], f[0], _MM_SHUFFLE2 (1, 1)));
-  sum[2] = _mm_mul_pd (sum[2], _mm_shuffle_pd (f[1], f[1], _MM_SHUFFLE2 (0, 0)));
-  sum[3] = _mm_mul_pd (sum[3], _mm_shuffle_pd (f[1], f[1], _MM_SHUFFLE2 (1, 1)));
-  sum[0] = _mm_add_pd (sum[0], sum[1]);
-  sum[2] = _mm_add_pd (sum[2], sum[3]);
-  sum[0] = _mm_add_pd (sum[0], sum[2]);
-  sum[0] = _mm_add_sd (sum[0], _mm_unpackhi_pd (sum[0], sum[0]));
-  _mm_store_sd (o, sum[0]);
-}
-
-MAKE_RESAMPLE_FUNC (gint16, full, 1, sse2);
-MAKE_RESAMPLE_FUNC (gint16, linear, 1, sse2);
-MAKE_RESAMPLE_FUNC (gint16, cubic, 1, sse2);
-
-MAKE_RESAMPLE_FUNC (gdouble, full, 1, sse2);
-MAKE_RESAMPLE_FUNC (gdouble, linear, 1, sse2);
-MAKE_RESAMPLE_FUNC (gdouble, cubic, 1, sse2);
-
-static inline void
-interpolate_gint16_linear_sse2 (gpointer op, const gpointer ap,
-    gint len, const gpointer icp, gint astride)
-{
-  gint i = 0;
-  gint16 *o = op, *a = ap, *ic = icp;
-  __m128i ta, tb, t1, t2;
-  __m128i f = _mm_set_epi64x (0, *((gint64*)ic));
-  const gint16 *c[2] = {(gint16*)((gint8*)a + 0*astride),
-                        (gint16*)((gint8*)a + 1*astride)};
-
-  f = _mm_unpacklo_epi32 (f, f);
-  f = _mm_unpacklo_epi64 (f, f);
-
-  for (; i < len; i += 8) {
-    ta = _mm_load_si128 ((__m128i *) (c[0] + i));
-    tb = _mm_load_si128 ((__m128i *) (c[1] + i));
-
-    t1 = _mm_madd_epi16 (_mm_unpacklo_epi16 (ta, tb), f);
-    t2 = _mm_madd_epi16 (_mm_unpackhi_epi16 (ta, tb), f);
-
-    t1 = _mm_add_epi32 (t1, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
-    t2 = _mm_add_epi32 (t2, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
-
-    t1 = _mm_srai_epi32 (t1, PRECISION_S16);
-    t2 = _mm_srai_epi32 (t2, PRECISION_S16);
-
-    t1 = _mm_packs_epi32 (t1, t2);
-    _mm_store_si128 ((__m128i *) (o + i), t1);
-  }
-}
-
-static inline void
-interpolate_gint16_cubic_sse2 (gpointer op, const gpointer ap,
-    gint len, const gpointer icp, gint astride)
-{
-  gint i = 0;
-  gint16 *o = op, *a = ap, *ic = icp;
-  __m128i ta, tb, tl1, tl2, th1, th2;
-  __m128i f[2];
-  const gint16 *c[4] = {(gint16*)((gint8*)a + 0*astride),
-                        (gint16*)((gint8*)a + 1*astride),
-                        (gint16*)((gint8*)a + 2*astride),
-                        (gint16*)((gint8*)a + 3*astride)};
-
-  f[0] = _mm_set_epi16 (ic[1], ic[0], ic[1], ic[0], ic[1], ic[0], ic[1], ic[0]);
-  f[1] = _mm_set_epi16 (ic[3], ic[2], ic[3], ic[2], ic[3], ic[2], ic[3], ic[2]);
-
-  for (; i < len; i += 8) {
-    ta = _mm_load_si128 ((__m128i *) (c[0] + i));
-    tb = _mm_load_si128 ((__m128i *) (c[1] + i));
-
-    tl1 = _mm_madd_epi16 (_mm_unpacklo_epi16 (ta, tb), f[0]);
-    th1 = _mm_madd_epi16 (_mm_unpackhi_epi16 (ta, tb), f[0]);
-
-    ta = _mm_load_si128 ((__m128i *) (c[2] + i));
-    tb = _mm_load_si128 ((__m128i *) (c[3] + i));
-
-    tl2 = _mm_madd_epi16 (_mm_unpacklo_epi16 (ta, tb), f[1]);
-    th2 = _mm_madd_epi16 (_mm_unpackhi_epi16 (ta, tb), f[1]);
-
-    tl1 = _mm_add_epi32 (tl1, tl2);
-    th1 = _mm_add_epi32 (th1, th2);
-
-    tl1 = _mm_add_epi32 (tl1, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
-    th1 = _mm_add_epi32 (th1, _mm_set1_epi32 (1 << (PRECISION_S16 - 1)));
-
-    tl1 = _mm_srai_epi32 (tl1, PRECISION_S16);
-    th1 = _mm_srai_epi32 (th1, PRECISION_S16);
-
-    tl1 = _mm_packs_epi32 (tl1, th1);
-    _mm_store_si128 ((__m128i *) (o + i), tl1);
-  }
-}
-
-static void
-interpolate_gdouble_linear_sse2 (gpointer op, const gpointer ap,
-    gint len, const gpointer icp, gint astride)
-{
-  gint i;
-  gdouble *o = op, *a = ap, *ic = icp;
-  __m128d f[2], t1, t2;
-  const gdouble *c[2] = {(gdouble*)((gint8*)a + 0*astride),
-                         (gdouble*)((gint8*)a + 1*astride)};
-
-  f[0] = _mm_load1_pd (ic+0);
-  f[1] = _mm_load1_pd (ic+1);
-
-  for (i = 0; i < len; i += 4) {
-    t1 = _mm_mul_pd (_mm_load_pd (c[0] + i + 0), f[0]);
-    t2 = _mm_mul_pd (_mm_load_pd (c[1] + i + 0), f[1]);
-    _mm_store_pd (o + i + 0, _mm_add_pd (t1, t2));
-
-    t1 = _mm_mul_pd (_mm_load_pd (c[0] + i + 2), f[0]);
-    t2 = _mm_mul_pd (_mm_load_pd (c[1] + i + 2), f[1]);
-    _mm_store_pd (o + i + 2, _mm_add_pd (t1, t2));
-  }
-}
-
-static void
-interpolate_gdouble_cubic_sse2 (gpointer op, const gpointer ap,
-    gint len, const gpointer icp, gint astride)
-{
-  gint i;
-  gdouble *o = op, *a = ap, *ic = icp;
-  __m128d f[4], t[4];
-  const gdouble *c[4] = {(gdouble*)((gint8*)a + 0*astride),
-                         (gdouble*)((gint8*)a + 1*astride),
-                         (gdouble*)((gint8*)a + 2*astride),
-                         (gdouble*)((gint8*)a + 3*astride)};
-
-  f[0] = _mm_load1_pd (ic+0);
-  f[1] = _mm_load1_pd (ic+1);
-  f[2] = _mm_load1_pd (ic+2);
-  f[3] = _mm_load1_pd (ic+3);
-
-  for (i = 0; i < len; i += 2) {
-    t[0] = _mm_mul_pd (_mm_load_pd (c[0] + i + 0), f[0]);
-    t[1] = _mm_mul_pd (_mm_load_pd (c[1] + i + 0), f[1]);
-    t[2] = _mm_mul_pd (_mm_load_pd (c[2] + i + 0), f[2]);
-    t[3] = _mm_mul_pd (_mm_load_pd (c[3] + i + 0), f[3]);
-    t[0] = _mm_add_pd (t[0], t[1]);
-    t[2] = _mm_add_pd (t[2], t[3]);
-    _mm_store_pd (o + i + 0, _mm_add_pd (t[0], t[2]));
-  }
-}
-
-#endif
-
-#if 0
-#define __SSE4_1__
-#pragma GCC target("sse4.1")
-#endif
-
-#if defined (HAVE_SMMINTRIN_H) && defined(__SSE4_1__)
-#include <smmintrin.h>
-
-static inline void
-inner_product_gint32_full_1_sse41 (gint32 * o, const gint32 * a,
-    const gint32 * b, gint len, const gint32 * icoeff, gint bstride)
-{
-  gint i = 0;
-  __m128i sum, ta, tb;
-  gint64 res;
-
-  sum = _mm_setzero_si128 ();
-
-  for (; i < len; i += 8) {
-    ta = _mm_loadu_si128 ((__m128i *) (a + i));
-    tb = _mm_load_si128 ((__m128i *) (b + i));
-
-    sum =
-        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-            _mm_unpacklo_epi32 (tb, tb)));
-    sum =
-        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-            _mm_unpackhi_epi32 (tb, tb)));
-
-    ta = _mm_loadu_si128 ((__m128i *) (a + i + 4));
-    tb = _mm_load_si128 ((__m128i *) (b + i + 4));
-
-    sum =
-        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-            _mm_unpacklo_epi32 (tb, tb)));
-    sum =
-        _mm_add_epi64 (sum, _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-            _mm_unpackhi_epi32 (tb, tb)));
-  }
-  sum = _mm_add_epi64 (sum, _mm_unpackhi_epi64 (sum, sum));
-  res = _mm_cvtsi128_si64 (sum);
-
-  res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
-  *o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
-}
-
-static inline void
-inner_product_gint32_linear_1_sse41 (gint32 * o, const gint32 * a,
-    const gint32 * b, gint len, const gint32 * icoeff, gint bstride)
-{
-  gint i = 0;
-  gint64 res;
-  __m128i sum[2], ta, tb;
-  __m128i f = _mm_loadu_si128 ((__m128i *)icoeff);
-  const gint32 *c[2] = {(gint32*)((gint8*)b + 0*bstride),
-                        (gint32*)((gint8*)b + 1*bstride)};
-
-  sum[0] = sum[1] = _mm_setzero_si128 ();
-
-  for (; i < len; i += 4) {
-    ta = _mm_loadu_si128 ((__m128i *)(a + i));
-
-    tb = _mm_load_si128 ((__m128i *)(c[0] + i));
-    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-              _mm_unpacklo_epi32 (tb, tb)));
-    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-              _mm_unpackhi_epi32 (tb, tb)));
-
-    tb = _mm_load_si128 ((__m128i *)(c[1] + i));
-    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-              _mm_unpacklo_epi32 (tb, tb)));
-    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-              _mm_unpackhi_epi32 (tb, tb)));
-  }
-  sum[0] = _mm_srli_epi64 (sum[0], PRECISION_S32);
-  sum[1] = _mm_srli_epi64 (sum[1], PRECISION_S32);
-  sum[0] = _mm_mul_epi32 (sum[0], _mm_shuffle_epi32 (f, _MM_SHUFFLE (0, 0, 0, 0)));
-  sum[1] = _mm_mul_epi32 (sum[1], _mm_shuffle_epi32 (f, _MM_SHUFFLE (1, 1, 1, 1)));
-  sum[0] = _mm_add_epi64 (sum[0], sum[1]);
-  sum[0] = _mm_add_epi64 (sum[0], _mm_unpackhi_epi64 (sum[0], sum[0]));
-  res = _mm_cvtsi128_si64 (sum[0]);
-
-  res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
-  *o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
-}
-
-static inline void
-inner_product_gint32_cubic_1_sse41 (gint32 * o, const gint32 * a,
-    const gint32 * b, gint len, const gint32 * icoeff, gint bstride)
-{
-  gint i = 0;
-  gint64 res;
-  __m128i sum[4], ta, tb;
-  __m128i f = _mm_loadu_si128 ((__m128i *)icoeff);
-  const gint32 *c[4] = {(gint32*)((gint8*)b + 0*bstride),
-                        (gint32*)((gint8*)b + 1*bstride),
-                        (gint32*)((gint8*)b + 2*bstride),
-                        (gint32*)((gint8*)b + 3*bstride)};
-
-  sum[0] = sum[1] = sum[2] = sum[3] = _mm_setzero_si128 ();
-
-  for (; i < len; i += 4) {
-    ta = _mm_loadu_si128 ((__m128i *)(a + i));
-
-    tb = _mm_load_si128 ((__m128i *)(c[0] + i));
-    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-              _mm_unpacklo_epi32 (tb, tb)));
-    sum[0] = _mm_add_epi64 (sum[0], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-              _mm_unpackhi_epi32 (tb, tb)));
-
-    tb = _mm_load_si128 ((__m128i *)(c[1] + i));
-    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-              _mm_unpacklo_epi32 (tb, tb)));
-    sum[1] = _mm_add_epi64 (sum[1], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-              _mm_unpackhi_epi32 (tb, tb)));
-
-    tb = _mm_load_si128 ((__m128i *)(c[2] + i));
-    sum[2] = _mm_add_epi64 (sum[2], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-              _mm_unpacklo_epi32 (tb, tb)));
-    sum[2] = _mm_add_epi64 (sum[2], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-              _mm_unpackhi_epi32 (tb, tb)));
-
-    tb = _mm_load_si128 ((__m128i *)(c[3] + i));
-    sum[3] = _mm_add_epi64 (sum[3], _mm_mul_epi32 (_mm_unpacklo_epi32 (ta, ta),
-              _mm_unpacklo_epi32 (tb, tb)));
-    sum[3] = _mm_add_epi64 (sum[3], _mm_mul_epi32 (_mm_unpackhi_epi32 (ta, ta),
-              _mm_unpackhi_epi32 (tb, tb)));
-  }
-  sum[0] = _mm_srli_epi64 (sum[0], PRECISION_S32);
-  sum[1] = _mm_srli_epi64 (sum[1], PRECISION_S32);
-  sum[2] = _mm_srli_epi64 (sum[2], PRECISION_S32);
-  sum[3] = _mm_srli_epi64 (sum[3], PRECISION_S32);
-  sum[0] = _mm_mul_epi32 (sum[0], _mm_shuffle_epi32 (f, _MM_SHUFFLE (0, 0, 0, 0)));
-  sum[1] = _mm_mul_epi32 (sum[1], _mm_shuffle_epi32 (f, _MM_SHUFFLE (1, 1, 1, 1)));
-  sum[2] = _mm_mul_epi32 (sum[2], _mm_shuffle_epi32 (f, _MM_SHUFFLE (2, 2, 2, 2)));
-  sum[3] = _mm_mul_epi32 (sum[3], _mm_shuffle_epi32 (f, _MM_SHUFFLE (3, 3, 3, 3)));
-  sum[0] = _mm_add_epi64 (sum[0], sum[1]);
-  sum[2] = _mm_add_epi64 (sum[2], sum[3]);
-  sum[0] = _mm_add_epi64 (sum[0], sum[2]);
-  sum[0] = _mm_add_epi64 (sum[0], _mm_unpackhi_epi64 (sum[0], sum[0]));
-  res = _mm_cvtsi128_si64 (sum[0]);
-
-  res = (res + (1 << (PRECISION_S32 - 1))) >> PRECISION_S32;
-  *o = CLAMP (res, -(1L << 31), (1L << 31) - 1);
-}
-
-MAKE_RESAMPLE_FUNC (gint32, full, 1, sse41);
-MAKE_RESAMPLE_FUNC (gint32, linear, 1, sse41);
-MAKE_RESAMPLE_FUNC (gint32, cubic, 1, sse41);
-#endif
+#include "audio-resampler-macros.h"
+#include "audio-resampler-x86-sse.h"
+#include "audio-resampler-x86-sse2.h"
+#include "audio-resampler-x86-sse41.h"
 
 static void
 audio_resampler_check_x86 (const gchar *option)
 {
   if (!strcmp (option, "sse")) {
-#if defined (HAVE_XMMINTRIN_H) && defined(__SSE__)
+#if defined (HAVE_XMMINTRIN_H) && HAVE_SSE
     GST_DEBUG ("enable SSE optimisations");
     resample_gfloat_full_1 = resample_gfloat_full_1_sse;
     resample_gfloat_linear_1 = resample_gfloat_linear_1_sse;
@@ -653,7 +38,7 @@
     GST_DEBUG ("SSE optimisations not enabled");
 #endif
   } else if (!strcmp (option, "sse2")) {
-#if defined (HAVE_EMMINTRIN_H) && defined(__SSE2__)
+#if defined (HAVE_EMMINTRIN_H) && HAVE_SSE2
     GST_DEBUG ("enable SSE2 optimisations");
     resample_gint16_full_1 = resample_gint16_full_1_sse2;
     resample_gint16_linear_1 = resample_gint16_linear_1_sse2;
@@ -672,7 +57,9 @@
     GST_DEBUG ("SSE2 optimisations not enabled");
 #endif
   } else if (!strcmp (option, "sse41")) {
-#if defined (HAVE_SMMINTRIN_H) && defined(__SSE4_1__)
+#if defined (__x86_64__) && \
+    defined (HAVE_SMMINTRIN_H) && defined (HAVE_EMMINTRIN_H) && \
+    HAVE_SSE41
     GST_DEBUG ("enable SSE41 optimisations");
     resample_gint32_full_1 = resample_gint32_full_1_sse41;
     resample_gint32_linear_1 = resample_gint32_linear_1_sse41;
diff --git a/gst-libs/gst/audio/audio-resampler.c b/gst-libs/gst/audio/audio-resampler.c
index 4e6ef43..8cb562c 100644
--- a/gst-libs/gst/audio/audio-resampler.c
+++ b/gst-libs/gst/audio/audio-resampler.c
@@ -30,99 +30,13 @@
 #endif
 
 #include "audio-resampler.h"
-
-/* Contains a collection of all things found in other resamplers:
- * speex (filter construction, optimizations), ffmpeg (fixed phase filter, blackman filter),
- * SRC (linear interpolation, fixed precomputed tables),...
- *
- *  Supports:
- *   - S16, S32, F32 and F64 formats
- *   - nearest, linear and cubic interpolation
- *   - sinc based interpolation with kaiser or blackman-nutall windows
- *   - fully configurable kaiser parameters
- *   - dynamic linear or cubic interpolation of filter table, this can
- *     use less memory but more CPU
- *   - full filter table, generated from optionally linear or cubic
- *     interpolation of filter table
- *   - fixed filter table size with nearest neighbour phase, optionally
- *     using a precomputed tables
- *   - dynamic samplerate changes
- *   - x86 and neon optimizations
- */
-typedef void (*ConvertTapsFunc) (gdouble * tmp_taps, gpointer taps,
-    gdouble weight, gint n_taps);
-typedef void (*InterpolateFunc) (gpointer o, const gpointer a, gint len,
-    const gpointer icoeff, gint astride);
-typedef void (*ResampleFunc) (GstAudioResampler * resampler, gpointer in[],
-    gsize in_len, gpointer out[], gsize out_len, gsize * consumed);
-typedef void (*DeinterleaveFunc) (GstAudioResampler * resampler,
-    gpointer * sbuf, gpointer in[], gsize in_frames);
+#include "audio-resampler-private.h"
+#include "audio-resampler-macros.h"
 
 #define MEM_ALIGN(m,a) ((gint8 *)((guintptr)((gint8 *)(m) + ((a)-1)) & ~((a)-1)))
 #define ALIGN 16
 #define TAPS_OVERREAD 16
 
-struct _GstAudioResampler
-{
-  GstAudioResamplerMethod method;
-  GstAudioResamplerFlags flags;
-  GstAudioFormat format;
-  GstStructure *options;
-  gint format_index;
-  gint channels;
-  gint in_rate;
-  gint out_rate;
-
-  gint bps;
-  gint ostride;
-
-  GstAudioResamplerFilterMode filter_mode;
-  guint filter_threshold;
-  GstAudioResamplerFilterInterpolation filter_interpolation;
-
-  gdouble cutoff;
-  gdouble kaiser_beta;
-  /* for cubic */
-  gdouble b, c;
-
-  /* temp taps */
-  gpointer tmp_taps;
-
-  /* oversampled main filter table */
-  gint oversample;
-  gint n_taps;
-  gpointer taps;
-  gpointer taps_mem;
-  gsize taps_stride;
-  gint n_phases;
-  gint alloc_taps;
-  gint alloc_phases;
-
-  /* cached taps */
-  gpointer *cached_phases;
-  gpointer cached_taps;
-  gpointer cached_taps_mem;
-  gsize cached_taps_stride;
-
-  ConvertTapsFunc convert_taps;
-  InterpolateFunc interpolate;
-  DeinterleaveFunc deinterleave;
-  ResampleFunc resample;
-
-  gint blocks;
-  gint inc;
-  gint samp_inc;
-  gint samp_frac;
-  gint samp_index;
-  gint samp_phase;
-  gint skip;
-
-  gpointer samples;
-  gsize samples_len;
-  gsize samples_avail;
-  gpointer *sbuf;
-};
-
 GST_DEBUG_CATEGORY_STATIC (audio_resampler_debug);
 #define GST_CAT_DEFAULT audio_resampler_debug
 
@@ -303,9 +217,6 @@
   return s * bessel (beta * sqrt (MAX (1 - w * w, 0)));
 }
 
-#define PRECISION_S16 15
-#define PRECISION_S32 31
-
 #define MAKE_CONVERT_TAPS_INT_FUNC(type, precision)                     \
 static void                                                             \
 convert_taps_##type##_c (gdouble *tmp_taps, gpointer taps,              \
@@ -593,9 +504,7 @@
 #define get_taps_gdouble_nearest get_taps_gdouble_nearest
 
 #define GET_TAPS_FULL_FUNC(type)                                                \
-static inline gpointer                                                          \
-get_taps_##type##_full (GstAudioResampler * resampler,                          \
-    gint *samp_index, gint *samp_phase, type icoeff[4])                         \
+DECL_GET_TAPS_FULL_FUNC(type)                                                   \
 {                                                                               \
   gpointer res;                                                                 \
   gint out_rate = resampler->out_rate;                                          \
@@ -659,9 +568,7 @@
 GET_TAPS_FULL_FUNC (gdouble);
 
 #define GET_TAPS_INTERPOLATE_FUNC(type,inter)                   \
-static inline gpointer                                          \
-get_taps_##type##_##inter (GstAudioResampler * resampler,       \
-    gint *samp_index, gint *samp_phase, type icoeff[4])         \
+DECL_GET_TAPS_INTERPOLATE_FUNC (type, inter)                    \
 {                                                               \
   gpointer res;                                                 \
   gint out_rate = resampler->out_rate;                          \
@@ -852,67 +759,25 @@
 INNER_PRODUCT_FLOAT_CUBIC_FUNC (gfloat);
 INNER_PRODUCT_FLOAT_CUBIC_FUNC (gdouble);
 
-#define MAKE_RESAMPLE_FUNC(type,inter,channels,arch)                            \
-static void                                                                     \
-resample_ ##type## _ ##inter## _ ##channels## _ ##arch (GstAudioResampler * resampler,      \
-    gpointer in[], gsize in_len,  gpointer out[], gsize out_len,                \
-    gsize * consumed)                                                           \
-{                                                                               \
-  gint c, di = 0;                                                               \
-  gint n_taps = resampler->n_taps;                                              \
-  gint blocks = resampler->blocks;                                              \
-  gint ostride = resampler->ostride;                                            \
-  gint taps_stride = resampler->taps_stride;                                    \
-  gint samp_index = 0;                                                          \
-  gint samp_phase = 0;                                                          \
-                                                                                \
-  for (c = 0; c < blocks; c++) {                                                \
-    type *ip = in[c];                                                           \
-    type *op = ostride == 1 ? out[c] : (type *)out[0] + c;                      \
-                                                                                \
-    samp_index = resampler->samp_index;                                         \
-    samp_phase = resampler->samp_phase;                                         \
-                                                                                \
-    for (di = 0; di < out_len; di++) {                                          \
-      type *ipp, icoeff[4], *taps;                                              \
-                                                                                \
-      ipp = &ip[samp_index * channels];                                         \
-                                                                                \
-      taps = get_taps_ ##type##_##inter                                         \
-              (resampler, &samp_index, &samp_phase, icoeff);                    \
-      inner_product_ ##type##_##inter##_##channels##_##arch                     \
-              (op, ipp, taps, n_taps, icoeff, taps_stride);                     \
-      op += ostride;                                                            \
-    }                                                                           \
-    if (in_len > samp_index)                                                    \
-      memmove (ip, &ip[samp_index * channels],                                  \
-          (in_len - samp_index) * sizeof(type) * channels);                     \
-  }                                                                             \
-  *consumed = samp_index - resampler->samp_index;                               \
-                                                                                \
-  resampler->samp_index = 0;                                                    \
-  resampler->samp_phase = samp_phase;                                           \
-}
+MAKE_RESAMPLE_FUNC_STATIC (gint16, nearest, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gint32, nearest, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gfloat, nearest, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gdouble, nearest, 1, c);
 
-MAKE_RESAMPLE_FUNC (gint16, nearest, 1, c);
-MAKE_RESAMPLE_FUNC (gint32, nearest, 1, c);
-MAKE_RESAMPLE_FUNC (gfloat, nearest, 1, c);
-MAKE_RESAMPLE_FUNC (gdouble, nearest, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gint16, full, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gint32, full, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gfloat, full, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gdouble, full, 1, c);
 
-MAKE_RESAMPLE_FUNC (gint16, full, 1, c);
-MAKE_RESAMPLE_FUNC (gint32, full, 1, c);
-MAKE_RESAMPLE_FUNC (gfloat, full, 1, c);
-MAKE_RESAMPLE_FUNC (gdouble, full, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gint16, linear, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gint32, linear, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gfloat, linear, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gdouble, linear, 1, c);
 
-MAKE_RESAMPLE_FUNC (gint16, linear, 1, c);
-MAKE_RESAMPLE_FUNC (gint32, linear, 1, c);
-MAKE_RESAMPLE_FUNC (gfloat, linear, 1, c);
-MAKE_RESAMPLE_FUNC (gdouble, linear, 1, c);
-
-MAKE_RESAMPLE_FUNC (gint16, cubic, 1, c);
-MAKE_RESAMPLE_FUNC (gint32, cubic, 1, c);
-MAKE_RESAMPLE_FUNC (gfloat, cubic, 1, c);
-MAKE_RESAMPLE_FUNC (gdouble, cubic, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gint16, cubic, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gint32, cubic, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gfloat, cubic, 1, c);
+MAKE_RESAMPLE_FUNC_STATIC (gdouble, cubic, 1, c);
 
 static ResampleFunc resample_funcs[] = {
   resample_gint16_nearest_1_c,
@@ -1450,7 +1315,6 @@
 
 /**
  * gst_audio_resampler_new:
- * @resampler: a #GstAudioResampler
  * @method: a #GstAudioResamplerMethod
  * @flags: #GstAudioResamplerFlags
  * @in_rate: input rate
@@ -1459,7 +1323,7 @@
  *
  * Make a new resampler.
  *
- * Returns: %TRUE on success
+ * Returns: (skip) (transfer full): %TRUE on success
  */
 GstAudioResampler *
 gst_audio_resampler_new (GstAudioResamplerMethod method,
diff --git a/gst-libs/gst/fft/Makefile.in b/gst-libs/gst/fft/Makefile.in
index 0dbd455..bff59a0 100644
--- a/gst-libs/gst/fft/Makefile.in
+++ b/gst-libs/gst/fft/Makefile.in
@@ -468,6 +468,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/pbutils/Makefile.in b/gst-libs/gst/pbutils/Makefile.in
index b009437..cfe33ad 100644
--- a/gst-libs/gst/pbutils/Makefile.in
+++ b/gst-libs/gst/pbutils/Makefile.in
@@ -485,6 +485,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c
index 45de5f5..d155323 100644
--- a/gst-libs/gst/pbutils/gstdiscoverer.c
+++ b/gst-libs/gst/pbutils/gstdiscoverer.c
@@ -1388,6 +1388,7 @@
          */
         if (dc->priv->current_info->misc)
           gst_structure_free (dc->priv->current_info->misc);
+        dc->priv->current_info->misc = gst_structure_copy (structure);
         g_ptr_array_add (dc->priv->current_info->missing_elements_details,
             gst_missing_plugin_message_get_installer_detail (msg));
       } else if (sttype == _STREAM_TOPOLOGY_QUARK) {
diff --git a/gst-libs/gst/riff/Makefile.in b/gst-libs/gst/riff/Makefile.in
index 0a15806..dd79477 100644
--- a/gst-libs/gst/riff/Makefile.in
+++ b/gst-libs/gst/riff/Makefile.in
@@ -437,6 +437,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/rtp/Makefile.in b/gst-libs/gst/rtp/Makefile.in
index cefde2e..df06537 100644
--- a/gst-libs/gst/rtp/Makefile.in
+++ b/gst-libs/gst/rtp/Makefile.in
@@ -476,6 +476,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/rtp/gstrtpbuffer.h b/gst-libs/gst/rtp/gstrtpbuffer.h
index 46a6e9c..5a9049f 100644
--- a/gst-libs/gst/rtp/gstrtpbuffer.h
+++ b/gst-libs/gst/rtp/gstrtpbuffer.h
@@ -151,6 +151,25 @@
                                                              guint size);
 
 /**
+ * GstRTPBufferFlags:
+ * @GST_RTP_BUFFER_FLAG_RETRANSMISSION: The #GstBuffer was once wrapped
+ *           in a retransmitted packet as specified by RFC 4588.
+ * @GST_RTP_BUFFER_FLAG_LAST:           Offset to define more flags.
+ *
+ * Additional RTP buffer flags. These flags can potentially be used on any
+ * buffers carrying RTP packets.
+ *
+ * Note that these are only valid for #GstCaps of type: application/x-rtp (x-rtcp).
+ * They can conflict with other extended buffer flags.
+ *
+ * Since: 1.10
+ */
+typedef enum {
+  GST_RTP_BUFFER_FLAG_RETRANSMISSION = (GST_BUFFER_FLAG_LAST << 0),
+  GST_RTP_BUFFER_FLAG_LAST           = (GST_BUFFER_FLAG_LAST << 8)
+} GstRTPBufferFlags;
+
+/**
  * GstRTPBufferMapFlags:
  * @GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING: Skip mapping and validation of RTP
  *           padding and RTP pad count when present. Useful for buffers where
diff --git a/gst-libs/gst/rtsp/Makefile.in b/gst-libs/gst/rtsp/Makefile.in
index 7a10d3b..e3b944f 100644
--- a/gst-libs/gst/rtsp/Makefile.in
+++ b/gst-libs/gst/rtsp/Makefile.in
@@ -475,6 +475,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/sdp/Makefile.in b/gst-libs/gst/sdp/Makefile.in
index 0bc0264..b6d57d6 100644
--- a/gst-libs/gst/sdp/Makefile.in
+++ b/gst-libs/gst/sdp/Makefile.in
@@ -454,6 +454,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/tag/Makefile.in b/gst-libs/gst/tag/Makefile.in
index bd8fc6c..6967b2f 100644
--- a/gst-libs/gst/tag/Makefile.in
+++ b/gst-libs/gst/tag/Makefile.in
@@ -484,6 +484,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index 6d2d966..2ad91c5 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/Makefile.in
@@ -530,6 +530,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c
index cc5073c..30a2d85 100644
--- a/gst-libs/gst/video/video-frame.c
+++ b/gst-libs/gst/video/video-frame.c
@@ -199,7 +199,7 @@
  *   GstVideoFrame vframe;
  *   ...
  *   // set RGB pixels to black one at a time
- *   if (gst_video_frame_map (&amp;vframe, video_info, video_buffer)) {
+ *   if (gst_video_frame_map (&amp;vframe, video_info, video_buffer, GST_MAP_WRITE)) {
  *     guint8 *pixels = GST_VIDEO_FRAME_PLANE_DATA (vframe, 0);
  *     guint stride = GST_VIDEO_FRAME_PLANE_STRIDE (vframe, 0);
  *     guint pixel_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (vframe, 0);
@@ -211,6 +211,8 @@
  *         memset (pixel, 0, pixel_stride);
  *       }
  *     }
+ *
+ *     gst_video_frame_unmap (&amp;vframe);
  *   }
  *   ...
  * ]|
diff --git a/gst-libs/gst/video/video-frame.h b/gst-libs/gst/video/video-frame.h
index 020d6e1..ef3e03b 100644
--- a/gst-libs/gst/video/video-frame.h
+++ b/gst-libs/gst/video/video-frame.h
@@ -155,6 +155,9 @@
  *
  * Additional video buffer flags. These flags can potentially be used on any
  * buffers carrying video data - even encoded data.
+ *
+ * Note that these are only valid for #GstCaps of type: video/...
+ * They can conflict with other extended buffer flags.
  */
 typedef enum {
   GST_VIDEO_BUFFER_FLAG_INTERLACED  = (GST_BUFFER_FLAG_LAST << 0),
diff --git a/gst-libs/gst/video/video-overlay-composition.c b/gst-libs/gst/video/video-overlay-composition.c
index 12e7e07..8e50012 100644
--- a/gst-libs/gst/video/video-overlay-composition.c
+++ b/gst-libs/gst/video/video-overlay-composition.c
@@ -454,11 +454,15 @@
 /**
  * gst_video_overlay_composition_blend:
  * @comp: a #GstVideoOverlayComposition
- * @video_buf: a #GstVideoFrame containing raw video data in a supported format
+ * @video_buf: a #GstVideoFrame containing raw video data in a
+ *             supported format. It should be mapped using GST_MAP_READWRITE
  *
  * Blends the overlay rectangles in @comp on top of the raw video data
  * contained in @video_buf. The data in @video_buf must be writable and
  * mapped appropriately.
+ *
+ * Since @video_buf data is read and will be modified, it ought be
+ * mapped with flag GST_MAP_READWRITE.
  */
 /* FIXME: formats with more than 8 bit per component which get unpacked into
  * ARGB64 or AYUV64 (such as v210, v216, UYVP, GRAY16_LE and GRAY16_BE)
diff --git a/gst-libs/gst/video/video-scaler.c b/gst-libs/gst/video/video-scaler.c
index d1b4b27..1dbae03 100644
--- a/gst-libs/gst/video/video-scaler.c
+++ b/gst-libs/gst/video/video-scaler.c
@@ -1197,21 +1197,20 @@
 get_functions (GstVideoScaler * hscale, GstVideoScaler * vscale,
     GstVideoFormat format,
     GstVideoScalerHFunc * hfunc, GstVideoScalerVFunc * vfunc,
-    gint * n_elems, guint * width)
+    gint * n_elems, guint * width, gint * bits)
 {
-  gint bits;
   gboolean mono = FALSE;
 
   switch (format) {
     case GST_VIDEO_FORMAT_GRAY8:
-      bits = 8;
+      *bits = 8;
       *n_elems = 1;
       mono = TRUE;
       break;
     case GST_VIDEO_FORMAT_YUY2:
     case GST_VIDEO_FORMAT_YVYU:
     case GST_VIDEO_FORMAT_UYVY:
-      bits = 8;
+      *bits = 8;
       *n_elems = 1;
       *width = GST_ROUND_UP_4 (*width * 2);
       break;
@@ -1219,7 +1218,7 @@
     case GST_VIDEO_FORMAT_BGR:
     case GST_VIDEO_FORMAT_v308:
     case GST_VIDEO_FORMAT_IYU2:
-      bits = 8;
+      *bits = 8;
       *n_elems = 3;
       break;
     case GST_VIDEO_FORMAT_AYUV:
@@ -1231,17 +1230,17 @@
     case GST_VIDEO_FORMAT_BGRA:
     case GST_VIDEO_FORMAT_ARGB:
     case GST_VIDEO_FORMAT_ABGR:
-      bits = 8;
+      *bits = 8;
       *n_elems = 4;
       break;
     case GST_VIDEO_FORMAT_ARGB64:
     case GST_VIDEO_FORMAT_AYUV64:
-      bits = 16;
+      *bits = 16;
       *n_elems = 4;
       break;
     case GST_VIDEO_FORMAT_GRAY16_LE:
     case GST_VIDEO_FORMAT_GRAY16_BE:
-      bits = 16;
+      *bits = 16;
       *n_elems = 1;
       mono = TRUE;
       break;
@@ -1250,13 +1249,13 @@
     case GST_VIDEO_FORMAT_NV21:
     case GST_VIDEO_FORMAT_NV24:
     case GST_VIDEO_FORMAT_NV61:
-      bits = 8;
+      *bits = 8;
       *n_elems = 2;
       break;
     default:
       return FALSE;
   }
-  if (bits == 8) {
+  if (*bits == 8) {
     switch (hscale ? hscale->resampler.max_taps : 0) {
       case 0:
         break;
@@ -1298,7 +1297,7 @@
         *vfunc = video_scale_v_ntap_u8;
         break;
     }
-  } else if (bits == 16) {
+  } else if (*bits == 16) {
     switch (hscale ? hscale->resampler.max_taps : 0) {
       case 0:
         break;
@@ -1345,7 +1344,7 @@
 gst_video_scaler_horizontal (GstVideoScaler * scale, GstVideoFormat format,
     gpointer src, gpointer dest, guint dest_offset, guint width)
 {
-  gint n_elems;
+  gint n_elems, bits;
   GstVideoScalerHFunc func = NULL;
 
   g_return_if_fail (scale != NULL);
@@ -1353,7 +1352,7 @@
   g_return_if_fail (dest != NULL);
   g_return_if_fail (dest_offset + width <= scale->resampler.out_size);
 
-  if (!get_functions (scale, NULL, format, &func, NULL, &n_elems, &width)
+  if (!get_functions (scale, NULL, format, &func, NULL, &n_elems, &width, &bits)
       || func == NULL)
     goto no_func;
 
@@ -1387,7 +1386,7 @@
 gst_video_scaler_vertical (GstVideoScaler * scale, GstVideoFormat format,
     gpointer src_lines[], gpointer dest, guint dest_offset, guint width)
 {
-  gint n_elems;
+  gint n_elems, bits;
   GstVideoScalerVFunc func = NULL;
 
   g_return_if_fail (scale != NULL);
@@ -1395,7 +1394,7 @@
   g_return_if_fail (dest != NULL);
   g_return_if_fail (dest_offset < scale->resampler.out_size);
 
-  if (!get_functions (NULL, scale, format, NULL, &func, &n_elems, &width)
+  if (!get_functions (NULL, scale, format, NULL, &func, &n_elems, &width, &bits)
       || func == NULL)
     goto no_func;
 
@@ -1442,7 +1441,7 @@
     gpointer dest, gint dest_stride, guint x, guint y,
     guint width, guint height)
 {
-  gint n_elems;
+  gint n_elems, bits;
   GstVideoScalerHFunc hfunc = NULL;
   GstVideoScalerVFunc vfunc = NULL;
   gint i;
@@ -1450,7 +1449,8 @@
   g_return_if_fail (src != NULL);
   g_return_if_fail (dest != NULL);
 
-  if (!get_functions (hscale, vscale, format, &hfunc, &vfunc, &n_elems, &width))
+  if (!get_functions (hscale, vscale, format, &hfunc, &vfunc, &n_elems, &width,
+          &bits))
     goto no_func;
 
 #define LINE(s,ss,i)  ((guint8 *)(s) + ((i) * (ss)))
@@ -1462,7 +1462,7 @@
       guint8 *s, *d;
 
       xo = x * n_elems;
-      xw = width * n_elems;
+      xw = width * n_elems * (bits / 8);
 
       s = LINE (src, src_stride, y) + xo;
       d = LINE (dest, dest_stride, y) + xo;
diff --git a/gst-plugins-base.doap b/gst-plugins-base.doap
index 905b308..16ada23 100644
--- a/gst-plugins-base.doap
+++ b/gst-plugins-base.doap
@@ -36,6 +36,16 @@
 
  <release>
   <Version>
+   <revision>1.9.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-09-30</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.9.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.9.2</revision>
    <branch>master</branch>
    <name></name>
diff --git a/gst-plugins-base.spec b/gst-plugins-base.spec
index 5c49965..7210a38 100644
--- a/gst-plugins-base.spec
+++ b/gst-plugins-base.spec
@@ -4,7 +4,7 @@
 %define gst_minver  0.11.0
 
 Name: 		%{gstreamer}-plugins-base
-Version: 	1.9.2
+Version: 	1.9.90
 Release: 	1.gst
 Summary: 	GStreamer streaming media framework plug-ins
 
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 373115f..2cf6c0d 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -427,6 +427,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/adder/Makefile.in b/gst/adder/Makefile.in
index fbcb995..5cc6d13 100644
--- a/gst/adder/Makefile.in
+++ b/gst/adder/Makefile.in
@@ -475,6 +475,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/app/Makefile.in b/gst/app/Makefile.in
index e79dae8..e9e1386 100644
--- a/gst/app/Makefile.in
+++ b/gst/app/Makefile.in
@@ -445,6 +445,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/audioconvert/Makefile.in b/gst/audioconvert/Makefile.in
index 808b2a0..6744414 100644
--- a/gst/audioconvert/Makefile.in
+++ b/gst/audioconvert/Makefile.in
@@ -451,6 +451,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/audiorate/Makefile.in b/gst/audiorate/Makefile.in
index 649f6c0..7f2f918 100644
--- a/gst/audiorate/Makefile.in
+++ b/gst/audiorate/Makefile.in
@@ -448,6 +448,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/audioresample/Makefile.in b/gst/audioresample/Makefile.in
index 7f3cb2a..b2dcdc4 100644
--- a/gst/audioresample/Makefile.in
+++ b/gst/audioresample/Makefile.in
@@ -453,6 +453,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/audiotestsrc/Makefile.in b/gst/audiotestsrc/Makefile.in
index ebd536e..802291c 100644
--- a/gst/audiotestsrc/Makefile.in
+++ b/gst/audiotestsrc/Makefile.in
@@ -450,6 +450,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c
index 1c3b5bc..d00c1c6 100644
--- a/gst/audiotestsrc/gstaudiotestsrc.c
+++ b/gst/audiotestsrc/gstaudiotestsrc.c
@@ -1123,21 +1123,16 @@
 
   src->next_sample = next_sample;
 
-  if (!src->reverse) {
-    if (GST_CLOCK_TIME_IS_VALID (segment->start)) {
-      segment->time = segment->start;
-    }
-  } else {
-    if (GST_CLOCK_TIME_IS_VALID (segment->stop)) {
-      segment->time = segment->stop;
-    }
-  }
-
-  if (GST_CLOCK_TIME_IS_VALID (segment->stop)) {
+  if (segment->rate > 0 && GST_CLOCK_TIME_IS_VALID (segment->stop)) {
     time = segment->stop;
     src->sample_stop =
         gst_util_uint64_scale_round (time, samplerate, GST_SECOND);
     src->check_seek_stop = TRUE;
+  } else if (segment->rate < 0) {
+    time = segment->start;
+    src->sample_stop =
+        gst_util_uint64_scale_round (time, samplerate, GST_SECOND);
+    src->check_seek_stop = TRUE;
   } else {
     src->check_seek_stop = FALSE;
   }
@@ -1212,7 +1207,7 @@
   }
 
   /* check for eos */
-  if (src->check_seek_stop &&
+  if (src->check_seek_stop && !src->reverse &&
       (src->sample_stop > src->next_sample) &&
       (src->sample_stop < src->next_sample + samples)
       ) {
@@ -1220,6 +1215,13 @@
     src->generate_samples_per_buffer = src->sample_stop - src->next_sample;
     next_sample = src->sample_stop;
     src->eos_reached = TRUE;
+  } else if (src->check_seek_stop && src->reverse &&
+      (src->sample_stop > src->next_sample)
+      ) {
+    /* calculate only partial buffer */
+    src->generate_samples_per_buffer = src->sample_stop - src->next_sample;
+    next_sample = src->sample_stop;
+    src->eos_reached = TRUE;
   } else {
     /* calculate full buffer */
     src->generate_samples_per_buffer = samples;
diff --git a/gst/encoding/Makefile.in b/gst/encoding/Makefile.in
index d2a003b..9d116d1 100644
--- a/gst/encoding/Makefile.in
+++ b/gst/encoding/Makefile.in
@@ -460,6 +460,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/gio/Makefile.in b/gst/gio/Makefile.in
index 72c719e..c7a6f5c 100644
--- a/gst/gio/Makefile.in
+++ b/gst/gio/Makefile.in
@@ -454,6 +454,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/playback/Makefile.in b/gst/playback/Makefile.in
index 631a262..92a0657 100644
--- a/gst/playback/Makefile.in
+++ b/gst/playback/Makefile.in
@@ -468,6 +468,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 89ed6a9..d6872ad 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -100,9 +100,7 @@
 #include "gstplay-enum.h"
 #include "gstplayback.h"
 #include "gstrawcaps.h"
-
-/* Also used by gsturidecodebin.c */
-gint _decode_bin_compare_factories_func (gconstpointer p1, gconstpointer p2);
+#include "gstplaybackutils.h"
 
 /* generic templates */
 static GstStaticPadTemplate decoder_bin_sink_template =
@@ -1023,33 +1021,6 @@
   g_type_class_ref (GST_TYPE_DECODE_PAD);
 }
 
-gint
-_decode_bin_compare_factories_func (gconstpointer p1, gconstpointer p2)
-{
-  GstPluginFeature *f1, *f2;
-  gboolean is_parser1, is_parser2;
-
-  f1 = (GstPluginFeature *) p1;
-  f2 = (GstPluginFeature *) p2;
-
-  is_parser1 = gst_element_factory_list_is_type (GST_ELEMENT_FACTORY_CAST (f1),
-      GST_ELEMENT_FACTORY_TYPE_PARSER);
-  is_parser2 = gst_element_factory_list_is_type (GST_ELEMENT_FACTORY_CAST (f2),
-      GST_ELEMENT_FACTORY_TYPE_PARSER);
-
-
-  /* We want all parsers first as we always want to plug parsers
-   * before decoders */
-  if (is_parser1 && !is_parser2)
-    return -1;
-  else if (!is_parser1 && is_parser2)
-    return 1;
-
-  /* And if it's a both a parser we first sort by rank
-   * and then by factory name */
-  return gst_plugin_feature_rank_compare_func (p1, p2);
-}
-
 /* Must be called with factories lock! */
 static void
 gst_decode_bin_update_factories_list (GstDecodeBin * dbin)
@@ -1064,7 +1035,8 @@
         gst_element_factory_list_get_elements
         (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL);
     dbin->factories =
-        g_list_sort (dbin->factories, _decode_bin_compare_factories_func);
+        g_list_sort (dbin->factories,
+        gst_playback_utils_compare_factories_func);
     dbin->factories_cookie = cookie;
   }
 }
diff --git a/gst/playback/gstplaybackutils.c b/gst/playback/gstplaybackutils.c
index d003c91..ef98528 100644
--- a/gst/playback/gstplaybackutils.c
+++ b/gst/playback/gstplaybackutils.c
@@ -131,3 +131,30 @@
 
   return n_common_cf;
 }
+
+gint
+gst_playback_utils_compare_factories_func (gconstpointer p1, gconstpointer p2)
+{
+  GstPluginFeature *f1, *f2;
+  gboolean is_parser1, is_parser2;
+
+  f1 = (GstPluginFeature *) p1;
+  f2 = (GstPluginFeature *) p2;
+
+  is_parser1 = gst_element_factory_list_is_type (GST_ELEMENT_FACTORY_CAST (f1),
+      GST_ELEMENT_FACTORY_TYPE_PARSER);
+  is_parser2 = gst_element_factory_list_is_type (GST_ELEMENT_FACTORY_CAST (f2),
+      GST_ELEMENT_FACTORY_TYPE_PARSER);
+
+
+  /* We want all parsers first as we always want to plug parsers
+   * before decoders */
+  if (is_parser1 && !is_parser2)
+    return -1;
+  else if (!is_parser1 && is_parser2)
+    return 1;
+
+  /* And if it's a both a parser we first sort by rank
+   * and then by factory name */
+  return gst_plugin_feature_rank_compare_func (p1, p2);
+}
diff --git a/gst/playback/gstplaybackutils.h b/gst/playback/gstplaybackutils.h
index c9f895e..d7f6700 100644
--- a/gst/playback/gstplaybackutils.h
+++ b/gst/playback/gstplaybackutils.h
@@ -27,11 +27,15 @@
 #include <gst/gst.h>
 #include "gstplay-enum.h"
 
+G_GNUC_INTERNAL
 guint
 gst_playback_utils_get_n_common_capsfeatures (GstElementFactory * fact1,
                                         GstElementFactory * fact2,
                                         GstPlayFlags flags,
                                         gboolean isaudioelement);
+G_GNUC_INTERNAL
+gint
+gst_playback_utils_compare_factories_func (gconstpointer p1, gconstpointer p2);
 G_END_DECLS
 
 #endif /* __GST_PLAYBACK_UTILS_H__ */
diff --git a/gst/playback/gstplaybin3.c b/gst/playback/gstplaybin3.c
index 9e38d72..6c084a4 100644
--- a/gst/playback/gstplaybin3.c
+++ b/gst/playback/gstplaybin3.c
@@ -514,7 +514,6 @@
 
   /* Active stream collection */
   GstStreamCollection *collection;
-  guint collection_notify_id;
 };
 
 struct _GstPlayBin3Class
@@ -525,28 +524,8 @@
    * queue a new one for gapless playback */
   void (*about_to_finish) (GstPlayBin3 * playbin);
 
-  /* notify app that number of audio/video/text streams changed */
-  void (*video_changed) (GstPlayBin3 * playbin);
-  void (*audio_changed) (GstPlayBin3 * playbin);
-  void (*text_changed) (GstPlayBin3 * playbin);
-
-  /* notify app that the tags of audio/video/text streams changed */
-  void (*video_tags_changed) (GstPlayBin3 * playbin, gint stream);
-  void (*audio_tags_changed) (GstPlayBin3 * playbin, gint stream);
-  void (*text_tags_changed) (GstPlayBin3 * playbin, gint stream);
-
-  /* get audio/video/text tags for a stream */
-  GstTagList *(*get_video_tags) (GstPlayBin3 * playbin, gint stream);
-  GstTagList *(*get_audio_tags) (GstPlayBin3 * playbin, gint stream);
-  GstTagList *(*get_text_tags) (GstPlayBin3 * playbin, gint stream);
-
   /* get the last video sample and convert it to the given caps */
   GstSample *(*convert_sample) (GstPlayBin3 * playbin, GstCaps * caps);
-
-  /* get audio/video/text pad for a stream */
-  GstPad *(*get_video_pad) (GstPlayBin3 * playbin, gint stream);
-  GstPad *(*get_audio_pad) (GstPlayBin3 * playbin, gint stream);
-  GstPad *(*get_text_pad) (GstPlayBin3 * playbin, gint stream);
 };
 
 /* props */
@@ -556,11 +535,8 @@
 #define DEFAULT_FLAGS             GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT | \
                                   GST_PLAY_FLAG_SOFT_VOLUME | GST_PLAY_FLAG_DEINTERLACE | \
                                   GST_PLAY_FLAG_SOFT_COLORBALANCE
-#define DEFAULT_N_VIDEO           0
 #define DEFAULT_CURRENT_VIDEO     -1
-#define DEFAULT_N_AUDIO           0
 #define DEFAULT_CURRENT_AUDIO     -1
-#define DEFAULT_N_TEXT            0
 #define DEFAULT_CURRENT_TEXT      -1
 #define DEFAULT_AUTO_SELECT_STREAMS TRUE
 #define DEFAULT_SUBTITLE_ENCODING NULL
@@ -586,13 +562,6 @@
   PROP_CURRENT_SUBURI,
   PROP_SOURCE,
   PROP_FLAGS,
-  PROP_N_VIDEO,
-  PROP_CURRENT_VIDEO,
-  PROP_N_AUDIO,
-  PROP_CURRENT_AUDIO,
-  PROP_N_TEXT,
-  PROP_CURRENT_TEXT,
-  PROP_AUTO_SELECT_STREAMS,
   PROP_SUBTITLE_ENCODING,
   PROP_AUDIO_SINK,
   PROP_VIDEO_SINK,
@@ -622,18 +591,6 @@
 {
   SIGNAL_ABOUT_TO_FINISH,
   SIGNAL_CONVERT_SAMPLE,
-  SIGNAL_VIDEO_CHANGED,
-  SIGNAL_AUDIO_CHANGED,
-  SIGNAL_TEXT_CHANGED,
-  SIGNAL_VIDEO_TAGS_CHANGED,
-  SIGNAL_AUDIO_TAGS_CHANGED,
-  SIGNAL_TEXT_TAGS_CHANGED,
-  SIGNAL_GET_VIDEO_TAGS,
-  SIGNAL_GET_AUDIO_TAGS,
-  SIGNAL_GET_TEXT_TAGS,
-  SIGNAL_GET_VIDEO_PAD,
-  SIGNAL_GET_AUDIO_PAD,
-  SIGNAL_GET_TEXT_PAD,
   SIGNAL_SOURCE_SETUP,
   SIGNAL_ELEMENT_SETUP,
   LAST_SIGNAL
@@ -663,20 +620,9 @@
 static gboolean gst_play_bin3_send_event (GstElement * element,
     GstEvent * event);
 
-static GstTagList *gst_play_bin3_get_video_tags (GstPlayBin3 * playbin,
-    gint stream);
-static GstTagList *gst_play_bin3_get_audio_tags (GstPlayBin3 * playbin,
-    gint stream);
-static GstTagList *gst_play_bin3_get_text_tags (GstPlayBin3 * playbin,
-    gint stream);
-
 static GstSample *gst_play_bin3_convert_sample (GstPlayBin3 * playbin,
     GstCaps * caps);
 
-static GstPad *gst_play_bin3_get_video_pad (GstPlayBin3 * playbin, gint stream);
-static GstPad *gst_play_bin3_get_audio_pad (GstPlayBin3 * playbin, gint stream);
-static GstPad *gst_play_bin3_get_text_pad (GstPlayBin3 * playbin, gint stream);
-
 static GstStateChangeReturn setup_next_source (GstPlayBin3 * playbin,
     GstState target);
 
@@ -689,10 +635,6 @@
     GstPlayBin3 * playbin);
 
 static void do_stream_selection (GstPlayBin3 * playbin);
-static void notify_tags_cb (GstStreamCollection * collection,
-    GstStream * stream, GParamSpec * pspec, GstPlayBin3 * playbin);
-static void notify_tags_for_stream (GstPlayBin3 * playbin,
-    GstStreamCollection * collection, GstStream * stream);
 
 static GstElementClass *parent_class;
 
@@ -833,81 +775,6 @@
           GST_TYPE_PLAY_FLAGS, DEFAULT_FLAGS,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  /**
-   * GstPlayBin3:n-video
-   *
-   * Get the total number of available video streams.
-   */
-  g_object_class_install_property (gobject_klass, PROP_N_VIDEO,
-      g_param_spec_int ("n-video", "Number Video",
-          "Total number of video streams", 0, G_MAXINT, 0,
-          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  /**
-   * GstPlayBin3:current-video
-   *
-   * Get or set the currently playing video stream. By default the first video
-   * stream with data is played.
-   */
-  g_object_class_install_property (gobject_klass, PROP_CURRENT_VIDEO,
-      g_param_spec_int ("current-video", "Current Video",
-          "Currently playing video stream (-1 = auto)",
-          -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  /**
-   * GstPlayBin3:n-audio
-   *
-   * Get the total number of available audio streams.
-   */
-  g_object_class_install_property (gobject_klass, PROP_N_AUDIO,
-      g_param_spec_int ("n-audio", "Number Audio",
-          "Total number of audio streams", 0, G_MAXINT, 0,
-          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  /**
-   * GstPlayBin3:current-audio
-   *
-   * Get or set the currently playing audio stream. By default the first audio
-   * stream with data is played.
-   */
-  g_object_class_install_property (gobject_klass, PROP_CURRENT_AUDIO,
-      g_param_spec_int ("current-audio", "Current audio",
-          "Currently playing audio stream (-1 = auto)",
-          -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  /**
-   * GstPlayBin3:n-text
-   *
-   * Get the total number of available subtitle streams.
-   */
-  g_object_class_install_property (gobject_klass, PROP_N_TEXT,
-      g_param_spec_int ("n-text", "Number Text",
-          "Total number of text streams", 0, G_MAXINT, 0,
-          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  /**
-   * GstPlayBin3:current-text:
-   *
-   * Get or set the currently playing subtitle stream. By default the first
-   * subtitle stream with data is played.
-   */
-  g_object_class_install_property (gobject_klass, PROP_CURRENT_TEXT,
-      g_param_spec_int ("current-text", "Current Text",
-          "Currently playing text stream (-1 = auto)",
-          -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /**
-   * GstPlayBin3::auto-select-streams:
-   *
-   * If TRUE the playbin will respond to stream-collection messages
-   * by sending a SELECT_STREAMS event to decodebin. Set to FALSE
-   * if the application will manage stream selection. This property
-   * will automatically be set to FALSE if playbin receives a select-streams
-   * event from the application, but setting it explicitly avoids any
-   * races where playbin mind send a select-streams event before the
-   * application.
-   */
-  g_object_class_install_property (gobject_klass, PROP_AUTO_SELECT_STREAMS,
-      g_param_spec_boolean ("auto-select-streams", "Automatic Select-Streams",
-          "Whether playbin should respond to stream-collection messags with select-streams events",
-          DEFAULT_AUTO_SELECT_STREAMS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
   g_object_class_install_property (gobject_klass, PROP_SUBTITLE_ENCODING,
       g_param_spec_string ("subtitle-encoding", "subtitle encoding",
           "Encoding to assume if input subtitles are not in UTF-8 encoding. "
@@ -1124,114 +991,6 @@
       G_STRUCT_OFFSET (GstPlayBin3Class, about_to_finish), NULL, NULL,
       g_cclosure_marshal_generic, G_TYPE_NONE, 0, G_TYPE_NONE);
 
-  /**
-   * GstPlayBin3::video-changed
-   * @playbin: a #GstPlayBin3
-   *
-   * This signal is emitted whenever the number or order of the video
-   * streams has changed. The application will most likely want to select
-   * a new video stream.
-   *
-   * This signal is usually emitted from the context of a GStreamer streaming
-   * thread. You can use gst_message_new_application() and
-   * gst_element_post_message() to notify your application's main thread.
-   */
-  /* FIXME 0.11: turn video-changed signal into message? */
-  gst_play_bin3_signals[SIGNAL_VIDEO_CHANGED] =
-      g_signal_new ("video-changed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (GstPlayBin3Class, video_changed), NULL, NULL,
-      g_cclosure_marshal_generic, G_TYPE_NONE, 0, G_TYPE_NONE);
-  /**
-   * GstPlayBin3::audio-changed
-   * @playbin: a #GstPlayBin3
-   *
-   * This signal is emitted whenever the number or order of the audio
-   * streams has changed. The application will most likely want to select
-   * a new audio stream.
-   *
-   * This signal may be emitted from the context of a GStreamer streaming thread.
-   * You can use gst_message_new_application() and gst_element_post_message()
-   * to notify your application's main thread.
-   */
-  /* FIXME 0.11: turn audio-changed signal into message? */
-  gst_play_bin3_signals[SIGNAL_AUDIO_CHANGED] =
-      g_signal_new ("audio-changed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (GstPlayBin3Class, audio_changed), NULL, NULL,
-      g_cclosure_marshal_generic, G_TYPE_NONE, 0, G_TYPE_NONE);
-  /**
-   * GstPlayBin3::text-changed
-   * @playbin: a #GstPlayBin3
-   *
-   * This signal is emitted whenever the number or order of the text
-   * streams has changed. The application will most likely want to select
-   * a new text stream.
-   *
-   * This signal may be emitted from the context of a GStreamer streaming thread.
-   * You can use gst_message_new_application() and gst_element_post_message()
-   * to notify your application's main thread.
-   */
-  /* FIXME 0.11: turn text-changed signal into message? */
-  gst_play_bin3_signals[SIGNAL_TEXT_CHANGED] =
-      g_signal_new ("text-changed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (GstPlayBin3Class, text_changed), NULL, NULL,
-      g_cclosure_marshal_generic, G_TYPE_NONE, 0, G_TYPE_NONE);
-
-  /**
-   * GstPlayBin3::video-tags-changed
-   * @playbin: a #GstPlayBin3
-   * @stream: stream index with changed tags
-   *
-   * This signal is emitted whenever the tags of a video stream have changed.
-   * The application will most likely want to get the new tags.
-   *
-   * This signal may be emitted from the context of a GStreamer streaming thread.
-   * You can use gst_message_new_application() and gst_element_post_message()
-   * to notify your application's main thread.
-   */
-  gst_play_bin3_signals[SIGNAL_VIDEO_TAGS_CHANGED] =
-      g_signal_new ("video-tags-changed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (GstPlayBin3Class, video_tags_changed), NULL, NULL,
-      g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_INT);
-
-  /**
-   * GstPlayBin3::audio-tags-changed
-   * @playbin: a #GstPlayBin3
-   * @stream: stream index with changed tags
-   *
-   * This signal is emitted whenever the tags of an audio stream have changed.
-   * The application will most likely want to get the new tags.
-   *
-   * This signal may be emitted from the context of a GStreamer streaming thread.
-   * You can use gst_message_new_application() and gst_element_post_message()
-   * to notify your application's main thread.
-   */
-  gst_play_bin3_signals[SIGNAL_AUDIO_TAGS_CHANGED] =
-      g_signal_new ("audio-tags-changed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (GstPlayBin3Class, audio_tags_changed), NULL, NULL,
-      g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_INT);
-
-  /**
-   * GstPlayBin3::text-tags-changed
-   * @playbin: a #GstPlayBin3
-   * @stream: stream index with changed tags
-   *
-   * This signal is emitted whenever the tags of a text stream have changed.
-   * The application will most likely want to get the new tags.
-   *
-   * This signal may be emitted from the context of a GStreamer streaming thread.
-   * You can use gst_message_new_application() and gst_element_post_message()
-   * to notify your application's main thread.
-   */
-  gst_play_bin3_signals[SIGNAL_TEXT_TAGS_CHANGED] =
-      g_signal_new ("text-tags-changed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (GstPlayBin3Class, text_tags_changed), NULL, NULL,
-      g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_INT);
 
   /**
    * GstPlayBin3::source-setup:
@@ -1274,54 +1033,6 @@
       g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
 
   /**
-   * GstPlayBin3::get-video-tags
-   * @playbin: a #GstPlayBin3
-   * @stream: a video stream number
-   *
-   * Action signal to retrieve the tags of a specific video stream number.
-   * This information can be used to select a stream.
-   *
-   * Returns: a GstTagList with tags or NULL when the stream number does not
-   * exist.
-   */
-  gst_play_bin3_signals[SIGNAL_GET_VIDEO_TAGS] =
-      g_signal_new ("get-video-tags", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (GstPlayBin3Class, get_video_tags), NULL, NULL,
-      g_cclosure_marshal_generic, GST_TYPE_TAG_LIST, 1, G_TYPE_INT);
-  /**
-   * GstPlayBin3::get-audio-tags
-   * @playbin: a #GstPlayBin3
-   * @stream: an audio stream number
-   *
-   * Action signal to retrieve the tags of a specific audio stream number.
-   * This information can be used to select a stream.
-   *
-   * Returns: a GstTagList with tags or NULL when the stream number does not
-   * exist.
-   */
-  gst_play_bin3_signals[SIGNAL_GET_AUDIO_TAGS] =
-      g_signal_new ("get-audio-tags", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (GstPlayBin3Class, get_audio_tags), NULL, NULL,
-      g_cclosure_marshal_generic, GST_TYPE_TAG_LIST, 1, G_TYPE_INT);
-  /**
-   * GstPlayBin3::get-text-tags
-   * @playbin: a #GstPlayBin3
-   * @stream: a text stream number
-   *
-   * Action signal to retrieve the tags of a specific text stream number.
-   * This information can be used to select a stream.
-   *
-   * Returns: a GstTagList with tags or NULL when the stream number does not
-   * exist.
-   */
-  gst_play_bin3_signals[SIGNAL_GET_TEXT_TAGS] =
-      g_signal_new ("get-text-tags", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (GstPlayBin3Class, get_text_tags), NULL, NULL,
-      g_cclosure_marshal_generic, GST_TYPE_TAG_LIST, 1, G_TYPE_INT);
-  /**
    * GstPlayBin3::convert-sample
    * @playbin: a #GstPlayBin3
    * @caps: the target format of the frame
@@ -1342,68 +1053,8 @@
       G_STRUCT_OFFSET (GstPlayBin3Class, convert_sample), NULL, NULL,
       g_cclosure_marshal_generic, GST_TYPE_SAMPLE, 1, GST_TYPE_CAPS);
 
-  /**
-   * GstPlayBin3::get-video-pad
-   * @playbin: a #GstPlayBin3
-   * @stream: a video stream number
-   *
-   * Action signal to retrieve the stream-combiner sinkpad for a specific
-   * video stream.
-   * This pad can be used for notifications of caps changes, stream-specific
-   * queries, etc.
-   *
-   * Returns: a #GstPad, or NULL when the stream number does not exist.
-   */
-  gst_play_bin3_signals[SIGNAL_GET_VIDEO_PAD] =
-      g_signal_new ("get-video-pad", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (GstPlayBin3Class, get_video_pad), NULL, NULL,
-      g_cclosure_marshal_generic, GST_TYPE_PAD, 1, G_TYPE_INT);
-  /**
-   * GstPlayBin3::get-audio-pad
-   * @playbin: a #GstPlayBin3
-   * @stream: an audio stream number
-   *
-   * Action signal to retrieve the stream-combiner sinkpad for a specific
-   * audio stream.
-   * This pad can be used for notifications of caps changes, stream-specific
-   * queries, etc.
-   *
-   * Returns: a #GstPad, or NULL when the stream number does not exist.
-   */
-  gst_play_bin3_signals[SIGNAL_GET_AUDIO_PAD] =
-      g_signal_new ("get-audio-pad", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (GstPlayBin3Class, get_audio_pad), NULL, NULL,
-      g_cclosure_marshal_generic, GST_TYPE_PAD, 1, G_TYPE_INT);
-  /**
-   * GstPlayBin3::get-text-pad
-   * @playbin: a #GstPlayBin3
-   * @stream: a text stream number
-   *
-   * Action signal to retrieve the stream-combiner sinkpad for a specific
-   * text stream.
-   * This pad can be used for notifications of caps changes, stream-specific
-   * queries, etc.
-   *
-   * Returns: a #GstPad, or NULL when the stream number does not exist.
-   */
-  gst_play_bin3_signals[SIGNAL_GET_TEXT_PAD] =
-      g_signal_new ("get-text-pad", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (GstPlayBin3Class, get_text_pad), NULL, NULL,
-      g_cclosure_marshal_generic, GST_TYPE_PAD, 1, G_TYPE_INT);
-
-  klass->get_video_tags = gst_play_bin3_get_video_tags;
-  klass->get_audio_tags = gst_play_bin3_get_audio_tags;
-  klass->get_text_tags = gst_play_bin3_get_text_tags;
-
   klass->convert_sample = gst_play_bin3_convert_sample;
 
-  klass->get_video_pad = gst_play_bin3_get_video_pad;
-  klass->get_audio_pad = gst_play_bin3_get_audio_pad;
-  klass->get_text_pad = gst_play_bin3_get_text_pad;
-
   gst_element_class_set_static_metadata (gstelement_klass,
       "Player Bin 3", "Generic/Bin/Player",
       "Autoplug and play media from an uri",
@@ -1716,8 +1367,6 @@
   /* assume we can create an input-selector */
   playbin->have_selector = TRUE;
 
-  playbin->do_stream_selections = DEFAULT_AUTO_SELECT_STREAMS;
-
   init_combiners (playbin);
 
   /* init groups */
@@ -1948,110 +1597,6 @@
   return result;
 }
 
-static GstPad *
-gst_play_bin3_get_pad_of_type (GstPlayBin3 * playbin, gint stream_type,
-    gint stream)
-{
-  GstPad *sinkpad = NULL;
-
-  GST_PLAY_BIN3_LOCK (playbin);
-  if (playbin->combiner[stream_type].combiner == NULL) {
-    GST_DEBUG_OBJECT (playbin,
-        "get-pad of type %d w/o custom-combiner. Returning playsink pad",
-        stream_type);
-    sinkpad = playbin->combiner[stream_type].sinkpad;
-    if (sinkpad) {
-      sinkpad = gst_object_ref (sinkpad);
-      goto done;
-    }
-  }
-  if (stream < playbin->channels[stream_type]->len) {
-    sinkpad = g_ptr_array_index (playbin->channels[stream_type], stream);
-    gst_object_ref (sinkpad);
-  }
-
-done:
-  GST_PLAY_BIN3_UNLOCK (playbin);
-
-  return sinkpad;
-}
-
-static GstPad *
-gst_play_bin3_get_video_pad (GstPlayBin3 * playbin, gint stream)
-{
-  return gst_play_bin3_get_pad_of_type (playbin, PLAYBIN_STREAM_VIDEO, stream);
-}
-
-static GstPad *
-gst_play_bin3_get_audio_pad (GstPlayBin3 * playbin, gint stream)
-{
-  return gst_play_bin3_get_pad_of_type (playbin, PLAYBIN_STREAM_AUDIO, stream);
-}
-
-static GstPad *
-gst_play_bin3_get_text_pad (GstPlayBin3 * playbin, gint stream)
-{
-  return gst_play_bin3_get_pad_of_type (playbin, PLAYBIN_STREAM_TEXT, stream);
-}
-
-
-static GstTagList *
-get_tags (GstPlayBin3 * playbin, GstStreamType type, gint stream_num)
-{
-  GstTagList *result = NULL;
-  gint nb_streams = gst_stream_collection_get_size (playbin->collection);
-  gint i, cur_idx = 0;
-
-  /* Count the streams of the type we want to find the one numbered 'stream' */
-  for (i = 0; i < nb_streams; i++) {
-    GstStream *stream =
-        gst_stream_collection_get_stream (playbin->collection, i);
-    GstStreamType stream_type = gst_stream_get_stream_type (stream);
-    if (stream_type != type)
-      continue;
-    if (cur_idx == stream_num)
-      return gst_stream_get_tags (stream);
-    cur_idx++;
-  }
-
-  return result;
-}
-
-static GstTagList *
-gst_play_bin3_get_video_tags (GstPlayBin3 * playbin, gint stream)
-{
-  GstTagList *result;
-
-  GST_PLAY_BIN3_LOCK (playbin);
-  result = get_tags (playbin, GST_STREAM_TYPE_VIDEO, stream);
-  GST_PLAY_BIN3_UNLOCK (playbin);
-
-  return result;
-}
-
-static GstTagList *
-gst_play_bin3_get_audio_tags (GstPlayBin3 * playbin, gint stream)
-{
-  GstTagList *result;
-
-  GST_PLAY_BIN3_LOCK (playbin);
-  result = get_tags (playbin, GST_STREAM_TYPE_AUDIO, stream);
-  GST_PLAY_BIN3_UNLOCK (playbin);
-
-  return result;
-}
-
-static GstTagList *
-gst_play_bin3_get_text_tags (GstPlayBin3 * playbin, gint stream)
-{
-  GstTagList *result;
-
-  GST_PLAY_BIN3_LOCK (playbin);
-  result = get_tags (playbin, GST_STREAM_TYPE_TEXT, stream);
-  GST_PLAY_BIN3_UNLOCK (playbin);
-
-  return result;
-}
 
 static GstSample *
 gst_play_bin3_convert_sample (GstPlayBin3 * playbin, GstCaps * caps)
@@ -2338,20 +1883,6 @@
         GST_SOURCE_GROUP_UNLOCK (playbin->curr_group);
       }
       break;
-    case PROP_CURRENT_VIDEO:
-      gst_play_bin3_set_current_video_stream (playbin, g_value_get_int (value));
-      break;
-    case PROP_CURRENT_AUDIO:
-      gst_play_bin3_set_current_audio_stream (playbin, g_value_get_int (value));
-      break;
-    case PROP_CURRENT_TEXT:
-      gst_play_bin3_set_current_text_stream (playbin, g_value_get_int (value));
-      break;
-    case PROP_AUTO_SELECT_STREAMS:
-      GST_PLAY_BIN3_LOCK (playbin);
-      playbin->do_stream_selections = g_value_get_boolean (value);
-      GST_PLAY_BIN3_UNLOCK (playbin);
-      break;
     case PROP_SUBTITLE_ENCODING:
       gst_play_bin3_set_encoding (playbin, g_value_get_string (value));
       break;
@@ -2540,75 +2071,6 @@
     case PROP_FLAGS:
       g_value_set_flags (value, gst_play_bin3_get_flags (playbin));
       break;
-    case PROP_N_VIDEO:
-    {
-      gint n_video;
-
-      GST_PLAY_BIN3_LOCK (playbin);
-      n_video =
-          playbin->combiner[PLAYBIN_STREAM_VIDEO].
-          streams ? playbin->combiner[PLAYBIN_STREAM_VIDEO].streams->len : 0;
-      GST_PLAY_BIN3_UNLOCK (playbin);
-      g_value_set_int (value, n_video);
-      break;
-    }
-    case PROP_CURRENT_VIDEO:
-      GST_PLAY_BIN3_LOCK (playbin);
-      if (playbin->combiner[PLAYBIN_STREAM_VIDEO].current_stream != -1)
-        g_value_set_int (value,
-            playbin->combiner[PLAYBIN_STREAM_VIDEO].current_stream);
-      else
-        g_value_set_int (value, playbin->current_video);
-      GST_PLAY_BIN3_UNLOCK (playbin);
-      break;
-    case PROP_N_AUDIO:
-    {
-      gint n_audio;
-
-      GST_PLAY_BIN3_LOCK (playbin);
-      n_audio =
-          playbin->combiner[PLAYBIN_STREAM_AUDIO].
-          streams ? playbin->combiner[PLAYBIN_STREAM_AUDIO].streams->len : 0;
-      GST_PLAY_BIN3_UNLOCK (playbin);
-
-      g_value_set_int (value, n_audio);
-      break;
-    }
-    case PROP_CURRENT_AUDIO:
-      GST_PLAY_BIN3_LOCK (playbin);
-      if (playbin->combiner[PLAYBIN_STREAM_AUDIO].current_stream != -1)
-        g_value_set_int (value,
-            playbin->combiner[PLAYBIN_STREAM_AUDIO].current_stream);
-      else
-        g_value_set_int (value, playbin->current_audio);
-      GST_PLAY_BIN3_UNLOCK (playbin);
-      break;
-    case PROP_N_TEXT:
-    {
-      gint n_text;
-
-      GST_PLAY_BIN3_LOCK (playbin);
-      n_text =
-          playbin->combiner[PLAYBIN_STREAM_TEXT].
-          streams ? playbin->combiner[PLAYBIN_STREAM_TEXT].streams->len : 0;
-      GST_PLAY_BIN3_UNLOCK (playbin);
-      g_value_set_int (value, n_text);
-      break;
-    }
-    case PROP_CURRENT_TEXT:
-      GST_PLAY_BIN3_LOCK (playbin);
-      if (playbin->combiner[PLAYBIN_STREAM_TEXT].current_stream != -1)
-        g_value_set_int (value,
-            playbin->combiner[PLAYBIN_STREAM_TEXT].current_stream);
-      else
-        g_value_set_int (value, playbin->current_text);
-      GST_PLAY_BIN3_UNLOCK (playbin);
-      break;
-    case PROP_AUTO_SELECT_STREAMS:
-      GST_PLAY_BIN3_LOCK (playbin);
-      g_value_set_boolean (value, playbin->do_stream_selections);
-      GST_PLAY_BIN3_UNLOCK (playbin);
-      break;
     case PROP_SUBTITLE_ENCODING:
       GST_PLAY_BIN3_LOCK (playbin);
       g_value_take_string (value,
@@ -3058,16 +2520,6 @@
 };
 
 static void
-notify_all_streams (GstPlayBin3 * playbin, GstStreamCollection * collection)
-{
-  gint i, nb_streams;
-  nb_streams = gst_stream_collection_get_size (collection);
-  for (i = 0; i < nb_streams; i++)
-    notify_tags_for_stream (playbin, collection,
-        gst_stream_collection_get_stream (collection, i));
-}
-
-static void
 gst_play_bin3_handle_message (GstBin * bin, GstMessage * msg)
 {
   GstPlayBin3 *playbin = GST_PLAY_BIN3 (bin);
@@ -3136,16 +2588,8 @@
       GST_PLAY_BIN3_LOCK (playbin);
       GST_DEBUG_OBJECT (playbin,
           "STREAM_COLLECTION: Got a collection from %" GST_PTR_FORMAT, src);
-      if (playbin->collection && playbin->collection_notify_id) {
-        g_signal_handler_disconnect (playbin->collection,
-            playbin->collection_notify_id);
-        playbin->collection_notify_id = 0;
-      }
       gst_object_replace ((GstObject **) & playbin->collection,
           (GstObject *) collection);
-      playbin->collection_notify_id =
-          g_signal_connect (collection, "stream-notify::tags",
-          (GCallback) notify_tags_cb, playbin);
       update_combiner_info (playbin);
       if (pstate)
         playbin->do_stream_selections = FALSE;
@@ -3154,7 +2598,6 @@
         playbin->do_stream_selections = TRUE;
       GST_PLAY_BIN3_UNLOCK (playbin);
 
-      notify_all_streams (playbin, collection);
       gst_object_unref (collection);
     }
   } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_STREAMS_SELECTED) {
@@ -3168,16 +2611,8 @@
       GST_PLAY_BIN3_LOCK (playbin);
       GST_DEBUG_OBJECT (playbin,
           "STREAMS_SELECTED: Got a collection from %" GST_PTR_FORMAT, src);
-      if (playbin->collection && playbin->collection_notify_id) {
-        g_signal_handler_disconnect (playbin->collection,
-            playbin->collection_notify_id);
-        playbin->collection_notify_id = 0;
-      }
       gst_object_replace ((GstObject **) & playbin->collection,
           (GstObject *) collection);
-      playbin->collection_notify_id =
-          g_signal_connect (collection, "stream-notify::tags",
-          (GCallback) notify_tags_cb, playbin);
       update_combiner_info (playbin);
       len = gst_message_streams_selected_get_size (msg);
       for (i = 0; i < len; i++) {
@@ -3194,7 +2629,6 @@
         playbin->do_stream_selections = TRUE;
       GST_PLAY_BIN3_UNLOCK (playbin);
 
-      notify_all_streams (playbin, collection);
       gst_object_unref (collection);
     }
   }
@@ -3373,65 +2807,6 @@
   return ret;
 }
 
-static gint
-find_index_for_stream_by_type (GstStreamCollection * collection,
-    GstStream * stream)
-{
-  gint nb_streams = gst_stream_collection_get_size (collection);
-  gint i, cur_idx = 0;
-  GstStreamType target_type = gst_stream_get_stream_type (stream);
-
-  /* Count the streams of the type we want to find the index of the one we want */
-  for (i = 0; i < nb_streams; i++) {
-    GstStream *cur_stream = gst_stream_collection_get_stream (collection, i);
-    if (stream == cur_stream)
-      return cur_idx;
-    if (gst_stream_get_stream_type (cur_stream) == target_type)
-      cur_idx++;
-  }
-
-  return -1;
-}
-
-static void
-notify_tags_for_stream (GstPlayBin3 * playbin, GstStreamCollection * collection,
-    GstStream * stream)
-{
-  GstStreamType stream_type = gst_stream_get_stream_type (stream);
-  gint stream_idx = find_index_for_stream_by_type (collection, stream);
-  gint signal;
-
-  GST_DEBUG_OBJECT (playbin, "Tags on stream %" GST_PTR_FORMAT
-      " with stream idx %d and type %d have changed",
-      stream, stream_idx, stream_type);
-
-  switch (stream_type) {
-    case GST_STREAM_TYPE_VIDEO:
-      signal = SIGNAL_VIDEO_TAGS_CHANGED;
-      break;
-    case GST_STREAM_TYPE_AUDIO:
-      signal = SIGNAL_AUDIO_TAGS_CHANGED;
-      break;
-    case GST_STREAM_TYPE_TEXT:
-      signal = SIGNAL_TEXT_TAGS_CHANGED;
-      break;
-    default:
-      signal = -1;
-      break;
-  }
-
-  if (signal >= 0)
-    g_signal_emit (G_OBJECT (playbin), gst_play_bin3_signals[signal], 0,
-        stream_idx);
-}
-
-static void
-notify_tags_cb (GstStreamCollection * collection, GstStream * stream,
-    GParamSpec * pspec, GstPlayBin3 * playbin)
-{
-  notify_tags_for_stream (playbin, collection, stream);
-}
-
 /* this function is called when a new pad is added to decodebin. We check the
  * type of the pad and add it to the combiner element
  */
@@ -3443,7 +2818,6 @@
   GstSourceCombine *combine = NULL;
   GstStreamType stream_type;
   gint pb_stream_type = -1;
-  gboolean changed = FALSE;
   GstElement *custom_combiner = NULL;
   gulong event_probe_handler;
   gchar *pad_name;
@@ -3554,7 +2928,6 @@
       /* store combiner pad so we can release it */
       g_object_set_data (G_OBJECT (pad), "playbin.sinkpad", sinkpad);
 
-      changed = TRUE;
       GST_DEBUG_OBJECT (playbin, "linked pad %s:%s to combiner %p",
           GST_DEBUG_PAD_NAME (pad), combine->combiner);
     } else {
@@ -3563,7 +2936,6 @@
   } else {
     /* no combiner, don't configure anything, we'll link the new pad directly to
      * the sink. */
-    changed = FALSE;
     sinkpad = NULL;
 
     /* store the combiner for the pad */
@@ -3576,31 +2948,6 @@
   g_object_set_data (G_OBJECT (pad), "playbin.event_probe_id",
       ULONG_TO_POINTER (event_probe_handler));
 
-  if (changed) {
-    int signal;
-
-    switch (combine->type) {
-      case GST_PLAY_SINK_TYPE_VIDEO:
-      case GST_PLAY_SINK_TYPE_VIDEO_RAW:
-        signal = SIGNAL_VIDEO_CHANGED;
-        break;
-      case GST_PLAY_SINK_TYPE_AUDIO:
-      case GST_PLAY_SINK_TYPE_AUDIO_RAW:
-        signal = SIGNAL_AUDIO_CHANGED;
-        break;
-      case GST_PLAY_SINK_TYPE_TEXT:
-        signal = SIGNAL_TEXT_CHANGED;
-        break;
-      default:
-        signal = -1;
-    }
-
-    if (signal >= 0) {
-      g_signal_emit (G_OBJECT (playbin), gst_play_bin3_signals[signal], 0,
-          NULL);
-    }
-  }
-
   playbin->active_stream_types |= stream_type;
 
   /* If we're expecting either audio or video,
@@ -3649,7 +2996,6 @@
   GstPad *peer;
   GstElement *combiner;
   GstSourceCombine *combine;
-  int signal = -1;
   gulong event_probe_handler;
 
   GST_DEBUG_OBJECT (playbin,
@@ -3687,23 +3033,6 @@
     g_ptr_array_remove (combine->channels, peer);
     GST_DEBUG_OBJECT (playbin, "pad %p removed from array", peer);
 
-    /* get the correct type-changed signal */
-    switch (combine->type) {
-      case GST_PLAY_SINK_TYPE_VIDEO:
-      case GST_PLAY_SINK_TYPE_VIDEO_RAW:
-        signal = SIGNAL_VIDEO_CHANGED;
-        break;
-      case GST_PLAY_SINK_TYPE_AUDIO:
-      case GST_PLAY_SINK_TYPE_AUDIO_RAW:
-        signal = SIGNAL_AUDIO_CHANGED;
-        break;
-      case GST_PLAY_SINK_TYPE_TEXT:
-        signal = SIGNAL_TEXT_CHANGED;
-        break;
-      default:
-        signal = -1;
-    }
-
     if (!combine->channels->len && combine->combiner) {
       GST_DEBUG_OBJECT (playbin, "all combiner sinkpads removed");
       GST_DEBUG_OBJECT (playbin, "removing combiner %p", combine->combiner);
@@ -3723,9 +3052,6 @@
 exit:
   GST_PLAY_BIN3_UNLOCK (playbin);
 
-  if (signal >= 0)
-    g_signal_emit (G_OBJECT (playbin), gst_play_bin3_signals[signal], 0, NULL);
-
   return;
 
   /* ERRORS */
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
index 0bca05c..eaac018 100644
--- a/gst/playback/gstplaysink.c
+++ b/gst/playback/gstplaysink.c
@@ -677,6 +677,8 @@
 
   g_rec_mutex_init (&playsink->lock);
   GST_OBJECT_FLAG_SET (playsink, GST_ELEMENT_FLAG_SINK);
+  gst_bin_set_suppressed_flags (GST_BIN (playsink),
+      GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK);
 
   channel =
       GST_COLOR_BALANCE_CHANNEL (g_object_new (GST_TYPE_COLOR_BALANCE_CHANNEL,
@@ -1227,8 +1229,6 @@
     gst_bin_add (GST_BIN_CAST (chain->playsink), chain->bin);
   else {
     gst_bin_remove (GST_BIN_CAST (chain->playsink), chain->bin);
-    /* we don't want to lose our sink status */
-    GST_OBJECT_FLAG_SET (chain->playsink, GST_ELEMENT_FLAG_SINK);
   }
 
   chain->added = add;
diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
index b26ee70..ac77266 100644
--- a/gst/playback/gststreamsynchronizer.c
+++ b/gst/playback/gststreamsynchronizer.c
@@ -373,18 +373,31 @@
             ostream->wait = FALSE;
 
             if (ostream->segment.format == GST_FORMAT_TIME) {
-              stop_running_time =
-                  gst_segment_to_running_time (&ostream->segment,
-                  GST_FORMAT_TIME, ostream->segment.stop);
+              if (ostream->segment.rate > 0)
+                stop_running_time =
+                    gst_segment_to_running_time (&ostream->segment,
+                    GST_FORMAT_TIME, ostream->segment.stop);
+              else
+                stop_running_time =
+                    gst_segment_to_running_time (&ostream->segment,
+                    GST_FORMAT_TIME, ostream->segment.start);
+
               position_running_time =
                   gst_segment_to_running_time (&ostream->segment,
                   GST_FORMAT_TIME, ostream->segment.position);
 
               position_running_time =
                   MAX (position_running_time, stop_running_time);
-              position_running_time -=
-                  gst_segment_to_running_time (&ostream->segment,
-                  GST_FORMAT_TIME, ostream->segment.start);
+
+              if (ostream->segment.rate > 0)
+                position_running_time -=
+                    gst_segment_to_running_time (&ostream->segment,
+                    GST_FORMAT_TIME, ostream->segment.start);
+              else
+                position_running_time -=
+                    gst_segment_to_running_time (&ostream->segment,
+                    GST_FORMAT_TIME, ostream->segment.stop);
+
               position_running_time = MAX (0, position_running_time);
 
               position = MAX (position, position_running_time);
@@ -497,9 +510,14 @@
           continue;
 
         if (ostream->segment.format == GST_FORMAT_TIME) {
-          start_running_time =
-              gst_segment_to_running_time (&ostream->segment,
-              GST_FORMAT_TIME, ostream->segment.start);
+          if (ostream->segment.rate > 0)
+            start_running_time =
+                gst_segment_to_running_time (&ostream->segment,
+                GST_FORMAT_TIME, ostream->segment.start);
+          else
+            start_running_time =
+                gst_segment_to_running_time (&ostream->segment,
+                GST_FORMAT_TIME, ostream->segment.stop);
 
           new_group_start_time = MAX (new_group_start_time, start_running_time);
         }
diff --git a/gst/playback/gsturidecodebin.c b/gst/playback/gsturidecodebin.c
index 0d06776..d5c0307 100644
--- a/gst/playback/gsturidecodebin.c
+++ b/gst/playback/gsturidecodebin.c
@@ -41,9 +41,7 @@
 #include "gstplay-enum.h"
 #include "gstrawcaps.h"
 #include "gstplayback.h"
-
-/* From gstdecodebin2.c */
-gint _decode_bin_compare_factories_func (gconstpointer p1, gconstpointer p2);
+#include "gstplaybackutils.h"
 
 #define GST_TYPE_URI_DECODE_BIN \
   (gst_uri_decode_bin_get_type())
@@ -321,7 +319,7 @@
         gst_element_factory_list_get_elements
         (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL);
     dec->factories =
-        g_list_sort (dec->factories, _decode_bin_compare_factories_func);
+        g_list_sort (dec->factories, gst_playback_utils_compare_factories_func);
     dec->factories_cookie = cookie;
   }
 }
@@ -742,6 +740,8 @@
   dec->ring_buffer_max_size = DEFAULT_RING_BUFFER_MAX_SIZE;
 
   GST_OBJECT_FLAG_SET (dec, GST_ELEMENT_FLAG_SOURCE);
+  gst_bin_set_suppressed_flags (GST_BIN (dec),
+      GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK);
 }
 
 static void
@@ -1682,9 +1682,6 @@
     bin->pending_decodebins = NULL;
 
   }
-
-  /* Don't loose the SOURCE flag */
-  GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_SOURCE);
 }
 
 static void
@@ -2062,8 +2059,6 @@
     GST_ELEMENT_ERROR (decoder, CORE, NEGOTIATION,
         (NULL), ("Can't link source to typefind element"));
     gst_bin_remove (GST_BIN_CAST (decoder), typefind);
-    /* Don't loose the SOURCE flag */
-    GST_OBJECT_FLAG_SET (decoder, GST_ELEMENT_FLAG_SOURCE);
     do_async_done (decoder);
     return FALSE;
   }
@@ -2112,8 +2107,6 @@
     g_hash_table_destroy (bin->streams);
     bin->streams = NULL;
   }
-  /* Don't loose the SOURCE flag */
-  GST_OBJECT_FLAG_SET (bin, GST_ELEMENT_FLAG_SOURCE);
 }
 
 /* is called when a dynamic source element created a new pad. */
diff --git a/gst/playback/gsturisourcebin.c b/gst/playback/gsturisourcebin.c
index b97d425..7720a4c 100644
--- a/gst/playback/gsturisourcebin.c
+++ b/gst/playback/gsturisourcebin.c
@@ -50,9 +50,7 @@
 #include "gstplay-enum.h"
 #include "gstrawcaps.h"
 #include "gstplayback.h"
-
-/* From gstdecodebin2.c */
-gint _decode_bin_compare_factories_func (gconstpointer p1, gconstpointer p2);
+#include "gstplaybackutils.h"
 
 #define GST_TYPE_URI_DECODE_BIN \
   (gst_uri_source_bin_get_type())
@@ -355,7 +353,7 @@
         gst_element_factory_list_get_elements
         (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL);
     dec->factories =
-        g_list_sort (dec->factories, _decode_bin_compare_factories_func);
+        g_list_sort (dec->factories, gst_playback_utils_compare_factories_func);
     dec->factories_cookie = cookie;
   }
 }
@@ -743,6 +741,8 @@
   urisrc->last_buffering_pct = -1;
 
   GST_OBJECT_FLAG_SET (urisrc, GST_ELEMENT_FLAG_SOURCE);
+  gst_bin_set_suppressed_flags (GST_BIN (urisrc),
+      GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK);
 }
 
 static void
@@ -1990,8 +1990,6 @@
     GST_ELEMENT_ERROR (urisrc, CORE, NEGOTIATION,
         (NULL), ("Can't link source to typefind element"));
     gst_bin_remove (GST_BIN_CAST (urisrc), typefind);
-    /* Don't lose the SOURCE flag */
-    GST_OBJECT_FLAG_SET (urisrc, GST_ELEMENT_FLAG_SOURCE);
     do_async_done (urisrc);
     return FALSE;
   }
@@ -2053,8 +2051,6 @@
     gst_bin_remove (GST_BIN_CAST (urisrc), urisrc->demuxer);
     urisrc->demuxer = NULL;
   }
-  /* Don't lose the SOURCE flag */
-  GST_OBJECT_FLAG_SET (urisrc, GST_ELEMENT_FLAG_SOURCE);
 }
 
 /* is called when a dynamic source element created a new pad. */
diff --git a/gst/subparse/Makefile.in b/gst/subparse/Makefile.in
index 93a0824..130d5d7 100644
--- a/gst/subparse/Makefile.in
+++ b/gst/subparse/Makefile.in
@@ -453,6 +453,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/tcp/Makefile.in b/gst/tcp/Makefile.in
index c289fad..c470f1f 100644
--- a/gst/tcp/Makefile.in
+++ b/gst/tcp/Makefile.in
@@ -461,6 +461,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/typefind/Makefile.in b/gst/typefind/Makefile.in
index 6df94da..3a8b0cb 100644
--- a/gst/typefind/Makefile.in
+++ b/gst/typefind/Makefile.in
@@ -449,6 +449,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/videoconvert/Makefile.in b/gst/videoconvert/Makefile.in
index f29c08c..8ec0701 100644
--- a/gst/videoconvert/Makefile.in
+++ b/gst/videoconvert/Makefile.in
@@ -453,6 +453,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/videorate/Makefile.in b/gst/videorate/Makefile.in
index d794201..ca27914 100644
--- a/gst/videorate/Makefile.in
+++ b/gst/videorate/Makefile.in
@@ -448,6 +448,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/videoscale/Makefile.in b/gst/videoscale/Makefile.in
index 5c1bd11..6887500 100644
--- a/gst/videoscale/Makefile.in
+++ b/gst/videoscale/Makefile.in
@@ -449,6 +449,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/videotestsrc/Makefile.in b/gst/videotestsrc/Makefile.in
index 5b043ce..14403bf 100644
--- a/gst/videotestsrc/Makefile.in
+++ b/gst/videotestsrc/Makefile.in
@@ -490,6 +490,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/gst/volume/Makefile.in b/gst/volume/Makefile.in
index 5c6fe65..ce39f4d 100644
--- a/gst/volume/Makefile.in
+++ b/gst/volume/Makefile.in
@@ -475,6 +475,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/m4/Makefile.in b/m4/Makefile.in
index e742927..456736e 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -362,6 +362,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index bf262fc..a67536e 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -428,6 +428,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/po/af.gmo b/po/af.gmo
index 9b933ad..bec559f 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 801b0ba..25a2aaa 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-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/az.gmo b/po/az.gmo
index e1f8f9d..d170cc4 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index e1add8c..0fbc991 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-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/bg.gmo b/po/bg.gmo
index 660d9ce..fa5f76c 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 2add761..afeba45 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/ca.gmo b/po/ca.gmo
index e06c664..9fbc299 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 008bfab..2aeb57a 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/cs.gmo b/po/cs.gmo
index af8e3d3..917e03a 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 9f210c6..2d9ff72 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-03 15:35+0100\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
diff --git a/po/da.gmo b/po/da.gmo
index 3fe1651..0c034fc 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 2792a83..85f4451 100644
--- a/po/da.po
+++ b/po/da.po
@@ -33,7 +33,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-27 16:38+0100\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index cba0d88..f2ba9c4 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index be8138c..c992920 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,24 +1,25 @@
-# German messages for gst-plugins-base 1.4.0
+# German messages for gst-plugins-base 1.7.90
 # Copyright © 2006 Karl Eichwalder
 # This file is distributed under the same license as the gst-plugins-base package.
 # Karl Eichwalder <ke@suse.de>, 2006.
 # Mario Blättermann <mariobl@gnome.org>, 2010.
-# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2010, 2011, 2012, 2013.
+# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2010, 2011, 2012, 2013, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.7.2\n"
+"Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
-"PO-Revision-Date: 2016-02-22 23:44+0100\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
+"PO-Revision-Date: 2016-09-28 21:08+0200\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.7\n"
+"X-Generator: Poedit 1.8.9\n"
 
 msgid "Could not open device for playback in mono mode."
 msgstr "Gerät konnte nicht zur Wiedergabe in Mono geöffnet werden."
@@ -585,13 +586,13 @@
 msgstr "Beenden"
 
 msgid "> or n"
-msgstr ""
+msgstr "> oder n"
 
 msgid "play next"
 msgstr "Nächsten wiedergeben"
 
 msgid "< or b"
-msgstr ""
+msgstr "< oder b"
 
 msgid "play previous"
 msgstr "Vorherigen wiedergeben"
diff --git a/po/el.gmo b/po/el.gmo
index 384f096..8173292 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 76aa0c7..b34ec13 100644
--- a/po/el.po
+++ b/po/el.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2012-05-05 19:13+0100\n"
 "Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index ca44cd5..8475bd7 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 ce161d4..fa6c580 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-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/eo.gmo b/po/eo.gmo
index e4fb932..314e141 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index ea7781f..7fc6425 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2011-06-04 21:11+0100\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index 5924591..418aa25 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index d9c6a66..3f21cb7 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2011-10-02 15:46+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.gmo b/po/eu.gmo
index 946e7f2..a3c1d91 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 1f1bce7..c58786d 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2010-03-25 12:32+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.gmo b/po/fi.gmo
index e3ef7c0..feab351 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index b1a889e..99db27c 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2010-12-31 23:21+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index 050fff3..eabc8f2 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 8f480ab..ffd37dd 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-04 13:08+0100\n"
 "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
diff --git a/po/gl.gmo b/po/gl.gmo
index d163f88..5a5b274 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index ef4f29b..a757242 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2012-12-15 03:40+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gst-plugins-base-1.0.pot b/po/gst-plugins-base-1.0.pot
index b4c46df..daf9488 100644
--- a/po/gst-plugins-base-1.0.pot
+++ b/po/gst-plugins-base-1.0.pot
@@ -5,9 +5,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.9.2\n"
+"Project-Id-Version: gst-plugins-base 1.9.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
@@ -98,11 +98,11 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#: gst/playback/gstdecodebin2.c:1893 gst/playback/gstparsebin.c:1572
+#: gst/playback/gstdecodebin2.c:1865 gst/playback/gstparsebin.c:1572
 msgid "Could not determine type of stream"
 msgstr ""
 
-#: gst/playback/gstdecodebin2.c:2869 gst/playback/gstparsebin.c:2405
+#: gst/playback/gstdecodebin2.c:2841 gst/playback/gstparsebin.c:2405
 msgid "This appears to be a text file"
 msgstr ""
 
@@ -110,11 +110,11 @@
 msgid "Could not create \"uridecodebin\" element."
 msgstr ""
 
-#: gst/playback/gstplaybin3.c:5317
+#: gst/playback/gstplaybin3.c:4643
 msgid "Could not create \"decodebin3\" element."
 msgstr ""
 
-#: gst/playback/gstplaybin3.c:5563
+#: gst/playback/gstplaybin3.c:4889
 msgid "Could not create \"urisourcebin\" element."
 msgstr ""
 
@@ -199,7 +199,7 @@
 msgid "No URI handler implemented for \"%s\"."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:2299 gst/playback/gsturisourcebin.c:2204
+#: gst/playback/gsturidecodebin.c:2292 gst/playback/gsturisourcebin.c:2200
 msgid "Source element is invalid."
 msgstr ""
 
@@ -677,7 +677,7 @@
 msgid "Initial key in which the sound starts"
 msgstr ""
 
-#: tools/gst-device-monitor.c:156 tools/gst-play.c:1163
+#: tools/gst-device-monitor.c:156 tools/gst-play.c:1166
 msgid "Print version information and exit"
 msgstr ""
 
@@ -701,7 +701,7 @@
 msgstr ""
 
 #: tools/gst-play.c:365 tools/gst-play.c:411 tools/gst-play.c:763
-#: tools/gst-play.c:1067
+#: tools/gst-play.c:1070
 msgid "Reached end of play list."
 msgstr ""
 
@@ -729,143 +729,143 @@
 msgid "Could not change playback rate to %.2f"
 msgstr ""
 
-#: tools/gst-play.c:1007
+#: tools/gst-play.c:1010
 msgid "space"
 msgstr ""
 
-#: tools/gst-play.c:1007
+#: tools/gst-play.c:1010
 msgid "pause/unpause"
 msgstr ""
 
-#: tools/gst-play.c:1008
+#: tools/gst-play.c:1011
 msgid "q or ESC"
 msgstr ""
 
-#: tools/gst-play.c:1008
+#: tools/gst-play.c:1011
 msgid "quit"
 msgstr ""
 
-#: tools/gst-play.c:1009
+#: tools/gst-play.c:1012
 msgid "> or n"
 msgstr ""
 
-#: tools/gst-play.c:1009
+#: tools/gst-play.c:1012
 msgid "play next"
 msgstr ""
 
-#: tools/gst-play.c:1010
+#: tools/gst-play.c:1013
 msgid "< or b"
 msgstr ""
 
-#: tools/gst-play.c:1010
+#: tools/gst-play.c:1013
 msgid "play previous"
 msgstr ""
 
-#: tools/gst-play.c:1011
+#: tools/gst-play.c:1014
 msgid "seek forward"
 msgstr ""
 
-#: tools/gst-play.c:1012
+#: tools/gst-play.c:1015
 msgid "seek backward"
 msgstr ""
 
-#: tools/gst-play.c:1013
+#: tools/gst-play.c:1016
 msgid "volume up"
 msgstr ""
 
-#: tools/gst-play.c:1014
+#: tools/gst-play.c:1017
 msgid "volume down"
 msgstr ""
 
-#: tools/gst-play.c:1015
+#: tools/gst-play.c:1018
 msgid "increase playback rate"
 msgstr ""
 
-#: tools/gst-play.c:1016
+#: tools/gst-play.c:1019
 msgid "decrease playback rate"
 msgstr ""
 
-#: tools/gst-play.c:1017
+#: tools/gst-play.c:1020
 msgid "change playback direction"
 msgstr ""
 
-#: tools/gst-play.c:1018
+#: tools/gst-play.c:1021
 msgid "enable/disable trick modes"
 msgstr ""
 
-#: tools/gst-play.c:1019
+#: tools/gst-play.c:1022
 msgid "change audio track"
 msgstr ""
 
-#: tools/gst-play.c:1020
+#: tools/gst-play.c:1023
 msgid "change video track"
 msgstr ""
 
-#: tools/gst-play.c:1021
+#: tools/gst-play.c:1024
 msgid "change subtitle track"
 msgstr ""
 
-#: tools/gst-play.c:1022
+#: tools/gst-play.c:1025
 msgid "seek to beginning"
 msgstr ""
 
-#: tools/gst-play.c:1023
+#: tools/gst-play.c:1026
 msgid "show keyboard shortcuts"
 msgstr ""
 
-#: tools/gst-play.c:1026
+#: tools/gst-play.c:1029
 msgid "Interactive mode - keyboard controls:"
 msgstr ""
 
-#: tools/gst-play.c:1158
+#: tools/gst-play.c:1161
 msgid "Output status information and property notifications"
 msgstr ""
 
-#: tools/gst-play.c:1160
+#: tools/gst-play.c:1163
 msgid "Control playback behaviour setting playbin 'flags' property"
 msgstr ""
 
-#: tools/gst-play.c:1165
+#: tools/gst-play.c:1168
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
-#: tools/gst-play.c:1167
+#: tools/gst-play.c:1170
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr ""
 
-#: tools/gst-play.c:1169
+#: tools/gst-play.c:1172
 msgid "Enable gapless playback"
 msgstr ""
 
-#: tools/gst-play.c:1171
+#: tools/gst-play.c:1174
 msgid "Shuffle playlist"
 msgstr ""
 
-#: tools/gst-play.c:1174
+#: tools/gst-play.c:1177
 msgid "Disable interactive control via the keyboard"
 msgstr ""
 
-#: tools/gst-play.c:1176
+#: tools/gst-play.c:1179
 msgid "Volume"
 msgstr ""
 
-#: tools/gst-play.c:1178
+#: tools/gst-play.c:1181
 msgid "Playlist file containing input media files"
 msgstr ""
 
-#: tools/gst-play.c:1180
+#: tools/gst-play.c:1183
 msgid "Do not print any output (apart from errors)"
 msgstr ""
 
-#: tools/gst-play.c:1251
+#: tools/gst-play.c:1254
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
 
-#: tools/gst-play.c:1255
+#: tools/gst-play.c:1258
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
-#: tools/gst-play.c:1295
+#: tools/gst-play.c:1298
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index a75f20a..b056894 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 293a260..f2e39ae 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/hu.gmo b/po/hu.gmo
index df76ca8..27db305 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index ad56618..bcfb214 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-14 19:14+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.gmo b/po/id.gmo
index 853de70..dbe5e2c 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 433331a..97dd1ce 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.4.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2014-07-30 09:19+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
diff --git a/po/it.gmo b/po/it.gmo
index d273a5f..f03b5e9 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 0ac18fb..b4016b3 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2010-04-28 14:27+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index 69c5e70..1e4499c 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 0103bc0..9bc7afc 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2010-10-25 10:27+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
diff --git a/po/lt.gmo b/po/lt.gmo
index 0889be2..1e2e745 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 7992751..b823e7f 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-0.10.15.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2008-03-07 23:43+0200\n"
 "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/lv.gmo b/po/lv.gmo
index 1c5788a..59e8353 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 1438c10..e925ed6 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2014-04-20 16:15+0300\n"
 "Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
 "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index ade0eb5..0fffd24 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 9660138..032f151 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-08-05 23:45+0200\n"
 "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index 518ba36..04e52c2 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index b5c8ad1..b7f4ed2 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-02-20 16:39+0100\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
diff --git a/po/or.gmo b/po/or.gmo
index 3d55873..a45aa9a 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index f9bad45..5a5510f 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-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/pl.gmo b/po/pl.gmo
index 99db862..5d58c98 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index e0115c5..5e8e273 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-02 22:08+0100\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 871909c..f1f4304 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 9b7e9b4..321b9c5 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-05-06 16:47-0300\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
diff --git a/po/ro.gmo b/po/ro.gmo
index 70d198a..ec54480 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 03f84a9..d911230 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2010-08-16 01:21+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index 2832df2..8250574 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index b842706..cf3884c 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-05 08:42+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index 547ebf7..75f9350 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 8f1d9ad..5317a69 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-05-20 12:24+0100\n"
 "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
diff --git a/po/sl.gmo b/po/sl.gmo
index 634e8c3..96a200c 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 618eb5b..ba445b0 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2013-01-05 10:10+0100\n"
 "Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.gmo b/po/sq.gmo
index 1fb46ec..047d8b4 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index b8ed73f..cd183e0 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-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/sr.gmo b/po/sr.gmo
index 2395a76..c79a890 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index c36b346..8dc61b4 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-05 09:48+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 6ea4537..4db36b8 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index bdee53c..b3e7716 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-02 22:20+0100\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index d6df2e4..faf642f 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 5c7cf38..0b22684 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+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"
diff --git a/po/uk.gmo b/po/uk.gmo
index 1c4811f..7c7c387 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 57656f0..1381539 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-02 22:05+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index 60b6887..65b6a38 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 982afa6..eb5a0d1 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-03 07:49+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 140d1b5..054d9d4 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 2d82144..8ea9070 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.7.90\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"POT-Creation-Date: 2016-09-30 12:11+0300\n"
 "PO-Revision-Date: 2016-03-03 12:15+0800\n"
 "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/sys/Makefile.in b/sys/Makefile.in
index c6fe4e6..73962f0 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -427,6 +427,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
index a46e765..373a975 100644
--- a/sys/ximage/Makefile.in
+++ b/sys/ximage/Makefile.in
@@ -448,6 +448,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/sys/xvimage/Makefile.in b/sys/xvimage/Makefile.in
index ba10389..6517d39 100644
--- a/sys/xvimage/Makefile.in
+++ b/sys/xvimage/Makefile.in
@@ -450,6 +450,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 192354b..3b50ba9 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -421,6 +421,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 9b9dc11..a70b3cf 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -122,7 +122,9 @@
 endif
 
 if USE_PLUGIN_VIDEOSCALE
-check_videoscale = elements/videoscale
+check_videoscale = elements/videoscale elements/videoscale-1 \
+        elements/videoscale-2 elements/videoscale-3 elements/videoscale-4 \
+        elements/videoscale-5 elements/videoscale-6
 else
 check_videoscale =
 endif
@@ -589,6 +591,25 @@
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
 	$(GST_BASE_LIBS) $(LDADD)
 
+elements_videoscale_1_SOURCES = elements/videoscale.c
+elements_videoscale_1_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=1
+elements_videoscale_1_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_2_SOURCES = elements/videoscale.c
+elements_videoscale_2_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=2
+elements_videoscale_2_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_3_SOURCES = elements/videoscale.c
+elements_videoscale_3_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=3
+elements_videoscale_3_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_4_SOURCES = elements/videoscale.c
+elements_videoscale_4_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=4
+elements_videoscale_4_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_5_SOURCES = elements/videoscale.c
+elements_videoscale_5_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=5
+elements_videoscale_5_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_6_SOURCES = elements/videoscale.c
+elements_videoscale_6_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=6
+elements_videoscale_6_LDADD = $(elements_videoscale_LDADD)
+
 gst_typefindfunctions_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 gst_typefindfunctions_LDADD = $(GST_BASE_LIBS) $(LDADD)
 
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index ee4c002..e9cfddd 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -193,7 +193,13 @@
 @USE_PLUGIN_VIDEORATE_TRUE@am__EXEEXT_18 =  \
 @USE_PLUGIN_VIDEORATE_TRUE@	elements/videorate$(EXEEXT)
 @USE_PLUGIN_VIDEOSCALE_TRUE@am__EXEEXT_19 =  \
-@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale$(EXEEXT)
+@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale$(EXEEXT) \
+@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale-1$(EXEEXT) \
+@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale-2$(EXEEXT) \
+@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale-3$(EXEEXT) \
+@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale-4$(EXEEXT) \
+@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale-5$(EXEEXT) \
+@USE_PLUGIN_VIDEOSCALE_TRUE@	elements/videoscale-6$(EXEEXT)
 @USE_PLUGIN_VIDEOTESTSRC_TRUE@am__EXEEXT_20 =  \
 @USE_PLUGIN_VIDEOTESTSRC_TRUE@	elements/videotestsrc$(EXEEXT)
 @USE_PLUGIN_VOLUME_TRUE@am__EXEEXT_21 = elements/volume$(EXEEXT)
@@ -387,6 +393,56 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_videoscale_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+am_elements_videoscale_1_OBJECTS =  \
+	elements/elements_videoscale_1-videoscale.$(OBJEXT)
+elements_videoscale_1_OBJECTS = $(am_elements_videoscale_1_OBJECTS)
+am__DEPENDENCIES_3 = $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_videoscale_1_DEPENDENCIES = $(am__DEPENDENCIES_3)
+elements_videoscale_1_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_videoscale_1_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_elements_videoscale_2_OBJECTS =  \
+	elements/elements_videoscale_2-videoscale.$(OBJEXT)
+elements_videoscale_2_OBJECTS = $(am_elements_videoscale_2_OBJECTS)
+elements_videoscale_2_DEPENDENCIES = $(am__DEPENDENCIES_3)
+elements_videoscale_2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_videoscale_2_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_elements_videoscale_3_OBJECTS =  \
+	elements/elements_videoscale_3-videoscale.$(OBJEXT)
+elements_videoscale_3_OBJECTS = $(am_elements_videoscale_3_OBJECTS)
+elements_videoscale_3_DEPENDENCIES = $(am__DEPENDENCIES_3)
+elements_videoscale_3_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_videoscale_3_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_elements_videoscale_4_OBJECTS =  \
+	elements/elements_videoscale_4-videoscale.$(OBJEXT)
+elements_videoscale_4_OBJECTS = $(am_elements_videoscale_4_OBJECTS)
+elements_videoscale_4_DEPENDENCIES = $(am__DEPENDENCIES_3)
+elements_videoscale_4_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_videoscale_4_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_elements_videoscale_5_OBJECTS =  \
+	elements/elements_videoscale_5-videoscale.$(OBJEXT)
+elements_videoscale_5_OBJECTS = $(am_elements_videoscale_5_OBJECTS)
+elements_videoscale_5_DEPENDENCIES = $(am__DEPENDENCIES_3)
+elements_videoscale_5_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_videoscale_5_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_elements_videoscale_6_OBJECTS =  \
+	elements/elements_videoscale_6-videoscale.$(OBJEXT)
+elements_videoscale_6_OBJECTS = $(am_elements_videoscale_6_OBJECTS)
+elements_videoscale_6_DEPENDENCIES = $(am__DEPENDENCIES_3)
+elements_videoscale_6_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(elements_videoscale_6_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 elements_videotestsrc_SOURCES = elements/videotestsrc.c
 elements_videotestsrc_OBJECTS = elements/videotestsrc.$(OBJEXT)
 elements_videotestsrc_LDADD = $(LDADD)
@@ -826,7 +882,12 @@
 	elements/playsink.c elements/streamsynchronizer.c \
 	elements/subparse.c elements/textoverlay.c \
 	elements/videoconvert.c elements/videorate.c \
-	elements/videoscale.c elements/videotestsrc.c \
+	elements/videoscale.c $(elements_videoscale_1_SOURCES) \
+	$(elements_videoscale_2_SOURCES) \
+	$(elements_videoscale_3_SOURCES) \
+	$(elements_videoscale_4_SOURCES) \
+	$(elements_videoscale_5_SOURCES) \
+	$(elements_videoscale_6_SOURCES) elements/videotestsrc.c \
 	elements/volume.c elements/vorbisdec.c elements/vorbistag.c \
 	generic/clock-selection.c generic/states.c \
 	gst/typefindfunctions.c libs/allocators.c libs/audio.c \
@@ -855,7 +916,12 @@
 	elements/playsink.c elements/streamsynchronizer.c \
 	elements/subparse.c elements/textoverlay.c \
 	elements/videoconvert.c elements/videorate.c \
-	elements/videoscale.c elements/videotestsrc.c \
+	elements/videoscale.c $(elements_videoscale_1_SOURCES) \
+	$(elements_videoscale_2_SOURCES) \
+	$(elements_videoscale_3_SOURCES) \
+	$(elements_videoscale_4_SOURCES) \
+	$(elements_videoscale_5_SOURCES) \
+	$(elements_videoscale_6_SOURCES) elements/videotestsrc.c \
 	elements/volume.c elements/vorbisdec.c elements/vorbistag.c \
 	generic/clock-selection.c generic/states.c \
 	gst/typefindfunctions.c libs/allocators.c libs/audio.c \
@@ -1314,6 +1380,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
@@ -1458,7 +1527,10 @@
 @USE_PLUGIN_VIDEORATE_FALSE@check_videorate = 
 @USE_PLUGIN_VIDEORATE_TRUE@check_videorate = elements/videorate
 @USE_PLUGIN_VIDEOSCALE_FALSE@check_videoscale = 
-@USE_PLUGIN_VIDEOSCALE_TRUE@check_videoscale = elements/videoscale
+@USE_PLUGIN_VIDEOSCALE_TRUE@check_videoscale = elements/videoscale elements/videoscale-1 \
+@USE_PLUGIN_VIDEOSCALE_TRUE@        elements/videoscale-2 elements/videoscale-3 elements/videoscale-4 \
+@USE_PLUGIN_VIDEOSCALE_TRUE@        elements/videoscale-5 elements/videoscale-6
+
 @USE_PLUGIN_VIDEOTESTSRC_FALSE@check_videotestsrc = 
 @USE_PLUGIN_VIDEOTESTSRC_TRUE@check_videotestsrc = elements/videotestsrc
 @USE_PLUGIN_VOLUME_FALSE@check_volume = 
@@ -1823,6 +1895,24 @@
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
 	$(GST_BASE_LIBS) $(LDADD)
 
+elements_videoscale_1_SOURCES = elements/videoscale.c
+elements_videoscale_1_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=1
+elements_videoscale_1_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_2_SOURCES = elements/videoscale.c
+elements_videoscale_2_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=2
+elements_videoscale_2_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_3_SOURCES = elements/videoscale.c
+elements_videoscale_3_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=3
+elements_videoscale_3_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_4_SOURCES = elements/videoscale.c
+elements_videoscale_4_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=4
+elements_videoscale_4_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_5_SOURCES = elements/videoscale.c
+elements_videoscale_5_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=5
+elements_videoscale_5_LDADD = $(elements_videoscale_LDADD)
+elements_videoscale_6_SOURCES = elements/videoscale.c
+elements_videoscale_6_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=6
+elements_videoscale_6_LDADD = $(elements_videoscale_LDADD)
 gst_typefindfunctions_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 gst_typefindfunctions_LDADD = $(GST_BASE_LIBS) $(LDADD)
 libs_video_CFLAGS = \
@@ -2102,6 +2192,42 @@
 elements/videoscale$(EXEEXT): $(elements_videoscale_OBJECTS) $(elements_videoscale_DEPENDENCIES) $(EXTRA_elements_videoscale_DEPENDENCIES) elements/$(am__dirstamp)
 	@rm -f elements/videoscale$(EXEEXT)
 	$(AM_V_CCLD)$(elements_videoscale_LINK) $(elements_videoscale_OBJECTS) $(elements_videoscale_LDADD) $(LIBS)
+elements/elements_videoscale_1-videoscale.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/videoscale-1$(EXEEXT): $(elements_videoscale_1_OBJECTS) $(elements_videoscale_1_DEPENDENCIES) $(EXTRA_elements_videoscale_1_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/videoscale-1$(EXEEXT)
+	$(AM_V_CCLD)$(elements_videoscale_1_LINK) $(elements_videoscale_1_OBJECTS) $(elements_videoscale_1_LDADD) $(LIBS)
+elements/elements_videoscale_2-videoscale.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/videoscale-2$(EXEEXT): $(elements_videoscale_2_OBJECTS) $(elements_videoscale_2_DEPENDENCIES) $(EXTRA_elements_videoscale_2_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/videoscale-2$(EXEEXT)
+	$(AM_V_CCLD)$(elements_videoscale_2_LINK) $(elements_videoscale_2_OBJECTS) $(elements_videoscale_2_LDADD) $(LIBS)
+elements/elements_videoscale_3-videoscale.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/videoscale-3$(EXEEXT): $(elements_videoscale_3_OBJECTS) $(elements_videoscale_3_DEPENDENCIES) $(EXTRA_elements_videoscale_3_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/videoscale-3$(EXEEXT)
+	$(AM_V_CCLD)$(elements_videoscale_3_LINK) $(elements_videoscale_3_OBJECTS) $(elements_videoscale_3_LDADD) $(LIBS)
+elements/elements_videoscale_4-videoscale.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/videoscale-4$(EXEEXT): $(elements_videoscale_4_OBJECTS) $(elements_videoscale_4_DEPENDENCIES) $(EXTRA_elements_videoscale_4_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/videoscale-4$(EXEEXT)
+	$(AM_V_CCLD)$(elements_videoscale_4_LINK) $(elements_videoscale_4_OBJECTS) $(elements_videoscale_4_LDADD) $(LIBS)
+elements/elements_videoscale_5-videoscale.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/videoscale-5$(EXEEXT): $(elements_videoscale_5_OBJECTS) $(elements_videoscale_5_DEPENDENCIES) $(EXTRA_elements_videoscale_5_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/videoscale-5$(EXEEXT)
+	$(AM_V_CCLD)$(elements_videoscale_5_LINK) $(elements_videoscale_5_OBJECTS) $(elements_videoscale_5_LDADD) $(LIBS)
+elements/elements_videoscale_6-videoscale.$(OBJEXT):  \
+	elements/$(am__dirstamp) elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/videoscale-6$(EXEEXT): $(elements_videoscale_6_OBJECTS) $(elements_videoscale_6_DEPENDENCIES) $(EXTRA_elements_videoscale_6_DEPENDENCIES) elements/$(am__dirstamp)
+	@rm -f elements/videoscale-6$(EXEEXT)
+	$(AM_V_CCLD)$(elements_videoscale_6_LINK) $(elements_videoscale_6_OBJECTS) $(elements_videoscale_6_LDADD) $(LIBS)
 elements/videotestsrc.$(OBJEXT): elements/$(am__dirstamp) \
 	elements/$(DEPDIR)/$(am__dirstamp)
 
@@ -2450,6 +2576,12 @@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_textoverlay-textoverlay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoconvert-videoconvert.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoscale-videoscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoscale_1-videoscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoscale_2-videoscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoscale_3-videoscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoscale_4-videoscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoscale_5-videoscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videoscale_6-videoscale.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_volume-volume.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_vorbisdec-vorbisdec.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_vorbistag-vorbistag.Po@am__quote@
@@ -2752,6 +2884,90 @@
 @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_videoscale_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
 
+elements/elements_videoscale_1-videoscale.o: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_1_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_1-videoscale.o -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_1-videoscale.Tpo -c -o elements/elements_videoscale_1-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_1-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_1-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_1-videoscale.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_videoscale_1_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_1-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+
+elements/elements_videoscale_1-videoscale.obj: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_1_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_1-videoscale.obj -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_1-videoscale.Tpo -c -o elements/elements_videoscale_1-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_1-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_1-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_1-videoscale.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_videoscale_1_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_1-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+
+elements/elements_videoscale_2-videoscale.o: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_2_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_2-videoscale.o -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_2-videoscale.Tpo -c -o elements/elements_videoscale_2-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_2-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_2-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_2-videoscale.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_videoscale_2_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_2-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+
+elements/elements_videoscale_2-videoscale.obj: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_2_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_2-videoscale.obj -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_2-videoscale.Tpo -c -o elements/elements_videoscale_2-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_2-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_2-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_2-videoscale.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_videoscale_2_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_2-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+
+elements/elements_videoscale_3-videoscale.o: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_3_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_3-videoscale.o -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_3-videoscale.Tpo -c -o elements/elements_videoscale_3-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_3-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_3-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_3-videoscale.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_videoscale_3_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_3-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+
+elements/elements_videoscale_3-videoscale.obj: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_3_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_3-videoscale.obj -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_3-videoscale.Tpo -c -o elements/elements_videoscale_3-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_3-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_3-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_3-videoscale.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_videoscale_3_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_3-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+
+elements/elements_videoscale_4-videoscale.o: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_4_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_4-videoscale.o -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_4-videoscale.Tpo -c -o elements/elements_videoscale_4-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_4-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_4-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_4-videoscale.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_videoscale_4_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_4-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+
+elements/elements_videoscale_4-videoscale.obj: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_4_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_4-videoscale.obj -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_4-videoscale.Tpo -c -o elements/elements_videoscale_4-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_4-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_4-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_4-videoscale.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_videoscale_4_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_4-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+
+elements/elements_videoscale_5-videoscale.o: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_5_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_5-videoscale.o -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_5-videoscale.Tpo -c -o elements/elements_videoscale_5-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_5-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_5-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_5-videoscale.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_videoscale_5_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_5-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+
+elements/elements_videoscale_5-videoscale.obj: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_5_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_5-videoscale.obj -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_5-videoscale.Tpo -c -o elements/elements_videoscale_5-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_5-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_5-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_5-videoscale.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_videoscale_5_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_5-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+
+elements/elements_videoscale_6-videoscale.o: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_6_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_6-videoscale.o -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_6-videoscale.Tpo -c -o elements/elements_videoscale_6-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_6-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_6-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_6-videoscale.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_videoscale_6_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_6-videoscale.o `test -f 'elements/videoscale.c' || echo '$(srcdir)/'`elements/videoscale.c
+
+elements/elements_videoscale_6-videoscale.obj: elements/videoscale.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videoscale_6_CFLAGS) $(CFLAGS) -MT elements/elements_videoscale_6-videoscale.obj -MD -MP -MF elements/$(DEPDIR)/elements_videoscale_6-videoscale.Tpo -c -o elements/elements_videoscale_6-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_videoscale_6-videoscale.Tpo elements/$(DEPDIR)/elements_videoscale_6-videoscale.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='elements/videoscale.c' object='elements/elements_videoscale_6-videoscale.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_videoscale_6_CFLAGS) $(CFLAGS) -c -o elements/elements_videoscale_6-videoscale.obj `if test -f 'elements/videoscale.c'; then $(CYGPATH_W) 'elements/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/elements/videoscale.c'; fi`
+
 elements/elements_volume-volume.o: elements/volume.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_volume_CFLAGS) $(CFLAGS) -MT elements/elements_volume-volume.o -MD -MP -MF elements/$(DEPDIR)/elements_volume-volume.Tpo -c -o elements/elements_volume-volume.o `test -f 'elements/volume.c' || echo '$(srcdir)/'`elements/volume.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_volume-volume.Tpo elements/$(DEPDIR)/elements_volume-volume.Po
@@ -3954,6 +4170,48 @@
 	--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/videoscale-1.log: elements/videoscale-1$(EXEEXT)
+	@p='elements/videoscale-1$(EXEEXT)'; \
+	b='elements/videoscale-1'; \
+	$(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/videoscale-2.log: elements/videoscale-2$(EXEEXT)
+	@p='elements/videoscale-2$(EXEEXT)'; \
+	b='elements/videoscale-2'; \
+	$(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/videoscale-3.log: elements/videoscale-3$(EXEEXT)
+	@p='elements/videoscale-3$(EXEEXT)'; \
+	b='elements/videoscale-3'; \
+	$(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/videoscale-4.log: elements/videoscale-4$(EXEEXT)
+	@p='elements/videoscale-4$(EXEEXT)'; \
+	b='elements/videoscale-4'; \
+	$(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/videoscale-5.log: elements/videoscale-5$(EXEEXT)
+	@p='elements/videoscale-5$(EXEEXT)'; \
+	b='elements/videoscale-5'; \
+	$(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/videoscale-6.log: elements/videoscale-6$(EXEEXT)
+	@p='elements/videoscale-6$(EXEEXT)'; \
+	b='elements/videoscale-6'; \
+	$(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/videotestsrc.log: elements/videotestsrc$(EXEEXT)
 	@p='elements/videotestsrc$(EXEEXT)'; \
 	b='elements/videotestsrc'; \
diff --git a/tests/check/elements/adder.c b/tests/check/elements/adder.c
index 3308a8e..3a9e3b6 100644
--- a/tests/check/elements/adder.c
+++ b/tests/check/elements/adder.c
@@ -1198,6 +1198,7 @@
 
 GST_END_TEST;
 
+#if 0
 GST_START_TEST (test_flush_start_flush_stop)
 {
   GstPadTemplate *sink_template;
@@ -1255,7 +1256,7 @@
 }
 
 GST_END_TEST;
-
+#endif
 
 static Suite *
 adder_suite (void)
@@ -1276,7 +1277,12 @@
   tcase_add_test (tc_chain, test_duration_is_max);
   tcase_add_test (tc_chain, test_duration_unknown_overrides);
   tcase_add_test (tc_chain, test_loop);
+  /* This test is racy and occasionally fails in interesting ways
+   * https://bugzilla.gnome.org/show_bug.cgi?id=708891
+   * It's unlikely that it will ever be fixed for adder, works with audiomixer */
+#if 0
   tcase_add_test (tc_chain, test_flush_start_flush_stop);
+#endif
 
   /* Use a longer timeout */
 #ifdef HAVE_VALGRIND
diff --git a/tests/check/elements/videoscale.c b/tests/check/elements/videoscale.c
index 877df4f..c158061 100644
--- a/tests/check/elements/videoscale.c
+++ b/tests/check/elements/videoscale.c
@@ -29,6 +29,8 @@
 /* kids, don't do this at home, skipping checks is *BAD* */
 #define LINK_CHECK_FLAGS GST_PAD_LINK_CHECK_NOTHING
 
+#ifndef VSCALE_TEST_GROUP
+
 static guint
 get_num_formats (void)
 {
@@ -157,6 +159,8 @@
 
 GST_END_TEST;
 
+#endif /* !defined(VSCALE_TEST_GROUP) */
+
 static GstCaps **
 videoscale_get_allowed_caps_for_method (int method)
 {
@@ -307,6 +311,8 @@
   gst_object_unref (bus);
 }
 
+#ifndef VSCALE_TEST_GROUP
+
 static void
 on_sink_handoff_passthrough (GstElement * element, GstBuffer * buffer,
     GstPad * pad, gpointer user_data)
@@ -409,6 +415,7 @@
 }
 
 GST_END_TEST;
+#endif /* !defined(VSCALE_TEST_GROUP) */
 
 #define CREATE_TEST(name,method,src_width,src_height,dest_width,dest_height) \
 GST_START_TEST (name) \
@@ -434,6 +441,7 @@
 \
 GST_END_TEST;
 
+#if defined(VSCALE_TEST_GROUP) && VSCALE_TEST_GROUP == 1
 CREATE_TEST (test_downscale_640x480_320x240_method_0, 0, 640, 480, 320, 240);
 CREATE_TEST (test_downscale_640x480_320x240_method_1, 1, 640, 480, 320, 240);
 CREATE_TEST (test_downscale_640x480_320x240_method_2, 2, 640, 480, 320, 240);
@@ -442,6 +450,7 @@
 CREATE_TEST (test_upscale_320x240_640x480_method_1, 1, 320, 240, 640, 480);
 CREATE_TEST (test_upscale_320x240_640x480_method_2, 2, 320, 240, 640, 480);
 CREATE_TEST (test_upscale_320x240_640x480_method_3, 3, 320, 240, 640, 480);
+#elif defined(VSCALE_TEST_GROUP) && VSCALE_TEST_GROUP == 2
 CREATE_TEST (test_downscale_640x480_1x1_method_0, 0, 640, 480, 1, 1);
 CREATE_TEST (test_downscale_640x480_1x1_method_1, 1, 640, 480, 1, 1);
 CREATE_TEST (test_downscale_640x480_1x1_method_2, 2, 640, 480, 1, 1);
@@ -450,6 +459,7 @@
 CREATE_TEST (test_upscale_1x1_640x480_method_1, 1, 1, 1, 640, 480);
 CREATE_TEST (test_upscale_1x1_640x480_method_2, 2, 1, 1, 640, 480);
 CREATE_TEST (test_upscale_1x1_640x480_method_3, 3, 1, 1, 640, 480);
+#elif defined(VSCALE_TEST_GROUP) && VSCALE_TEST_GROUP == 3
 CREATE_TEST (test_downscale_641x481_111x30_method_0, 0, 641, 481, 111, 30);
 CREATE_TEST (test_downscale_641x481_111x30_method_1, 1, 641, 481, 111, 30);
 CREATE_TEST (test_downscale_641x481_111x30_method_2, 2, 641, 481, 111, 30);
@@ -458,6 +468,7 @@
 CREATE_TEST (test_upscale_111x30_641x481_method_1, 1, 111, 30, 641, 481);
 CREATE_TEST (test_upscale_111x30_641x481_method_2, 2, 111, 30, 641, 481);
 CREATE_TEST (test_upscale_111x30_641x481_method_3, 2, 111, 30, 641, 481);
+#elif defined(VSCALE_TEST_GROUP) && VSCALE_TEST_GROUP == 4
 CREATE_TEST (test_downscale_641x481_30x111_method_0, 0, 641, 481, 30, 111);
 CREATE_TEST (test_downscale_641x481_30x111_method_1, 1, 641, 481, 30, 111);
 CREATE_TEST (test_downscale_641x481_30x111_method_2, 2, 641, 481, 30, 111);
@@ -466,6 +477,7 @@
 CREATE_TEST (test_upscale_30x111_641x481_method_1, 1, 30, 111, 641, 481);
 CREATE_TEST (test_upscale_30x111_641x481_method_2, 2, 30, 111, 641, 481);
 CREATE_TEST (test_upscale_30x111_641x481_method_3, 3, 30, 111, 641, 481);
+#elif defined(VSCALE_TEST_GROUP) && VSCALE_TEST_GROUP == 5
 CREATE_TEST (test_downscale_640x480_320x1_method_0, 0, 640, 480, 320, 1);
 CREATE_TEST (test_downscale_640x480_320x1_method_1, 1, 640, 480, 320, 1);
 CREATE_TEST (test_downscale_640x480_320x1_method_2, 2, 640, 480, 320, 1);
@@ -474,6 +486,7 @@
 CREATE_TEST (test_upscale_320x1_640x480_method_1, 1, 320, 1, 640, 480);
 CREATE_TEST (test_upscale_320x1_640x480_method_2, 2, 320, 1, 640, 480);
 CREATE_TEST (test_upscale_320x1_640x480_method_3, 3, 320, 1, 640, 480);
+#elif defined(VSCALE_TEST_GROUP) && VSCALE_TEST_GROUP == 6
 CREATE_TEST (test_downscale_640x480_1x240_method_0, 0, 640, 480, 1, 240);
 CREATE_TEST (test_downscale_640x480_1x240_method_1, 1, 640, 480, 1, 240);
 CREATE_TEST (test_downscale_640x480_1x240_method_2, 2, 640, 480, 1, 240);
@@ -482,6 +495,9 @@
 CREATE_TEST (test_upscale_1x240_640x480_method_1, 1, 1, 240, 640, 480);
 CREATE_TEST (test_upscale_1x240_640x480_method_2, 2, 1, 240, 640, 480);
 CREATE_TEST (test_upscale_1x240_640x480_method_3, 3, 1, 240, 640, 480);
+#endif
+
+#ifndef VSCALE_TEST_GROUP
 
 typedef struct
 {
@@ -973,6 +989,8 @@
 
 GST_END_TEST;
 
+#endif /* !defined(VSCALE_TEST_GROUP) */
+
 static Suite *
 videoscale_suite (void)
 {
@@ -981,11 +999,18 @@
 
   suite_add_tcase (s, tc_chain);
   tcase_set_timeout (tc_chain, 180);
+#ifndef VSCALE_TEST_GROUP
   tcase_add_test (tc_chain, test_template_formats);
   tcase_add_test (tc_chain, test_passthrough_method_0);
   tcase_add_test (tc_chain, test_passthrough_method_1);
   tcase_add_test (tc_chain, test_passthrough_method_2);
   tcase_add_test (tc_chain, test_passthrough_method_3);
+  tcase_add_test (tc_chain, test_negotiation);
+#if 0
+  tcase_add_test (tc_chain, test_reverse_negotiation);
+#endif
+  tcase_add_test (tc_chain, test_basetransform_negotiation);
+#elif VSCALE_TEST_GROUP == 1
   tcase_add_test (tc_chain, test_downscale_640x480_320x240_method_0);
   tcase_add_test (tc_chain, test_downscale_640x480_320x240_method_1);
   tcase_add_test (tc_chain, test_downscale_640x480_320x240_method_2);
@@ -994,6 +1019,7 @@
   tcase_add_test (tc_chain, test_upscale_320x240_640x480_method_1);
   tcase_add_test (tc_chain, test_upscale_320x240_640x480_method_2);
   tcase_add_test (tc_chain, test_upscale_320x240_640x480_method_3);
+#elif VSCALE_TEST_GROUP == 2
   tcase_add_test (tc_chain, test_downscale_640x480_1x1_method_0);
   tcase_add_test (tc_chain, test_downscale_640x480_1x1_method_1);
   tcase_add_test (tc_chain, test_downscale_640x480_1x1_method_2);
@@ -1002,6 +1028,7 @@
   tcase_add_test (tc_chain, test_upscale_1x1_640x480_method_1);
   tcase_add_test (tc_chain, test_upscale_1x1_640x480_method_2);
   tcase_add_test (tc_chain, test_upscale_1x1_640x480_method_3);
+#elif VSCALE_TEST_GROUP == 3
   tcase_add_test (tc_chain, test_downscale_641x481_111x30_method_0);
   tcase_add_test (tc_chain, test_downscale_641x481_111x30_method_1);
   tcase_add_test (tc_chain, test_downscale_641x481_111x30_method_2);
@@ -1010,6 +1037,7 @@
   tcase_add_test (tc_chain, test_upscale_111x30_641x481_method_1);
   tcase_add_test (tc_chain, test_upscale_111x30_641x481_method_2);
   tcase_add_test (tc_chain, test_upscale_111x30_641x481_method_3);
+#elif VSCALE_TEST_GROUP == 4
   tcase_add_test (tc_chain, test_downscale_641x481_30x111_method_0);
   tcase_add_test (tc_chain, test_downscale_641x481_30x111_method_1);
   tcase_add_test (tc_chain, test_downscale_641x481_30x111_method_2);
@@ -1018,6 +1046,7 @@
   tcase_add_test (tc_chain, test_upscale_30x111_641x481_method_1);
   tcase_add_test (tc_chain, test_upscale_30x111_641x481_method_2);
   tcase_add_test (tc_chain, test_upscale_30x111_641x481_method_3);
+#elif VSCALE_TEST_GROUP == 5
   tcase_add_test (tc_chain, test_downscale_640x480_320x1_method_0);
   tcase_add_test (tc_chain, test_downscale_640x480_320x1_method_1);
   tcase_add_test (tc_chain, test_downscale_640x480_320x1_method_2);
@@ -1026,6 +1055,7 @@
   tcase_add_test (tc_chain, test_upscale_320x1_640x480_method_1);
   tcase_add_test (tc_chain, test_upscale_320x1_640x480_method_2);
   tcase_skip_broken_test (tc_chain, test_upscale_320x1_640x480_method_3);
+#elif VSCALE_TEST_GROUP == 6
   tcase_add_test (tc_chain, test_downscale_640x480_1x240_method_0);
   tcase_add_test (tc_chain, test_downscale_640x480_1x240_method_1);
   tcase_add_test (tc_chain, test_downscale_640x480_1x240_method_2);
@@ -1034,11 +1064,7 @@
   tcase_add_test (tc_chain, test_upscale_1x240_640x480_method_1);
   tcase_add_test (tc_chain, test_upscale_1x240_640x480_method_2);
   tcase_add_test (tc_chain, test_upscale_1x240_640x480_method_3);
-  tcase_add_test (tc_chain, test_negotiation);
-#if 0
-  tcase_add_test (tc_chain, test_reverse_negotiation);
 #endif
-  tcase_add_test (tc_chain, test_basetransform_negotiation);
 
   return s;
 }
diff --git a/tests/check/libs/video.c b/tests/check/libs/video.c
index 1b0c7c4..d37c0b5 100644
--- a/tests/check/libs/video.c
+++ b/tests/check/libs/video.c
@@ -873,7 +873,7 @@
         _16_235, SMPTE240M, SMPTE240M, SMPTE240M),
     MAKE_COLORIMETRY_TEST ("sRGB", "sRGB", "sRGB",
         _0_255, RGB, SRGB, BT709),
-    MAKE_COLORIMETRY_TEST ("bt2020" , "bt2020", "bt2020",
+    MAKE_COLORIMETRY_TEST ("bt2020", "bt2020", "bt2020",
         _16_235, BT2020, BT2020_12, BT2020),
     MAKE_COLORIMETRY_TEST ("1:4:0:0", "1:4:0:0", NULL,
         _0_255, BT601, UNKNOWN, UNKNOWN),
diff --git a/tests/check/libs/videotimecode.c b/tests/check/libs/videotimecode.c
index c403db8..23d6b50 100644
--- a/tests/check/libs/videotimecode.c
+++ b/tests/check/libs/videotimecode.c
@@ -332,7 +332,7 @@
   fail_unless (g_date_time_get_day_of_month (dt2) == 29);
   fail_unless (g_date_time_get_hour (dt2) == 11);
   fail_unless (g_date_time_get_minute (dt2) == 36);
-  fail_unless (g_date_time_get_seconds (dt2) == 53.04);
+  fail_unless_equals_float (g_date_time_get_seconds (dt2), 53.04);
 
   gst_video_time_code_free (tc1);
   g_date_time_unref (dt2);
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 9ef3c49..58be066 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -427,6 +427,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/app/Makefile.in b/tests/examples/app/Makefile.in
index 0ea0468..1b2413a 100644
--- a/tests/examples/app/Makefile.in
+++ b/tests/examples/app/Makefile.in
@@ -470,6 +470,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/audio/Makefile.in b/tests/examples/audio/Makefile.in
index 3e9831b..8f24af6 100644
--- a/tests/examples/audio/Makefile.in
+++ b/tests/examples/audio/Makefile.in
@@ -427,6 +427,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/decodebin_next/Makefile.in b/tests/examples/decodebin_next/Makefile.in
index d3abe37..bae3fc7 100644
--- a/tests/examples/decodebin_next/Makefile.in
+++ b/tests/examples/decodebin_next/Makefile.in
@@ -418,6 +418,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/dynamic/Makefile.in b/tests/examples/dynamic/Makefile.in
index d19a7ca..2d0dd61 100644
--- a/tests/examples/dynamic/Makefile.in
+++ b/tests/examples/dynamic/Makefile.in
@@ -443,6 +443,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/encoding/Makefile.in b/tests/examples/encoding/Makefile.in
index 43b3c1e..d4f8a81 100644
--- a/tests/examples/encoding/Makefile.in
+++ b/tests/examples/encoding/Makefile.in
@@ -419,6 +419,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/fft/Makefile.in b/tests/examples/fft/Makefile.in
index 58da283..5eb8966 100644
--- a/tests/examples/fft/Makefile.in
+++ b/tests/examples/fft/Makefile.in
@@ -417,6 +417,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/gio/Makefile.in b/tests/examples/gio/Makefile.in
index c93aee8..8e3fe23 100644
--- a/tests/examples/gio/Makefile.in
+++ b/tests/examples/gio/Makefile.in
@@ -420,6 +420,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/overlay/Makefile.in b/tests/examples/overlay/Makefile.in
index be645f1..973cfff 100644
--- a/tests/examples/overlay/Makefile.in
+++ b/tests/examples/overlay/Makefile.in
@@ -480,6 +480,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/playback/Makefile.in b/tests/examples/playback/Makefile.in
index 7af8c41..de0818e 100644
--- a/tests/examples/playback/Makefile.in
+++ b/tests/examples/playback/Makefile.in
@@ -416,6 +416,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/playrec/Makefile.in b/tests/examples/playrec/Makefile.in
index c061c62..469e6ee 100644
--- a/tests/examples/playrec/Makefile.in
+++ b/tests/examples/playrec/Makefile.in
@@ -416,6 +416,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/seek/Makefile.in b/tests/examples/seek/Makefile.in
index 91c583d..3eea09d 100644
--- a/tests/examples/seek/Makefile.in
+++ b/tests/examples/seek/Makefile.in
@@ -438,6 +438,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/examples/seek/stepping.c b/tests/examples/seek/stepping.c
index 44bc033..31656af 100644
--- a/tests/examples/seek/stepping.c
+++ b/tests/examples/seek/stepping.c
@@ -36,7 +36,7 @@
 
   length = sin (period);
 
-  period += M_PI / 40;
+  period += G_PI / 40;
 
   length += 1.1;
   length *= 100 * GST_MSECOND;
diff --git a/tests/examples/seek/stepping2.c b/tests/examples/seek/stepping2.c
index 70d297d..34922a9 100644
--- a/tests/examples/seek/stepping2.c
+++ b/tests/examples/seek/stepping2.c
@@ -36,7 +36,7 @@
 
   rate = sin (period);
 
-  period += M_PI / 150;
+  period += G_PI / 150;
 
   rate += 1.2;
 
diff --git a/tests/examples/snapshot/Makefile.in b/tests/examples/snapshot/Makefile.in
index 94a377a..4ca6c3e 100644
--- a/tests/examples/snapshot/Makefile.in
+++ b/tests/examples/snapshot/Makefile.in
@@ -414,6 +414,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index b16c431..57a9a74 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -362,6 +362,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index 1b6a852..007e8fd 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -620,6 +620,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tests/icles/playback/Makefile.in b/tests/icles/playback/Makefile.in
index b8a26a2..56c36ad 100644
--- a/tests/icles/playback/Makefile.in
+++ b/tests/icles/playback/Makefile.in
@@ -462,6 +462,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index ac089e2..c166edb 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -483,6 +483,9 @@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
+SSE2_CFLAGS = @SSE2_CFLAGS@
+SSE41_CFLAGS = @SSE41_CFLAGS@
+SSE_CFLAGS = @SSE_CFLAGS@
 STRIP = @STRIP@
 THEORA_CFLAGS = @THEORA_CFLAGS@
 THEORA_LIBS = @THEORA_LIBS@
diff --git a/tools/gst-play.c b/tools/gst-play.c
index 3aa1b77..5708737 100644
--- a/tools/gst-play.c
+++ b/tools/gst-play.c
@@ -963,7 +963,7 @@
     else
       cur = (cur + 1) % (n + 1);
 
-    if (cur >= n) {
+    if (cur >= n && track_type != GST_PLAY_TRACK_TYPE_VIDEO) {
       cur = -1;
       g_print ("Disabling %s.           \n", name);
       if (cur_flags & flag) {
@@ -971,7 +971,10 @@
         g_object_set (play->playbin, "flags", cur_flags, NULL);
       }
     } else {
-      if (!(cur_flags & flag)) {
+      /* For video we only want to switch between streams, not disable it altogether */
+      if (cur >= n)
+        cur = 0;
+      if (!(cur_flags & flag) && track_type != GST_PLAY_TRACK_TYPE_VIDEO) {
         cur_flags |= flag;
         g_object_set (play->playbin, "flags", cur_flags, NULL);
       }
diff --git a/win32/common/_stdint.h b/win32/common/_stdint.h
index df4837a..8d38855 100644
--- a/win32/common/_stdint.h
+++ b/win32/common/_stdint.h
@@ -1,8 +1,8 @@
 #ifndef _GST_PLUGINS_BASE__STDINT_H
 #define _GST_PLUGINS_BASE__STDINT_H 1
 #ifndef _GENERATED_STDINT_H
-#define _GENERATED_STDINT_H "gst-plugins-base 1.9.2"
-/* generated using gnu compiler gcc-6 (Debian 6.2.0-2) 6.2.0 20160830 */
+#define _GENERATED_STDINT_H "gst-plugins-base 1.9.90"
+/* generated using gnu compiler gcc-6 (Debian 6.2.0-5) 6.2.0 20160927 */
 #define _STDINT_HAVE_STDINT_H 1
 #include <stdint.h>
 #endif
diff --git a/win32/common/config.h b/win32/common/config.h
index de3c764..790115d 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -90,7 +90,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-09-01"
+#define GST_PACKAGE_RELEASE_DATETIME "2016-09-30"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -164,6 +164,14 @@
    */
 #undef HAVE_DCGETTEXT
 
+/* Define to 1 if you have the declaration of `__i386__', and to 0 if you
+   don't. */
+#undef HAVE_DECL___I386__
+
+/* Define to 1 if you have the declaration of `__x86_64__', and to 0 if you
+   don't. */
+#undef HAVE_DECL___X86_64__
+
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
@@ -260,6 +268,15 @@
 /* Define to 1 if you have the <smmintrin.h> header file. */
 #undef HAVE_SMMINTRIN_H
 
+/* SSE support is enabled */
+#undef HAVE_SSE
+
+/* SSE2 support is enabled */
+#undef HAVE_SSE2
+
+/* SSE4.1 support is enabled */
+#undef HAVE_SSE41
+
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
@@ -348,7 +365,7 @@
 #define PACKAGE_NAME "GStreamer Base Plug-ins"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Base Plug-ins 1.9.2"
+#define PACKAGE_STRING "GStreamer Base Plug-ins 1.9.90"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-base"
@@ -357,7 +374,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.9.2"
+#define PACKAGE_VERSION "1.9.90"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -395,7 +412,7 @@
 #undef USE_TREMOLO
 
 /* Version number of package */
-#define VERSION "1.9.2"
+#define VERSION "1.9.90"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/win32/common/libgstrtp.def b/win32/common/libgstrtp.def
index 137ccf5..38c7c28 100644
--- a/win32/common/libgstrtp.def
+++ b/win32/common/libgstrtp.def
@@ -98,6 +98,7 @@
 	gst_rtp_buffer_compare_seqnum
 	gst_rtp_buffer_default_clock_rate
 	gst_rtp_buffer_ext_timestamp
+	gst_rtp_buffer_flags_get_type
 	gst_rtp_buffer_get_csrc
 	gst_rtp_buffer_get_csrc_count
 	gst_rtp_buffer_get_extension