Fix vp9_compute_qdelta_by_rate loop behavior
authorAdrian Grange <agrange@google.com>
Tue, 10 Mar 2015 16:14:54 +0000 (09:14 -0700)
committerAdrian Grange <agrange@google.com>
Tue, 10 Mar 2015 16:14:54 +0000 (09:14 -0700)
The return value from vp9_compute_qdelta_by_rate, which is
a delta value for the quantizer, could never be 0 if
(qindex == rc->worst_quality).

This occurs because target_index was setup unconditionally
in the loop and yet the loop counter stopped at
(rc->worst_quality - 1).

Change-Id: I6b59cd9b5811ff33357e71cd7d814c5e53d291f2

vp9/encoder/vp9_ratectrl.c

index f33fe51..79a89af 100644 (file)
@@ -1595,11 +1595,12 @@ int vp9_compute_qdelta_by_rate(const RATE_CONTROL *rc, FRAME_TYPE frame_type,
 
   // Convert the q target to an index
   for (i = rc->best_quality; i < rc->worst_quality; ++i) {
-    target_index = i;
-    if (vp9_rc_bits_per_mb(frame_type, i, 1.0, bit_depth) <= target_bits_per_mb)
+    if (vp9_rc_bits_per_mb(frame_type, i, 1.0, bit_depth) <=
+        target_bits_per_mb) {
+      target_index = i;
       break;
+    }
   }
-
   return target_index - qindex;
 }