Account for inter prediction filter rate cost in rtc mode selection
authorJingning Han <jingning@google.com>
Mon, 9 Feb 2015 23:29:58 +0000 (15:29 -0800)
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>
Wed, 11 Feb 2015 20:17:29 +0000 (12:17 -0800)
Add the rate cost on inter prediction filter type to the overall
rate-distortion cost in vp9_pick_mode_inter.

Change-Id: I72c34017adf5220cadb3962694ee5404469fc673

vp9/encoder/vp9_pickmode.c

index 70e90b6..b592c78 100644 (file)
@@ -807,9 +807,8 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
           vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize);
           model_rd_for_sb_y(cpi, bsize, x, xd, &pf_rate[filter],
                             &pf_dist[filter], &pf_var[filter], &pf_sse[filter]);
-          cost = RDCOST(x->rdmult, x->rddiv,
-                        vp9_get_switchable_rate(cpi, xd) + pf_rate[filter],
-                        pf_dist[filter]);
+          pf_rate[filter] += vp9_get_switchable_rate(cpi, xd);
+          cost = RDCOST(x->rdmult, x->rddiv, pf_rate[filter], pf_dist[filter]);
           pf_tx_size[filter] = mbmi->tx_size;
           if (cost < best_cost) {
             best_filter = filter;
@@ -846,6 +845,8 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
         vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize);
         model_rd_for_sb_y(cpi, bsize, x, xd, &this_rdc.rate, &this_rdc.dist,
                           &var_y, &sse_y);
+        this_rdc.rate += cm->interp_filter == SWITCHABLE ?
+            vp9_get_switchable_rate(cpi, xd) : 0;
       }
 
       // chroma component rate-distortion cost modeling