diff options
author | Mohamed Naufal Basheer <naufal11@gmail.com> | 2011-03-18 01:56:47 +0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-09-29 23:43:52 +0400 |
commit | bcc67dffa0e40602f2ce3240e831db173fe939a1 (patch) | |
tree | 32865bcfde10c4556f7faf2cb1bf5adcb5b6f364 /libavcodec | |
parent | ecf31a68fd0d30178d7b6e1b663d5c40b88c4551 (diff) |
Add a shift parameter to celp_lp_synthesis_filter for reuse by the G.723.1 decoder
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/celp_filters.c | 4 | ||||
-rw-r--r-- | libavcodec/celp_filters.h | 3 | ||||
-rw-r--r-- | libavcodec/g729dec.c | 3 | ||||
-rw-r--r-- | libavcodec/g729postfilter.c | 4 | ||||
-rw-r--r-- | libavcodec/ra144.c | 2 |
5 files changed, 10 insertions, 6 deletions
diff --git a/libavcodec/celp_filters.c b/libavcodec/celp_filters.c index 8b68c2ffef..1535060c9d 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 2fb2b03aaa..f7e8fbddd3 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/g729dec.c b/libavcodec/g729dec.c index de384dd184..cd2eec880b 100644 --- a/libavcodec/g729dec.c +++ b/libavcodec/g729dec.c @@ -604,6 +604,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, SUBFRAME_SIZE, 10, 1, + 0, 0x800)) /* Overflow occured, downscale excitation signal... */ for (j = 0; j < 2 * SUBFRAME_SIZE + PITCH_DELAY_MAX + INTERPOL_LEN; j++) @@ -625,6 +626,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, SUBFRAME_SIZE, 10, 0, + 0, 0x800); } else { ff_celp_lp_synthesis_filter( @@ -634,6 +636,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, SUBFRAME_SIZE, 10, 0, + 0, 0x800); } /* Save data (without postfilter) for use in next subframe. */ diff --git a/libavcodec/g729postfilter.c b/libavcodec/g729postfilter.c index 6bd7f646de..2b66bde661 100644 --- a/libavcodec/g729postfilter.c +++ b/libavcodec/g729postfilter.c @@ -433,7 +433,7 @@ static int16_t get_tilt_comp(DSPContext *dsp, int16_t *lp_gn, lp_gn[10] = 4096; //1.0 in (3.12) /* Apply 1/A(z/FORMANT_PP_FACTOR_DEN) filter to hf. */ - ff_celp_lp_synthesis_filter(lp_gn + 11, lp_gd + 1, lp_gn + 11, 22, 10, 0, 0x800); + ff_celp_lp_synthesis_filter(lp_gn + 11, lp_gd + 1, lp_gn + 11, 22, 10, 0, 0, 0x800); /* Now lp_gn (starting with 10) contains impulse response of A(z/FORMANT_PP_FACTOR_NUM)/A(z/FORMANT_PP_FACTOR_DEN) filter. */ @@ -554,7 +554,7 @@ void ff_g729_postfilter(DSPContext *dsp, int16_t* ht_prev_data, int* voicing, /* Apply second half of short-term postfilter: 1/A(z/FORMANT_PP_FACTOR_DEN) */ ff_celp_lp_synthesis_filter(pos_filter_data + 10, lp_gd + 1, residual_filt_buf + 10, - subframe_size, 10, 0, 0x800); + subframe_size, 10, 0, 0, 0x800); memcpy(pos_filter_data, pos_filter_data + subframe_size, 10 * sizeof(int16_t)); *ht_prev_data = apply_tilt_comp(speech, pos_filter_data + 10, tilt_comp_coeff, diff --git a/libavcodec/ra144.c b/libavcodec/ra144.c index 9baa06850f..3f1e6f7b43 100644 --- a/libavcodec/ra144.c +++ b/libavcodec/ra144.c @@ -1715,6 +1715,6 @@ void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs, 10*sizeof(*ractx->curr_sblock)); if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + 10, lpc_coefs, - block, BLOCKSIZE, 10, 1, 0xfff)) + block, BLOCKSIZE, 10, 1, 0, 0xfff)) memset(ractx->curr_sblock, 0, 50*sizeof(*ractx->curr_sblock)); } |