Skip to content

Saturation possible in stereo TCX decoding with IGF

Git SHA: 6cfcf27f

Running

./IVAS_cod_float -stereo -max_band fb 48000 48 ltv48_STEREO.wav bit
./IVAS_dec_fx stereo 48 bit out.wav

results in an assert in the L_shl BASOP. The assert happens in dec_tcx.c at line 2141:

            FOR ( j = startLine; j < endLine; j++ )
            {
                IF ( st->hIGFDec->flag_sparse[j - IGF_START_MN] == 2 )
                {
                    x_fx[j] = L_shl(x_itf_fx[j - IGF_START_MN], s); // <--- line 2141
                }
            }

Here, left shift is applied on the values in x_itf_fx. There are no differences between float decoder and fixed decoder with respect to st->hIGFDec->flag_sparse, so this is likely not caused by accessing the wrong values. The assert happens for j=372, so x_itf_fx[228] is the culprit, which has the value -1206298368. This value being negative triggers the overflow assert in the BASOP function. In the float decoder, the corresponding value is -18406.9258, so negative as well.