From b57f18e9f8c99670ce2d3625cd8e164f30722251 Mon Sep 17 00:00:00 2001 From: Monty Date: Thu, 4 Mar 2010 18:21:43 +0000 Subject: [PATCH] Correct numerous small bugs in new coupling engine svn path=/trunk/vorbis/; revision=16950 --- lib/psy.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/psy.c b/lib/psy.c index 2361eee..a556e49 100644 --- a/lib/psy.c +++ b/lib/psy.c @@ -1062,7 +1062,7 @@ void _vp_couple_quantize_normalize(int blobno, int k,j,jn = partition > n-i ? n-i : partition; int step,track = 0; - memcpy(nz,nonzero,sizeof(nz)); + memcpy(nz,nonzero,sizeof(*nz)*ch); /* prefill */ memset(flag[0],0,ch*partition*sizeof(**flag)); @@ -1077,7 +1077,7 @@ void _vp_couple_quantize_normalize(int blobno, for(j=0;jabs(B)||B>abs(A) ? A-B : B-A); - if(abs(B)>abs(A))iM[j]=B; + if(abs(A)>abs(B)){ + iA[j]=(A>0?A-B:B-A); + }else{ + iA[j]=(B>0?A-B:B-A); + iM[j]=B; + } /* collapse two equivalent tuples to one */ - if(abs(iM[j])*2==iA[j]){ + if(iA[j]>=abs(iM[j])*2){ iA[j]= -iA[j]; iM[j]= -iM[j]; } + } }else{ /* lossy (point) coupling */ - if(jcoupling_steps;i++){ + /* make sure coupling a zero and a nonzero channel results in two + nonzero channels. */ + if(nonzero[vi->coupling_mag[i]] || + nonzero[vi->coupling_ang[i]]){ + nonzero[vi->coupling_mag[i]]=1; + nonzero[vi->coupling_ang[i]]=1; + } + } } -- 2.7.4