Skip to content

Assert in OMASA bitrate switching decoder +10 dB, ivas_stereo_dft_plc_fx

Basic info

  • Float reference:
  • Fixed point:

Bug description

Assert (overflow) in L_add in stereo_dft_dmx_nrg_fx: https://forge.3gpp.org/rep/sa4/audio/ivas-basop/-/blob/main/lib_dec/ivas_stereo_dft_plc_fx.c#L788

It happens in frame 4921 when running the full bitstream (see below) or frame 121 in the cut bitstream attached to this ticket.

        FOR( i = 0; i < frame_length / 2; i++ )
        {
            dmx_nrg = L_add( dmx_nrg,
                             L_add( Madd_32_32( Mpy_32_32( dmx_k0[2 * i], dmx_k0[2 * i] ), dmx_k0[2 * i + 1], dmx_k0[2 * i + 1] ),
                                    Madd_32_32( Mpy_32_32( dmx_k1[2 * i], dmx_k1[2 * i] ), dmx_k1[2 * i + 1], dmx_k1[2 * i + 1] ) ) ); /* Q0 */
        }

image.png

Ways to reproduce

Cut bitstream:

bs_cut2.192

# Shortcut
IVAS_dec STEREO 32 bs_cut2.192 out.wav


# All steps
cp -v /usr/local/ltv/* scripts/testv
python3 tests/scale_pcm.py scripts/testv 3.162

pytest "tests/codec_be_on_mr_nonselection/test_param_file.py::test_param_file_tests[ltv-OSBA 3ISM 2OA at bitrate switching 13.2 to 512 kbps, 48kHz in, 32kHz out, STEREO out, FER at 10%]" --update_ref 1 -n 1 --param_file scripts/config/self_test_ltv.prm
pytest "tests/codec_be_on_mr_nonselection/test_param_file.py::test_param_file_tests[ltv-OSBA 3ISM 2OA at bitrate switching 13.2 to 512 kbps, 48kHz in, 32kHz out, STEREO out, FER at 10%]" -n 1 --param_file scripts/config/self_test_ltv.prm --dut_encoder_path IVAS_cod_ref