Loading lib_com/ivas_cnst.h +4 −3 Original line number Diff line number Diff line Loading @@ -1046,14 +1046,15 @@ typedef enum /* Common SPAR metadata constants */ #define IVAS_ACTIVEW_DM_F_SCALE 0.5f #define IVAS_ACTIVEW_DM_F_SCALE_FX ONE_IN_Q30 #define IVAS_ACTIVEW_DM_F_SCALE_FX IVAS_ACTIVEW_DM_F_SCALE * ONE_IN_Q31 #define IVAS_ACTIVEW_DM_F_SCALE_DTX 0.25f #define IVAS_ACTIVEW_DM_F_SCALE_DTX_FX ONE_IN_Q29 #define IVAS_ACTIVEW_DM_F_SCALE_DTX_FX IVAS_ACTIVEW_DM_F_SCALE_DTX * ONE_IN_Q31 #define IVAS_ACTIVEW_DM_F_SCALE_VLBR 0.25f #define IVAS_ACTIVEW_DM_F_SCALE_VLBR_FX ONE_IN_Q29 #define IVAS_ACTIVEW_DM_F_SCALE_VLBR_FX IVAS_ACTIVEW_DM_F_SCALE_VLBR * ONE_IN_Q31 #define IVAS_SPAR_FOA_DFLT_FREQ_PER_CHAN 24000 #define IVAS_SPAR_DYN_ACTIVEW_THRESH (0.0039f) #define IVAS_SPAR_DYN_ACTIVEW_THRESH_FX IVAS_SPAR_DYN_ACTIVEW_THRESH * ONE_IN_Q31 #define IVAS_SPAR_SIDE_CH_DYN_ACTIVEW_THRESH (32.0f) #define MAX_QUANT_STRATS 3 Loading lib_com/ivas_prot.h +30 −6 Original line number Diff line number Diff line Loading @@ -5466,6 +5466,23 @@ void ivas_create_fullr_dmx_mat( ivas_spar_md_com_cfg *hMdCfg ); #ifdef IVAS_FLOAT_FIXED void ivas_create_fullr_dmx_mat_fx( Word32 pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], Word16 q_pred_coeffs_re, Word32 dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], Word16 q_dm_fv_re, Word32 ***mixer_mat, Word16 *q_mixer_mat, const Word16 in_chans, const Word16 start_band, const Word16 end_band, const Word16 active_w, ivas_spar_md_com_cfg *hMdCfg ); #endif // IVAS_FLOAT_FIXED void ivas_calc_c_p_coeffs( ivas_spar_md_t *pSparMd, float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Loading @@ -5480,18 +5497,18 @@ void ivas_calc_c_p_coeffs( ); #ifdef IVAS_FLOAT_FIXED void ivas_get_spar_md_from_dirac_fx( float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], float diffuseness[IVAS_MAX_NUM_BANDS], Word32 azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], Word32 ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], Word32 diffuseness[IVAS_MAX_NUM_BANDS], const int16_t n_ts, float ***mixer_mat, Word32 ***mixer_mat, ivas_spar_md_t *hSpar_md, ivas_spar_md_com_cfg *hSpar_md_cfg, const int16_t start_band, const int16_t end_band, const int16_t order, const int16_t dtx_vad, float Wscale_d[IVAS_MAX_NUM_BANDS], Word32 Wscale_d[IVAS_MAX_NUM_BANDS], const uint8_t useLowerRes, const int16_t active_w_vlbr, const int16_t dyn_active_w_flag Loading Loading @@ -5595,7 +5612,14 @@ void ivas_spar_to_dirac( const int16_t bw, /* i : band joining factor */ const int16_t dyn_active_w_flag /* i : dynamic active W flag */ ); void ivas_spar_to_dirac_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const int16_t dtx_vad, /* i : DTX frame flag */ const int16_t num_bands_out, /* i : number of output bands */ const int16_t bw, /* i : band joining factor */ const int16_t dyn_active_w_flag /* i : dynamic active W flag */ ); void ivas_spar_update_md_hist( ivas_spar_md_dec_state_t *hMdDec /* i/o: SPAR MD decoder handle */ ); Loading lib_com/ivas_prot_fx.h +54 −16 Original line number Diff line number Diff line Loading @@ -687,22 +687,26 @@ Word16 masa_sq_fx( ); void ivas_compute_spar_params_fx( Word32 * pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Word16 q_cov_real, Word32 dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], const int16_t i_ts, float ***mixer_mat, const int16_t start_band, const int16_t end_band, const int16_t dtx_vad, const int16_t num_ch, const int16_t bands_bw, const int16_t active_w, const int16_t active_w_vlbr, Word16 *q_dm_fv_re, const Word16 i_ts, Word32 ***mixer_mat_fx, Word16 *q_mixer_mat, const Word16 start_band, const Word16 end_band, const Word16 dtx_vad, const Word16 num_ch, const Word16 bands_bw, const Word16 active_w, const Word16 active_w_vlbr, ivas_spar_md_com_cfg *hSparCfg, ivas_spar_md_t *hSparMd, float *pWscale, const int16_t from_dirac, const int16_t dyn_active_w_flag Word32 *pWscale_fx, Word16 *q_pWscale, const Word16 from_dirac, const Word16 dyn_active_w_flag ); ivas_error ivas_ism_metadata_dec_fx( Loading Loading @@ -1416,6 +1420,14 @@ void ivas_sba_dirac_stereo_dec_fx( const Word16 mcmasa /* i : McMASA flag */ ); ivas_error ivas_osba_render_sf_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ UWord16 *nSamplesRendered, /* o : number of CLDFB slots rendered */ UWord16 *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ Word32 *p_output[] /* o : rendered time signal */ ); void ivas_hq_core_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure fx */ Word16 synth[], /* o : output synthesis */ Loading Loading @@ -1943,6 +1955,13 @@ ivas_error ivas_spar_dec_fx( Word16 *nb_bits_read /* o : number of MD bits read */ ); void ivas_spar_md_dec_process_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling */ const Word16 num_bands_out, /* i : number of output bands */ const Word16 sba_order /* i : Ambisonic (SBA) order */ ); ivas_error TDREND_Update_object_positions_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ const Word16 num_src, /* i : number of sources to render */ Loading Loading @@ -2114,4 +2133,23 @@ ivas_error ivas_ism_metadata_dec_create_fx( const Word16 n_ISms, /* i : number of objects */ Word32 element_brate_tmp[] /* o : element bitrate per object */ ); ivas_error ivas_sba_dec_reconfigure_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ uint16_t *nSamplesFlushed, /* o : number of samples flushed */ int16_t *data /* o : output synthesis signal */ ); ivas_error ivas_spar_md_dec_matrix_open_fx( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const int16_t num_channels, /* i : number of internal channels */ const int16_t num_md_sub_frames /* i : number of MD subframes */ ); void ivas_spar_md_dec_matrix_close_fx( ivas_spar_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */ const int16_t num_channels /* i : number of internal channels */ ); ivas_error ivas_spar_dec_open_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const int16_t spar_reconfig_flag /* i : SPAR reconfiguration flag */ ); #endif lib_com/ivas_spar_com.c +1202 −137 File changed.Preview size limit exceeded, changes collapsed. Show changes lib_com/ivas_spar_com_quant_util.c +69 −91 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ #include <assert.h> #include "wmc_auto.h" #include "prot_fx1.h" /*-----------------------------------------------------------------------------------------* * Function ivas_quantise_real_values() * Loading Loading @@ -133,6 +135,7 @@ void ivas_quantise_real_values_fx( } #ifndef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_spar_get_uniform_quant_strat() * Loading Loading @@ -160,67 +163,59 @@ void ivas_spar_get_uniform_quant_strat( pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.min = -1.2f; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -644245094/2; pSpar_md_com_cfg->quant_strat[i].PR.max = 1.2f; pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 644245094/2; pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.min = -0.8f; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -429496729/2; pSpar_md_com_cfg->quant_strat[i].C.max = 0.8f; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 429496729/2; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_r.max = 0.8f; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 429496729/2; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.8f; pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -429496729/2; pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.8f; pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 429496729/2; } else { pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.max = 1; pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 536870912/2; pSpar_md_com_cfg->quant_strat[i].PR.min = -1; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -536870912/2; pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.max = 2; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 1073741824/2; pSpar_md_com_cfg->quant_strat[i].C.min = -2; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -1073741824/2; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.max = 1.0f; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 536870912/2; pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.5; pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 268435456/2; pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.5; pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -268435456/2; } } return; } #if 0 void ivas_spar_get_uniform_quant_strat_fx( #else void ivas_spar_get_uniform_quant_strat( ivas_spar_md_com_cfg *pSpar_md_com_cfg, const Word16 table_idx) { Loading @@ -230,56 +225,56 @@ void ivas_spar_get_uniform_quant_strat_fx( pSpar_md_com_cfg->num_quant_strats = MAX_QUANT_STRATS; FOR (i = 0; i < pSpar_md_com_cfg->num_quant_strats; i++) for ( i = 0; i < pSpar_md_com_cfg->num_quant_strats; i++ ) { PQ_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][0]; C_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][1]; Pr_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][2]; Pc_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][3]; IF (active_w) if ( active_w ) { pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -1288490188;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 1288490188;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -322122547;//1.2*Q28 pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 322122547;//1.2*Q28 pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].C.max_fx = 858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].C.min_fx = -214748364; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 214748364;//.8*Q28 pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 214748364;//.8*Q28 pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -214748364;//.8*Q28 pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 214748364; //.8*Q28 } ELSE else { pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.max_fx = ONE_IN_Q30;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -ONE_IN_Q30;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.max_fx = ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 2147483648;//Q30 pSpar_md_com_cfg->quant_strat[i].C.min_fx = -2147483648;//Q30 pSpar_md_com_cfg->quant_strat[i].C.max_fx = 2 *ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -2*ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = ONE_IN_Q30;//Q30 pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 536870912;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -536870912;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = ONE_IN_Q27; //.5* Q28 pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -ONE_IN_Q27;//.5* Q28 } } Loading Loading @@ -402,22 +397,11 @@ void ivas_map_prior_coeffs_quant( } #endif void ivas_spar_quant_dtx_init_fx( ivas_spar_md_t *spar_md, Word32 *min_max) { spar_md->min_max_fx[0] = min_max[0]; spar_md->min_max_fx[1] = min_max[1]; return; } /*-----------------------------------------------------------------------------------------* * Function ivas_spar_quant_dtx_init() * * Init SPAR MD with minmax vals *-----------------------------------------------------------------------------------------*/ void ivas_spar_quant_dtx_init( ivas_spar_md_t *spar_md, float *min_max ) Loading @@ -427,7 +411,7 @@ void ivas_spar_quant_dtx_init( return; } #if 0 void ivas_spar_quant_dtx_init_fx( ivas_spar_md_t *spar_md, Word32 *min_max) Loading @@ -437,7 +421,7 @@ void ivas_spar_quant_dtx_init_fx( return; } #endif /*-----------------------------------------------------------------------------------------* * Function ivas_copy_band_coeffs_idx_to_arr() * Loading Loading @@ -496,7 +480,6 @@ void ivas_copy_band_coeffs_idx_to_arr( * * clear band coeffs array in SPAR MD *-----------------------------------------------------------------------------------------*/ void ivas_clear_band_coeffs( ivas_band_coeffs_t *pband_coeffs, const uint16_t num_bands ) Loading @@ -506,22 +489,17 @@ void ivas_clear_band_coeffs( for ( i = 0; i < num_bands; i++ ) { set_zero( (float *) pband_coeffs[i].C_re, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].C_re_fx, 0, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set_zero( (float *) pband_coeffs[i].P_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].P_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); set_zero( (float *) pband_coeffs[i].C_quant_re, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].C_quant_re_fx, 0, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set_zero( (float *) pband_coeffs[i].P_quant_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].P_quant_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); set_zero( pband_coeffs[i].pred_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( pband_coeffs[i].pred_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); set_zero( pband_coeffs[i].pred_quant_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( pband_coeffs[i].pred_quant_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); } return; } #if 0 void ivas_clear_band_coeffs_fx( ivas_band_coeffs_t *pband_coeffs, const UWord16 num_bands) Loading @@ -540,7 +518,7 @@ void ivas_clear_band_coeffs_fx( return; } #endif /*-----------------------------------------------------------------------------------------* * Function ivas_clear_band_coeff_idx() * Loading Loading
lib_com/ivas_cnst.h +4 −3 Original line number Diff line number Diff line Loading @@ -1046,14 +1046,15 @@ typedef enum /* Common SPAR metadata constants */ #define IVAS_ACTIVEW_DM_F_SCALE 0.5f #define IVAS_ACTIVEW_DM_F_SCALE_FX ONE_IN_Q30 #define IVAS_ACTIVEW_DM_F_SCALE_FX IVAS_ACTIVEW_DM_F_SCALE * ONE_IN_Q31 #define IVAS_ACTIVEW_DM_F_SCALE_DTX 0.25f #define IVAS_ACTIVEW_DM_F_SCALE_DTX_FX ONE_IN_Q29 #define IVAS_ACTIVEW_DM_F_SCALE_DTX_FX IVAS_ACTIVEW_DM_F_SCALE_DTX * ONE_IN_Q31 #define IVAS_ACTIVEW_DM_F_SCALE_VLBR 0.25f #define IVAS_ACTIVEW_DM_F_SCALE_VLBR_FX ONE_IN_Q29 #define IVAS_ACTIVEW_DM_F_SCALE_VLBR_FX IVAS_ACTIVEW_DM_F_SCALE_VLBR * ONE_IN_Q31 #define IVAS_SPAR_FOA_DFLT_FREQ_PER_CHAN 24000 #define IVAS_SPAR_DYN_ACTIVEW_THRESH (0.0039f) #define IVAS_SPAR_DYN_ACTIVEW_THRESH_FX IVAS_SPAR_DYN_ACTIVEW_THRESH * ONE_IN_Q31 #define IVAS_SPAR_SIDE_CH_DYN_ACTIVEW_THRESH (32.0f) #define MAX_QUANT_STRATS 3 Loading
lib_com/ivas_prot.h +30 −6 Original line number Diff line number Diff line Loading @@ -5466,6 +5466,23 @@ void ivas_create_fullr_dmx_mat( ivas_spar_md_com_cfg *hMdCfg ); #ifdef IVAS_FLOAT_FIXED void ivas_create_fullr_dmx_mat_fx( Word32 pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], Word16 q_pred_coeffs_re, Word32 dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], Word16 q_dm_fv_re, Word32 ***mixer_mat, Word16 *q_mixer_mat, const Word16 in_chans, const Word16 start_band, const Word16 end_band, const Word16 active_w, ivas_spar_md_com_cfg *hMdCfg ); #endif // IVAS_FLOAT_FIXED void ivas_calc_c_p_coeffs( ivas_spar_md_t *pSparMd, float *pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Loading @@ -5480,18 +5497,18 @@ void ivas_calc_c_p_coeffs( ); #ifdef IVAS_FLOAT_FIXED void ivas_get_spar_md_from_dirac_fx( float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], float diffuseness[IVAS_MAX_NUM_BANDS], Word32 azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], Word32 ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES], Word32 diffuseness[IVAS_MAX_NUM_BANDS], const int16_t n_ts, float ***mixer_mat, Word32 ***mixer_mat, ivas_spar_md_t *hSpar_md, ivas_spar_md_com_cfg *hSpar_md_cfg, const int16_t start_band, const int16_t end_band, const int16_t order, const int16_t dtx_vad, float Wscale_d[IVAS_MAX_NUM_BANDS], Word32 Wscale_d[IVAS_MAX_NUM_BANDS], const uint8_t useLowerRes, const int16_t active_w_vlbr, const int16_t dyn_active_w_flag Loading Loading @@ -5595,7 +5612,14 @@ void ivas_spar_to_dirac( const int16_t bw, /* i : band joining factor */ const int16_t dyn_active_w_flag /* i : dynamic active W flag */ ); void ivas_spar_to_dirac_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const int16_t dtx_vad, /* i : DTX frame flag */ const int16_t num_bands_out, /* i : number of output bands */ const int16_t bw, /* i : band joining factor */ const int16_t dyn_active_w_flag /* i : dynamic active W flag */ ); void ivas_spar_update_md_hist( ivas_spar_md_dec_state_t *hMdDec /* i/o: SPAR MD decoder handle */ ); Loading
lib_com/ivas_prot_fx.h +54 −16 Original line number Diff line number Diff line Loading @@ -687,22 +687,26 @@ Word16 masa_sq_fx( ); void ivas_compute_spar_params_fx( Word32 * pppCov_mat_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Word16 q_cov_real, Word32 dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], const int16_t i_ts, float ***mixer_mat, const int16_t start_band, const int16_t end_band, const int16_t dtx_vad, const int16_t num_ch, const int16_t bands_bw, const int16_t active_w, const int16_t active_w_vlbr, Word16 *q_dm_fv_re, const Word16 i_ts, Word32 ***mixer_mat_fx, Word16 *q_mixer_mat, const Word16 start_band, const Word16 end_band, const Word16 dtx_vad, const Word16 num_ch, const Word16 bands_bw, const Word16 active_w, const Word16 active_w_vlbr, ivas_spar_md_com_cfg *hSparCfg, ivas_spar_md_t *hSparMd, float *pWscale, const int16_t from_dirac, const int16_t dyn_active_w_flag Word32 *pWscale_fx, Word16 *q_pWscale, const Word16 from_dirac, const Word16 dyn_active_w_flag ); ivas_error ivas_ism_metadata_dec_fx( Loading Loading @@ -1416,6 +1420,14 @@ void ivas_sba_dirac_stereo_dec_fx( const Word16 mcmasa /* i : McMASA flag */ ); ivas_error ivas_osba_render_sf_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ UWord16 *nSamplesRendered, /* o : number of CLDFB slots rendered */ UWord16 *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ Word32 *p_output[] /* o : rendered time signal */ ); void ivas_hq_core_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure fx */ Word16 synth[], /* o : output synthesis */ Loading Loading @@ -1943,6 +1955,13 @@ ivas_error ivas_spar_dec_fx( Word16 *nb_bits_read /* o : number of MD bits read */ ); void ivas_spar_md_dec_process_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling */ const Word16 num_bands_out, /* i : number of output bands */ const Word16 sba_order /* i : Ambisonic (SBA) order */ ); ivas_error TDREND_Update_object_positions_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ const Word16 num_src, /* i : number of sources to render */ Loading Loading @@ -2114,4 +2133,23 @@ ivas_error ivas_ism_metadata_dec_create_fx( const Word16 n_ISms, /* i : number of objects */ Word32 element_brate_tmp[] /* o : element bitrate per object */ ); ivas_error ivas_sba_dec_reconfigure_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ uint16_t *nSamplesFlushed, /* o : number of samples flushed */ int16_t *data /* o : output synthesis signal */ ); ivas_error ivas_spar_md_dec_matrix_open_fx( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const int16_t num_channels, /* i : number of internal channels */ const int16_t num_md_sub_frames /* i : number of MD subframes */ ); void ivas_spar_md_dec_matrix_close_fx( ivas_spar_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */ const int16_t num_channels /* i : number of internal channels */ ); ivas_error ivas_spar_dec_open_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const int16_t spar_reconfig_flag /* i : SPAR reconfiguration flag */ ); #endif
lib_com/ivas_spar_com.c +1202 −137 File changed.Preview size limit exceeded, changes collapsed. Show changes
lib_com/ivas_spar_com_quant_util.c +69 −91 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ #include <assert.h> #include "wmc_auto.h" #include "prot_fx1.h" /*-----------------------------------------------------------------------------------------* * Function ivas_quantise_real_values() * Loading Loading @@ -133,6 +135,7 @@ void ivas_quantise_real_values_fx( } #ifndef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_spar_get_uniform_quant_strat() * Loading Loading @@ -160,67 +163,59 @@ void ivas_spar_get_uniform_quant_strat( pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.min = -1.2f; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -644245094/2; pSpar_md_com_cfg->quant_strat[i].PR.max = 1.2f; pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 644245094/2; pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.min = -0.8f; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -429496729/2; pSpar_md_com_cfg->quant_strat[i].C.max = 0.8f; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 429496729/2; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_r.max = 0.8f; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 429496729/2; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.8f; pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -429496729/2; pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.8f; pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 429496729/2; } else { pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.max = 1; pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 536870912/2; pSpar_md_com_cfg->quant_strat[i].PR.min = -1; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -536870912/2; pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.max = 2; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 1073741824/2; pSpar_md_com_cfg->quant_strat[i].C.min = -2; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -1073741824/2; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.max = 1.0f; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 536870912/2; pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.5; pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 268435456/2; pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.5; pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -268435456/2; } } return; } #if 0 void ivas_spar_get_uniform_quant_strat_fx( #else void ivas_spar_get_uniform_quant_strat( ivas_spar_md_com_cfg *pSpar_md_com_cfg, const Word16 table_idx) { Loading @@ -230,56 +225,56 @@ void ivas_spar_get_uniform_quant_strat_fx( pSpar_md_com_cfg->num_quant_strats = MAX_QUANT_STRATS; FOR (i = 0; i < pSpar_md_com_cfg->num_quant_strats; i++) for ( i = 0; i < pSpar_md_com_cfg->num_quant_strats; i++ ) { PQ_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][0]; C_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][1]; Pr_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][2]; Pc_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][3]; IF (active_w) if ( active_w ) { pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -1288490188;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 1288490188;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -322122547;//1.2*Q28 pSpar_md_com_cfg->quant_strat[i].PR.max_fx = 322122547;//1.2*Q28 pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].C.max_fx = 858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].C.min_fx = -214748364; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 214748364;//.8*Q28 pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = 214748364;//.8*Q28 pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 858993459;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -214748364;//.8*Q28 pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 214748364; //.8*Q28 } ELSE else { pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; pSpar_md_com_cfg->quant_strat[i].PR.max_fx = ONE_IN_Q30;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -ONE_IN_Q30;//Q30 pSpar_md_com_cfg->quant_strat[i].PR.max_fx = ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].PR.min_fx = -ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; pSpar_md_com_cfg->quant_strat[i].C.max_fx = 2147483648;//Q30 pSpar_md_com_cfg->quant_strat[i].C.min_fx = -2147483648;//Q30 pSpar_md_com_cfg->quant_strat[i].C.max_fx = 2 *ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].C.min_fx = -2*ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = ONE_IN_Q30;//Q30 pSpar_md_com_cfg->quant_strat[i].P_r.max_fx = ONE_IN_Q28; pSpar_md_com_cfg->quant_strat[i].P_r.min_fx = 0; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = 536870912;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -536870912;//Q30 pSpar_md_com_cfg->quant_strat[i].P_c.max_fx = ONE_IN_Q27; //.5* Q28 pSpar_md_com_cfg->quant_strat[i].P_c.min_fx = -ONE_IN_Q27;//.5* Q28 } } Loading Loading @@ -402,22 +397,11 @@ void ivas_map_prior_coeffs_quant( } #endif void ivas_spar_quant_dtx_init_fx( ivas_spar_md_t *spar_md, Word32 *min_max) { spar_md->min_max_fx[0] = min_max[0]; spar_md->min_max_fx[1] = min_max[1]; return; } /*-----------------------------------------------------------------------------------------* * Function ivas_spar_quant_dtx_init() * * Init SPAR MD with minmax vals *-----------------------------------------------------------------------------------------*/ void ivas_spar_quant_dtx_init( ivas_spar_md_t *spar_md, float *min_max ) Loading @@ -427,7 +411,7 @@ void ivas_spar_quant_dtx_init( return; } #if 0 void ivas_spar_quant_dtx_init_fx( ivas_spar_md_t *spar_md, Word32 *min_max) Loading @@ -437,7 +421,7 @@ void ivas_spar_quant_dtx_init_fx( return; } #endif /*-----------------------------------------------------------------------------------------* * Function ivas_copy_band_coeffs_idx_to_arr() * Loading Loading @@ -496,7 +480,6 @@ void ivas_copy_band_coeffs_idx_to_arr( * * clear band coeffs array in SPAR MD *-----------------------------------------------------------------------------------------*/ void ivas_clear_band_coeffs( ivas_band_coeffs_t *pband_coeffs, const uint16_t num_bands ) Loading @@ -506,22 +489,17 @@ void ivas_clear_band_coeffs( for ( i = 0; i < num_bands; i++ ) { set_zero( (float *) pband_coeffs[i].C_re, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].C_re_fx, 0, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set_zero( (float *) pband_coeffs[i].P_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].P_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); set_zero( (float *) pband_coeffs[i].C_quant_re, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].C_quant_re_fx, 0, ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ) * ( IVAS_SPAR_MAX_DMX_CHS - 1 ) ); set_zero( (float *) pband_coeffs[i].P_quant_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( (Word32 *) pband_coeffs[i].P_quant_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); set_zero( pband_coeffs[i].pred_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( pband_coeffs[i].pred_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); set_zero( pband_coeffs[i].pred_quant_re, ( IVAS_SPAR_MAX_CH - 1 ) ); set32_fx( pband_coeffs[i].pred_quant_re_fx, 0, ( IVAS_SPAR_MAX_CH - 1 ) ); } return; } #if 0 void ivas_clear_band_coeffs_fx( ivas_band_coeffs_t *pband_coeffs, const UWord16 num_bands) Loading @@ -540,7 +518,7 @@ void ivas_clear_band_coeffs_fx( return; } #endif /*-----------------------------------------------------------------------------------------* * Function ivas_clear_band_coeff_idx() * Loading