From c012d63ec968ab4f20c0cb43f47f80d87bfaf475 Mon Sep 17 00:00:00 2001 From: Paul Wilkins Date: Thu, 20 May 2010 16:49:39 +0100 Subject: [PATCH] Fixed incorrect casts that broke rate control in some situations. --- vp8/encoder/ratectrl.c | 7 +++++-- vp8/encoder/rdopt.c | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/vp8/encoder/ratectrl.c b/vp8/encoder/ratectrl.c index ad54c5e..7ab9605 100644 --- a/vp8/encoder/ratectrl.c +++ b/vp8/encoder/ratectrl.c @@ -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) diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 0846996..601c529 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -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); } } -- 2.7.4