Skip to content

OSBA Rendering Room Reverb - Wrong pointer increment in ivas_dirac_dec_render_sf_fx()

Basic info

  • Fixed point:
    • Encoder (fixed): n/a
    • Decoder (fixed): a90c34d3

Bug description

In the function ivas_dirac_dec_render_sf_fx() there is a wrong pointer increment, which affects the rendering of objects (at least for OSBA):

BASOP, lib_dec/ivas_dirac_dec_fx.c, line 3792:

FOR( l = 0; l < hSpatParamRendCom->num_freq_bands; l++ )
{
    Cldfb_RealBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_RealBuffer_fx[j2][k][l], g_fx, *tc_re_fx );
    move32();
    tc_re_fx++;
    Cldfb_ImagBuffer_fx[j2][k][l] = Madd_32_32( Cldfb_ImagBuffer_fx[j2][k][l], g_fx, *tc_im_fx );
    move32();
    tc_re_fx++;  <-- issue is here
}

The corresponding code in floating-point looks like this:

for ( l = 0; l < hSpatParamRendCom->num_freq_bands; l++ )
{
    Cldfb_RealBuffer[j2][k][l] += g * *( tc_re++ );
    Cldfb_ImagBuffer[j2][k][l] += g * *( tc_im++ );
}

As can be seen, in BASOP the pointer tc_re_fx is incremented twice. The second time, actually ci_fx should be incremented.