reinstantiate floor1 weighting changes.
authorMonty <xiphmont@xiph.org>
Fri, 26 Mar 2010 06:39:18 +0000 (06:39 +0000)
committerMonty <xiphmont@xiph.org>
Fri, 26 Mar 2010 06:39:18 +0000 (06:39 +0000)
svn path=/trunk/vorbis/; revision=17078

lib/floor1.c

index 5c290fc11beccc21bbd76f8b984e1dd9232347a9..993588803e2fb6c861562fe2c52629101557e669 100644 (file)
@@ -470,28 +470,27 @@ static int accumulate_fit(const float *flr,const float *mdct,
 
 static int fit_line(lsfit_acc *a,int fits,int *y0,int *y1,
                     vorbis_info_floor1 *info){
+  double weight;
+  double xa=0,ya=0,x2a=0,y2a=0,xya=0,an=0;
   double xb=0,yb=0,x2b=0,y2b=0,xyb=0,bn=0;
   int i;
   int x0=a[0].x0;
   int x1=a[fits-1].x1;
 
   for(i=0;i<fits;i++){
-
-    /* This process is a bit odd as I'm preserving the weighting
-       behavior of 1.2.3 for now.  Although I can hear no difference,
-       what appears to be a better more straightforward weighting
-       slightly drops PEAQ and increases bitrate.  For that reason,
-       I'm preserving the old behavior until I can explain why the
-       bettwer weighting measures poorly. */
-
-    double weight = floor((a[i].bn+a[i].an)*info->twofitweight/(a[i].an+1))+1.;
-
-    xb+=a[i].xb + a[i].xa * weight;
-    yb+=a[i].yb + a[i].ya * weight;
-    x2b+=a[i].x2b + a[i].x2a * weight;
-    y2b+=a[i].y2b + a[i].y2a * weight;
-    xyb+=a[i].xyb + a[i].xya * weight;
-    bn+=a[i].bn + a[i].an * weight;
+    xa+=a[i].xa;
+    ya+=a[i].ya;
+    x2a+=a[i].x2a;
+    y2a+=a[i].y2a;
+    xya+=a[i].xya;
+    an+=a[i].an;
+
+    xb+=a[i].xb;
+    yb+=a[i].yb;
+    x2b+=a[i].x2b;
+    y2b+=a[i].y2b;
+    xyb+=a[i].xyb;
+    bn+=a[i].bn;
   }
 
   if(*y0>=0){
@@ -512,6 +511,14 @@ static int fit_line(lsfit_acc *a,int fits,int *y0,int *y1,
     bn++;
   }
 
+  weight = (bn+an)*info->twofitweight/(an+1)+1.;
+  xb += xa * weight;
+  yb += ya * weight;
+  x2b += x2a * weight;
+  y2b += y2a * weight;
+  xyb += xya * weight;
+  bn += an * weight;
+
   {
     double denom=(bn*x2b-xb*xb);