ref: 17cab431dba2ecb10d3d5d70763b185d095e9cc8
parent: 420c325875686e2f45e00878cba21b4dcc5e1bfe
author: Jean-Marc Valin <[email protected]>
date: Fri Jan 28 15:56:56 EST 2011
Using the actual degrees of freedom rather than N*C for fine offset
--- a/libcelt/rate.c
+++ b/libcelt/rate.c
@@ -339,18 +339,18 @@
if (N>1)
{
- NClogN = N*C*(m->logN[j] + logM);
-
/* Compensate for the extra DoF in stereo */
den=(C*N+ ((C==2 && N>2) ? 1 : 0));
+ NClogN = den*(m->logN[j] + logM);
+
/* Offset for the number of fine bits by log2(N)/2 + FINE_OFFSET
compared to their "fair share" of total/N */
- offset = (NClogN>>1)-N*C*FINE_OFFSET;
+ offset = (NClogN>>1)-den*FINE_OFFSET;
/* N=2 is the only point that doesn't match the curve */
if (N==2)
- offset += N*C<<BITRES>>2;
+ offset += den<<BITRES>>2;
/* Changing the offset for allocating the second and third
fine energy bit */