Browse Source

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>
tags/n1.0
Mohamed Naufal Basheer Kostya Shishkov 13 years ago
parent
commit
8aac5585fa
3 changed files with 5 additions and 4 deletions
  1. +2
    -2
      libavcodec/celp_filters.c
  2. +2
    -1
      libavcodec/celp_filters.h
  3. +1
    -1
      libavcodec/ra144.c

+ 2
- 2
libavcodec/celp_filters.c View File

@@ -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)


+ 2
- 1
libavcodec/celp_filters.h View File

@@ -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.


+ 1
- 1
libavcodec/ra144.c View File

@@ -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));
} }

Loading…
Cancel
Save