1 /******************************************************************** 2 * * 3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 7 * * 8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * 9 * by the Xiph.Org Foundation http://www.xiph.org/ * 10 * * 11 ******************************************************************** 12 13 function: modified discrete cosine transform prototypes 14 15 ********************************************************************/ 16 17 #ifndef _OGG_mdct_H_ 18 #define _OGG_mdct_H_ 19 20 #include "vorbis/codec.h" 21 22 23 24 25 26 /*#define MDCT_INTEGERIZED <- be warned there could be some hurt left here*/ 27 #ifdef MDCT_INTEGERIZED 28 29 #define DATA_TYPE int 30 #define REG_TYPE register int 31 #define TRIGBITS 14 32 #define cPI3_8 6270 33 #define cPI2_8 11585 34 #define cPI1_8 15137 35 36 #define FLOAT_CONV(x) ((int)((x)*(1<<TRIGBITS)+.5)) 37 #define MULT_NORM(x) ((x)>>TRIGBITS) 38 #define HALVE(x) ((x)>>1) 39 40 #else 41 42 #define DATA_TYPE float 43 #define REG_TYPE float 44 #define cPI3_8 .38268343236508977175F 45 #define cPI2_8 .70710678118654752441F 46 #define cPI1_8 .92387953251128675613F 47 48 #define FLOAT_CONV(x) (x) 49 #define MULT_NORM(x) (x) 50 #define HALVE(x) ((x)*.5f) 51 52 #endif 53 54 55 typedef struct { 56 int n; 57 int log2n; 58 59 DATA_TYPE *trig; 60 int *bitrev; 61 62 DATA_TYPE scale; 63 } mdct_lookup; 64 65 extern void mdct_init(mdct_lookup *lookup,int n); 66 extern void mdct_clear(mdct_lookup *l); 67 extern void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out); 68 extern void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out); 69 70 #endif 71