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

Koen Kooi koen at dominion.thruhere.net
Thu Mar 17 12:47:13 UTC 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 17-03-11 13:41, Martin Jansa wrote:
> Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>

Git didn't pick up renames properly, but looks good otherwise:

Acked-by: Koen Kooi <koen at dominion.thruhere.net>

> ---
>  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"
> +

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Darwin)

iD8DBQFNggLHMkyGM64RGpERAqWtAJ9v+OxJV5yuVgozfbm92cEZVDfjlwCfePjl
ijQHPTRqYEFZHhxoOfWT0O4=
=id+E
-----END PGP SIGNATURE-----





More information about the Openembedded-devel mailing list