summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2012-08-10 00:51:37 +0300
committerMartin Storsjo <martin@martin.st>2012-08-10 11:01:36 +0300
commit839ae290c1f5a263613bea1a5fde863e757a8849 (patch)
tree868a5773eec2ec0c3df04dc7141e058d1280a0e1
parentd8e8f1ac46cd55ded2dd42adf89e95092bcc04ea (diff)
downloadODR-AudioEnc-839ae290c1f5a263613bea1a5fde863e757a8849.tar.gz
ODR-AudioEnc-839ae290c1f5a263613bea1a5fde863e757a8849.tar.bz2
ODR-AudioEnc-839ae290c1f5a263613bea1a5fde863e757a8849.zip
Use saturating adds to avoid overflow
These additions can overflow, triggering assertions later.
-rw-r--r--libAACenc/src/aacenc_tns.cpp4
-rw-r--r--libAACenc/src/grp_data.cpp2
2 files changed, 3 insertions, 3 deletions
diff --git a/libAACenc/src/aacenc_tns.cpp b/libAACenc/src/aacenc_tns.cpp
index 933e4e7..fbff424 100644
--- a/libAACenc/src/aacenc_tns.cpp
+++ b/libAACenc/src/aacenc_tns.cpp
@@ -1150,8 +1150,8 @@ static INT FDKaacEnc_AutoToParcor(
for(j=numOfCoeff-i-1; j>=0; j--) {
FIXP_DBL accu1 = fMult(tmp, input[j]);
FIXP_DBL accu2 = fMult(tmp, workBuffer[j]);
- workBuffer[j] += accu1;
- input[j] += accu2;
+ workBuffer[j] = fAddSaturate(workBuffer[j], accu1);
+ input[j] = fAddSaturate(input[j], accu2);
}
workBuffer++;
diff --git a/libAACenc/src/grp_data.cpp b/libAACenc/src/grp_data.cpp
index 03d4976..7adcb21 100644
--- a/libAACenc/src/grp_data.cpp
+++ b/libAACenc/src/grp_data.cpp
@@ -195,7 +195,7 @@ FDKaacEnc_groupShortData(FIXP_DBL *mdctSpectrum, /* in-out
FIXP_DBL energy = sfbEnergy->Short[wnd][sfb];
for (j=1; j<groupLen[grp]; j++)
{
- energy += sfbEnergy->Short[wnd+j][sfb];
+ energy = fAddSaturate(energy, sfbEnergy->Short[wnd+j][sfb]);
}
sfbEnergy->Long[i++] = energy;
}