fixed-point version of the high-pass seems to work now.
[speexdsp.git] / libspeex / misc.h
index c9a287a..95e5d0c 100644 (file)
 #ifndef MISC_H
 #define MISC_H
 
-#ifndef VERSION
-#define VERSION "speex-1.1"
+#ifndef SPEEX_VERSION
+#define SPEEX_MAJOR_VERSION 1         /**< Major Speex version. */
+#define SPEEX_MINOR_VERSION 1         /**< Minor Speex version. */
+#define SPEEX_MICRO_VERSION 13        /**< Micro Speex version. */
+#define SPEEX_EXTRA_VERSION ""        /**< Extra Speex version. */
+#define SPEEX_VERSION "speex-1.1.13"  /**< Speex version string. */
 #endif
 
+/* A couple test to catch stupid option combinations */
 #ifdef FIXED_POINT
 
-extern int fixed_point_on;
-#define FIXED_SIGNAL fixed_point_on=1;
-#define FLOAT_SIGNAL fixed_point_on=0;
-
-typedef short        spx_word16_t;
-typedef int          spx_word32_t;
-typedef spx_word32_t spx_mem_t;
-typedef spx_word16_t spx_coef_t;
-typedef float   spx_sig_t;
-
-#define LPC_SCALING  8192.
-#define SIG_SCALING  16384.
-
-#define MULT16_32_Q14(a,b) (((a)*((b)>>14)) + ((a)*((signed int)((b)&0x00003fff))>>14))
-#define MULT16_32_Q15(a,b) (((a)*((b)>>15)) + ((a)*((signed int)((b)&0x00007fff))>>15))
-
-#define MULT16_16_Q13(a,b) (((signed int)(a))*(b)>>13)
-#define MULT16_16_Q14(a,b) (((signed int)(a))*(b)>>14)
-#define MULT16_16_Q15(a,b) (((signed int)(a))*(b)>>15)
-
-#define MULT16_16_P14(a,b) ((8192+((signed int)(a))*(b))>>14)
-
-
-#define DIV32_16(a,b) (((signed int)(a))/(b))
+#ifdef _USE_SSE
+#error SSE is only for floating-point
+#endif
+#if ((defined (ARM4_ASM)||defined (ARM4_ASM)) && defined(BFIN_ASM)) || (defined (ARM4_ASM)&&defined(ARM5E_ASM))
+#error Make up your mind. What CPU do you have?
+#endif
+#ifdef VORBIS_PSYCHO
+#error Vorbis-psy model currently not implemented in fixed-point
+#endif
 
 #else
 
-#define FIXED_SIGNAL
-#define FLOAT_SIGNAL
+#if defined (ARM4_ASM) || defined(ARM5E_ASM) || defined(BFIN_ASM)
+#error I suppose you can have a [ARM4/ARM5E/Blackfin] that has float instructions?
+#endif
+#ifdef FIXED_POINT_DEBUG
+#error Don't you think enabling fixed-point is a good thing to do if you want to debug that?
+#endif
 
-typedef float spx_mem_t;
-typedef float spx_coef_t;
-typedef float spx_sig_t;
-typedef float spx_word16_t;
-typedef float spx_word32_t;
 
-#define LPC_SCALING  1.
-#define SIG_SCALING  1.
 #endif
 
+#include "arch.h"
+
 #ifndef RELEASE
+/** Print a named vector to stdout */
 void print_vec(float *vec, int len, char *name);
 #endif
 
-unsigned int be_int(unsigned int i);
-unsigned int le_int(unsigned int i);
-
-
-unsigned short be_short(unsigned short s);
-unsigned short le_short(unsigned short s);
+/** Convert big endian */
+spx_uint32_t be_int(spx_uint32_t i);
+/** Convert little endian */
+spx_uint32_t le_int(spx_uint32_t i);
 
 /** Speex wrapper for calloc. To do your own dynamic allocation, all you need to do is replace this function, speex_realloc and speex_free */
 void *speex_alloc (int size);
 
+/** Same as speex_alloc, except that the area is only needed inside a Speex call (might cause problem with wideband though) */
+void *speex_alloc_scratch (int size);
+
 /** Speex wrapper for realloc. To do your own dynamic allocation, all you need to do is replace this function, speex_alloc and speex_free */
 void *speex_realloc (void *ptr, int size);
 
 /** Speex wrapper for calloc. To do your own dynamic allocation, all you need to do is replace this function, speex_realloc and speex_alloc */
 void speex_free (void *ptr);
 
+/** Same as speex_alloc, except that the area is only needed inside a Speex call (might cause problem with wideband though) */
+void speex_free_scratch (void *ptr);
+
 /** Speex wrapper for mem_move */
 void *speex_move (void *dest, void *src, int n);
 
-void speex_error(char *str);
+/** Speex wrapper for memcpy */
+void speex_memcpy_bytes(char *dst, char *src, int nbytes);
+
+/** Speex wrapper for memset */
+void speex_memset_bytes(char *dst, char src, int nbytes);
 
-void speex_warning(char *str);
+/** Print error message to stderr */
+void speex_error(const char *str);
 
-void speex_warning_int(char *str, int val);
+/** Print warning message to stderr */
+void speex_warning(const char *str);
 
-void speex_rand_vec(float std, float *data, int len);
+/** Print warning message with integer argument to stderr */
+void speex_warning_int(const char *str, int val);
 
-float speex_rand(float std);
+/** Generate a random number */
+spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed);
 
+/** Speex wrapper for putc */
 void _speex_putc(int ch, void *file);
 
 #endif