Commit 66f192b5 authored by multrus's avatar multrus
Browse files

[cleanup] accept OPT_SBA_REND_V1_BE

parent 3121c8ac
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -77,7 +77,6 @@
/* Note: each compile switch (FIX_1101_...) is independent from the other ones */
#define OPT_MCT_ENC_V3_BE
#define OPT_BIN_REND_V2_NBE
#define OPT_SBA_REND_V1_BE
#define OPT_HEAD_ROT_REND_V1_BE
#define OPT_SBA_DEC_V2_BE
#define OPT_SBA_ENC_V2_BE
+0 −159
Original line number Diff line number Diff line
@@ -3659,7 +3659,6 @@ static void eig2x2_fx(
    move16();
    move16();

#ifdef OPT_SBA_REND_V1_BE
    /* Eigenvectors */
    FOR( ch = 0; ch < BINAURAL_CHANNELS; ch++ )
    {
@@ -3821,164 +3820,6 @@ static void eig2x2_fx(
            move16();
        }
    }
#else  /* OPT_SBA_REND_V1_BE */
    /* Eigenvectors */
    FOR( ch = 0; ch < BINAURAL_CHANNELS; ch++ )
    {
        IF( LT_16( *q_D, q_e ) )
        {
            tmp1 = L_sub( D_fx[ch], L_shr( e1, sub( q_e, *q_D ) ) );
            tmp2 = L_sub( D_fx[ch], L_shr( e2, sub( q_e, *q_D ) ) );
            q_tmp1 = *q_D;
            move16();
        }
        ELSE
        {
            tmp1 = L_sub( L_shr( D_fx[ch], sub( *q_D, q_e ) ), e1 );
            tmp2 = L_sub( L_shr( D_fx[ch], sub( *q_D, q_e ) ), e2 );
            q_tmp1 = q_e;
            move16();
        }

        IF( GT_32( L_abs( tmp2 ), L_abs( tmp1 ) ) )
        {
            s_fx = tmp2;
            move32();
            exp = sub( norm_l( s_fx ), 1 );
            tmp2 = Mpy_32_32( s_fx, s_fx );
            q_tmp2 = sub( add( q_tmp1, q_tmp1 ), 31 );

            tmp2 = BASOP_Util_Add_Mant32Exp( crossSquare_fx, sub( 31, q_crossSquare ), tmp2, sub( 31, q_tmp2 ), &q_tmp2 );
            q_tmp2 = sub( 31, q_tmp2 );

            tmp3 = BASOP_Util_Add_Mant32Exp( tmp2, sub( 31, q_tmp2 ), epsilon_mant, epsilon_exp, &exp_tmp3 );

            tmp2 = BASOP_Util_Divide3232_Scale_newton( ONE_IN_Q30, tmp3, &exp );
            exp = sub( exp, sub( Q30, sub( 31, exp_tmp3 ) ) );
            normVal_fx = Sqrt32( tmp2, &exp ); // q_tmp2
            q_tmp2 = sub( 31, exp );

            IF( LT_16( q_tmp1, q_c ) )
            {
                c_re = L_shr( c_re, sub( q_c, q_tmp1 ) );
                c_im = L_shr( c_im, sub( q_c, q_tmp1 ) );
                q_c = q_tmp1;
                move16();
            }
            ELSE
            {
                s_fx = L_shr( s_fx, sub( q_tmp1, q_c ) );
                q_tmp1 = q_c;
                move16();
            }

            Ure_fx[0][ch] = Mpy_32_32( s_fx, normVal_fx );
            move32();
            Ure_fx[1][ch] = Mpy_32_32( c_re, normVal_fx );
            move32();
            Uim_fx[1][ch] = Mpy_32_32( c_im, normVal_fx );
            move32();
            q_U_1 = sub( add( q_tmp1, q_tmp2 ), 31 );

            IF( q_U_2 != 0 )
            {
                IF( LT_16( q_U_1, q_U_2 ) )
                {
                    Ure_fx[1][ch - 1] = L_shr( Ure_fx[1][ch - 1], sub( q_U_2, q_U_1 ) );
                    Ure_fx[0][ch - 1] = L_shr( Ure_fx[0][ch - 1], sub( q_U_2, q_U_1 ) );
                    Uim_fx[0][ch - 1] = L_shr( Uim_fx[0][ch - 1], sub( q_U_2, q_U_1 ) );
                    q_U_2 = q_U_1;
                    move32();
                    move32();
                    move32();
                    move16();
                }
                ELSE IF( GT_16( q_U_1, q_U_2 ) )
                {
                    Ure_fx[1][ch] = L_shr( Ure_fx[1][ch], sub( q_U_1, q_U_2 ) );
                    Ure_fx[0][ch] = L_shr( Ure_fx[0][ch], sub( q_U_1, q_U_2 ) );
                    Uim_fx[1][ch] = L_shr( Uim_fx[1][ch], sub( q_U_1, q_U_2 ) );
                    q_U_1 = q_U_2;
                    move32();
                    move32();
                    move32();
                    move16();
                }
            }
            q_U_2 = q_U_1;
            move16();
        }
        ELSE
        {
            s_fx = tmp1;
            move32();

            exp = sub( norm_l( s_fx ), 1 );
            tmp2 = Mpy_32_32( s_fx, s_fx );
            q_tmp2 = sub( add( q_tmp1, q_tmp1 ), 31 );

            tmp2 = BASOP_Util_Add_Mant32Exp( crossSquare_fx, sub( 31, q_crossSquare ), tmp2, sub( 31, q_tmp2 ), &q_tmp2 );
            q_tmp2 = sub( 31, q_tmp2 );

            tmp3 = BASOP_Util_Add_Mant32Exp( tmp2, sub( 31, q_tmp2 ), epsilon_mant, epsilon_exp, &exp_tmp3 );

            tmp2 = BASOP_Util_Divide3232_Scale_newton( ONE_IN_Q30, tmp3, &exp );
            exp = sub( exp, sub( Q30, sub( 31, exp_tmp3 ) ) );
            normVal_fx = Sqrt32( tmp2, &exp ); // q_tmp2
            q_tmp2 = sub( 31, exp );

            IF( LT_16( q_tmp1, q_c ) )
            {
                c_re = L_shr( c_re, sub( q_c, q_tmp1 ) );
                c_im = L_shr( c_im, sub( q_c, q_tmp1 ) );
                q_c = q_tmp1;
                move16();
            }
            ELSE
            {
                s_fx = L_shr( s_fx, sub( q_tmp1, q_c ) );
                q_tmp1 = q_c;
                move16();
            }

            Ure_fx[1][ch] = Mpy_32_32( s_fx, normVal_fx );
            move32();
            Ure_fx[0][ch] = Mpy_32_32( c_re, normVal_fx );
            move32();
            Uim_fx[0][ch] = Mpy_32_32( -c_im, normVal_fx );
            move32();
            q_U_2 = sub( add( q_tmp1, q_tmp2 ), 31 );

            IF( q_U_1 != 0 )
            {
                IF( LT_16( q_U_1, q_U_2 ) )
                {
                    Ure_fx[1][ch] = L_shr( Ure_fx[1][ch], sub( q_U_2, q_U_1 ) );
                    Ure_fx[0][ch] = L_shr( Ure_fx[0][ch], sub( q_U_2, q_U_1 ) );
                    Uim_fx[0][ch] = L_shr( Uim_fx[0][ch], sub( q_U_2, q_U_1 ) );
                    q_U_2 = q_U_1;
                    move32();
                    move32();
                    move32();
                    move16();
                }
                ELSE IF( GT_16( q_U_1, q_U_2 ) )
                {
                    Ure_fx[1][ch - 1] = L_shr( Ure_fx[1][ch - 1], sub( q_U_1, q_U_2 ) );
                    Ure_fx[0][ch - 1] = L_shr( Ure_fx[0][ch - 1], sub( q_U_1, q_U_2 ) );
                    Uim_fx[1][ch - 1] = L_shr( Uim_fx[1][ch - 1], sub( q_U_1, q_U_2 ) );
                    q_U_1 = q_U_2;
                    move32();
                    move32();
                    move32();
                    move16();
                }
            }
            q_U_1 = q_U_2;
            move16();
        }
    }
#endif /* OPT_SBA_REND_V1_BE */

    if ( q_U_1 != 0 )
    {
+0 −54
Original line number Diff line number Diff line
@@ -2561,10 +2561,8 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
    move16();
    move16();

#ifdef OPT_SBA_REND_V1_BE
    Word32 cmp = W_shl_sat_l( DIRAC_GAIN_LIMIT_Q26, sub( h_dirac_output_synthesis_state->gains_dir_prev_q, 26 ) );
    Word32 cmp2 = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) );
