You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
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>
This commit is contained in:
@@ -956,7 +956,7 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf)
|
|||||||
signal_ptr = filter_signal + LPC_ORDER;
|
signal_ptr = filter_signal + LPC_ORDER;
|
||||||
for (i = 0; i < SUBFRAMES; i++) {
|
for (i = 0; i < SUBFRAMES; i++) {
|
||||||
int16_t temp_vector[SUBFRAME_LEN];
|
int16_t temp_vector[SUBFRAME_LEN];
|
||||||
int16_t temp;
|
int temp;
|
||||||
int auto_corr[2];
|
int auto_corr[2];
|
||||||
int scale, energy;
|
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;
|
temp = (auto_corr[0] >> 2) / temp;
|
||||||
}
|
}
|
||||||
p->reflection_coef = (3 * p->reflection_coef + temp + 2) >> 2;
|
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 */
|
/* Compensation filter */
|
||||||
for (j = 0; j < SUBFRAME_LEN; j++) {
|
for (j = 0; j < SUBFRAME_LEN; j++) {
|
||||||
|
Reference in New Issue
Block a user