aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/armv4l/dsputil_arm.c
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2008-12-15 22:12:37 +0000
committerMåns Rullgård <mans@mansr.com>2008-12-15 22:12:37 +0000
commit7eec43289ae65765070361ff154afdc81cc0ebfc (patch)
treeecbdb6f99f6af1b2d2a7321f850bf974fdc7e99e /libavcodec/armv4l/dsputil_arm.c
parent569f5a756a7dfc2094006411f6f945a6fd45ddc4 (diff)
downloadffmpeg-7eec43289ae65765070361ff154afdc81cc0ebfc.tar.gz
ARM: NEON optimised simple_idct
Originally committed as revision 16146 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/armv4l/dsputil_arm.c')
-rw-r--r--libavcodec/armv4l/dsputil_arm.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/armv4l/dsputil_arm.c b/libavcodec/armv4l/dsputil_arm.c
index 16eeec8912..7f6616ddf8 100644
--- a/libavcodec/armv4l/dsputil_arm.c
+++ b/libavcodec/armv4l/dsputil_arm.c
@@ -39,6 +39,10 @@ void ff_simple_idct_armv6(DCTELEM *data);
void ff_simple_idct_put_armv6(uint8_t *dest, int line_size, DCTELEM *data);
void ff_simple_idct_add_armv6(uint8_t *dest, int line_size, DCTELEM *data);
+void ff_simple_idct_neon(DCTELEM *data);
+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);
+
/* 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);
@@ -128,6 +132,8 @@ void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx)
if(idct_algo == FF_IDCT_AUTO){
#if defined(HAVE_IPP)
idct_algo = FF_IDCT_IPP;
+#elif defined(HAVE_NEON)
+ idct_algo = FF_IDCT_SIMPLENEON;
#elif defined(HAVE_ARMV6)
idct_algo = FF_IDCT_SIMPLEARMV6;
#elif defined(HAVE_ARMV5TE)
@@ -168,6 +174,13 @@ void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx)
c->idct = simple_idct_ipp;
c->idct_permutation_type= FF_NO_IDCT_PERM;
#endif
+#ifdef HAVE_NEON
+ } else if (idct_algo==FF_IDCT_SIMPLENEON){
+ c->idct_put= ff_simple_idct_put_neon;
+ c->idct_add= ff_simple_idct_add_neon;
+ c->idct = ff_simple_idct_neon;
+ c->idct_permutation_type = FF_PARTTRANS_IDCT_PERM;
+#endif
}
}