mirror of https://github.com/mstorsjo/fdk-aac.git
Avoid too big changes in isScale
These values are delta encoded, but only steps [-60,60] are possible to encode. If the difference between two values are bigger than that, we end up with a sequence we are unable to encode. This fixes crashes on certain stereo samples at higher bitrates.
This commit is contained in:
parent
bae4553d42
commit
226601a8d9
|
@ -584,6 +584,7 @@ void FDKaacEnc_IntensityStereoProcessing(
|
|||
FIXP_DBL realIsScale[MAX_GROUPED_SFB];
|
||||
INTENSITY_PARAMETERS isParams;
|
||||
INT isMask[MAX_GROUPED_SFB];
|
||||
INT lastValIs = 0, delta;
|
||||
|
||||
FDKmemclear((void*)isBook,sfbCnt*sizeof(INT));
|
||||
FDKmemclear((void*)isMask,sfbCnt*sizeof(INT));
|
||||
|
@ -739,6 +740,14 @@ void FDKaacEnc_IntensityStereoProcessing(
|
|||
isScale[sfb+sfboffs] = (INT)(((realIsScale[sfb+sfboffs]>>1)+FL2FXCONST_DBL(0.5f/(1<<(REAL_SCALE_SF+LD_DATA_SHIFT+1))))>>(DFRACT_BITS-1-REAL_SCALE_SF-LD_DATA_SHIFT-1));
|
||||
}
|
||||
|
||||
delta = isScale[sfb+sfboffs] - lastValIs;
|
||||
if (delta < -CODE_BOOK_SCF_LAV) {
|
||||
isScale[sfb+sfboffs] = lastValIs - CODE_BOOK_SCF_LAV;
|
||||
} else if (delta + CODE_BOOK_SCF_LAV >= (INT)(sizeof(FDKaacEnc_huff_ltabscf)/sizeof(FDKaacEnc_huff_ltabscf[0]))) {
|
||||
isScale[sfb+sfboffs] = lastValIs + sizeof(FDKaacEnc_huff_ltabscf)/sizeof(FDKaacEnc_huff_ltabscf[0]) - CODE_BOOK_SCF_LAV - 1;
|
||||
}
|
||||
lastValIs = isScale[sfb+sfboffs];
|
||||
|
||||
sfbEnergyRight[sfb+sfboffs] = FL2FXCONST_DBL(0.0f);
|
||||
sfbEnergyLdDataRight[sfb+sfboffs] = FL2FXCONST_DBL(-1.0f);
|
||||
sfbThresholdRight[sfb+sfboffs] = FL2FXCONST_DBL(0.0f);
|
||||
|
|
Loading…
Reference in New Issue