Mercurial > libavcodec.hg
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; |