shithub: libvpx

Download patch

ref: 734dc36173769bd0334b58b2173da4ece1ae1cf5
parent: f51dd8c2ac7dcdbc269918b0d0fe30920f5641f7
author: Marco <[email protected]>
date: Mon Feb 1 06:52:49 EST 2016

vp9: Add flag to control usage of skin detection.

Set off as default; on for 1 pass cbr mode, speed >=5, non-screen-content.

Change-Id: I03f2497e4028b354fd83b8a7d0e072c2a6bec878

--- a/vp9/encoder/vp9_aq_cyclicrefresh.c
+++ b/vp9/encoder/vp9_aq_cyclicrefresh.c
@@ -210,7 +210,7 @@
   int is_skin = 0;
   if (refresh_this_block == 0 &&
       bsize <= BLOCK_16X16 &&
-      cpi->oxcf.content != VP9E_CONTENT_SCREEN) {
+      cpi->use_skin_detection) {
     is_skin = vp9_compute_skin_block(p[0].src.buf,
                                      p[1].src.buf,
                                      p[2].src.buf,
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -779,8 +779,8 @@
     // (i.e., y_sad < cpi->vbp_threshold_sad) below. For now leave this as is.
     x->sb_is_skin = 0;
 #if !CONFIG_VP9_HIGHBITDEPTH
-    if (cpi->oxcf.content != VP9E_CONTENT_SCREEN && (!low_res && (mi_col >= 8 &&
-        mi_col + 8 < cm->mi_cols && mi_row >= 8 && mi_row + 8 < cm->mi_rows))) {
+    if (cpi->use_skin_detection && !low_res && (mi_col >= 8 &&
+        mi_col + 8 < cm->mi_cols && mi_row >= 8 && mi_row + 8 < cm->mi_rows)) {
       int num_16x16_skin = 0;
       int num_16x16_nonskin = 0;
       uint8_t *ysignal = x->plane[0].src.buf;
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -1671,6 +1671,7 @@
   cpi->resize_state = 0;
   cpi->resize_avg_qp = 0;
   cpi->resize_buffer_underflow = 0;
+  cpi->use_skin_detection = 0;
   cpi->common.buffer_pool = pool;
 
   cpi->rc.high_source_sad = 0;
@@ -3329,6 +3330,14 @@
 
   set_size_independent_vars(cpi);
   set_size_dependent_vars(cpi, &q, &bottom_index, &top_index);
+
+  if (cpi->oxcf.speed >= 5 &&
+      cpi->oxcf.pass == 0 &&
+      cpi->oxcf.rc_mode == VPX_CBR &&
+      cpi->oxcf.content != VP9E_CONTENT_SCREEN &&
+      cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ) {
+    cpi->use_skin_detection = 1;
+  }
 
   vp9_set_quantizer(cm, q);
   vp9_set_variance_partition_thresholds(cpi, q);
--- a/vp9/encoder/vp9_encoder.h
+++ b/vp9/encoder/vp9_encoder.h
@@ -494,6 +494,8 @@
   int resize_buffer_underflow;
   int resize_count;
 
+  int use_skin_detection;
+
   NOISE_ESTIMATE noise_estimate;
 
   // VAR_BASED_PARTITION thresholds