diff options
author | Mohamed Naufal Basheer <naufal11@gmail.com> | 2012-07-10 19:58:39 +0200 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2012-07-22 07:58:53 +0200 |
commit | 8aac5585fa7e50d899103efaa3aa4b2a774b16b4 (patch) | |
tree | 8955db7348e78c4ef9c4124784aa52ead12c9bbd /libavcodec | |
parent | 51a5ddfa017f5229ff18da58f7cef908fd312138 (diff) | |
download | ffmpeg-8aac5585fa7e50d899103efaa3aa4b2a774b16b4.tar.gz |
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 <kostya.shishkov@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/celp_filters.c | 4 | ||||
-rw-r--r-- | libavcodec/celp_filters.h | 3 | ||||
-rw-r--r-- | 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)); } |