DCT::DCT(int bits, TransformType trans) : _bits(bits), _trans(trans), _rdft(0) { int n = 1 << _bits; _tCos = getCosineTable(_bits + 2); _csc2 = new float[n / 2]; _rdft = new RDFT(_bits, (_trans == DCT_III) ? RDFT::IDFT_C2R : RDFT::DFT_R2C); for (int i = 0; i < (n / 2); i++) _csc2[i] = 0.5 / sin((M_PI / (2 * n) * (2 * i + 1))); }
static void fft16(Complex *z) { float t1, t2, t3, t4, t5, t6; fft8(z); fft4(z + 8); fft4(z + 12); const float * const cosTable = getCosineTable(4); TRANSFORM_ZERO(z[0], z[4], z[8], z[12]); TRANSFORM(z[2], z[6], z[10], z[14], sqrthalf, sqrthalf); TRANSFORM(z[1], z[5], z[9], z[13], cosTable[1],cosTable[3]); TRANSFORM(z[3], z[7], z[11], z[15], cosTable[3], cosTable[1]); }