Wrong shift in ivas_spat_hSpatParamRendCom_config_fx
Basic info
- Float reference:
- Decoder (float): dfed311fdc7c91f7f9c4204ba4f1c9b02441888a
- Fixed point:
- Decoder (fixed): 496d928d
Bug description
For non-MASA related paths, the configuration render_to_md_map in ivas_spat_hSpatParamRendCom_config_fx is done as follows in float
int16_t num_slots_in_subfr;
num_slots_in_subfr = dec_param_estim_flag ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1;
hSpatParamRendCom->dirac_md_buffer_length = ( MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_DIRAC_PARAM_DEC_SFR );
hSpatParamRendCom->dirac_bs_md_write_idx = DELAY_DIRAC_PARAM_DEC_SFR;
hSpatParamRendCom->dirac_read_idx = 0;
set_s( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME );
for ( map_idx = 0; map_idx < DEFAULT_JBM_SUBFRAMES_5MS * num_slots_in_subfr; map_idx++ )
{
hSpatParamRendCom->render_to_md_map[map_idx] = hSpatParamRendCom->dirac_read_idx + map_idx / num_slots_in_subfr;
}
The BASOP side has somewhat interesting implementation for this shown below
Word16 num_slots_in_subfr, tmp;
tmp = 1;
move16();
IF( dec_param_estim_flag )
num_slots_in_subfr = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES;
ELSE
num_slots_in_subfr = 1;
move16();
hSpatParamRendCom->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_DIRAC_PARAM_DEC_SFR;
move16();
hSpatParamRendCom->dirac_bs_md_write_idx = DELAY_DIRAC_PARAM_DEC_SFR;
move16();
hSpatParamRendCom->dirac_read_idx = 0;
move16();
set16_fx( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME );
if ( EQ_16( num_slots_in_subfr, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES ) )
{
tmp = 2;
move16();
}
FOR( map_idx = 0; map_idx < DEFAULT_JBM_SUBFRAMES_5MS * num_slots_in_subfr; map_idx++ )
{
hSpatParamRendCom->render_to_md_map[map_idx] = add( hSpatParamRendCom->dirac_read_idx, shr( map_idx, tmp ) );
move16();
}
The problem is that the tmp set in BASOP gets value 1 or 2 which is used for right shift. The float had division by 1 or 4. So this is a mismatch. It may be that the render map is set later correctly but good to fix this as well.