/*==================================================================================== EVS Codec 3GPP TS26.443 Jun 30, 2015. Version CR 26.443-0006 ====================================================================================*/ #include #include #include #include "cnst.h" #include "prot.h" /*-------------------------------------------------------------------* * TCX_MDCT() * * *-------------------------------------------------------------------*/ void TCX_MDCT( float const *x, float *y, int l, int m, int r ) { short i; float dctInBuffer[N_MAX]; /* Init */ for(i=0; i> 1, R2 = r >> 1; float f; edct( x, y + L2, L2 + m + R2 ); for (i = 0; i < R2; i++) { y[l + m + R2 + i] = -1.0f * y[L2 + i]; /* fold out right end of DCT */ } mvr2r(y + L2 + m + R2, y, L2); /* negate, fold out left end of DCT */ for (i = 0; i < ((L2 + m + R2) >> 1); i++) { f = y[L2 + i]; y[L2 + i] = -1.0f * y[l + m + R2 - 1 - i]; /* time-reverse mid of DCT */ y[l + m + R2 - 1 - i] = -1.0f * f; } v_multc( y, (float)sqrt((float)(l/2 + m + r/2) / NORM_MDCT_FACTOR), y, l + m + r ); return; }