Avoiding left shifts of negative values
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Sat, 24 Sep 2011 03:48:40 +0000 (23:48 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Sat, 24 Sep 2011 03:48:40 +0000 (23:48 -0400)
celt/bands.c
celt/celt.c
celt/rate.c

index f89a94e..64622ea 100644 (file)
@@ -68,7 +68,7 @@ static int bitexact_log2tan(int isin,int icos)
    ls=EC_ILOG(isin);
    icos<<=15-lc;
    isin<<=15-ls;
-   return ((ls-lc)<<11)
+   return (ls-lc)*(1<<11)
          +FRAC_MUL16(isin, FRAC_MUL16(isin, -2597) + 7932)
          -FRAC_MUL16(icos, FRAC_MUL16(icos, -2597) + 7932);
 }
@@ -775,7 +775,7 @@ static unsigned quant_band(int encode, const CELTMode *m, int i, celt_norm *X, c
       opus_int32 tell;
 
       /* Decide on the resolution to give to the split parameter theta */
-      pulse_cap = m->logN[i]+(LM<<BITRES);
+      pulse_cap = m->logN[i]+LM*(1<<BITRES);
       offset = (pulse_cap>>1) - (stereo&&N==2 ? QTHETA_OFFSET_TWOPHASE : QTHETA_OFFSET);
       qn = compute_qn(N, b, offset, pulse_cap, stereo);
       if (stereo && i>=intensity)
index ad48734..87d648f 100644 (file)
@@ -1430,7 +1430,7 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
      /*printf ("%d\n", st->vbr_reservoir);*/
 
      /* Compute the offset we need to apply in order to reach the target */
-     st->vbr_drift += (opus_int32)MULT16_32_Q15(alpha,(delta<<lm_diff)-st->vbr_offset-st->vbr_drift);
+     st->vbr_drift += (opus_int32)MULT16_32_Q15(alpha,(delta*(1<<lm_diff))-st->vbr_offset-st->vbr_drift);
      st->vbr_offset = -st->vbr_drift;
      /*printf ("%d\n", st->vbr_drift);*/
 
index 987dffd..8afacda 100644 (file)
@@ -571,7 +571,7 @@ int compute_allocation(const CELTMode *m, int start, int end, const int *offsets
       thresh[j] = IMAX((C)<<BITRES, (3*(m->eBands[j+1]-m->eBands[j])<<LM<<BITRES)>>4);
       /* Tilt of the allocation curve */
       trim_offset[j] = C*(m->eBands[j+1]-m->eBands[j])*(alloc_trim-5-LM)*(end-j-1)
-            <<(LM+BITRES)>>6;
+            *(1<<(LM+BITRES))>>6;
       /* Giving less resolution to single-coefficient bands because they get
          more benefit from having one coarse value per coefficient*/
       if ((m->eBands[j+1]-m->eBands[j])<<LM==1)