Move fine_priority calculation after the bust cap.
authorTimothy B. Terriberry <tterribe@xiph.org>
Thu, 30 Dec 2010 16:38:48 +0000 (08:38 -0800)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Thu, 30 Dec 2010 17:47:28 +0000 (12:47 -0500)
This way if a band doesn't get the fine bits we want because it
 wasn't allocated enough bits to start with, then we will still
 give it priority for any spare bits after PVQ.

libcelt/rate.c

index 28f3a8d..58cc92b 100644 (file)
@@ -320,10 +320,6 @@ static inline int interp_bits2pulses(const CELTMode *m, int start, int end, int
          /* Divide with rounding */
          ebits[j] = IMAX(0, (bits[j] + offset + (den<<(BITRES-1))) / (den<<BITRES));
 
-         /* If we rounded down, make it a candidate for final
-             fine energy pass */
-         fine_priority[j] = ebits[j]*(den<<BITRES) >= bits[j]+offset;
-
          /* Make sure not to bust */
          if (C*ebits[j] > (bits[j]>>BITRES))
             ebits[j] = bits[j] >> stereo >> BITRES;
@@ -332,6 +328,10 @@ static inline int interp_bits2pulses(const CELTMode *m, int start, int end, int
          if (ebits[j]>8)
             ebits[j]=8;
 
+         /* If we rounded down or capped this band, make it a candidate for the
+             final fine energy pass */
+         fine_priority[j] = ebits[j]*(den<<BITRES) >= bits[j]+offset;
+
       } else {
          /* For N=1, all bits go to fine energy except for a single sign bit */
          ebits[j] = IMIN(IMAX(0,(bits[j] >> stereo >> BITRES)-1),7);