Loading lib_com/ivas_cnst.h +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading lib_com/ivas_ism_com.c +56 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading lib_com/ivas_prot_fx.h +9 −0 Original line number Diff line number Diff line Loading @@ -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 lib_com/ivas_rom_com.c +13 −0 Original line number Diff line number Diff line Loading @@ -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 Loading lib_com/ivas_rom_com.h +5 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
lib_com/ivas_cnst.h +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
lib_com/ivas_ism_com.c +56 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading
lib_com/ivas_prot_fx.h +9 −0 Original line number Diff line number Diff line Loading @@ -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
lib_com/ivas_rom_com.c +13 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
lib_com/ivas_rom_com.h +5 −0 Original line number Diff line number Diff line Loading @@ -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