Skip to content

MDCT-Stereo kernel switching can crash the decoder in combination with PLC and rate switching

In MDCT-Stereo kernel switching, the MDST kernel is not allowed to be used in frames that follow ACELP frames, i.e. when st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP is true. This can be the case, when rate switching is done. At the encoder, this case is always known and the kernel is reset appropriately. However, at the decoder, there can be lost frames and/or time domain concealment, so that a frame's last overlap differs from the encoder.

For example: let frame N use ACELP core coding at a lower bitrate, then in frame N+1 the bitrate is switched so that MDCT-Stereo is used. Also let the kernel switch to MDST in frame M+2 (still in MDCT-Stereo). If then frame M+1 is lost and is concealed using ACELP core, at the decoder frame M+2 is a transition frame with MDST kernel which is illegal and causes the decoder to crash.

The solution is simple: In the decoder, for transition frames, force the kernel to MDCT. In theory, this is wrong reconstruction of the frame, but since this is either a PLC case or a switching frame, other artifacts were always more dominant in tests.