diff arm/dsputil_arm.c @ 9916:2c1c28f26a27 libavcodec

ARM: NEON VP3 IDCT 15% faster VP3/Theora, 10% faster VP6
author conrad
date Sat, 04 Jul 2009 20:41:11 +0000
parents 04423b2f6e0b
children d6d7e8d4a04d
line wrap: on
line diff
--- a/arm/dsputil_arm.c	Sat Jul 04 18:24:43 2009 +0000
+++ b/arm/dsputil_arm.c	Sat Jul 04 20:41:11 2009 +0000
@@ -43,6 +43,10 @@
 void ff_simple_idct_put_neon(uint8_t *dest, int line_size, DCTELEM *data);
 void ff_simple_idct_add_neon(uint8_t *dest, int line_size, DCTELEM *data);
 
+void ff_vp3_idct_neon(DCTELEM *data);
+void ff_vp3_idct_put_neon(uint8_t *dest, int line_size, DCTELEM *data);
+void ff_vp3_idct_add_neon(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);
@@ -180,6 +184,12 @@
             c->idct_add= ff_simple_idct_add_neon;
             c->idct    = ff_simple_idct_neon;
             c->idct_permutation_type = FF_PARTTRANS_IDCT_PERM;
+        } else if ((CONFIG_VP3_DECODER || CONFIG_VP5_DECODER || CONFIG_VP6_DECODER || CONFIG_THEORA_DECODER) &&
+                   idct_algo==FF_IDCT_VP3){
+            c->idct_put= ff_vp3_idct_put_neon;
+            c->idct_add= ff_vp3_idct_add_neon;
+            c->idct    = ff_vp3_idct_neon;
+            c->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM;
 #endif
         }
     }