/********************************************************************
* *
* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS SOURCE IS GOVERNED BY *
- * THE GNU LESSER/LIBRARY PUBLIC LICENSE, WHICH IS INCLUDED WITH *
- * THIS SOURCE. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
+ * 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-2000 *
- * by 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: train a VQ codebook
- last mod: $Id: vqgen.c,v 1.35 2000/11/06 00:07:26 xiphmont Exp $
+ last mod: $Id$
********************************************************************/
#include "vqgen.h"
#include "bookutil.h"
-#include "../lib/sharedbook.h"
/* Codebook generation happens in two steps:
float _dist(vqgen *v,float *a, float *b){
int i;
int el=v->elements;
- float acc=0.;
+ float acc=0.f;
for(i=0;i<el;i++){
float val=(a[i]-b[i]);
acc+=val*val;
int directdsort(const void *a, const void *b){
float av=*((float *)a);
float bv=*((float *)b);
- if(av>bv)return(-1);
- return(1);
+ return (av<bv)-(av>bv);
}
void vqgen_cellmetric(vqgen *v){
int j,k;
- float min=-1.,max=-1.,mean=0.,acc=0.;
+ float min=-1.f,max=-1.f,mean=0.f,acc=0.f;
long dup=0,unused=0;
#ifdef NOISY
int i;
mindel=maxdel=_now(v,0)[0];
for(j=0;j<v->entries;j++){
- float last=0.;
+ float last=0.f;
for(k=0;k<v->elements;k++){
if(mindel>_now(v,j)[k]-last)mindel=_now(v,j)[k]-last;
if(maxdel<_now(v,j)[k]-last)maxdel=_now(v,j)[k]-last;
encoded. Loosen the delta slightly to allow for additional error
during sequence quantization */
- delta=(maxdel-mindel)/((1<<q->quant)-1.5);
+ delta=(maxdel-mindel)/((1<<q->quant)-1.5f);
q->min=_float32_pack(mindel);
q->delta=_float32_pack(delta);
float delta=_float32_unpack(q->delta);
for(j=0;j<v->entries;j++){
- float last=0.;
+ float last=0.f;
for(k=0;k<v->elements;k++){
float now=_now(v,j)[k];
now=fabs(now)*delta+last+mindel;
if(v->aux)memcpy(_point(v,v->points)+v->elements,a,sizeof(float)*v->aux);
/* quantize to the density mesh if it's selected */
- if(v->mindist>0.){
+ if(v->mindist>0.f){
/* quantize to the mesh */
for(k=0;k<v->elements+v->aux;k++)
_point(v,v->points)[k]=
void vqgen_sortmesh(vqgen *v){
sortit=0;
- if(v->mindist>0.){
+ if(v->mindist>0.f){
long i,march=1;
/* sort to make uniqueness detection trivial */
long desired;
long desired2;
- float asserror=0.;
- float meterror=0.;
+ float asserror=0.f;
+ float meterror=0.f;
float *new;
float *new2;
long *nearcount;
_now(v,j)[k]=vN(new,j)[k]/v->assigned[j];
}else{
for(k=0;k<v->elements;k++)
- _now(v,j)[k]=(vN(new,j)[k]+vN(new2,j)[k])/2.;
+ _now(v,j)[k]=(vN(new,j)[k]+vN(new2,j)[k])/2.f;
}
}
}