Fix for ec_enc_patch_initial_bits().
authorTimothy B. Terriberry <tterribe@xiph.org>
Fri, 28 Oct 2011 13:25:38 +0000 (06:25 -0700)
committerGregory Maxwell <greg@xiph.org>
Fri, 28 Oct 2011 13:51:38 +0000 (09:51 -0400)
The test to make sure that _nbits had been encoded was checking for
 8-_nbits instead of _nbits.
This only affected cases when less than 8 bits had ever been
 encoded by the time the initial bits were patched.

celt/entenc.c

index bff2d89..2e20c35 100644 (file)
@@ -225,7 +225,7 @@ void ec_enc_patch_initial_bits(ec_enc *_this,unsigned _val,unsigned _nbits){
     /*The first byte is still awaiting carry propagation.*/
     _this->rem=(_this->rem&~mask)|_val<<shift;
   }
     /*The first byte is still awaiting carry propagation.*/
     _this->rem=(_this->rem&~mask)|_val<<shift;
   }
-  else if(_this->rng<=(EC_CODE_TOP>>shift)){
+  else if(_this->rng<=(EC_CODE_TOP>>_nbits)){
     /*The renormalization loop has never been run.*/
     _this->val=(_this->val&~((opus_uint32)mask<<EC_CODE_SHIFT))|
      (opus_uint32)_val<<(EC_CODE_SHIFT+shift);
     /*The renormalization loop has never been run.*/
     _this->val=(_this->val&~((opus_uint32)mask<<EC_CODE_SHIFT))|
      (opus_uint32)_val<<(EC_CODE_SHIFT+shift);