Export public function on MinGW platform
[platform/upstream/libvorbis.git] / vq / vqgen.h
index bbc942e..688379c 100644 (file)
@@ -1,69 +1,51 @@
 /********************************************************************
  *                                                                  *
- * THIS FILE IS PART OF THE Ogg Vorbis SOFTWARE CODEC SOURCE CODE.  *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
- * THE GNU PUBLIC LICENSE 2, WHICH IS INCLUDED WITH THIS SOURCE.    *
- * PLEASE READ THESE TERMS DISTRIBUTING.                            *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
- * THE OggSQUISH SOURCE CODE IS (C) COPYRIGHT 1994-1999             *
- * by 1999 Monty <monty@xiph.org> and The XIPHOPHORUS Company       *
- * http://www.xiph.org/                                             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
+ ********************************************************************
+
+ function: build a VQ codebook 
+
  ********************************************************************/
 
 #ifndef _VQGEN_H_
 #define _VQGEN_H_
 
 typedef struct vqgen{
+  int seeded;
+  int sorted;
+
   int it;
   int elements;
+
   int aux;
+  float mindist;
+  int centroid;
 
   /* point cache */
-  double *pointlist; 
+  float *pointlist; 
   long   points;
   long   allocated;
 
   /* entries */
-  double *entrylist;
+  float *entrylist;
   long   *assigned;
-  double *bias;
+  float *bias;
   long   entries;
+  float *max;
+  
+  float  (*metric_func) (struct vqgen *v,float *entry,float *point);
+  float *(*weight_func) (struct vqgen *v,float *point);
 
-  double  (*metric_func) (struct vqgen *v,double *entry,double *point);
-  double *(*weight_func) (struct vqgen *v,double *point);
+  FILE *asciipoints;
 } vqgen;
 
-typedef struct vqbook{
-  long dim;           /* codebook dimensions (elements per vector) */
-  long entries;       /* codebook entries */
-
-  long   min;         /* packed 24 bit float; quant value 0 maps to minval */
-  long   delta;       /* packed 24 bit float; val 1 - val 0 == delta */       
-  int    quant;       /* 0 < quant <= 16 */
-  int    sequencep;   /* bitflag */
-
-  double *valuelist;  /* list of dim*entries actual entry values */
-  long   *quantlist;  /* list of dim*entries quantized entry values */
-  long   *codelist;   /* list of bitstream codewords for each entry */
-  long   *lengthlist; /* codeword lengths in bits */
-
-  /* auxiliary encoding/decoding information */
-  /* encode: provided pre-calculated partitioning tree */
-  /* decode: hufftree */
-  long   *ptr0;
-  long   *ptr1;
-
-  /* auxiliary encoding information. Not used in decode */
-  double *n;         /* decision hyperplanes: sum(x_i*n_i)[0<=i<dim]=c */ 
-  double *c;
-  long   *p;
-  long   *q;
-  long   aux;
-  long   alloc;
-
-} vqbook;
-
 typedef struct {
   long   min;       /* packed 24 bit float */       
   long   delta;     /* packed 24 bit float */       
@@ -71,31 +53,28 @@ typedef struct {
   int    sequencep; /* bitflag */
 } quant_meta;
 
-static inline double *_point(vqgen *v,long ptr){
+static inline float *_point(vqgen *v,long ptr){
   return v->pointlist+((v->elements+v->aux)*ptr);
 }
 
-static inline double *_aux(vqgen *v,long ptr){
+static inline float *_aux(vqgen *v,long ptr){
   return _point(v,ptr)+v->aux;
 }
 
-static inline double *_now(vqgen *v,long ptr){
+static inline float *_now(vqgen *v,long ptr){
   return v->entrylist+(v->elements*ptr);
 }
 
-extern void vqgen_init(vqgen *v,int elements,int aux,int entries,
-                      double  (*metric)(vqgen *,double *, double *),
-                      double *(*weight)(vqgen *,double *));
-extern void vqgen_addpoint(vqgen *v, double *p,double *aux);
+extern void vqgen_init(vqgen *v,
+                       int elements,int aux,int entries,float mindist,
+                       float  (*metric)(vqgen *,float *, float *),
+                       float *(*weight)(vqgen *,float *),int centroid);
+extern void vqgen_addpoint(vqgen *v, float *p,float *aux);
 
-extern double vqgen_iterate(vqgen *v);
+extern float vqgen_iterate(vqgen *v,int biasp);
 extern void vqgen_unquantize(vqgen *v,quant_meta *q);
 extern void vqgen_quantize(vqgen *v,quant_meta *q);
-extern long float24_pack(double val);
-extern double float24_unpack(long val);
-
-extern void vqsp_book(vqgen *v,vqbook *b,long *quantlist);
-extern int vqenc_entry(vqbook *b,double *val);
+extern void vqgen_cellmetric(vqgen *v);
 
 #endif