Normalize the Wiener variance for ranking
authorJingning Han <jingning@google.com>
Mon, 18 Mar 2019 20:52:05 +0000 (13:52 -0700)
committerJingning Han <jingning@google.com>
Mon, 18 Mar 2019 22:35:17 +0000 (15:35 -0700)
Normalize the Wiener variance calculation for stack ranking. Remove
potential dependency on blocks at frame boundary.

Change-Id: I37e8634d714a1c34e99f9f7c4f1bb6ea81d56112

vp9/encoder/vp9_encodeframe.c

index 825d8d9..bc0691b 100644 (file)
@@ -3604,9 +3604,11 @@ static int wiener_var_segment(VP9_COMP *cpi, BLOCK_SIZE bsize, int mi_row,
     for (col = mb_col_start; col < mb_col_end; ++col)
       wiener_variance += cpi->mb_wiener_variance[row * cm->mb_cols + col];
 
+  wiener_variance /= (mb_row_end - mb_row_start) * (mb_col_end - mb_col_start);
 #if CONFIG_MULTITHREAD
   pthread_mutex_lock(&cpi->kmeans_mutex);
 #endif  // CONFIG_MULTITHREAD
+
   kmeans_data = &cpi->kmeans_data_arr[cpi->kmeans_data_size++];
   kmeans_data->value = log(1.0 + wiener_variance) / log(2.0);
   kmeans_data->pos = mi_row * cpi->kmeans_data_stride + mi_col;