Loading lib_com/ivas_tools.c +17 −2 Original line number Diff line number Diff line Loading @@ -1892,7 +1892,7 @@ Word16 matrix_diag_product_fx( { Word16 i, j; Word32 *Zp = Z; Word16 valid_data = 0; /* Processing */ IF( EQ_16(transpX, 1 )) /* We use X transpose */ { Loading @@ -1905,6 +1905,10 @@ Word16 matrix_diag_product_fx( FOR( i = 0; i < colsX; ++i ) { *( Zp ) = Mpy_32_32( X[j + i * rowsX], Y[j] ); IF( *( Zp ) ) { valid_data = 1; } Zp++; } } Loading @@ -1921,13 +1925,24 @@ Word16 matrix_diag_product_fx( FOR( i = 0; i < rowsX; ++i ) { *( Zp ) = Mpy_32_32( *( X ), Y[j] ); IF( *( Zp ) ) { valid_data = 1; } Zp++; X++; } } } IF( valid_data ) { *Z_e = add( X_e, Y_e ); } ELSE { *Z_e = 0; } return EXIT_SUCCESS; } Loading lib_dec/ivas_dirac_output_synthesis_cov.c +0 −90 Original line number Diff line number Diff line Loading @@ -2715,23 +2715,7 @@ Word16 computeMixingMatricesISM_fx( { Word16 i, out; Word16 lengthCx, lengthCy; // float *Cy_tilde_p; // float *adj; // float limit; // float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // float svd_s_buffer[MAX_OUTPUT_CHANNELS]; // float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // float Kx[MAX_TRANSPORT_CHANNELS]; // float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; // float Kx_reg_inv[MAX_TRANSPORT_CHANNELS]; // float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; // float G_hat[MAX_OUTPUT_CHANNELS]; // float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; // float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; // float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; Word16 nL, nC; #ifdef IVAS_FLOAT_FIXED Word32 *Cy_tilde_p_fx; Word32 *adj_fx; Loading @@ -2754,12 +2738,7 @@ Word16 computeMixingMatricesISM_fx( Word16 svd_s_buffer_fx_e; Word32 svd_v_buffer_fx[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // Word16 svd_u_buffer_fx_e[MAX_OUTPUT_CHANNELS]; // Word16 svd_v_buffer_fx_e[MAX_OUTPUT_CHANNELS]; Word16 temp_e[MAX_OUTPUT_CHANNELS]; #else float Q_Cx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; #endif push_wmops( "dirac_cov_mix_mat" ); out = EXIT_SUCCESS; Loading Loading @@ -2788,17 +2767,9 @@ Word16 computeMixingMatricesISM_fx( /* Decomposition of Cy = Ky*Ky' */ /* Ky = responses*diag(ener) */ #ifdef IVAS_FLOAT_FIXED matrix_diag_product_fx( responses_fx, responses_e, lengthCy, num_responses, 0, ener_fx, ener_e, num_responses, Ky_fx, &Ky_e ); // me2f_buf(Ky_fx, Ky_e, Ky, lengthCy * num_responses ); #else matrix_diag_product( responses, lengthCy, num_responses, 0, ener, num_responses, Ky ); #endif /* Decomposition of Cx -> Computing Kx */ // v_sqrt( Cx_diag, Kx, lengthCx ); set16_fx( temp_e, Cx_diag_e, lengthCx ); v_sqrt_fx( Cx_diag_fx, temp_e, Kx_fx, lengthCx ); Kx_e = temp_e[0]; Loading Loading @@ -2853,7 +2824,6 @@ Word16 computeMixingMatricesISM_fx( /************************ normalization matrix G hat **********************/ /* Computing Q*Cx*Q' */ #ifdef IVAS_FLOAT_FIXED Word32 Cy_hat_diag_fx[MAX_OUTPUT_CHANNELS]; Word16 Cy_hat_diag_e; Loading Loading @@ -2883,12 +2853,6 @@ Word16 computeMixingMatricesISM_fx( } matrix_product_diag_fx( Q_Cx_fx, Q_Cx_e, lengthCy, lengthCx, 0, Q_fx, Q_e, lengthCy, lengthCx, 1, Cy_hat_diag_fx, &Cy_hat_diag_e ); // me2f_buf( Cy_hat_diag_fx, Cy_hat_diag_e, Cy_hat_diag, lengthCy ); #else matrix_diag_product( Q, lengthCy, lengthCx, 0, Cx_diag, lengthCx, Q_Cx ); matrix_product_diag( Q_Cx, lengthCy, lengthCx, 0, Q, lengthCy, lengthCx, 1, Cy_hat_diag ); #endif /* Computing Cy_hat_diag */ FOR( i = 0; i < lengthCy; ++i ) { Loading Loading @@ -2942,31 +2906,15 @@ Word16 computeMixingMatricesISM_fx( /************************ Formulate optimal P **********************/ /* Computing the input matrix Kx'*Q'*G_hat'*Ky */ #ifdef IVAS_FLOAT_FIXED // f2me_buf( Kx, Kx_fx, &Kx_e, lengthCx ); diag_matrix_product_fx( Kx_fx, Kx_e, lengthCx, Q_fx, Q_e, lengthCy, lengthCx, 1, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); // f2me_buf( G_hat, G_hat_fx, &G_hat_e, lengthCy ); matrix_diag_product_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCx, lengthCy, 0, G_hat_fx, G_hat_e, lengthCy, mat_mult_buffer2_fx, &mat_mult_buffer2_e ); // me2f_buf( mat_mult_buffer2_fx, mat_mult_buffer2_e, mat_mult_buffer2, lengthCx * lengthCy ); #else diag_matrix_product( Kx, lengthCx, Q, lengthCy, lengthCx, 1, mat_mult_buffer1 ); matrix_diag_product( mat_mult_buffer1, lengthCx, lengthCy, 0, G_hat, lengthCy, mat_mult_buffer2 ); #endif matrix_product_mant_exp_fx( mat_mult_buffer2_fx, mat_mult_buffer2_e, lengthCx, lengthCy, 0, Ky_fx, Ky_e, lengthCy, num_responses, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); IF( LT_16( lengthCx, num_responses ) ) { #ifdef IVAS_FLOAT_FIXED // f2me_buf( mat_mult_buffer1, mat_mult_buffer1_fx, &mat_mult_buffer1_fx_e, lengthCx * num_responses ); mat2svdMat_fx( mat_mult_buffer1_fx, svd_in_buffer_fx, lengthCx, num_responses, 1 ); #else mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 1 ); #endif nL = num_responses; nC = lengthCx; Loading @@ -2974,12 +2922,7 @@ Word16 computeMixingMatricesISM_fx( } ELSE { #ifdef IVAS_FLOAT_FIXED // f2me_buf( mat_mult_buffer1, mat_mult_buffer1_fx, &mat_mult_buffer1_fx_e, lengthCx * num_responses ); mat2svdMat_fx( mat_mult_buffer1_fx, svd_in_buffer_fx, lengthCx, num_responses, 0 ); #else mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 0 ); #endif nL = lengthCx; nC = num_responses; Loading @@ -2989,48 +2932,24 @@ Word16 computeMixingMatricesISM_fx( /* Actually Processing P */ /* can be skipped: lambda is always column-truncated identity matrix, so this operation just truncates V to num_input_channel columns */ #ifdef IVAS_FLOAT_FIXED svdMat2mat_fx( svd_v_buffer_fx, mat_mult_buffer1_fx, num_responses, lengthCx ); mat_mult_buffer1_e = 0; svdMat2mat_fx( svd_u_buffer_fx, mat_mult_buffer2_fx, lengthCx, lengthCx ); mat_mult_buffer2_e = 0; // me2f_buf( mat_mult_buffer1_fx, 0, mat_mult_buffer1, num_responses * lengthCx ); // me2f_buf( mat_mult_buffer2_fx, 0, mat_mult_buffer2, lengthCx * lengthCx ); #else svdMat2mat( svd_v_buffer, mat_mult_buffer1, num_responses, lengthCx ); svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); #endif matrix_product_mant_exp_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, num_responses, lengthCx, 0, mat_mult_buffer2_fx, mat_mult_buffer2_e, lengthCx, lengthCx, 1, mat_mult_buffer3_fx, &mat_mult_buffer3_e ); /************************ Formulate M **********************/ matrix_product_mant_exp_fx( Ky_fx, Ky_e, lengthCy, num_responses, 0, mat_mult_buffer3_fx, mat_mult_buffer3_e, num_responses, lengthCx, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); #ifdef IVAS_FLOAT_FIXED // f2me_buf( mat_mult_buffer1, mat_mult_buffer1_fx, &mat_mult_buffer1_e, lengthCx * lengthCy ); // f2me_buf( Kx_reg_inv, Kx_reg_inv_fx, &Kx_reg_inv_e, lengthCx ); matrix_diag_product_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCy, lengthCx, 0, Kx_reg_inv_fx, Kx_reg_inv_e, lengthCx, mixing_matrix_fx, mixing_matrix_e ); // me2f_buf( mixing_matrix_fx, mixing_matrix_e, mixing_matrix, lengthCy * lengthCx ); //to be removed #else matrix_diag_product( mat_mult_buffer1, lengthCy, lengthCx, 0, Kx_reg_inv, lengthCx, mixing_matrix ); #endif /*********************** Energy Compensation ****************/ /* Compute Cy_tilde = M*Cx*M' */ #ifdef IVAS_FLOAT_FIXED // f2me_buf( mixing_matrix, mixing_matrix_fx, &mixing_matrix_e, lengthCx * lengthCy ); // f2me_buf( Cx_diag, Cx_diag_fx, &Cx_diag_e, lengthCx ); matrix_diag_product_fx( mixing_matrix_fx, *mixing_matrix_e, lengthCy, lengthCx, 0, Cx_diag_fx, Cx_diag_e, lengthCx, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); // me2f_buf( mat_mult_buffer1_fx, mat_mult_buffer1_e, mat_mult_buffer1, lengthCx * lengthCy ); #else matrix_diag_product( mixing_matrix, lengthCy, lengthCx, 0, Cx_diag, lengthCx, mat_mult_buffer1 ); #endif matrix_product_mant_exp_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCy, lengthCx, 0, mixing_matrix_fx, *mixing_matrix_e, lengthCy, lengthCx, 1, mat_mult_buffer2_fx, &mat_mult_buffer2_e ); IF( EQ_16( energy_compensation_flag, 1 ) ) Loading Loading @@ -3086,17 +3005,8 @@ Word16 computeMixingMatricesISM_fx( adj_fx[i] = L_shr_r( adj_fx[i], sub( adj_e, temp_e[i] ) ); } #ifdef IVAS_FLOAT_FIXED // f2me_buf( adj, adj_fx, &adj_e, lengthCy ); // f2me_buf( mixing_matrix, mixing_matrix_fx, &mixing_matrix_e, lengthCy * lengthCx ); diag_matrix_product_fx( adj_fx, adj_e, lengthCy, mixing_matrix_fx, *mixing_matrix_e, lengthCy, lengthCx, 0, mat_mult_buffer3_fx, &mat_mult_buffer3_e ); // me2f_buf( mat_mult_buffer3_fx, mat_mult_buffer3_e, mat_mult_buffer3, lengthCx * lengthCy ); #else diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); #endif Copy32( mat_mult_buffer3_fx, mixing_matrix_fx, lengthCy * lengthCx ); *mixing_matrix_e = mat_mult_buffer3_e; } Loading lib_dec/ivas_ism_param_dec.c +8 −35 Original line number Diff line number Diff line Loading @@ -422,11 +422,7 @@ static void ivas_param_ism_compute_mixing_matrix_fx( Word16 *proto_matrix_fx; Word32 response_matrix_fx[PARAM_ISM_MAX_CHAN * MAX_NUM_OBJECTS]; Word16 num_wave; #ifdef IVAS_FLOAT_FIXED // Word32 dir_res_ptr_fx[PARAM_ISM_MAX_CHAN]; // Word32 cy_diag_tmp_fx[PARAM_ISM_MAX_CHAN]; Word16 dir_res_ptr_e, cy_diag_e, cy_diag_e_arr[PARAM_ISM_MAX_CHAN], cy_diag_tmp_e[MAX_NUM_OBJECTS], response_matrix_e, direct_power_e, temp_e[PARAM_ISM_MAX_CHAN]; #endif proto_matrix_fx = hParamIsmDec->hParamIsmRendering->proto_matrix_fx; Loading @@ -445,7 +441,6 @@ static void ivas_param_ism_compute_mixing_matrix_fx( response_matrix_e = 0; /* loop over parameter bands to compute the mixing matrix */ // FILE *fp = fopen("mix_mat.txt", "a"); FOR( band_idx = 0; band_idx < hParamIsmDec->hParamIsm->nbands; band_idx++ ) { brange[0] = hParamIsmDec->hParamIsm->band_grouping[band_idx]; Loading @@ -469,24 +464,7 @@ static void ivas_param_ism_compute_mixing_matrix_fx( dir_res_ptr_e = 1; response_matrix_e = 1; /* we only need the diagonal of Cy*/ #ifdef IVAS_FLOAT_FIXED // f2me_buf( dir_res_ptr, dir_res_ptr_fx, &dir_res_ptr_e, nchan_out_woLFE ); /*Word16 guard_bits = 1; for ( i = 0; i < nchan_out_woLFE; ++i ) { dir_res_ptr_fx[i] = L_shr( dir_res_ptr_fx[i], guard_bits ); } dir_res_ptr_e += guard_bits;*/ matrix_product_diag_fx( dir_res_ptr_fx, dir_res_ptr_e, nchan_out_woLFE, 1, 0, dir_res_ptr_fx, dir_res_ptr_e, 1, nchan_out_woLFE, 0, cy_diag_tmp_fx[w], &cy_diag_tmp_e[w] ); // me2f_buf( cy_diag_tmp_fx, cy_diag_tmp_e, cy_diag_tmp[w], nchan_out_woLFE ); #else matrix_product_diag( dir_res_ptr, nchan_out_woLFE, 1, 0, dir_res_ptr, 1, nchan_out_woLFE, 0, cy_diag_tmp[w] ); #endif } FOR( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) Loading Loading @@ -514,11 +492,7 @@ static void ivas_param_ism_compute_mixing_matrix_fx( } ELSE { #ifndef IVAS_FLOAT_FIXED direct_power[w] = hParamIsmDec->power_ratios[band_idx][0][w] * ref_power[bin_idx]; #else direct_power_fx[w] = Mpy_32_16_1( ref_power_fx[bin_idx], hParamIsmDec->power_ratios_fx[band_idx][0][w] ); #endif } direct_power_e = ref_power_e; IF( NE_32( direct_power_fx[w], 0 ) ) Loading Loading @@ -554,13 +528,8 @@ static void ivas_param_ism_compute_mixing_matrix_fx( /* Compute mixing matrix */ computeMixingMatricesISM_fx( nchan_transport, num_wave, nchan_out_woLFE, response_matrix_fx, response_matrix_e, direct_power_fx, direct_power_e, cx_diag_fx[bin_idx], cx_diag_e, cy_diag_fx, cy_diag_e, proto_matrix_fx, 1, PARAM_MC_REG_SX_FX, PARAM_MC_REG_GHAT_FX, mixing_matrix_fx[bin_idx], &mixing_matrix_e[bin_idx] ); /*for (int ijk = 0; ijk < nchan_transport * nchan_out_woLFE; ijk++) { fprintf(fp, "%f\n", mixing_matrix[bin_idx][ijk]); }*/ } } // fclose(fp); return; } Loading Loading @@ -2323,14 +2292,18 @@ void ivas_param_ism_dec_digest_tc_fx( #endif /* Compute mixing matrix */ Word16 temp_exp[CLDFB_NO_CHANNELS_MAX]; set16_fx(temp_exp, -31, CLDFB_NO_CHANNELS_MAX); ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, temp_exp ); /////////fix2float (to be removed) for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx = temp_exp[0]; FOR ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) { hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx = s_max(hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, temp_exp[i]); } FOR(i = 0; i < CLDFB_NO_CHANNELS_MAX; i++) { me2f_buf( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[i], temp_exp[i], hParamIsmDec->hParamIsmRendering->mixing_matrix_lin[i], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); scale_sig32( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[i], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX, sub( temp_exp[i], hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx ) ); } ////////////////////////////////// pop_wmops(); Loading lib_dec/ivas_jbm_dec.c +0 −2 Original line number Diff line number Diff line Loading @@ -2761,8 +2761,6 @@ ivas_error ivas_jbm_dec_render( /*i/o : st_ivas->cldfbSynDec[ch]->cldfb_state------------------------------------------------------------Q11----*/ /*--------------------------------------------------------------------------------------------------------------*/ f2me_buf( (float *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin, (Word32 *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, CLDFB_NO_CHANNELS_MAX * ( PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ) ); Word16 n_slots_to_alloc = st_ivas->hDecoderConfig->Opt_tsm == 1 ? 32 : 16; Word16 n_chan_transport_t = st_ivas->nchan_transport; Word16 freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; Loading lib_dec/ivas_stat_dec.h +1 −1 Original line number Diff line number Diff line Loading @@ -712,8 +712,8 @@ typedef struct param_ism_rendering #ifndef IVAS_FLOAT_FIXED float *interpolator; float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; #endif float mixing_matrix_lin[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; #endif float *Cldfb_RealBuffer_tc; float *Cldfb_ImagBuffer_tc; Loading Loading
lib_com/ivas_tools.c +17 −2 Original line number Diff line number Diff line Loading @@ -1892,7 +1892,7 @@ Word16 matrix_diag_product_fx( { Word16 i, j; Word32 *Zp = Z; Word16 valid_data = 0; /* Processing */ IF( EQ_16(transpX, 1 )) /* We use X transpose */ { Loading @@ -1905,6 +1905,10 @@ Word16 matrix_diag_product_fx( FOR( i = 0; i < colsX; ++i ) { *( Zp ) = Mpy_32_32( X[j + i * rowsX], Y[j] ); IF( *( Zp ) ) { valid_data = 1; } Zp++; } } Loading @@ -1921,13 +1925,24 @@ Word16 matrix_diag_product_fx( FOR( i = 0; i < rowsX; ++i ) { *( Zp ) = Mpy_32_32( *( X ), Y[j] ); IF( *( Zp ) ) { valid_data = 1; } Zp++; X++; } } } IF( valid_data ) { *Z_e = add( X_e, Y_e ); } ELSE { *Z_e = 0; } return EXIT_SUCCESS; } Loading
lib_dec/ivas_dirac_output_synthesis_cov.c +0 −90 Original line number Diff line number Diff line Loading @@ -2715,23 +2715,7 @@ Word16 computeMixingMatricesISM_fx( { Word16 i, out; Word16 lengthCx, lengthCy; // float *Cy_tilde_p; // float *adj; // float limit; // float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // float svd_s_buffer[MAX_OUTPUT_CHANNELS]; // float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // float Kx[MAX_TRANSPORT_CHANNELS]; // float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; // float Kx_reg_inv[MAX_TRANSPORT_CHANNELS]; // float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; // float G_hat[MAX_OUTPUT_CHANNELS]; // float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; // float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; // float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; Word16 nL, nC; #ifdef IVAS_FLOAT_FIXED Word32 *Cy_tilde_p_fx; Word32 *adj_fx; Loading @@ -2754,12 +2738,7 @@ Word16 computeMixingMatricesISM_fx( Word16 svd_s_buffer_fx_e; Word32 svd_v_buffer_fx[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; // Word16 svd_u_buffer_fx_e[MAX_OUTPUT_CHANNELS]; // Word16 svd_v_buffer_fx_e[MAX_OUTPUT_CHANNELS]; Word16 temp_e[MAX_OUTPUT_CHANNELS]; #else float Q_Cx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; #endif push_wmops( "dirac_cov_mix_mat" ); out = EXIT_SUCCESS; Loading Loading @@ -2788,17 +2767,9 @@ Word16 computeMixingMatricesISM_fx( /* Decomposition of Cy = Ky*Ky' */ /* Ky = responses*diag(ener) */ #ifdef IVAS_FLOAT_FIXED matrix_diag_product_fx( responses_fx, responses_e, lengthCy, num_responses, 0, ener_fx, ener_e, num_responses, Ky_fx, &Ky_e ); // me2f_buf(Ky_fx, Ky_e, Ky, lengthCy * num_responses ); #else matrix_diag_product( responses, lengthCy, num_responses, 0, ener, num_responses, Ky ); #endif /* Decomposition of Cx -> Computing Kx */ // v_sqrt( Cx_diag, Kx, lengthCx ); set16_fx( temp_e, Cx_diag_e, lengthCx ); v_sqrt_fx( Cx_diag_fx, temp_e, Kx_fx, lengthCx ); Kx_e = temp_e[0]; Loading Loading @@ -2853,7 +2824,6 @@ Word16 computeMixingMatricesISM_fx( /************************ normalization matrix G hat **********************/ /* Computing Q*Cx*Q' */ #ifdef IVAS_FLOAT_FIXED Word32 Cy_hat_diag_fx[MAX_OUTPUT_CHANNELS]; Word16 Cy_hat_diag_e; Loading Loading @@ -2883,12 +2853,6 @@ Word16 computeMixingMatricesISM_fx( } matrix_product_diag_fx( Q_Cx_fx, Q_Cx_e, lengthCy, lengthCx, 0, Q_fx, Q_e, lengthCy, lengthCx, 1, Cy_hat_diag_fx, &Cy_hat_diag_e ); // me2f_buf( Cy_hat_diag_fx, Cy_hat_diag_e, Cy_hat_diag, lengthCy ); #else matrix_diag_product( Q, lengthCy, lengthCx, 0, Cx_diag, lengthCx, Q_Cx ); matrix_product_diag( Q_Cx, lengthCy, lengthCx, 0, Q, lengthCy, lengthCx, 1, Cy_hat_diag ); #endif /* Computing Cy_hat_diag */ FOR( i = 0; i < lengthCy; ++i ) { Loading Loading @@ -2942,31 +2906,15 @@ Word16 computeMixingMatricesISM_fx( /************************ Formulate optimal P **********************/ /* Computing the input matrix Kx'*Q'*G_hat'*Ky */ #ifdef IVAS_FLOAT_FIXED // f2me_buf( Kx, Kx_fx, &Kx_e, lengthCx ); diag_matrix_product_fx( Kx_fx, Kx_e, lengthCx, Q_fx, Q_e, lengthCy, lengthCx, 1, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); // f2me_buf( G_hat, G_hat_fx, &G_hat_e, lengthCy ); matrix_diag_product_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCx, lengthCy, 0, G_hat_fx, G_hat_e, lengthCy, mat_mult_buffer2_fx, &mat_mult_buffer2_e ); // me2f_buf( mat_mult_buffer2_fx, mat_mult_buffer2_e, mat_mult_buffer2, lengthCx * lengthCy ); #else diag_matrix_product( Kx, lengthCx, Q, lengthCy, lengthCx, 1, mat_mult_buffer1 ); matrix_diag_product( mat_mult_buffer1, lengthCx, lengthCy, 0, G_hat, lengthCy, mat_mult_buffer2 ); #endif matrix_product_mant_exp_fx( mat_mult_buffer2_fx, mat_mult_buffer2_e, lengthCx, lengthCy, 0, Ky_fx, Ky_e, lengthCy, num_responses, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); IF( LT_16( lengthCx, num_responses ) ) { #ifdef IVAS_FLOAT_FIXED // f2me_buf( mat_mult_buffer1, mat_mult_buffer1_fx, &mat_mult_buffer1_fx_e, lengthCx * num_responses ); mat2svdMat_fx( mat_mult_buffer1_fx, svd_in_buffer_fx, lengthCx, num_responses, 1 ); #else mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 1 ); #endif nL = num_responses; nC = lengthCx; Loading @@ -2974,12 +2922,7 @@ Word16 computeMixingMatricesISM_fx( } ELSE { #ifdef IVAS_FLOAT_FIXED // f2me_buf( mat_mult_buffer1, mat_mult_buffer1_fx, &mat_mult_buffer1_fx_e, lengthCx * num_responses ); mat2svdMat_fx( mat_mult_buffer1_fx, svd_in_buffer_fx, lengthCx, num_responses, 0 ); #else mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 0 ); #endif nL = lengthCx; nC = num_responses; Loading @@ -2989,48 +2932,24 @@ Word16 computeMixingMatricesISM_fx( /* Actually Processing P */ /* can be skipped: lambda is always column-truncated identity matrix, so this operation just truncates V to num_input_channel columns */ #ifdef IVAS_FLOAT_FIXED svdMat2mat_fx( svd_v_buffer_fx, mat_mult_buffer1_fx, num_responses, lengthCx ); mat_mult_buffer1_e = 0; svdMat2mat_fx( svd_u_buffer_fx, mat_mult_buffer2_fx, lengthCx, lengthCx ); mat_mult_buffer2_e = 0; // me2f_buf( mat_mult_buffer1_fx, 0, mat_mult_buffer1, num_responses * lengthCx ); // me2f_buf( mat_mult_buffer2_fx, 0, mat_mult_buffer2, lengthCx * lengthCx ); #else svdMat2mat( svd_v_buffer, mat_mult_buffer1, num_responses, lengthCx ); svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); #endif matrix_product_mant_exp_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, num_responses, lengthCx, 0, mat_mult_buffer2_fx, mat_mult_buffer2_e, lengthCx, lengthCx, 1, mat_mult_buffer3_fx, &mat_mult_buffer3_e ); /************************ Formulate M **********************/ matrix_product_mant_exp_fx( Ky_fx, Ky_e, lengthCy, num_responses, 0, mat_mult_buffer3_fx, mat_mult_buffer3_e, num_responses, lengthCx, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); #ifdef IVAS_FLOAT_FIXED // f2me_buf( mat_mult_buffer1, mat_mult_buffer1_fx, &mat_mult_buffer1_e, lengthCx * lengthCy ); // f2me_buf( Kx_reg_inv, Kx_reg_inv_fx, &Kx_reg_inv_e, lengthCx ); matrix_diag_product_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCy, lengthCx, 0, Kx_reg_inv_fx, Kx_reg_inv_e, lengthCx, mixing_matrix_fx, mixing_matrix_e ); // me2f_buf( mixing_matrix_fx, mixing_matrix_e, mixing_matrix, lengthCy * lengthCx ); //to be removed #else matrix_diag_product( mat_mult_buffer1, lengthCy, lengthCx, 0, Kx_reg_inv, lengthCx, mixing_matrix ); #endif /*********************** Energy Compensation ****************/ /* Compute Cy_tilde = M*Cx*M' */ #ifdef IVAS_FLOAT_FIXED // f2me_buf( mixing_matrix, mixing_matrix_fx, &mixing_matrix_e, lengthCx * lengthCy ); // f2me_buf( Cx_diag, Cx_diag_fx, &Cx_diag_e, lengthCx ); matrix_diag_product_fx( mixing_matrix_fx, *mixing_matrix_e, lengthCy, lengthCx, 0, Cx_diag_fx, Cx_diag_e, lengthCx, mat_mult_buffer1_fx, &mat_mult_buffer1_e ); // me2f_buf( mat_mult_buffer1_fx, mat_mult_buffer1_e, mat_mult_buffer1, lengthCx * lengthCy ); #else matrix_diag_product( mixing_matrix, lengthCy, lengthCx, 0, Cx_diag, lengthCx, mat_mult_buffer1 ); #endif matrix_product_mant_exp_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCy, lengthCx, 0, mixing_matrix_fx, *mixing_matrix_e, lengthCy, lengthCx, 1, mat_mult_buffer2_fx, &mat_mult_buffer2_e ); IF( EQ_16( energy_compensation_flag, 1 ) ) Loading Loading @@ -3086,17 +3005,8 @@ Word16 computeMixingMatricesISM_fx( adj_fx[i] = L_shr_r( adj_fx[i], sub( adj_e, temp_e[i] ) ); } #ifdef IVAS_FLOAT_FIXED // f2me_buf( adj, adj_fx, &adj_e, lengthCy ); // f2me_buf( mixing_matrix, mixing_matrix_fx, &mixing_matrix_e, lengthCy * lengthCx ); diag_matrix_product_fx( adj_fx, adj_e, lengthCy, mixing_matrix_fx, *mixing_matrix_e, lengthCy, lengthCx, 0, mat_mult_buffer3_fx, &mat_mult_buffer3_e ); // me2f_buf( mat_mult_buffer3_fx, mat_mult_buffer3_e, mat_mult_buffer3, lengthCx * lengthCy ); #else diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); #endif Copy32( mat_mult_buffer3_fx, mixing_matrix_fx, lengthCy * lengthCx ); *mixing_matrix_e = mat_mult_buffer3_e; } Loading
lib_dec/ivas_ism_param_dec.c +8 −35 Original line number Diff line number Diff line Loading @@ -422,11 +422,7 @@ static void ivas_param_ism_compute_mixing_matrix_fx( Word16 *proto_matrix_fx; Word32 response_matrix_fx[PARAM_ISM_MAX_CHAN * MAX_NUM_OBJECTS]; Word16 num_wave; #ifdef IVAS_FLOAT_FIXED // Word32 dir_res_ptr_fx[PARAM_ISM_MAX_CHAN]; // Word32 cy_diag_tmp_fx[PARAM_ISM_MAX_CHAN]; Word16 dir_res_ptr_e, cy_diag_e, cy_diag_e_arr[PARAM_ISM_MAX_CHAN], cy_diag_tmp_e[MAX_NUM_OBJECTS], response_matrix_e, direct_power_e, temp_e[PARAM_ISM_MAX_CHAN]; #endif proto_matrix_fx = hParamIsmDec->hParamIsmRendering->proto_matrix_fx; Loading @@ -445,7 +441,6 @@ static void ivas_param_ism_compute_mixing_matrix_fx( response_matrix_e = 0; /* loop over parameter bands to compute the mixing matrix */ // FILE *fp = fopen("mix_mat.txt", "a"); FOR( band_idx = 0; band_idx < hParamIsmDec->hParamIsm->nbands; band_idx++ ) { brange[0] = hParamIsmDec->hParamIsm->band_grouping[band_idx]; Loading @@ -469,24 +464,7 @@ static void ivas_param_ism_compute_mixing_matrix_fx( dir_res_ptr_e = 1; response_matrix_e = 1; /* we only need the diagonal of Cy*/ #ifdef IVAS_FLOAT_FIXED // f2me_buf( dir_res_ptr, dir_res_ptr_fx, &dir_res_ptr_e, nchan_out_woLFE ); /*Word16 guard_bits = 1; for ( i = 0; i < nchan_out_woLFE; ++i ) { dir_res_ptr_fx[i] = L_shr( dir_res_ptr_fx[i], guard_bits ); } dir_res_ptr_e += guard_bits;*/ matrix_product_diag_fx( dir_res_ptr_fx, dir_res_ptr_e, nchan_out_woLFE, 1, 0, dir_res_ptr_fx, dir_res_ptr_e, 1, nchan_out_woLFE, 0, cy_diag_tmp_fx[w], &cy_diag_tmp_e[w] ); // me2f_buf( cy_diag_tmp_fx, cy_diag_tmp_e, cy_diag_tmp[w], nchan_out_woLFE ); #else matrix_product_diag( dir_res_ptr, nchan_out_woLFE, 1, 0, dir_res_ptr, 1, nchan_out_woLFE, 0, cy_diag_tmp[w] ); #endif } FOR( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) Loading Loading @@ -514,11 +492,7 @@ static void ivas_param_ism_compute_mixing_matrix_fx( } ELSE { #ifndef IVAS_FLOAT_FIXED direct_power[w] = hParamIsmDec->power_ratios[band_idx][0][w] * ref_power[bin_idx]; #else direct_power_fx[w] = Mpy_32_16_1( ref_power_fx[bin_idx], hParamIsmDec->power_ratios_fx[band_idx][0][w] ); #endif } direct_power_e = ref_power_e; IF( NE_32( direct_power_fx[w], 0 ) ) Loading Loading @@ -554,13 +528,8 @@ static void ivas_param_ism_compute_mixing_matrix_fx( /* Compute mixing matrix */ computeMixingMatricesISM_fx( nchan_transport, num_wave, nchan_out_woLFE, response_matrix_fx, response_matrix_e, direct_power_fx, direct_power_e, cx_diag_fx[bin_idx], cx_diag_e, cy_diag_fx, cy_diag_e, proto_matrix_fx, 1, PARAM_MC_REG_SX_FX, PARAM_MC_REG_GHAT_FX, mixing_matrix_fx[bin_idx], &mixing_matrix_e[bin_idx] ); /*for (int ijk = 0; ijk < nchan_transport * nchan_out_woLFE; ijk++) { fprintf(fp, "%f\n", mixing_matrix[bin_idx][ijk]); }*/ } } // fclose(fp); return; } Loading Loading @@ -2323,14 +2292,18 @@ void ivas_param_ism_dec_digest_tc_fx( #endif /* Compute mixing matrix */ Word16 temp_exp[CLDFB_NO_CHANNELS_MAX]; set16_fx(temp_exp, -31, CLDFB_NO_CHANNELS_MAX); ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, temp_exp ); /////////fix2float (to be removed) for ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx = temp_exp[0]; FOR ( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) { hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx = s_max(hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, temp_exp[i]); } FOR(i = 0; i < CLDFB_NO_CHANNELS_MAX; i++) { me2f_buf( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[i], temp_exp[i], hParamIsmDec->hParamIsmRendering->mixing_matrix_lin[i], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); scale_sig32( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[i], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX, sub( temp_exp[i], hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx ) ); } ////////////////////////////////// pop_wmops(); Loading
lib_dec/ivas_jbm_dec.c +0 −2 Original line number Diff line number Diff line Loading @@ -2761,8 +2761,6 @@ ivas_error ivas_jbm_dec_render( /*i/o : st_ivas->cldfbSynDec[ch]->cldfb_state------------------------------------------------------------Q11----*/ /*--------------------------------------------------------------------------------------------------------------*/ f2me_buf( (float *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin, (Word32 *) st_ivas->hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, &st_ivas->hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx, CLDFB_NO_CHANNELS_MAX * ( PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ) ); Word16 n_slots_to_alloc = st_ivas->hDecoderConfig->Opt_tsm == 1 ? 32 : 16; Word16 n_chan_transport_t = st_ivas->nchan_transport; Word16 freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; Loading
lib_dec/ivas_stat_dec.h +1 −1 Original line number Diff line number Diff line Loading @@ -712,8 +712,8 @@ typedef struct param_ism_rendering #ifndef IVAS_FLOAT_FIXED float *interpolator; float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; #endif float mixing_matrix_lin[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; #endif float *Cldfb_RealBuffer_tc; float *Cldfb_ImagBuffer_tc; Loading