Blame vq/vqgen.h

Packit 06404a
/********************************************************************
Packit 06404a
 *                                                                  *
Packit 06404a
 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
Packit 06404a
 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
Packit 06404a
 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
Packit 06404a
 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
Packit 06404a
 *                                                                  *
Packit 06404a
 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
Packit 06404a
 * by the Xiph.Org Foundation http://www.xiph.org/                  *
Packit 06404a
 *                                                                  *
Packit 06404a
 ********************************************************************
Packit 06404a
Packit 06404a
 function: build a VQ codebook 
Packit 06404a
 last mod: $Id: vqgen.h 16037 2009-05-26 21:10:58Z xiphmont $
Packit 06404a
Packit 06404a
 ********************************************************************/
Packit 06404a
Packit 06404a
#ifndef _VQGEN_H_
Packit 06404a
#define _VQGEN_H_
Packit 06404a
Packit 06404a
typedef struct vqgen{
Packit 06404a
  int seeded;
Packit 06404a
  int sorted;
Packit 06404a
Packit 06404a
  int it;
Packit 06404a
  int elements;
Packit 06404a
Packit 06404a
  int aux;
Packit 06404a
  float mindist;
Packit 06404a
  int centroid;
Packit 06404a
Packit 06404a
  /* point cache */
Packit 06404a
  float *pointlist; 
Packit 06404a
  long   points;
Packit 06404a
  long   allocated;
Packit 06404a
Packit 06404a
  /* entries */
Packit 06404a
  float *entrylist;
Packit 06404a
  long   *assigned;
Packit 06404a
  float *bias;
Packit 06404a
  long   entries;
Packit 06404a
  float *max;
Packit 06404a
  
Packit 06404a
  float  (*metric_func) (struct vqgen *v,float *entry,float *point);
Packit 06404a
  float *(*weight_func) (struct vqgen *v,float *point);
Packit 06404a
Packit 06404a
  FILE *asciipoints;
Packit 06404a
} vqgen;
Packit 06404a
Packit 06404a
typedef struct {
Packit 06404a
  long   min;       /* packed 24 bit float */       
Packit 06404a
  long   delta;     /* packed 24 bit float */       
Packit 06404a
  int    quant;     /* 0 < quant <= 16 */
Packit 06404a
  int    sequencep; /* bitflag */
Packit 06404a
} quant_meta;
Packit 06404a
Packit 06404a
static inline float *_point(vqgen *v,long ptr){
Packit 06404a
  return v->pointlist+((v->elements+v->aux)*ptr);
Packit 06404a
}
Packit 06404a
Packit 06404a
static inline float *_aux(vqgen *v,long ptr){
Packit 06404a
  return _point(v,ptr)+v->aux;
Packit 06404a
}
Packit 06404a
Packit 06404a
static inline float *_now(vqgen *v,long ptr){
Packit 06404a
  return v->entrylist+(v->elements*ptr);
Packit 06404a
}
Packit 06404a
Packit 06404a
extern void vqgen_init(vqgen *v,
Packit 06404a
                       int elements,int aux,int entries,float mindist,
Packit 06404a
                       float  (*metric)(vqgen *,float *, float *),
Packit 06404a
                       float *(*weight)(vqgen *,float *),int centroid);
Packit 06404a
extern void vqgen_addpoint(vqgen *v, float *p,float *aux);
Packit 06404a
Packit 06404a
extern float vqgen_iterate(vqgen *v,int biasp);
Packit 06404a
extern void vqgen_unquantize(vqgen *v,quant_meta *q);
Packit 06404a
extern void vqgen_quantize(vqgen *v,quant_meta *q);
Packit 06404a
extern void vqgen_cellmetric(vqgen *v);
Packit 06404a
Packit 06404a
#endif
Packit 06404a
Packit 06404a
Packit 06404a
Packit 06404a
Packit 06404a