From d0f4e2292e21b1e493bbdf0dba751e5440bfe9c2 Mon Sep 17 00:00:00 2001 From: Monty Date: Sat, 18 Dec 1999 08:27:51 +0000 Subject: [PATCH] Change builder to find center of gravity of entries, not points (otherwise megasets will take weeks). Add spinner so builder doesn't look dead during long opts. Monty svn path=/trunk/vorbis/; revision=204 --- vq/vqsplit.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/vq/vqsplit.c b/vq/vqsplit.c index f453d0c..864f4df 100644 --- a/vq/vqsplit.c +++ b/vq/vqsplit.c @@ -32,6 +32,7 @@ #include #include #include "vqgen.h" +#include /* Codebook generation happens in two steps: @@ -143,6 +144,36 @@ void pq_center_out(vqgen *v,double *n,double *c,double *center,double *q){ } } +static void spinnit(void){ + static int p=0; + static long lasttime=0; + long test; + struct timeval thistime; + + gettimeofday(&thistime,NULL); + test=thistime.tv_sec*10+thistime.tv_usec/100000; + if(lasttime!=test){ + lasttime=test; + + p++;if(p>3)p=0; + switch(p){ + case 0: + fprintf(stderr,"|\b"); + break; + case 1: + fprintf(stderr,"/\b"); + break; + case 2: + fprintf(stderr,"-\b"); + break; + case 3: + fprintf(stderr,"\\\b"); + break; + } + fflush(stderr); + } +} + int lp_split(vqgen *v,vqbook *b, long *entryindex,long entries, long *pointindex,long points, @@ -186,6 +217,7 @@ int lp_split(vqgen *v,vqbook *b, double this; for(i=0;ielements;k++){ + spinnit(); + /* just sort the index array */ - sortvals=v->pointlist+k; + sortvals=v->entrylist+k; els=v->elements; - qsort(pointindex,points,sizeof(long),iascsort); - if(points&0x1){ - p[k]=v->pointlist[(pointindex[points/2])*v->elements+k]; + qsort(entryindex,entries,sizeof(long),iascsort); + if(entries&0x1){ + p[k]=v->entrylist[(entryindex[entries/2])*v->elements+k]; }else{ - p[k]=(v->pointlist[(pointindex[points/2])*v->elements+k]+ - v->pointlist[(pointindex[points/2-1])*v->elements+k])/2.; + p[k]=(v->entrylist[(entryindex[entries/2])*v->elements+k]+ + v->entrylist[(entryindex[entries/2-1])*v->elements+k])/2.; } } - + + spinnit(); + /* try every normal, but just for distance */ for(j=0;j