Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 if (tmpU32no2 < tmpU32no1) { | 182 if (tmpU32no2 < tmpU32no1) { |
| 183 logApprox = (tmpU32no1 - tmpU32no2) >> (8 - zerosScale); // Q14 | 183 logApprox = (tmpU32no1 - tmpU32no2) >> (8 - zerosScale); // Q14 |
| 184 } | 184 } |
| 185 } | 185 } |
| 186 numFIX = (maxGain * constMaxGain) * (1 << 6); // Q14 | 186 numFIX = (maxGain * constMaxGain) * (1 << 6); // Q14 |
| 187 numFIX -= (int32_t)logApprox * diffGain; // Q14 | 187 numFIX -= (int32_t)logApprox * diffGain; // Q14 |
| 188 | 188 |
| 189 // Calculate ratio | 189 // Calculate ratio |
| 190 // Shift |numFIX| as much as possible. | 190 // Shift |numFIX| as much as possible. |
| 191 // Ensure we avoid wrap-around in |den| as well. | 191 // Ensure we avoid wrap-around in |den| as well. |
| 192 if (numFIX > (den >> 8)) // |den| is Q8. | 192 if (numFIX > (den >> 8) || -numFIX > (den >> 8)) // |den| is Q8. |
| 193 { | 193 { |
| 194 zeros = WebRtcSpl_NormW32(numFIX); | 194 zeros = WebRtcSpl_NormW32(numFIX); |
| 195 } else { | 195 } else { |
| 196 zeros = WebRtcSpl_NormW32(den) + 8; | 196 zeros = WebRtcSpl_NormW32(den) + 8; |
| 197 } | 197 } |
| 198 numFIX *= 1 << zeros; // Q(14+zeros) | 198 numFIX *= 1 << zeros; // Q(14+zeros) |
| 199 | 199 |
| 200 // Shift den so we end up in Qy1 | 200 // Shift den so we end up in Qy1 |
| 201 tmp32no1 = WEBRTC_SPL_SHIFT_W32(den, zeros - 8); // Q(zeros) | 201 tmp32no1 = WEBRTC_SPL_SHIFT_W32(den, zeros - 9); // Q(zeros - 1) |
| 202 if (numFIX < 0) { | 202 y32 = numFIX / tmp32no1; // in Q15 |
| 203 numFIX -= tmp32no1 / 2; | 203 y32 = (y32 + (y32 >= 0 ? 1 : -1)) / 2; // This is to do rounding in Q14. |
|
peah-webrtc
2016/06/03 08:00:56
Why not use:
if (y32 < 0)
y32 = -(((-y32) + 1) >
| |
| 204 } else { | 204 |
| 205 numFIX += tmp32no1 / 2; | |
| 206 } | |
| 207 y32 = numFIX / tmp32no1; // in Q14 | |
| 208 if (limiterEnable && (i < limiterIdx)) { | 205 if (limiterEnable && (i < limiterIdx)) { |
| 209 tmp32 = WEBRTC_SPL_MUL_16_U16(i - 1, kLog10_2); // Q14 | 206 tmp32 = WEBRTC_SPL_MUL_16_U16(i - 1, kLog10_2); // Q14 |
| 210 tmp32 -= limiterLvl * (1 << 14); // Q14 | 207 tmp32 -= limiterLvl * (1 << 14); // Q14 |
| 211 y32 = WebRtcSpl_DivW32W16(tmp32 + 10, 20); | 208 y32 = WebRtcSpl_DivW32W16(tmp32 + 10, 20); |
| 212 } | 209 } |
| 213 if (y32 > 39000) { | 210 if (y32 > 39000) { |
| 214 tmp32 = (y32 >> 1) * kLog10 + 4096; // in Q27 | 211 tmp32 = (y32 >> 1) * kLog10 + 4096; // in Q27 |
| 215 tmp32 >>= 13; // In Q14. | 212 tmp32 >>= 13; // In Q14. |
| 216 } else { | 213 } else { |
| 217 tmp32 = y32 * kLog10 + 8192; // in Q28 | 214 tmp32 = y32 * kLog10 + 8192; // in Q28 |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 681 // limit | 678 // limit |
| 682 if (state->logRatio > 2048) { | 679 if (state->logRatio > 2048) { |
| 683 state->logRatio = 2048; | 680 state->logRatio = 2048; |
| 684 } | 681 } |
| 685 if (state->logRatio < -2048) { | 682 if (state->logRatio < -2048) { |
| 686 state->logRatio = -2048; | 683 state->logRatio = -2048; |
| 687 } | 684 } |
| 688 | 685 |
| 689 return state->logRatio; // Q10 | 686 return state->logRatio; // Q10 |
| 690 } | 687 } |
| OLD | NEW |