From 2f6ae0de5b0ca98cdcf3fd3c5a9848a5814aaddd Mon Sep 17 00:00:00 2001 From: "bjornv@webrtc.org" Date: Sun, 1 Mar 2015 19:50:41 +0000 Subject: [PATCH] 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 if result is assigned to (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 --- .../codecs/ilbc/cb_mem_energy_augmentation.c | 3 +- .../audio_coding/codecs/ilbc/cb_search.c | 2 +- .../codecs/ilbc/cb_update_best_index.c | 4 +-- .../audio_coding/codecs/ilbc/chebyshev.c | 2 +- .../modules/audio_coding/codecs/ilbc/do_plc.c | 33 +++++++++---------- .../codecs/ilbc/enhancer_interface.c | 20 +++++------ .../audio_coding/codecs/ilbc/get_lsp_poly.c | 2 +- .../codecs/ilbc/interpolate_samples.c | 4 +-- .../audio_coding/codecs/ilbc/lsf_to_lsp.c | 2 +- .../audio_coding/codecs/ilbc/lsp_to_lsf.c | 2 +- .../audio_coding/codecs/ilbc/poly_to_lsp.c | 4 +-- .../audio_coding/codecs/ilbc/window32_w32.c | 5 ++- .../audio_coding/codecs/ilbc/xcorr_coef.c | 2 +- 13 files changed, 39 insertions(+), 46 deletions(-) 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 e5fb81c54..6161f203f 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 @@ void WebRtcIlbcfix_CbMemEnergyAugmentation( 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 b4d2b37ec..4c6196bdf 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 @@ void WebRtcIlbcfix_CbSearch( 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 9e32437ff..6fdec27ab 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 @@ void WebRtcIlbcfix_CbUpdateBestIndex( 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 50d91e46c..96c1aed94 100644 --- a/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c +++ b/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c @@ -65,7 +65,7 @@ int16_t WebRtcIlbcfix_Chebyshev( /* 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 2306be11a..2d7207522 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 @@ void WebRtcIlbcfix_DoThePlc( /* 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 @@ void WebRtcIlbcfix_DoThePlc( 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 @@ void WebRtcIlbcfix_DoThePlc( 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 @@ void WebRtcIlbcfix_DoThePlc( } /* 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 @@ void WebRtcIlbcfix_DoThePlc( 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 537693063..d31af1bb7 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 @@ int WebRtcIlbcfix_EnhancerInterface( /* (o) Estimated lag in end of in[] */ 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 @@ int WebRtcIlbcfix_EnhancerInterface( /* (o) Estimated lag in end of in[] */ 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 @@ int WebRtcIlbcfix_EnhancerInterface( /* (o) Estimated lag in end of in[] */ 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 @@ int WebRtcIlbcfix_EnhancerInterface( /* (o) Estimated lag in end of in[] */ enh_bufPtr1=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl]; for (i=0; i> 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 64079a327..5cb1ab265 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 @@ void WebRtcIlbcfix_GetLspPoly( 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 219eda720..495714214 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 @@ void WebRtcIlbcfix_InterpolateSamples( 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 250329300..cfab013ab 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 @@ void WebRtcIlbcfix_Lsf2Lsp( for(i=0; i> 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 81e814f9e..be95de7a2 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 @@ void WebRtcIlbcfix_Lsp2Lsf( */ /* 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 47d7fdc97..ca376b34d 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 @@ void WebRtcIlbcfix_Poly2Lsp( 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 @@ void WebRtcIlbcfix_Poly2Lsp( 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 78524192b..a0278bbe7 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 @@ void WebRtcIlbcfix_Window32W32( 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 38af71f88..3490461d2 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 @@ int WebRtcIlbcfix_XcorrCoef( 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