From 8aac5585fa7e50d899103efaa3aa4b2a774b16b4 Mon Sep 17 00:00:00 2001 From: Mohamed Naufal Basheer Date: Tue, 10 Jul 2012 19:58:39 +0200 Subject: [PATCH] Add a shift parameter to celp_lp_synthesis_filter() This is intended for reuse by the G.723.1 decoder Signed-off-by: Kostya Shishkov --- libavcodec/celp_filters.c | 4 ++-- libavcodec/celp_filters.h | 3 ++- libavcodec/ra144.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/libavcodec/celp_filters.c b/libavcodec/celp_filters.c index 849cda439e..4e5bcda79a 100644 --- a/libavcodec/celp_filters.c +++ b/libavcodec/celp_filters.c @@ -58,7 +58,7 @@ void ff_celp_circ_addf(float *out, const float *in, int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs, const int16_t *in, int buffer_length, int filter_length, int stop_on_overflow, - int rounder) + int shift, int rounder) { int i,n; @@ -67,7 +67,7 @@ int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs, for (i = 1; i <= filter_length; i++) sum -= filter_coeffs[i-1] * out[n-i]; - sum = (sum >> 12) + in[n]; + sum = ((sum >> 12) + in[n]) >> shift; if (sum + 0x8000 > 0xFFFFU) { if (stop_on_overflow) diff --git a/libavcodec/celp_filters.h b/libavcodec/celp_filters.h index cfd08fd440..c328258460 100644 --- a/libavcodec/celp_filters.h +++ b/libavcodec/celp_filters.h @@ -63,6 +63,7 @@ void ff_celp_circ_addf(float *out, const float *in, * @param filter_length filter length (10 for 10th order LP filter) * @param stop_on_overflow 1 - return immediately if overflow occurs * 0 - ignore overflows + * @param shift the result is shifted right by this value * @param rounder the amount to add for rounding (usually 0x800 or 0xfff) * * @return 1 if overflow occurred, 0 - otherwise @@ -75,7 +76,7 @@ void ff_celp_circ_addf(float *out, const float *in, int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs, const int16_t *in, int buffer_length, int filter_length, int stop_on_overflow, - int rounder); + int shift, int rounder); /** * LP synthesis filter. diff --git a/libavcodec/ra144.c b/libavcodec/ra144.c index e6442d694d..8b5ea3aab2 100644 --- a/libavcodec/ra144.c +++ b/libavcodec/ra144.c @@ -1715,6 +1715,6 @@ void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs, LPC_ORDER*sizeof(*ractx->curr_sblock)); if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + LPC_ORDER, lpc_coefs, - block, BLOCKSIZE, LPC_ORDER, 1, 0xfff)) + block, BLOCKSIZE, LPC_ORDER, 1, 0, 0xfff)) memset(ractx->curr_sblock, 0, (LPC_ORDER+BLOCKSIZE)*sizeof(*ractx->curr_sblock)); }