Commit 63bd2387 authored by multrus's avatar multrus
Browse files

[cleanup] accept HARMONIZE_DCT

parent 7045019f
Loading
Loading
Loading
Loading
+0 −86
Original line number Diff line number Diff line
@@ -177,12 +177,8 @@ void edct_fx(
    const Word32 *x, /* i  : input signal        Qq         */
    Word32 *y,       /* o  : output transform    Qq         */
    Word16 length,   /* i  : length                         Q0*/
#ifdef HARMONIZE_DCT
    Word16 *q,                /* i  : Q value of input signal        */
    const Word16 element_mode /* i  : element mode                   */
#else
    Word16 *q /* i  : Q value of input signal        */
#endif
)
{
    Word16 i;
@@ -208,17 +204,14 @@ void edct_fx(
        move32();
    }

#ifdef HARMONIZE_DCT
    IF( element_mode == EVS_MONO )
    {
#endif
        *q = sub( 15, *q );
        move16();
        BASOP_cfft( spec, len1, q, y );

        tmp = div_s( 1, length );                                                     /*Q15 */
        tmp = round_fx( L_shl( L_mult( tmp, 19302 /*0.75f * EVS_PI in Q13*/ ), 2 ) ); /*Q15 */
#ifdef HARMONIZE_DCT
    }
    ELSE
    {
@@ -234,7 +227,6 @@ void edct_fx(
        tmp = div_s( 4, length );                                         /*Q17 */
        tmp = round_fx( L_mult( tmp, 19302 /*0.75f * EVS_PI in Q13*/ ) ); /*Q15 */
    }
#endif

    FOR( i = 0; i < len1; i++ )
    {
@@ -248,81 +240,15 @@ void edct_fx(

    *q = sub( 15 + 2, *q );
    move16();
#ifdef HARMONIZE_DCT
    IF( element_mode != EVS_MONO )
    {
        *q = add( *q, Q16 );
        move16();
    }
#endif

    return;
}

#ifndef HARMONIZE_DCT
void edct_ivas_fx(
    const Word32 *x, /* i  : input signal        Qq         */
    Word32 *y,       /* o  : output transform    Qq         */
    Word16 length,   /* i  : length                         Q0*/
    Word16 *q        /* i  : Q value of input signal        */
)
{
    Word16 i;
    const Word16 *edct_table; /*Q16 */
    Word32 re[L_FRAME_PLUS / 2];
    Word32 im[L_FRAME_PLUS / 2];
    Word32 L_tmp;
    Word16 tmp;
    Word16 len1;

    edct_table = get_edct_table( length, q ); /*q*/
    len1 = shr( length, 1 );                  /*Q0*/
                                              /* Twiddling and Pre-rotate */
    FOR( i = 0; i < len1; i++ )
    {
        L_tmp = Mult_32_16( x[2 * i], edct_table[i] );                                                    /*Q(q+1) */
        re[i] = Madd_32_16( L_tmp, x[( length - ( 1 + ( i * 2 ) ) )], edct_table[( len1 - ( 1 + i ) )] ); /*Q(q+1) */
        move32();

        L_tmp = Mult_32_16( x[( length - ( 1 + ( i * 2 ) ) )], edct_table[i] );      /*Q(q+1) */
        im[i] = Msub_32_16( L_tmp, x[( i * 2 )], edct_table[( len1 - ( 1 + i ) )] ); /*Q(q+1) */
        move32();
    }

    *q = sub( 31, *q );
    move16();
    tmp = sub( s_min( getScaleFactor32( re, len1 ), getScaleFactor32( im, len1 ) ), find_guarded_bits_fx( len1 ) );
    scale_sig32( re, len1, tmp );
    scale_sig32( im, len1, tmp );

    fft_fx( re, im, len1, 1 );
    *q = sub( *q, tmp );
    move16();

    tmp = div_s( 4, length );                                         /*Q17 */
    tmp = round_fx( L_mult( tmp, 19302 /*0.75f * EVS_PI in Q13*/ ) ); /*Q15 */
    FOR( i = 0; i < len1; i++ )
    {
        L_tmp = Msub_32_16( re[i], im[i], tmp );
        im[i] = Madd_32_16( im[i], re[i], tmp ); /*Q(q+1) */
        re[i] = L_tmp;                           /*Q(q+1) */
        move32();
        move32();
    }
    FOR( i = 0; i < len1; i++ )
    {
        y[2 * i] = L_add( Mult_32_16( re[i], edct_table[i] ), Mult_32_16( im[i], edct_table[( len1 - ( 1 + i ) )] ) ); /*Q(q+2)*/
        move32();
        y[( length - ( 1 + ( i * 2 ) ) )] = L_sub( Mult_32_16( re[i], edct_table[( len1 - ( 1 + i ) )] ), Mult_32_16( im[i], edct_table[i] ) ); /*Q(q+2)*/
        move32();
    } /*Q(q-2) */

    *q = sub( 31 + 2, *q );
    move16();

    return;
}
#endif

/*-------------------------------------------------------------------------*
 * FUNCTION : edst_fx()
@@ -414,10 +340,6 @@ void edct_16fx(
    Word16 *y,       /* o  : output transform    Qx  */
    Word16 length,   /* i  : length  */
    Word16 bh        /* bit-headroom */
#ifndef HARMONIZE_DCT
    ,
    const Word16 element_mode
#endif
)
{
    Word16 i;
@@ -430,10 +352,6 @@ void edct_16fx(
    Word16 Len2, i2;
    const Word16 *px, *pt;
    Word16 *py;
#ifndef HARMONIZE_DCT
    (void) element_mode;
    /*COMPLETE: some eDCT sub function are missing */
#endif

    IF( EQ_16( length, L_FRAME32k ) )
    {
@@ -580,11 +498,7 @@ void iedct_short_fx(
    seg_len_div4 = shr( segment_length, 2 ); /*Q0*/
    seg_len_3mul_div4 = add( seg_len_div2, seg_len_div4 );

#ifdef HARMONIZE_DCT
    edct_fx( in, alias, seg_len_div2, Q, EVS_MONO );
#else
    edct_fx( in, alias, seg_len_div2, Q );
#endif
    FOR( i = 0; i < seg_len_div2; i++ )
    {
        IF( alias[i] != 0 )
+0 −402
Original line number Diff line number Diff line
@@ -109,13 +109,6 @@ static void fft5_8( Word16 n1, Word32 *zRe, Word32 *zIm, const Word16 *Idx );
static void fft4_5( Word32 *x, Word32 *y, const Word16 *Idx );
static void fft5_4( Word16 n1, Word32 *zRe, Word32 *zIm, const Word16 *Idx );

#ifndef HARMONIZE_DCT
void DoRTFTn_fx_ivas(
    Word32 *x,     /* i/o: real part of input and output data       */
    Word32 *y,     /* i/o: imaginary part of input and output data  */
    const Word16 n /* i  : size of the FFT n=(2^k) up to 1024       */
);
#endif
/*-----------------------------------------------------------------*
 * fft15_shift2()
 * 15-point FFT with 2-point circular shift
@@ -2440,303 +2433,6 @@ static void cftmdl(
    return;
}

#ifndef HARMONIZE_DCT
static void cftbsub(
    Word16 n,       // Q0
    Word32 *a,      // Qx
    const Word16 *w /* i  : cos/sin table  Q15               */
)
{
    Word16 j, j1, j2, j3, l;
    Word32 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;

    l = 2;
    move16();
    IF( GT_16( n, 8 ) )
    {
        cft1st( n, a, w );
        l = 8;
        move16();

        WHILE( ( ( l << 2 ) < n ) )
        {
            cftmdl( n, l, a, w );
            l = shl( l, 2 );
        }
    }

    IF( EQ_16( shl( l, 2 ), n ) )
    {
        FOR( j = 0; j < l; j += 2 )
        {
            j1 = add( j, l );
            j2 = add( j1, l );
            j3 = add( j2, l );
            x0r = L_add( a[j], a[j1] );                     // Qx
            x0i = L_negate( L_add( a[j + 1], a[j1 + 1] ) ); // Qx
            x1r = L_sub( a[j], a[j1] );                     // Qx
            x1i = L_sub( a[j1 + 1], a[j + 1] );             // Qx
            x2r = L_add( a[j2], a[j3] );                    // Qx
            x2i = L_add( a[j2 + 1], a[j3 + 1] );            // Qx
            x3r = L_sub( a[j2], a[j3] );                    // Qx
            x3i = L_sub( a[j2 + 1], a[j3 + 1] );            // Qx
            a[j] = L_add( x0r, x2r );
            move32();
            a[j + 1] = L_sub( x0i, x2i );
            move32();
            a[j2] = L_sub( x0r, x2r );
            move32();
            a[j2 + 1] = L_add( x0i, x2i );
            move32();
            a[j1] = L_sub( x1r, x3i );
            move32();
            a[j1 + 1] = L_sub( x1i, x3r );
            move32();
            a[j3] = L_add( x1r, x3i );
            move32();
            a[j3 + 1] = L_add( x1i, x3r );
            move32();
        }
    }
    ELSE
    {
        FOR( j = 0; j < l; j += 2 )
        {
            j1 = add( j, l );
            x0r = L_sub( a[j], a[j1] );
            x0i = L_sub( a[j1 + 1], a[j + 1] );
            a[j] = L_add( a[j], a[j1] );
            move32();
            a[j + 1] = L_negate( L_add( a[j + 1], a[j1 + 1] ) );
            move32();
            a[j1] = x0r;
            move32();
            a[j1 + 1] = x0i;
            move32();
        }
    }

    return;
}

static void rftfsub(
    Word16 n,       // Q0
    Word32 *a,      // Qx
    Word16 nc,      // Q0
    const Word16 *c // Q15
)
{
    Word16 j, k, kk, ks, m;
    Word16 wkr, wki;
    Word32 xr, xi, yr, yi;

    m = shr( n, 1 );
    ks = idiv1616( shl( nc, 1 ), m );
    kk = 0;
    move16();
    FOR( j = 2; j < m; j += 2 )
    {
        k = sub( n, j );
        kk = add( kk, ks );
        wkr = sub( extract_l( 0x4000 ) /*0.5.Q15*/, c[( nc - kk )] );
        wki = c[kk]; // Q15
        move16();
        xr = L_sub( a[j], a[k] );
        xi = L_add( a[j + 1], a[k + 1] );
        yr = L_sub( Mpy_32_16_1( xr, wkr ), Mpy_32_16_1( xi, wki ) );
        yi = L_add( Mpy_32_16_1( xi, wkr ), Mpy_32_16_1( xr, wki ) );
        a[j] = L_sub( a[j], yr );
        move32();
        a[j + 1] = L_sub( a[j + 1], yi );
        move32();
        a[k] = L_add( a[k], yr );
        move32();
        a[k + 1] = L_sub( a[k + 1], yi );
        move32();
    }

    return;
}


static void rftbsub(
    Word16 n,       // Q0
    Word32 *a,      // Qx
    Word16 nc,      // Q0
    const Word16 *c // Q15
)
{
    Word16 j, k, kk, ks, m;
    Word16 wkr, wki;
    Word32 xr, xi, yr, yi;
    a[1] = L_negate( a[1] );
    move32();
    m = shr( n, 1 );
    ks = idiv1616( shl( nc, 1 ), m );
    kk = 0;
    move16();
    FOR( j = 2; j < m; j += 2 )
    {
        k = sub( n, j );
        kk = add( kk, ks );
        wkr = sub( extract_l( 0x4000 ) /*0.5.Q15*/, c[( nc - kk )] );
        wki = c[kk]; // Q15
        xr = L_sub( a[j], a[k] );
        xi = L_add( a[j + 1], a[k + 1] );
        yr = L_add( Mpy_32_16_1( xr, wkr ), Mpy_32_16_1( xi, wki ) ); // Qx
        yi = L_sub( Mpy_32_16_1( xi, wkr ), Mpy_32_16_1( xr, wki ) ); // Qx
        a[j] = L_sub( a[j], yr );
        move32();
        a[j + 1] = L_sub( yi, a[j + 1] );
        move32();
        a[k] = L_add( a[k], yr );
        move32();
        a[k + 1] = L_sub( yi, a[k + 1] );
        move32();
    }
    a[m + 1] = L_negate( a[m + 1] );

    return;
}


static void dctsub(
    Word16 n,       // Q0
    Word32 *a,      // Qx
    Word16 nc,      // Q0
    const Word16 *c // Q15
)
{
    Word16 j, k, kk, ks, m;
    Word16 wkr, wki;
    Word32 xr;

    m = shr( n, 1 );
    ks = idiv1616( nc, n );
    kk = 0;
    move16();
    FOR( j = 1; j < m; j++ )
    {
        k = sub( n, j );
        kk = add( kk, ks );
        wkr = sub( c[kk], c[( nc - kk )] );                                 // Q15
        wki = add( c[kk], c[( nc - kk )] );                                 // Q15
        xr = L_sub( Mpy_32_16_1( a[j], wki ), Mpy_32_16_1( a[k], wkr ) );   // Qx
        a[j] = L_add( Mpy_32_16_1( a[j], wkr ), Mpy_32_16_1( a[k], wki ) ); // Qx
        move32();
        a[k] = xr;
        move32();
    }
    a[m] = Mpy_32_16_1( a[m], c[0] ); // Qx
    move32();

    return;
}

/*-----------------------------------------------------------------*
 * edct2_fx_ivas()
 *
 * Transformation of the signal to DCT domain
 * OR Inverse EDCT-II for short frames
 *-----------------------------------------------------------------*/

void edct2_fx_ivas(
    const Word16 n, // Q0
    const Word16 isgn,
    Word32 *in, // Qx
    Word32 *a,  // Qx
    const Word16 *ip,
    const Word16 *w // Q15
)
{
    Word16 j, nw, nc;
    Word32 xr;

    Copy32( in, a, n );

    nw = ip[0];
    move16();
    IF( GT_16( n, shl( nw, 2 ) ) )
    {
        nw = shr( n, 2 );
    }

    nc = ip[1];
    move16();
    if ( GT_16( n, nc ) )
    {
        nc = n;
        move16();
    }
    IF( isgn < 0 )
    {
        xr = a[n - 1];
        move16();
        FOR( j = n - 2; j >= 2; j -= 2 )
        {
            a[j + 1] = L_sub( a[j], a[j - 1] );
            move32();
            a[j] = L_add( a[j], a[j - 1] );
            move32();
        }
        a[1] = L_sub( a[0], xr );
        move32();
        a[0] = L_add( a[0], xr );
        move32();

        IF( GT_16( n, 4 ) )
        {
            rftbsub( n, a, nc, w + nw );
            bitrv2_SR( n, ip + 2, a );
            cftbsub( n, a, w );
        }
        ELSE IF( EQ_16( n, 4 ) )
        {
            cftfsub( n, a, w );
        }
    }

    IF( isgn >= 0 )
    {
        a[0] = L_shr( a[0], 1 );
        move32();
    }

    dctsub( n, a, nc, w + nw );

    IF( isgn >= 0 )
    {
        IF( GT_16( n, 4 ) )
        {
            bitrv2_SR( n, ip + 2, a );
            cftfsub( n, a, w );
            rftfsub( n, a, nc, w + nw );
        }
        ELSE IF( EQ_16( n, 4 ) )
        {
            cftfsub( n, a, w );
        }
        xr = L_sub( a[0], a[1] );
        a[0] = L_add( a[0], a[1] );
        move32();
        FOR( j = 2; j < n; j += 2 )
        {
            a[j - 1] = L_sub( a[j], a[j + 1] );
            move32();
            a[j] = L_add( a[j], a[j + 1] );
            move32();
        }
        a[n - 1] = xr;
        move32();

        FOR( j = 0; j < n; j++ )
        {
            a[j] = L_shr( a[j], 5 );
            move32();
        }
    }
}
#endif

void DoRTFTn_fx_ivas(
    Word32 *x,     /* i/o: real part of input and output data Qx      */
@@ -6430,93 +6126,6 @@ static void fft_lenN(
 * Complex-value FFT
 *-----------------------------------------------------------------*/

#ifndef HARMONIZE_DCT
void fft_fx(
    Word32 *re,          /* i/o: real part Qx          */
    Word32 *im,          /* i/o: imag part Qx          */
    const Word16 length, /* i  : length of fft       */
    const Word16 s       /* i  : sign                */
)
{

    cmplx x[960];

    FOR( Word16 j = 0; j < length; j++ )
    {
        x[j].re = re[( s * j )];
        move32();
        x[j].im = im[( s * j )];
        move32();
    }

    SWITCH( length )
    {
        case 20:
            fft_len20_fx( x );
            BREAK;
        case 40:
            fft_lenN( x, FFT_RotVector_640_fx, 640, 5, 8, 8, 40 );
            BREAK;
        case 64:
            fft_lenN( x, FFT_RotVector_256_fx, 256, 8, 8, 8, 64 );
            BREAK;
        case 80:
            fft_lenN( x, FFT_RotVector_640_fx, 640, 10, 8, 4, 40 );
            BREAK;
        case 100:
            fft_lenN( x, FFT_RotVector_400_fx, 400, 10, 10, 4, 40 );
            BREAK;
        case 120:
            fft_lenN( x, FFT_RotVector_960_fx, 960, 15, 8, 4, 60 );
            BREAK;
        case 128:
            fft_lenN( x, FFT_RotVector_256_fx, 256, 16, 8, 4, 64 );
            BREAK;
        case 160:
            fft_lenN( x, FFT_RotVector_640_fx, 640, 20, 8, 2, 40 );
            BREAK;
        case 200:
            fft_lenN( x, FFT_RotVector_400_fx, 400, 20, 10, 2, 40 );
            BREAK;
        case 240:
            fft_lenN( x, FFT_RotVector_960_fx, 960, 30, 8, 2, 60 );
            BREAK;
        case 256:
            fft_lenN( x, FFT_RotVector_256_fx, 256, 32, 8, 2, 64 );
            BREAK;
        case 320:
            fft_lenN( x, FFT_RotVector_640_fx, 640, 20, 16, 2, 40 );
            BREAK;
        case 400:
            fft_lenN( x, FFT_RotVector_400_fx, 400, 20, 20, 2, 40 );
            BREAK;
        case 480:
            fft_lenN( x, FFT_RotVector_960_fx, 960, 30, 16, 2, 60 );
            BREAK;
        case 600:
            fft_lenN( x, FFT_RotVector_600_fx, 600, 30, 20, 2, 60 );
            BREAK;
        case 640:
            fft_lenN( x, FFT_RotVector_640_fx, 640, 20, 32, 2, 40 );
            BREAK;
        case 960:
            fft_lenN( x, FFT_RotVector_960_fx, 960, 30, 32, 2, 60 );
            BREAK;
        default:
            assert( !"fft length is not supported!" );
    }

    FOR( Word16 j = 0; j < length; j++ )
    {
        re[( s * j )] = x[j].re;
        move32();
        im[( s * j )] = x[j].im;
        move32();
    }

    return;
}
#else
void fft_fx(
    cmplx *x,           /* i/o: complex data        */
    const Word16 length /* i  : length of fft       */
@@ -6581,7 +6190,6 @@ void fft_fx(

    return;
}
#endif


void rfft_fx(
@@ -6594,9 +6202,7 @@ void rfft_fx(
    Word16 i, sizeOfFft2, sizeOfFft4;
    Word32 tmp, t1, t2, t3, t4;
    Word16 s1, s2;
#ifdef HARMONIZE_DCT
    cmplx spec[L_FRAME48k];
#endif

    sizeOfFft2 = shr( length, 1 );
    sizeOfFft4 = shr( length, 2 );
@@ -6669,7 +6275,6 @@ void rfft_fx(
    {
        case -1:

#ifdef HARMONIZE_DCT
            FOR( i = 0; i < sizeOfFft2; i++ )
            {
                spec[i].re = x[2 * i];
@@ -6700,9 +6305,6 @@ void rfft_fx(
                x[2 * i + 1] = spec[i].im;
                move32();
            }
#else
            fft_fx( x, x + 1, sizeOfFft2, 2 );
#endif

            // Qx
            tmp = L_add( x[0], x[1] );
@@ -6759,7 +6361,6 @@ void rfft_fx(
                move32();
            }

#ifdef HARMONIZE_DCT
            FOR( i = 0; i < sizeOfFft2; i++ )
            {
                spec[i].re = x[2 * i];
@@ -6777,9 +6378,6 @@ void rfft_fx(
                x[2 * i + 1] = spec[i].im;
                move32();
            }
#else
            fft_fx( x, x + 1, sizeOfFft2, 2 );
#endif

            FOR( i = 0; i < length; i += 2 )
            {
+0 −12
Original line number Diff line number Diff line
@@ -89,11 +89,7 @@ void Inac_switch_ematch_fx(
    ELSE IF( EQ_16( coder_type, VOICED ) || EQ_16( coder_type, GENERIC ) || EQ_16( coder_type, TRANSITION ) || ( last_core != ACELP_CORE ) || NE_16( last_codec_mode, MODE1 ) || ( ( element_mode > EVS_MONO ) && EQ_16( coder_type, UNVOICED ) ) )
    {
        /* Find spectrum and energy per band for GC and VC frames */
#ifdef HARMONIZE_DCT
        edct_16fx( exc2, dct_exc_tmp, L_frame, 5 );
#else
        edct_16fx( exc2, dct_exc_tmp, L_frame, 5, element_mode );
#endif

        Ener_per_band_comp_fx( dct_exc_tmp, Ener_per_bd, Q_exc, MBANDS_GN, 1, L_frame );

@@ -107,11 +103,7 @@ void Inac_switch_ematch_fx(
    ELSE IF( ( coder_type == INACTIVE ) && inactive_coder_type_flag )
    {
        /* Find spectrum and energy per band for inactive frames */
#ifdef HARMONIZE_DCT
        edct_16fx( exc2, dct_exc_tmp, L_frame, 5 );
#else
        edct_16fx( exc2, dct_exc_tmp, L_frame, 5, element_mode );
#endif

        Ener_per_band_comp_fx( dct_exc_tmp, Ener_per_bd, Q_exc, MBANDS_GN, 1, L_frame );

@@ -196,11 +188,7 @@ void Inac_switch_ematch_fx(
            Scale_sig( dct_exc_tmp, 240, 1 ); // Q_exc
            Scale_sig( exc2, 240, 1 );        // Q_exc
        }
#ifdef HARMONIZE_DCT
        edct_16fx( dct_exc_tmp, exc2, L_frame, 5 );
#else
        edct_16fx( dct_exc_tmp, exc2, L_frame, 5, element_mode );
#endif
    }

    return;
+0 −39
Original line number Diff line number Diff line
@@ -214,7 +214,6 @@ static void ivas_ifft_cplx1_fx(
        move32();
    }

#ifdef HARMONIZE_DCT
    cmplx x[L_FRAME48k];

    FOR( i = 0; i < length; i++ )
@@ -234,9 +233,6 @@ static void ivas_ifft_cplx1_fx(
        im[i] = x[i].im;
        move32();
    }
#else
    fft_fx( re, im, length, 1 );
#endif

    return;
}
@@ -255,12 +251,7 @@ void ivas_mdft_fx(
    const Word16 mdft_length   /* i  : MDFT length                        */
)
{
#ifdef HARMONIZE_DCT
    cmplx spec[L_FRAME48k];
#else
    Word32 re[L_FRAME48k];
    Word32 im[L_FRAME48k];
#endif
    Word16 j, len_by_2;
    const Word32 *pTwid; // Q31
    len_by_2 = shr( mdft_length, 1 );
@@ -270,38 +261,23 @@ void ivas_mdft_fx(
    {
        FOR( j = 0; j < mdft_length; j++ )
        {
#ifdef HARMONIZE_DCT
            spec[j].re = Mpy_32_32( pIn[j], pTwid[j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
            spec[j].im = Mpy_32_32( L_negate( pIn[j] ), pTwid[mdft_length - j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
#else
            re[j] = Mpy_32_32( pIn[j], pTwid[j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
            im[j] = Mpy_32_32( L_negate( pIn[j] ), pTwid[mdft_length - j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
#endif
        }
    }
    ELSE
    {
        FOR( j = 0; j < mdft_length; j++ )
        {
#ifdef HARMONIZE_DCT
            spec[j].re = Msub_32_32( Mpy_32_32( pIn[j], pTwid[j] ), pIn[add( mdft_length, j )], pTwid[mdft_length - j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
            spec[j].im = Msub_32_32( Mpy_32_32( L_negate( pIn[j] ), pTwid[mdft_length - j] ), pIn[mdft_length + j], pTwid[j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
#else
            re[j] = Msub_32_32( Mpy_32_32( pIn[j], pTwid[j] ), pIn[add( mdft_length, j )], pTwid[mdft_length - j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
            im[j] = Msub_32_32( Mpy_32_32( L_negate( pIn[j] ), pTwid[mdft_length - j] ), pIn[mdft_length + j], pTwid[j] ); // ( Qin + Q31 ) - Q31 -> Qin
            move32();
#endif
        }
    }

#ifdef HARMONIZE_DCT
    fft_fx( spec, mdft_length );

    FOR( j = 0; j < len_by_2; j++ )
@@ -316,21 +292,6 @@ void ivas_mdft_fx(
        pOut_im[2 * j + 1] = L_negate( spec[mdft_length - j - 1].im );
        move32();
    }
#else
    fft_fx( re, im, mdft_length, 1 );
    FOR( j = 0; j < len_by_2; j++ )
    {
        pOut_re[2 * j] = re[j]; // Qin
        move32();
        pOut_re[2 * j + 1] = re[mdft_length - j - 1]; // Qin
        move32();

        pOut_im[2 * j] = im[j]; // Qin
        move32();
        pOut_im[2 * j + 1] = L_negate( im[mdft_length - j - 1] ); // Qin
        move32();
    }
#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 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 */
#define HARMONIZE_2494_FdCng_decodeSID_fx               /* FhG: harmonize FdCng_decodeSID_fx with _ivas_ version */
Loading