diff --git a/libcelt/rate.c b/libcelt/rate.c index 42bdb7d5..8110e426 100644 --- a/libcelt/rate.c +++ b/libcelt/rate.c @@ -160,7 +160,7 @@ static inline void interp_bits2pulses(const CELTMode *m, int start, int end, int N=M*(m->eBands[j+1]-m->eBands[j]); /* Compensate for the extra DoF in stereo */ d=(C*N+ ((C==2 && N>2) ? 1 : 0))<logN[j] - logM; + offset = FINE_OFFSET - ((m->logN[j] + logM)>>1); /* Offset for the number of fine bits compared to their "fair share" of total/N */ offset = bits[j]-offset*N*C; /* Compensate for the prediction gain in stereo */ @@ -173,6 +173,8 @@ static inline void interp_bits2pulses(const CELTMode *m, int start, int end, int if (N==1) ebits[j] = (bits[j]/C >> BITRES)-1; + if (ebits[j] < 1) + ebits[j] = 1; /* Make sure not to bust */ if (C*ebits[j] > (bits[j]>>BITRES)) ebits[j] = bits[j]/C >> BITRES; diff --git a/libcelt/rate.h b/libcelt/rate.h index 833e1e2b..ee5e25b6 100644 --- a/libcelt/rate.h +++ b/libcelt/rate.h @@ -40,7 +40,7 @@ #define LOG_MAX_PULSES 7 #define BITRES 3 -#define FINE_OFFSET 25 +#define FINE_OFFSET 14 #define QTHETA_OFFSET 18 #define BITOVERFLOW 30000