]> granicus.if.org Git - libvpx/commitdiff
Refactor tpl_model_store input parameters
authorJingning Han <jingning@google.com>
Fri, 27 Jul 2018 17:10:33 +0000 (10:10 -0700)
committerJingning Han <jingning@google.com>
Tue, 31 Jul 2018 02:48:23 +0000 (19:48 -0700)
Simplify the pass-in data structure. Use a reference TplDepStats
pointer to replace multiple data sent in.

Change-Id: Ibebced5d7f411d2c4a8a34a9b7eb87453fb78d13

vp9/encoder/vp9_encoder.c

index c20cf4875107482ddcda4eaab3295e7aed5f00af..b702faa3aa8956570134c294932c9dafb34011b2 100644 (file)
@@ -5661,27 +5661,29 @@ int round_floor(int ref_pos, int bsize_pix) {
 }
 
 void tpl_model_store(TplDepStats *tpl_stats, int mi_row, int mi_col,
-                     BLOCK_SIZE bsize, int stride, int64_t intra_cost,
-                     int64_t inter_cost, int ref_frame_idx, int_mv mv) {
+                     BLOCK_SIZE bsize, int stride,
+                     const TplDepStats *src_stats) {
   const int mi_height = num_8x8_blocks_high_lookup[bsize];
   const int mi_width = num_8x8_blocks_wide_lookup[bsize];
   int idx, idy;
 
-  intra_cost = intra_cost / (mi_height * mi_width);
-  inter_cost = inter_cost / (mi_height * mi_width);
+  int64_t intra_cost = src_stats->intra_cost / (mi_height * mi_width);
+  int64_t inter_cost = src_stats->inter_cost / (mi_height * mi_width);
+
+  TplDepStats *tpl_ptr;
 
   intra_cost = VPXMAX(1, intra_cost);
   inter_cost = VPXMAX(1, inter_cost);
 
   for (idy = 0; idy < mi_height; ++idy) {
+    tpl_ptr = &tpl_stats[(mi_row + idy) * stride + mi_col];
     for (idx = 0; idx < mi_width; ++idx) {
-      TplDepStats *tpl_ptr =
-          &tpl_stats[(mi_row + idy) * stride + (mi_col + idx)];
       tpl_ptr->intra_cost = intra_cost;
       tpl_ptr->inter_cost = inter_cost;
       tpl_ptr->mc_dep_cost = tpl_ptr->intra_cost + tpl_ptr->mc_flow;
-      tpl_ptr->ref_frame_index = ref_frame_idx;
-      tpl_ptr->mv.as_int = mv.as_int;
+      tpl_ptr->ref_frame_index = src_stats->ref_frame_index;
+      tpl_ptr->mv.as_int = src_stats->mv.as_int;
+      ++tpl_ptr;
     }
   }
 }
@@ -5817,6 +5819,8 @@ void mode_estimation(VP9_COMP *cpi, MACROBLOCK *x, MACROBLOCKD *xd,
   int mb_y_offset = mi_row * MI_SIZE * xd->cur_buf->y_stride + mi_col * MI_SIZE;
   MODE_INFO mi_above, mi_left;
 
+  memset(tpl_stats, 0, sizeof(*tpl_stats));
+
   xd->mb_to_top_edge = -((mi_row * MI_SIZE) * 8);
   xd->mb_to_bottom_edge = ((cm->mi_rows - 1 - mi_row) * MI_SIZE) * 8;
   xd->mb_to_left_edge = -((mi_col * MI_SIZE) * 8);
@@ -6002,9 +6006,7 @@ void mc_flow_dispenser(VP9_COMP *cpi, GF_PICTURE *gf_picture, int frame_idx) {
 
       // Motion flow dependency dispenser.
       tpl_model_store(tpl_frame->tpl_stats_ptr, mi_row, mi_col, bsize,
-                      tpl_frame->stride, tpl_stats.intra_cost,
-                      tpl_stats.inter_cost, tpl_stats.ref_frame_index,
-                      tpl_stats.mv);
+                      tpl_frame->stride, &tpl_stats);
 
       tpl_model_update(cpi->tpl_stats, tpl_frame->tpl_stats_ptr, mi_row, mi_col,
                        bsize);