audio_coding/codec/ilbc: Removed usage of WEBRTC_SPL_MUL_16_16_RSFT
The macro is defined as
#define WEBRTC_SPL_MUL_16_16_RSFT(a, b, c) \
(WEBRTC_SPL_MUL_16_16(a, b) >> (c))
where the latter macro is in C defined as
(For definitions on ARMv7 and MIPS, see common_audio/signal_processing/include/spl_inl_{armv7,mips}.h)
The replacement consists of
- avoiding casts to int16_t if inputs already are int16_t
- adding explicit cast to <type> if result is assigned to <type> (other than int or int32_t)
- minor cleanups like remove of unnecessary parantheses and style changes
BUG=3348, 3353
TESTED=locally on Mac and trybots
R=kwiberg@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/39139004
Cr-Commit-Position: refs/heads/master@{#8544}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8544 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_augmentation.c b/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_augmentation.c
index e5fb81c..6161f20 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_augmentation.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_augmentation.c
@@ -44,8 +44,7 @@
for (lagcount=20; lagcount<=39; lagcount++) {
/* Update the energy recursively to save complexity */
- nrjRecursive = nrjRecursive +
- WEBRTC_SPL_MUL_16_16_RSFT(*ppe, *ppe, scale);
+ nrjRecursive += (*ppe * *ppe) >> scale;
ppe--;
energy = nrjRecursive;
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/cb_search.c b/webrtc/modules/audio_coding/codecs/ilbc/cb_search.c
index b4d2b37..4c6196b 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/cb_search.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/cb_search.c
@@ -359,7 +359,7 @@
bits = 16 - temp2;
}
- tmp = (int16_t) WEBRTC_SPL_MUL_16_16_RSFT(gains[1],gains[1], 14);
+ tmp = (int16_t)((gains[1] * gains[1]) >> 14);
targetEner = (int16_t)WEBRTC_SPL_SHIFT_W32(targetEner, -bits) * tmp;
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/cb_update_best_index.c b/webrtc/modules/audio_coding/codecs/ilbc/cb_update_best_index.c
index 9e32437..6fdec27 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/cb_update_best_index.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/cb_update_best_index.c
@@ -64,8 +64,8 @@
scaleTmp = -energyShiftNew-tmp16+31;
scaleTmp = WEBRTC_SPL_MIN(31, scaleTmp);
- gainW32 = WEBRTC_SPL_MUL_16_16_RSFT(
- ((int16_t)WEBRTC_SPL_SHIFT_W32(cDotNew, -tmp16)), invEnergyNew, scaleTmp);
+ gainW32 = ((int16_t)WEBRTC_SPL_SHIFT_W32(cDotNew, -tmp16) * invEnergyNew) >>
+ scaleTmp;
/* Check if criteria satisfies Gain criteria (max 1.3)
if it is larger set the gain to 1.3
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c b/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c
index 50d91e4..96c1aed 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c
@@ -65,7 +65,7 @@
/* tmp1W32 = x*b1 - b2 + f[i]/2 */
tmp1W32 = WEBRTC_SPL_LSHIFT_W32(b1_high * x, 1) +
- WEBRTC_SPL_LSHIFT_W32(WEBRTC_SPL_MUL_16_16_RSFT(b1_low, x, 15), 1);
+ WEBRTC_SPL_LSHIFT_W32((b1_low * x) >> 15, 1);
tmp1W32 -= b2;
tmp1W32 += WEBRTC_SPL_LSHIFT_W32((int32_t)f[i], 13);
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/do_plc.c b/webrtc/modules/audio_coding/codecs/ilbc/do_plc.c
index 2306be1..2d72075 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/do_plc.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/do_plc.c
@@ -92,8 +92,9 @@
/* Normalize and store cross^2 and the number of shifts */
shiftMax = WebRtcSpl_GetSizeInBits(WEBRTC_SPL_ABS_W32(cross))-15;
- crossSquareMax = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(WEBRTC_SPL_SHIFT_W32(cross, -shiftMax),
- WEBRTC_SPL_SHIFT_W32(cross, -shiftMax), 15);
+ crossSquareMax = (int16_t)((
+ (int16_t)WEBRTC_SPL_SHIFT_W32(cross, -shiftMax) *
+ (int16_t)WEBRTC_SPL_SHIFT_W32(cross, -shiftMax)) >> 15);
for (j=inlag-2;j<=inlag+3;j++) {
WebRtcIlbcfix_CompCorr( &cross_comp, &ener_comp,
@@ -103,8 +104,9 @@
this lag is better or not. To avoid the division,
do a cross multiplication */
shift1 = WebRtcSpl_GetSizeInBits(WEBRTC_SPL_ABS_W32(cross_comp))-15;
- crossSquare = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(WEBRTC_SPL_SHIFT_W32(cross_comp, -shift1),
- WEBRTC_SPL_SHIFT_W32(cross_comp, -shift1), 15);
+ crossSquare = (int16_t)((
+ (int16_t)WEBRTC_SPL_SHIFT_W32(cross_comp, -shift1) *
+ (int16_t)WEBRTC_SPL_SHIFT_W32(cross_comp, -shift1)) >> 15);
shift2 = WebRtcSpl_GetSizeInBits(ener)-15;
measure = (int16_t)WEBRTC_SPL_SHIFT_W32(ener, -shift2) * crossSquare;
@@ -154,7 +156,7 @@
scale2=(int16_t)WebRtcSpl_NormW32(ener)-16;
tmp2=(int16_t)WEBRTC_SPL_SHIFT_W32(ener, scale2);
- denom=(int16_t)WEBRTC_SPL_MUL_16_16_RSFT(tmp1, tmp2, 16); /* denom in Q(scale1+scale2-16) */
+ denom = (int16_t)((tmp1 * tmp2) >> 16); /* in Q(scale1+scale2-16) */
/* Square the cross correlation and norm it such that max_perSquare
will be in Q15 after the division */
@@ -209,7 +211,8 @@
}
/* pitch fact is approximated by first order */
tmpW32 = (int32_t)WebRtcIlbcfix_kPlcPitchFact[ind] +
- WEBRTC_SPL_MUL_16_16_RSFT(WebRtcIlbcfix_kPlcPfSlope[ind], (max_perSquare-WebRtcIlbcfix_kPlcPerSqr[ind]), 11);
+ ((WebRtcIlbcfix_kPlcPfSlope[ind] *
+ (max_perSquare - WebRtcIlbcfix_kPlcPerSqr[ind])) >> 11);
pitchfact = (int16_t)WEBRTC_SPL_MIN(tmpW32, 32767); /* guard against overflow */
@@ -253,25 +256,21 @@
if (i<80) {
tot_gain=use_gain;
} else if (i<160) {
- tot_gain=(int16_t)WEBRTC_SPL_MUL_16_16_RSFT(31130, use_gain, 15); /* 0.95*use_gain */
+ tot_gain = (int16_t)((31130 * use_gain) >> 15); /* 0.95*use_gain */
} else {
- tot_gain=(int16_t)WEBRTC_SPL_MUL_16_16_RSFT(29491, use_gain, 15); /* 0.9*use_gain */
+ tot_gain = (int16_t)((29491 * use_gain) >> 15); /* 0.9*use_gain */
}
/* mix noise and pitch repeatition */
-
- PLCresidual[i] = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(
- tot_gain,
- (pitchfact * PLCresidual[i] + (32767 - pitchfact) * randvec[i] +
- 16384) >> 15,
- 15);
+ PLCresidual[i] = (int16_t)((tot_gain *
+ ((pitchfact * PLCresidual[i] + (32767 - pitchfact) * randvec[i] +
+ 16384) >> 15)) >> 15);
/* Shifting down the result one step extra to ensure that no overflow
will occur */
- energy += WEBRTC_SPL_MUL_16_16_RSFT(PLCresidual[i],
- PLCresidual[i], (iLBCdec_inst->prevScale+1));
-
+ energy += (PLCresidual[i] * PLCresidual[i]) >>
+ (iLBCdec_inst->prevScale + 1);
}
/* less than 30 dB, use only noise */
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/enhancer_interface.c b/webrtc/modules/audio_coding/codecs/ilbc/enhancer_interface.c
index 5376930..d31af1b 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/enhancer_interface.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/enhancer_interface.c
@@ -149,8 +149,7 @@
ENH_BLOCKL_HALF, shifts);
enerSh = 15-WebRtcSpl_GetSizeInBits(ener);
corr16[i] = (int16_t)WEBRTC_SPL_SHIFT_W32(corrmax[i], corrSh);
- corr16[i] = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(corr16[i],
- corr16[i], 16);
+ corr16[i] = (int16_t)((corr16[i] * corr16[i]) >> 16);
en16[i] = (int16_t)WEBRTC_SPL_SHIFT_W32(ener, enerSh);
totsh[i] = enerSh - WEBRTC_SPL_LSHIFT_W32(corrSh, 1);
}
@@ -160,14 +159,12 @@
for (i=1; i<3; i++) {
if (totsh[ind] > totsh[i]) {
sh = WEBRTC_SPL_MIN(31, totsh[ind]-totsh[i]);
- if (corr16[ind] * en16[i] <
- WEBRTC_SPL_MUL_16_16_RSFT(corr16[i], en16[ind], sh)) {
+ if (corr16[ind] * en16[i] < (corr16[i] * en16[ind]) >> sh) {
ind = i;
}
} else {
sh = WEBRTC_SPL_MIN(31, totsh[i]-totsh[ind]);
- if (WEBRTC_SPL_MUL_16_16_RSFT(corr16[ind], en16[i], sh) <
- corr16[i] * en16[ind]) {
+ if ((corr16[ind] * en16[i]) >> sh < corr16[i] * en16[ind]) {
ind = i;
}
}
@@ -297,8 +294,8 @@
tmpW16ptr=&plc_pred[plc_blockl-16];
for (i=16;i>0;i--) {
- (*tmpW16ptr)=(int16_t)WEBRTC_SPL_MUL_16_16_RSFT(
- (*tmpW16ptr), (SqrtEnChange+(win>>1)), 14);
+ *tmpW16ptr = (int16_t)(
+ (*tmpW16ptr * (SqrtEnChange + (win >> 1))) >> 14);
/* multiply by (2.0*SqrtEnChange+win) */
win += inc;
@@ -319,10 +316,9 @@
enh_bufPtr1=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl];
for (i=0; i<plc_blockl; i++) {
win+=inc;
- *enh_bufPtr1 =
- (int16_t)WEBRTC_SPL_MUL_16_16_RSFT((*enh_bufPtr1), win, 14);
- *enh_bufPtr1 += (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(
- (16384-win), plc_pred[plc_blockl-1-i], 14);
+ *enh_bufPtr1 = (int16_t)((*enh_bufPtr1 * win) >> 14);
+ *enh_bufPtr1 += (int16_t)(
+ ((16384 - win) * plc_pred[plc_blockl - 1 - i]) >> 14);
enh_bufPtr1--;
}
} else {
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/get_lsp_poly.c b/webrtc/modules/audio_coding/codecs/ilbc/get_lsp_poly.c
index 64079a3..5cb1ab2 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/get_lsp_poly.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/get_lsp_poly.c
@@ -68,7 +68,7 @@
low = (int16_t)((fPtr[-1] - ((int32_t)high << 16)) >> 1);
tmpW32 = WEBRTC_SPL_LSHIFT_W32(high * *lspPtr, 2) +
- WEBRTC_SPL_LSHIFT_W32(WEBRTC_SPL_MUL_16_16_RSFT(low, (*lspPtr), 15), 2);
+ WEBRTC_SPL_LSHIFT_W32((low * *lspPtr) >> 15, 2);
(*fPtr) += fPtr[-2];
(*fPtr) -= tmpW32;
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/interpolate_samples.c b/webrtc/modules/audio_coding/codecs/ilbc/interpolate_samples.c
index 219eda7..4957142 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/interpolate_samples.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/interpolate_samples.c
@@ -37,8 +37,8 @@
ppi = CBmem+lMem-j-24;
for (i=0; i<4; i++) {
- *tmpPtr++ = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(WebRtcIlbcfix_kAlpha[temp2],*ppo, 15) +
- (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(WebRtcIlbcfix_kAlpha[temp1], *ppi, 15);
+ *tmpPtr++ = (int16_t)((WebRtcIlbcfix_kAlpha[temp2] * *ppo) >> 15) +
+ (int16_t)((WebRtcIlbcfix_kAlpha[temp1] * *ppi) >> 15);
ppo++;
ppi++;
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_lsp.c b/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_lsp.c
index 2503293..cfab013 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_lsp.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_lsp.c
@@ -36,7 +36,7 @@
for(i=0; i<m; i++)
{
- freq = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(lsf[i], 20861, 15);
+ freq = (int16_t)((lsf[i] * 20861) >> 15);
/* 20861: 1.0/(2.0*PI) in Q17 */
/*
Upper 8 bits give the index k and
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/lsp_to_lsf.c b/webrtc/modules/audio_coding/codecs/ilbc/lsp_to_lsf.c
index 81e814f..be95de7 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/lsp_to_lsf.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/lsp_to_lsf.c
@@ -68,7 +68,7 @@
*/
/* tmp (linear offset) in Q16 */
- tmp = (int16_t)WEBRTC_SPL_MUL_16_16_RSFT(WebRtcIlbcfix_kAcosDerivative[k],diff, 11);
+ tmp = (int16_t)((WebRtcIlbcfix_kAcosDerivative[k] * diff) >> 11);
/* freq in Q16 */
freq = (k << 9) + tmp;
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsp.c b/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsp.c
index 47d7fdc..ca376b3 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsp.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsp.c
@@ -122,7 +122,7 @@
y <<= shifts;
y = (int16_t)WebRtcSpl_DivW32W16(536838144, y); /* 1/(yhigh-ylow) */
- tmpW32 = WEBRTC_SPL_MUL_16_16_RSFT(x, y, (19-shifts));
+ tmpW32 = (x * y) >> (19 - shifts);
/* y=(xhigh-xlow)/(yhigh-ylow) */
y = (int16_t)(tmpW32&0xFFFF);
@@ -131,7 +131,7 @@
y = -y;
}
/* tmpW32 = ylow*(xhigh-xlow)/(yhigh-ylow) */
- tmpW32 = WEBRTC_SPL_MUL_16_16_RSFT(ylow, y, 10);
+ tmpW32 = (ylow * y) >> 10;
xint = xlow-(int16_t)(tmpW32&0xFFFF);
}
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/window32_w32.c b/webrtc/modules/audio_coding/codecs/ilbc/window32_w32.c
index 7852419..a0278bb 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/window32_w32.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/window32_w32.c
@@ -53,10 +53,9 @@
y_low = (int16_t)((y[i] - temp) >> 1);
/* Calculate z by a 32 bit multiplication using both low and high from x and y */
- temp = (x_hi * y_hi) << 1;
- temp = (temp + (WEBRTC_SPL_MUL_16_16_RSFT(x_hi, y_low, 14)));
+ temp = ((x_hi * y_hi) << 1) + ((x_hi * y_low) >> 14);
- z[i] = (temp + (WEBRTC_SPL_MUL_16_16_RSFT(x_low, y_hi, 14)));
+ z[i] = temp + ((x_low * y_hi) >> 14);
}
WebRtcSpl_VectorBitShiftW32(z, N, z, left_shifts);
diff --git a/webrtc/modules/audio_coding/codecs/ilbc/xcorr_coef.c b/webrtc/modules/audio_coding/codecs/ilbc/xcorr_coef.c
index 38af71f..3490461 100644
--- a/webrtc/modules/audio_coding/codecs/ilbc/xcorr_coef.c
+++ b/webrtc/modules/audio_coding/codecs/ilbc/xcorr_coef.c
@@ -92,7 +92,7 @@
EnergyMod=(int16_t)WEBRTC_SPL_SHIFT_W32(Energy, Energyscale);
/* Square cross correlation and store upper int16_t */
- crossCorrSqMod=(int16_t)WEBRTC_SPL_MUL_16_16_RSFT(crossCorrmod, crossCorrmod, 16);
+ crossCorrSqMod = (int16_t)((crossCorrmod * crossCorrmod) >> 16);
/* Calculate the total number of (dynamic) right shifts that have
been performed on (crossCorr*crossCorr)/energy