Commit 0b86839a authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch 'high_mld_fixes_enc_1' into 'main'

Fix for high MLD cases for OMASA format, bug fixes related to scaling

See merge request !918
parents eb54b19f 6dd08702
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -743,7 +743,7 @@ ivas_error ivas_core_enc(
        }

        Word16 q_new_swb_speech_buffer = getScaleFactor16( new_swb_speech_buffer_fx_16, input_frame );
        Scale_sig( new_swb_speech_buffer_fx_16, q_new_swb_speech_buffer, input_frame ); // Q0->q_new_swb_speech_buffer
        Scale_sig( new_swb_speech_buffer_fx_16, input_frame, q_new_swb_speech_buffer ); // Q0->q_new_swb_speech_buffer

        /* SWB TBE encoder */
        test();
+6 −2
Original line number Diff line number Diff line
@@ -207,12 +207,16 @@ ivas_error ivas_cpe_enc_fx(
    }

    Copy32( data_fx_ch0, sts[0]->input32_fx, input_frame ); // Q(q_data_fx)
    sts[0]->q_inp32 = q_data_fx;
    move16();
    Copy_Scale_sig32_16( sts[0]->input32_fx, sts[0]->input_fx, input_frame, sub( Q16, q_data_fx ) ); // Q(q_data_fx) -> Q0
    sts[0]->q_inp = 0;
    move16();
    IF( data_fx_ch1 != NULL ) /*this may happen for cases with odd number of channels*/
    {
        Copy32( data_fx_ch1, sts[1]->input32_fx, input_frame ); // Q(q_data_fx)
        sts[1]->q_inp32 = q_data_fx;
        move16();
        Copy_Scale_sig32_16( sts[1]->input32_fx, sts[1]->input_fx, input_frame, sub( Q16, q_data_fx ) ); // Q(q_data_fx) -> Q0
        sts[1]->q_inp = 0;
        move16();
+3 −0
Original line number Diff line number Diff line
@@ -814,6 +814,9 @@ void ivas_masa_estimate_energy_fx(
            {
                q_buf = q_data;
                move16();
                scale_sig32( hMasa->data.cldfbAnaEnc[i]->cldfb_state_fx, hMasa->data.cldfbAnaEnc[i]->cldfb_state_length, sub( q_buf, hMasa->data.cldfbAnaEnc[i]->Q_cldfb_state ) );
                hMasa->data.cldfbAnaEnc[i]->Q_cldfb_state = q_buf;
                move16();
                cldfbAnalysis_ts_fx_fixed_q( &( data_fx[i][l_ts * ts] ), Input_RealBuffer[i], Input_ImagBuffer[i], l_ts, hMasa->data.cldfbAnaEnc[i], &q_buf ); // (q_data - 5)  for Input_RealBuffer[i], Input_ImagBuffer[i]
            }

+3 −0
Original line number Diff line number Diff line
@@ -1115,6 +1115,9 @@ static void ivas_omasa_param_est_enc_fx(
            {
                q = q_data;
                move16();
                scale_sig32( hOMasa->cldfbAnaEnc[i]->cldfb_state_fx, hOMasa->cldfbAnaEnc[i]->cldfb_state_length, sub( q, hOMasa->cldfbAnaEnc[i]->Q_cldfb_state ) );
                hOMasa->cldfbAnaEnc[i]->Q_cldfb_state = q;
                move16();
                cldfbAnalysis_ts_fx_fixed_q( &( data[i][l_ts * ts] ), Chnl_RealBuffer_fx[i], Chnl_ImagBuffer_fx[i], l_ts, hOMasa->cldfbAnaEnc[i], &q ); /*q_data-5*/
                norm_buff = s_min( norm_buff, L_norm_arr( Chnl_RealBuffer_fx[i], 60 ) );
                norm_buff = s_min( norm_buff, L_norm_arr( Chnl_ImagBuffer_fx[i], 60 ) );
+8 −8
Original line number Diff line number Diff line
@@ -6570,26 +6570,26 @@ void ivas_omasa_encode_masa_to_total_fx(
    SWITCH( len_stream )
    {
        case 4:
            matrix_product_q30_fx( dct4_fx, nblocks, nblocks, 0, data, 1, nblocks, 1, dct_data );
            matrix_product_fx( dct4_fx, nblocks, nblocks, 0, data, 1, nblocks, 1, dct_data );
            n_streams = 1;
            len_stream = 4;
            move16();
            BREAK;
        case 5:
            matrix_product_q30_fx( dct5_fx, nbands, nbands, 0, data, 1, nbands, 1, dct_data );
            matrix_product_fx( dct5_fx, nbands, nbands, 0, data, 1, nbands, 1, dct_data );
            n_streams = 1;
            len_stream = nbands;
            move16();
            move16();
            BREAK;
        case 8:
            matrix_product_q30_fx( dct8_fx, nbands, nbands, 0, data, 1, nbands, 1, dct_data );
            matrix_product_fx( dct8_fx, nbands, nbands, 0, data, 1, nbands, 1, dct_data );
            n_streams = 1;
            len_stream = nbands;
            move16();
            BREAK;
        case 12:
            matrix_product_q30_fx( dct12_fx, nbands, nbands, 0, data, 1, nbands, 1, dct_data );
            matrix_product_fx( dct12_fx, nbands, nbands, 0, data, 1, nbands, 1, dct_data );
            n_streams = 1;
            len_stream = nbands;
            move16();
@@ -6597,7 +6597,7 @@ void ivas_omasa_encode_masa_to_total_fx(
            BREAK;
        case 20:
            matrix_product_fx( dct5_fx, nbands, nbands, 0, data, nblocks, nbands, 1, dct_data_tmp );
            matrix_product_q30_fx( dct_data_tmp, nbands, nblocks, 0, dct4_fx, nblocks, nblocks, 1, dct_data );
            matrix_product_fx( dct_data_tmp, nbands, nblocks, 0, dct4_fx, nblocks, nblocks, 1, dct_data );
            n_streams = 1;
            len_stream = imult1616( nbands, nblocks );
            move16();
@@ -6605,7 +6605,7 @@ void ivas_omasa_encode_masa_to_total_fx(
            BREAK;
        case 32:
            matrix_product_fx( dct8_fx, nbands, nbands, 0, data, nblocks, nbands, 1, dct_data_tmp );
            matrix_product_q30_fx( dct_data_tmp, nbands, nblocks, 0, dct4_fx, nblocks, nblocks, 1, dct_data );
            matrix_product_fx( dct_data_tmp, nbands, nblocks, 0, dct4_fx, nblocks, nblocks, 1, dct_data );
            n_streams = nblocks;
            len_stream = nbands;
            move16();
@@ -6621,7 +6621,7 @@ void ivas_omasa_encode_masa_to_total_fx(
        j = imult1616( k, len_stream );
        /* quantize with fixed common step */
        L_tmp = BASOP_Util_Divide3232_Scale_cadence( dct_data[j], step, &tmp_e );
        tmp_e = add( tmp_e, Q1 );
        tmp_e = add( tmp_e, Q6 );
        q_idx[j] = rint_new_fx( L_shr( L_tmp, sub( 15, tmp_e ) ) /* Q16 */ ); // Q0
        move16();

@@ -6644,7 +6644,7 @@ void ivas_omasa_encode_masa_to_total_fx(
            FOR( i = 1; i < len_stream; i++ )
            {
                L_tmp = BASOP_Util_Divide3232_Scale_cadence( dct_data[j + i], step, &tmp_e );
                tmp_e = add( tmp_e, Q1 );
                tmp_e = add( tmp_e, Q6 );
                q_idx[j + i] = rint_new_fx( L_shr( L_tmp, sub( 15, tmp_e ) ) );
                move16();
                q_dct_data[j + i] = Mpy_32_16_1( step, shl( q_idx[j + i], 9 ) /* Q9 */ ); // Q25