#endif /* OPT_SBA_REND_V1_BE */

    FOR( k = 0; k < nchan_out_woLFE; k++ )
    {
@@ -2605,19 +2603,11 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
                *( p_gains_dir ) = 0;
                move32();
            }
#ifdef OPT_SBA_REND_V1_BE
            ELSE IF( GT_32( *( p_gains_dir ), cmp ) )
            {
                *( p_gains_dir ) = cmp; /*26 + h_dirac_output_synthesis_state->gains_dir_prev_q + 1 + 5 - 32 -> h_dirac_output_synthesis_state->gains_dir_prev_q*/
                move32();
            }
#else  /* OPT_SBA_REND_V1_BE */
            ELSE IF( GT_32( *( p_gains_dir ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ) ) )
            {
                *( p_gains_dir ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ); /*26 + h_dirac_output_synthesis_state->gains_dir_prev_q + 1 + 5 - 32 -> h_dirac_output_synthesis_state->gains_dir_prev_q*/
                move32();
            }
#endif /* OPT_SBA_REND_V1_BE */

            IF( *( p_cy_cross_dir_smooth_prev++ ) < 0 )
            {
@@ -2650,19 +2640,11 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
                *( p_gains_diff ) = 0;
                move32();
            }
#ifdef OPT_SBA_REND_V1_BE
            ELSE IF( GT_32( *( p_gains_diff ), cmp2 ) ) /*h_dirac_output_synthesis_state->gains_diff_prev_q*/
            {
                *( p_gains_diff ) = cmp2; /*h_dirac_output_synthesis_state->gains_diff_prev_q*/
                move32();
            }
