Commit 7045019f authored by multrus's avatar multrus
Browse files

[cleanup] accept OPTIMIZE_FFT_STACK

parent 4d927001
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -714,7 +714,6 @@ Word16 getScaleFactor16( /* o: measured headroom in range [
    return i;
}

#ifdef OPTIMIZE_FFT_STACK
/* o: measured headroom in range [0..31], 0 if all x[i] == 0 */
Word16 getScaleFactor32_cmplx(
    cmplx *x,          /* i: array containing 32-bit data */
@@ -772,7 +771,6 @@ Word16 getScaleFactor32_cmplx(

    return s_min( i_re, i_im );
}
#endif


/********************************************************************/
+0 −2
Original line number Diff line number Diff line
@@ -221,13 +221,11 @@ Word16 getScaleFactor16(
    const Word16 *x,      /* i: array containing 16-bit data */
    const Word16 len_x ); /* i: length of the array to scan  */

#ifdef OPTIMIZE_FFT_STACK
/* o: measured headroom in range [0..31], 0 if all x[i] == 0 */
Word16 getScaleFactor32_cmplx(
    cmplx *x,          /* i: array containing 32-bit data */
    const Word16 len_x /* i: length of the array to scan  */
);
#endif

/********************************************************************/
/*!
+0 −265
Original line number Diff line number Diff line
@@ -55,12 +55,7 @@ static Word16 get_edxt_factor(
    }
    ELSE IF( EQ_16( length, 40 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        factor = 7327; /*0.223 in Q15*/
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 960 ) )
    {
@@ -79,48 +74,23 @@ static Word16 get_edxt_factor(
    }
    ELSE IF( EQ_16( length, 120 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        factor = 4230; /*0.1290 in Q15*/
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 1200 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        factor = 1338; /*0.040 in Q15*/
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 800 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        factor = 1638; /*0.05 in Q15*/
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 400 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        factor = 2317; /*0.070 in Q15*/
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 200 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        factor = 3277; /*0.1 in Q15*/
        move16();
#endif
    }

    return factor; /*Q15*/
@@ -219,11 +189,7 @@ void edct_fx(
    Word32 re;
    Word32 im;
    const Word16 *edct_table; /*Q16 */
#ifdef OPTIMIZE_FFT_STACK
    cmplx spec[L_FRAME_PLUS / 2];
#else
    Word32 complex_buf[2 * ( L_FRAME48k / 2 + 240 )];
#endif
    Word32 L_tmp;
    Word16 tmp;
    Word16 len1;
@@ -234,19 +200,11 @@ void edct_fx(
    FOR( i = 0; i < len1; i++ )
    {
        L_tmp = Mult_32_16( x[2 * i], edct_table[i] ); /*Q(q+1) */
#ifdef OPTIMIZE_FFT_STACK
        spec[i].re = Madd_32_16( L_tmp, x[( length - ( 1 + ( i * 2 ) ) )], edct_table[( len1 - ( 1 + i ) )] ); /*Q(q+1) */
#else
        complex_buf[2 * i] = Madd_32_16( L_tmp, x[( length - ( 1 + ( i * 2 ) ) )], edct_table[( len1 - ( 1 + i ) )] ); /*Q(q+1) */
#endif
        move32();

        L_tmp = Mult_32_16( x[( length - ( 1 + ( i * 2 ) ) )], edct_table[i] ); /*Q(q+1) */
#ifdef OPTIMIZE_FFT_STACK
        spec[i].im = Msub_32_16( L_tmp, x[( i * 2 )], edct_table[( len1 - ( 1 + i ) )] ); /*Q(q+1) */
#else
        complex_buf[( ( i * 2 ) + 1 )] = Msub_32_16( L_tmp, x[( i * 2 )], edct_table[( len1 - ( 1 + i ) )] ); /*Q(q+1) */
#endif
        move32();
    }

@@ -256,11 +214,7 @@ void edct_fx(
#endif
        *q = sub( 15, *q );
        move16();
#ifdef OPTIMIZE_FFT_STACK
        BASOP_cfft( spec, len1, q, y );
#else
    BASOP_cfft( (cmplx *) complex_buf, len1, q, y );
#endif

        tmp = div_s( 1, length );                                                     /*Q15 */
        tmp = round_fx( L_shl( L_mult( tmp, 19302 /*0.75f * EVS_PI in Q13*/ ), 2 ) ); /*Q15 */
@@ -284,13 +238,8 @@ void edct_fx(

    FOR( i = 0; i < len1; i++ )
    {
#ifdef OPTIMIZE_FFT_STACK
        re = Msub_32_16( spec[i].re, spec[i].im, tmp ); /*Q(q+1) */
        im = Madd_32_16( spec[i].im, spec[i].re, tmp ); /*Q(q+1) */
#else
        re = Msub_32_16( complex_buf[2 * i], complex_buf[( ( i * 2 ) + 1 )], tmp ); /*Q(q+1) */
        im = Madd_32_16( complex_buf[( ( i * 2 ) + 1 )], complex_buf[2 * i], tmp ); /*Q(q+1) */
#endif
        y[2 * i] = L_add( Mult_32_16( re, edct_table[i] ), Mult_32_16( im, edct_table[( len1 - ( 1 + i ) )] ) ); /*Q(q+2)*/
        move32();
        y[( length - ( 1 + ( i * 2 ) ) )] = L_sub( Mult_32_16( re, edct_table[( len1 - ( 1 + i ) )] ), Mult_32_16( im, edct_table[i] ) ); /*Q(q+2)*/
@@ -399,11 +348,7 @@ void edst_fx(
    Word32 re;
    Word32 im;
    const Word16 *edct_table; /*Q16 */
#ifdef OPTIMIZE_FFT_STACK
    cmplx complex_buf[L_FRAME_PLUS / 2];
#else
    Word32 complex_buf[2 * ( L_FRAME48k / 2 + 240 )];
#endif
    Word32 L_tmp;
    Word16 tmp;
    Word16 len1;
@@ -414,41 +359,24 @@ void edst_fx(
    FOR( i = 0; i < len1; i++ )
    {
        L_tmp = Mult_32_16( x[( length - ( 1 + ( i * 2 ) ) )], edct_table[i] ); /*Qq+1*/
#ifdef OPTIMIZE_FFT_STACK
        complex_buf[i].re = Madd_32_16( L_tmp, x[2 * i], edct_table[( len1 - ( 1 + i ) )] ); /*Qq+1*/
#else
        complex_buf[2 * i] = Madd_32_16( L_tmp, x[2 * i], edct_table[( len1 - ( 1 + i ) )] ); /*Qq+1*/
#endif
        move32();

        L_tmp = Mult_32_16( x[2 * i], edct_table[i] ); /*Qq+1*/
#ifdef OPTIMIZE_FFT_STACK
        complex_buf[i].im = Msub_32_16( L_tmp, x[( length - ( 1 + ( i * 2 ) ) )], edct_table[( len1 - ( 1 + i ) )] ); /*Qq+1*/
#else
        complex_buf[( ( i * 2 ) + 1 )] = Msub_32_16( L_tmp, x[( length - ( 1 + ( i * 2 ) ) )], edct_table[( len1 - ( 1 + i ) )] ); /*Qq+1*/
#endif
        move32();
    }

    *q = sub( 15, *q );
    move16();
#ifdef OPTIMIZE_FFT_STACK
    BASOP_cfft( complex_buf, len1, q, y );
#else
    BASOP_cfft( (cmplx *) complex_buf, len1, q, y );
#endif

    tmp = div_s( 1, length );                                                     /*Q15 */
    tmp = round_fx( L_shl( L_mult( tmp, 19302 /*0.75f * EVS_PI in Q13*/ ), 2 ) ); /*Q15 */
    FOR( i = 0; i < len1; i++ )
    {
#ifdef OPTIMIZE_FFT_STACK
        re = Msub_32_16( complex_buf[i].re, complex_buf[i].im, tmp ); /*Qq+1*/
        im = Madd_32_16( complex_buf[i].im, complex_buf[i].re, tmp ); /*Qq+1*/
#else
        re = Msub_32_16( complex_buf[2 * i], complex_buf[( ( i * 2 ) + 1 )], tmp ); /*Qq+1*/
        im = Madd_32_16( complex_buf[( ( i * 2 ) + 1 )], complex_buf[2 * i], tmp ); /*Qq+1*/
#endif
        y[2 * i] = L_add( Mult_32_16( re, edct_table[i] ), Mult_32_16( im, edct_table[( len1 - ( 1 + i ) )] ) ); /*Qq+2*/
        move32();
        y[( length - ( 1 + ( i * 2 ) ) )] = L_sub( Mult_32_16( im, edct_table[i] ), Mult_32_16( re, edct_table[( len1 - ( 1 + i ) )] ) ); /*Qq+2*/
@@ -496,16 +424,8 @@ void edct_16fx(
    Word16 re[L_FRAME48k / 2];
    Word16 im[L_FRAME48k / 2];
    const Word16 *edct_table = NULL;
#ifndef OPTIMIZE_FFT_STACK
    Word16 re2[L_FRAME48k / 2];
    Word16 im2[L_FRAME48k / 2];
#endif
    Word32 L_tmp, Lacc, Lmax;
#ifdef OPTIMIZE_FFT_STACK
    Word16 tmp, tmp_re, fact;
#else
    Word16 tmp, fact;
#endif
    Word16 Q_edct;
    Word16 Len2, i2;
    const Word16 *px, *pt;
@@ -569,46 +489,26 @@ void edct_16fx(

        L_tmp = L_mult( x[i2], edct_table[i] ); /*Q(Qx+16) */
        Lacc = L_mac_sat( L_tmp, *px, *pt );    /*Q(Qx+16) */
#ifdef OPTIMIZE_FFT_STACK
        re[i] = round_fx_sat( L_shl_sat( Lacc, Q_edct ) ); /* Q(Qx+Q_edct) */
#else
        re2[i] = round_fx_sat( L_shl_sat( Lacc, Q_edct ) ); /* Q(Qx+Q_edct) */
#endif
        move16();
        L_tmp = L_mult( *px, edct_table[i] );  /*Q(Qx+16) */
        Lacc = L_msu_sat( L_tmp, x[i2], *pt ); /*Q(Qx+16) */
#ifdef OPTIMIZE_FFT_STACK
        im[i] = round_fx_sat( L_shl_sat( Lacc, Q_edct ) ); /* Q(Qx+Q_edct) */
#else
        im2[i] = round_fx_sat( L_shl_sat( Lacc, Q_edct ) ); /* Q(Qx+Q_edct) */
#endif
        move16();
        px -= 2;
        pt--;
    }
    IF( EQ_16( length, L_FRAME32k ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        DoRTFT320_16fx( re, im );
#else
        DoRTFT320_16fx( re2, im2 );
#endif
    }
    ELSE IF( EQ_16( length, L_FRAME ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        DoRTFT128_16fx( re, im );
#else
        DoRTFT128_16fx( re2, im2 );
#endif
    }
    ELSE IF( EQ_16( length, L_FRAME16k ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        DoRTFT160_16fx( re, im );
#else
        DoRTFT160_16fx( re2, im2 );
#endif
    }
    ELSE
    {
@@ -618,7 +518,6 @@ void edct_16fx(
    fact = round_fx( L_shl( L_tmp, 2 ) ); /*Q15 */
    FOR( i = 0; i < shr( length, 1 ); i++ )
    {
#ifdef OPTIMIZE_FFT_STACK
        tmp = mult_r( im[i], fact );    /*Q(Qx+Q_edct) */
        tmp_re = sub_sat( re[i], tmp ); /*Q(Qx+Q_edct) */
        move16();
@@ -629,15 +528,6 @@ void edct_16fx(

        re[i] = tmp_re;
        move16();
#else
        tmp = mult_r( im2[i], fact );   /*Q(Qx+Q_edct) */
        re[i] = sub_sat( re2[i], tmp ); /*Q(Qx+Q_edct) */
        move16();

        tmp = mult_r( re2[i], fact );   /*Q(Qx+Q_edct) */
        im[i] = add_sat( im2[i], tmp ); /*Q(Qx+Q_edct) */
        move16();
#endif
    }

    /* Post-rotate and obtain the output data */
@@ -799,14 +689,7 @@ void edxt_fx(
    }
    ELSE IF( EQ_16( length, 40 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        cosPtr = cos_scale_tbl_640; /*Q15*/
        sinPtr = sin_scale_tbl_640; /*Q15*/
        n = 16;
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 960 ) )
    {
@@ -831,58 +714,23 @@ void edxt_fx(
    }
    ELSE IF( EQ_16( length, 120 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        cosPtr = cos_scale_tbl_960; /*Q15*/
        sinPtr = sin_scale_tbl_960; /*Q15*/
        n = 8;
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 1200 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        cosPtr = cos_scale_tbl_1200; /*Q15*/
        sinPtr = sin_scale_tbl_1200; /*Q15*/
        n = 1;
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 800 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        cosPtr = cos_scale_tbl_800; /*Q15*/
        sinPtr = sin_scale_tbl_800; /*Q15*/
        n = 1;
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 400 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        cosPtr = cos_scale_tbl_800; /*Q15*/
        sinPtr = sin_scale_tbl_800; /*Q15*/
        n = 2;
        move16();
#endif
    }
    ELSE IF( EQ_16( length, 200 ) )
    {
#ifdef OPTIMIZE_FFT_STACK
        assert( 0 );
#else
        cosPtr = cos_scale_tbl_800; /*Q15*/
        sinPtr = sin_scale_tbl_800; /*Q15*/
        n = 4;
        move16();
#endif
    }

    test();
@@ -890,26 +738,15 @@ void edxt_fx(
    {
        const Word16 Nm1 = sub( length, 1 );
        const Word16 xSign = sub( imult1616( 2, shr( kernelType, 1 ) ), 1 ); /*Q0*/
#ifdef OPTIMIZE_FFT_STACK
        cmplx spec[L_FRAME_MAX];
#else
        Word32 re[L_FRAME_PLUS];
        Word32 im[L_FRAME_PLUS];
#endif

        IF( !synthesis )
        {
            FOR( k = ( Nm1 / 2 ); k >= 0; k-- ) /* pre-modulation of audio input */
            {
#ifdef OPTIMIZE_FFT_STACK
                spec[k].re = x[2 * k];                                                            /*Qx*/
                spec[( Nm1 - k )].re = Mpy_32_16_1( x[( ( k * 2 ) + 1 )], shl_sat( xSign, 15 ) ); /*Qx*/
                spec[k].im = spec[( Nm1 - k )].im = 0;
#else
                re[k] = x[2 * k];                                                            /*Qx*/
                re[( Nm1 - k )] = Mpy_32_16_1( x[( ( k * 2 ) + 1 )], shl_sat( xSign, 15 ) ); /*Qx*/
                im[k] = im[( Nm1 - k )] = 0;
#endif
                move32();
                move32();
                move32();
@@ -918,46 +755,24 @@ void edxt_fx(
            IF( EQ_16( length, 512 ) )
            {
                /* Scaling down re and im buffers to avoid overflow in DoRTFTn_fx if the minimum headroom is less than 4 bits */
#ifdef OPTIMIZE_FFT_STACK
                hdrm = L_norm_arr_cmplx( spec, 512 );
#else
                hdrm = s_min( L_norm_arr( re, 512 ), L_norm_arr( im, 512 ) );
#endif
                IF( LT_16( hdrm, 4 ) )
                {
                    tmp = sub( hdrm, 4 );
#ifdef OPTIMIZE_FFT_STACK
                    scale_sig32_cmplx( spec, 512, tmp );
#else
                    scale_sig32( re, 512, tmp );
                    scale_sig32( im, 512, tmp );
#endif
                }

#ifdef OPTIMIZE_FFT_STACK
                DoRTFTn_fx( NULL, NULL, spec, 512 );
#else
                DoRTFTn_fx( re, im, 512 );
#endif

                IF( LT_16( hdrm, 4 ) )
                {
                    tmp = negate( tmp );
#ifdef OPTIMIZE_FFT_STACK
                    scale_sig32_cmplx( spec, 512, tmp );
#else
                    scale_sig32( re, 512, tmp );
                    scale_sig32( im, 512, tmp );
#endif
                }
            }
            ELSE /* fft() doesn't support 512 */
            {
#ifdef OPTIMIZE_FFT_STACK
                fft_fx( spec, length );
#else
                fft_fx( re, im, length, 1 );
#endif
            }

            IF( shr( kernelType, 1 ) )
@@ -969,21 +784,12 @@ void edxt_fx(
                    const Word16 wRe = cosPtr[( k * n )]; /*Q15*/
                    const Word16 wIm = sinPtr[( k * n )]; /*Q15*/

#ifdef OPTIMIZE_FFT_STACK
                    y[k] /*pt 1*/ = L_add( Mpy_32_16_1( spec[k].re, wRe ), Mpy_32_16_1( spec[k].im, wIm ) );     /*Qx*/
                    y[( length - k )] = L_sub( Mpy_32_16_1( spec[k].re, wIm ), Mpy_32_16_1( spec[k].im, wRe ) ); /*Qx*/
#else
                    y[k] /*pt 1*/ = L_add( Mpy_32_16_1( re[k], wRe ), Mpy_32_16_1( im[k], wIm ) );     /*Qx*/
                    y[( length - k )] = L_sub( Mpy_32_16_1( re[k], wIm ), Mpy_32_16_1( im[k], wRe ) ); /*Qx*/
#endif
                    move32();
                    move32();
                }
#ifdef OPTIMIZE_FFT_STACK
                y[( length / 2 )] = Mpy_32_16_1( spec[( length / 2 )].re, INV_SQRT_2_Q15 ); /*Qx*/
#else
                y[( length / 2 )] = Mpy_32_16_1( re[( length / 2 )], INV_SQRT_2_Q15 ); /*Qx*/
#endif
                move32();
            }
            ELSE /* forw. DST-II */
@@ -995,29 +801,16 @@ void edxt_fx(
                    const Word16 wRe = cosPtr[( k * n )]; /*Q15*/
                    const Word16 wIm = sinPtr[( k * n )]; /*Q15*/

#ifdef OPTIMIZE_FFT_STACK
                    y[( Nm1 - k )] = L_add( Mpy_32_16_1( spec[k].re, wRe ), Mpy_32_16_1( spec[k].im, wIm ) ); /*Qx*/
                    y[k - 1] = L_sub( Mpy_32_16_1( spec[k].re, wIm ), Mpy_32_16_1( spec[k].im, wRe ) );       /*Qx*/
#else
                    y[( Nm1 - k )] = L_add( Mpy_32_16_1( re[k], wRe ), Mpy_32_16_1( im[k], wIm ) ); /*Qx*/
                    y[k - 1] = L_sub( Mpy_32_16_1( re[k], wIm ), Mpy_32_16_1( im[k], wRe ) );       /*Qx*/
#endif
                    move32();
                    move32();
                }
#ifdef OPTIMIZE_FFT_STACK
                y[( Nm1 / 2 )] = Mpy_32_16_1( spec[( length / 2 )].re, INV_SQRT_2_Q15 ); /*Qx*/
#else
                y[( Nm1 / 2 )] = Mpy_32_16_1( re[( length / 2 )], INV_SQRT_2_Q15 ); /*Qx*/
#endif
                move32();
            }

#ifdef OPTIMIZE_FFT_STACK
            y[( Nm1 - ( Nm1 * ( kernelType / 2 ) ) )] = L_shr( spec[0].re, 1 ); /*Qx*/
#else
            y[( Nm1 - ( Nm1 * ( kernelType / 2 ) ) )] = L_shr( re[0], 1 ); /*Qx*/
#endif
            move32();
        }
        ELSE /* inverse II = III */
@@ -1031,21 +824,12 @@ void edxt_fx(
                    const Word16 wRe = shr( cosPtr[imult1616( k, n )], 1 );
                    const Word16 wIm = shr( sinPtr[imult1616( k, n )], 1 );

#ifdef OPTIMIZE_FFT_STACK
                    spec[k].re = L_add( Mpy_32_16_1( x[k], wRe ), Mpy_32_16_1( x[( length - k )], wIm ) ); /*Qx*/
                    spec[k].im = L_sub( Mpy_32_16_1( x[( length - k )], wRe ), Mpy_32_16_1( x[k], wIm ) ); /*Qx*/
#else
                    re[k] = L_add( Mpy_32_16_1( x[k], wRe ), Mpy_32_16_1( x[( length - k )], wIm ) ); /*Qx*/
                    im[k] = L_sub( Mpy_32_16_1( x[( length - k )], wRe ), Mpy_32_16_1( x[k], wIm ) ); /*Qx*/
#endif
                    move32();
                    move32();
                }
#ifdef OPTIMIZE_FFT_STACK
                spec[( length / 2 )].re = Mpy_32_16_1( x[( length / 2 )], INV_SQRT_2_Q15 ); /*Qx*/
#else
                re[( length / 2 )] = Mpy_32_16_1( x[( length / 2 )], INV_SQRT_2_Q15 ); /*Qx*/
#endif
                move32();
            }
            ELSE /* DST type III */
@@ -1057,42 +841,23 @@ void edxt_fx(
                    const Word16 wRe = shr( cosPtr[( k * n )], 1 ); /*Q15*/
                    const Word16 wIm = shr( sinPtr[( k * n )], 1 ); /*Q15*/

#ifdef OPTIMIZE_FFT_STACK
                    spec[k].re = L_add( Mpy_32_16_1( x[( Nm1 - k )], wRe ), Mpy_32_16_1( x[( k - 1 )], wIm ) ); /*Qx*/
                    spec[k].im = L_sub( Mpy_32_16_1( x[( k - 1 )], wRe ), Mpy_32_16_1( x[( Nm1 - k )], wIm ) ); /*Qx*/
#else
                    re[k] = L_add( Mpy_32_16_1( x[( Nm1 - k )], wRe ), Mpy_32_16_1( x[( k - 1 )], wIm ) ); /*Qx*/
                    im[k] = L_sub( Mpy_32_16_1( x[( k - 1 )], wRe ), Mpy_32_16_1( x[( Nm1 - k )], wIm ) ); /*Qx*/
#endif
                    move32();
                    move32();
                }
#ifdef OPTIMIZE_FFT_STACK
                spec[( length / 2 )].re = Mpy_32_16_1( x[( Nm1 / 2 )], INV_SQRT_2_Q15 ); /*Qx*/
#else
                re[( length / 2 )] = Mpy_32_16_1( x[( Nm1 / 2 )], INV_SQRT_2_Q15 ); /*Qx*/
#endif
                move32();
            }

#ifdef OPTIMIZE_FFT_STACK
            spec[0].re = x[( Nm1 - ( Nm1 * ( kernelType / 2 ) ) )]; /*Qx*/
            spec[0].im = spec[( length / 2 )].im = 0;
#else
            re[0] = x[( Nm1 - ( Nm1 * ( kernelType / 2 ) ) )]; /*Qx*/
            im[0] = im[( length / 2 )] = 0;
#endif
            move32();
            move32();
            FOR( k = ( Nm1 / 2 ); k > 0; k-- )
            {
#ifdef OPTIMIZE_FFT_STACK
                spec[( length - k )].re = spec[k].re;             /*Qx*/
                spec[( length - k )].im = L_negate( spec[k].im ); /*Qx*/
#else
                re[( length - k )] = re[k];             /*Qx*/
                im[( length - k )] = L_negate( im[k] ); /*Qx*/
#endif
                move32();
                move32();
            }
@@ -1100,63 +865,33 @@ void edxt_fx(
            IF( EQ_16( length, 512 ) )
            {
                /* Scaling down re and im buffers to avoid overflow in DoRTFTn_fx if the minimum headroom is less than 4 bits */
#ifdef OPTIMIZE_FFT_STACK
                hdrm = L_norm_arr_cmplx( spec, 512 );
#else
                hdrm = s_min( L_norm_arr( re, 512 ), L_norm_arr( im, 512 ) );
#endif
                IF( LT_16( hdrm, 4 ) )
                {
                    tmp = sub( hdrm, 4 );
#ifdef OPTIMIZE_FFT_STACK
                    scale_sig32_cmplx( spec, 512, tmp );
#else
                    scale_sig32( re, 512, tmp );
                    scale_sig32( im, 512, tmp );
#endif
                }

#ifdef OPTIMIZE_FFT_STACK
                DoRTFTn_fx( NULL, NULL, spec, 512 );
#else
                DoRTFTn_fx( re, im, 512 );
#endif

                IF( LT_16( hdrm, 4 ) )
                {
                    tmp = negate( tmp );
#ifdef OPTIMIZE_FFT_STACK
                    scale_sig32_cmplx( spec, 512, tmp );
#else
                    scale_sig32( re, 512, tmp );
                    scale_sig32( im, 512, tmp );
#endif
                }
            }
            ELSE /* fft() doesn't support 512 */
            {
#ifdef OPTIMIZE_FFT_STACK
                fft_fx( spec, length );
#else
                fft_fx( re, im, length, 1 );
#endif
            }

            FOR( k = ( Nm1 / 2 ); k >= 0; k-- ) /* post-modulation of FFT output */
            {
#ifdef OPTIMIZE_FFT_STACK
                y[2 * k] = spec[k].re; /*Qx*/
#else
                y[2 * k] = re[k]; /*Qx*/
#endif
                move32();
                IF( xSign != 0 )
                {
#ifdef OPTIMIZE_FFT_STACK
                    y[( ( k * 2 ) + 1 )] = Mpy_32_16_1( spec[( Nm1 - k )].re, shl_sat( xSign, 15 ) ); /*Qx*/
#else
                    y[( ( k * 2 ) + 1 )] = Mpy_32_16_1( re[( Nm1 - k )], shl_sat( xSign, 15 ) ); /*Qx*/
#endif
                }
                ELSE
                {
+0 −10
Original line number Diff line number Diff line
@@ -52,16 +52,13 @@ static void cftmdl_fx( Word16 n, Word16 l, Word32 *a, const Word16 *w );
void DoRTFTn_fx(
    Word32 *x, /* i/o : real part of input and output data Q(x)      */
    Word32 *y, /* i/o : imaginary part of input and output data Q(x) */
#ifdef OPTIMIZE_FFT_STACK
    cmplx *spec, /* i/o : complex input and output data                */
#endif
    const Word16 n /* i : size of the FFT up to 1024                     */
)
{
    Word16 i;
    Word32 z[2048], *pt;

#ifdef OPTIMIZE_FFT_STACK
    IF( spec != NULL )
    {
        pt = z;
@@ -75,7 +72,6 @@ void DoRTFTn_fx(
    }
    ELSE
    {
#endif
        pt = z;
        FOR( i = 0; i < n; i++ )
        {
@@ -84,9 +80,7 @@ void DoRTFTn_fx(
            *pt++ = y[i];
            move16();
        }
#ifdef OPTIMIZE_FFT_STACK
    }
#endif

    IF( EQ_16( n, 16 ) )
    {
@@ -117,7 +111,6 @@ void DoRTFTn_fx(
        assert( 0 );
    }

#ifdef OPTIMIZE_FFT_STACK
    IF( spec != NULL )
    {
        spec[0].re = z[0];
@@ -135,7 +128,6 @@ void DoRTFTn_fx(
    }
    ELSE
    {
#endif
        x[0] = z[0];
        move16();
        y[0] = z[1];
@@ -148,9 +140,7 @@ void DoRTFTn_fx(
            y[i] = *pt++;
            move16();
        }
#ifdef OPTIMIZE_FFT_STACK
    }
#endif

    return;
}
+0 −1
Original line number Diff line number Diff line
@@ -92,7 +92,6 @@
#define NONBE_FIX_ISSUE_2206_AVOID_OVERFLOW_MSVQ_Interpol_Tran_fx /* FhG: Fix saturation crash in MSVQ_Interpol_Tran_fx() */
#define FIX_2452_HQ_CORE_PEAQ_AVR_RATIO_HARM            /* Eri: Basop issue 2453: Fix alignment of peak_avrg_ratio_fx */
#define FIX_FLOAT_1539_G192_FORMAT_SWITCH               /* VA/Nokia: reintroduce format switching for g192 bitstreams */
#define OPTIMIZE_FFT_STACK                              /* VA: removal of intermediate FFT buffers */
#define HARMONIZE_DCT                                   /* VA: removal of duplicated DCT functions */
#define FIX_2489_HARMONIZE_FdCng_encodeSID              /* FhG: harmonize FdCng_encodeSID_fx() and FdCng_encodeSID_ivas_fx()  */
#define FIX_1527_CMR_BITRATE_IDX                        /* Fix for incorrect bitrate idx packed in rtp CMR E-byte */
Loading