summaryrefslogtreecommitdiff
path: root/packages/gstreamer/gst-ffmpeg
diff options
context:
space:
mode:
authorManuel Teira <manuel.teira@telefonica.net>2007-05-09 20:17:07 +0000
committerManuel Teira <manuel.teira@telefonica.net>2007-05-09 20:17:07 +0000
commitd7539c865828f939b5e7e61c262eb5d5a9618ba0 (patch)
treecd827be7bbe6a0db15e1495ac0dc9555a37a79c6 /packages/gstreamer/gst-ffmpeg
parentc7a11781403fc83ea47b3e2e389d78325ebc7538 (diff)
gst-ffmpeg 0.10.2 : Add armv5te optimizations
* Fix IWMMXT and ARMV5TE autoconfiguration * Add armv5te optimized IDCT algorithms from upstream ffmpeg * Fix configure stage to autoreconfigure properly * Bump up package release
Diffstat (limited to 'packages/gstreamer/gst-ffmpeg')
-rw-r--r--packages/gstreamer/gst-ffmpeg/.mtn2git_empty0
-rw-r--r--packages/gstreamer/gst-ffmpeg/armv5.patch1509
2 files changed, 1509 insertions, 0 deletions
diff --git a/packages/gstreamer/gst-ffmpeg/.mtn2git_empty b/packages/gstreamer/gst-ffmpeg/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/gstreamer/gst-ffmpeg/.mtn2git_empty
diff --git a/packages/gstreamer/gst-ffmpeg/armv5.patch b/packages/gstreamer/gst-ffmpeg/armv5.patch
new file mode 100644
index 0000000000..794709cc5b
--- /dev/null
+++ b/packages/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@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
+