summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty <xiphmont@xiph.org>2010-03-26 05:30:11 +0000
committerMonty <xiphmont@xiph.org>2010-03-26 05:30:11 +0000
commit90cb20ed01ad20e4fa9c8b75e5484f8f61e9d847 (patch)
tree1d705754d148acce030ec5fa09bd05f254ec8d60
parentb13882809953d3029ab5c6dcd0dfe528d5a97cea (diff)
downloadlibvorbis-git-90cb20ed01ad20e4fa9c8b75e5484f8f61e9d847.tar.gz
Revert floor1 line fitting to exact 1.2.3 behavior; the apparently better
weighting of 1.3.0pre was slightly dropping PEAQ and slightly increasing bitrate. svn path=/trunk/vorbis/; revision=17075
-rw-r--r--lib/floor1.c39
1 files changed, 16 insertions, 23 deletions
diff --git a/lib/floor1.c b/lib/floor1.c
index 99358880..5c290fc1 100644
--- a/lib/floor1.c
+++ b/lib/floor1.c
@@ -470,27 +470,28 @@ 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++){
- 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;
+
+ /* 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;
}
if(*y0>=0){
@@ -511,14 +512,6 @@ 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);