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