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 https://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 | |