Fixed the overflow in the AGC

BUG=webrtc:8236

Review-Url: https://codereview.webrtc.org/3009373002
Cr-Commit-Position: refs/heads/master@{#19818}
This commit is contained in:
peah
2017-09-13 06:28:16 -07:00
committed by Commit Bot
parent 2ab9879af0
commit fb2fa3f54e

View File

@ -524,8 +524,17 @@ int32_t WebRtcAgc_ProcessDigital(DigitalAgc* stt,
// iterate over samples // iterate over samples
for (n = 0; n < L; n++) { for (n = 0; n < L; n++) {
for (i = 0; i < num_bands; ++i) { for (i = 0; i < num_bands; ++i) {
tmp32 = out[i][k * L + n] * (gain32 >> 4); int64_t tmp64 = ((int64_t)(out[i][k * L + n])) * (gain32 >> 4);
out[i][k * L + n] = (int16_t)(tmp32 >> 16); tmp64 = tmp64 >> 16;
if (tmp64 > 32767) {
out[i][k * L + n] = 32767;
}
else if (tmp64 < -32768) {
out[i][k * L + n] = -32768;
}
else {
out[i][k * L + n] = (int16_t)(tmp64);
}
} }
gain32 += delta; gain32 += delta;
} }