#else  /* OPT_SBA_REND_V1_BE */
            ELSE IF( GT_32( *( p_gains_diff ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ) ) ) /*h_dirac_output_synthesis_state->gains_diff_prev_q*/
            {
                *( p_gains_diff ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ); /*h_dirac_output_synthesis_state->gains_diff_prev_q*/
                move32();
            }
#endif /* OPT_SBA_REND_V1_BE */
            p_gains_diff++;
        }

@@ -2673,25 +2655,15 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
            g1 = alpha[l]; // Q31
            move32();
            g2 = L_sub( ONE_IN_Q31, g1 ); // Q31
#ifdef OPT_SBA_REND_V1_BE
            W_temp = W_mac_32_32( W_mult_32_32( g1, ( *( p_cy_auto_dir_smooth++ ) ) ),
                                  g2, ( *( p_cy_auto_dir_smooth_prev ) ) ); /*32+q_cy_auto_dir_smooth_prev_local*/
#else                                                                       /* OPT_SBA_REND_V1_BE */
            W_temp = W_add( W_mult_32_32( g1, ( *( p_cy_auto_dir_smooth++ ) ) ),
                            W_mult_32_32( g2, ( *( p_cy_auto_dir_smooth_prev ) ) ) ); /*32+q_cy_auto_dir_smooth_prev_local*/
#endif                                                                      /* OPT_SBA_REND_V1_BE */
            q_tmp = W_norm( W_temp );
            L_tmp = W_extract_h( W_shl( W_temp, q_tmp ) );              // q_cy_auto_dir_smooth_prev_local + q_tmp
            *( p_cy_auto_dir_smooth_prev++ ) = L_shr_r( L_tmp, q_tmp ); // q_cy_auto_dir_smooth_prev_local

            move32();
