diff options
author | Christophe Gisquet <christophe.gisquet@gmail.com> | 2012-05-11 13:17:36 +0400 |
---|---|---|
committer | Janne Grunau <janne-libav@jannau.net> | 2014-02-08 01:51:59 +0400 |
commit | 2bd44cb705340c4f7bd7e459a1efed5074bf45fc (patch) | |
tree | 6b628e195347f7ac49f71e2882cd57a1a5c1fed4 /libavcodec/dcadec.c | |
parent | e3fec3f095ab5ea08ee662942d98526aaf5e3635 (diff) |
dcadsp: add int8x8_fmul_int32 to dsp context
It is currently declared as a macro who is set to inlinable functions,
among which a Neon and a default C implementations.
Add a DSP parameter to each inline function, unused except by the
default C implementation which calls a function from the DSP context.
On an Arrandale CPU, gain for an inlined SSE2 function vs. a call:
- Win32: 29 to 26 cycles
- Win64: 25 to 23 cycles
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
Diffstat (limited to 'libavcodec/dcadec.c')
-rw-r--r-- | libavcodec/dcadec.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c index f9e39bcca4..b6df3b9f2f 100644 --- a/libavcodec/dcadec.c +++ b/libavcodec/dcadec.c @@ -1086,12 +1086,10 @@ static const uint8_t abits_sizes[7] = { 7, 10, 12, 13, 15, 17, 19 }; static const uint8_t abits_levels[7] = { 3, 5, 7, 9, 13, 17, 25 }; #ifndef int8x8_fmul_int32 -static inline void int8x8_fmul_int32(float *dst, const int8_t *src, int scale) +static inline void int8x8_fmul_int32(DCADSPContext *dsp, float *dst, + const int8_t *src, int scale) { - float fscale = scale / 16.0; - int i; - for (i = 0; i < 8; i++) - dst[i] = src[i] * fscale; + dsp->int8x8_fmul_int32(dst, src, scale); } #endif @@ -1219,7 +1217,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index) s->debug_flag |= 0x01; } - int8x8_fmul_int32(subband_samples[k][l], + int8x8_fmul_int32(&s->dcadsp, subband_samples[k][l], &high_freq_vq[hfvq][subsubframe * 8], s->scale_factor[k][l][0]); } |