[oe] [PATCH 1/2] gstreamer: move old versions to obsolete

Martin Jansa martin.jansa at gmail.com
Thu Mar 17 12:41:18 UTC 2011


Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
---
 recipes/gstreamer/gst-ffmpeg/armv5.patch           | 1509 -------------------
 recipes/gstreamer/gst-ffmpeg/autotools.patch       |   21 -
 recipes/gstreamer/gst-ffmpeg_0.10.2.bb             |   35 -
 recipes/gstreamer/gst-plugins-bad_0.10.20.bb       |   16 -
 .../gstreamer/gst-plugins-base/fix-playbin2.patch  |   26 -
 .../gst-plugins-base_rowstride.patch               | 1577 --------------------
 recipes/gstreamer/gst-plugins-base_0.10.25.bb      |   19 -
 recipes/gstreamer/gst-plugins-base_0.10.31.bb      |   26 -
 .../fix-unit-scale-asseration.patch                |   33 -
 recipes/gstreamer/gst-plugins-good_0.10.15.bb      |   16 -
 recipes/gstreamer/gst-rtsp_0.10.4.bb               |    4 -
 recipes/gstreamer/gst-rtsp_0.10.5.bb               |    4 -
 recipes/gstreamer/gstreamer/po-makefile-fix.patch  |   12 -
 .../registry-do-not-look-into-debug-dirs.patch     |   39 -
 recipes/gstreamer/gstreamer_0.10.17.bb             |   10 -
 recipes/gstreamer/gstreamer_0.10.25.bb             |    6 -
 recipes/gstreamer/gstreamer_0.10.31.bb             |   15 -
 recipes/obsolete/gstreamer/gst-ffmpeg/armv5.patch  | 1509 +++++++++++++++++++
 .../obsolete/gstreamer/gst-ffmpeg/autotools.patch  |   21 +
 recipes/obsolete/gstreamer/gst-ffmpeg_0.10.2.bb    |   35 +
 .../obsolete/gstreamer/gst-plugins-bad_0.10.20.bb  |   16 +
 .../gstreamer/gst-plugins-base/fix-playbin2.patch  |   26 +
 .../gst-plugins-base_rowstride.patch               | 1577 ++++++++++++++++++++
 .../obsolete/gstreamer/gst-plugins-base_0.10.25.bb |   19 +
 .../obsolete/gstreamer/gst-plugins-base_0.10.31.bb |   26 +
 .../fix-unit-scale-asseration.patch                |   33 +
 .../obsolete/gstreamer/gst-plugins-good_0.10.15.bb |   16 +
 recipes/obsolete/gstreamer/gst-rtsp_0.10.4.bb      |    4 +
 recipes/obsolete/gstreamer/gst-rtsp_0.10.5.bb      |    4 +
 .../gstreamer/gstreamer/po-makefile-fix.patch      |   12 +
 .../registry-do-not-look-into-debug-dirs.patch     |   39 +
 recipes/obsolete/gstreamer/gstreamer_0.10.17.bb    |   10 +
 recipes/obsolete/gstreamer/gstreamer_0.10.25.bb    |    6 +
 recipes/obsolete/gstreamer/gstreamer_0.10.31.bb    |   15 +
 34 files changed, 3368 insertions(+), 3368 deletions(-)
 delete mode 100644 recipes/gstreamer/gst-ffmpeg/armv5.patch
 delete mode 100644 recipes/gstreamer/gst-ffmpeg/autotools.patch
 delete mode 100644 recipes/gstreamer/gst-ffmpeg_0.10.2.bb
 delete mode 100644 recipes/gstreamer/gst-plugins-bad_0.10.20.bb
 delete mode 100644 recipes/gstreamer/gst-plugins-base/fix-playbin2.patch
 delete mode 100644 recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
 delete mode 100644 recipes/gstreamer/gst-plugins-base_0.10.25.bb
 delete mode 100644 recipes/gstreamer/gst-plugins-base_0.10.31.bb
 delete mode 100644 recipes/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch
 delete mode 100644 recipes/gstreamer/gst-plugins-good_0.10.15.bb
 delete mode 100644 recipes/gstreamer/gst-rtsp_0.10.4.bb
 delete mode 100644 recipes/gstreamer/gst-rtsp_0.10.5.bb
 delete mode 100644 recipes/gstreamer/gstreamer/po-makefile-fix.patch
 delete mode 100644 recipes/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch
 delete mode 100644 recipes/gstreamer/gstreamer_0.10.17.bb
 delete mode 100644 recipes/gstreamer/gstreamer_0.10.25.bb
 delete mode 100644 recipes/gstreamer/gstreamer_0.10.31.bb
 create mode 100644 recipes/obsolete/gstreamer/gst-ffmpeg/armv5.patch
 create mode 100644 recipes/obsolete/gstreamer/gst-ffmpeg/autotools.patch
 create mode 100644 recipes/obsolete/gstreamer/gst-ffmpeg_0.10.2.bb
 create mode 100644 recipes/obsolete/gstreamer/gst-plugins-bad_0.10.20.bb
 create mode 100644 recipes/obsolete/gstreamer/gst-plugins-base/fix-playbin2.patch
 create mode 100644 recipes/obsolete/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
 create mode 100644 recipes/obsolete/gstreamer/gst-plugins-base_0.10.25.bb
 create mode 100644 recipes/obsolete/gstreamer/gst-plugins-base_0.10.31.bb
 create mode 100644 recipes/obsolete/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch
 create mode 100644 recipes/obsolete/gstreamer/gst-plugins-good_0.10.15.bb
 create mode 100644 recipes/obsolete/gstreamer/gst-rtsp_0.10.4.bb
 create mode 100644 recipes/obsolete/gstreamer/gst-rtsp_0.10.5.bb
 create mode 100644 recipes/obsolete/gstreamer/gstreamer/po-makefile-fix.patch
 create mode 100644 recipes/obsolete/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch
 create mode 100644 recipes/obsolete/gstreamer/gstreamer_0.10.17.bb
 create mode 100644 recipes/obsolete/gstreamer/gstreamer_0.10.25.bb
 create mode 100644 recipes/obsolete/gstreamer/gstreamer_0.10.31.bb