#ifdef OPT_SBA_REND_V1_BE
            *( p_cy_cross_dir_smooth_prev ) = Madd_32_32( Mpy_32_32( g1, ( *( p_cy_cross_dir_smooth ) ) ),
                                                          g2, ( *( p_cy_cross_dir_smooth_prev ) ) ); // (Q31, q_cy_cross_dir_smooth_prev) -> q_cy_cross_dir_smooth_prev
#else                                                                                                /* OPT_SBA_REND_V1_BE */
            *( p_cy_cross_dir_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_cross_dir_smooth ) ) ),
                                                     Mpy_32_32( g2, ( *( p_cy_cross_dir_smooth_prev ) ) ) ); // (Q31, q_cy_cross_dir_smooth_prev) -> q_cy_cross_dir_smooth_prev
#endif                                                                                               /* OPT_SBA_REND_V1_BE */
            move32();
            test();
            if ( *( p_cy_cross_dir_smooth_prev ) == 0 && ( *( p_cy_cross_dir_smooth ) != 0 ) )
@@ -2717,19 +2689,11 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
                *( p_gains_dir ) = 0;
                move32();
            }
#ifdef OPT_SBA_REND_V1_BE
            ELSE IF( GT_32( *( p_gains_dir ), cmp ) ) /*gains_dir_prev_q*/
            {
                *( p_gains_dir ) = cmp; /*gains_dir_prev_q*/
                move32();
            }
#else  /* OPT_SBA_REND_V1_BE */
            ELSE IF( GT_32( *( p_gains_dir ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ) ) ) /*gains_dir_prev_q*/
            {
                *( p_gains_dir ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ); /*gains_dir_prev_q*/
                move32();
            }
#endif /* OPT_SBA_REND_V1_BE */

            IF( *( p_cy_cross_dir_smooth_prev++ ) < 0 )
            {
@@ -2810,11 +2774,7 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
                             shl( i_mult( proto_direct_index[k], num_freq_bands ), Q1 );
            FOR( l = 0; l < num_freq_bands; l++ )
            {
#ifdef OPT_SBA_REND_V1_BE
                g = Madd_32_32( Mpy_32_32( g1, *( p_gain_1++ ) ), g2, *( p_gain_2++ ) ); // (Q31, gains_dir_prev_q) -> gains_dir_prev_q
#else                                                                                    /* OPT_SBA_REND_V1_BE */
                g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) );                   // (Q31, gains_dir_prev_q) -> gains_dir_prev_q
#endif                                                                                   /* OPT_SBA_REND_V1_BE */

                Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ); // (gains_dir_prev_q, q_proto_direct_buffer) -> gains_dir_prev_q + q_proto_direct_buffer
                move64();
@@ -2836,12 +2796,7 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
        {
            FOR( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ )
            {
#ifdef OPT_SBA_REND_V1_BE
                g = Madd_32_32( Mpy_32_32( g1, *( p_gain_1++ ) ), g2, *( p_gain_2++ ) ); // (Q31, gains_diff_prev_q) -> gains_diff_prev_q
#else                                                                                    /* OPT_SBA_REND_V1_BE */
                g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) );                   // (Q31, gains_diff_prev_q) -> gains_diff_prev_q

#endif /* OPT_SBA_REND_V1_BE */
                Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_RealBuffer64_fx[k][buf_idx][l],
                                                              W_shr( W_mult0_32_32( g, ( *( p_power_smooth_diff++ ) ) ), negate( q_align ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer
                move64();
@@ -2890,9 +2845,7 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
        }
    }
    q_align = W_norm( W_temp );
#ifdef OPT_SBA_REND_V1_BE
    Word16 shift = sub( q_align, 32 );
