summaryrefslogtreecommitdiff
path: root/lib/mdct.h
diff options
context:
space:
mode:
authorMonty <xiphmont@xiph.org>2000-12-16 01:49:39 +0000
committerMonty <xiphmont@xiph.org>2000-12-16 01:49:39 +0000
commit68bd1e935b6b2d9b47d7ca2e2dd8bc32d70386d1 (patch)
tree139db04d70053674290e884b5e70b33964c8119f /lib/mdct.h
parent6c0a5d87dfbf7a1e37b7e6081baef66f1151ec18 (diff)
downloadlibvorbis-git-68bd1e935b6b2d9b47d7ca2e2dd8bc32d70386d1.tar.gz
Brand new mdct, roughly 35-40% faster on all block sizes (reduced
computation, reduced memory usage). Monty svn path=/trunk/vorbis/; revision=1113
Diffstat (limited to 'lib/mdct.h')
-rw-r--r--lib/mdct.h40
1 files changed, 35 insertions, 5 deletions
diff --git a/lib/mdct.h b/lib/mdct.h
index d6d584ab..1318df99 100644
--- a/lib/mdct.h
+++ b/lib/mdct.h
@@ -12,7 +12,7 @@
********************************************************************
function: modified discrete cosine transform prototypes
- last mod: $Id: mdct.h,v 1.13 2000/11/06 00:07:01 xiphmont Exp $
+ last mod: $Id: mdct.h,v 1.14 2000/12/16 01:49:39 xiphmont Exp $
********************************************************************/
@@ -21,19 +21,49 @@
#include "vorbis/codec.h"
+//#define MDCT_INTEGERIZED <- be warned there could be some hurt left here
+#ifdef MDCT_INTEGERIZED
+
+#define DATA_TYPE int
+#define REG_TYPE register int
+#define TRIGBITS 14
+#define cPI3_8 6270
+#define cPI2_8 11585
+#define cPI1_8 15137
+
+#define FLOAT_CONV(x) ((int)((x)*(1<<TRIGBITS)+.5))
+#define MULT_NORM(x) ((x)>>TRIGBITS)
+#define HALVE(x) ((x)>>1)
+
+#else
+
+#define DATA_TYPE float
+#define REG_TYPE float
+#define cPI3_8 .38268343236508977175F
+#define cPI2_8 .70710678118654752441F
+#define cPI1_8 .92387953251128675613F
+
+#define FLOAT_CONV(x) (x)
+#define MULT_NORM(x) (x)
+#define HALVE(x) ((x)*.5)
+
+#endif
+
+
typedef struct {
int n;
int log2n;
- float *trig;
- int *bitrev;
+ DATA_TYPE *trig;
+ int *bitrev;
+ DATA_TYPE scale;
} mdct_lookup;
extern void mdct_init(mdct_lookup *lookup,int n);
extern void mdct_clear(mdct_lookup *l);
-extern void mdct_forward(mdct_lookup *init, float *in, float *out);
-extern void mdct_backward(mdct_lookup *init, float *in, float *out);
+extern void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
+extern void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
#endif