Commit 2f7d0035 authored by Nishant S Kulgod's avatar Nishant S Kulgod
Browse files

commit 2

parent b88e93c6
Loading
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -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 */
    {
@@ -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++;
            }
        }
@@ -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;
}
+0 −90
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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];
@@ -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;

@@ -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 )
    {
@@ -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;
@@ -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;
@@ -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 ) )
@@ -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;
    }
+8 −35
Original line number Diff line number Diff line
@@ -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;

@@ -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];
@@ -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++ )
@@ -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 ) )
@@ -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;
}
@@ -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();

+0 −2
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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;