diff src/libvorbis-1.3.3/vq/vqgen.h @ 1:05aa0afa9217

Bring in flac, ogg, vorbis
author Chris Cannam
date Tue, 19 Mar 2013 17:37:49 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/libvorbis-1.3.3/vq/vqgen.h	Tue Mar 19 17:37:49 2013 +0000
@@ -0,0 +1,85 @@
+/********************************************************************
+ *                                                                  *
+ * 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 OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************
+
+ function: build a VQ codebook 
+ last mod: $Id: vqgen.h 16037 2009-05-26 21:10:58Z xiphmont $
+
+ ********************************************************************/
+
+#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 */
+  float *pointlist; 
+  long   points;
+  long   allocated;
+
+  /* entries */
+  float *entrylist;
+  long   *assigned;
+  float *bias;
+  long   entries;
+  float *max;
+  
+  float  (*metric_func) (struct vqgen *v,float *entry,float *point);
+  float *(*weight_func) (struct vqgen *v,float *point);
+
+  FILE *asciipoints;
+} vqgen;
+
+typedef struct {
+  long   min;       /* packed 24 bit float */       
+  long   delta;     /* packed 24 bit float */       
+  int    quant;     /* 0 < quant <= 16 */
+  int    sequencep; /* bitflag */
+} quant_meta;
+
+static inline float *_point(vqgen *v,long ptr){
+  return v->pointlist+((v->elements+v->aux)*ptr);
+}
+
+static inline float *_aux(vqgen *v,long ptr){
+  return _point(v,ptr)+v->aux;
+}
+
+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,float mindist,
+                       float  (*metric)(vqgen *,float *, float *),
+                       float *(*weight)(vqgen *,float *),int centroid);
+extern void vqgen_addpoint(vqgen *v, float *p,float *aux);
+
+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 void vqgen_cellmetric(vqgen *v);
+
+#endif
+
+
+
+
+