]> granicus.if.org Git - libvpx/commitdiff
Remove rate component adjustment for AQ1
authorPaul Wilkins <paulwilkins@google.com>
Fri, 21 Nov 2014 02:32:44 +0000 (18:32 -0800)
committerPaul Wilkins <paulwilkins@google.com>
Fri, 21 Nov 2014 16:51:58 +0000 (08:51 -0800)
In AQ1 a rate adjustment was applied for blocks coded with a
deltaq. This tends to skew the partition selection and cause
rate overshoot.

For example, consider a 64x64 super block where some but not all
sub blocks are in a low q segment and some are in a high q segment.
The choice of Q when considering large partition and transform sizes
is defined by the lowest sub block segment id (currently this implies the
lowest Q). If some parts of the larger partition are very hard this will
cause a high rate component.

The correct behavior here is for the rd code to discard the large partition
choice and break down to sub blocks where some have low and some
have high Q.  However the rate correction factor above mask the high
cost of coding at a larger partition size.

Change-Id: Ie077edd0b1b43c094898f481df772ea280b35960

vp9/encoder/vp9_encodeframe.c

index 7ab240b019cbff307f17a7859b8a47005e0cb92d..49272590dae485702af6465ddf35ff2d0f81a91c 100644 (file)
@@ -807,10 +807,8 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
   struct macroblockd_plane *const pd = xd->plane;
   const AQ_MODE aq_mode = cpi->oxcf.aq_mode;
   int i, orig_rdmult;
-  double rdmult_ratio;
 
   vp9_clear_system_state();
-  rdmult_ratio = 1.0;  // avoid uninitialized warnings
 
   // Use the lower precision, but faster, 32x32 fdct for mode selection.
   x->use_lp32x32fdct = 1;
@@ -866,8 +864,6 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
     segment_qindex = vp9_get_qindex(&cm->seg, mbmi->segment_id,
                                     cm->base_qindex);
     x->rdmult = vp9_compute_rd_mult(cpi, segment_qindex + cm->y_dc_delta_q);
-    vp9_clear_system_state();
-    rdmult_ratio = (double)x->rdmult / orig_rdmult;
   } else if (aq_mode == COMPLEXITY_AQ) {
     const int mi_offset = mi_row * cm->mi_cols + mi_col;
     unsigned char complexity = cpi->complexity_map[mi_offset];
@@ -901,12 +897,6 @@ static void rd_pick_sb_modes(VP9_COMP *cpi,
     }
   }
 
-  if (aq_mode == VARIANCE_AQ && rd_cost->rate != INT_MAX) {
-    vp9_clear_system_state();
-    rd_cost->rate = (int)round(rd_cost->rate * rdmult_ratio);
-    rd_cost->rdcost = RDCOST(x->rdmult, x->rddiv, rd_cost->rate, rd_cost->dist);
-  }
-
   x->rdmult = orig_rdmult;
 
   // TODO(jingning) The rate-distortion optimization flow needs to be