Admin message

WARNING! Gitlab maintenance operation scheduled for Monday, 20 April between 12:00 and 14:00 (CET). During this time window, short service interruptions (less than 5 minutes) may occur. Thank you in advance for your understanding.

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.

Assignee Loading
Time tracking Loading