summaryrefslogtreecommitdiff
path: root/libavcodec/g723_1.c
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2012-08-10 01:14:32 +0100
committerMans Rullgard <mans@mansr.com>2012-08-10 12:18:38 +0100
commit52aa3015a3c895cf74e555c4bb56c08cd067383e (patch)
treecb304e7a3d6d5f654c2c30184c8a4b5d1173ed28 /libavcodec/g723_1.c
parente141cf2c5794cd9884f2806b7766a1e0bb47ebe5 (diff)
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>
Diffstat (limited to 'libavcodec/g723_1.c')
-rw-r--r--libavcodec/g723_1.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/g723_1.c b/libavcodec/g723_1.c
index c337deb881..53b9adedd4 100644
--- a/libavcodec/g723_1.c
+++ b/libavcodec/g723_1.c
@@ -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++) {