Setup frame segmentation for perceptual quality target
authorJingning Han <jingning@google.com>
Fri, 15 Mar 2019 03:26:49 +0000 (20:26 -0700)
committerJingning Han <jingning@google.com>
Fri, 15 Mar 2019 03:29:24 +0000 (20:29 -0700)
Build the frame segmentation for perceptual quality target.

Change-Id: Icdea28aea02d84ce9c8011f63a3f97133f94a141

vp9/encoder/vp9_encodeframe.c

index 57d74b0..0141b48 100644 (file)
@@ -5873,6 +5873,20 @@ static void encode_frame_internal(VP9_COMP *cpi) {
       cpi->rd.r0 = (double)intra_cost_base / mc_dep_cost_base;
   }
 
+  // Frame segmentation
+  if (cpi->sf.enable_wiener_variance && cm->show_frame) {
+    int mi_row, mi_col;
+    cpi->kmeans_data_size = 0;
+    cpi->kmeans_ctr_num = 5;
+
+    for (mi_row = 0; mi_row < cm->mi_rows; mi_row += MI_BLOCK_SIZE)
+      for (mi_col = 0; mi_col < cm->mi_cols; mi_col += MI_BLOCK_SIZE)
+        wiener_var_rdmult(cpi, BLOCK_64X64, mi_row, mi_col, cpi->rd.RDMULT);
+
+    vp9_kmeans(cpi->kmeans_ctr_ls, cpi->kmeans_boundary_ls, cpi->kmeans_ctr_num,
+               cpi->kmeans_data_arr, cpi->kmeans_data_size);
+  }
+
   {
     struct vpx_usec_timer emr_timer;
     vpx_usec_timer_start(&emr_timer);
@@ -5884,11 +5898,6 @@ static void encode_frame_internal(VP9_COMP *cpi) {
     }
 #endif
 
-    if (cpi->sf.enable_wiener_variance && cm->show_frame) {
-      cpi->kmeans_data_size = 0;
-      cpi->kmeans_ctr_num = 5;
-    }
-
     if (!cpi->row_mt) {
       cpi->row_mt_sync_read_ptr = vp9_row_mt_sync_read_dummy;
       cpi->row_mt_sync_write_ptr = vp9_row_mt_sync_write_dummy;
@@ -5904,12 +5913,6 @@ static void encode_frame_internal(VP9_COMP *cpi) {
       vp9_encode_tiles_row_mt(cpi);
     }
 
-    if (cpi->sf.enable_wiener_variance && cm->show_frame) {
-      vp9_kmeans(cpi->kmeans_ctr_ls, cpi->kmeans_boundary_ls,
-                 cpi->kmeans_ctr_num, cpi->kmeans_data_arr,
-                 cpi->kmeans_data_size);
-    }
-
     vpx_usec_timer_mark(&emr_timer);
     cpi->time_encode_sb_row += vpx_usec_timer_elapsed(&emr_timer);
   }