]> granicus.if.org Git - libvpx/commitdiff
vp9: Adjust the weight factor for segment rate cost for aq-mode=3.
authorMarco <marpan@google.com>
Mon, 5 Dec 2016 20:05:35 +0000 (12:05 -0800)
committerMarco <marpan@google.com>
Mon, 5 Dec 2016 20:42:56 +0000 (12:42 -0800)
Use the segment weight factor based on the target (cr->percent_refresh)
if it less than the current estimate (avergae of past usage and target).
Small improvement at low bitrates.

Change-Id: Iba8fd909e203f94458901366d3a991f7ea854d49

vp9/encoder/vp9_aq_cyclicrefresh.c

index 3149fe4075f71347266db13c3c77c9550901d5a1..3dc88b1914e9b79af6f91d5687b6e28a4418e7cd 100644 (file)
@@ -128,16 +128,20 @@ int vp9_cyclic_refresh_rc_bits_per_mb(const VP9_COMP *cpi, int i,
   CYCLIC_REFRESH *const cr = cpi->cyclic_refresh;
   int bits_per_mb;
   int num8x8bl = cm->MBs << 2;
+  // Compute delta-q corresponding to qindex i.
+  int deltaq = compute_deltaq(cpi, i, cr->rate_ratio_qdelta);
   // Weight for segment prior to encoding: take the average of the target
   // number for the frame to be encoded and the actual from the previous frame.
+  // Use the target if its less.
   int target_refresh = cr->percent_refresh * cm->mi_rows * cm->mi_cols / 100;
+  double weight_segment_target = (double)(target_refresh) / num8x8bl;
   double weight_segment =
       (double)((target_refresh + cr->actual_num_seg1_blocks +
                 cr->actual_num_seg2_blocks) >>
                1) /
       num8x8bl;
-  // Compute delta-q corresponding to qindex i.
-  int deltaq = compute_deltaq(cpi, i, cr->rate_ratio_qdelta);
+  if (weight_segment_target < 7 * weight_segment / 8)
+    weight_segment = weight_segment_target;
   // Take segment weighted average for bits per mb.
   bits_per_mb = (int)((1.0 - weight_segment) *
                           vp9_rc_bits_per_mb(cm->frame_type, i,