diff armv4l/dsputil_arm.c @ 4427:765df9cbb2b3 libavcodec

ARMv6 SIMD IDCT
author mru
date Sun, 28 Jan 2007 21:32:08 +0000
parents c8c591fe26f8
children d5ba514e3f4a
line wrap: on
line diff
--- a/armv4l/dsputil_arm.c	Sun Jan 28 16:49:51 2007 +0000
+++ b/armv4l/dsputil_arm.c	Sun Jan 28 21:32:08 2007 +0000
@@ -35,6 +35,12 @@
 extern void simple_idct_add_armv5te(uint8_t *dest, int line_size,
                                     DCTELEM *data);
 
+extern void ff_simple_idct_armv6(DCTELEM *data);
+extern void ff_simple_idct_put_armv6(uint8_t *dest, int line_size,
+                                     DCTELEM *data);
+extern void ff_simple_idct_add_armv6(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);
@@ -206,6 +212,8 @@
     if(idct_algo == FF_IDCT_AUTO){
 #if defined(HAVE_IPP)
         idct_algo = FF_IDCT_IPP;
+#elif defined(HAVE_ARMV6)
+        idct_algo = FF_IDCT_SIMPLEARMV6;
 #elif defined(HAVE_ARMV5TE)
         idct_algo = FF_IDCT_SIMPLEARMV5TE;
 #else
@@ -223,6 +231,13 @@
         c->idct_add= simple_idct_ARM_add;
         c->idct    = simple_idct_ARM;
         c->idct_permutation_type= FF_NO_IDCT_PERM;
+#ifdef HAVE_ARMV6
+    } else if (idct_algo==FF_IDCT_SIMPLEARMV6){
+        c->idct_put= ff_simple_idct_put_armv6;
+        c->idct_add= ff_simple_idct_add_armv6;
+        c->idct    = ff_simple_idct_armv6;
+        c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;
+#endif
 #ifdef HAVE_ARMV5TE
     } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){
         c->idct_put= simple_idct_put_armv5te;