Commit 2588bbe1 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch 'ism_quant_meta_integration' into 'main'

Integration and conversion of ism_quant_meta function

See merge request !398
parents 8e33e92d 6e9aefb6
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -343,14 +343,22 @@ typedef enum
#define ISM_AZIMUTH_MAX_FX                      754974720
#define ISM_AZIMUTH_LOW_BORDER                  -140.0f
#define ISM_AZIMUTH_HIGH_BORDER                 135.0f
#define ISM_AZIMUTH_LOW_BORDER_FX               -587202560
#define ISM_AZIMUTH_HIGH_BORDER_FX              566231040

#define ISM_ELEVATION_NBITS                     6
#define ISM_ELEVATION_MIN                       -90.0f
#define ISM_ELEVATION_MAX                       90.0f
#define ISM_ELEVATION_MIN_FX                    -377487360
#define ISM_ELEVATION_MAX_FX                    377487360
#define ISM_ELEVATION_LOW_BORDER                -70.0f
#define ISM_ELEVATION_HIGH_BORDER               65.0f
#define ISM_ELEVATION_LOW_BORDER_FX             -293601280
#define ISM_ELEVATION_HIGH_BORDER_FX            272629760
#define ISM_Q_STEP                              2.5f
#define ISM_Q_STEP_FX                           10485760
#define ISM_Q_STEP_BORDER                       5.0f
#define ISM_Q_STEP_BORDER_FX                    20971520

#define ISM_RADIUS_NBITS                        6 
#define ISM_RADIUS_MIN                          0.0f
+56 −0
Original line number Diff line number Diff line
@@ -838,6 +838,62 @@ void ivas_ism_reset_metadata_API(
 *-------------------------------------------------------------------*/

/*! r: index of the winning codeword */
#ifdef IVAS_FLOAT_FIXED
Word16 ism_quant_meta_fx(
    const Word32 val,              /* i  : scalar value to quantize        Q22 */
    Word32 *valQ,                  /* o  : quantized value                 Q22 */
    const Word32 borders_fx[],     /* i  : level borders                   Q22 */
    const Word32 q_step_fx,        /* i  : quantization step               Q22 */
    const Word32 q_step_border_fx, /* i  : quantization step at the border Q22 */
    const Word16 cbsize            /* i  : codebook size                       */
)
{
    Word16 idx, idx_start;
    Word32 qlow_fx, step_fx;
    Word16 tmp, tmp_e;

    IF( val <= borders_fx[1] )
    {
        qlow_fx = borders_fx[0];
        move32();
        idx_start = 0;
        move32();
        step_fx = q_step_border_fx;
        move32();
    }
    ELSE IF( val <= borders_fx[2] )
    {
        qlow_fx = borders_fx[1];
        move32();
        tmp = BASOP_Util_Divide3232_Scale( L_sub( borders_fx[1], borders_fx[0] ), q_step_border_fx, &tmp_e );
        idx_start = shr( tmp, sub( 15, tmp_e ) );
        step_fx = q_step_fx;
        move32();
    }
    ELSE
    {
        qlow_fx = borders_fx[2];
        move32();
        tmp = BASOP_Util_Divide3232_Scale( L_add( L_sub( borders_fx[3], borders_fx[2] ), L_sub( q_step_border_fx, ONE_IN_Q22 ) ), q_step_border_fx, &tmp_e );
        idx_start = sub( cbsize, add( 1, shr( tmp, sub( 15, tmp_e ) ) ) );
        step_fx = q_step_border_fx;
        move32();
    }


    tmp = BASOP_Util_Divide3232_Scale( L_sub( val, qlow_fx ), step_fx, &tmp_e );
    tmp = shl( tmp, sub( Q1, sub( 15, tmp_e ) ) );
    tmp = add( tmp, 1 );
    tmp = shr( tmp, 1 );
    idx = add( idx_start, s_max( 0, s_min( sub( cbsize, 1 ), tmp ) ) );

    // idx = idx_start + (int16_t) max( 0.f, min( cbsize - 1, ( ( val - qlow_fx ) / step_fx + 0.5f ) ) );
    *valQ = L_add( imult3216( step_fx, sub( idx, idx_start ) ), qlow_fx );

    return idx;
}
#endif

int16_t ism_quant_meta(
    const float val,           /* i  : scalar value to quantize        */
    float *valQ,               /* o  : quantized value                 */
+9 −0
Original line number Diff line number Diff line
@@ -2384,4 +2384,13 @@ Word16 calculate_brate_limit_flag_fx(
    const Word16 ism_imp[], /* i  : ISM importance flags   */
    const Word16 nchan_ism  /* i  : number of objects      */
);
Word16 ism_quant_meta_fx(
    const Word32 val,              /* i  : scalar value to quantize        */
    Word32 *valQ,                  /* o  : quantized value                 */
    const Word32 borders_fx[],     /* i  : level borders                   */
    const Word32 q_step_fx,        /* i  : quantization step               */
    const Word32 q_step_border_fx, /* i  : quantization step at the border */
    const Word16 cbsize            /* i  : codebook size                   */
);

#endif
+13 −0
Original line number Diff line number Diff line
@@ -3576,6 +3576,19 @@ const float ism_elevation_borders[4] =
    ISM_ELEVATION_MIN, ISM_ELEVATION_LOW_BORDER, ISM_ELEVATION_HIGH_BORDER, ISM_ELEVATION_MAX
};
#ifdef IVAS_FLOAT_FIXED
const Word32 ism_azimuth_borders_fx[4] =
{
	ISM_AZIMUTH_MIN_FX, ISM_AZIMUTH_LOW_BORDER_FX, ISM_AZIMUTH_HIGH_BORDER_FX, ISM_AZIMUTH_MAX_FX
};
const Word32 ism_elevation_borders_fx[4] =
{
	ISM_ELEVATION_MIN_FX, ISM_ELEVATION_LOW_BORDER_FX, ISM_ELEVATION_HIGH_BORDER_FX, ISM_ELEVATION_MAX_FX
};
#endif
/*----------------------------------------------------------------------------------*
 * Param ISM ROM tables
+5 −0
Original line number Diff line number Diff line
@@ -406,6 +406,11 @@ extern const Word32 dct12_fx[];
extern const float ism_azimuth_borders[4];
extern const float ism_elevation_borders[4];

#ifdef IVAS_FLOAT_FIXED
extern const Word32 ism_azimuth_borders_fx[4];
extern const Word32 ism_elevation_borders_fx[4];
#endif

/*----------------------------------------------------------------------------------*
 * Param ISM ROM tables
 *----------------------------------------------------------------------------------*/
Loading