comparison armv4l/dsputil_arm.c @ 8335:f19fe0cade86 libavcodec

ARM: NEON optimised simple_idct
author mru
date Mon, 15 Dec 2008 22:12:37 +0000
parents 6bdd6dfc3574
children
comparison
equal deleted inserted replaced
8334:6bdd6dfc3574 8335:f19fe0cade86
36 void simple_idct_add_armv5te(uint8_t *dest, int line_size, DCTELEM *data); 36 void simple_idct_add_armv5te(uint8_t *dest, int line_size, DCTELEM *data);
37 37
38 void ff_simple_idct_armv6(DCTELEM *data); 38 void ff_simple_idct_armv6(DCTELEM *data);
39 void ff_simple_idct_put_armv6(uint8_t *dest, int line_size, DCTELEM *data); 39 void ff_simple_idct_put_armv6(uint8_t *dest, int line_size, DCTELEM *data);
40 void ff_simple_idct_add_armv6(uint8_t *dest, int line_size, DCTELEM *data); 40 void ff_simple_idct_add_armv6(uint8_t *dest, int line_size, DCTELEM *data);
41
42 void ff_simple_idct_neon(DCTELEM *data);
43 void ff_simple_idct_put_neon(uint8_t *dest, int line_size, DCTELEM *data);
44 void ff_simple_idct_add_neon(uint8_t *dest, int line_size, DCTELEM *data);
41 45
42 /* XXX: local hack */ 46 /* XXX: local hack */
43 static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size); 47 static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
44 static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size); 48 static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
45 49
126 130
127 if (avctx->lowres == 0) { 131 if (avctx->lowres == 0) {
128 if(idct_algo == FF_IDCT_AUTO){ 132 if(idct_algo == FF_IDCT_AUTO){
129 #if defined(HAVE_IPP) 133 #if defined(HAVE_IPP)
130 idct_algo = FF_IDCT_IPP; 134 idct_algo = FF_IDCT_IPP;
135 #elif defined(HAVE_NEON)
136 idct_algo = FF_IDCT_SIMPLENEON;
131 #elif defined(HAVE_ARMV6) 137 #elif defined(HAVE_ARMV6)
132 idct_algo = FF_IDCT_SIMPLEARMV6; 138 idct_algo = FF_IDCT_SIMPLEARMV6;
133 #elif defined(HAVE_ARMV5TE) 139 #elif defined(HAVE_ARMV5TE)
134 idct_algo = FF_IDCT_SIMPLEARMV5TE; 140 idct_algo = FF_IDCT_SIMPLEARMV5TE;
135 #else 141 #else
166 c->idct_put= simple_idct_ipp_put; 172 c->idct_put= simple_idct_ipp_put;
167 c->idct_add= simple_idct_ipp_add; 173 c->idct_add= simple_idct_ipp_add;
168 c->idct = simple_idct_ipp; 174 c->idct = simple_idct_ipp;
169 c->idct_permutation_type= FF_NO_IDCT_PERM; 175 c->idct_permutation_type= FF_NO_IDCT_PERM;
170 #endif 176 #endif
177 #ifdef HAVE_NEON
178 } else if (idct_algo==FF_IDCT_SIMPLENEON){
179 c->idct_put= ff_simple_idct_put_neon;
180 c->idct_add= ff_simple_idct_add_neon;
181 c->idct = ff_simple_idct_neon;
182 c->idct_permutation_type = FF_PARTTRANS_IDCT_PERM;
183 #endif
171 } 184 }
172 } 185 }
173 186
174 c->put_pixels_tab[0][0] = put_pixels16_arm; 187 c->put_pixels_tab[0][0] = put_pixels16_arm;
175 c->put_pixels_tab[0][1] = put_pixels16_x2_arm; 188 c->put_pixels_tab[0][1] = put_pixels16_x2_arm;