Browse Source

g723.1: simplify and fix multiplication overflow

In 16-bit arithmetic, x * 0xffffc is simply x * -4 with extra overflows,
(and the constant was probably meant to be 0xfffc).  Combined with the
shift, this simplifies to -x >> 1.  Finally, clearing the low two bits
with a 32-bit mask and switching to a 32-bit type allows more efficient
code on 32-bit machines.

Signed-off-by: Mans Rullgard <mans@mansr.com>
tags/n1.0
Mans Rullgard 13 years ago
parent
commit
52aa3015a3
1 changed files with 2 additions and 2 deletions
  1. +2
    -2
      libavcodec/g723_1.c

+ 2
- 2
libavcodec/g723_1.c View File

@@ -956,7 +956,7 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf)
signal_ptr = filter_signal + LPC_ORDER;
for (i = 0; i < SUBFRAMES; i++) {
int16_t temp_vector[SUBFRAME_LEN];
int16_t temp;
int temp;
int auto_corr[2];
int scale, energy;

@@ -975,7 +975,7 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf)
temp = (auto_corr[0] >> 2) / temp;
}
p->reflection_coef = (3 * p->reflection_coef + temp + 2) >> 2;
temp = (p->reflection_coef * 0xffffc >> 3) & 0xfffc;
temp = -p->reflection_coef >> 1 & ~3;

/* Compensation filter */
for (j = 0; j < SUBFRAME_LEN; j++) {


Loading…
Cancel
Save