gst-ffmpeg 0.10.2 : Add armv5te optimizations
authorManuel Teira <manuel.teira@telefonica.net>
Wed, 9 May 2007 20:17:07 +0000 (20:17 +0000)
committerManuel Teira <manuel.teira@telefonica.net>
Wed, 9 May 2007 20:17:07 +0000 (20:17 +0000)
* Fix IWMMXT and ARMV5TE autoconfiguration
* Add armv5te optimized IDCT algorithms from upstream ffmpeg
* Fix configure stage to autoreconfigure properly
* Bump up package release

packages/gstreamer/gst-ffmpeg/.mtn2git_empty [new file with mode: 0644]
packages/gstreamer/gst-ffmpeg/armv5.patch [new file with mode: 0644]
packages/gstreamer/gst-ffmpeg_0.10.2.bb

diff --git a/packages/gstreamer/gst-ffmpeg/.mtn2git_empty b/packages/gstreamer/gst-ffmpeg/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/gstreamer/gst-ffmpeg/armv5.patch b/packages/gstreamer/gst-ffmpeg/armv5.patch
new file mode 100644 (file)
index 0000000..794709c
--- /dev/null
@@ -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@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@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@gmx.at>
++ * Copyright (c) 2006 Mans Rullgard <mru@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
index 7c1b45e..e4dfb0b 100644 (file)
@@ -4,11 +4,12 @@ PRIORITY = "optional"
 LICENSE = "LGPL"
 HOMEPAGE = "http://www.gstreamer.net/"
 DEPENDS = "gstreamer zlib"
-PR = "r0"
+PR = "r1"
 
 inherit autotools pkgconfig
 
-SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2"
+SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2 \
+          file://armv5.patch;patch=1"
 
 FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
 FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
@@ -25,10 +26,5 @@ EXTRA_OECONF = "--disable-sdltest --disable-ffplay --disable-freetypetest \
 PATH_prepend="${CROSS_DIR}/${TARGET_SYS}/bin:"
 
 # Hack to get STAGING_LIBDIR into the linker path when building ffmpeg
-CC = "${CCACHE} ${HOST_PREFIX}gcc -L${STAGING_LIBDIR}"
-
-do_configure () {
-        cd ${S}
-        oe_runconf
-}
+CC = "${CCACHE} ${HOST_PREFIX}gcc ${TARGET_CC_ARCH} -L${STAGING_LIBDIR}"