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.

Assignee Loading
Time tracking Loading