From 926707b167e9bfb876c7c903dcefc41c84e5fedb Mon Sep 17 00:00:00 2001 From: "bjornv@webrtc.org" Date: Mon, 25 Aug 2014 11:42:42 +0000 Subject: [PATCH] Refactoring common_audio: Replace trivial multiplication macro This multiplication macro literally use the '*' operator, so there is no need for it. BUG=3348,3353 TESTED=locally on linux and trybots R=kwiberg@webrtc.org, tina.legrand@webrtc.org, turaj@webrtc.org Review URL: https://webrtc-codereview.appspot.com/22109004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6964 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../include/signal_processing_library.h | 1 - .../signal_processing/signal_processing_unittest.cc | 1 - .../codecs/isac/fix/source/entropy_coding.c | 2 +- .../codecs/isac/fix/source/pitch_estimator.c | 5 +++-- webrtc/modules/audio_processing/aecm/aecm_core_c.c | 3 +-- .../modules/audio_processing/aecm/aecm_core_mips.c | 3 +-- webrtc/modules/audio_processing/agc/digital_agc.c | 6 +++--- webrtc/modules/audio_processing/ns/nsx_core.c | 12 ++++++------ webrtc/modules/audio_processing/ns/nsx_core_c.c | 9 +++------ 9 files changed, 18 insertions(+), 24 deletions(-) diff --git a/webrtc/common_audio/signal_processing/include/signal_processing_library.h b/webrtc/common_audio/signal_processing/include/signal_processing_library.h index 2ca7aff2f4..8e1059e521 100644 --- a/webrtc/common_audio/signal_processing/include/signal_processing_library.h +++ b/webrtc/common_audio/signal_processing/include/signal_processing_library.h @@ -85,7 +85,6 @@ (C + (B >> 16) * A + (((uint32_t)(0x0000FFFF & B) * A) >> 16)) #define WEBRTC_SPL_SAT(a, b, c) (b > a ? a : b < c ? c : b) -#define WEBRTC_SPL_MUL_32_16(a, b) ((a) * (b)) // Shifting with negative numbers allowed // Positive means left shift diff --git a/webrtc/common_audio/signal_processing/signal_processing_unittest.cc b/webrtc/common_audio/signal_processing/signal_processing_unittest.cc index ddcf70a0c4..88ede79bb6 100644 --- a/webrtc/common_audio/signal_processing/signal_processing_unittest.cc +++ b/webrtc/common_audio/signal_processing/signal_processing_unittest.cc @@ -60,7 +60,6 @@ TEST_F(SplTest, MacroTest) { EXPECT_EQ(21, WEBRTC_SPL_SAT(a, A, B)); EXPECT_EQ(21, WEBRTC_SPL_SAT(a, B, A)); - EXPECT_EQ(-49149, WEBRTC_SPL_MUL_32_16(a, b)); // Shifting with negative numbers allowed int shift_amount = 1; // Workaround compiler warning using variable here. diff --git a/webrtc/modules/audio_coding/codecs/isac/fix/source/entropy_coding.c b/webrtc/modules/audio_coding/codecs/isac/fix/source/entropy_coding.c index 8b46d68994..435f572325 100644 --- a/webrtc/modules/audio_coding/codecs/isac/fix/source/entropy_coding.c +++ b/webrtc/modules/audio_coding/codecs/isac/fix/source/entropy_coding.c @@ -313,7 +313,7 @@ static void CalcRootInvArSpec(const int16_t *ARCoefQ12, for (k = 1; k < (AR_ORDER); k += 2) { for (n = 0; n < FRAMESAMPLES/8; n++) - summQ16[n] += WEBRTC_SPL_RSHIFT_W32(WEBRTC_SPL_MUL_32_16(CorrQ11[k+1],WebRtcIsacfix_kCos[k][n]) + 2, 2); + summQ16[n] += ((CorrQ11[k + 1] * WebRtcIsacfix_kCos[k][n]) + 2) >> 2; } CS_ptrQ9 = WebRtcIsacfix_kCos[0]; diff --git a/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.c b/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.c index 9fb72c6c36..c38cbf6276 100644 --- a/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.c +++ b/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.c @@ -66,7 +66,7 @@ static __inline void Intrp1DQ8(int32_t *x, int32_t *fx, int32_t *y, int32_t *fy) r32=fx[1]-fx[2]; q32=fx[0]-fx[1]; nom32=q32+r32; - den32=WEBRTC_SPL_MUL_32_16((q32-r32), 2); + den32 = (q32 - r32) * 2; if (nom32<0) sign1=-1; if (den32<0) @@ -74,7 +74,8 @@ static __inline void Intrp1DQ8(int32_t *x, int32_t *fx, int32_t *y, int32_t *fy) /* t = (q32+r32)/(2*(q32-r32)) = (fx[0]-fx[1] + fx[1]-fx[2])/(2 * fx[0]-fx[1] - (fx[1]-fx[2]))*/ /* (Signs are removed because WebRtcSpl_DivResultInQ31 can't handle negative numbers) */ - t32=WebRtcSpl_DivResultInQ31(WEBRTC_SPL_MUL_32_16(nom32, sign1),WEBRTC_SPL_MUL_32_16(den32, sign2)); /* t in Q31, without signs */ + /* t in Q31, without signs */ + t32 = WebRtcSpl_DivResultInQ31(nom32 * sign1, den32 * sign2); t16=(int16_t)WEBRTC_SPL_RSHIFT_W32(t32, 23); /* Q8 */ t16=t16*sign1*sign2; /* t in Q8 with signs */ diff --git a/webrtc/modules/audio_processing/aecm/aecm_core_c.c b/webrtc/modules/audio_processing/aecm/aecm_core_c.c index 577cc63cd1..c1cc7ebadb 100644 --- a/webrtc/modules/audio_processing/aecm/aecm_core_c.c +++ b/webrtc/modules/audio_processing/aecm/aecm_core_c.c @@ -460,8 +460,7 @@ int WebRtcAecm_ProcessBlock(AecmCore_t * aecm, // Far end signal through channel estimate in Q8 // How much can we shift right to preserve resolution tmp32no1 = echoEst32[i] - aecm->echoFilt[i]; - aecm->echoFilt[i] += WEBRTC_SPL_RSHIFT_W32(WEBRTC_SPL_MUL_32_16(tmp32no1, - 50), 8); + aecm->echoFilt[i] += (tmp32no1 * 50) >> 8; zeros32 = WebRtcSpl_NormW32(aecm->echoFilt[i]) + 1; zeros16 = WebRtcSpl_NormW16(supGain) + 1; diff --git a/webrtc/modules/audio_processing/aecm/aecm_core_mips.c b/webrtc/modules/audio_processing/aecm/aecm_core_mips.c index 3a7b115971..aedd25b88b 100644 --- a/webrtc/modules/audio_processing/aecm/aecm_core_mips.c +++ b/webrtc/modules/audio_processing/aecm/aecm_core_mips.c @@ -970,8 +970,7 @@ int WebRtcAecm_ProcessBlock(AecmCore_t* aecm, // Far end signal through channel estimate in Q8 // How much can we shift right to preserve resolution tmp32no1 = echoEst32[i] - aecm->echoFilt[i]; - aecm->echoFilt[i] += WEBRTC_SPL_RSHIFT_W32( - WEBRTC_SPL_MUL_32_16(tmp32no1, 50), 8); + aecm->echoFilt[i] += (tmp32no1 * 50) >> 8; zeros32 = WebRtcSpl_NormW32(aecm->echoFilt[i]) + 1; zeros16 = WebRtcSpl_NormW16(supGain) + 1; diff --git a/webrtc/modules/audio_processing/agc/digital_agc.c b/webrtc/modules/audio_processing/agc/digital_agc.c index c9fca51a44..7b515a57de 100644 --- a/webrtc/modules/audio_processing/agc/digital_agc.c +++ b/webrtc/modules/audio_processing/agc/digital_agc.c @@ -187,7 +187,7 @@ int32_t WebRtcAgc_CalculateGainTable(int32_t *gainTable, // Q16 } } numFIX = WEBRTC_SPL_LSHIFT_W32(WEBRTC_SPL_MUL_16_U16(maxGain, constMaxGain), 6); // Q14 - numFIX -= WEBRTC_SPL_MUL_32_16((int32_t)logApprox, diffGain); // Q14 + numFIX -= (int32_t)logApprox * diffGain; // Q14 // Calculate ratio // Shift |numFIX| as much as possible. @@ -237,13 +237,13 @@ int32_t WebRtcAgc_CalculateGainTable(int32_t *gainTable, // Q16 { tmp16 = WEBRTC_SPL_LSHIFT_W16(2, 14) - constLinApprox; tmp32no2 = WEBRTC_SPL_LSHIFT_W32(1, 14) - fracPart; - tmp32no2 = WEBRTC_SPL_MUL_32_16(tmp32no2, tmp16); + tmp32no2 *= tmp16; tmp32no2 = WEBRTC_SPL_RSHIFT_W32(tmp32no2, 13); tmp32no2 = WEBRTC_SPL_LSHIFT_W32(1, 14) - tmp32no2; } else { tmp16 = constLinApprox - WEBRTC_SPL_LSHIFT_W16(1, 14); - tmp32no2 = WEBRTC_SPL_MUL_32_16(fracPart, tmp16); + tmp32no2 = fracPart * tmp16; tmp32no2 = WEBRTC_SPL_RSHIFT_W32(tmp32no2, 13); } fracPart = (uint16_t)tmp32no2; diff --git a/webrtc/modules/audio_processing/ns/nsx_core.c b/webrtc/modules/audio_processing/ns/nsx_core.c index 86cbb0ba9e..4b491d2153 100644 --- a/webrtc/modules/audio_processing/ns/nsx_core.c +++ b/webrtc/modules/audio_processing/ns/nsx_core.c @@ -885,14 +885,14 @@ void WebRtcNsx_FeatureParameterExtraction(NsxInst_t* inst, int flag) { tmp32 = WEBRTC_SPL_MUL_16_16(inst->histLrt[i], j); avgHistLrtFX += tmp32; numHistLrt += inst->histLrt[i]; - avgSquareHistLrtFX += WEBRTC_SPL_MUL_32_16(tmp32, j); + avgSquareHistLrtFX += tmp32 * j; } avgHistLrtComplFX = avgHistLrtFX; for (; i < HIST_PAR_EST; i++) { j = (2 * i + 1); tmp32 = WEBRTC_SPL_MUL_16_16(inst->histLrt[i], j); avgHistLrtComplFX += tmp32; - avgSquareHistLrtFX += WEBRTC_SPL_MUL_32_16(tmp32, j); + avgSquareHistLrtFX += tmp32 * j; } fluctLrtFX = WEBRTC_SPL_MUL(avgSquareHistLrtFX, numHistLrt); fluctLrtFX -= WEBRTC_SPL_MUL(avgHistLrtFX, avgHistLrtComplFX); @@ -1083,7 +1083,7 @@ void WebRtcNsx_ComputeSpectralFlatness(NsxInst_t* inst, uint16_t* magn) { //time average update of spectral flatness feature tmp32 = currentSpectralFlatness - (int32_t)inst->featureSpecFlat; // Q10 - tmp32 = WEBRTC_SPL_MUL_32_16(SPECT_FLAT_TAVG_Q14, tmp32); // Q24 + tmp32 *= SPECT_FLAT_TAVG_Q14; // Q24 inst->featureSpecFlat = (uint32_t)((int32_t)inst->featureSpecFlat + WEBRTC_SPL_RSHIFT_W32(tmp32, 14)); // Q10 // done with flatness feature @@ -1135,7 +1135,7 @@ void WebRtcNsx_ComputeSpectralDifference(NsxInst_t* inst, uint16_t* magnIn) { tmp16no1 = (int16_t)((int32_t)magnIn[i] - avgMagnFX); tmp32no2 = inst->avgMagnPause[i] - avgPauseFX; varMagnUFX += (uint32_t)WEBRTC_SPL_MUL_16_16(tmp16no1, tmp16no1); // Q(2*qMagn) - tmp32no1 = WEBRTC_SPL_MUL_32_16(tmp32no2, tmp16no1); // Q(prevQMagn+qMagn) + tmp32no1 = tmp32no2 * tmp16no1; // Q(prevQMagn+qMagn) covMagnPauseFX += tmp32no1; // Q(prevQMagn+qMagn) tmp32no1 = WEBRTC_SPL_RSHIFT_W32(tmp32no2, nShifts); // Q(prevQMagn-minPause) varPauseUFX += (uint32_t)WEBRTC_SPL_MUL(tmp32no1, tmp32no1); // Q(2*(prevQMagn-minPause)) @@ -1940,12 +1940,12 @@ int WebRtcNsx_ProcessCore(NsxInst_t* inst, short* speechFrame, short* speechFram if (nonSpeechProbFinal[i] > ONE_MINUS_PROB_RANGE_Q8) { if (nShifts < 0) { tmp32no1 = (int32_t)magnU16[i] - tmp32no2; // Q(qMagn) - tmp32no1 = WEBRTC_SPL_MUL_32_16(tmp32no1, ONE_MINUS_GAMMA_PAUSE_Q8); // Q(8+prevQMagn+nShifts) + tmp32no1 *= ONE_MINUS_GAMMA_PAUSE_Q8; // Q(8+prevQMagn+nShifts) tmp32no1 = WEBRTC_SPL_RSHIFT_W32(tmp32no1 + 128, 8); // Q(qMagn) } else { tmp32no1 = WEBRTC_SPL_LSHIFT_W32((int32_t)magnU16[i], nShifts) - inst->avgMagnPause[i]; // Q(qMagn+nShifts) - tmp32no1 = WEBRTC_SPL_MUL_32_16(tmp32no1, ONE_MINUS_GAMMA_PAUSE_Q8); // Q(8+prevQMagn+nShifts) + tmp32no1 *= ONE_MINUS_GAMMA_PAUSE_Q8; // Q(8+prevQMagn+nShifts) tmp32no1 = WEBRTC_SPL_RSHIFT_W32(tmp32no1 + (128 << nShifts), 8 + nShifts); // Q(qMagn) } tmp32no2 += tmp32no1; // Q(qMagn) diff --git a/webrtc/modules/audio_processing/ns/nsx_core_c.c b/webrtc/modules/audio_processing/ns/nsx_core_c.c index 452b96e77b..1b4975407c 100644 --- a/webrtc/modules/audio_processing/ns/nsx_core_c.c +++ b/webrtc/modules/audio_processing/ns/nsx_core_c.c @@ -62,8 +62,7 @@ void WebRtcNsx_SpeechNoiseProb(NsxInst_t* inst, frac32 = tmp32 + 37; // tmp32 = log2(priorLocSnr[i]) tmp32 = (int32_t)(((31 - zeros) << 12) + frac32) - (11 << 12); // Q12 - logTmp = WEBRTC_SPL_RSHIFT_W32(WEBRTC_SPL_MUL_32_16(tmp32, 178), 8); - // log2(priorLocSnr[i])*log(2) + logTmp = (tmp32 * 178) >> 8; // log2(priorLocSnr[i])*log(2) tmp32no1 = WEBRTC_SPL_RSHIFT_W32(logTmp + inst->logLrtTimeAvgW32[i], 1); // Q12 inst->logLrtTimeAvgW32[i] += (besselTmpFX32 - tmp32no1); // Q12 @@ -248,14 +247,12 @@ void WebRtcNsx_SpeechNoiseProb(NsxInst_t* inst, if (normTmp + normTmp2 < 15) { invLrtFX = WEBRTC_SPL_RSHIFT_W32(invLrtFX, 15 - normTmp2 - normTmp); // Q(normTmp+normTmp2-7) - tmp32no1 = WEBRTC_SPL_MUL_32_16(invLrtFX, - (16384 - inst->priorNonSpeechProb)); + tmp32no1 = invLrtFX * (16384 - inst->priorNonSpeechProb); // Q(normTmp+normTmp2+7) invLrtFX = WEBRTC_SPL_SHIFT_W32(tmp32no1, 7 - normTmp - normTmp2); // Q14 } else { - tmp32no1 = WEBRTC_SPL_MUL_32_16(invLrtFX, - (16384 - inst->priorNonSpeechProb)); + tmp32no1 = invLrtFX * (16384 - inst->priorNonSpeechProb); // Q22 invLrtFX = WEBRTC_SPL_RSHIFT_W32(tmp32no1, 8); // Q14 }