vitorsessak@osite.com.br
2000-Jun-30 15:29 UTC
[vorbis-dev] First patch, little speed up... (about 1%)
I did optimized a bit an loop at psy.c (by the way, the code looks quite more beautiful now) ;-) Have a look... --- psy.c Sat Jun 24 12:09:23 2000 +++ - Fri Jun 30 19:03:37 2000 @@ -452,38 +452,38 @@ /* bleaugh, this is more complicated than it needs to be */ static void max_seeds(vorbis_look_psy *p,double *flr){ long n=p->n,i,j; - long *posstack=alloca(n*sizeof(long)); - double *ampstack=alloca(n*sizeof(double)); - long stack=0; + long *posstack=alloca((n+1)*sizeof(long)); + double *ampstack=alloca((n+1)*sizeof(double)); + long stack=2; - for(i=0;i<n;i++){ - if(stack<2){ - posstack[stack]=i; - ampstack[stack++]=flr[i]; - }else{ + posstack[0]=0; + ampstack[0]=flr[0]; + posstack[1]=1; + ampstack[1]=flr[1]; + + + for(i=2;i<n;i++){ + if (flr[i]>=ampstack[stack-1]) while(1){ - if(flr[i]<ampstack[stack-1]){ - posstack[stack]=i; - ampstack[stack++]=flr[i]; - break; - }else{ - if(i<posstack[stack-1]*1.0905077080){ - if(stack>1 && ampstack[stack-1]<ampstack[stack-2] && - i<posstack[stack-2]*1.0905077080){ - /* we completely overlap, making stack-1 irrelevant. pop it */ - stack--; - continue; + if(i<posstack[stack-1]*1.0905077080) + if(stack>1 && ampstack[stack-1]<ampstack[stack-2] && + i<posstack[stack-2]*1.0905077080){ + /* we completely overlap, making stack-1 irrelevant. pop it */ + stack--; + if(flr[i]<ampstack[stack-1]){ + if(stack<2){ + i++; + } + break; } - } - posstack[stack]=i; - ampstack[stack++]=flr[i]; - break; - + continue; } - } + break; } + posstack[stack]=i; + ampstack[stack++]=flr[i]; } /* the stack now contains only the positions that are relevant. Scan 'em straight through */ --- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/