00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _OGG_mdct_H_
00019 #define _OGG_mdct_H_
00020
00021 #include "vorbis/codec.h"
00022
00023
00024
00025
00026
00027
00028 #ifdef MDCT_INTEGERIZED
00029
00030 #define DATA_TYPE int
00031 #define REG_TYPE register int
00032 #define TRIGBITS 14
00033 #define cPI3_8 6270
00034 #define cPI2_8 11585
00035 #define cPI1_8 15137
00036
00037 #define FLOAT_CONV(x) ((int)((x)*(1<<TRIGBITS)+.5))
00038 #define MULT_NORM(x) ((x)>>TRIGBITS)
00039 #define HALVE(x) ((x)>>1)
00040
00041 #else
00042
00043 #define DATA_TYPE float
00044 #define REG_TYPE float
00045 #define cPI3_8 .38268343236508977175F
00046 #define cPI2_8 .70710678118654752441F
00047 #define cPI1_8 .92387953251128675613F
00048
00049 #define FLOAT_CONV(x) (x)
00050 #define MULT_NORM(x) (x)
00051 #define HALVE(x) ((x)*.5f)
00052
00053 #endif
00054
00055
00056 typedef struct {
00057 int n;
00058 int log2n;
00059
00060 DATA_TYPE *trig;
00061 int *bitrev;
00062
00063 DATA_TYPE scale;
00064 } mdct_lookup;
00065
00066 extern void mdct_init(mdct_lookup *lookup,int n);
00067 extern void mdct_clear(mdct_lookup *l);
00068 extern void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
00069 extern void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
00070
00071 #endif
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083