From 89823283829ebb7845de7f13d2212e2052b27b32 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sat, 5 Sep 2015 11:07:11 +0200 Subject: [PATCH] src/mathutils.c: optimized fvec_shift and aubio_level_lin --- src/mathutils.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/mathutils.c b/src/mathutils.c index 4657bd8e..f489173d 100644 --- a/src/mathutils.c +++ b/src/mathutils.c @@ -30,6 +30,14 @@ #include #endif +#if !HAVE_AUBIO_DOUBLE +#define aubio_cblas_xswap cblas_sswap +#define aubio_cblas_dot cblas_sdot +#else +#define aubio_cblas_xswap cblas_dswap +#define aubio_cblas_dot cblas_ddot +#endif + /** Window types */ typedef enum { @@ -281,20 +289,29 @@ fvec_max_elem (fvec_t * s) void fvec_shift (fvec_t * s) { +#ifndef HAVE_ACCELERATE uint_t j; for (j = 0; j < s->length / 2; j++) { ELEM_SWAP (s->data[j], s->data[j + s->length / 2]); } +#else + uint_t half = s->length / 2; + aubio_cblas_xswap(half, s->data, 1, s->data + half, 1); +#endif } smpl_t aubio_level_lin (fvec_t * f) { smpl_t energy = 0.; +#ifndef HAVE_ACCELERATE uint_t j; for (j = 0; j < f->length; j++) { energy += SQR (f->data[j]); } +#else + energy = aubio_cblas_dot(f->length, f->data, 1, f->data, 1); +#endif return energy / f->length; } -- 2.11.0