This is intended for reuse by the G.723.1 decoder Signed-off-by: Kostya Shishkov <kostya.shishkov@gmail.com>tags/n1.0
| @@ -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, | int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs, | ||||
| const int16_t *in, int buffer_length, | const int16_t *in, int buffer_length, | ||||
| int filter_length, int stop_on_overflow, | int filter_length, int stop_on_overflow, | ||||
| int rounder) | |||||
| int shift, int rounder) | |||||
| { | { | ||||
| int i,n; | 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++) | for (i = 1; i <= filter_length; i++) | ||||
| sum -= filter_coeffs[i-1] * out[n-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 (sum + 0x8000 > 0xFFFFU) { | ||||
| if (stop_on_overflow) | if (stop_on_overflow) | ||||
| @@ -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 filter_length filter length (10 for 10th order LP filter) | ||||
| * @param stop_on_overflow 1 - return immediately if overflow occurs | * @param stop_on_overflow 1 - return immediately if overflow occurs | ||||
| * 0 - ignore overflows | * 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) | * @param rounder the amount to add for rounding (usually 0x800 or 0xfff) | ||||
| * | * | ||||
| * @return 1 if overflow occurred, 0 - otherwise | * @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, | int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs, | ||||
| const int16_t *in, int buffer_length, | const int16_t *in, int buffer_length, | ||||
| int filter_length, int stop_on_overflow, | int filter_length, int stop_on_overflow, | ||||
| int rounder); | |||||
| int shift, int rounder); | |||||
| /** | /** | ||||
| * LP synthesis filter. | * LP synthesis filter. | ||||
| @@ -1715,6 +1715,6 @@ void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs, | |||||
| LPC_ORDER*sizeof(*ractx->curr_sblock)); | LPC_ORDER*sizeof(*ractx->curr_sblock)); | ||||
| if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + LPC_ORDER, lpc_coefs, | 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)); | memset(ractx->curr_sblock, 0, (LPC_ORDER+BLOCKSIZE)*sizeof(*ractx->curr_sblock)); | ||||
| } | } | ||||