Fixed incorrect casts that broke rate control in some situations.
authorPaul Wilkins <paulwilkins@google.com>
Thu, 20 May 2010 15:49:39 +0000 (16:49 +0100)
committerPaul Wilkins <paulwilkins@google.com>
Thu, 20 May 2010 15:49:39 +0000 (16:49 +0100)
vp8/encoder/ratectrl.c
vp8/encoder/rdopt.c

index ad54c5e..7ab9605 100644 (file)
@@ -1170,7 +1170,8 @@ void vp8_update_rate_correction_factors(VP8_COMP *cpi, int damp_var)
         while (Z > 0)
         {
             Z --;
-            projected_size_based_on_q *= (int)Factor;
+            projected_size_based_on_q =
+                (int)(Factor * projected_size_based_on_q);
             Factor += factor_adjustment;
 
             if (Factor  >= 0.999)
@@ -1361,7 +1362,9 @@ int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame)
                 if (cpi->zbin_over_quant > zbin_oqmax)
                     cpi->zbin_over_quant = zbin_oqmax;
 
-                bits_per_mb_at_this_q *= (int)Factor;                   // Each over-ruin step is assumed to equate to approximately 3% reduction in bitrate
+                // Each over-run step is assumed to equate to approximately
+                // 3% reduction in bitrate
+                bits_per_mb_at_this_q = (int)(Factor * bits_per_mb_at_this_q);
                 Factor += factor_adjustment;
 
                 if (Factor  >= 0.999)
index 0846996..601c529 100644 (file)
@@ -265,7 +265,7 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue)
             if (oq_factor > (1.0 + ((double)cpi->zbin_over_quant / 64.0)))
                 oq_factor = (1.0 + (double)cpi->zbin_over_quant / 64.0);
 
-            cpi->RDMULT *= (int)oq_factor;
+            cpi->RDMULT = (int)(oq_factor * cpi->RDMULT);
         }
     }