diff --git a/recipes/gstreamer/gst-ffmpeg/armv5.patch b/recipes/gstreamer/gst-ffmpeg/armv5.patch
deleted file mode 100644
index 794709c..0000000
--- a/recipes/gstreamer/gst-ffmpeg/armv5.patch
+++ /dev/null
@@ -1,1509 +0,0 @@
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/configure.ac
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac	2006-09-23 15:35:21.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/configure.ac	2007-05-01 12:23:39.000000000 +0200
-@@ -190,7 +190,7 @@
-     ARCH_X86=yes
-     ;;
-   # armv4l is a subset of armv5tel
--  armv4l|armv5tel)
-+  arm|armv4l|armv5tel|armv5te)
-     TARGET_ARCH="armv4l"
-     ARCH_ARMV4L=yes
-     ;;
-@@ -364,11 +364,8 @@
- AC_FF_ALLOW_DISABLE(HAVE_IWMMXT, iwmmxt, use ARM/IWMMXT optimizations,[
-   if test x$TARGET_ARCH = xarmv4l; then
-     AC_MSG_CHECKING(for support of IWMMXT optimizations)
--    AC_TRY_RUN([
--        int main () {
-+    AC_TRY_COMPILE(,[
-           __asm__ __volatile__ ("wunpckelub wr6, wr4");
--          return 0;
--        }
-       ],[ HAVE_IWMMXT=yes && AC_MSG_RESULT(yes) ],[
-         HAVE_IWMMXT=no && AC_MSG_RESULT(no) ])
-   else
-@@ -376,6 +373,19 @@
-   fi
- ])
- 
-+dnl ARMV5TE
-+AC_FF_ALLOW_DISABLE(HAVE_ARMV5TE, armv5te, use ARMV5TE optimizations,[
-+  if test x$TARGET_ARCH = xarmv4l; then
-+    AC_MSG_CHECKING(for support of ARMV5TE specific instructions)
-+    AC_TRY_COMPILE(, [
-+          __asm__ __volatile__ ("smulbb a4,ip,a3");
-+      ],[ HAVE_ARMV5TE=yes && AC_MSG_RESULT(yes) ],[
-+        HAVE_ARMV5TE=no && AC_MSG_RESULT(no) ])
-+  else
-+    HAVE_ARMV5TE=no
-+  fi
-+])
-+
- dnl GProf (-p)
- AC_FF_ALLOW_ENABLE(HAVE_GPROF, gprof, profiling with gprof,[
-   GPROF_FLAGS="-p"
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c	2006-09-20 20:55:37.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c	2007-05-01 12:23:40.000000000 +0200
-  * ARMv4L optimized DSP utils
-  * Copyright (c) 2001 Lionel Ulmer.
-  *
-- * This library is free software; you can redistribute it and/or
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-  * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-+ * version 2.1 of the License, or (at your option) any later version.
-  *
-- * This library is distributed in the hope that it will be useful,
-+ * FFmpeg 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
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-- * License along with this library; if not, write to the Free Software
-+ * License along with FFmpeg; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-  */
- 
--#include "dsputil.h"
-+#include "../dsputil.h"
- #ifdef HAVE_IPP
- #include "ipp.h"
- #endif
-@@ -27,6 +29,12 @@
- extern void j_rev_dct_ARM(DCTELEM *data);
- extern void simple_idct_ARM(DCTELEM *data);
- 
-+extern void simple_idct_armv5te(DCTELEM *data);
-+extern void simple_idct_put_armv5te(uint8_t *dest, int line_size,
-+                                    DCTELEM *data);
-+extern void simple_idct_add_armv5te(uint8_t *dest, int line_size,
-+                                    DCTELEM *data);
-+
- /* XXX: local hack */
- static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
- static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
-@@ -196,8 +204,10 @@
-     ff_add_pixels_clamped = c->add_pixels_clamped;
- 
-     if(idct_algo == FF_IDCT_AUTO){
--#ifdef HAVE_IPP
-+#if defined(HAVE_IPP)
-         idct_algo = FF_IDCT_IPP;
-+#elif defined(HAVE_ARMV5TE)
-+        idct_algo = FF_IDCT_SIMPLEARMV5TE;
- #else
-         idct_algo = FF_IDCT_ARM;
- #endif
-@@ -213,6 +223,13 @@
-         c->idct_add= simple_idct_ARM_add;
-         c->idct    = simple_idct_ARM;
-         c->idct_permutation_type= FF_NO_IDCT_PERM;
-+#ifdef HAVE_ARMV5TE
-+    } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){
-+        c->idct_put= simple_idct_put_armv5te;
-+        c->idct_add= simple_idct_add_armv5te;
-+        c->idct    = simple_idct_armv5te;
-+        c->idct_permutation_type = FF_NO_IDCT_PERM;
-+#endif
- #ifdef HAVE_IPP
-     } else if (idct_algo==FF_IDCT_IPP){
-         c->idct_put= simple_idct_ipp_put;
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm_s.S	2006-02-19 00:04:59.000000000 +0100
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm_s.S	2007-05-01 12:23:40.000000000 +0200
-@@ -2,20 +2,29 @@
- @ ARMv4L optimized DSP utils
- @ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
- @
--@ This library is free software; you can redistribute it and/or
-+@ This file is part of FFmpeg.
-+@
-+@ FFmpeg is free software; you can redistribute it and/or
- @ modify it under the terms of the GNU Lesser General Public
- @ License as published by the Free Software Foundation; either
--@ version 2 of the License, or (at your option) any later version.
-+@ version 2.1 of the License, or (at your option) any later version.
- @
--@ This library is distributed in the hope that it will be useful,
-+@ FFmpeg 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
- @ Lesser General Public License for more details.
- @
- @ You should have received a copy of the GNU Lesser General Public
--@ License along with this library; if not, write to the Free Software
-+@ License along with FFmpeg; if not, write to the Free Software
- @ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- @
-+#if defined(__ARM_ARCH_5__) || \
-+    defined(__ARM_ARCH_5T__) || \
-+    defined(__ARM_ARCH_5TE__)
-+#define PLD(code...)   code
-+#else
-+#define PLD(code...)
-+#endif
- 
- .macro  ADJ_ALIGN_QUADWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4
-         mov \Rd0, \Rn0, lsr #(\shift * 8)
-@@ -74,7 +83,7 @@
- put_pixels16_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r11, lr} @ R14 is also called LR
-         adr r5, 5f
-         ands r4, r1, #3
-@@ -85,7 +94,7 @@
-         ldmia r1, {r4-r7}
-         add r1, r1, r2
-         stmia r0, {r4-r7}
--        pld [r1]
-+        PLD ( pld [r1] )
-         subs r3, r3, #1
-         add r0, r0, r2
-         bne 1b
-@@ -95,7 +104,7 @@
-         ldmia r1, {r4-r8}
-         add r1, r1, r2
-         ADJ_ALIGN_QUADWORD_D 1, r9, r10, r11, r12, r4, r5, r6, r7, r8
--        pld [r1]
-+        PLD ( pld [r1] )
-         subs r3, r3, #1
-         stmia r0, {r9-r12}
-         add r0, r0, r2
-@@ -106,7 +115,7 @@
-         ldmia r1, {r4-r8}
-         add r1, r1, r2
-         ADJ_ALIGN_QUADWORD_D 2, r9, r10, r11, r12, r4, r5, r6, r7, r8
--        pld [r1]
-+        PLD ( pld [r1] )
-         subs r3, r3, #1
-         stmia r0, {r9-r12}
-         add r0, r0, r2
-@@ -117,7 +126,7 @@
-         ldmia r1, {r4-r8}
-         add r1, r1, r2
-         ADJ_ALIGN_QUADWORD_D 3, r9, r10, r11, r12, r4, r5, r6, r7, r8
--        pld [r1]
-+        PLD ( pld [r1] )
-         subs r3, r3, #1
-         stmia r0, {r9-r12}
-         add r0, r0, r2
-@@ -136,7 +145,7 @@
- put_pixels8_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r5,lr} @ R14 is also called LR
-         adr r5, 5f
-         ands r4, r1, #3
-@@ -147,7 +156,7 @@
-         ldmia r1, {r4-r5}
-         add r1, r1, r2
-         subs r3, r3, #1
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmia r0, {r4-r5}
-         add r0, r0, r2
-         bne 1b
-@@ -157,7 +166,7 @@
-         ldmia r1, {r4-r5, r12}
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r12
--        pld [r1]
-+        PLD ( pld [r1] )
-         subs r3, r3, #1
-         stmia r0, {r4-r5}
-         add r0, r0, r2
-@@ -168,7 +177,7 @@
-         ldmia r1, {r4-r5, r12}
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r12
--        pld [r1]
-+        PLD ( pld [r1] )
-         subs r3, r3, #1
-         stmia r0, {r4-r5}
-         add r0, r0, r2
-@@ -179,7 +188,7 @@
-         ldmia r1, {r4-r5, r12}
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r12
--        pld [r1]
-+        PLD ( pld [r1] )
-         subs r3, r3, #1
-         stmia r0, {r4-r5}
-         add r0, r0, r2
-@@ -198,7 +207,7 @@
- put_pixels8_x2_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r10,lr} @ R14 is also called LR
-         adr r5, 5f
-         ands r4, r1, #3
-@@ -210,7 +219,7 @@
-         ldmia r1, {r4-r5, r10}
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         RND_AVG32 r8, r9, r4, r5, r6, r7, r12
-         subs r3, r3, #1
-         stmia r0, {r8-r9}
-@@ -223,7 +232,7 @@
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
-         ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         RND_AVG32 r4, r5, r6, r7, r8, r9, r12
-         subs r3, r3, #1
-         stmia r0, {r4-r5}
-@@ -236,7 +245,7 @@
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
-         ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         RND_AVG32 r4, r5, r6, r7, r8, r9, r12
-         subs r3, r3, #1
-         stmia r0, {r4-r5}
-@@ -248,7 +257,7 @@
-         ldmia r1, {r4-r5, r10}
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         RND_AVG32 r8, r9, r6, r7, r5, r10, r12
-         subs r3, r3, #1
-         stmia r0, {r8-r9}
-@@ -267,7 +276,7 @@
- put_no_rnd_pixels8_x2_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r10,lr} @ R14 is also called LR
-         adr r5, 5f
-         ands r4, r1, #3
-@@ -279,7 +288,7 @@
-         ldmia r1, {r4-r5, r10}
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
-         subs r3, r3, #1
-         stmia r0, {r8-r9}
-@@ -292,7 +301,7 @@
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
-         ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
-         subs r3, r3, #1
-         stmia r0, {r4-r5}
-@@ -305,7 +314,7 @@
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
-         ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
-         subs r3, r3, #1
-         stmia r0, {r4-r5}
-@@ -317,7 +326,7 @@
-         ldmia r1, {r4-r5, r10}
-         add r1, r1, r2
-         ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
--        pld [r1]
-+        PLD ( pld [r1] )
-         NO_RND_AVG32 r8, r9, r6, r7, r5, r10, r12
-         subs r3, r3, #1
-         stmia r0, {r8-r9}
-@@ -338,7 +347,7 @@
- put_pixels8_y2_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
-         adr r5, 5f
-         ands r4, r1, #3
-@@ -352,13 +361,13 @@
-         add r1, r1, r2
- 6:      ldmia r1, {r6-r7}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         RND_AVG32 r8, r9, r4, r5, r6, r7, r12
-         ldmia r1, {r4-r5}
-         add r1, r1, r2
-         stmia r0, {r8-r9}
-         add r0, r0, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         RND_AVG32 r8, r9, r6, r7, r4, r5, r12
-         subs r3, r3, #1
-         stmia r0, {r8-r9}
-@@ -369,18 +378,18 @@
- 2:
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
- 6:      ldmia r1, {r7-r9}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
-         RND_AVG32 r10, r11, r4, r5, r7, r8, r12
-         stmia r0, {r10-r11}
-         add r0, r0, r2
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
-         subs r3, r3, #1
-         RND_AVG32 r10, r11, r7, r8, r4, r5, r12
-@@ -392,18 +401,18 @@
- 3:
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
- 6:      ldmia r1, {r7-r9}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
-         RND_AVG32 r10, r11, r4, r5, r7, r8, r12
-         stmia r0, {r10-r11}
-         add r0, r0, r2
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
-         subs r3, r3, #1
-         RND_AVG32 r10, r11, r7, r8, r4, r5, r12
-@@ -415,18 +424,18 @@
- 4:
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
- 6:      ldmia r1, {r7-r9}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
-         RND_AVG32 r10, r11, r4, r5, r7, r8, r12
-         stmia r0, {r10-r11}
-         add r0, r0, r2
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
-         subs r3, r3, #1
-         RND_AVG32 r10, r11, r7, r8, r4, r5, r12
-@@ -447,7 +456,7 @@
- put_no_rnd_pixels8_y2_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
-         adr r5, 5f
-         ands r4, r1, #3
-@@ -461,13 +470,13 @@
-         add r1, r1, r2
- 6:      ldmia r1, {r6-r7}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
-         ldmia r1, {r4-r5}
-         add r1, r1, r2
-         stmia r0, {r8-r9}
-         add r0, r0, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         NO_RND_AVG32 r8, r9, r6, r7, r4, r5, r12
-         subs r3, r3, #1
-         stmia r0, {r8-r9}
-@@ -478,18 +487,18 @@
- 2:
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
- 6:      ldmia r1, {r7-r9}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
-         NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
-         stmia r0, {r10-r11}
-         add r0, r0, r2
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
-         subs r3, r3, #1
-         NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
-@@ -501,18 +510,18 @@
- 3:
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
- 6:      ldmia r1, {r7-r9}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
-         NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
-         stmia r0, {r10-r11}
-         add r0, r0, r2
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
-         subs r3, r3, #1
-         NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
-@@ -524,18 +533,18 @@
- 4:
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
- 6:      ldmia r1, {r7-r9}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
-         NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
-         stmia r0, {r10-r11}
-         add r0, r0, r2
-         ldmia r1, {r4-r6}
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
-         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
-         subs r3, r3, #1
-         NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
-@@ -562,7 +571,7 @@
-         ldmia r1, {r8-r10}
- .endif
-         add r1, r1, r2
--        pld [r1]
-+        PLD ( pld [r1] )
- .if \align == 0
-         ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8
- .elseif \align == 1
-@@ -624,7 +633,7 @@
- put_pixels8_xy2_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
-         adrl r12, 5f
-         ands r4, r1, #3
-@@ -661,7 +670,7 @@
- put_no_rnd_pixels8_xy2_arm:
-         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
-         @ block = word aligned, pixles = unaligned
--        pld [r1]
-+        PLD ( pld [r1] )
-         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
-         adrl r12, 5f
-         ands r4, r1, #3
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c	2006-02-19 00:04:59.000000000 +0100
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c	2007-05-01 12:23:40.000000000 +0200
-@@ -2,18 +2,20 @@
-  * iWMMXt optimized DSP utils
-  * Copyright (c) 2004 AGAWA Koji
-  *
-- * This library is free software; you can redistribute it and/or
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-  * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-+ * version 2.1 of the License, or (at your option) any later version.
-  *
-- * This library is distributed in the hope that it will be useful,
-+ * FFmpeg 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
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-- * License along with this library; if not, write to the Free Software
-+ * License along with FFmpeg; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-  */
- 
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h	2006-09-20 20:55:37.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h	2007-05-01 12:23:40.000000000 +0200
-@@ -2,18 +2,20 @@
-  * iWMMXt optimized DSP utils
-  * copyright (c) 2004 AGAWA Koji
-  *
-- * This library is free software; you can redistribute it and/or
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-  * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-+ * version 2.1 of the License, or (at your option) any later version.
-  *
-- * This library is distributed in the hope that it will be useful,
-+ * FFmpeg 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
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-- * License along with this library; if not, write to the Free Software
-+ * License along with FFmpeg; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-  */
- 
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am	2006-09-22 06:07:23.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am	2007-05-01 12:23:40.000000000 +0200
-@@ -7,9 +7,14 @@
- iwmmxt_libs = libiwmmxt.la
- endif
- 
-+if HAVE_ARMV5TE
-+armv5te_libs = libarmv5te.la
-+endif
-+
- noinst_LTLIBRARIES = \
- 	libarmv4l.la \
--	$(iwmmxt_libs)
-+	$(iwmmxt_libs) \
-+	$(armv5te_libs)
- 
- libarmv4l_la_SOURCES = \
- 	jrevdct_arm.S \
-@@ -18,6 +23,9 @@
- 	dsputil_arm.c \
- 	mpegvideo_arm.c
- 
-+libarmv5te_la_SOURCES = \
-+	simple_idct_armv5te.S
-+
- libiwmmxt_la_SOURCES = \
- 	dsputil_iwmmxt.c \
- 	mpegvideo_iwmmxt.c
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h	2006-09-22 06:07:23.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h	2007-05-01 12:23:40.000000000 +0200
-@@ -2,18 +2,20 @@
-  * simple math operations
-  * Copyright (c) 2006 Michael Niedermayer <michaelni at gmx.at> et al
-  *
-- * This library is free software; you can redistribute it and/or
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-  * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-+ * version 2.1 of the License, or (at your option) any later version.
-  *
-- * This library is distributed in the hope that it will be useful,
-+ * FFmpeg 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
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-- * License along with this library; if not, write to the Free Software
-+ * License along with FFmpeg; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-  */
- 
-@@ -39,9 +41,9 @@
- #   define MAC16(rt, ra, rb) \
-         asm ("smlabb %0, %2, %3, %0" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
- /* signed 16x16 -> 32 multiply */
--#   define MUL16(ra, rb) \
--        ({ int __rt;\
--         asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb));
-+#   define MUL16(ra, rb)                                                \
-+        ({ int __rt;                                                    \
-+         asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb));  \
-          __rt; })
- 
- #endif
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c	2006-02-19 00:04:59.000000000 +0100
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c	2007-05-01 12:23:40.000000000 +0200
-@@ -1,25 +1,27 @@
- /*
-  * Copyright (c) 2002 Michael Niedermayer
-  *
-- * This library is free software; you can redistribute it and/or
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-  * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-+ * version 2.1 of the License, or (at your option) any later version.
-  *
-- * This library is distributed in the hope that it will be useful,
-+ * FFmpeg 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
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-- * License along with this library; if not, write to the Free Software
-+ * License along with FFmpeg; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-  *
-  */
- 
--#include "dsputil.h"
--#include "mpegvideo.h"
--#include "avcodec.h"
-+#include "../dsputil.h"
-+#include "../mpegvideo.h"
-+#include "../avcodec.h"
- 
- extern void MPV_common_init_iwmmxt(MpegEncContext *s);
- 
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c	2006-09-20 20:55:37.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c	2007-05-01 12:23:40.000000000 +0200
-@@ -1,18 +1,20 @@
- /*
-  * copyright (c) 2004 AGAWA Koji
-  *
-- * This library is free software; you can redistribute it and/or
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-  * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-+ * version 2.1 of the License, or (at your option) any later version.
-  *
-- * This library is distributed in the hope that it will be useful,
-+ * FFmpeg 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
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-- * License along with this library; if not, write to the Free Software
-+ * License along with FFmpeg; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-  */
- 
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S	2006-09-20 20:55:37.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S	2007-05-01 12:23:40.000000000 +0200
-@@ -5,18 +5,20 @@
-  *
-  * Author: Frederic Boulay <dilb at handhelds.org>
-  *
-- * This library is free software; you can redistribute it and/or
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-  * modify it under the terms of the GNU Lesser General Public
-  * License as published by the Free Software Foundation; either
-- * version 2 of the License, or (at your option) any later version.
-+ * version 2.1 of the License, or (at your option) any later version.
-  *
-- * This library is distributed in the hope that it will be useful,
-+ * FFmpeg 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
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-- * License along with this library; if not, write to the Free Software
-+ * License along with FFmpeg; if not, write to the Free Software
-  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-  *
-  * The function defined in this file, is derived from the simple_idct function
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S	1970-01-01 01:00:00.000000000 +0100
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S	2007-05-01 12:23:40.000000000 +0200
-@@ -0,0 +1,718 @@
-+/*
-+ * Simple IDCT
-+ *
-+ * Copyright (c) 2001 Michael Niedermayer <michaelni at gmx.at>
-+ * Copyright (c) 2006 Mans Rullgard <mru at inprovide.com>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#define W1  22725   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
-+#define W2  21407   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
-+#define W3  19266   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
-+#define W4  16383   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
-+#define W5  12873   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
-+#define W6  8867    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
-+#define W7  4520    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
-+#define ROW_SHIFT 11
-+#define COL_SHIFT 20
-+
-+#define W13 (W1 | (W3 << 16))
-+#define W26 (W2 | (W6 << 16))
-+#define W57 (W5 | (W7 << 16))
-+
-+        .text
-+        .align
-+w13:    .long W13
-+w26:    .long W26
-+w57:    .long W57
-+
-+        .align
-+        .func idct_row_armv5te
-+idct_row_armv5te:
-+        str    lr, [sp, #-4]!
-+
-+        ldrd   v1, [a1, #8]
-+        ldrd   a3, [a1]              /* a3 = row[1:0], a4 = row[3:2] */
-+        orrs   v1, v1, v2
-+        cmpeq  v1, a4
-+        cmpeq  v1, a3, lsr #16
-+        beq    row_dc_only
-+
-+        mov    v1, #(1<<(ROW_SHIFT-1))
-+        mov    ip, #16384
-+        sub    ip, ip, #1            /* ip = W4 */
-+        smlabb v1, ip, a3, v1        /* v1 = W4*row[0]+(1<<(RS-1)) */
-+        ldr    ip, [pc, #(w26-.-8)]  /* ip = W2 | (W6 << 16) */
-+        smultb a2, ip, a4
-+        smulbb lr, ip, a4
-+        add    v2, v1, a2
-+        sub    v3, v1, a2
-+        sub    v4, v1, lr
-+        add    v1, v1, lr
-+
-+        ldr    ip, [pc, #(w13-.-8)]  /* ip = W1 | (W3 << 16) */
-+        ldr    lr, [pc, #(w57-.-8)]  /* lr = W5 | (W7 << 16) */
-+        smulbt v5, ip, a3
-+        smultt v6, lr, a4
-+        smlatt v5, ip, a4, v5
-+        smultt a2, ip, a3
-+        smulbt v7, lr, a3
-+        sub    v6, v6, a2
-+        smulbt a2, ip, a4
-+        smultt fp, lr, a3
-+        sub    v7, v7, a2
-+        smulbt a2, lr, a4
-+        ldrd   a3, [a1, #8]          /* a3=row[5:4] a4=row[7:6] */
-+        sub    fp, fp, a2
-+
-+        orrs   a2, a3, a4
-+        beq    1f
-+
-+        smlabt v5, lr, a3, v5
-+        smlabt v6, ip, a3, v6
-+        smlatt v5, lr, a4, v5
-+        smlabt v6, lr, a4, v6
-+        smlatt v7, lr, a3, v7
-+        smlatt fp, ip, a3, fp
-+        smulbt a2, ip, a4
-+        smlatt v7, ip, a4, v7
-+        sub    fp, fp, a2
-+
-+        ldr    ip, [pc, #(w26-.-8)]  /* ip = W2 | (W6 << 16) */
-+        mov    a2, #16384
-+        sub    a2, a2, #1            /* a2 =  W4 */
-+        smulbb a2, a2, a3            /* a2 =  W4*row[4] */
-+        smultb lr, ip, a4            /* lr =  W6*row[6] */
-+        add    v1, v1, a2            /* v1 += W4*row[4] */
-+        add    v1, v1, lr            /* v1 += W6*row[6] */
-+        add    v4, v4, a2            /* v4 += W4*row[4] */
-+        sub    v4, v4, lr            /* v4 -= W6*row[6] */
-+        smulbb lr, ip, a4            /* lr =  W2*row[6] */
-+        sub    v2, v2, a2            /* v2 -= W4*row[4] */
-+        sub    v2, v2, lr            /* v2 -= W2*row[6] */
-+        sub    v3, v3, a2            /* v3 -= W4*row[4] */
-+        add    v3, v3, lr            /* v3 += W2*row[6] */
-+
-+1:      add    a2, v1, v5
-+        mov    a3, a2, lsr #11
-+        bic    a3, a3, #0x1f0000
-+        sub    a2, v2, v6
-+        mov    a2, a2, lsr #11
-+        add    a3, a3, a2, lsl #16
-+        add    a2, v3, v7
-+        mov    a4, a2, lsr #11
-+        bic    a4, a4, #0x1f0000
-+        add    a2, v4, fp
-+        mov    a2, a2, lsr #11
-+        add    a4, a4, a2, lsl #16
-+        strd   a3, [a1]
-+
-+        sub    a2, v4, fp
-+        mov    a3, a2, lsr #11
-+        bic    a3, a3, #0x1f0000
-+        sub    a2, v3, v7
-+        mov    a2, a2, lsr #11
-+        add    a3, a3, a2, lsl #16
-+        add    a2, v2, v6
-+        mov    a4, a2, lsr #11
-+        bic    a4, a4, #0x1f0000
-+        sub    a2, v1, v5
-+        mov    a2, a2, lsr #11
-+        add    a4, a4, a2, lsl #16
-+        strd   a3, [a1, #8]
-+
-+        ldr    pc, [sp], #4
-+
-+row_dc_only:
-+        orr    a3, a3, a3, lsl #16
-+        bic    a3, a3, #0xe000
-+        mov    a3, a3, lsl #3
-+        mov    a4, a3
-+        strd   a3, [a1]
-+        strd   a3, [a1, #8]
-+
-+        ldr    pc, [sp], #4
-+        .endfunc
-+
-+        .macro idct_col
-+        ldr    a4, [a1]              /* a4 = col[1:0] */
-+        mov    ip, #16384
-+        sub    ip, ip, #1            /* ip = W4 */
-+#if 0
-+        mov    v1, #(1<<(COL_SHIFT-1))
-+        smlabt v2, ip, a4, v1        /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */
-+        smlabb v1, ip, a4, v1        /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */
-+        ldr    a4, [a1, #(16*4)]
-+#else
-+        mov    v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */
-+        add    v2, v1, a4, asr #16
-+        rsb    v2, v2, v2, lsl #14
-+        mov    a4, a4, lsl #16
-+        add    v1, v1, a4, asr #16
-+        ldr    a4, [a1, #(16*4)]
-+        rsb    v1, v1, v1, lsl #14
-+#endif
-+
-+        smulbb lr, ip, a4
-+        smulbt a3, ip, a4
-+        sub    v3, v1, lr
-+        sub    v5, v1, lr
-+        add    v7, v1, lr
-+        add    v1, v1, lr
-+        sub    v4, v2, a3
-+        sub    v6, v2, a3
-+        add    fp, v2, a3
-+        ldr    ip, [pc, #(w26-.-8)]
-+        ldr    a4, [a1, #(16*2)]
-+        add    v2, v2, a3
-+
-+        smulbb lr, ip, a4
-+        smultb a3, ip, a4
-+        add    v1, v1, lr
-+        sub    v7, v7, lr
-+        add    v3, v3, a3
-+        sub    v5, v5, a3
-+        smulbt lr, ip, a4
-+        smultt a3, ip, a4
-+        add    v2, v2, lr
-+        sub    fp, fp, lr
-+        add    v4, v4, a3
-+        ldr    a4, [a1, #(16*6)]
-+        sub    v6, v6, a3
-+
-+        smultb lr, ip, a4
-+        smulbb a3, ip, a4
-+        add    v1, v1, lr
-+        sub    v7, v7, lr
-+        sub    v3, v3, a3
-+        add    v5, v5, a3
-+        smultt lr, ip, a4
-+        smulbt a3, ip, a4
-+        add    v2, v2, lr
-+        sub    fp, fp, lr
-+        sub    v4, v4, a3
-+        add    v6, v6, a3
-+
-+        stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp}
-+
-+        ldr    ip, [pc, #(w13-.-8)]
-+        ldr    a4, [a1, #(16*1)]
-+        ldr    lr, [pc, #(w57-.-8)]
-+        smulbb v1, ip, a4
-+        smultb v3, ip, a4
-+        smulbb v5, lr, a4
-+        smultb v7, lr, a4
-+        smulbt v2, ip, a4
-+        smultt v4, ip, a4
-+        smulbt v6, lr, a4
-+        smultt fp, lr, a4
-+        rsb    v4, v4, #0
-+        ldr    a4, [a1, #(16*3)]
-+        rsb    v3, v3, #0
-+
-+        smlatb v1, ip, a4, v1
-+        smlatb v3, lr, a4, v3
-+        smulbb a3, ip, a4
-+        smulbb a2, lr, a4
-+        sub    v5, v5, a3
-+        sub    v7, v7, a2
-+        smlatt v2, ip, a4, v2
-+        smlatt v4, lr, a4, v4
-+        smulbt a3, ip, a4
-+        smulbt a2, lr, a4
-+        sub    v6, v6, a3
-+        ldr    a4, [a1, #(16*5)]
-+        sub    fp, fp, a2
-+
-+        smlabb v1, lr, a4, v1
-+        smlabb v3, ip, a4, v3
-+        smlatb v5, lr, a4, v5
-+        smlatb v7, ip, a4, v7
-+        smlabt v2, lr, a4, v2
-+        smlabt v4, ip, a4, v4
-+        smlatt v6, lr, a4, v6
-+        ldr    a3, [a1, #(16*7)]
-+        smlatt fp, ip, a4, fp
-+
-+        smlatb v1, lr, a3, v1
-+        smlabb v3, lr, a3, v3
-+        smlatb v5, ip, a3, v5
-+        smulbb a4, ip, a3
-+        smlatt v2, lr, a3, v2
-+        sub    v7, v7, a4
-+        smlabt v4, lr, a3, v4
-+        smulbt a4, ip, a3
-+        smlatt v6, ip, a3, v6
-+        sub    fp, fp, a4
-+        .endm
-+
-+        .align
-+        .func idct_col_armv5te
-+idct_col_armv5te:
-+        str    lr, [sp, #-4]!
-+
-+        idct_col
-+
-+        ldmfd  sp!, {a3, a4}
-+        adds   a2, a3, v1
-+        mov    a2, a2, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        add    ip, a4, v2
-+        mov    ip, ip, asr #20
-+        orr    a2, a2, ip, lsl #16
-+        str    a2, [a1]
-+        subs   a3, a3, v1
-+        mov    a2, a3, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        sub    a4, a4, v2
-+        mov    a4, a4, asr #20
-+        orr    a2, a2, a4, lsl #16
-+        ldmfd  sp!, {a3, a4}
-+        str    a2, [a1, #(16*7)]
-+
-+        subs   a2, a3, v3
-+        mov    a2, a2, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        sub    ip, a4, v4
-+        mov    ip, ip, asr #20
-+        orr    a2, a2, ip, lsl #16
-+        str    a2, [a1, #(16*1)]
-+        adds   a3, a3, v3
-+        mov    a2, a3, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        add    a4, a4, v4
-+        mov    a4, a4, asr #20
-+        orr    a2, a2, a4, lsl #16
-+        ldmfd  sp!, {a3, a4}
-+        str    a2, [a1, #(16*6)]
-+
-+        adds   a2, a3, v5
-+        mov    a2, a2, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        add    ip, a4, v6
-+        mov    ip, ip, asr #20
-+        orr    a2, a2, ip, lsl #16
-+        str    a2, [a1, #(16*2)]
-+        subs   a3, a3, v5
-+        mov    a2, a3, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        sub    a4, a4, v6
-+        mov    a4, a4, asr #20
-+        orr    a2, a2, a4, lsl #16
-+        ldmfd  sp!, {a3, a4}
-+        str    a2, [a1, #(16*5)]
-+
-+        adds   a2, a3, v7
-+        mov    a2, a2, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        add    ip, a4, fp
-+        mov    ip, ip, asr #20
-+        orr    a2, a2, ip, lsl #16
-+        str    a2, [a1, #(16*3)]
-+        subs   a3, a3, v7
-+        mov    a2, a3, lsr #20
-+        orrmi  a2, a2, #0xf000
-+        sub    a4, a4, fp
-+        mov    a4, a4, asr #20
-+        orr    a2, a2, a4, lsl #16
-+        str    a2, [a1, #(16*4)]
-+
-+        ldr    pc, [sp], #4
-+        .endfunc
-+
-+        .align
-+        .func idct_col_put_armv5te
-+idct_col_put_armv5te:
-+        str    lr, [sp, #-4]!
-+
-+        idct_col
-+
-+        ldmfd  sp!, {a3, a4}
-+        ldr    lr, [sp, #32]
-+        add    a2, a3, v1
-+        movs   a2, a2, asr #20
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        add    ip, a4, v2
-+        movs   ip, ip, asr #20
-+        movmi  ip, #0
-+        cmp    ip, #255
-+        movgt  ip, #255
-+        orr    a2, a2, ip, lsl #8
-+        sub    a3, a3, v1
-+        movs   a3, a3, asr #20
-+        movmi  a3, #0
-+        cmp    a3, #255
-+        movgt  a3, #255
-+        sub    a4, a4, v2
-+        movs   a4, a4, asr #20
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        ldr    v1, [sp, #28]
-+        movgt  a4, #255
-+        strh   a2, [v1]
-+        add    a2, v1, #2
-+        str    a2, [sp, #28]
-+        orr    a2, a3, a4, lsl #8
-+        rsb    v2, lr, lr, lsl #3
-+        ldmfd  sp!, {a3, a4}
-+        strh   a2, [v2, v1]!
-+
-+        sub    a2, a3, v3
-+        movs   a2, a2, asr #20
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        sub    ip, a4, v4
-+        movs   ip, ip, asr #20
-+        movmi  ip, #0
-+        cmp    ip, #255
-+        movgt  ip, #255
-+        orr    a2, a2, ip, lsl #8
-+        strh   a2, [v1, lr]!
-+        add    a3, a3, v3
-+        movs   a2, a3, asr #20
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        add    a4, a4, v4
-+        movs   a4, a4, asr #20
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        movgt  a4, #255
-+        orr    a2, a2, a4, lsl #8
-+        ldmfd  sp!, {a3, a4}
-+        strh   a2, [v2, -lr]!
-+
-+        add    a2, a3, v5
-+        movs   a2, a2, asr #20
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        add    ip, a4, v6
-+        movs   ip, ip, asr #20
-+        movmi  ip, #0
-+        cmp    ip, #255
-+        movgt  ip, #255
-+        orr    a2, a2, ip, lsl #8
-+        strh   a2, [v1, lr]!
-+        sub    a3, a3, v5
-+        movs   a2, a3, asr #20
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        sub    a4, a4, v6
-+        movs   a4, a4, asr #20
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        movgt  a4, #255
-+        orr    a2, a2, a4, lsl #8
-+        ldmfd  sp!, {a3, a4}
-+        strh   a2, [v2, -lr]!
-+
-+        add    a2, a3, v7
-+        movs   a2, a2, asr #20
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        add    ip, a4, fp
-+        movs   ip, ip, asr #20
-+        movmi  ip, #0
-+        cmp    ip, #255
-+        movgt  ip, #255
-+        orr    a2, a2, ip, lsl #8
-+        strh   a2, [v1, lr]
-+        sub    a3, a3, v7
-+        movs   a2, a3, asr #20
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        sub    a4, a4, fp
-+        movs   a4, a4, asr #20
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        movgt  a4, #255
-+        orr    a2, a2, a4, lsl #8
-+        strh   a2, [v2, -lr]
-+
-+        ldr    pc, [sp], #4
-+        .endfunc
-+
-+        .align
-+        .func idct_col_add_armv5te
-+idct_col_add_armv5te:
-+        str    lr, [sp, #-4]!
-+
-+        idct_col
-+
-+        ldr    lr, [sp, #36]
-+
-+        ldmfd  sp!, {a3, a4}
-+        ldrh   ip, [lr]
-+        add    a2, a3, v1
-+        mov    a2, a2, asr #20
-+        sub    a3, a3, v1
-+        and    v1, ip, #255
-+        adds   a2, a2, v1
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        add    v1, a4, v2
-+        mov    v1, v1, asr #20
-+        adds   v1, v1, ip, lsr #8
-+        movmi  v1, #0
-+        cmp    v1, #255
-+        movgt  v1, #255
-+        orr    a2, a2, v1, lsl #8
-+        ldr    v1, [sp, #32]
-+        sub    a4, a4, v2
-+        rsb    v2, v1, v1, lsl #3
-+        ldrh   ip, [v2, lr]!
-+        strh   a2, [lr]
-+        mov    a3, a3, asr #20
-+        and    a2, ip, #255
-+        adds   a3, a3, a2
-+        movmi  a3, #0
-+        cmp    a3, #255
-+        movgt  a3, #255
-+        mov    a4, a4, asr #20
-+        adds   a4, a4, ip, lsr #8
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        movgt  a4, #255
-+        add    a2, lr, #2
-+        str    a2, [sp, #28]
-+        orr    a2, a3, a4, lsl #8
-+        strh   a2, [v2]
-+
-+        ldmfd  sp!, {a3, a4}
-+        ldrh   ip, [lr, v1]!
-+        sub    a2, a3, v3
-+        mov    a2, a2, asr #20
-+        add    a3, a3, v3
-+        and    v3, ip, #255
-+        adds   a2, a2, v3
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        sub    v3, a4, v4
-+        mov    v3, v3, asr #20
-+        adds   v3, v3, ip, lsr #8
-+        movmi  v3, #0
-+        cmp    v3, #255
-+        movgt  v3, #255
-+        orr    a2, a2, v3, lsl #8
-+        add    a4, a4, v4
-+        ldrh   ip, [v2, -v1]!
-+        strh   a2, [lr]
-+        mov    a3, a3, asr #20
-+        and    a2, ip, #255
-+        adds   a3, a3, a2
-+        movmi  a3, #0
-+        cmp    a3, #255
-+        movgt  a3, #255
-+        mov    a4, a4, asr #20
-+        adds   a4, a4, ip, lsr #8
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        movgt  a4, #255
-+        orr    a2, a3, a4, lsl #8
-+        strh   a2, [v2]
-+
-+        ldmfd  sp!, {a3, a4}
-+        ldrh   ip, [lr, v1]!
-+        add    a2, a3, v5
-+        mov    a2, a2, asr #20
-+        sub    a3, a3, v5
-+        and    v3, ip, #255
-+        adds   a2, a2, v3
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        add    v3, a4, v6
-+        mov    v3, v3, asr #20
-+        adds   v3, v3, ip, lsr #8
-+        movmi  v3, #0
-+        cmp    v3, #255
-+        movgt  v3, #255
-+        orr    a2, a2, v3, lsl #8
-+        sub    a4, a4, v6
-+        ldrh   ip, [v2, -v1]!
-+        strh   a2, [lr]
-+        mov    a3, a3, asr #20
-+        and    a2, ip, #255
-+        adds   a3, a3, a2
-+        movmi  a3, #0
-+        cmp    a3, #255
-+        movgt  a3, #255
-+        mov    a4, a4, asr #20
-+        adds   a4, a4, ip, lsr #8
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        movgt  a4, #255
-+        orr    a2, a3, a4, lsl #8
-+        strh   a2, [v2]
-+
-+        ldmfd  sp!, {a3, a4}
-+        ldrh   ip, [lr, v1]!
-+        add    a2, a3, v7
-+        mov    a2, a2, asr #20
-+        sub    a3, a3, v7
-+        and    v3, ip, #255
-+        adds   a2, a2, v3
-+        movmi  a2, #0
-+        cmp    a2, #255
-+        movgt  a2, #255
-+        add    v3, a4, fp
-+        mov    v3, v3, asr #20
-+        adds   v3, v3, ip, lsr #8
-+        movmi  v3, #0
-+        cmp    v3, #255
-+        movgt  v3, #255
-+        orr    a2, a2, v3, lsl #8
-+        sub    a4, a4, fp
-+        ldrh   ip, [v2, -v1]!
-+        strh   a2, [lr]
-+        mov    a3, a3, asr #20
-+        and    a2, ip, #255
-+        adds   a3, a3, a2
-+        movmi  a3, #0
-+        cmp    a3, #255
-+        movgt  a3, #255
-+        mov    a4, a4, asr #20
-+        adds   a4, a4, ip, lsr #8
-+        movmi  a4, #0
-+        cmp    a4, #255
-+        movgt  a4, #255
-+        orr    a2, a3, a4, lsl #8
-+        strh   a2, [v2]
-+
-+        ldr    pc, [sp], #4
-+        .endfunc
-+
-+        .align
-+        .global simple_idct_armv5te
-+        .func simple_idct_armv5te
-+simple_idct_armv5te:
-+        stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr}
-+
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+
-+        sub    a1, a1, #(16*7)
-+
-+        bl     idct_col_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_armv5te
-+
-+        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-+        .endfunc
-+
-+        .align
-+        .global simple_idct_add_armv5te
-+        .func simple_idct_add_armv5te
-+simple_idct_add_armv5te:
-+        stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
-+
-+        mov    a1, a3
-+
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+
-+        sub    a1, a1, #(16*7)
-+
-+        bl     idct_col_add_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_add_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_add_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_add_armv5te
-+
-+        add    sp, sp, #8
-+        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-+        .endfunc
-+
-+        .align
-+        .global simple_idct_put_armv5te
-+        .func simple_idct_put_armv5te
-+simple_idct_put_armv5te:
-+        stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
-+
-+        mov    a1, a3
-+
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+        add    a1, a1, #16
-+        bl     idct_row_armv5te
-+
-+        sub    a1, a1, #(16*7)
-+
-+        bl     idct_col_put_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_put_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_put_armv5te
-+        add    a1, a1, #4
-+        bl     idct_col_put_armv5te
-+
-+        add    sp, sp, #8
-+        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
-+        .endfunc
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/avcodec.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/avcodec.h
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/avcodec.h	2006-09-20 20:55:36.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/avcodec.h	2007-05-01 12:23:40.000000000 +0200
-@@ -1217,6 +1217,7 @@
- #define FF_IDCT_IPP          13
- #define FF_IDCT_XVIDMMX      14
- #define FF_IDCT_CAVS         15
-+#define FF_IDCT_SIMPLEARMV5TE 16
- 
-     /**
-      * slice count.
-diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/Makefile.am gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/Makefile.am
---- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/Makefile.am	2006-09-22 06:07:23.000000000 +0200
-+++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/Makefile.am	2007-05-01 12:23:40.000000000 +0200
-@@ -19,7 +19,10 @@
- if HAVE_IWMMXT
- iwmmxt_libs = armv4l/libiwmmxt.la
- endif
--armv4l_libs = armv4l/libarmv4l.la $(iwmmxt_libs)
-+if HAVE_ARMV5TE
-+armv5te_libs = armv4l/libarmv5te.la
-+endif
-+armv4l_libs = armv4l/libarmv4l.la $(iwmmxt_libs) $(armv5te_libs)
- armv4l_dirs = armv4l
- endif
- 
diff --git a/recipes/gstreamer/gst-ffmpeg/autotools.patch b/recipes/gstreamer/gst-ffmpeg/autotools.patch
deleted file mode 100644
index 76e7ac6..0000000
--- a/recipes/gstreamer/gst-ffmpeg/autotools.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac
-===================================================================
---- gst-ffmpeg-0.10.2.orig/gst-libs/ext/ffmpeg/configure.ac	2008-08-20 00:20:19.177850039 +0200
-+++ gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac	2008-08-20 00:26:24.567809464 +0200
-@@ -27,13 +27,15 @@
- 
- AM_MAINTAINER_MODE
- AC_GNU_SOURCE
-+
-+AC_PROG_LIBTOOL
- AM_PROG_AS
- AC_PROG_CC
-+AC_PROG_CXX
- AC_PROG_INSTALL
- AC_SYS_LARGEFILE
- AC_STDC_HEADERS
- AM_DISABLE_STATIC
--AC_PROG_LIBTOOL
- 
- dnl Warning for anyone using these custom macros.
- dnl before asking me questions on why it doesn't work and why you
diff --git a/recipes/gstreamer/gst-ffmpeg_0.10.2.bb b/recipes/gstreamer/gst-ffmpeg_0.10.2.bb
deleted file mode 100644
index 5164bbd..0000000
--- a/recipes/gstreamer/gst-ffmpeg_0.10.2.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-DESCRIPTION = "FFmpeg-based GStreamer plug-in"
-SECTION = "multimedia"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-HOMEPAGE = "http://www.gstreamer.net/"
-DEPENDS = "gstreamer gst-plugins-base zlib"
-PR = "r2"
-
-inherit autotools pkgconfig
-
-SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2 \
-	   file://armv5.patch \
-	   file://autotools.patch \
-          "
-
-FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
-FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
-FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
-
-EXTRA_OECONF = "--disable-sdltest --disable-ffplay --disable-freetypetest \
-		--disable-vorbis --disable-vorbistest --disable-encoders \
-		--disable-v4l --disable-audio-oss --disable-dv1394 \
-		--disable-vhook --disable-ffmpeg --disable-ffserver \
-		--enable-pp --disable-decoder-vorbis"
-
-# We do this because the install program is called with -s which causes it to
-# call "strip" and it then mangles cross compiled stuff..
-PATH_prepend := "${TOOLCHAIN_PATH}/${TARGET_SYS}/bin:"
-
-# Hack to get STAGING_LIBDIR into the linker path when building ffmpeg
-CC = "${CCACHE} ${HOST_PREFIX}gcc ${TARGET_CC_ARCH} -L${STAGING_LIBDIR}"
-
-
-SRC_URI[md5sum] = "3c7fb1cd1308b1972a76b86bb29fc890"
-SRC_URI[sha256sum] = "ffa7c89bccab5d1be53b6fcedcf7a5c071d585cf522fee5864add05d350f5842"
diff --git a/recipes/gstreamer/gst-plugins-bad_0.10.20.bb b/recipes/gstreamer/gst-plugins-bad_0.10.20.bb
deleted file mode 100644
index 17f20eb..0000000
--- a/recipes/gstreamer/gst-plugins-bad_0.10.20.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require gst-plugins.inc
-
-SRC_URI[archive.md5sum] = "7c84766f6d24f41ba90c3f6141012ab8"
-SRC_URI[archive.sha256sum] = "1031dff866df976a957f34039addbab4c0753406299a275f4cf1780e1dbe2a90"
-
-DEPENDS += "orc-native orc libcdaudio gst-plugins-base openssl directfb libmodplug librsvg"
-
-PR = "${INC_PR}.2"
-
-# We don't have vdpau headers in OE and it creates crosscompile badness.
-# Also, mpeg2enc and mplex from mjpegtools don't build, because of AC_TRY_RUN.
-EXTRA_OECONF += " \
-        --disable-mpeg2enc \
-        --disable-mplex \
-        --disable-vdpau \
-"
diff --git a/recipes/gstreamer/gst-plugins-base/fix-playbin2.patch b/recipes/gstreamer/gst-plugins-base/fix-playbin2.patch
deleted file mode 100644
index 8aba3b6..0000000
--- a/recipes/gstreamer/gst-plugins-base/fix-playbin2.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 0fe6b6e8abb131471d5bd04d7f7e27ca98a67659 Mon Sep 17 00:00:00 2001
-From: Brijesh Singh <brijesh.ksingh at gmail.com>
-Date: Wed, 13 Jan 2010 08:39:54 +0000
-Subject: playsink: Fix handling of the native audio/video flags
-
-Fixes bug #606687.
----
-
---- /tmp/gstplaysink.c	2010-01-23 12:23:20.000000000 +0100
-+++ gst-plugins-base-0.10.25/gst/playback/gstplaysink.c	2010-01-23 12:27:51.000000000 +0100
-@@ -1880,12 +1880,13 @@
-      * pick one and ignore the other then instead of erroring out?) */
-     if (need_text && need_subp)
-       goto subs_and_text;
--  } else if (flags & GST_PLAY_FLAG_VIDEO && playsink->video_pad) {
-+  } else if (((flags & GST_PLAY_FLAG_VIDEO)
-+          || (flags & GST_PLAY_FLAG_NATIVE_VIDEO)) && playsink->video_pad) {
-     /* we have video and we are requested to show it */
-     need_video = TRUE;
-   }
-   if (playsink->audio_pad) {
--    if (flags & GST_PLAY_FLAG_AUDIO) {
-+    if ((flags & GST_PLAY_FLAG_AUDIO) || (flags & GST_PLAY_FLAG_NATIVE_AUDIO)) {
-       need_audio = TRUE;
-     }
-     if (playsink->audio_pad_raw) {
diff --git a/recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch b/recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
deleted file mode 100644
index 3c0cffa..0000000
--- a/recipes/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
+++ /dev/null
@@ -1,1577 +0,0 @@
-From 32a7af0874fe13774c65919941c3be59b72c646a Mon Sep 17 00:00:00 2001
-From: Rob Clark <rob at ti.com>
-Date: Thu, 30 Jul 2009 14:50:05 -0500
-Subject: [PATCH] add rowstride support to video utility functions
-
-This is a combination of 7 commits:
-* add rowstride support to video utility functions
-* stridetransform: skeletal implementation of stridetransform element
-* stridetransform: implement caps negotiation and related parts
-* stridetransform: implement transform function
-* audioconvert: add NEON acceleration for some conversions
-* add gst_stride_transform_transform_size()
-* fix a small typo..  need to use the smaller of {new_width, orig_width} for the line-by-line copy to avoid overwriting past end of buffer
----
- configure.ac                        |    2 +
- gst-libs/gst/video/gstvideofilter.c |    8 +-
- gst-libs/gst/video/video.c          |  234 +++++++++++++++---
- gst-libs/gst/video/video.h          |   39 ++-
- gst/audioconvert/Makefile.am        |    1 +
- gst/audioconvert/armv7.c            |  209 ++++++++++++++++
- gst/audioconvert/audioconvert.c     |   20 +-
- gst/audioconvert/gstaudioquantize.c |    4 +-
- gst/audioconvert/gstchannelmix.c    |    4 +-
- gst/stride/Makefile.am              |   15 ++
- gst/stride/gststridetransform.c     |  471 +++++++++++++++++++++++++++++++++++
- gst/stride/gststridetransform.h     |   80 ++++++
- gst/stride/plugin.c                 |   45 ++++
- 13 files changed, 1064 insertions(+), 68 deletions(-)
- create mode 100644 gst/audioconvert/armv7.c
- create mode 100644 gst/stride/Makefile.am
- create mode 100644 gst/stride/gststridetransform.c
- create mode 100644 gst/stride/gststridetransform.h
- create mode 100644 gst/stride/plugin.c
-
-diff --git a/configure.ac b/configure.ac
-index 6a39c73..5da8ac2 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -319,6 +319,7 @@ AG_GST_CHECK_PLUGIN(ffmpegcolorspace)
- AG_GST_CHECK_PLUGIN(gdp)
- AG_GST_CHECK_PLUGIN(playback)
- AG_GST_CHECK_PLUGIN(audioresample)
-+AG_GST_CHECK_PLUGIN(stride)
- AG_GST_CHECK_PLUGIN(subparse)
- AG_GST_CHECK_PLUGIN(tcp)
- AG_GST_CHECK_PLUGIN(typefind)
-@@ -739,6 +740,7 @@ gst/ffmpegcolorspace/Makefile
- gst/gdp/Makefile
- gst/playback/Makefile
- gst/audioresample/Makefile
-+gst/stride/Makefile
- gst/subparse/Makefile
- gst/tcp/Makefile
- gst/typefind/Makefile
-diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c
-index 2d08a60..6b2d7b7 100644
---- a/gst-libs/gst/video/gstvideofilter.c
-+++ b/gst-libs/gst/video/gstvideofilter.c
-@@ -21,7 +21,7 @@
-  /**
-  * SECTION:gstvideofilter
-  * @short_description: Base class for video filters
-- * 
-+ *
-  * <refsect2>
-  * <para>
-  * Provides useful functions and a base class for video filters.
-@@ -78,14 +78,14 @@ gst_video_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
-     guint * size)
- {
-   GstVideoFormat fmt;
--  gint width, height;
-+  gint width, height, rowstride;
- 
--  if (!gst_video_format_parse_caps (caps, &fmt, &width, &height)) {
-+  if (!gst_video_format_parse_caps_strided (caps, &fmt, &width, &height, &rowstride)) {
-     GST_WARNING_OBJECT (btrans, "Failed to parse caps %" GST_PTR_FORMAT, caps);
-     return FALSE;
-   }
- 
--  *size = gst_video_format_get_size (fmt, width, height);
-+  *size = gst_video_format_get_size_strided (fmt, width, height, rowstride);
- 
-   GST_DEBUG_OBJECT (btrans, "Returning size %u bytes for caps %"
-       GST_PTR_FORMAT, *size, caps);
-diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
-index ab1d8c0..1815bf1 100644
---- a/gst-libs/gst/video/video.c
-+++ b/gst-libs/gst/video/video.c
-@@ -31,7 +31,7 @@
-  *
-  * <refsect2>
-  * <para>
-- * This library contains some helper functions and includes the 
-+ * This library contains some helper functions and includes the
-  * videosink and videofilter base classes.
-  * </para>
-  * </refsect2>
-@@ -51,7 +51,7 @@ static GstVideoFormat gst_video_format_from_rgb24_masks (int red_mask,
-  *
-  * A convenience function to retrieve a GValue holding the framerate
-  * from the caps on a pad.
-- * 
-+ *
-  * The pad needs to have negotiated caps containing a framerate property.
-  *
-  * Returns: NULL if the pad has no configured caps or the configured caps
-@@ -104,7 +104,7 @@ gst_video_frame_rate (GstPad * pad)
-  *
-  * Inspect the caps of the provided pad and retrieve the width and height of
-  * the video frames it is configured for.
-- * 
-+ *
-  * The pad needs to have negotiated caps containing width and height properties.
-  *
-  * Returns: TRUE if the width and height could be retrieved.
-@@ -156,13 +156,13 @@ gst_video_get_size (GstPad * pad, gint * width, gint * height)
-  * @display_par_n: Numerator of the pixel aspect ratio of the display device
-  * @display_par_d: Denominator of the pixel aspect ratio of the display device
-  *
-- * Given the Pixel Aspect Ratio and size of an input video frame, and the 
-- * pixel aspect ratio of the intended display device, calculates the actual 
-+ * Given the Pixel Aspect Ratio and size of an input video frame, and the
-+ * pixel aspect ratio of the intended display device, calculates the actual
-  * display ratio the video will be rendered with.
-  *
-- * Returns: A boolean indicating success and a calculated Display Ratio in the 
-- * dar_n and dar_d parameters. 
-- * The return value is FALSE in the case of integer overflow or other error. 
-+ * Returns: A boolean indicating success and a calculated Display Ratio in the
-+ * dar_n and dar_d parameters.
-+ * The return value is FALSE in the case of integer overflow or other error.
-  *
-  * Since: 0.10.7
-  */
-@@ -250,28 +250,15 @@ gst_video_format_parse_caps_interlaced (GstCaps * caps, gboolean * interlaced)
- }
- 
- /**
-- * gst_video_format_parse_caps:
-- * @caps: the #GstCaps to parse
-- * @format: the #GstVideoFormat of the video represented by @caps (output)
-- * @width: the width of the video represented by @caps, may be NULL (output)
-- * @height: the height of the video represented by @caps, may be NULL (output)
-- *
-- * Determines the #GstVideoFormat of @caps and places it in the location
-- * pointed to by @format.  Extracts the size of the video and places it
-- * in the location pointed to by @width and @height.  If @caps does not
-- * represent one of the raw video formats listed in #GstVideoFormat, the
-- * function will fail and return FALSE.
-- *
-- * Since: 0.10.16
-- *
-- * Returns: TRUE if @caps was parsed correctly.
-+ * see gst_video_format_parse_caps_strided and gst_video_format_parse_caps
-  */
--gboolean
--gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
--    int *width, int *height)
-+static gboolean
-+parse_caps (GstCaps * caps, GstVideoFormat * format, gint *width, gint *height,
-+    gboolean stride_ok, gint *rowstride)
- {
-   GstStructure *structure;
-   gboolean ok = TRUE;
-+  gboolean strided = FALSE;
- 
-   if (!gst_caps_is_fixed (caps))
-     return FALSE;
-@@ -279,7 +266,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
-   structure = gst_caps_get_structure (caps, 0);
- 
-   if (format) {
--    if (gst_structure_has_name (structure, "video/x-raw-yuv")) {
-+    if (gst_structure_has_name (structure, "video/x-raw-yuv") ||
-+        (stride_ok &&
-+            gst_structure_has_name (structure, "video/x-raw-yuv-strided") &&
-+            (strided=TRUE) /* single '=' intentional */)) {
-       guint32 fourcc;
- 
-       ok &= gst_structure_get_fourcc (structure, "format", &fourcc);
-@@ -288,7 +278,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
-       if (*format == GST_VIDEO_FORMAT_UNKNOWN) {
-         ok = FALSE;
-       }
--    } else if (gst_structure_has_name (structure, "video/x-raw-rgb")) {
-+    } else if (gst_structure_has_name (structure, "video/x-raw-rgb") ||
-+        (stride_ok &&
-+            gst_structure_has_name (structure, "video/x-raw-rgb-strided") &&
-+            (strided=TRUE) /* single '=' intentional */)) {
-       int depth;
-       int bpp;
-       int endianness;
-@@ -333,6 +326,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
-     }
-   }
- 
-+  /* note: should we require that the caps have these fields, even if
-+   * the caller does not particularly request them??
-+   */
-+
-   if (width) {
-     ok &= gst_structure_get_int (structure, "width", width);
-   }
-@@ -341,11 +338,70 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
-     ok &= gst_structure_get_int (structure, "height", height);
-   }
- 
-+  if (rowstride) {
-+    if (strided) {
-+      ok &= gst_structure_get_int (structure, "rowstride", rowstride);
-+    } else {
-+      *rowstride = 0;  /* not a strided format */
-+    }
-+  }
-+
-   return ok;
- }
- 
- 
- /**
-+ * gst_video_format_parse_caps_strided:
-+ * @caps: the #GstCaps to parse
-+ * @format: the #GstVideoFormat of the video represented by @caps (output)
-+ * @width: the width of the video represented by @caps, may be NULL (output)
-+ * @height: the height of the video represented by @caps, may be NULL (output)
-+ * @rowstride: the rowstride (in bytes) represented by @caps, or 0 if there
-+ *    is no rowstride, may be NULL (output)
-+ *
-+ * Determines the #GstVideoFormat of @caps and places it in the location
-+ * pointed to by @format.  Extracts the size of the video and places it
-+ * in the location pointed to by @width and @height.  Extracts the row-
-+ * stride and places it in the location pointed to by @rowstride.  If
-+ * @caps does not represent one of the raw video formats listed in
-+ * #GstVideoFormat, the function will fail and return FALSE.
-+ *
-+ * Since: ???
-+ *
-+ * Returns: TRUE if @caps was parsed correctly.
-+ */
-+gboolean
-+gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format,
-+    int *width, int *height, int *rowstride)
-+{
-+  return parse_caps (caps, format, width, height, TRUE, rowstride);
-+}
-+
-+/**
-+ * gst_video_format_parse_caps:
-+ * @caps: the #GstCaps to parse
-+ * @format: the #GstVideoFormat of the video represented by @caps (output)
-+ * @width: the width of the video represented by @caps, may be NULL (output)
-+ * @height: the height of the video represented by @caps, may be NULL (output)
-+ *
-+ * Determines the #GstVideoFormat of @caps and places it in the location
-+ * pointed to by @format.  Extracts the size of the video and places it
-+ * in the location pointed to by @width and @height.  If @caps does not
-+ * represent one of the raw video formats listed in #GstVideoFormat, the
-+ * function will fail and return FALSE.
-+ *
-+ * Since: 0.10.16
-+ *
-+ * Returns: TRUE if @caps was parsed correctly.
-+ */
-+gboolean
-+gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
-+    int *width, int *height)
-+{
-+  return parse_caps (caps, format, width, height, FALSE, NULL);
-+}
-+
-+/**
-  * gst_video_parse_caps_framerate:
-  * @caps: pointer to a #GstCaps instance
-  * @fps_n: pointer to integer to hold numerator of frame rate (output)
-@@ -444,10 +500,11 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, int width,
- }
- 
- /**
-- * gst_video_format_new_caps:
-+ * gst_video_format_new_caps_strided:
-  * @format: the #GstVideoFormat describing the raw video format
-  * @width: width of video
-  * @height: height of video
-+ * @rowstride: the rowstride (in bytes), or 0 if no rowstride
-  * @framerate_n: numerator of frame rate
-  * @framerate_d: denominator of frame rate
-  * @par_n: numerator of pixel aspect ratio
-@@ -455,26 +512,29 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, int width,
-  *
-  * Creates a new #GstCaps object based on the parameters provided.
-  *
-- * Since: 0.10.16
-+ * Since: ???
-  *
-  * Returns: a new #GstCaps object, or NULL if there was an error
-  */
- GstCaps *
--gst_video_format_new_caps (GstVideoFormat format, int width, int height,
-+gst_video_format_new_caps_strided (GstVideoFormat format,
-+    int width, int height, int rowstride,
-     int framerate_n, int framerate_d, int par_n, int par_d)
- {
-+  GstCaps *caps = NULL;
-+
-   g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, NULL);
-   g_return_val_if_fail (width > 0 && height > 0, NULL);
- 
-   if (gst_video_format_is_yuv (format)) {
--    return gst_caps_new_simple ("video/x-raw-yuv",
-+    caps = gst_caps_new_simple (
-+        rowstride ? "video/x-raw-yuv-strided" : "video/x-raw-yuv",
-         "format", GST_TYPE_FOURCC, gst_video_format_to_fourcc (format),
-         "width", G_TYPE_INT, width,
-         "height", G_TYPE_INT, height,
-         "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d,
-         "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL);
--  }
--  if (gst_video_format_is_rgb (format)) {
-+  } else if (gst_video_format_is_rgb (format)) {
-     GstCaps *caps;
-     int red_mask;
-     int blue_mask;
-@@ -526,7 +586,8 @@ gst_video_format_new_caps (GstVideoFormat format, int width, int height,
-         mask >> (8 * gst_video_format_get_component_offset (format, 2, width,
-             height));
- 
--    caps = gst_caps_new_simple ("video/x-raw-rgb",
-+    caps = gst_caps_new_simple (
-+        rowstride ? "video/x-raw-rgb-strided" : "video/x-raw-rgb",
-         "bpp", G_TYPE_INT, bpp,
-         "depth", G_TYPE_INT, depth,
-         "endianness", G_TYPE_INT, G_BIG_ENDIAN,
-@@ -543,9 +604,39 @@ gst_video_format_new_caps (GstVideoFormat format, int width, int height,
-               height));
-       gst_caps_set_simple (caps, "alpha_mask", G_TYPE_INT, alpha_mask, NULL);
-     }
--    return caps;
-+  } else {
-+    return NULL;
-+  }
-+
-+  if (rowstride) {
-+    gst_caps_set_simple (caps, "rowstride", G_TYPE_INT, rowstride, NULL);
-   }
--  return NULL;
-+
-+  return caps;
-+}
-+
-+/**
-+ * gst_video_format_new_caps:
-+ * @format: the #GstVideoFormat describing the raw video format
-+ * @width: width of video
-+ * @height: height of video
-+ * @framerate_n: numerator of frame rate
-+ * @framerate_d: denominator of frame rate
-+ * @par_n: numerator of pixel aspect ratio
-+ * @par_d: denominator of pixel aspect ratio
-+ *
-+ * Creates a new #GstCaps object based on the parameters provided.
-+ *
-+ * Since: 0.10.16
-+ *
-+ * Returns: a new #GstCaps object, or NULL if there was an error
-+ */
-+GstCaps *
-+gst_video_format_new_caps (GstVideoFormat format, int width, int height,
-+    int framerate_n, int framerate_d, int par_n, int par_d)
-+{
-+  return gst_video_format_new_caps_strided (format, width, height, 0,
-+      framerate_n, framerate_d, par_n, par_d);
- }
- 
- /**
-@@ -643,7 +734,7 @@ gst_video_format_to_fourcc (GstVideoFormat format)
-  * @blue_mask: blue bit mask
-  *
-  * Converts red, green, blue bit masks into the corresponding
-- * #GstVideoFormat.  
-+ * #GstVideoFormat.
-  *
-  * Since: 0.10.16
-  *
-@@ -796,7 +887,7 @@ gst_video_format_is_yuv (GstVideoFormat format)
- /**
-  * gst_video_format_has_alpha:
-  * @format: a #GstVideoFormat
-- * 
-+ *
-  * Returns TRUE or FALSE depending on if the video format provides an
-  * alpha channel.
-  *
-@@ -1328,6 +1419,71 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height)
- }
- 
- /**
-+ * gst_video_format_get_size_strided:
-+ * @format: a #GstVideoFormat
-+ * @width: the width of video (in pixels)
-+ * @height: the height of video (in pixels)
-+ * @rowstride: the rowstride (in bytes), or 0 if no rowstride (in which
-+ *    case the returned value is same as #gst_video_format_get_size())
-+ *
-+ * Calculates the total number of bytes in the raw video format, for a buffer
-+ * which may have a rowstride in bytes
-+ *
-+ * Since: ???
-+ *
-+ * Returns: size (in bytes) of raw video format
-+ */
-+int
-+gst_video_format_get_size_strided (GstVideoFormat format,
-+    int width, int height, int rowstride)
-+{
-+  if(!rowstride)
-+    return gst_video_format_get_size (format, width, height);
-+
-+  g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, 0);
-+  g_return_val_if_fail (width > 0 && height > 0, 0);
-+
-+  switch (format) {
-+    /* all packed formats have the same calculation, ie. rowstride * height
-+     */
-+    case GST_VIDEO_FORMAT_RGBx:
-+    case GST_VIDEO_FORMAT_BGRx:
-+    case GST_VIDEO_FORMAT_xRGB:
-+    case GST_VIDEO_FORMAT_xBGR:
-+    case GST_VIDEO_FORMAT_RGBA:
-+    case GST_VIDEO_FORMAT_BGRA:
-+    case GST_VIDEO_FORMAT_ARGB:
-+    case GST_VIDEO_FORMAT_ABGR:
-+    case GST_VIDEO_FORMAT_RGB:
-+    case GST_VIDEO_FORMAT_BGR:
-+    case GST_VIDEO_FORMAT_YUY2:
-+    case GST_VIDEO_FORMAT_YVYU:
-+    case GST_VIDEO_FORMAT_UYVY:
-+    case GST_VIDEO_FORMAT_AYUV:
-+    case GST_VIDEO_FORMAT_v210:
-+    case GST_VIDEO_FORMAT_v216:
-+      return GST_ROUND_UP_4 (rowstride * height);
-+
-+    /* these planar formats have 2x sub-sampling in the vertical direction,
-+     * so U/V have half as many rows as Y:
-+     */
-+    case GST_VIDEO_FORMAT_I420:
-+    case GST_VIDEO_FORMAT_YV12:
-+      return GST_ROUND_UP_4 (2 * rowstride * height);
-+
-+    /* these planar formats have no sub-sampling in the vertical direction,
-+     * so each plane has 'height' number of rows
-+     */
-+    case GST_VIDEO_FORMAT_Y41B:
-+    case GST_VIDEO_FORMAT_Y42B:
-+    case GST_VIDEO_FORMAT_Y444:
-+      return GST_ROUND_UP_4 (3 * rowstride * height);
-+    default:
-+      return 0;
-+  }
-+}
-+
-+/**
-  * gst_video_format_convert:
-  * @format: a #GstVideoFormat
-  * @width: the width of video
-diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h
-index 162a766..ed20179 100644
---- a/gst-libs/gst/video/video.h
-+++ b/gst-libs/gst/video/video.h
-@@ -33,7 +33,7 @@ G_BEGIN_DECLS
-  * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV
-  * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped)
-  * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
-- * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) 
-+ * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
-  * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
-  * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last
-  * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last
-@@ -167,13 +167,13 @@ typedef enum {
- 
- #define GST_VIDEO_CAPS_RGBx \
-     __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3)
--  
-+
- #define GST_VIDEO_CAPS_xRGB \
-     __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4)
--  
-+
- #define GST_VIDEO_CAPS_BGRx \
-     __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1)
--  
-+
- #define GST_VIDEO_CAPS_xBGR \
-     __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2)
- 
-@@ -181,13 +181,13 @@ typedef enum {
- 
- #define GST_VIDEO_CAPS_RGBA \
-     __GST_VIDEO_CAPS_MAKE_32A (1, 2, 3, 4)
--  
-+
- #define GST_VIDEO_CAPS_ARGB \
-     __GST_VIDEO_CAPS_MAKE_32A (2, 3, 4, 1)
--  
-+
- #define GST_VIDEO_CAPS_BGRA \
-     __GST_VIDEO_CAPS_MAKE_32A (3, 2, 1, 4)
--  
-+
- #define GST_VIDEO_CAPS_ABGR \
-     __GST_VIDEO_CAPS_MAKE_32A (4, 3, 2, 1)
- 
-@@ -203,9 +203,9 @@ typedef enum {
-   #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
-       GST_VIDEO_CAPS_xRGB
- #endif
--      
-+
- /* 15/16 bit */
--  
-+
- #define GST_VIDEO_CAPS_RGB_16                                           \
-             "video/x-raw-rgb, "                                         \
-             "bpp = (int) 16, "                                          \
-@@ -237,6 +237,16 @@ typedef enum {
-         "height = " GST_VIDEO_SIZE_RANGE ", "                           \
-         "framerate = " GST_VIDEO_FPS_RANGE
- 
-+
-+#define GST_VIDEO_CAPS_YUV_STRIDED(fourcc, rowstride)                   \
-+        GST_VIDEO_CAPS_YUV(fourcc) "; "                                 \
-+        "video/x-raw-yuv-strided, "                                     \
-+        "format = (fourcc) " fourcc ", "                                \
-+        "rowstride = (int) " rowstride ", "                             \
-+        "width = " GST_VIDEO_SIZE_RANGE ", "                            \
-+        "height = " GST_VIDEO_SIZE_RANGE ", "                           \
-+        "framerate = " GST_VIDEO_FPS_RANGE
-+
- /* buffer flags */
- 
- /**
-@@ -276,13 +286,15 @@ gboolean gst_video_get_size   (GstPad *pad,
-                                gint   *height);
- 
- gboolean gst_video_calculate_display_ratio (guint *dar_n, guint *dar_d,
--            guint video_width, guint video_height, 
--            guint video_par_n, guint video_par_d, 
-+            guint video_width, guint video_height,
-+            guint video_par_n, guint video_par_d,
-             guint display_par_n, guint display_par_d);
- 
- gboolean gst_video_format_parse_caps (GstCaps *caps, GstVideoFormat *format,
-     int *width, int *height);
- gboolean gst_video_format_parse_caps_interlaced (GstCaps *caps, gboolean *interlaced);
-+gboolean gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format,
-+    int *width, int *height, int *rowstride);
- gboolean gst_video_parse_caps_framerate (GstCaps *caps,
-     int *fps_n, int *fps_d);
- gboolean gst_video_parse_caps_pixel_aspect_ratio (GstCaps *caps,
-@@ -293,6 +305,9 @@ GstCaps * gst_video_format_new_caps (GstVideoFormat format,
- GstCaps * gst_video_format_new_caps_interlaced (GstVideoFormat format,
-     int width, int height, int framerate_n, int framerate_d,
- 						int par_n, int par_d, gboolean interlaced);
-+GstCaps * gst_video_format_new_caps_strided (GstVideoFormat format,
-+    int width, int height, int rowstride,
-+    int framerate_n, int framerate_d, int par_n, int par_d);
- GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc);
- guint32 gst_video_format_to_fourcc (GstVideoFormat format);
- gboolean gst_video_format_is_rgb (GstVideoFormat format);
-@@ -308,6 +323,8 @@ int gst_video_format_get_component_height (GstVideoFormat format, int component,
- int gst_video_format_get_component_offset (GstVideoFormat format, int component,
-     int width, int height);
- int gst_video_format_get_size (GstVideoFormat format, int width, int height);
-+int gst_video_format_get_size_strided (GstVideoFormat format,
-+    int width, int height, int rowstride);
- gboolean gst_video_format_convert (GstVideoFormat format, int width, int height,
-     int fps_n, int fps_d,
-     GstFormat src_format, gint64 src_value,
-diff --git a/gst/audioconvert/Makefile.am b/gst/audioconvert/Makefile.am
-index 94978bb..2d273db 100644
---- a/gst/audioconvert/Makefile.am
-+++ b/gst/audioconvert/Makefile.am
-@@ -5,6 +5,7 @@ libgstaudioconvert_la_SOURCES = \
- 	audioconvert.c \
- 	gstchannelmix.c \
- 	gstaudioquantize.c \
-+	armv7.c \
- 	plugin.c
- 
- libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-diff --git a/gst/audioconvert/armv7.c b/gst/audioconvert/armv7.c
-new file mode 100644
-index 0000000..e39d29d
---- /dev/null
-+++ b/gst/audioconvert/armv7.c
-@@ -0,0 +1,209 @@
-+/* GStreamer
-+ *
-+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
-+ *
-+ * Description: NEON/VFP accelerated functions for armv7 architecture
-+ *  Created on: Aug 8, 2009
-+ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#ifdef __ARM_NEON__
-+#include <arm_neon.h>
-+#include <string.h>
-+
-+#include "audioconvert.h"
-+
-+
-+void
-+gst_audio_quantize_quantize_signed_tpdf_none (AudioConvertCtx *ctx,
-+    gint32 *src, gint32 *dst, gint count)
-+{
-+  static guint32 state[4] = {
-+      0xdeadbeef,
-+      0x305b8cc9,
-+      0x6c46ec93,
-+      0xad13b0cd
-+  };
-+
-+  gint scale = ctx->out_scale;
-+  count *= ctx->out.channels;
-+
-+  if (scale > 0) {
-+    guint32 mask = 0xffffffff & (0xffffffff << scale);
-+    guint32 bias = (1U << (scale - 1)) >> 1;
-+    gint32 dither = (1<<(scale - 1));
-+
-+    int32x4_t  vrand;
-+    uint32x4_t vstate;
-+    uint32x4_t v12345;
-+    int32x4_t  vtmp;
-+    uint32x4_t vmask;
-+
-+    vstate = vld1q_u32 (state);
-+    v12345 = vmovq_n_u32 (12345);
-+    vmask  = vmovq_n_u32 (mask);
-+
-+    /* until we have less 4 words less to process, use vector instructions
-+     * to do everything 4x at a time:
-+     */
-+    for (;;count-=4) {
-+      int64x2_t  vtmp_lo;
-+      int64x2_t  vtmp_hi;
-+      uint32x4_t vstate2;
-+      int32x2_t  vrand_lo;
-+      int32x2_t  vrand_hi;
-+
-+      /* generate next eight random words: (see gst_fast_random_uint32())
-+       *
-+       *    state = state * 1103515245 + 12345
-+       */
-+      vstate2 = vmulq_n_u32 (vstate, 1103515245);
-+      vstate2 = vaddq_u32 (vstate2, v12345);
-+      vstate  = vmulq_n_u32 (vstate2, 1103515245);
-+      vstate  = vaddq_u32 (vstate2, v12345);
-+
-+      /* generate next four scaled random values:
-+       *
-+       *    gint32 start = bias - dither;
-+       *    gint32 end = bias + dither - 1;
-+       *    gint64 tmp1 = gst_fast_random_uint32 ();
-+       *    gint64 tmp2 = gst_fast_random_uint32 ();
-+       *    rand = (gint32)(((tmp1+tmp2) * (end - start)) / (1LLU<<32) + start);
-+       *
-+       * need to split vstate and vstate2 into 2*2 int64x2_t and add....
-+       */
-+      vstate2 = vaddq_u32 (vstate, vstate2);     /* tmp1+tmp2 */
-+      vtmp_lo = vreinterpretq_s64_u64 (          /* * (end-start) */
-+          vmull_n_u32 (vget_low_u32 (vstate2), (2*dither) - 1));
-+      vtmp_hi = vreinterpretq_s64_u64 (          /* * (end-start) */
-+          vmull_n_u32 (vget_high_u32 (vstate2), (2*dither) - 1));
-+
-+      vtmp_lo = vshrq_n_s64 (vtmp_lo, 32);       /* / (1LLU<<32) */
-+      vtmp_hi = vshrq_n_s64 (vtmp_hi, 32);       /* / (1LLU<<32) */
-+
-+
-+      /* now want to put vtmp_hi and vtmp_lo back together..
-+       * then add 'start' (bias-dither).. which is negative..
-+       */
-+      vrand_lo = vmovn_s64 (vtmp_lo);
-+      vrand_hi = vmovn_s64 (vtmp_hi);
-+      vrand    = vcombine_s32 (vrand_lo, vrand_hi);
-+      vrand    = vaddq_s32 (vrand, vmovq_n_s32 (bias-dither));
-+
-+      /* load next 4 words:
-+       */
-+      vtmp = vld1q_s32 (src);
-+      src += 4;
-+
-+      /* perform saturating add of random noise... we don't want the
-+       * value to wrap around:
-+       *
-+       * XXX I *think* vqaddq will handle saturation for underflow too..
-+       */
-+      vtmp = vqaddq_s32 (vtmp, vrand);
-+      vtmp = vreinterpretq_s32_u32 (
-+          vandq_u32 (vreinterpretq_u32_s32 (vtmp), vmask));
-+
-+      /* we check for less than four remaining words at the end, before
-+       * we store the result back.. the assumption is that it shouldn't
-+       * cause a segfault to read past the end of 'src', and there is no
-+       * harm in processing a few garbage words.  But we definitely don't
-+       * want to write past the end of 'dst'
-+       */
-+      if (count<4) break;
-+
-+      /* store 4 words to result:
-+       */
-+      vst1q_s32 (dst, vtmp);
-+      dst += 4;
-+    }
-+
-+    vst1q_u32 (state, vstate);
-+
-+    /* at this point, we could have 0-3 result bytes in vtmp to write
-+     * back out to 'dst':
-+     */
-+    if (count) {
-+      gint32 tmpdst[4];
-+      gint32 *tmpp = tmpdst;
-+
-+      vst1q_s32 (tmpdst, vtmp);
-+
-+      while (count--) {
-+        *dst++ = *tmpp++;
-+      }
-+    }
-+
-+  } else {
-+    memmove (dst, src, count);
-+  }
-+}
-+
-+void
-+gst_audio_convert_unpack_float_le (gfloat * src, gint32 * dst, gint s, gint count)
-+{
-+  float32x4_t vsrc;
-+  float32x4_t v05;
-+  int32x4_t   vdst;
-+
-+  v05 = vmovq_n_f32 (0.5);
-+
-+  for (;;count-=4) {
-+
-+    /* load next 4 words:
-+     */
-+    vsrc = vld1q_f32 ((float32_t *)src);
-+    src += 4;
-+
-+    /* convert to int:
-+     */
-+    vsrc = vmulq_n_f32 (vsrc, 2147483647.0);
-+    vsrc = vaddq_f32 (vsrc, v05);
-+    vdst = vcvtq_s32_f32 (vsrc);
-+
-+    /* we check for less than four remaining words at the end, before
-+     * we store the result back.. the assumption is that it shouldn't
-+     * cause a segfault to read past the end of 'src', and there is no
-+     * harm in processing a few garbage words.  But we definitely don't
-+     * want to write past the end of 'dst'
-+     */
-+    if (count<4) break;
-+
-+    /* store 4 words to result:
-+     */
-+    vst1q_s32 (dst, vdst);
-+    dst += 4;
-+  }
-+
-+  /* at this point, we could have 0-3 result bytes in vtmp to write
-+   * back out to 'dst':
-+   */
-+  if (count) {
-+    gint32 tmpdst[4];
-+    gint32 *tmpp = tmpdst;
-+
-+    vst1q_s32 (tmpdst, vdst);
-+
-+    while (count--) {
-+      *dst++ = *tmpp++;
-+    }
-+  }
-+}
-+
-+
-+#endif
-diff --git a/gst/audioconvert/audioconvert.c b/gst/audioconvert/audioconvert.c
-index 4780324..c18d217 100644
---- a/gst/audioconvert/audioconvert.c
-+++ b/gst/audioconvert/audioconvert.c
-@@ -38,11 +38,11 @@
-  * unpack code
-  */
- #define MAKE_UNPACK_FUNC_NAME(name)                                     \
--audio_convert_unpack_##name
-+gst_audio_convert_unpack_##name
- 
- /* unpack from integer to signed integer 32 */
- #define MAKE_UNPACK_FUNC_II(name, stride, sign, READ_FUNC)              \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
-         gint scale, gint count)                                         \
- {                                                                       \
-@@ -54,7 +54,7 @@ MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
- 
- /* unpack from float to signed integer 32 */
- #define MAKE_UNPACK_FUNC_FI(name, type, READ_FUNC)                            \
--static void                                                                   \
-+void __attribute__((weak))                                                    \
- MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
- {                                                                             \
-   gdouble temp;                                                               \
-@@ -68,7 +68,7 @@ MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
- 
- /* unpack from float to float 64 (double) */
- #define MAKE_UNPACK_FUNC_FF(name, type, FUNC)                                 \
--static void                                                                   \
-+void __attribute__((weak))                                                    \
- MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
-     gint count)                                                               \
- {                                                                             \
-@@ -78,7 +78,7 @@ MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
- 
- /* unpack from int to float 64 (double) */
- #define MAKE_UNPACK_FUNC_IF(name, stride, sign, READ_FUNC)                    \
--static void                                                                   \
-+void __attribute__((weak))                                                    \
- MAKE_UNPACK_FUNC_NAME (name) (guint8 * src, gdouble * dst, gint scale,        \
-     gint count)                                                               \
- {                                                                             \
-@@ -158,7 +158,7 @@ audio_convert_pack_##name
- 
- /* pack from signed integer 32 to integer */
- #define MAKE_PACK_FUNC_II(name, stride, sign, WRITE_FUNC)               \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
-         gint scale, gint count)                                         \
- {                                                                       \
-@@ -172,7 +172,7 @@ MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
- 
- /* pack from signed integer 32 to float */
- #define MAKE_PACK_FUNC_IF(name, type, FUNC)                             \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
-     gint count)                                                         \
- {                                                                       \
-@@ -182,7 +182,7 @@ MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
- 
- /* pack from float 64 (double) to float */
- #define MAKE_PACK_FUNC_FF(name, type, FUNC)                             \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
-     gint count)                                                         \
- {                                                                       \
-@@ -194,7 +194,7 @@ MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
-  * the floats are already in the correct range. Only a cast is needed.
-  */
- #define MAKE_PACK_FUNC_FI_S(name, stride, WRITE_FUNC)                   \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
-     gint count)                                                         \
- {                                                                       \
-@@ -212,7 +212,7 @@ MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
-  * and an addition of 2^(target_depth-1) to get in the correct unsigned
-  * range. */
- #define MAKE_PACK_FUNC_FI_U(name, stride, WRITE_FUNC)                   \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
-     gint count)                                                         \
- {                                                                       \
-diff --git a/gst/audioconvert/gstaudioquantize.c b/gst/audioconvert/gstaudioquantize.c
-index 2155397..be959c4 100644
---- a/gst/audioconvert/gstaudioquantize.c
-+++ b/gst/audioconvert/gstaudioquantize.c
-@@ -46,7 +46,7 @@ gst_audio_quantize_quantize_##name
- 
- #define MAKE_QUANTIZE_FUNC_I(name, DITHER_INIT_FUNC, ADD_DITHER_FUNC,   \
-                              ROUND_FUNC)                                \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src,      \
-                                 gint32 *dst, gint count)                \
- {                                                                       \
-@@ -86,7 +86,7 @@ MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src,      \
- #define MAKE_QUANTIZE_FUNC_F(name, DITHER_INIT_FUNC, NS_INIT_FUNC,      \
-                              ADD_NS_FUNC, ADD_DITHER_FUNC,              \
-                              UPDATE_ERROR_FUNC)                         \
--static void                                                             \
-+void __attribute__((weak))                                              \
- MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gdouble *src,     \
-                                 gdouble *dst, gint count)               \
- {                                                                       \
-diff --git a/gst/audioconvert/gstchannelmix.c b/gst/audioconvert/gstchannelmix.c
-index 1dbfcce..9ace1cb 100644
---- a/gst/audioconvert/gstchannelmix.c
-+++ b/gst/audioconvert/gstchannelmix.c
-@@ -663,7 +663,7 @@ gst_channel_mix_passthrough (AudioConvertCtx * this)
- 
- /* IMPORTANT: out_data == in_data is possible, make sure to not overwrite data
-  * you might need later on! */
--void
-+void __attribute__((weak))
- gst_channel_mix_mix_int (AudioConvertCtx * this,
-     gint32 * in_data, gint32 * out_data, gint samples)
- {
-@@ -702,7 +702,7 @@ gst_channel_mix_mix_int (AudioConvertCtx * this,
-   }
- }
- 
--void
-+void __attribute__((weak))
- gst_channel_mix_mix_float (AudioConvertCtx * this,
-     gdouble * in_data, gdouble * out_data, gint samples)
- {
-diff --git a/gst/stride/Makefile.am b/gst/stride/Makefile.am
-new file mode 100644
-index 0000000..1adc197
---- /dev/null
-+++ b/gst/stride/Makefile.am
-@@ -0,0 +1,15 @@
-+plugin_LTLIBRARIES = libgststridetransform.la
-+
-+libgststridetransform_la_SOURCES = \
-+	gststridetransform.c \
-+	plugin.c
-+
-+libgststridetransform_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-+libgststridetransform_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-+libgststridetransform_la_LIBADD = \
-+	$(top_builddir)/gst-libs/gst/video/libgstvideo- at GST_MAJORMINOR@.la \
-+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
-+libgststridetransform_la_LIBTOOLFLAGS = --tag=disable-static
-+
-+noinst_HEADERS = \
-+	gststridetransform.h
-diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c
-new file mode 100644
-index 0000000..ea52500
---- /dev/null
-+++ b/gst/stride/gststridetransform.c
-@@ -0,0 +1,471 @@
-+/* GStreamer
-+ *
-+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
-+ *
-+ * Description: V4L2 sink element
-+ *  Created on: Jul 30, 2009
-+ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+
-+/**
-+ * SECTION:element-stridetransform
-+ *
-+ * stridetransform can be used to convert between video buffers
-+ * with and without stride, or between buffers with differing
-+ * stride
-+ *
-+ * <refsect2>
-+ * <title>Example launch lines</title>
-+ * |[
-+ * gst-launch videotestsrc ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 !
-+ * stridetransform ! video/x-raw-yuv-strided,format=(fourcc)YUY2,width=320,height=240,rowstride=700,framerate=30/1 !
-+ * stridetransform ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 !
-+ * v4l2sink
-+ * ]| This pipeline ???? TODO
-+ * </refsect2>
-+ */
-+
-+
-+#ifdef HAVE_CONFIG_H
-+#include <config.h>
-+#endif
-+
-+#include <string.h>
-+#include <gst/video/video.h>
-+
-+#include "gst/gst-i18n-plugin.h"
-+#include "gststridetransform.h"
-+
-+
-+static const GstElementDetails stridetransform_details =
-+GST_ELEMENT_DETAILS ("Stride transform",
-+    "Filter/Converter/Video",
-+    "Convert between video buffers with and without stride, or with differing stride",
-+    "Rob Clark <rob at ti.com>,");
-+
-+
-+/* TODO: add rgb formats too! */
-+#define SUPPORTED_CAPS                                                        \
-+  GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY }", "[ 0, max ]")
-+
-+
-+static GstStaticPadTemplate src_template =
-+GST_STATIC_PAD_TEMPLATE ("src",
-+    GST_PAD_SRC,
-+    GST_PAD_ALWAYS,
-+    GST_STATIC_CAPS (SUPPORTED_CAPS)
-+    );
-+
-+static GstStaticPadTemplate sink_template =
-+GST_STATIC_PAD_TEMPLATE ("sink",
-+    GST_PAD_SINK,
-+    GST_PAD_ALWAYS,
-+    GST_STATIC_CAPS (SUPPORTED_CAPS)
-+    );
-+
-+
-+GST_DEBUG_CATEGORY (stridetransform_debug);
-+#define GST_CAT_DEFAULT stridetransform_debug
-+
-+/* type functions */
-+static void gst_stride_transform_dispose (GObject *obj);
-+
-+/* GstBaseTransform functions */
-+static gboolean gst_stride_transform_get_unit_size (GstBaseTransform *base,
-+    GstCaps *caps, guint *size);
-+static gboolean gst_stride_transform_transform_size (GstBaseTransform *base,
-+    GstPadDirection direction,
-+    GstCaps *caps, guint size,
-+    GstCaps *othercaps, guint *othersize);
-+static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform *base,
-+    GstPadDirection direction, GstCaps *caps);
-+static gboolean gst_stride_transform_set_caps (GstBaseTransform *base,
-+    GstCaps *incaps, GstCaps *outcaps);
-+static GstFlowReturn gst_stride_transform_transform (GstBaseTransform *base,
-+    GstBuffer *inbuf, GstBuffer *outbuf);
-+static GstFlowReturn gst_stride_transform_transform_ip (GstBaseTransform *base,
-+    GstBuffer *buf);
-+
-+GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, GST_TYPE_VIDEO_FILTER);
-+
-+
-+static void
-+gst_stride_transform_base_init (gpointer g_class)
-+{
-+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
-+
-+  GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, "stride transform element");
-+
-+  gst_element_class_set_details (gstelement_class, &stridetransform_details);
-+
-+  gst_element_class_add_pad_template (gstelement_class,
-+      gst_static_pad_template_get (&sink_template));
-+  gst_element_class_add_pad_template (gstelement_class,
-+      gst_static_pad_template_get (&src_template));
-+}
-+
-+static void
-+gst_stride_transform_class_init (GstStrideTransformClass *klass)
-+{
-+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-+  GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass);
-+
-+  gobject_class->dispose = gst_stride_transform_dispose;
-+
-+  basetransform_class->get_unit_size =
-+      GST_DEBUG_FUNCPTR (gst_stride_transform_get_unit_size);
-+  basetransform_class->transform_size =
-+      GST_DEBUG_FUNCPTR (gst_stride_transform_transform_size);
-+  basetransform_class->transform_caps =
-+      GST_DEBUG_FUNCPTR (gst_stride_transform_transform_caps);
-+  basetransform_class->set_caps =
-+      GST_DEBUG_FUNCPTR (gst_stride_transform_set_caps);
-+  basetransform_class->transform_ip =
-+      GST_DEBUG_FUNCPTR (gst_stride_transform_transform_ip);
-+  basetransform_class->transform =
-+      GST_DEBUG_FUNCPTR (gst_stride_transform_transform);
-+
-+  basetransform_class->passthrough_on_same_caps = TRUE;
-+}
-+
-+static void
-+gst_stride_transform_init (GstStrideTransform *self, GstStrideTransformClass *klass)
-+{
-+  GST_DEBUG_OBJECT (self, "not implemented");
-+}
-+
-+
-+static void
-+gst_stride_transform_dispose (GObject *object)
-+{
-+  GstStrideTransform *self = GST_STRIDE_TRANSFORM (object);
-+  GST_DEBUG_OBJECT (self, "not implemented");
-+  G_OBJECT_CLASS (parent_class)->dispose (object);
-+}
-+
-+/**
-+ * figure out the required buffer size based on @caps
-+ */
-+static gboolean
-+gst_stride_transform_get_unit_size (GstBaseTransform *base,
-+    GstCaps *caps, guint *size)
-+{
-+  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
-+  GstVideoFormat format;
-+  gint width, height, rowstride;
-+
-+  g_return_val_if_fail (gst_video_format_parse_caps_strided (
-+      caps, &format, &width, &height, &rowstride), FALSE);
-+
-+  *size = gst_video_format_get_size_strided (format, width, height, rowstride);
-+
-+  GST_DEBUG_OBJECT (self,
-+      "format=%d, width=%d, height=%d, rowstride=%d -> size=%d",
-+      format, width, height, rowstride, *size);
-+
-+  return TRUE;
-+}
-+
-+/**
-+ * Default transform_size function is no good, as it assumes that the output
-+ * buffer size is a multiple of the unit size.. which doesn't hold true.
-+ */
-+static gboolean
-+gst_stride_transform_transform_size (GstBaseTransform *base,
-+    GstPadDirection direction,
-+    GstCaps *caps, guint size,
-+    GstCaps *othercaps, guint *othersize)
-+{
-+  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
-+  guint idx = (direction == GST_PAD_SINK) ? 0 : 1;
-+
-+  if (self->cached_caps[idx] != othercaps)
-+  {
-+    if (!gst_stride_transform_get_unit_size (base, othercaps,
-+        &(self->cached_size[idx])))
-+    {
-+      return FALSE;
-+    }
-+  }
-+
-+  *othersize = self->cached_size[idx];
-+
-+  return TRUE;
-+}
-+
-+
-+
-+/**
-+ * helper to add all fields, other than rowstride to @caps, copied from @s.
-+ */
-+static void
-+add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rowstride)
-+{
-+  gint idx;
-+  GstStructure *new_s = gst_structure_new (name, NULL);
-+
-+  if (rowstride) {
-+    gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
-+  }
-+
-+  idx = gst_structure_n_fields (s) - 1;
-+  while (idx >= 0) {
-+    const gchar *name = gst_structure_nth_field_name (s, idx);
-+    if (strcmp ("rowstride", name)) {
-+      const GValue *val = gst_structure_get_value (s, name);
-+      gst_structure_set_value (new_s, name, val);
-+    }
-+    idx--;
-+  }
-+
-+  gst_caps_merge_structure (caps, new_s);
-+}
-+
-+
-+/**
-+ * we can transform @caps to strided or non-strided caps with otherwise
-+ * identical parameters
-+ */
-+static GstCaps *
-+gst_stride_transform_transform_caps (GstBaseTransform *base,
-+    GstPadDirection direction, GstCaps *caps)
-+{
-+  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
-+  GstCaps *ret;
-+  GstStructure *s;
-+
-+  g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), NULL);
-+
-+  GST_DEBUG_OBJECT (self, "direction=%d, caps=%p", direction, caps);
-+  LOG_CAPS (self, caps);
-+
-+  ret = gst_caps_new_empty ();
-+  s = gst_caps_get_structure (caps, 0);
-+
-+  if (gst_structure_has_name (s, "video/x-raw-yuv") ||
-+      gst_structure_has_name (s, "video/x-raw-yuv-strided")) {
-+
-+    add_all_fields (ret, "video/x-raw-yuv", s, FALSE);
-+    add_all_fields (ret, "video/x-raw-yuv-strided", s, TRUE);
-+
-+  } else if (gst_structure_has_name (s, "video/x-raw-rgb") ||
-+      gst_structure_has_name (s, "video/x-raw-rgb-strided")) {
-+
-+    add_all_fields (ret, "video/x-raw-rgb", s, FALSE);
-+    add_all_fields (ret, "video/x-raw-rgb-strided", s, TRUE);
-+
-+  }
-+
-+  LOG_CAPS (self, ret);
-+
-+  return ret;
-+}
-+
-+/**
-+ * at this point, we have identical fourcc, width, and height for @incaps
-+ * and @outcaps..  so we need to extract these to use for transforming,
-+ * plus the requested rowstride of the @incaps and @outcaps
-+ */
-+static gboolean
-+gst_stride_transform_set_caps (GstBaseTransform *base,
-+    GstCaps *incaps, GstCaps *outcaps)
-+{
-+  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
-+  GstVideoFormat format;
-+  gint width, height;
-+
-+  LOG_CAPS (self, incaps);
-+  LOG_CAPS (self, outcaps);
-+
-+  g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps,
-+      &self->format, &self->width, &self->height, &self->in_rowstride), FALSE);
-+  g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps,
-+      &format, &width, &height, &self->out_rowstride), FALSE);
-+
-+  g_return_val_if_fail (self->format == format, FALSE);
-+  g_return_val_if_fail (self->width  == width,  FALSE);
-+  g_return_val_if_fail (self->height == height, FALSE);
-+
-+  return TRUE;
-+}
-+
-+/* ************************************************************************* */
-+
-+/**
-+ * Convert from one stride to another... like memmove, but can convert stride in
-+ * the process.  This function is not aware of pixels, only of bytes.  So widths
-+ * are given in bytes, not pixels.  The new_buf and orig_buf can point to the
-+ * same buffers to do an in-place conversion, but the buffer should be large
-+ * enough.
-+ */
-+static void
-+stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height)
-+{
-+  int row;
-+
-+  GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d",
-+      new_buf, orig_buf, new_width, orig_width, height);
-+  /* if increasing the stride, work from bottom-up to avoid overwriting data
-+   * that has not been moved yet.. otherwise, work in the opposite order,
-+   * for the same reason.
-+   */
-+  if (new_width > orig_width) {
-+    for (row=height-1; row>=0; row--) {
-+      memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width);
-+    }
-+  } else {
-+    for (row=0; row<height; row++) {
-+      memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width);
-+    }
-+  }
-+}
-+
-+
-+/**
-+ * Convert from a non-strided buffer to strided.  The two buffer pointers could
-+ * be pointing to the same memory block for in-place transform.. assuming that
-+ * the buffer is large enough
-+ *
-+ * @strided:    the pointer to the resulting strided buffer
-+ * @unstrided:  the pointer to the initial unstrided buffer
-+ * @fourcc:     the color format
-+ * @stride:     the stride, in bytes
-+ * @width:      the width in pixels
-+ * @height:     the height in pixels
-+ */
-+static GstFlowReturn
-+stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided)
-+{
-+  gint width  = self->width;
-+  gint height = self->height;
-+  gint stride = self->out_rowstride;
-+
-+  switch (self->format) {
-+#if 0 /* TODO */
-+    case GST_VIDEO_FORMAT_NV12:
-+      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
-+      stridemove (strided, unstrided, stride, width, height * 1.5);
-+      return GST_FLOW_OK;
-+#endif
-+    case GST_VIDEO_FORMAT_I420:
-+    case GST_VIDEO_FORMAT_YV12:
-+      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
-+      stridemove (
-+          strided + (int)(height*stride*1.5),
-+          unstrided + (int)(height*width*1.5),
-+          stride, width/2, height);                             /* move U/V */
-+      stridemove (
-+          strided + (height*stride),
-+          unstrided + (height*width),
-+          stride, width/2, height);                             /* move V/U */
-+      stridemove (strided, unstrided, stride, width, height);   /* move Y */
-+      return GST_FLOW_OK;
-+    case GST_VIDEO_FORMAT_YUY2:
-+    case GST_VIDEO_FORMAT_UYVY:
-+      g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR);
-+      stridemove (strided, unstrided, stride, width*2, height);
-+      return GST_FLOW_OK;
-+    default:
-+      GST_WARNING ("unknown color format!\n");
-+      return GST_FLOW_ERROR;
-+  }
-+}
-+
-+
-+/**
-+ * Convert from a strided buffer to non-strided.  The two buffer pointers could
-+ * be pointing to the same memory block for in-place transform..
-+ *
-+ * @unstrided:  the pointer to the resulting unstrided buffer
-+ * @strided:    the pointer to the initial strided buffer
-+ */
-+static GstFlowReturn
-+unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided)
-+{
-+  gint width  = self->width;
-+  gint height = self->height;
-+  gint stride = self->in_rowstride;
-+
-+  switch (self->format) {
-+#if 0 /* TODO */
-+    case GST_VIDEO_FORMAT_NV12:
-+      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
-+      stridemove (unstrided, strided, width, stride, height * 1.5);
-+      return GST_FLOW_OK;
-+#endif
-+    case GST_VIDEO_FORMAT_I420:
-+    case GST_VIDEO_FORMAT_YV12:
-+      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
-+      stridemove (unstrided, strided, width, stride, height);   /* move Y */
-+      stridemove (
-+          unstrided + (height*width),
-+          strided + (height*stride),
-+          width/2, stride, height);                             /* move V/U */
-+      stridemove (
-+          unstrided + (int)(height*width*1.5),
-+          strided + (int)(height*stride*1.5),
-+          width/2, stride, height);                             /* move U/V */
-+      return GST_FLOW_OK;
-+    case GST_VIDEO_FORMAT_YUY2:
-+    case GST_VIDEO_FORMAT_UYVY:
-+      g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR);
-+      stridemove (unstrided, strided, width*2, stride, height);
-+      return GST_FLOW_OK;
-+    default:
-+      GST_WARNING ("unknown color format!\n");
-+      return GST_FLOW_ERROR;
-+  }
-+}
-+
-+
-+static GstFlowReturn
-+gst_stride_transform_transform (GstBaseTransform *base,
-+    GstBuffer *inbuf, GstBuffer *outbuf)
-+{
-+  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
-+
-+  GST_DEBUG_OBJECT (self, "inbuf=%p (size=%d), outbuf=%p (size=%d)",
-+      inbuf, GST_BUFFER_SIZE (inbuf),
-+      outbuf, GST_BUFFER_SIZE (outbuf));
-+
-+  if (self->in_rowstride && self->out_rowstride) {
-+    GST_DEBUG_OBJECT (self, "not implemented");  // TODO
-+    return GST_FLOW_ERROR;
-+  } else if (self->in_rowstride) {
-+    return unstridify (self,
-+        GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf));
-+  } else if (self->out_rowstride) {
-+    return stridify (self,
-+        GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf));
-+  }
-+
-+  GST_DEBUG_OBJECT (self, "this shouldn't happen!  in_rowstride=%d, out_rowstride=%d",
-+      self->in_rowstride, self->out_rowstride);
-+
-+  return GST_FLOW_ERROR;
-+}
-+
-+static GstFlowReturn
-+gst_stride_transform_transform_ip (GstBaseTransform *base,
-+    GstBuffer *buf)
-+{
-+  /* transform function is safe to call with same buffer ptr:
-+   */
-+  return gst_stride_transform_transform (base, buf, buf);
-+}
-diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h
-new file mode 100644
-index 0000000..481959e
---- /dev/null
-+++ b/gst/stride/gststridetransform.h
-@@ -0,0 +1,80 @@
-+/* GStreamer
-+ *
-+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
-+ *
-+ * Description: V4L2 sink element
-+ *  Created on: Jul 2, 2009
-+ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#ifndef __GSTSTRIDETRANSFORM_H__
-+#define __GSTSTRIDETRANSFORM_H__
-+
-+
-+#include <gst/video/gstvideofilter.h>
-+#include <gst/video/video.h>
-+
-+
-+G_BEGIN_DECLS
-+
-+#define GST_TYPE_STRIDE_TRANSFORM \
-+  (gst_stride_transform_get_type())
-+#define GST_STRIDE_TRANSFORM(obj) \
-+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransform))
-+#define GST_STRIDE_TRANSFORM_CLASS(klass) \
-+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransformClass))
-+#define GST_IS_STRIDE_TRANSFORM(obj) \
-+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STRIDE_TRANSFORM))
-+#define GST_IS_STRIDE_TRANSFORM_CLASS(klass) \
-+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STRIDE_TRANSFORM))
-+
-+typedef struct _GstStrideTransform GstStrideTransform;
-+typedef struct _GstStrideTransformClass GstStrideTransformClass;
-+
-+/**
-+ * GstStrideTransform:
-+ *
-+ * Opaque datastructure.
-+ */
-+struct _GstStrideTransform {
-+  GstVideoFilter videofilter;
-+
-+  /*< private >*/
-+  GstVideoFormat format;
-+  gint width, height;
-+  gint in_rowstride;
-+  gint out_rowstride;
-+
-+  /* for caching the tranform_size() results.. */
-+  GstCaps *cached_caps[2];
-+  guint cached_size[2];
-+};
-+
-+struct _GstStrideTransformClass {
-+  GstVideoFilterClass parent_class;
-+};
-+
-+GType gst_stride_transform_get_type (void);
-+
-+G_END_DECLS
-+
-+
-+#define LOG_CAPS(obj, caps)  GST_DEBUG_OBJECT (obj, "%s: %"GST_PTR_FORMAT, #caps, caps)
-+
-+
-+#endif /* __GSTSTRIDETRANSFORM_H__ */
-diff --git a/gst/stride/plugin.c b/gst/stride/plugin.c
-new file mode 100644
-index 0000000..7672bdc
---- /dev/null
-+++ b/gst/stride/plugin.c
-@@ -0,0 +1,45 @@
-+/* GStreamer
-+ *
-+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
-+ *
-+ * Description: V4L2 sink element
-+ *  Created on: Jul 30, 2009
-+ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include "gststridetransform.h"
-+
-+static gboolean
-+plugin_init (GstPlugin * plugin)
-+{
-+  if (!gst_element_register (plugin, "stridetransform",
-+          GST_RANK_PRIMARY, gst_stride_transform_get_type ()))
-+    return FALSE;
-+
-+  return TRUE;
-+}
-+
-+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-+    GST_VERSION_MINOR,
-+    "stridetransform",
-+    "Convert video from strided to non-strided, or between different row-strides",
-+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
--- 
-1.6.3.1
-
diff --git a/recipes/gstreamer/gst-plugins-base_0.10.25.bb b/recipes/gstreamer/gst-plugins-base_0.10.25.bb
deleted file mode 100644
index 9e82171..0000000
--- a/recipes/gstreamer/gst-plugins-base_0.10.25.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require gst-plugins.inc
-
-SRC_URI += "file://fix-playbin2.patch \
-            file://gst-plugins-base_rowstride.patch \
-"
-
-PR = "${INC_PR}.4"
-
-PROVIDES += "gst-plugins"
-
-# gst-plugins-base only builds the alsa plugin
-# if alsa has been built and is present.  You will
-# not get an error if this is not present, just 
-# a missing alsa plugin
-DEPENDS += "cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype  libxv libxrandr"
-
-
-SRC_URI[archive.md5sum] = "d29669dd79276c5cd94e1613c03cd9ab"
-SRC_URI[archive.sha256sum] = "0ab2f7e1d818e7af1be99c4eae02ba69d4a1b8f7e3527929a6426f1daa0d4607"
diff --git a/recipes/gstreamer/gst-plugins-base_0.10.31.bb b/recipes/gstreamer/gst-plugins-base_0.10.31.bb
deleted file mode 100644
index b68fffb..0000000
--- a/recipes/gstreamer/gst-plugins-base_0.10.31.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-require gst-plugins.inc
-
-SRC_URI += " \
-            file://ivorbis-thumb.patch \
-"
-
-SRC_URI[archive.md5sum] = "9baa0d87e81c88b2477a3554ab629c46"
-SRC_URI[archive.sha256sum] = "abb006c78222cfb69d31e983268d1d5219e9d4e0da24c6c4cd687968af7a33bd"
-
-PR = "${INC_PR}.1"
-
-PROVIDES += "gst-plugins"
-
-# gst-plugins-base only builds the alsa plugin
-# if alsa has been built and is present.  You will
-# not get an error if this is not present, just
-# a missing alsa plugin
-DEPENDS += "udev cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype  libxv libxrandr gtk+"
-
-# Needs a udev that enabled gudev, which isn't the default
-EXTRA_OECONF_append = " --with-gudev"
-
-do_configure_prepend() {
-	sed -i -e s:QtGui:NoQtGui:g ${S}/configure.ac
-}
-
diff --git a/recipes/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch b/recipes/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch
deleted file mode 100644
index 749c491..0000000
--- a/recipes/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-diff -uNr gst-plugins-good-0.10.15/sys/v4l2/gstv4l2src.c gst-plugins-good-0.10.15.new/sys/v4l2/gstv4l2src.c
---- gst-plugins-good-0.10.15/sys/v4l2/gstv4l2src.c	2009-05-11 19:00:07.000000000 -0500
-+++ gst-plugins-good-0.10.15.new/sys/v4l2/gstv4l2src.c	2009-06-22 09:51:50.000000000 -0500
-@@ -1377,14 +1377,22 @@
-       timestamp = gst_clock_get_time (clock) - timestamp;
-       gst_object_unref (clock);
- 
--      latency =
--          gst_util_uint64_scale_int (GST_SECOND, v4l2src->fps_d,
--          v4l2src->fps_n);
-+      /* we must have a framerate */
-+      if (v4l2src->fps_n <= 0 || v4l2src->fps_d <= 0) {
-+        GST_WARNING_OBJECT (src,
-+            "Can't give latency since framerate isn't fixated !");
-+        timestamp = GST_CLOCK_TIME_NONE;
-+      }
-+      else {
-+        latency =
-+            gst_util_uint64_scale_int (GST_SECOND, v4l2src->fps_d,
-+            v4l2src->fps_n);
- 
--      if (timestamp > latency)
--        timestamp -= latency;
--      else
--        timestamp = 0;
-+        if (timestamp > latency)
-+          timestamp -= latency;
-+        else
-+          timestamp = 0;
-+      }
-     }
- 
-     /* FIXME: use the timestamp from the buffer itself! */
diff --git a/recipes/gstreamer/gst-plugins-good_0.10.15.bb b/recipes/gstreamer/gst-plugins-good_0.10.15.bb
deleted file mode 100644
index f2b0a5a..0000000
--- a/recipes/gstreamer/gst-plugins-good_0.10.15.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require gst-plugins.inc
-
-PR = "r6"
-
-SRC_URI += "file://fix-unit-scale-asseration.patch"
-
-inherit gconf 
-
-DEPENDS += "libsoup-2.4 flac gst-plugins-base openssl popt esound"
-
-PACKAGES =+ "gst-plugin-gconfelements"
-FILES_gst-plugin-gconfelements += "${sysconfdir}/gconf"
-
-
-SRC_URI[archive.md5sum] = "19bc6cc07951b3382d1ac8525b20e83f"
-SRC_URI[archive.sha256sum] = "831f450a0fa18c881b00ec50e8916ed66ca0fecb53cd1939f0abcc02930f9847"
diff --git a/recipes/gstreamer/gst-rtsp_0.10.4.bb b/recipes/gstreamer/gst-rtsp_0.10.4.bb
deleted file mode 100644
index 265f0f7..0000000
--- a/recipes/gstreamer/gst-rtsp_0.10.4.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require gst-rtsp.inc
-
-SRC_URI[md5sum] = "8daaca1299aeb42c6aac47b30291005b"
-SRC_URI[sha256sum] = "1ebf3571d16dbab401f2ebf0362e3d67457fb88711ad15a4ab51bd3730267fb7"
diff --git a/recipes/gstreamer/gst-rtsp_0.10.5.bb b/recipes/gstreamer/gst-rtsp_0.10.5.bb
deleted file mode 100644
index dbaddc3..0000000
--- a/recipes/gstreamer/gst-rtsp_0.10.5.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require gst-rtsp.inc
-
-SRC_URI[md5sum] = "caca55e2ff497c0a327df3bc65a4a662"
-SRC_URI[sha256sum] = "a6f0a0c6c466683ee688aa8475623850fdacb549b2339a502831fdd3d74f984e"
diff --git a/recipes/gstreamer/gstreamer/po-makefile-fix.patch b/recipes/gstreamer/gstreamer/po-makefile-fix.patch
deleted file mode 100644
index 1cf665e..0000000
--- a/recipes/gstreamer/gstreamer/po-makefile-fix.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -urN gstreamer-0.10.17.orig/po/Makefile.in.in gstreamer-0.10.17/po/Makefile.in.in
---- gstreamer-0.10.17.orig/po/Makefile.in.in	2008-01-25 16:21:31.000000000 +0100
-+++ gstreamer-0.10.17/po/Makefile.in.in	2008-09-08 14:41:21.000000000 +0200
-@@ -30,7 +30,7 @@
- INSTALL = @INSTALL@
- INSTALL_DATA = @INSTALL_DATA@
- MKINSTALLDIRS = @MKINSTALLDIRS@
--mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
-+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
- 
- GMSGFMT = @GMSGFMT@
- MSGFMT = @MSGFMT@
diff --git a/recipes/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch b/recipes/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch
deleted file mode 100644
index 6733e6b..0000000
--- a/recipes/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Work around a glibc 2.6.1 bug with dlopen. We try to dlopen a .so file that
-only contains debug symbols (e.g. no architecture is set in the elf header)
-
-
-#0  0x4000a88c in _dl_relocate_object () from /lib/ld-linux.so.3
-(gdb) bt
-#0  0x4000a88c in _dl_relocate_object () from /lib/ld-linux.so.3
-#1  0x40011f68 in dl_open_worker () from /lib/ld-linux.so.3
-#2  0x4000d7e4 in _dl_catch_error () from /lib/ld-linux.so.3
-#3  0x400117d8 in _dl_open () from /lib/ld-linux.so.3
-#4  0x402fba84 in dlopen_doit () from /lib/libdl.so.2
-#5  0x4000d7e4 in _dl_catch_error () from /lib/ld-linux.so.3
-#6  0x402fbf50 in _dlerror_run () from /lib/libdl.so.2
-#7  0x402fb9bc in dlopen@@GLIBC_2.4 () from /lib/libdl.so.2
-#8  0x402f2790 in g_module_open () from /usr/lib/libgmodule-2.0.so.0
-#9  0x40078784 in gst_plugin_load_file (
-    filename=0x10a6c8 "/usr/lib/gstreamer-0.10/.debug/libgstcoreindexers.so", 
-    error=0x0) at gstplugin.c:481
-#10 0x4007e3c4 in gst_registry_scan_path_level (registry=0x27828, 
-    path=0x10a6a0 "/usr/lib/gstreamer-0.10/.debug", level=1) at gstregistry.c:891
-#11 0x4007df04 in gst_registry_scan_path_level (registry=0x27828, 
-
-
-Index: gstreamer-0.10.17/gst/gstregistry.c
-===================================================================
---- gstreamer-0.10.17.orig/gst/gstregistry.c	2008-11-14 23:30:48.000000000 +0100
-+++ gstreamer-0.10.17/gst/gstregistry.c	2008-11-14 23:32:39.000000000 +0100
-@@ -813,7 +813,10 @@
-     GST_LOG_OBJECT (registry, "examining file: %s", filename);
- 
-     if (g_file_test (filename, G_FILE_TEST_IS_DIR)) {
--      if (level > 0) {
-+      if (g_str_has_suffix (filename, ".debug")) {
-+        GST_LOG_OBJECT (registry,
-+            "found directory, not descending into .debug directory");
-+      } else if (level > 0) {
-         GST_LOG_OBJECT (registry, "found directory, recursing");
-         changed |= gst_registry_scan_path_level (registry, filename, level - 1);
-       } else {
diff --git a/recipes/gstreamer/gstreamer_0.10.17.bb b/recipes/gstreamer/gstreamer_0.10.17.bb
deleted file mode 100644
index dd01e16..0000000
--- a/recipes/gstreamer/gstreamer_0.10.17.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require gstreamer.inc
-
-PR = "r4"
-
-SRC_URI += "file://po-makefile-fix.patch \
-            file://registry-do-not-look-into-debug-dirs.patch "
-
-
-SRC_URI[archive.md5sum] = "3232416ea6fceab628236d67a7d0a44a"
-SRC_URI[archive.sha256sum] = "442862dc93e734aa58f13bcf3914dc7a40d3fa28f0ae2152c80457438dc3569c"
diff --git a/recipes/gstreamer/gstreamer_0.10.25.bb b/recipes/gstreamer/gstreamer_0.10.25.bb
deleted file mode 100644
index 6ba8a6d..0000000
--- a/recipes/gstreamer/gstreamer_0.10.25.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require gstreamer.inc
-
-EXTRA_OECONF += "ac_cv_func_register_printf_function=no"
-
-SRC_URI[archive.md5sum] = "88544e034a051baf472983791d233076"
-SRC_URI[archive.sha256sum] = "39b2ba7b3bfa8df6d998a9461e7091c27757e36a53e93969d7d9982a56526578"
diff --git a/recipes/gstreamer/gstreamer_0.10.31.bb b/recipes/gstreamer/gstreamer_0.10.31.bb
deleted file mode 100644
index 8b8eb77..0000000
--- a/recipes/gstreamer/gstreamer_0.10.31.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require gstreamer.inc
-
-PR = "r2"
-
-SRC_URI[archive.md5sum] = "a21fb08bdb578d972c7c14e77da8fbb6"
-SRC_URI[archive.sha256sum] = "7f737e6d047c1ebeb4e1e0725fc377c5d9f12ee89186de7960be3cbba709ab84"
-
-SRC_URI += " \
-             file://0001-add-GstQueryBuffers-query.patch \
-             file://0002-gstevent-add-crop-event.patch \
-             file://0003-basetransform-don-t-do-unnecessary-pad_alloc.patch \
-"
-
-EXTRA_OECONF += "ac_cv_func_register_printf_function=no"
-
diff --git a/recipes/obsolete/gstreamer/gst-ffmpeg/armv5.patch b/recipes/obsolete/gstreamer/gst-ffmpeg/armv5.patch
new file mode 100644
index 0000000..794709c
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-ffmpeg/armv5.patch
@@ -0,0 +1,1509 @@
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/configure.ac
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac	2006-09-23 15:35:21.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/configure.ac	2007-05-01 12:23:39.000000000 +0200
+@@ -190,7 +190,7 @@
+     ARCH_X86=yes
+     ;;
+   # armv4l is a subset of armv5tel
+-  armv4l|armv5tel)
++  arm|armv4l|armv5tel|armv5te)
+     TARGET_ARCH="armv4l"
+     ARCH_ARMV4L=yes
+     ;;
+@@ -364,11 +364,8 @@
+ AC_FF_ALLOW_DISABLE(HAVE_IWMMXT, iwmmxt, use ARM/IWMMXT optimizations,[
+   if test x$TARGET_ARCH = xarmv4l; then
+     AC_MSG_CHECKING(for support of IWMMXT optimizations)
+-    AC_TRY_RUN([
+-        int main () {
++    AC_TRY_COMPILE(,[
+           __asm__ __volatile__ ("wunpckelub wr6, wr4");
+-          return 0;
+-        }
+       ],[ HAVE_IWMMXT=yes && AC_MSG_RESULT(yes) ],[
+         HAVE_IWMMXT=no && AC_MSG_RESULT(no) ])
+   else
+@@ -376,6 +373,19 @@
+   fi
+ ])
+ 
++dnl ARMV5TE
++AC_FF_ALLOW_DISABLE(HAVE_ARMV5TE, armv5te, use ARMV5TE optimizations,[
++  if test x$TARGET_ARCH = xarmv4l; then
++    AC_MSG_CHECKING(for support of ARMV5TE specific instructions)
++    AC_TRY_COMPILE(, [
++          __asm__ __volatile__ ("smulbb a4,ip,a3");
++      ],[ HAVE_ARMV5TE=yes && AC_MSG_RESULT(yes) ],[
++        HAVE_ARMV5TE=no && AC_MSG_RESULT(no) ])
++  else
++    HAVE_ARMV5TE=no
++  fi
++])
++
+ dnl GProf (-p)
+ AC_FF_ALLOW_ENABLE(HAVE_GPROF, gprof, profiling with gprof,[
+   GPROF_FLAGS="-p"
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c	2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c	2007-05-01 12:23:40.000000000 +0200
+  * ARMv4L optimized DSP utils
+  * Copyright (c) 2001 Lionel Ulmer.
+  *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+  *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg 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
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ 
+-#include "dsputil.h"
++#include "../dsputil.h"
+ #ifdef HAVE_IPP
+ #include "ipp.h"
+ #endif
+@@ -27,6 +29,12 @@
+ extern void j_rev_dct_ARM(DCTELEM *data);
+ extern void simple_idct_ARM(DCTELEM *data);
+ 
++extern void simple_idct_armv5te(DCTELEM *data);
++extern void simple_idct_put_armv5te(uint8_t *dest, int line_size,
++                                    DCTELEM *data);
++extern void simple_idct_add_armv5te(uint8_t *dest, int line_size,
++                                    DCTELEM *data);
++
+ /* XXX: local hack */
+ static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
+ static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
+@@ -196,8 +204,10 @@
+     ff_add_pixels_clamped = c->add_pixels_clamped;
+ 
+     if(idct_algo == FF_IDCT_AUTO){
+-#ifdef HAVE_IPP
++#if defined(HAVE_IPP)
+         idct_algo = FF_IDCT_IPP;
++#elif defined(HAVE_ARMV5TE)
++        idct_algo = FF_IDCT_SIMPLEARMV5TE;
+ #else
+         idct_algo = FF_IDCT_ARM;
+ #endif
+@@ -213,6 +223,13 @@
+         c->idct_add= simple_idct_ARM_add;
+         c->idct    = simple_idct_ARM;
+         c->idct_permutation_type= FF_NO_IDCT_PERM;
++#ifdef HAVE_ARMV5TE
++    } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){
++        c->idct_put= simple_idct_put_armv5te;
++        c->idct_add= simple_idct_add_armv5te;
++        c->idct    = simple_idct_armv5te;
++        c->idct_permutation_type = FF_NO_IDCT_PERM;
++#endif
+ #ifdef HAVE_IPP
+     } else if (idct_algo==FF_IDCT_IPP){
+         c->idct_put= simple_idct_ipp_put;
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm_s.S	2006-02-19 00:04:59.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm_s.S	2007-05-01 12:23:40.000000000 +0200
+@@ -2,20 +2,29 @@
+ @ ARMv4L optimized DSP utils
+ @ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
+ @
+-@ This library is free software; you can redistribute it and/or
++@ This file is part of FFmpeg.
++@
++@ FFmpeg is free software; you can redistribute it and/or
+ @ modify it under the terms of the GNU Lesser General Public
+ @ License as published by the Free Software Foundation; either
+-@ version 2 of the License, or (at your option) any later version.
++@ version 2.1 of the License, or (at your option) any later version.
+ @
+-@ This library is distributed in the hope that it will be useful,
++@ FFmpeg 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
+ @ Lesser General Public License for more details.
+ @
+ @ You should have received a copy of the GNU Lesser General Public
+-@ License along with this library; if not, write to the Free Software
++@ License along with FFmpeg; if not, write to the Free Software
+ @ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ @
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)   code
++#else
++#define PLD(code...)
++#endif
+ 
+ .macro  ADJ_ALIGN_QUADWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4
+         mov \Rd0, \Rn0, lsr #(\shift * 8)
+@@ -74,7 +83,7 @@
+ put_pixels16_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r11, lr} @ R14 is also called LR
+         adr r5, 5f
+         ands r4, r1, #3
+@@ -85,7 +94,7 @@
+         ldmia r1, {r4-r7}
+         add r1, r1, r2
+         stmia r0, {r4-r7}
+-        pld [r1]
++        PLD ( pld [r1] )
+         subs r3, r3, #1
+         add r0, r0, r2
+         bne 1b
+@@ -95,7 +104,7 @@
+         ldmia r1, {r4-r8}
+         add r1, r1, r2
+         ADJ_ALIGN_QUADWORD_D 1, r9, r10, r11, r12, r4, r5, r6, r7, r8
+-        pld [r1]
++        PLD ( pld [r1] )
+         subs r3, r3, #1
+         stmia r0, {r9-r12}
+         add r0, r0, r2
+@@ -106,7 +115,7 @@
+         ldmia r1, {r4-r8}
+         add r1, r1, r2
+         ADJ_ALIGN_QUADWORD_D 2, r9, r10, r11, r12, r4, r5, r6, r7, r8
+-        pld [r1]
++        PLD ( pld [r1] )
+         subs r3, r3, #1
+         stmia r0, {r9-r12}
+         add r0, r0, r2
+@@ -117,7 +126,7 @@
+         ldmia r1, {r4-r8}
+         add r1, r1, r2
+         ADJ_ALIGN_QUADWORD_D 3, r9, r10, r11, r12, r4, r5, r6, r7, r8
+-        pld [r1]
++        PLD ( pld [r1] )
+         subs r3, r3, #1
+         stmia r0, {r9-r12}
+         add r0, r0, r2
+@@ -136,7 +145,7 @@
+ put_pixels8_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r5,lr} @ R14 is also called LR
+         adr r5, 5f
+         ands r4, r1, #3
+@@ -147,7 +156,7 @@
+         ldmia r1, {r4-r5}
+         add r1, r1, r2
+         subs r3, r3, #1
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmia r0, {r4-r5}
+         add r0, r0, r2
+         bne 1b
+@@ -157,7 +166,7 @@
+         ldmia r1, {r4-r5, r12}
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r12
+-        pld [r1]
++        PLD ( pld [r1] )
+         subs r3, r3, #1
+         stmia r0, {r4-r5}
+         add r0, r0, r2
+@@ -168,7 +177,7 @@
+         ldmia r1, {r4-r5, r12}
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r12
+-        pld [r1]
++        PLD ( pld [r1] )
+         subs r3, r3, #1
+         stmia r0, {r4-r5}
+         add r0, r0, r2
+@@ -179,7 +188,7 @@
+         ldmia r1, {r4-r5, r12}
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r12
+-        pld [r1]
++        PLD ( pld [r1] )
+         subs r3, r3, #1
+         stmia r0, {r4-r5}
+         add r0, r0, r2
+@@ -198,7 +207,7 @@
+ put_pixels8_x2_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r10,lr} @ R14 is also called LR
+         adr r5, 5f
+         ands r4, r1, #3
+@@ -210,7 +219,7 @@
+         ldmia r1, {r4-r5, r10}
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+         subs r3, r3, #1
+         stmia r0, {r8-r9}
+@@ -223,7 +232,7 @@
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+         ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+         subs r3, r3, #1
+         stmia r0, {r4-r5}
+@@ -236,7 +245,7 @@
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
+         ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+         subs r3, r3, #1
+         stmia r0, {r4-r5}
+@@ -248,7 +257,7 @@
+         ldmia r1, {r4-r5, r10}
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         RND_AVG32 r8, r9, r6, r7, r5, r10, r12
+         subs r3, r3, #1
+         stmia r0, {r8-r9}
+@@ -267,7 +276,7 @@
+ put_no_rnd_pixels8_x2_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r10,lr} @ R14 is also called LR
+         adr r5, 5f
+         ands r4, r1, #3
+@@ -279,7 +288,7 @@
+         ldmia r1, {r4-r5, r10}
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+         subs r3, r3, #1
+         stmia r0, {r8-r9}
+@@ -292,7 +301,7 @@
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+         ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+         subs r3, r3, #1
+         stmia r0, {r4-r5}
+@@ -305,7 +314,7 @@
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
+         ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+         subs r3, r3, #1
+         stmia r0, {r4-r5}
+@@ -317,7 +326,7 @@
+         ldmia r1, {r4-r5, r10}
+         add r1, r1, r2
+         ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
+-        pld [r1]
++        PLD ( pld [r1] )
+         NO_RND_AVG32 r8, r9, r6, r7, r5, r10, r12
+         subs r3, r3, #1
+         stmia r0, {r8-r9}
+@@ -338,7 +347,7 @@
+ put_pixels8_y2_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+         adr r5, 5f
+         ands r4, r1, #3
+@@ -352,13 +361,13 @@
+         add r1, r1, r2
+ 6:      ldmia r1, {r6-r7}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+         ldmia r1, {r4-r5}
+         add r1, r1, r2
+         stmia r0, {r8-r9}
+         add r0, r0, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         RND_AVG32 r8, r9, r6, r7, r4, r5, r12
+         subs r3, r3, #1
+         stmia r0, {r8-r9}
+@@ -369,18 +378,18 @@
+ 2:
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+ 6:      ldmia r1, {r7-r9}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
+         RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+         stmia r0, {r10-r11}
+         add r0, r0, r2
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+         subs r3, r3, #1
+         RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -392,18 +401,18 @@
+ 3:
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+ 6:      ldmia r1, {r7-r9}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
+         RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+         stmia r0, {r10-r11}
+         add r0, r0, r2
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+         subs r3, r3, #1
+         RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -415,18 +424,18 @@
+ 4:
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+ 6:      ldmia r1, {r7-r9}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
+         RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+         stmia r0, {r10-r11}
+         add r0, r0, r2
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+         subs r3, r3, #1
+         RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -447,7 +456,7 @@
+ put_no_rnd_pixels8_y2_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+         adr r5, 5f
+         ands r4, r1, #3
+@@ -461,13 +470,13 @@
+         add r1, r1, r2
+ 6:      ldmia r1, {r6-r7}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+         ldmia r1, {r4-r5}
+         add r1, r1, r2
+         stmia r0, {r8-r9}
+         add r0, r0, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         NO_RND_AVG32 r8, r9, r6, r7, r4, r5, r12
+         subs r3, r3, #1
+         stmia r0, {r8-r9}
+@@ -478,18 +487,18 @@
+ 2:
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+ 6:      ldmia r1, {r7-r9}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
+         NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+         stmia r0, {r10-r11}
+         add r0, r0, r2
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+         subs r3, r3, #1
+         NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -501,18 +510,18 @@
+ 3:
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+ 6:      ldmia r1, {r7-r9}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
+         NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+         stmia r0, {r10-r11}
+         add r0, r0, r2
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+         subs r3, r3, #1
+         NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -524,18 +533,18 @@
+ 4:
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+ 6:      ldmia r1, {r7-r9}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
+         NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+         stmia r0, {r10-r11}
+         add r0, r0, r2
+         ldmia r1, {r4-r6}
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+         ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+         subs r3, r3, #1
+         NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -562,7 +571,7 @@
+         ldmia r1, {r8-r10}
+ .endif
+         add r1, r1, r2
+-        pld [r1]
++        PLD ( pld [r1] )
+ .if \align == 0
+         ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8
+ .elseif \align == 1
+@@ -624,7 +633,7 @@
+ put_pixels8_xy2_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+         adrl r12, 5f
+         ands r4, r1, #3
+@@ -661,7 +670,7 @@
+ put_no_rnd_pixels8_xy2_arm:
+         @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+         @ block = word aligned, pixles = unaligned
+-        pld [r1]
++        PLD ( pld [r1] )
+         stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+         adrl r12, 5f
+         ands r4, r1, #3
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c	2006-02-19 00:04:59.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c	2007-05-01 12:23:40.000000000 +0200
+@@ -2,18 +2,20 @@
+  * iWMMXt optimized DSP utils
+  * Copyright (c) 2004 AGAWA Koji
+  *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+  *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg 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
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ 
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h	2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h	2007-05-01 12:23:40.000000000 +0200
+@@ -2,18 +2,20 @@
+  * iWMMXt optimized DSP utils
+  * copyright (c) 2004 AGAWA Koji
+  *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+  *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg 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
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ 
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am	2006-09-22 06:07:23.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am	2007-05-01 12:23:40.000000000 +0200
+@@ -7,9 +7,14 @@
+ iwmmxt_libs = libiwmmxt.la
+ endif
+ 
++if HAVE_ARMV5TE
++armv5te_libs = libarmv5te.la
++endif
++
+ noinst_LTLIBRARIES = \
+ 	libarmv4l.la \
+-	$(iwmmxt_libs)
++	$(iwmmxt_libs) \
++	$(armv5te_libs)
+ 
+ libarmv4l_la_SOURCES = \
+ 	jrevdct_arm.S \
+@@ -18,6 +23,9 @@
+ 	dsputil_arm.c \
+ 	mpegvideo_arm.c
+ 
++libarmv5te_la_SOURCES = \
++	simple_idct_armv5te.S
++
+ libiwmmxt_la_SOURCES = \
+ 	dsputil_iwmmxt.c \
+ 	mpegvideo_iwmmxt.c
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h	2006-09-22 06:07:23.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h	2007-05-01 12:23:40.000000000 +0200
+@@ -2,18 +2,20 @@
+  * simple math operations
+  * Copyright (c) 2006 Michael Niedermayer <michaelni at gmx.at> et al
+  *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+  *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg 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
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ 
+@@ -39,9 +41,9 @@
+ #   define MAC16(rt, ra, rb) \
+         asm ("smlabb %0, %2, %3, %0" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
+ /* signed 16x16 -> 32 multiply */
+-#   define MUL16(ra, rb) \
+-        ({ int __rt;\
+-         asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb));
++#   define MUL16(ra, rb)                                                \
++        ({ int __rt;                                                    \
++         asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb));  \
+          __rt; })
+ 
+ #endif
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c	2006-02-19 00:04:59.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c	2007-05-01 12:23:40.000000000 +0200
+@@ -1,25 +1,27 @@
+ /*
+  * Copyright (c) 2002 Michael Niedermayer
+  *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+  *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg 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
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  *
+  */
+ 
+-#include "dsputil.h"
+-#include "mpegvideo.h"
+-#include "avcodec.h"
++#include "../dsputil.h"
++#include "../mpegvideo.h"
++#include "../avcodec.h"
+ 
+ extern void MPV_common_init_iwmmxt(MpegEncContext *s);
+ 
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c	2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c	2007-05-01 12:23:40.000000000 +0200
+@@ -1,18 +1,20 @@
+ /*
+  * copyright (c) 2004 AGAWA Koji
+  *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+  *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg 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
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ 
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S	2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S	2007-05-01 12:23:40.000000000 +0200
+@@ -5,18 +5,20 @@
+  *
+  * Author: Frederic Boulay <dilb at handhelds.org>
+  *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+  *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg 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
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  *
+  * The function defined in this file, is derived from the simple_idct function
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S	2007-05-01 12:23:40.000000000 +0200
+@@ -0,0 +1,718 @@
++/*
++ * Simple IDCT
++ *
++ * Copyright (c) 2001 Michael Niedermayer <michaelni at gmx.at>
++ * Copyright (c) 2006 Mans Rullgard <mru at inprovide.com>
++ *
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * FFmpeg 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
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ */
++
++#define W1  22725   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W2  21407   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W3  19266   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W4  16383   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W5  12873   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W6  8867    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W7  4520    /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define ROW_SHIFT 11
++#define COL_SHIFT 20
++
++#define W13 (W1 | (W3 << 16))
++#define W26 (W2 | (W6 << 16))
++#define W57 (W5 | (W7 << 16))
++
++        .text
++        .align
++w13:    .long W13
++w26:    .long W26
++w57:    .long W57
++
++        .align
++        .func idct_row_armv5te
++idct_row_armv5te:
++        str    lr, [sp, #-4]!
++
++        ldrd   v1, [a1, #8]
++        ldrd   a3, [a1]              /* a3 = row[1:0], a4 = row[3:2] */
++        orrs   v1, v1, v2
++        cmpeq  v1, a4
++        cmpeq  v1, a3, lsr #16
++        beq    row_dc_only
++
++        mov    v1, #(1<<(ROW_SHIFT-1))
++        mov    ip, #16384
++        sub    ip, ip, #1            /* ip = W4 */
++        smlabb v1, ip, a3, v1        /* v1 = W4*row[0]+(1<<(RS-1)) */
++        ldr    ip, [pc, #(w26-.-8)]  /* ip = W2 | (W6 << 16) */
++        smultb a2, ip, a4
++        smulbb lr, ip, a4
++        add    v2, v1, a2
++        sub    v3, v1, a2
++        sub    v4, v1, lr
++        add    v1, v1, lr
++
++        ldr    ip, [pc, #(w13-.-8)]  /* ip = W1 | (W3 << 16) */
++        ldr    lr, [pc, #(w57-.-8)]  /* lr = W5 | (W7 << 16) */
++        smulbt v5, ip, a3
++        smultt v6, lr, a4
++        smlatt v5, ip, a4, v5
++        smultt a2, ip, a3
++        smulbt v7, lr, a3
++        sub    v6, v6, a2
++        smulbt a2, ip, a4
++        smultt fp, lr, a3
++        sub    v7, v7, a2
++        smulbt a2, lr, a4
++        ldrd   a3, [a1, #8]          /* a3=row[5:4] a4=row[7:6] */
++        sub    fp, fp, a2
++
++        orrs   a2, a3, a4
++        beq    1f
++
++        smlabt v5, lr, a3, v5
++        smlabt v6, ip, a3, v6
++        smlatt v5, lr, a4, v5
++        smlabt v6, lr, a4, v6
++        smlatt v7, lr, a3, v7
++        smlatt fp, ip, a3, fp
++        smulbt a2, ip, a4
++        smlatt v7, ip, a4, v7
++        sub    fp, fp, a2
++
++        ldr    ip, [pc, #(w26-.-8)]  /* ip = W2 | (W6 << 16) */
++        mov    a2, #16384
++        sub    a2, a2, #1            /* a2 =  W4 */
++        smulbb a2, a2, a3            /* a2 =  W4*row[4] */
++        smultb lr, ip, a4            /* lr =  W6*row[6] */
++        add    v1, v1, a2            /* v1 += W4*row[4] */
++        add    v1, v1, lr            /* v1 += W6*row[6] */
++        add    v4, v4, a2            /* v4 += W4*row[4] */
++        sub    v4, v4, lr            /* v4 -= W6*row[6] */
++        smulbb lr, ip, a4            /* lr =  W2*row[6] */
++        sub    v2, v2, a2            /* v2 -= W4*row[4] */
++        sub    v2, v2, lr            /* v2 -= W2*row[6] */
++        sub    v3, v3, a2            /* v3 -= W4*row[4] */
++        add    v3, v3, lr            /* v3 += W2*row[6] */
++
++1:      add    a2, v1, v5
++        mov    a3, a2, lsr #11
++        bic    a3, a3, #0x1f0000
++        sub    a2, v2, v6
++        mov    a2, a2, lsr #11
++        add    a3, a3, a2, lsl #16
++        add    a2, v3, v7
++        mov    a4, a2, lsr #11
++        bic    a4, a4, #0x1f0000
++        add    a2, v4, fp
++        mov    a2, a2, lsr #11
++        add    a4, a4, a2, lsl #16
++        strd   a3, [a1]
++
++        sub    a2, v4, fp
++        mov    a3, a2, lsr #11
++        bic    a3, a3, #0x1f0000
++        sub    a2, v3, v7
++        mov    a2, a2, lsr #11
++        add    a3, a3, a2, lsl #16
++        add    a2, v2, v6
++        mov    a4, a2, lsr #11
++        bic    a4, a4, #0x1f0000
++        sub    a2, v1, v5
++        mov    a2, a2, lsr #11
++        add    a4, a4, a2, lsl #16
++        strd   a3, [a1, #8]
++
++        ldr    pc, [sp], #4
++
++row_dc_only:
++        orr    a3, a3, a3, lsl #16
++        bic    a3, a3, #0xe000
++        mov    a3, a3, lsl #3
++        mov    a4, a3
++        strd   a3, [a1]
++        strd   a3, [a1, #8]
++
++        ldr    pc, [sp], #4
++        .endfunc
++
++        .macro idct_col
++        ldr    a4, [a1]              /* a4 = col[1:0] */
++        mov    ip, #16384
++        sub    ip, ip, #1            /* ip = W4 */
++#if 0
++        mov    v1, #(1<<(COL_SHIFT-1))
++        smlabt v2, ip, a4, v1        /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */
++        smlabb v1, ip, a4, v1        /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */
++        ldr    a4, [a1, #(16*4)]
++#else
++        mov    v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */
++        add    v2, v1, a4, asr #16
++        rsb    v2, v2, v2, lsl #14
++        mov    a4, a4, lsl #16
++        add    v1, v1, a4, asr #16
++        ldr    a4, [a1, #(16*4)]
++        rsb    v1, v1, v1, lsl #14
++#endif
++
++        smulbb lr, ip, a4
++        smulbt a3, ip, a4
++        sub    v3, v1, lr
++        sub    v5, v1, lr
++        add    v7, v1, lr
++        add    v1, v1, lr
++        sub    v4, v2, a3
++        sub    v6, v2, a3
++        add    fp, v2, a3
++        ldr    ip, [pc, #(w26-.-8)]
++        ldr    a4, [a1, #(16*2)]
++        add    v2, v2, a3
++
++        smulbb lr, ip, a4
++        smultb a3, ip, a4
++        add    v1, v1, lr
++        sub    v7, v7, lr
++        add    v3, v3, a3
++        sub    v5, v5, a3
++        smulbt lr, ip, a4
++        smultt a3, ip, a4
++        add    v2, v2, lr
++        sub    fp, fp, lr
++        add    v4, v4, a3
++        ldr    a4, [a1, #(16*6)]
++        sub    v6, v6, a3
++
++        smultb lr, ip, a4
++        smulbb a3, ip, a4
++        add    v1, v1, lr
++        sub    v7, v7, lr
++        sub    v3, v3, a3
++        add    v5, v5, a3
++        smultt lr, ip, a4
++        smulbt a3, ip, a4
++        add    v2, v2, lr
++        sub    fp, fp, lr
++        sub    v4, v4, a3
++        add    v6, v6, a3
++
++        stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp}
++
++        ldr    ip, [pc, #(w13-.-8)]
++        ldr    a4, [a1, #(16*1)]
++        ldr    lr, [pc, #(w57-.-8)]
++        smulbb v1, ip, a4
++        smultb v3, ip, a4
++        smulbb v5, lr, a4
++        smultb v7, lr, a4
++        smulbt v2, ip, a4
++        smultt v4, ip, a4
++        smulbt v6, lr, a4
++        smultt fp, lr, a4
++        rsb    v4, v4, #0
++        ldr    a4, [a1, #(16*3)]
++        rsb    v3, v3, #0
++
++        smlatb v1, ip, a4, v1
++        smlatb v3, lr, a4, v3
++        smulbb a3, ip, a4
++        smulbb a2, lr, a4
++        sub    v5, v5, a3
++        sub    v7, v7, a2
++        smlatt v2, ip, a4, v2
++        smlatt v4, lr, a4, v4
++        smulbt a3, ip, a4
++        smulbt a2, lr, a4
++        sub    v6, v6, a3
++        ldr    a4, [a1, #(16*5)]
++        sub    fp, fp, a2
++
++        smlabb v1, lr, a4, v1
++        smlabb v3, ip, a4, v3
++        smlatb v5, lr, a4, v5
++        smlatb v7, ip, a4, v7
++        smlabt v2, lr, a4, v2
++        smlabt v4, ip, a4, v4
++        smlatt v6, lr, a4, v6
++        ldr    a3, [a1, #(16*7)]
++        smlatt fp, ip, a4, fp
++
++        smlatb v1, lr, a3, v1
++        smlabb v3, lr, a3, v3
++        smlatb v5, ip, a3, v5
++        smulbb a4, ip, a3
++        smlatt v2, lr, a3, v2
++        sub    v7, v7, a4
++        smlabt v4, lr, a3, v4
++        smulbt a4, ip, a3
++        smlatt v6, ip, a3, v6
++        sub    fp, fp, a4
++        .endm
++
++        .align
++        .func idct_col_armv5te
++idct_col_armv5te:
++        str    lr, [sp, #-4]!
++
++        idct_col
++
++        ldmfd  sp!, {a3, a4}
++        adds   a2, a3, v1
++        mov    a2, a2, lsr #20
++        orrmi  a2, a2, #0xf000
++        add    ip, a4, v2
++        mov    ip, ip, asr #20
++        orr    a2, a2, ip, lsl #16
++        str    a2, [a1]
++        subs   a3, a3, v1
++        mov    a2, a3, lsr #20
++        orrmi  a2, a2, #0xf000
++        sub    a4, a4, v2
++        mov    a4, a4, asr #20
++        orr    a2, a2, a4, lsl #16
++        ldmfd  sp!, {a3, a4}
++        str    a2, [a1, #(16*7)]
++
++        subs   a2, a3, v3
++        mov    a2, a2, lsr #20
++        orrmi  a2, a2, #0xf000
++        sub    ip, a4, v4
++        mov    ip, ip, asr #20
++        orr    a2, a2, ip, lsl #16
++        str    a2, [a1, #(16*1)]
++        adds   a3, a3, v3
++        mov    a2, a3, lsr #20
++        orrmi  a2, a2, #0xf000
++        add    a4, a4, v4
++        mov    a4, a4, asr #20
++        orr    a2, a2, a4, lsl #16
++        ldmfd  sp!, {a3, a4}
++        str    a2, [a1, #(16*6)]
++
++        adds   a2, a3, v5
++        mov    a2, a2, lsr #20
++        orrmi  a2, a2, #0xf000
++        add    ip, a4, v6
++        mov    ip, ip, asr #20
++        orr    a2, a2, ip, lsl #16
++        str    a2, [a1, #(16*2)]
++        subs   a3, a3, v5
++        mov    a2, a3, lsr #20
++        orrmi  a2, a2, #0xf000
++        sub    a4, a4, v6
++        mov    a4, a4, asr #20
++        orr    a2, a2, a4, lsl #16
++        ldmfd  sp!, {a3, a4}
++        str    a2, [a1, #(16*5)]
++
++        adds   a2, a3, v7
++        mov    a2, a2, lsr #20
++        orrmi  a2, a2, #0xf000
++        add    ip, a4, fp
++        mov    ip, ip, asr #20
++        orr    a2, a2, ip, lsl #16
++        str    a2, [a1, #(16*3)]
++        subs   a3, a3, v7
++        mov    a2, a3, lsr #20
++        orrmi  a2, a2, #0xf000
++        sub    a4, a4, fp
++        mov    a4, a4, asr #20
++        orr    a2, a2, a4, lsl #16
++        str    a2, [a1, #(16*4)]
++
++        ldr    pc, [sp], #4
++        .endfunc
++
++        .align
++        .func idct_col_put_armv5te
++idct_col_put_armv5te:
++        str    lr, [sp, #-4]!
++
++        idct_col
++
++        ldmfd  sp!, {a3, a4}
++        ldr    lr, [sp, #32]
++        add    a2, a3, v1
++        movs   a2, a2, asr #20
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        add    ip, a4, v2
++        movs   ip, ip, asr #20
++        movmi  ip, #0
++        cmp    ip, #255
++        movgt  ip, #255
++        orr    a2, a2, ip, lsl #8
++        sub    a3, a3, v1
++        movs   a3, a3, asr #20
++        movmi  a3, #0
++        cmp    a3, #255
++        movgt  a3, #255
++        sub    a4, a4, v2
++        movs   a4, a4, asr #20
++        movmi  a4, #0
++        cmp    a4, #255
++        ldr    v1, [sp, #28]
++        movgt  a4, #255
++        strh   a2, [v1]
++        add    a2, v1, #2
++        str    a2, [sp, #28]
++        orr    a2, a3, a4, lsl #8
++        rsb    v2, lr, lr, lsl #3
++        ldmfd  sp!, {a3, a4}
++        strh   a2, [v2, v1]!
++
++        sub    a2, a3, v3
++        movs   a2, a2, asr #20
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        sub    ip, a4, v4
++        movs   ip, ip, asr #20
++        movmi  ip, #0
++        cmp    ip, #255
++        movgt  ip, #255
++        orr    a2, a2, ip, lsl #8
++        strh   a2, [v1, lr]!
++        add    a3, a3, v3
++        movs   a2, a3, asr #20
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        add    a4, a4, v4
++        movs   a4, a4, asr #20
++        movmi  a4, #0
++        cmp    a4, #255
++        movgt  a4, #255
++        orr    a2, a2, a4, lsl #8
++        ldmfd  sp!, {a3, a4}
++        strh   a2, [v2, -lr]!
++
++        add    a2, a3, v5
++        movs   a2, a2, asr #20
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        add    ip, a4, v6
++        movs   ip, ip, asr #20
++        movmi  ip, #0
++        cmp    ip, #255
++        movgt  ip, #255
++        orr    a2, a2, ip, lsl #8
++        strh   a2, [v1, lr]!
++        sub    a3, a3, v5
++        movs   a2, a3, asr #20
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        sub    a4, a4, v6
++        movs   a4, a4, asr #20
++        movmi  a4, #0
++        cmp    a4, #255
++        movgt  a4, #255
++        orr    a2, a2, a4, lsl #8
++        ldmfd  sp!, {a3, a4}
++        strh   a2, [v2, -lr]!
++
++        add    a2, a3, v7
++        movs   a2, a2, asr #20
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        add    ip, a4, fp
++        movs   ip, ip, asr #20
++        movmi  ip, #0
++        cmp    ip, #255
++        movgt  ip, #255
++        orr    a2, a2, ip, lsl #8
++        strh   a2, [v1, lr]
++        sub    a3, a3, v7
++        movs   a2, a3, asr #20
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        sub    a4, a4, fp
++        movs   a4, a4, asr #20
++        movmi  a4, #0
++        cmp    a4, #255
++        movgt  a4, #255
++        orr    a2, a2, a4, lsl #8
++        strh   a2, [v2, -lr]
++
++        ldr    pc, [sp], #4
++        .endfunc
++
++        .align
++        .func idct_col_add_armv5te
++idct_col_add_armv5te:
++        str    lr, [sp, #-4]!
++
++        idct_col
++
++        ldr    lr, [sp, #36]
++
++        ldmfd  sp!, {a3, a4}
++        ldrh   ip, [lr]
++        add    a2, a3, v1
++        mov    a2, a2, asr #20
++        sub    a3, a3, v1
++        and    v1, ip, #255
++        adds   a2, a2, v1
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        add    v1, a4, v2
++        mov    v1, v1, asr #20
++        adds   v1, v1, ip, lsr #8
++        movmi  v1, #0
++        cmp    v1, #255
++        movgt  v1, #255
++        orr    a2, a2, v1, lsl #8
++        ldr    v1, [sp, #32]
++        sub    a4, a4, v2
++        rsb    v2, v1, v1, lsl #3
++        ldrh   ip, [v2, lr]!
++        strh   a2, [lr]
++        mov    a3, a3, asr #20
++        and    a2, ip, #255
++        adds   a3, a3, a2
++        movmi  a3, #0
++        cmp    a3, #255
++        movgt  a3, #255
++        mov    a4, a4, asr #20
++        adds   a4, a4, ip, lsr #8
++        movmi  a4, #0
++        cmp    a4, #255
++        movgt  a4, #255
++        add    a2, lr, #2
++        str    a2, [sp, #28]
++        orr    a2, a3, a4, lsl #8
++        strh   a2, [v2]
++
++        ldmfd  sp!, {a3, a4}
++        ldrh   ip, [lr, v1]!
++        sub    a2, a3, v3
++        mov    a2, a2, asr #20
++        add    a3, a3, v3
++        and    v3, ip, #255
++        adds   a2, a2, v3
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        sub    v3, a4, v4
++        mov    v3, v3, asr #20
++        adds   v3, v3, ip, lsr #8
++        movmi  v3, #0
++        cmp    v3, #255
++        movgt  v3, #255
++        orr    a2, a2, v3, lsl #8
++        add    a4, a4, v4
++        ldrh   ip, [v2, -v1]!
++        strh   a2, [lr]
++        mov    a3, a3, asr #20
++        and    a2, ip, #255
++        adds   a3, a3, a2
++        movmi  a3, #0
++        cmp    a3, #255
++        movgt  a3, #255
++        mov    a4, a4, asr #20
++        adds   a4, a4, ip, lsr #8
++        movmi  a4, #0
++        cmp    a4, #255
++        movgt  a4, #255
++        orr    a2, a3, a4, lsl #8
++        strh   a2, [v2]
++
++        ldmfd  sp!, {a3, a4}
++        ldrh   ip, [lr, v1]!
++        add    a2, a3, v5
++        mov    a2, a2, asr #20
++        sub    a3, a3, v5
++        and    v3, ip, #255
++        adds   a2, a2, v3
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        add    v3, a4, v6
++        mov    v3, v3, asr #20
++        adds   v3, v3, ip, lsr #8
++        movmi  v3, #0
++        cmp    v3, #255
++        movgt  v3, #255
++        orr    a2, a2, v3, lsl #8
++        sub    a4, a4, v6
++        ldrh   ip, [v2, -v1]!
++        strh   a2, [lr]
++        mov    a3, a3, asr #20
++        and    a2, ip, #255
++        adds   a3, a3, a2
++        movmi  a3, #0
++        cmp    a3, #255
++        movgt  a3, #255
++        mov    a4, a4, asr #20
++        adds   a4, a4, ip, lsr #8
++        movmi  a4, #0
++        cmp    a4, #255
++        movgt  a4, #255
++        orr    a2, a3, a4, lsl #8
++        strh   a2, [v2]
++
++        ldmfd  sp!, {a3, a4}
++        ldrh   ip, [lr, v1]!
++        add    a2, a3, v7
++        mov    a2, a2, asr #20
++        sub    a3, a3, v7
++        and    v3, ip, #255
++        adds   a2, a2, v3
++        movmi  a2, #0
++        cmp    a2, #255
++        movgt  a2, #255
++        add    v3, a4, fp
++        mov    v3, v3, asr #20
++        adds   v3, v3, ip, lsr #8
++        movmi  v3, #0
++        cmp    v3, #255
++        movgt  v3, #255
++        orr    a2, a2, v3, lsl #8
++        sub    a4, a4, fp
++        ldrh   ip, [v2, -v1]!
++        strh   a2, [lr]
++        mov    a3, a3, asr #20
++        and    a2, ip, #255
++        adds   a3, a3, a2
++        movmi  a3, #0
++        cmp    a3, #255
++        movgt  a3, #255
++        mov    a4, a4, asr #20
++        adds   a4, a4, ip, lsr #8
++        movmi  a4, #0
++        cmp    a4, #255
++        movgt  a4, #255
++        orr    a2, a3, a4, lsl #8
++        strh   a2, [v2]
++
++        ldr    pc, [sp], #4
++        .endfunc
++
++        .align
++        .global simple_idct_armv5te
++        .func simple_idct_armv5te
++simple_idct_armv5te:
++        stmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr}
++
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++
++        sub    a1, a1, #(16*7)
++
++        bl     idct_col_armv5te
++        add    a1, a1, #4
++        bl     idct_col_armv5te
++        add    a1, a1, #4
++        bl     idct_col_armv5te
++        add    a1, a1, #4
++        bl     idct_col_armv5te
++
++        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
++        .endfunc
++
++        .align
++        .global simple_idct_add_armv5te
++        .func simple_idct_add_armv5te
++simple_idct_add_armv5te:
++        stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
++
++        mov    a1, a3
++
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++
++        sub    a1, a1, #(16*7)
++
++        bl     idct_col_add_armv5te
++        add    a1, a1, #4
++        bl     idct_col_add_armv5te
++        add    a1, a1, #4
++        bl     idct_col_add_armv5te
++        add    a1, a1, #4
++        bl     idct_col_add_armv5te
++
++        add    sp, sp, #8
++        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
++        .endfunc
++
++        .align
++        .global simple_idct_put_armv5te
++        .func simple_idct_put_armv5te
++simple_idct_put_armv5te:
++        stmfd  sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
++
++        mov    a1, a3
++
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++        add    a1, a1, #16
++        bl     idct_row_armv5te
++
++        sub    a1, a1, #(16*7)
++
++        bl     idct_col_put_armv5te
++        add    a1, a1, #4
++        bl     idct_col_put_armv5te
++        add    a1, a1, #4
++        bl     idct_col_put_armv5te
++        add    a1, a1, #4
++        bl     idct_col_put_armv5te
++
++        add    sp, sp, #8
++        ldmfd  sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
++        .endfunc
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/avcodec.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/avcodec.h
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/avcodec.h	2006-09-20 20:55:36.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/avcodec.h	2007-05-01 12:23:40.000000000 +0200
+@@ -1217,6 +1217,7 @@
+ #define FF_IDCT_IPP          13
+ #define FF_IDCT_XVIDMMX      14
+ #define FF_IDCT_CAVS         15
++#define FF_IDCT_SIMPLEARMV5TE 16
+ 
+     /**
+      * slice count.
+diff  -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/Makefile.am gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/Makefile.am
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/Makefile.am	2006-09-22 06:07:23.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/Makefile.am	2007-05-01 12:23:40.000000000 +0200
+@@ -19,7 +19,10 @@
+ if HAVE_IWMMXT
+ iwmmxt_libs = armv4l/libiwmmxt.la
+ endif
+-armv4l_libs = armv4l/libarmv4l.la $(iwmmxt_libs)
++if HAVE_ARMV5TE
++armv5te_libs = armv4l/libarmv5te.la
++endif
++armv4l_libs = armv4l/libarmv4l.la $(iwmmxt_libs) $(armv5te_libs)
+ armv4l_dirs = armv4l
+ endif
+ 
diff --git a/recipes/obsolete/gstreamer/gst-ffmpeg/autotools.patch b/recipes/obsolete/gstreamer/gst-ffmpeg/autotools.patch
new file mode 100644
index 0000000..76e7ac6
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-ffmpeg/autotools.patch
@@ -0,0 +1,21 @@
+Index: gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac
+===================================================================
+--- gst-ffmpeg-0.10.2.orig/gst-libs/ext/ffmpeg/configure.ac	2008-08-20 00:20:19.177850039 +0200
++++ gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac	2008-08-20 00:26:24.567809464 +0200
+@@ -27,13 +27,15 @@
+ 
+ AM_MAINTAINER_MODE
+ AC_GNU_SOURCE
++
++AC_PROG_LIBTOOL
+ AM_PROG_AS
+ AC_PROG_CC
++AC_PROG_CXX
+ AC_PROG_INSTALL
+ AC_SYS_LARGEFILE
+ AC_STDC_HEADERS
+ AM_DISABLE_STATIC
+-AC_PROG_LIBTOOL
+ 
+ dnl Warning for anyone using these custom macros.
+ dnl before asking me questions on why it doesn't work and why you
diff --git a/recipes/obsolete/gstreamer/gst-ffmpeg_0.10.2.bb b/recipes/obsolete/gstreamer/gst-ffmpeg_0.10.2.bb
new file mode 100644
index 0000000..5164bbd
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-ffmpeg_0.10.2.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "FFmpeg-based GStreamer plug-in"
+SECTION = "multimedia"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+HOMEPAGE = "http://www.gstreamer.net/"
+DEPENDS = "gstreamer gst-plugins-base zlib"
+PR = "r2"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2 \
+	   file://armv5.patch \
+	   file://autotools.patch \
+          "
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+
+EXTRA_OECONF = "--disable-sdltest --disable-ffplay --disable-freetypetest \
+		--disable-vorbis --disable-vorbistest --disable-encoders \
+		--disable-v4l --disable-audio-oss --disable-dv1394 \
+		--disable-vhook --disable-ffmpeg --disable-ffserver \
+		--enable-pp --disable-decoder-vorbis"
+
+# We do this because the install program is called with -s which causes it to
+# call "strip" and it then mangles cross compiled stuff..
+PATH_prepend := "${TOOLCHAIN_PATH}/${TARGET_SYS}/bin:"
+
+# Hack to get STAGING_LIBDIR into the linker path when building ffmpeg
+CC = "${CCACHE} ${HOST_PREFIX}gcc ${TARGET_CC_ARCH} -L${STAGING_LIBDIR}"
+
+
+SRC_URI[md5sum] = "3c7fb1cd1308b1972a76b86bb29fc890"
+SRC_URI[sha256sum] = "ffa7c89bccab5d1be53b6fcedcf7a5c071d585cf522fee5864add05d350f5842"
diff --git a/recipes/obsolete/gstreamer/gst-plugins-bad_0.10.20.bb b/recipes/obsolete/gstreamer/gst-plugins-bad_0.10.20.bb
new file mode 100644
index 0000000..17f20eb
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-plugins-bad_0.10.20.bb
@@ -0,0 +1,16 @@
+require gst-plugins.inc
+
+SRC_URI[archive.md5sum] = "7c84766f6d24f41ba90c3f6141012ab8"
+SRC_URI[archive.sha256sum] = "1031dff866df976a957f34039addbab4c0753406299a275f4cf1780e1dbe2a90"
+
+DEPENDS += "orc-native orc libcdaudio gst-plugins-base openssl directfb libmodplug librsvg"
+
+PR = "${INC_PR}.2"
+
+# We don't have vdpau headers in OE and it creates crosscompile badness.
+# Also, mpeg2enc and mplex from mjpegtools don't build, because of AC_TRY_RUN.
+EXTRA_OECONF += " \
+        --disable-mpeg2enc \
+        --disable-mplex \
+        --disable-vdpau \
+"
diff --git a/recipes/obsolete/gstreamer/gst-plugins-base/fix-playbin2.patch b/recipes/obsolete/gstreamer/gst-plugins-base/fix-playbin2.patch
new file mode 100644
index 0000000..8aba3b6
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-plugins-base/fix-playbin2.patch
@@ -0,0 +1,26 @@
+From 0fe6b6e8abb131471d5bd04d7f7e27ca98a67659 Mon Sep 17 00:00:00 2001
+From: Brijesh Singh <brijesh.ksingh at gmail.com>
+Date: Wed, 13 Jan 2010 08:39:54 +0000
+Subject: playsink: Fix handling of the native audio/video flags
+
+Fixes bug #606687.
+---
+
+--- /tmp/gstplaysink.c	2010-01-23 12:23:20.000000000 +0100
++++ gst-plugins-base-0.10.25/gst/playback/gstplaysink.c	2010-01-23 12:27:51.000000000 +0100
+@@ -1880,12 +1880,13 @@
+      * pick one and ignore the other then instead of erroring out?) */
+     if (need_text && need_subp)
+       goto subs_and_text;
+-  } else if (flags & GST_PLAY_FLAG_VIDEO && playsink->video_pad) {
++  } else if (((flags & GST_PLAY_FLAG_VIDEO)
++          || (flags & GST_PLAY_FLAG_NATIVE_VIDEO)) && playsink->video_pad) {
+     /* we have video and we are requested to show it */
+     need_video = TRUE;
+   }
+   if (playsink->audio_pad) {
+-    if (flags & GST_PLAY_FLAG_AUDIO) {
++    if ((flags & GST_PLAY_FLAG_AUDIO) || (flags & GST_PLAY_FLAG_NATIVE_AUDIO)) {
+       need_audio = TRUE;
+     }
+     if (playsink->audio_pad_raw) {
diff --git a/recipes/obsolete/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch b/recipes/obsolete/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
new file mode 100644
index 0000000..3c0cffa
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-plugins-base/gst-plugins-base_rowstride.patch
@@ -0,0 +1,1577 @@
+From 32a7af0874fe13774c65919941c3be59b72c646a Mon Sep 17 00:00:00 2001
+From: Rob Clark <rob at ti.com>
+Date: Thu, 30 Jul 2009 14:50:05 -0500
+Subject: [PATCH] add rowstride support to video utility functions
+
+This is a combination of 7 commits:
+* add rowstride support to video utility functions
+* stridetransform: skeletal implementation of stridetransform element
+* stridetransform: implement caps negotiation and related parts
+* stridetransform: implement transform function
+* audioconvert: add NEON acceleration for some conversions
+* add gst_stride_transform_transform_size()
+* fix a small typo..  need to use the smaller of {new_width, orig_width} for the line-by-line copy to avoid overwriting past end of buffer
+---
+ configure.ac                        |    2 +
+ gst-libs/gst/video/gstvideofilter.c |    8 +-
+ gst-libs/gst/video/video.c          |  234 +++++++++++++++---
+ gst-libs/gst/video/video.h          |   39 ++-
+ gst/audioconvert/Makefile.am        |    1 +
+ gst/audioconvert/armv7.c            |  209 ++++++++++++++++
+ gst/audioconvert/audioconvert.c     |   20 +-
+ gst/audioconvert/gstaudioquantize.c |    4 +-
+ gst/audioconvert/gstchannelmix.c    |    4 +-
+ gst/stride/Makefile.am              |   15 ++
+ gst/stride/gststridetransform.c     |  471 +++++++++++++++++++++++++++++++++++
+ gst/stride/gststridetransform.h     |   80 ++++++
+ gst/stride/plugin.c                 |   45 ++++
+ 13 files changed, 1064 insertions(+), 68 deletions(-)
+ create mode 100644 gst/audioconvert/armv7.c
+ create mode 100644 gst/stride/Makefile.am
+ create mode 100644 gst/stride/gststridetransform.c
+ create mode 100644 gst/stride/gststridetransform.h
+ create mode 100644 gst/stride/plugin.c
+
+diff --git a/configure.ac b/configure.ac
+index 6a39c73..5da8ac2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -319,6 +319,7 @@ AG_GST_CHECK_PLUGIN(ffmpegcolorspace)
+ AG_GST_CHECK_PLUGIN(gdp)
+ AG_GST_CHECK_PLUGIN(playback)
+ AG_GST_CHECK_PLUGIN(audioresample)
++AG_GST_CHECK_PLUGIN(stride)
+ AG_GST_CHECK_PLUGIN(subparse)
+ AG_GST_CHECK_PLUGIN(tcp)
+ AG_GST_CHECK_PLUGIN(typefind)
+@@ -739,6 +740,7 @@ gst/ffmpegcolorspace/Makefile
+ gst/gdp/Makefile
+ gst/playback/Makefile
+ gst/audioresample/Makefile
++gst/stride/Makefile
+ gst/subparse/Makefile
+ gst/tcp/Makefile
+ gst/typefind/Makefile
+diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c
+index 2d08a60..6b2d7b7 100644
+--- a/gst-libs/gst/video/gstvideofilter.c
++++ b/gst-libs/gst/video/gstvideofilter.c
+@@ -21,7 +21,7 @@
+  /**
+  * SECTION:gstvideofilter
+  * @short_description: Base class for video filters
+- * 
++ *
+  * <refsect2>
+  * <para>
+  * Provides useful functions and a base class for video filters.
+@@ -78,14 +78,14 @@ gst_video_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
+     guint * size)
+ {
+   GstVideoFormat fmt;
+-  gint width, height;
++  gint width, height, rowstride;
+ 
+-  if (!gst_video_format_parse_caps (caps, &fmt, &width, &height)) {
++  if (!gst_video_format_parse_caps_strided (caps, &fmt, &width, &height, &rowstride)) {
+     GST_WARNING_OBJECT (btrans, "Failed to parse caps %" GST_PTR_FORMAT, caps);
+     return FALSE;
+   }
+ 
+-  *size = gst_video_format_get_size (fmt, width, height);
++  *size = gst_video_format_get_size_strided (fmt, width, height, rowstride);
+ 
+   GST_DEBUG_OBJECT (btrans, "Returning size %u bytes for caps %"
+       GST_PTR_FORMAT, *size, caps);
+diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
+index ab1d8c0..1815bf1 100644
+--- a/gst-libs/gst/video/video.c
++++ b/gst-libs/gst/video/video.c
+@@ -31,7 +31,7 @@
+  *
+  * <refsect2>
+  * <para>
+- * This library contains some helper functions and includes the 
++ * This library contains some helper functions and includes the
+  * videosink and videofilter base classes.
+  * </para>
+  * </refsect2>
+@@ -51,7 +51,7 @@ static GstVideoFormat gst_video_format_from_rgb24_masks (int red_mask,
+  *
+  * A convenience function to retrieve a GValue holding the framerate
+  * from the caps on a pad.
+- * 
++ *
+  * The pad needs to have negotiated caps containing a framerate property.
+  *
+  * Returns: NULL if the pad has no configured caps or the configured caps
+@@ -104,7 +104,7 @@ gst_video_frame_rate (GstPad * pad)
+  *
+  * Inspect the caps of the provided pad and retrieve the width and height of
+  * the video frames it is configured for.
+- * 
++ *
+  * The pad needs to have negotiated caps containing width and height properties.
+  *
+  * Returns: TRUE if the width and height could be retrieved.
+@@ -156,13 +156,13 @@ gst_video_get_size (GstPad * pad, gint * width, gint * height)
+  * @display_par_n: Numerator of the pixel aspect ratio of the display device
+  * @display_par_d: Denominator of the pixel aspect ratio of the display device
+  *
+- * Given the Pixel Aspect Ratio and size of an input video frame, and the 
+- * pixel aspect ratio of the intended display device, calculates the actual 
++ * Given the Pixel Aspect Ratio and size of an input video frame, and the
++ * pixel aspect ratio of the intended display device, calculates the actual
+  * display ratio the video will be rendered with.
+  *
+- * Returns: A boolean indicating success and a calculated Display Ratio in the 
+- * dar_n and dar_d parameters. 
+- * The return value is FALSE in the case of integer overflow or other error. 
++ * Returns: A boolean indicating success and a calculated Display Ratio in the
++ * dar_n and dar_d parameters.
++ * The return value is FALSE in the case of integer overflow or other error.
+  *
+  * Since: 0.10.7
+  */
+@@ -250,28 +250,15 @@ gst_video_format_parse_caps_interlaced (GstCaps * caps, gboolean * interlaced)
+ }
+ 
+ /**
+- * gst_video_format_parse_caps:
+- * @caps: the #GstCaps to parse
+- * @format: the #GstVideoFormat of the video represented by @caps (output)
+- * @width: the width of the video represented by @caps, may be NULL (output)
+- * @height: the height of the video represented by @caps, may be NULL (output)
+- *
+- * Determines the #GstVideoFormat of @caps and places it in the location
+- * pointed to by @format.  Extracts the size of the video and places it
+- * in the location pointed to by @width and @height.  If @caps does not
+- * represent one of the raw video formats listed in #GstVideoFormat, the
+- * function will fail and return FALSE.
+- *
+- * Since: 0.10.16
+- *
+- * Returns: TRUE if @caps was parsed correctly.
++ * see gst_video_format_parse_caps_strided and gst_video_format_parse_caps
+  */
+-gboolean
+-gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+-    int *width, int *height)
++static gboolean
++parse_caps (GstCaps * caps, GstVideoFormat * format, gint *width, gint *height,
++    gboolean stride_ok, gint *rowstride)
+ {
+   GstStructure *structure;
+   gboolean ok = TRUE;
++  gboolean strided = FALSE;
+ 
+   if (!gst_caps_is_fixed (caps))
+     return FALSE;
+@@ -279,7 +266,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+   structure = gst_caps_get_structure (caps, 0);
+ 
+   if (format) {
+-    if (gst_structure_has_name (structure, "video/x-raw-yuv")) {
++    if (gst_structure_has_name (structure, "video/x-raw-yuv") ||
++        (stride_ok &&
++            gst_structure_has_name (structure, "video/x-raw-yuv-strided") &&
++            (strided=TRUE) /* single '=' intentional */)) {
+       guint32 fourcc;
+ 
+       ok &= gst_structure_get_fourcc (structure, "format", &fourcc);
+@@ -288,7 +278,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+       if (*format == GST_VIDEO_FORMAT_UNKNOWN) {
+         ok = FALSE;
+       }
+-    } else if (gst_structure_has_name (structure, "video/x-raw-rgb")) {
++    } else if (gst_structure_has_name (structure, "video/x-raw-rgb") ||
++        (stride_ok &&
++            gst_structure_has_name (structure, "video/x-raw-rgb-strided") &&
++            (strided=TRUE) /* single '=' intentional */)) {
+       int depth;
+       int bpp;
+       int endianness;
+@@ -333,6 +326,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+     }
+   }
+ 
++  /* note: should we require that the caps have these fields, even if
++   * the caller does not particularly request them??
++   */
++
+   if (width) {
+     ok &= gst_structure_get_int (structure, "width", width);
+   }
+@@ -341,11 +338,70 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
+     ok &= gst_structure_get_int (structure, "height", height);
+   }
+ 
++  if (rowstride) {
++    if (strided) {
++      ok &= gst_structure_get_int (structure, "rowstride", rowstride);
++    } else {
++      *rowstride = 0;  /* not a strided format */
++    }
++  }
++
+   return ok;
+ }
+ 
+ 
+ /**
++ * gst_video_format_parse_caps_strided:
++ * @caps: the #GstCaps to parse
++ * @format: the #GstVideoFormat of the video represented by @caps (output)
++ * @width: the width of the video represented by @caps, may be NULL (output)
++ * @height: the height of the video represented by @caps, may be NULL (output)
++ * @rowstride: the rowstride (in bytes) represented by @caps, or 0 if there
++ *    is no rowstride, may be NULL (output)
++ *
++ * Determines the #GstVideoFormat of @caps and places it in the location
++ * pointed to by @format.  Extracts the size of the video and places it
++ * in the location pointed to by @width and @height.  Extracts the row-
++ * stride and places it in the location pointed to by @rowstride.  If
++ * @caps does not represent one of the raw video formats listed in
++ * #GstVideoFormat, the function will fail and return FALSE.
++ *
++ * Since: ???
++ *
++ * Returns: TRUE if @caps was parsed correctly.
++ */
++gboolean
++gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format,
++    int *width, int *height, int *rowstride)
++{
++  return parse_caps (caps, format, width, height, TRUE, rowstride);
++}
++
++/**
++ * gst_video_format_parse_caps:
++ * @caps: the #GstCaps to parse
++ * @format: the #GstVideoFormat of the video represented by @caps (output)
++ * @width: the width of the video represented by @caps, may be NULL (output)
++ * @height: the height of the video represented by @caps, may be NULL (output)
++ *
++ * Determines the #GstVideoFormat of @caps and places it in the location
++ * pointed to by @format.  Extracts the size of the video and places it
++ * in the location pointed to by @width and @height.  If @caps does not
++ * represent one of the raw video formats listed in #GstVideoFormat, the
++ * function will fail and return FALSE.
++ *
++ * Since: 0.10.16
++ *
++ * Returns: TRUE if @caps was parsed correctly.
++ */
++gboolean
++gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format,
++    int *width, int *height)
++{
++  return parse_caps (caps, format, width, height, FALSE, NULL);
++}
++
++/**
+  * gst_video_parse_caps_framerate:
+  * @caps: pointer to a #GstCaps instance
+  * @fps_n: pointer to integer to hold numerator of frame rate (output)
+@@ -444,10 +500,11 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, int width,
+ }
+ 
+ /**
+- * gst_video_format_new_caps:
++ * gst_video_format_new_caps_strided:
+  * @format: the #GstVideoFormat describing the raw video format
+  * @width: width of video
+  * @height: height of video
++ * @rowstride: the rowstride (in bytes), or 0 if no rowstride
+  * @framerate_n: numerator of frame rate
+  * @framerate_d: denominator of frame rate
+  * @par_n: numerator of pixel aspect ratio
+@@ -455,26 +512,29 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, int width,
+  *
+  * Creates a new #GstCaps object based on the parameters provided.
+  *
+- * Since: 0.10.16
++ * Since: ???
+  *
+  * Returns: a new #GstCaps object, or NULL if there was an error
+  */
+ GstCaps *
+-gst_video_format_new_caps (GstVideoFormat format, int width, int height,
++gst_video_format_new_caps_strided (GstVideoFormat format,
++    int width, int height, int rowstride,
+     int framerate_n, int framerate_d, int par_n, int par_d)
+ {
++  GstCaps *caps = NULL;
++
+   g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, NULL);
+   g_return_val_if_fail (width > 0 && height > 0, NULL);
+ 
+   if (gst_video_format_is_yuv (format)) {
+-    return gst_caps_new_simple ("video/x-raw-yuv",
++    caps = gst_caps_new_simple (
++        rowstride ? "video/x-raw-yuv-strided" : "video/x-raw-yuv",
+         "format", GST_TYPE_FOURCC, gst_video_format_to_fourcc (format),
+         "width", G_TYPE_INT, width,
+         "height", G_TYPE_INT, height,
+         "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d,
+         "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL);
+-  }
+-  if (gst_video_format_is_rgb (format)) {
++  } else if (gst_video_format_is_rgb (format)) {
+     GstCaps *caps;
+     int red_mask;
+     int blue_mask;
+@@ -526,7 +586,8 @@ gst_video_format_new_caps (GstVideoFormat format, int width, int height,
+         mask >> (8 * gst_video_format_get_component_offset (format, 2, width,
+             height));
+ 
+-    caps = gst_caps_new_simple ("video/x-raw-rgb",
++    caps = gst_caps_new_simple (
++        rowstride ? "video/x-raw-rgb-strided" : "video/x-raw-rgb",
+         "bpp", G_TYPE_INT, bpp,
+         "depth", G_TYPE_INT, depth,
+         "endianness", G_TYPE_INT, G_BIG_ENDIAN,
+@@ -543,9 +604,39 @@ gst_video_format_new_caps (GstVideoFormat format, int width, int height,
+               height));
+       gst_caps_set_simple (caps, "alpha_mask", G_TYPE_INT, alpha_mask, NULL);
+     }
+-    return caps;
++  } else {
++    return NULL;
++  }
++
++  if (rowstride) {
++    gst_caps_set_simple (caps, "rowstride", G_TYPE_INT, rowstride, NULL);
+   }
+-  return NULL;
++
++  return caps;
++}
++
++/**
++ * gst_video_format_new_caps:
++ * @format: the #GstVideoFormat describing the raw video format
++ * @width: width of video
++ * @height: height of video
++ * @framerate_n: numerator of frame rate
++ * @framerate_d: denominator of frame rate
++ * @par_n: numerator of pixel aspect ratio
++ * @par_d: denominator of pixel aspect ratio
++ *
++ * Creates a new #GstCaps object based on the parameters provided.
++ *
++ * Since: 0.10.16
++ *
++ * Returns: a new #GstCaps object, or NULL if there was an error
++ */
++GstCaps *
++gst_video_format_new_caps (GstVideoFormat format, int width, int height,
++    int framerate_n, int framerate_d, int par_n, int par_d)
++{
++  return gst_video_format_new_caps_strided (format, width, height, 0,
++      framerate_n, framerate_d, par_n, par_d);
+ }
+ 
+ /**
+@@ -643,7 +734,7 @@ gst_video_format_to_fourcc (GstVideoFormat format)
+  * @blue_mask: blue bit mask
+  *
+  * Converts red, green, blue bit masks into the corresponding
+- * #GstVideoFormat.  
++ * #GstVideoFormat.
+  *
+  * Since: 0.10.16
+  *
+@@ -796,7 +887,7 @@ gst_video_format_is_yuv (GstVideoFormat format)
+ /**
+  * gst_video_format_has_alpha:
+  * @format: a #GstVideoFormat
+- * 
++ *
+  * Returns TRUE or FALSE depending on if the video format provides an
+  * alpha channel.
+  *
+@@ -1328,6 +1419,71 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height)
+ }
+ 
+ /**
++ * gst_video_format_get_size_strided:
++ * @format: a #GstVideoFormat
++ * @width: the width of video (in pixels)
++ * @height: the height of video (in pixels)
++ * @rowstride: the rowstride (in bytes), or 0 if no rowstride (in which
++ *    case the returned value is same as #gst_video_format_get_size())
++ *
++ * Calculates the total number of bytes in the raw video format, for a buffer
++ * which may have a rowstride in bytes
++ *
++ * Since: ???
++ *
++ * Returns: size (in bytes) of raw video format
++ */
++int
++gst_video_format_get_size_strided (GstVideoFormat format,
++    int width, int height, int rowstride)
++{
++  if(!rowstride)
++    return gst_video_format_get_size (format, width, height);
++
++  g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, 0);
++  g_return_val_if_fail (width > 0 && height > 0, 0);
++
++  switch (format) {
++    /* all packed formats have the same calculation, ie. rowstride * height
++     */
++    case GST_VIDEO_FORMAT_RGBx:
++    case GST_VIDEO_FORMAT_BGRx:
++    case GST_VIDEO_FORMAT_xRGB:
++    case GST_VIDEO_FORMAT_xBGR:
++    case GST_VIDEO_FORMAT_RGBA:
++    case GST_VIDEO_FORMAT_BGRA:
++    case GST_VIDEO_FORMAT_ARGB:
++    case GST_VIDEO_FORMAT_ABGR:
++    case GST_VIDEO_FORMAT_RGB:
++    case GST_VIDEO_FORMAT_BGR:
++    case GST_VIDEO_FORMAT_YUY2:
++    case GST_VIDEO_FORMAT_YVYU:
++    case GST_VIDEO_FORMAT_UYVY:
++    case GST_VIDEO_FORMAT_AYUV:
++    case GST_VIDEO_FORMAT_v210:
++    case GST_VIDEO_FORMAT_v216:
++      return GST_ROUND_UP_4 (rowstride * height);
++
++    /* these planar formats have 2x sub-sampling in the vertical direction,
++     * so U/V have half as many rows as Y:
++     */
++    case GST_VIDEO_FORMAT_I420:
++    case GST_VIDEO_FORMAT_YV12:
++      return GST_ROUND_UP_4 (2 * rowstride * height);
++
++    /* these planar formats have no sub-sampling in the vertical direction,
++     * so each plane has 'height' number of rows
++     */
++    case GST_VIDEO_FORMAT_Y41B:
++    case GST_VIDEO_FORMAT_Y42B:
++    case GST_VIDEO_FORMAT_Y444:
++      return GST_ROUND_UP_4 (3 * rowstride * height);
++    default:
++      return 0;
++  }
++}
++
++/**
+  * gst_video_format_convert:
+  * @format: a #GstVideoFormat
+  * @width: the width of video
+diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h
+index 162a766..ed20179 100644
+--- a/gst-libs/gst/video/video.h
++++ b/gst-libs/gst/video/video.h
+@@ -33,7 +33,7 @@ G_BEGIN_DECLS
+  * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV
+  * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped)
+  * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
+- * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) 
++ * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...)
+  * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
+  * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last
+  * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last
+@@ -167,13 +167,13 @@ typedef enum {
+ 
+ #define GST_VIDEO_CAPS_RGBx \
+     __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3)
+-  
++
+ #define GST_VIDEO_CAPS_xRGB \
+     __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4)
+-  
++
+ #define GST_VIDEO_CAPS_BGRx \
+     __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1)
+-  
++
+ #define GST_VIDEO_CAPS_xBGR \
+     __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2)
+ 
+@@ -181,13 +181,13 @@ typedef enum {
+ 
+ #define GST_VIDEO_CAPS_RGBA \
+     __GST_VIDEO_CAPS_MAKE_32A (1, 2, 3, 4)
+-  
++
+ #define GST_VIDEO_CAPS_ARGB \
+     __GST_VIDEO_CAPS_MAKE_32A (2, 3, 4, 1)
+-  
++
+ #define GST_VIDEO_CAPS_BGRA \
+     __GST_VIDEO_CAPS_MAKE_32A (3, 2, 1, 4)
+-  
++
+ #define GST_VIDEO_CAPS_ABGR \
+     __GST_VIDEO_CAPS_MAKE_32A (4, 3, 2, 1)
+ 
+@@ -203,9 +203,9 @@ typedef enum {
+   #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
+       GST_VIDEO_CAPS_xRGB
+ #endif
+-      
++
+ /* 15/16 bit */
+-  
++
+ #define GST_VIDEO_CAPS_RGB_16                                           \
+             "video/x-raw-rgb, "                                         \
+             "bpp = (int) 16, "                                          \
+@@ -237,6 +237,16 @@ typedef enum {
+         "height = " GST_VIDEO_SIZE_RANGE ", "                           \
+         "framerate = " GST_VIDEO_FPS_RANGE
+ 
++
++#define GST_VIDEO_CAPS_YUV_STRIDED(fourcc, rowstride)                   \
++        GST_VIDEO_CAPS_YUV(fourcc) "; "                                 \
++        "video/x-raw-yuv-strided, "                                     \
++        "format = (fourcc) " fourcc ", "                                \
++        "rowstride = (int) " rowstride ", "                             \
++        "width = " GST_VIDEO_SIZE_RANGE ", "                            \
++        "height = " GST_VIDEO_SIZE_RANGE ", "                           \
++        "framerate = " GST_VIDEO_FPS_RANGE
++
+ /* buffer flags */
+ 
+ /**
+@@ -276,13 +286,15 @@ gboolean gst_video_get_size   (GstPad *pad,
+                                gint   *height);
+ 
+ gboolean gst_video_calculate_display_ratio (guint *dar_n, guint *dar_d,
+-            guint video_width, guint video_height, 
+-            guint video_par_n, guint video_par_d, 
++            guint video_width, guint video_height,
++            guint video_par_n, guint video_par_d,
+             guint display_par_n, guint display_par_d);
+ 
+ gboolean gst_video_format_parse_caps (GstCaps *caps, GstVideoFormat *format,
+     int *width, int *height);
+ gboolean gst_video_format_parse_caps_interlaced (GstCaps *caps, gboolean *interlaced);
++gboolean gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format,
++    int *width, int *height, int *rowstride);
+ gboolean gst_video_parse_caps_framerate (GstCaps *caps,
+     int *fps_n, int *fps_d);
+ gboolean gst_video_parse_caps_pixel_aspect_ratio (GstCaps *caps,
+@@ -293,6 +305,9 @@ GstCaps * gst_video_format_new_caps (GstVideoFormat format,
+ GstCaps * gst_video_format_new_caps_interlaced (GstVideoFormat format,
+     int width, int height, int framerate_n, int framerate_d,
+ 						int par_n, int par_d, gboolean interlaced);
++GstCaps * gst_video_format_new_caps_strided (GstVideoFormat format,
++    int width, int height, int rowstride,
++    int framerate_n, int framerate_d, int par_n, int par_d);
+ GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc);
+ guint32 gst_video_format_to_fourcc (GstVideoFormat format);
+ gboolean gst_video_format_is_rgb (GstVideoFormat format);
+@@ -308,6 +323,8 @@ int gst_video_format_get_component_height (GstVideoFormat format, int component,
+ int gst_video_format_get_component_offset (GstVideoFormat format, int component,
+     int width, int height);
+ int gst_video_format_get_size (GstVideoFormat format, int width, int height);
++int gst_video_format_get_size_strided (GstVideoFormat format,
++    int width, int height, int rowstride);
+ gboolean gst_video_format_convert (GstVideoFormat format, int width, int height,
+     int fps_n, int fps_d,
+     GstFormat src_format, gint64 src_value,
+diff --git a/gst/audioconvert/Makefile.am b/gst/audioconvert/Makefile.am
+index 94978bb..2d273db 100644
+--- a/gst/audioconvert/Makefile.am
++++ b/gst/audioconvert/Makefile.am
+@@ -5,6 +5,7 @@ libgstaudioconvert_la_SOURCES = \
+ 	audioconvert.c \
+ 	gstchannelmix.c \
+ 	gstaudioquantize.c \
++	armv7.c \
+ 	plugin.c
+ 
+ libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+diff --git a/gst/audioconvert/armv7.c b/gst/audioconvert/armv7.c
+new file mode 100644
+index 0000000..e39d29d
+--- /dev/null
++++ b/gst/audioconvert/armv7.c
+@@ -0,0 +1,209 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: NEON/VFP accelerated functions for armv7 architecture
++ *  Created on: Aug 8, 2009
++ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef __ARM_NEON__
++#include <arm_neon.h>
++#include <string.h>
++
++#include "audioconvert.h"
++
++
++void
++gst_audio_quantize_quantize_signed_tpdf_none (AudioConvertCtx *ctx,
++    gint32 *src, gint32 *dst, gint count)
++{
++  static guint32 state[4] = {
++      0xdeadbeef,
++      0x305b8cc9,
++      0x6c46ec93,
++      0xad13b0cd
++  };
++
++  gint scale = ctx->out_scale;
++  count *= ctx->out.channels;
++
++  if (scale > 0) {
++    guint32 mask = 0xffffffff & (0xffffffff << scale);
++    guint32 bias = (1U << (scale - 1)) >> 1;
++    gint32 dither = (1<<(scale - 1));
++
++    int32x4_t  vrand;
++    uint32x4_t vstate;
++    uint32x4_t v12345;
++    int32x4_t  vtmp;
++    uint32x4_t vmask;
++
++    vstate = vld1q_u32 (state);
++    v12345 = vmovq_n_u32 (12345);
++    vmask  = vmovq_n_u32 (mask);
++
++    /* until we have less 4 words less to process, use vector instructions
++     * to do everything 4x at a time:
++     */
++    for (;;count-=4) {
++      int64x2_t  vtmp_lo;
++      int64x2_t  vtmp_hi;
++      uint32x4_t vstate2;
++      int32x2_t  vrand_lo;
++      int32x2_t  vrand_hi;
++
++      /* generate next eight random words: (see gst_fast_random_uint32())
++       *
++       *    state = state * 1103515245 + 12345
++       */
++      vstate2 = vmulq_n_u32 (vstate, 1103515245);
++      vstate2 = vaddq_u32 (vstate2, v12345);
++      vstate  = vmulq_n_u32 (vstate2, 1103515245);
++      vstate  = vaddq_u32 (vstate2, v12345);
++
++      /* generate next four scaled random values:
++       *
++       *    gint32 start = bias - dither;
++       *    gint32 end = bias + dither - 1;
++       *    gint64 tmp1 = gst_fast_random_uint32 ();
++       *    gint64 tmp2 = gst_fast_random_uint32 ();
++       *    rand = (gint32)(((tmp1+tmp2) * (end - start)) / (1LLU<<32) + start);
++       *
++       * need to split vstate and vstate2 into 2*2 int64x2_t and add....
++       */
++      vstate2 = vaddq_u32 (vstate, vstate2);     /* tmp1+tmp2 */
++      vtmp_lo = vreinterpretq_s64_u64 (          /* * (end-start) */
++          vmull_n_u32 (vget_low_u32 (vstate2), (2*dither) - 1));
++      vtmp_hi = vreinterpretq_s64_u64 (          /* * (end-start) */
++          vmull_n_u32 (vget_high_u32 (vstate2), (2*dither) - 1));
++
++      vtmp_lo = vshrq_n_s64 (vtmp_lo, 32);       /* / (1LLU<<32) */
++      vtmp_hi = vshrq_n_s64 (vtmp_hi, 32);       /* / (1LLU<<32) */
++
++
++      /* now want to put vtmp_hi and vtmp_lo back together..
++       * then add 'start' (bias-dither).. which is negative..
++       */
++      vrand_lo = vmovn_s64 (vtmp_lo);
++      vrand_hi = vmovn_s64 (vtmp_hi);
++      vrand    = vcombine_s32 (vrand_lo, vrand_hi);
++      vrand    = vaddq_s32 (vrand, vmovq_n_s32 (bias-dither));
++
++      /* load next 4 words:
++       */
++      vtmp = vld1q_s32 (src);
++      src += 4;
++
++      /* perform saturating add of random noise... we don't want the
++       * value to wrap around:
++       *
++       * XXX I *think* vqaddq will handle saturation for underflow too..
++       */
++      vtmp = vqaddq_s32 (vtmp, vrand);
++      vtmp = vreinterpretq_s32_u32 (
++          vandq_u32 (vreinterpretq_u32_s32 (vtmp), vmask));
++
++      /* we check for less than four remaining words at the end, before
++       * we store the result back.. the assumption is that it shouldn't
++       * cause a segfault to read past the end of 'src', and there is no
++       * harm in processing a few garbage words.  But we definitely don't
++       * want to write past the end of 'dst'
++       */
++      if (count<4) break;
++
++      /* store 4 words to result:
++       */
++      vst1q_s32 (dst, vtmp);
++      dst += 4;
++    }
++
++    vst1q_u32 (state, vstate);
++
++    /* at this point, we could have 0-3 result bytes in vtmp to write
++     * back out to 'dst':
++     */
++    if (count) {
++      gint32 tmpdst[4];
++      gint32 *tmpp = tmpdst;
++
++      vst1q_s32 (tmpdst, vtmp);
++
++      while (count--) {
++        *dst++ = *tmpp++;
++      }
++    }
++
++  } else {
++    memmove (dst, src, count);
++  }
++}
++
++void
++gst_audio_convert_unpack_float_le (gfloat * src, gint32 * dst, gint s, gint count)
++{
++  float32x4_t vsrc;
++  float32x4_t v05;
++  int32x4_t   vdst;
++
++  v05 = vmovq_n_f32 (0.5);
++
++  for (;;count-=4) {
++
++    /* load next 4 words:
++     */
++    vsrc = vld1q_f32 ((float32_t *)src);
++    src += 4;
++
++    /* convert to int:
++     */
++    vsrc = vmulq_n_f32 (vsrc, 2147483647.0);
++    vsrc = vaddq_f32 (vsrc, v05);
++    vdst = vcvtq_s32_f32 (vsrc);
++
++    /* we check for less than four remaining words at the end, before
++     * we store the result back.. the assumption is that it shouldn't
++     * cause a segfault to read past the end of 'src', and there is no
++     * harm in processing a few garbage words.  But we definitely don't
++     * want to write past the end of 'dst'
++     */
++    if (count<4) break;
++
++    /* store 4 words to result:
++     */
++    vst1q_s32 (dst, vdst);
++    dst += 4;
++  }
++
++  /* at this point, we could have 0-3 result bytes in vtmp to write
++   * back out to 'dst':
++   */
++  if (count) {
++    gint32 tmpdst[4];
++    gint32 *tmpp = tmpdst;
++
++    vst1q_s32 (tmpdst, vdst);
++
++    while (count--) {
++      *dst++ = *tmpp++;
++    }
++  }
++}
++
++
++#endif
+diff --git a/gst/audioconvert/audioconvert.c b/gst/audioconvert/audioconvert.c
+index 4780324..c18d217 100644
+--- a/gst/audioconvert/audioconvert.c
++++ b/gst/audioconvert/audioconvert.c
+@@ -38,11 +38,11 @@
+  * unpack code
+  */
+ #define MAKE_UNPACK_FUNC_NAME(name)                                     \
+-audio_convert_unpack_##name
++gst_audio_convert_unpack_##name
+ 
+ /* unpack from integer to signed integer 32 */
+ #define MAKE_UNPACK_FUNC_II(name, stride, sign, READ_FUNC)              \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
+         gint scale, gint count)                                         \
+ {                                                                       \
+@@ -54,7 +54,7 @@ MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
+ 
+ /* unpack from float to signed integer 32 */
+ #define MAKE_UNPACK_FUNC_FI(name, type, READ_FUNC)                            \
+-static void                                                                   \
++void __attribute__((weak))                                                    \
+ MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
+ {                                                                             \
+   gdouble temp;                                                               \
+@@ -68,7 +68,7 @@ MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
+ 
+ /* unpack from float to float 64 (double) */
+ #define MAKE_UNPACK_FUNC_FF(name, type, FUNC)                                 \
+-static void                                                                   \
++void __attribute__((weak))                                                    \
+ MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
+     gint count)                                                               \
+ {                                                                             \
+@@ -78,7 +78,7 @@ MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
+ 
+ /* unpack from int to float 64 (double) */
+ #define MAKE_UNPACK_FUNC_IF(name, stride, sign, READ_FUNC)                    \
+-static void                                                                   \
++void __attribute__((weak))                                                    \
+ MAKE_UNPACK_FUNC_NAME (name) (guint8 * src, gdouble * dst, gint scale,        \
+     gint count)                                                               \
+ {                                                                             \
+@@ -158,7 +158,7 @@ audio_convert_pack_##name
+ 
+ /* pack from signed integer 32 to integer */
+ #define MAKE_PACK_FUNC_II(name, stride, sign, WRITE_FUNC)               \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
+         gint scale, gint count)                                         \
+ {                                                                       \
+@@ -172,7 +172,7 @@ MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
+ 
+ /* pack from signed integer 32 to float */
+ #define MAKE_PACK_FUNC_IF(name, type, FUNC)                             \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
+     gint count)                                                         \
+ {                                                                       \
+@@ -182,7 +182,7 @@ MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
+ 
+ /* pack from float 64 (double) to float */
+ #define MAKE_PACK_FUNC_FF(name, type, FUNC)                             \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
+     gint count)                                                         \
+ {                                                                       \
+@@ -194,7 +194,7 @@ MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
+  * the floats are already in the correct range. Only a cast is needed.
+  */
+ #define MAKE_PACK_FUNC_FI_S(name, stride, WRITE_FUNC)                   \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
+     gint count)                                                         \
+ {                                                                       \
+@@ -212,7 +212,7 @@ MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
+  * and an addition of 2^(target_depth-1) to get in the correct unsigned
+  * range. */
+ #define MAKE_PACK_FUNC_FI_U(name, stride, WRITE_FUNC)                   \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
+     gint count)                                                         \
+ {                                                                       \
+diff --git a/gst/audioconvert/gstaudioquantize.c b/gst/audioconvert/gstaudioquantize.c
+index 2155397..be959c4 100644
+--- a/gst/audioconvert/gstaudioquantize.c
++++ b/gst/audioconvert/gstaudioquantize.c
+@@ -46,7 +46,7 @@ gst_audio_quantize_quantize_##name
+ 
+ #define MAKE_QUANTIZE_FUNC_I(name, DITHER_INIT_FUNC, ADD_DITHER_FUNC,   \
+                              ROUND_FUNC)                                \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src,      \
+                                 gint32 *dst, gint count)                \
+ {                                                                       \
+@@ -86,7 +86,7 @@ MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src,      \
+ #define MAKE_QUANTIZE_FUNC_F(name, DITHER_INIT_FUNC, NS_INIT_FUNC,      \
+                              ADD_NS_FUNC, ADD_DITHER_FUNC,              \
+                              UPDATE_ERROR_FUNC)                         \
+-static void                                                             \
++void __attribute__((weak))                                              \
+ MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gdouble *src,     \
+                                 gdouble *dst, gint count)               \
+ {                                                                       \
+diff --git a/gst/audioconvert/gstchannelmix.c b/gst/audioconvert/gstchannelmix.c
+index 1dbfcce..9ace1cb 100644
+--- a/gst/audioconvert/gstchannelmix.c
++++ b/gst/audioconvert/gstchannelmix.c
+@@ -663,7 +663,7 @@ gst_channel_mix_passthrough (AudioConvertCtx * this)
+ 
+ /* IMPORTANT: out_data == in_data is possible, make sure to not overwrite data
+  * you might need later on! */
+-void
++void __attribute__((weak))
+ gst_channel_mix_mix_int (AudioConvertCtx * this,
+     gint32 * in_data, gint32 * out_data, gint samples)
+ {
+@@ -702,7 +702,7 @@ gst_channel_mix_mix_int (AudioConvertCtx * this,
+   }
+ }
+ 
+-void
++void __attribute__((weak))
+ gst_channel_mix_mix_float (AudioConvertCtx * this,
+     gdouble * in_data, gdouble * out_data, gint samples)
+ {
+diff --git a/gst/stride/Makefile.am b/gst/stride/Makefile.am
+new file mode 100644
+index 0000000..1adc197
+--- /dev/null
++++ b/gst/stride/Makefile.am
+@@ -0,0 +1,15 @@
++plugin_LTLIBRARIES = libgststridetransform.la
++
++libgststridetransform_la_SOURCES = \
++	gststridetransform.c \
++	plugin.c
++
++libgststridetransform_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
++libgststridetransform_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
++libgststridetransform_la_LIBADD = \
++	$(top_builddir)/gst-libs/gst/video/libgstvideo- at GST_MAJORMINOR@.la \
++	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
++libgststridetransform_la_LIBTOOLFLAGS = --tag=disable-static
++
++noinst_HEADERS = \
++	gststridetransform.h
+diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c
+new file mode 100644
+index 0000000..ea52500
+--- /dev/null
++++ b/gst/stride/gststridetransform.c
+@@ -0,0 +1,471 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: V4L2 sink element
++ *  Created on: Jul 30, 2009
++ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++
++/**
++ * SECTION:element-stridetransform
++ *
++ * stridetransform can be used to convert between video buffers
++ * with and without stride, or between buffers with differing
++ * stride
++ *
++ * <refsect2>
++ * <title>Example launch lines</title>
++ * |[
++ * gst-launch videotestsrc ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 !
++ * stridetransform ! video/x-raw-yuv-strided,format=(fourcc)YUY2,width=320,height=240,rowstride=700,framerate=30/1 !
++ * stridetransform ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 !
++ * v4l2sink
++ * ]| This pipeline ???? TODO
++ * </refsect2>
++ */
++
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <string.h>
++#include <gst/video/video.h>
++
++#include "gst/gst-i18n-plugin.h"
++#include "gststridetransform.h"
++
++
++static const GstElementDetails stridetransform_details =
++GST_ELEMENT_DETAILS ("Stride transform",
++    "Filter/Converter/Video",
++    "Convert between video buffers with and without stride, or with differing stride",
++    "Rob Clark <rob at ti.com>,");
++
++
++/* TODO: add rgb formats too! */
++#define SUPPORTED_CAPS                                                        \
++  GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY }", "[ 0, max ]")
++
++
++static GstStaticPadTemplate src_template =
++GST_STATIC_PAD_TEMPLATE ("src",
++    GST_PAD_SRC,
++    GST_PAD_ALWAYS,
++    GST_STATIC_CAPS (SUPPORTED_CAPS)
++    );
++
++static GstStaticPadTemplate sink_template =
++GST_STATIC_PAD_TEMPLATE ("sink",
++    GST_PAD_SINK,
++    GST_PAD_ALWAYS,
++    GST_STATIC_CAPS (SUPPORTED_CAPS)
++    );
++
++
++GST_DEBUG_CATEGORY (stridetransform_debug);
++#define GST_CAT_DEFAULT stridetransform_debug
++
++/* type functions */
++static void gst_stride_transform_dispose (GObject *obj);
++
++/* GstBaseTransform functions */
++static gboolean gst_stride_transform_get_unit_size (GstBaseTransform *base,
++    GstCaps *caps, guint *size);
++static gboolean gst_stride_transform_transform_size (GstBaseTransform *base,
++    GstPadDirection direction,
++    GstCaps *caps, guint size,
++    GstCaps *othercaps, guint *othersize);
++static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform *base,
++    GstPadDirection direction, GstCaps *caps);
++static gboolean gst_stride_transform_set_caps (GstBaseTransform *base,
++    GstCaps *incaps, GstCaps *outcaps);
++static GstFlowReturn gst_stride_transform_transform (GstBaseTransform *base,
++    GstBuffer *inbuf, GstBuffer *outbuf);
++static GstFlowReturn gst_stride_transform_transform_ip (GstBaseTransform *base,
++    GstBuffer *buf);
++
++GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, GST_TYPE_VIDEO_FILTER);
++
++
++static void
++gst_stride_transform_base_init (gpointer g_class)
++{
++  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
++
++  GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, "stride transform element");
++
++  gst_element_class_set_details (gstelement_class, &stridetransform_details);
++
++  gst_element_class_add_pad_template (gstelement_class,
++      gst_static_pad_template_get (&sink_template));
++  gst_element_class_add_pad_template (gstelement_class,
++      gst_static_pad_template_get (&src_template));
++}
++
++static void
++gst_stride_transform_class_init (GstStrideTransformClass *klass)
++{
++  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++  GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass);
++
++  gobject_class->dispose = gst_stride_transform_dispose;
++
++  basetransform_class->get_unit_size =
++      GST_DEBUG_FUNCPTR (gst_stride_transform_get_unit_size);
++  basetransform_class->transform_size =
++      GST_DEBUG_FUNCPTR (gst_stride_transform_transform_size);
++  basetransform_class->transform_caps =
++      GST_DEBUG_FUNCPTR (gst_stride_transform_transform_caps);
++  basetransform_class->set_caps =
++      GST_DEBUG_FUNCPTR (gst_stride_transform_set_caps);
++  basetransform_class->transform_ip =
++      GST_DEBUG_FUNCPTR (gst_stride_transform_transform_ip);
++  basetransform_class->transform =
++      GST_DEBUG_FUNCPTR (gst_stride_transform_transform);
++
++  basetransform_class->passthrough_on_same_caps = TRUE;
++}
++
++static void
++gst_stride_transform_init (GstStrideTransform *self, GstStrideTransformClass *klass)
++{
++  GST_DEBUG_OBJECT (self, "not implemented");
++}
++
++
++static void
++gst_stride_transform_dispose (GObject *object)
++{
++  GstStrideTransform *self = GST_STRIDE_TRANSFORM (object);
++  GST_DEBUG_OBJECT (self, "not implemented");
++  G_OBJECT_CLASS (parent_class)->dispose (object);
++}
++
++/**
++ * figure out the required buffer size based on @caps
++ */
++static gboolean
++gst_stride_transform_get_unit_size (GstBaseTransform *base,
++    GstCaps *caps, guint *size)
++{
++  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++  GstVideoFormat format;
++  gint width, height, rowstride;
++
++  g_return_val_if_fail (gst_video_format_parse_caps_strided (
++      caps, &format, &width, &height, &rowstride), FALSE);
++
++  *size = gst_video_format_get_size_strided (format, width, height, rowstride);
++
++  GST_DEBUG_OBJECT (self,
++      "format=%d, width=%d, height=%d, rowstride=%d -> size=%d",
++      format, width, height, rowstride, *size);
++
++  return TRUE;
++}
++
++/**
++ * Default transform_size function is no good, as it assumes that the output
++ * buffer size is a multiple of the unit size.. which doesn't hold true.
++ */
++static gboolean
++gst_stride_transform_transform_size (GstBaseTransform *base,
++    GstPadDirection direction,
++    GstCaps *caps, guint size,
++    GstCaps *othercaps, guint *othersize)
++{
++  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++  guint idx = (direction == GST_PAD_SINK) ? 0 : 1;
++
++  if (self->cached_caps[idx] != othercaps)
++  {
++    if (!gst_stride_transform_get_unit_size (base, othercaps,
++        &(self->cached_size[idx])))
++    {
++      return FALSE;
++    }
++  }
++
++  *othersize = self->cached_size[idx];
++
++  return TRUE;
++}
++
++
++
++/**
++ * helper to add all fields, other than rowstride to @caps, copied from @s.
++ */
++static void
++add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rowstride)
++{
++  gint idx;
++  GstStructure *new_s = gst_structure_new (name, NULL);
++
++  if (rowstride) {
++    gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
++  }
++
++  idx = gst_structure_n_fields (s) - 1;
++  while (idx >= 0) {
++    const gchar *name = gst_structure_nth_field_name (s, idx);
++    if (strcmp ("rowstride", name)) {
++      const GValue *val = gst_structure_get_value (s, name);
++      gst_structure_set_value (new_s, name, val);
++    }
++    idx--;
++  }
++
++  gst_caps_merge_structure (caps, new_s);
++}
++
++
++/**
++ * we can transform @caps to strided or non-strided caps with otherwise
++ * identical parameters
++ */
++static GstCaps *
++gst_stride_transform_transform_caps (GstBaseTransform *base,
++    GstPadDirection direction, GstCaps *caps)
++{
++  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++  GstCaps *ret;
++  GstStructure *s;
++
++  g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), NULL);
++
++  GST_DEBUG_OBJECT (self, "direction=%d, caps=%p", direction, caps);
++  LOG_CAPS (self, caps);
++
++  ret = gst_caps_new_empty ();
++  s = gst_caps_get_structure (caps, 0);
++
++  if (gst_structure_has_name (s, "video/x-raw-yuv") ||
++      gst_structure_has_name (s, "video/x-raw-yuv-strided")) {
++
++    add_all_fields (ret, "video/x-raw-yuv", s, FALSE);
++    add_all_fields (ret, "video/x-raw-yuv-strided", s, TRUE);
++
++  } else if (gst_structure_has_name (s, "video/x-raw-rgb") ||
++      gst_structure_has_name (s, "video/x-raw-rgb-strided")) {
++
++    add_all_fields (ret, "video/x-raw-rgb", s, FALSE);
++    add_all_fields (ret, "video/x-raw-rgb-strided", s, TRUE);
++
++  }
++
++  LOG_CAPS (self, ret);
++
++  return ret;
++}
++
++/**
++ * at this point, we have identical fourcc, width, and height for @incaps
++ * and @outcaps..  so we need to extract these to use for transforming,
++ * plus the requested rowstride of the @incaps and @outcaps
++ */
++static gboolean
++gst_stride_transform_set_caps (GstBaseTransform *base,
++    GstCaps *incaps, GstCaps *outcaps)
++{
++  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++  GstVideoFormat format;
++  gint width, height;
++
++  LOG_CAPS (self, incaps);
++  LOG_CAPS (self, outcaps);
++
++  g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps,
++      &self->format, &self->width, &self->height, &self->in_rowstride), FALSE);
++  g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps,
++      &format, &width, &height, &self->out_rowstride), FALSE);
++
++  g_return_val_if_fail (self->format == format, FALSE);
++  g_return_val_if_fail (self->width  == width,  FALSE);
++  g_return_val_if_fail (self->height == height, FALSE);
++
++  return TRUE;
++}
++
++/* ************************************************************************* */
++
++/**
++ * Convert from one stride to another... like memmove, but can convert stride in
++ * the process.  This function is not aware of pixels, only of bytes.  So widths
++ * are given in bytes, not pixels.  The new_buf and orig_buf can point to the
++ * same buffers to do an in-place conversion, but the buffer should be large
++ * enough.
++ */
++static void
++stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height)
++{
++  int row;
++
++  GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d",
++      new_buf, orig_buf, new_width, orig_width, height);
++  /* if increasing the stride, work from bottom-up to avoid overwriting data
++   * that has not been moved yet.. otherwise, work in the opposite order,
++   * for the same reason.
++   */
++  if (new_width > orig_width) {
++    for (row=height-1; row>=0; row--) {
++      memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width);
++    }
++  } else {
++    for (row=0; row<height; row++) {
++      memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width);
++    }
++  }
++}
++
++
++/**
++ * Convert from a non-strided buffer to strided.  The two buffer pointers could
++ * be pointing to the same memory block for in-place transform.. assuming that
++ * the buffer is large enough
++ *
++ * @strided:    the pointer to the resulting strided buffer
++ * @unstrided:  the pointer to the initial unstrided buffer
++ * @fourcc:     the color format
++ * @stride:     the stride, in bytes
++ * @width:      the width in pixels
++ * @height:     the height in pixels
++ */
++static GstFlowReturn
++stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided)
++{
++  gint width  = self->width;
++  gint height = self->height;
++  gint stride = self->out_rowstride;
++
++  switch (self->format) {
++#if 0 /* TODO */
++    case GST_VIDEO_FORMAT_NV12:
++      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++      stridemove (strided, unstrided, stride, width, height * 1.5);
++      return GST_FLOW_OK;
++#endif
++    case GST_VIDEO_FORMAT_I420:
++    case GST_VIDEO_FORMAT_YV12:
++      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++      stridemove (
++          strided + (int)(height*stride*1.5),
++          unstrided + (int)(height*width*1.5),
++          stride, width/2, height);                             /* move U/V */
++      stridemove (
++          strided + (height*stride),
++          unstrided + (height*width),
++          stride, width/2, height);                             /* move V/U */
++      stridemove (strided, unstrided, stride, width, height);   /* move Y */
++      return GST_FLOW_OK;
++    case GST_VIDEO_FORMAT_YUY2:
++    case GST_VIDEO_FORMAT_UYVY:
++      g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR);
++      stridemove (strided, unstrided, stride, width*2, height);
++      return GST_FLOW_OK;
++    default:
++      GST_WARNING ("unknown color format!\n");
++      return GST_FLOW_ERROR;
++  }
++}
++
++
++/**
++ * Convert from a strided buffer to non-strided.  The two buffer pointers could
++ * be pointing to the same memory block for in-place transform..
++ *
++ * @unstrided:  the pointer to the resulting unstrided buffer
++ * @strided:    the pointer to the initial strided buffer
++ */
++static GstFlowReturn
++unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided)
++{
++  gint width  = self->width;
++  gint height = self->height;
++  gint stride = self->in_rowstride;
++
++  switch (self->format) {
++#if 0 /* TODO */
++    case GST_VIDEO_FORMAT_NV12:
++      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++      stridemove (unstrided, strided, width, stride, height * 1.5);
++      return GST_FLOW_OK;
++#endif
++    case GST_VIDEO_FORMAT_I420:
++    case GST_VIDEO_FORMAT_YV12:
++      g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
++      stridemove (unstrided, strided, width, stride, height);   /* move Y */
++      stridemove (
++          unstrided + (height*width),
++          strided + (height*stride),
++          width/2, stride, height);                             /* move V/U */
++      stridemove (
++          unstrided + (int)(height*width*1.5),
++          strided + (int)(height*stride*1.5),
++          width/2, stride, height);                             /* move U/V */
++      return GST_FLOW_OK;
++    case GST_VIDEO_FORMAT_YUY2:
++    case GST_VIDEO_FORMAT_UYVY:
++      g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR);
++      stridemove (unstrided, strided, width*2, stride, height);
++      return GST_FLOW_OK;
++    default:
++      GST_WARNING ("unknown color format!\n");
++      return GST_FLOW_ERROR;
++  }
++}
++
++
++static GstFlowReturn
++gst_stride_transform_transform (GstBaseTransform *base,
++    GstBuffer *inbuf, GstBuffer *outbuf)
++{
++  GstStrideTransform *self = GST_STRIDE_TRANSFORM (base);
++
++  GST_DEBUG_OBJECT (self, "inbuf=%p (size=%d), outbuf=%p (size=%d)",
++      inbuf, GST_BUFFER_SIZE (inbuf),
++      outbuf, GST_BUFFER_SIZE (outbuf));
++
++  if (self->in_rowstride && self->out_rowstride) {
++    GST_DEBUG_OBJECT (self, "not implemented");  // TODO
++    return GST_FLOW_ERROR;
++  } else if (self->in_rowstride) {
++    return unstridify (self,
++        GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf));
++  } else if (self->out_rowstride) {
++    return stridify (self,
++        GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf));
++  }
++
++  GST_DEBUG_OBJECT (self, "this shouldn't happen!  in_rowstride=%d, out_rowstride=%d",
++      self->in_rowstride, self->out_rowstride);
++
++  return GST_FLOW_ERROR;
++}
++
++static GstFlowReturn
++gst_stride_transform_transform_ip (GstBaseTransform *base,
++    GstBuffer *buf)
++{
++  /* transform function is safe to call with same buffer ptr:
++   */
++  return gst_stride_transform_transform (base, buf, buf);
++}
+diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h
+new file mode 100644
+index 0000000..481959e
+--- /dev/null
++++ b/gst/stride/gststridetransform.h
+@@ -0,0 +1,80 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: V4L2 sink element
++ *  Created on: Jul 2, 2009
++ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifndef __GSTSTRIDETRANSFORM_H__
++#define __GSTSTRIDETRANSFORM_H__
++
++
++#include <gst/video/gstvideofilter.h>
++#include <gst/video/video.h>
++
++
++G_BEGIN_DECLS
++
++#define GST_TYPE_STRIDE_TRANSFORM \
++  (gst_stride_transform_get_type())
++#define GST_STRIDE_TRANSFORM(obj) \
++  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransform))
++#define GST_STRIDE_TRANSFORM_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransformClass))
++#define GST_IS_STRIDE_TRANSFORM(obj) \
++  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STRIDE_TRANSFORM))
++#define GST_IS_STRIDE_TRANSFORM_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STRIDE_TRANSFORM))
++
++typedef struct _GstStrideTransform GstStrideTransform;
++typedef struct _GstStrideTransformClass GstStrideTransformClass;
++
++/**
++ * GstStrideTransform:
++ *
++ * Opaque datastructure.
++ */
++struct _GstStrideTransform {
++  GstVideoFilter videofilter;
++
++  /*< private >*/
++  GstVideoFormat format;
++  gint width, height;
++  gint in_rowstride;
++  gint out_rowstride;
++
++  /* for caching the tranform_size() results.. */
++  GstCaps *cached_caps[2];
++  guint cached_size[2];
++};
++
++struct _GstStrideTransformClass {
++  GstVideoFilterClass parent_class;
++};
++
++GType gst_stride_transform_get_type (void);
++
++G_END_DECLS
++
++
++#define LOG_CAPS(obj, caps)  GST_DEBUG_OBJECT (obj, "%s: %"GST_PTR_FORMAT, #caps, caps)
++
++
++#endif /* __GSTSTRIDETRANSFORM_H__ */
+diff --git a/gst/stride/plugin.c b/gst/stride/plugin.c
+new file mode 100644
+index 0000000..7672bdc
+--- /dev/null
++++ b/gst/stride/plugin.c
+@@ -0,0 +1,45 @@
++/* GStreamer
++ *
++ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
++ *
++ * Description: V4L2 sink element
++ *  Created on: Jul 30, 2009
++ *      Author: Rob Clark <rob at ti.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., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include "gststridetransform.h"
++
++static gboolean
++plugin_init (GstPlugin * plugin)
++{
++  if (!gst_element_register (plugin, "stridetransform",
++          GST_RANK_PRIMARY, gst_stride_transform_get_type ()))
++    return FALSE;
++
++  return TRUE;
++}
++
++GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
++    GST_VERSION_MINOR,
++    "stridetransform",
++    "Convert video from strided to non-strided, or between different row-strides",
++    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+-- 
+1.6.3.1
+
diff --git a/recipes/obsolete/gstreamer/gst-plugins-base_0.10.25.bb b/recipes/obsolete/gstreamer/gst-plugins-base_0.10.25.bb
new file mode 100644
index 0000000..9e82171
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-plugins-base_0.10.25.bb
@@ -0,0 +1,19 @@
+require gst-plugins.inc
+
+SRC_URI += "file://fix-playbin2.patch \
+            file://gst-plugins-base_rowstride.patch \
+"
+
+PR = "${INC_PR}.4"
+
+PROVIDES += "gst-plugins"
+
+# gst-plugins-base only builds the alsa plugin
+# if alsa has been built and is present.  You will
+# not get an error if this is not present, just 
+# a missing alsa plugin
+DEPENDS += "cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype  libxv libxrandr"
+
+
+SRC_URI[archive.md5sum] = "d29669dd79276c5cd94e1613c03cd9ab"
+SRC_URI[archive.sha256sum] = "0ab2f7e1d818e7af1be99c4eae02ba69d4a1b8f7e3527929a6426f1daa0d4607"
diff --git a/recipes/obsolete/gstreamer/gst-plugins-base_0.10.31.bb b/recipes/obsolete/gstreamer/gst-plugins-base_0.10.31.bb
new file mode 100644
index 0000000..b68fffb
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-plugins-base_0.10.31.bb
@@ -0,0 +1,26 @@
+require gst-plugins.inc
+
+SRC_URI += " \
+            file://ivorbis-thumb.patch \
+"
+
+SRC_URI[archive.md5sum] = "9baa0d87e81c88b2477a3554ab629c46"
+SRC_URI[archive.sha256sum] = "abb006c78222cfb69d31e983268d1d5219e9d4e0da24c6c4cd687968af7a33bd"
+
+PR = "${INC_PR}.1"
+
+PROVIDES += "gst-plugins"
+
+# gst-plugins-base only builds the alsa plugin
+# if alsa has been built and is present.  You will
+# not get an error if this is not present, just
+# a missing alsa plugin
+DEPENDS += "udev cdparanoia pango libtheora alsa-lib libsm virtual/libx11 freetype  libxv libxrandr gtk+"
+
+# Needs a udev that enabled gudev, which isn't the default
+EXTRA_OECONF_append = " --with-gudev"
+
+do_configure_prepend() {
+	sed -i -e s:QtGui:NoQtGui:g ${S}/configure.ac
+}
+
diff --git a/recipes/obsolete/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch b/recipes/obsolete/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch
new file mode 100644
index 0000000..749c491
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-plugins-good/fix-unit-scale-asseration.patch
@@ -0,0 +1,33 @@
+diff -uNr gst-plugins-good-0.10.15/sys/v4l2/gstv4l2src.c gst-plugins-good-0.10.15.new/sys/v4l2/gstv4l2src.c
+--- gst-plugins-good-0.10.15/sys/v4l2/gstv4l2src.c	2009-05-11 19:00:07.000000000 -0500
++++ gst-plugins-good-0.10.15.new/sys/v4l2/gstv4l2src.c	2009-06-22 09:51:50.000000000 -0500
+@@ -1377,14 +1377,22 @@
+       timestamp = gst_clock_get_time (clock) - timestamp;
+       gst_object_unref (clock);
+ 
+-      latency =
+-          gst_util_uint64_scale_int (GST_SECOND, v4l2src->fps_d,
+-          v4l2src->fps_n);
++      /* we must have a framerate */
++      if (v4l2src->fps_n <= 0 || v4l2src->fps_d <= 0) {
++        GST_WARNING_OBJECT (src,
++            "Can't give latency since framerate isn't fixated !");
++        timestamp = GST_CLOCK_TIME_NONE;
++      }
++      else {
++        latency =
++            gst_util_uint64_scale_int (GST_SECOND, v4l2src->fps_d,
++            v4l2src->fps_n);
+ 
+-      if (timestamp > latency)
+-        timestamp -= latency;
+-      else
+-        timestamp = 0;
++        if (timestamp > latency)
++          timestamp -= latency;
++        else
++          timestamp = 0;
++      }
+     }
+ 
+     /* FIXME: use the timestamp from the buffer itself! */
diff --git a/recipes/obsolete/gstreamer/gst-plugins-good_0.10.15.bb b/recipes/obsolete/gstreamer/gst-plugins-good_0.10.15.bb
new file mode 100644
index 0000000..f2b0a5a
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-plugins-good_0.10.15.bb
@@ -0,0 +1,16 @@
+require gst-plugins.inc
+
+PR = "r6"
+
+SRC_URI += "file://fix-unit-scale-asseration.patch"
+
+inherit gconf 
+
+DEPENDS += "libsoup-2.4 flac gst-plugins-base openssl popt esound"
+
+PACKAGES =+ "gst-plugin-gconfelements"
+FILES_gst-plugin-gconfelements += "${sysconfdir}/gconf"
+
+
+SRC_URI[archive.md5sum] = "19bc6cc07951b3382d1ac8525b20e83f"
+SRC_URI[archive.sha256sum] = "831f450a0fa18c881b00ec50e8916ed66ca0fecb53cd1939f0abcc02930f9847"
diff --git a/recipes/obsolete/gstreamer/gst-rtsp_0.10.4.bb b/recipes/obsolete/gstreamer/gst-rtsp_0.10.4.bb
new file mode 100644
index 0000000..265f0f7
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-rtsp_0.10.4.bb
@@ -0,0 +1,4 @@
+require gst-rtsp.inc
+
+SRC_URI[md5sum] = "8daaca1299aeb42c6aac47b30291005b"
+SRC_URI[sha256sum] = "1ebf3571d16dbab401f2ebf0362e3d67457fb88711ad15a4ab51bd3730267fb7"
diff --git a/recipes/obsolete/gstreamer/gst-rtsp_0.10.5.bb b/recipes/obsolete/gstreamer/gst-rtsp_0.10.5.bb
new file mode 100644
index 0000000..dbaddc3
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gst-rtsp_0.10.5.bb
@@ -0,0 +1,4 @@
+require gst-rtsp.inc
+
+SRC_URI[md5sum] = "caca55e2ff497c0a327df3bc65a4a662"
+SRC_URI[sha256sum] = "a6f0a0c6c466683ee688aa8475623850fdacb549b2339a502831fdd3d74f984e"
diff --git a/recipes/obsolete/gstreamer/gstreamer/po-makefile-fix.patch b/recipes/obsolete/gstreamer/gstreamer/po-makefile-fix.patch
new file mode 100644
index 0000000..1cf665e
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gstreamer/po-makefile-fix.patch
@@ -0,0 +1,12 @@
+diff -urN gstreamer-0.10.17.orig/po/Makefile.in.in gstreamer-0.10.17/po/Makefile.in.in
+--- gstreamer-0.10.17.orig/po/Makefile.in.in	2008-01-25 16:21:31.000000000 +0100
++++ gstreamer-0.10.17/po/Makefile.in.in	2008-09-08 14:41:21.000000000 +0200
+@@ -30,7 +30,7 @@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+ MKINSTALLDIRS = @MKINSTALLDIRS@
+-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
++mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+ 
+ GMSGFMT = @GMSGFMT@
+ MSGFMT = @MSGFMT@
diff --git a/recipes/obsolete/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch b/recipes/obsolete/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch
new file mode 100644
index 0000000..6733e6b
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gstreamer/registry-do-not-look-into-debug-dirs.patch
@@ -0,0 +1,39 @@
+Work around a glibc 2.6.1 bug with dlopen. We try to dlopen a .so file that
+only contains debug symbols (e.g. no architecture is set in the elf header)
+
+
+#0  0x4000a88c in _dl_relocate_object () from /lib/ld-linux.so.3
+(gdb) bt
+#0  0x4000a88c in _dl_relocate_object () from /lib/ld-linux.so.3
+#1  0x40011f68 in dl_open_worker () from /lib/ld-linux.so.3
+#2  0x4000d7e4 in _dl_catch_error () from /lib/ld-linux.so.3
+#3  0x400117d8 in _dl_open () from /lib/ld-linux.so.3
+#4  0x402fba84 in dlopen_doit () from /lib/libdl.so.2
+#5  0x4000d7e4 in _dl_catch_error () from /lib/ld-linux.so.3
+#6  0x402fbf50 in _dlerror_run () from /lib/libdl.so.2
+#7  0x402fb9bc in dlopen@@GLIBC_2.4 () from /lib/libdl.so.2
+#8  0x402f2790 in g_module_open () from /usr/lib/libgmodule-2.0.so.0
+#9  0x40078784 in gst_plugin_load_file (
+    filename=0x10a6c8 "/usr/lib/gstreamer-0.10/.debug/libgstcoreindexers.so", 
+    error=0x0) at gstplugin.c:481
+#10 0x4007e3c4 in gst_registry_scan_path_level (registry=0x27828, 
+    path=0x10a6a0 "/usr/lib/gstreamer-0.10/.debug", level=1) at gstregistry.c:891
+#11 0x4007df04 in gst_registry_scan_path_level (registry=0x27828, 
+
+
+Index: gstreamer-0.10.17/gst/gstregistry.c
+===================================================================
+--- gstreamer-0.10.17.orig/gst/gstregistry.c	2008-11-14 23:30:48.000000000 +0100
++++ gstreamer-0.10.17/gst/gstregistry.c	2008-11-14 23:32:39.000000000 +0100
+@@ -813,7 +813,10 @@
+     GST_LOG_OBJECT (registry, "examining file: %s", filename);
+ 
+     if (g_file_test (filename, G_FILE_TEST_IS_DIR)) {
+-      if (level > 0) {
++      if (g_str_has_suffix (filename, ".debug")) {
++        GST_LOG_OBJECT (registry,
++            "found directory, not descending into .debug directory");
++      } else if (level > 0) {
+         GST_LOG_OBJECT (registry, "found directory, recursing");
+         changed |= gst_registry_scan_path_level (registry, filename, level - 1);
+       } else {
diff --git a/recipes/obsolete/gstreamer/gstreamer_0.10.17.bb b/recipes/obsolete/gstreamer/gstreamer_0.10.17.bb
new file mode 100644
index 0000000..dd01e16
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gstreamer_0.10.17.bb
@@ -0,0 +1,10 @@
+require gstreamer.inc
+
+PR = "r4"
+
+SRC_URI += "file://po-makefile-fix.patch \
+            file://registry-do-not-look-into-debug-dirs.patch "
+
+
+SRC_URI[archive.md5sum] = "3232416ea6fceab628236d67a7d0a44a"
+SRC_URI[archive.sha256sum] = "442862dc93e734aa58f13bcf3914dc7a40d3fa28f0ae2152c80457438dc3569c"
diff --git a/recipes/obsolete/gstreamer/gstreamer_0.10.25.bb b/recipes/obsolete/gstreamer/gstreamer_0.10.25.bb
new file mode 100644
index 0000000..6ba8a6d
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gstreamer_0.10.25.bb
@@ -0,0 +1,6 @@
+require gstreamer.inc
+
+EXTRA_OECONF += "ac_cv_func_register_printf_function=no"
+
+SRC_URI[archive.md5sum] = "88544e034a051baf472983791d233076"
+SRC_URI[archive.sha256sum] = "39b2ba7b3bfa8df6d998a9461e7091c27757e36a53e93969d7d9982a56526578"
diff --git a/recipes/obsolete/gstreamer/gstreamer_0.10.31.bb b/recipes/obsolete/gstreamer/gstreamer_0.10.31.bb
new file mode 100644
index 0000000..8b8eb77
--- /dev/null
+++ b/recipes/obsolete/gstreamer/gstreamer_0.10.31.bb
@@ -0,0 +1,15 @@
+require gstreamer.inc
+
+PR = "r2"
+
+SRC_URI[archive.md5sum] = "a21fb08bdb578d972c7c14e77da8fbb6"
+SRC_URI[archive.sha256sum] = "7f737e6d047c1ebeb4e1e0725fc377c5d9f12ee89186de7960be3cbba709ab84"
+
+SRC_URI += " \
+             file://0001-add-GstQueryBuffers-query.patch \
+             file://0002-gstevent-add-crop-event.patch \
+             file://0003-basetransform-don-t-do-unnecessary-pad_alloc.patch \
+"
+
+EXTRA_OECONF += "ac_cv_func_register_printf_function=no"
+
-- 
1.7.4.1





More information about the Openembedded-devel mailing list