Commit 57c6a15c authored by Nishant S Kulgod's avatar Nishant S Kulgod
Browse files

commit 2

parent 8d0d9cc2
Loading
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -1318,11 +1318,19 @@ void ivas_ism_dec_digest_tc(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                      */
);

#ifdef IVAS_FLOAT_FIXED
void ivas_param_ism_dec_digest_tc_fx(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder handle                         */
    const UWord16 nCldfbSlots,                                 /* i  : number of CLFBS slots in the transport channels         */
    float *transport_channels_f[]                               /* i  : synthesized core-coder transport channels/DirAC output  */
);
#else
void ivas_param_ism_dec_digest_tc(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder handle                         */
    const uint16_t nCldfbSlots,                                 /* i  : number of CLFBS slots in the transport channels         */
    float *transport_channels_f[]                               /* i  : synthesized core-coder transport channels/DirAC output  */
);
#endif

void ivas_ism_param_dec_tc_gain_ajust(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder handle                         */
@@ -5121,15 +5129,20 @@ Word16 computeMixingMatricesISM_fx(
    const Word16 num_inputs,
    const Word16 num_responses,
    const Word16 num_outputs,
    const float *responses,
    const float *ener,
    const float *Cx_diag,
    const float *Cy_diag,
    const float *Q,
    const Word32 *responses_fx,
    const Word16 responses_e,
    const Word32 *ener_fx,
    const Word16 ener_e,
    const Word32 *Cx_diag_fx,
    const Word16 Cx_diag_e,
    const Word32 *Cy_diag_fx,
    const Word16 Cy_diag_e,
    const Word16 *Q_16fx, //Q15
    const Word16 energy_compensation_flag,
    const float reg_Sx,
    const float reg_ghat,
    float *mixing_matrix);
    const Word32 reg_Sx_fx,
    const Word32 reg_ghat_fx,
    Word32 *mixing_matrix_fx,
    Word16 *mixing_matrix_e);
