Commit 991957bd authored by Sandesh Venkatesh's avatar Sandesh Venkatesh Committed by Fabian Bauer
Browse files

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

parent 8d4b036b
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();
+4 −0
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