#endif /* OPT_SBA_REND_V1_BE */

    FOR( buf_idx = 0; buf_idx < nbslots; ++buf_idx )
    {
@@ -2900,17 +2853,10 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx(
        {
            FOR( l = 0; l < num_freq_bands; l++ )
            {
#ifdef OPT_SBA_REND_V1_BE
                RealBuffer[k][buf_idx][l] = W_shl_sat_l( Cldfb_RealBuffer64_fx[k][buf_idx][l], shift ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/
                move32();
                ImagBuffer[k][buf_idx][l] = W_shl_sat_l( Cldfb_ImagBuffer64_fx[k][buf_idx][l], shift ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/
                move32();
#else  /* OPT_SBA_REND_V1_BE */
                RealBuffer[k][buf_idx][l] = W_extract_h( W_shl( Cldfb_RealBuffer64_fx[k][buf_idx][l], q_align ) ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/
                move32();
                ImagBuffer[k][buf_idx][l] = W_extract_h( W_shl( Cldfb_ImagBuffer64_fx[k][buf_idx][l], q_align ) ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/
                move32();
#endif /* OPT_SBA_REND_V1_BE */
            }
        }
    }
+0 −17
Original line number Diff line number Diff line
@@ -2755,26 +2755,9 @@ void protoSignalComputation4_fx(

            sq_tmp_fx = Madd_32_32( Mpy_32_32( proto_frame_f_fx[idx], proto_frame_f_fx[idx] ), proto_frame_f_fx[idx + 1], proto_frame_f_fx[idx + 1] ); // 2*(proto_frame_f_q)-31
            sq_tmp_q = sub( add( *proto_frame_f_q, *proto_frame_f_q ), 31 );
#ifdef OPT_SBA_REND_V1_BE
            proto_power_smooth_fx_q = s_min( *proto_power_smooth_q, sq_tmp_q );

            proto_power_smooth_fx[l + ( k * num_freq_bands )] = L_add( L_shr( proto_power_smooth_fx[l + ( k * num_freq_bands )], sub( *proto_power_smooth_q, proto_power_smooth_fx_q ) ), L_shr( sq_tmp_fx, sub( sq_tmp_q, proto_power_smooth_fx_q ) ) ); // proto_power_smooth_fx_q
#else                                                                                                                                                                                                                                                     /* OPT_SBA_REND_V1_BE */
            IF( LT_16( *proto_power_smooth_q, sq_tmp_q ) )
            {
                proto_power_smooth_fx[l + ( k * num_freq_bands )] = L_add( proto_power_smooth_fx[l + ( k * num_freq_bands )], L_shr( sq_tmp_fx, sub( sq_tmp_q, *proto_power_smooth_q ) ) ); // proto_power_smooth_q
                move32();
                proto_power_smooth_fx_q = *proto_power_smooth_q;
                move16();
            }
            ELSE
            {
                proto_power_smooth_fx[l + ( k * num_freq_bands )] = L_add( L_shr( proto_power_smooth_fx[l + ( k * num_freq_bands )], sub( *proto_power_smooth_q, sq_tmp_q ) ), sq_tmp_fx ); // sq_tmp_q
                move32();
                proto_power_smooth_fx_q = sq_tmp_q;
                move16();
            }
#endif                                                                                                                                                                                                                                                    /* OPT_SBA_REND_V1_BE */
            p_proto_buffer_fx[idx] = proto_frame_f_fx[idx];                                                                                                                                                                                               // proto_frame_f_q
            move32();
            p_proto_buffer_fx[idx + 1] = proto_frame_f_fx[idx + 1]; // proto_frame_f_q
+0 −4
Original line number Diff line number Diff line
@@ -2492,11 +2492,7 @@ static Word16 in_tri_fx(
    v_sub_fixed_no_hdrm( C, A, tmpDot2, 2 ); // tmpDot2 q22

    /* Verification of the non-colinearity : Q22 * Q22 = Q13 */
#ifdef OPT_SBA_REND_V1_BE
    invFactor = Msub_32_32( Mpy_32_32( tmpDot1[0], tmpDot2[1] ), tmpDot1[1], tmpDot2[0] ); /*q22+q22-q31->q13*/
#else                                                                                      /* OPT_SBA_REND_V1_BE */
    invFactor = L_sub( Mpy_32_32( tmpDot1[0], tmpDot2[1] ), Mpy_32_32( tmpDot1[1], tmpDot2[0] ) ); /*q22+q22-q31->q13*/
#endif                                                                                     /* OPT_SBA_REND_V1_BE */

    IF( invFactor == 0 )
    {
Loading