#else
int16_t computeMixingMatricesISM(
    const int16_t num_inputs,
+39 −39
Original line number Diff line number Diff line
@@ -2703,15 +2703,20 @@ Word16 computeMixingMatricesISM_fx(
    const Word16 num_inputs,
    const Word16 num_responses,
    const Word16 num_outputs,
    const float *responses,
    const float *ener,
    const float *Cx_diag,
    const float *Cy_diag,
    const float *Q,
    const Word32 *responses_fx,
    const Word16 responses_e,
    const Word32 *ener_fx,
    const Word16 ener_e,
    const Word32 *Cx_diag_fx,
    const Word16 Cx_diag_e,
    const Word32 *Cy_diag_fx,
    const Word16 Cy_diag_e,
    const Word16 *Q_16fx, //Q15
    const Word16 energy_compensation_flag,
    const float reg_Sx,
    const float reg_ghat,
    float *mixing_matrix )
    const Word32 reg_Sx_fx,
    const Word32 reg_ghat_fx,
    Word32 *mixing_matrix_fx,
    Word16 *mixing_matrix_e)
{
    Word16 i, out;
    Word16 lengthCx, lengthCy;
@@ -2729,7 +2734,7 @@ Word16 computeMixingMatricesISM_fx(
    //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];
    //float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word16 nL, nC;
#ifdef IVAS_FLOAT_FIXED

@@ -2737,20 +2742,16 @@ Word16 computeMixingMatricesISM_fx(
    Word32 *adj_fx;
    Word32 limit_fx;

    Word32 responses_fx[PARAM_ISM_MAX_CHAN * MAX_NUM_OBJECTS];
    Word32 ener_fx[MAX_NUM_OBJECTS];
    Word32 Ky_fx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word32 Q_fx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word32 Cx_diag_fx[MAX_OUTPUT_CHANNELS];
    Word32 Q_Cx_fx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word32 mat_mult_buffer1_fx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word32 G_hat_fx[MAX_OUTPUT_CHANNELS];
    Word32 mat_mult_buffer2_fx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word32 Kx_reg_inv_fx[MAX_TRANSPORT_CHANNELS];
    Word32 mixing_matrix_fx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word32 mat_mult_buffer3_fx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS];
    Word32 Kx_fx[MAX_TRANSPORT_CHANNELS];
    Word16 responses_e, ener_e, Ky_e, Q_e, Cx_diag_e, Q_Cx_e, mat_mult_buffer1_e, G_hat_e, mat_mult_buffer2_e, Kx_reg_inv_e, mixing_matrix_e, adj_e, mat_mult_buffer3_e, Kx_e;
    Word16 Ky_e, Q_e, Q_Cx_e, mat_mult_buffer1_e, G_hat_e, mat_mult_buffer2_e, Kx_reg_inv_e, adj_e, mat_mult_buffer3_e, Kx_e;

    Word32 svd_in_buffer_fx[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS];
    Word32 svd_u_buffer_fx[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS];
@@ -2770,17 +2771,15 @@ Word16 computeMixingMatricesISM_fx(
    lengthCx = num_inputs;
    lengthCy = num_outputs;
    
    //////////////// to be removed
    Word16 Cy_diag_e;
    Word32 Cy_diag_fx[MAX_OUTPUT_CHANNELS];
    f2me_buf(Cy_diag, Cy_diag_fx, &Cy_diag_e, lengthCy);
    f2me_buf(responses, responses_fx, &responses_e, lengthCy * num_responses);
    f2me_buf(ener, ener_fx, &ener_e, num_responses);

    f2me_buf(Q, Q_fx, &Q_e, lengthCy * lengthCx);
    f2me_buf(Cx_diag, Cx_diag_fx, &Cx_diag_e, lengthCx);
    //////////////////////////////

    for (i = 0; i < lengthCy * lengthCx; i++) {
        if (Q_16fx[i] == MAX_16) {
            Q_fx[i] = MAX_32;
        }
        else {
            Q_fx[i] = L_shl(Q_16fx[i], 16);
        }
    }
    Q_e = 0;
    set32_fx( svd_s_buffer_fx, 0, MAX_OUTPUT_CHANNELS );
    for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ )
    {
@@ -2808,13 +2807,13 @@ Word16 computeMixingMatricesISM_fx(
    for (i = 1; i < lengthCx; i++) {
        Kx_e = s_max(Kx_e,temp_e[i]);
    }
    for (i = 1; i < lengthCx; i++) {
    for (i = 0; i < lengthCx; i++) {
        Kx_fx[i] = L_shr_r( Kx_fx[i], sub( Kx_e, temp_e[i] ) );
    }

    /* Regularization of Sx */
    maximum_32_fx( Kx_fx, lengthCx, &limit_fx );
    limit_fx = Mpy_32_32( limit_fx, floatToFixed( reg_Sx, 31 ) );
    limit_fx = Mpy_32_32( limit_fx, reg_Sx_fx );

    for ( i = 0; i < lengthCx; ++i )
    {
@@ -2843,7 +2842,7 @@ Word16 computeMixingMatricesISM_fx(
    for (i = 1; i < lengthCx; i++) {
        Kx_reg_inv_e = s_max(Kx_reg_inv_e, temp_e[i]);
    }
    for (i = 1; i < lengthCx; i++) {
    for (i = 0; i < lengthCx; i++) {
        Kx_reg_inv_fx[i] = L_shr_r(Kx_reg_inv_fx[i], sub(Kx_reg_inv_e, temp_e[i]));
    }

@@ -2895,7 +2894,7 @@ Word16 computeMixingMatricesISM_fx(
        }
    }

    limit_fx = Mpy_32_32(limit_fx, floatToFixed(reg_ghat, 31));
    limit_fx = Mpy_32_32(limit_fx, reg_ghat_fx);

    /* Computing G_hat */
    for ( i = 0; i < lengthCy; ++i )
@@ -2926,7 +2925,7 @@ Word16 computeMixingMatricesISM_fx(
    for (i = 1; i < lengthCy; i++) {
        G_hat_e = s_max(G_hat_e, temp_e[i]);
    }
    for (i = 1; i < lengthCy; i++) {
    for (i = 0; i < lengthCy; i++) {
        G_hat_fx[i] = L_shr_r(G_hat_fx[i], sub(G_hat_e, temp_e[i]));
    }

@@ -3002,9 +3001,9 @@ Word16 computeMixingMatricesISM_fx(
    //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 );
    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
    //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
@@ -3016,13 +3015,13 @@ Word16 computeMixingMatricesISM_fx(
    //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 );
    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 );
    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 ( energy_compensation_flag == 1 )
    {
@@ -3067,7 +3066,7 @@ Word16 computeMixingMatricesISM_fx(
        for (i = 1; i < lengthCy; i++) {
            adj_e = s_max(adj_e, temp_e[i]);
        }
        for (i = 1; i < lengthCy; i++) {
        for (i = 0; i < lengthCy; i++) {
            adj_fx[i] = L_shr_r(adj_fx[i], sub(adj_e, temp_e[i]));
        }

@@ -3075,14 +3074,15 @@ Word16 computeMixingMatricesISM_fx(
        //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 );
        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 );
        //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

        mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx );
        Copy32( mat_mult_buffer3_fx, mixing_matrix_fx, lengthCy * lengthCx );
        *mixing_matrix_e = mat_mult_buffer3_e;
    }

    pop_wmops();
+291 −84

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -2132,7 +2132,7 @@ void ivas_jbm_dec_feed_tc_to_renderer(
            }
            else if ( st_ivas->renderer_type == RENDERER_PARAM_ISM || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC )
            {
                ivas_param_ism_dec_digest_tc( st_ivas, n_render_timeslots, p_data_f );
                ivas_param_ism_dec_digest_tc_fx( st_ivas, n_render_timeslots, p_data_f );
            }
        }
        else /* ISM_MODE_DISC */