diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2008-07-06 06:06:55 +0000 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2008-07-06 06:06:55 +0000 |
commit | 88c0536a4217e3d88feddd91b74e7db6f752d301 (patch) | |
tree | d41b12c0d5dd841e3c9c80f4576b244cdbef622a /libavcodec/apedec.c | |
parent | fcc402b1c93c35f8958d53270990640ad684cfe7 (diff) | |
download | ffmpeg-88c0536a4217e3d88feddd91b74e7db6f752d301.tar.gz |
Add several vector functions used by Monkey's Audio decoder to dsputil
Originally committed as revision 14081 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/apedec.c')
-rw-r--r-- | libavcodec/apedec.c | 35 |
1 files changed, 6 insertions, 29 deletions
diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c index 4cc90f234a..c4aa38f8fd 100644 --- a/libavcodec/apedec.c +++ b/libavcodec/apedec.c @@ -161,29 +161,6 @@ typedef struct APEContext { } APEContext; // TODO: dsputilize -static inline void vector_add(int16_t * v1, int16_t * v2, int order) -{ - while (order--) - *v1++ += *v2++; -} - -// TODO: dsputilize -static inline void vector_sub(int16_t * v1, int16_t * v2, int order) -{ - while (order--) - *v1++ -= *v2++; -} - -// TODO: dsputilize -static inline int32_t scalarproduct(int16_t * v1, int16_t * v2, int order) -{ - int res = 0; - - while (order--) - res += *v1++ * *v2++; - - return res; -} static av_cold int ape_decode_init(AVCodecContext * avctx) { @@ -672,19 +649,19 @@ static void init_filter(APEContext * ctx, APEFilter *f, int16_t * buf, int order do_init_filter(&f[1], buf + order * 3 + HISTORY_SIZE, order); } -static inline void do_apply_filter(int version, APEFilter *f, int32_t *data, int count, int order, int fracbits) +static inline void do_apply_filter(APEContext * ctx, int version, APEFilter *f, int32_t *data, int count, int order, int fracbits) { int res; int absres; while (count--) { /* round fixedpoint scalar product */ - res = (scalarproduct(f->delay - order, f->coeffs, order) + (1 << (fracbits - 1))) >> fracbits; + res = (ctx->dsp.scalarproduct_int16(f->delay - order, f->coeffs, order, 0) + (1 << (fracbits - 1))) >> fracbits; if (*data < 0) - vector_add(f->coeffs, f->adaptcoeffs - order, order); + ctx->dsp.add_int16(f->coeffs, f->adaptcoeffs - order, order); else if (*data > 0) - vector_sub(f->coeffs, f->adaptcoeffs - order, order); + ctx->dsp.sub_int16(f->coeffs, f->adaptcoeffs - order, order); res += *data; @@ -736,9 +713,9 @@ static void apply_filter(APEContext * ctx, APEFilter *f, int32_t * data0, int32_t * data1, int count, int order, int fracbits) { - do_apply_filter(ctx->fileversion, &f[0], data0, count, order, fracbits); + do_apply_filter(ctx, ctx->fileversion, &f[0], data0, count, order, fracbits); if (data1) - do_apply_filter(ctx->fileversion, &f[1], data1, count, order, fracbits); + do_apply_filter(ctx, ctx->fileversion, &f[1], data1, count, order, fracbits); } static void ape_apply_filters(APEContext * ctx, int32_t * decoded0, |