]> granicus.if.org Git - libvpx/commitdiff
vp9: Fix condition to update consec_zero_mv.
authorMarco <marpan@google.com>
Mon, 25 Apr 2016 21:34:41 +0000 (14:34 -0700)
committerMarco <marpan@google.com>
Mon, 25 Apr 2016 22:29:11 +0000 (15:29 -0700)
Fix will reset the consec_zero_mv map on non-skipped blocks with non-zero mv.
Adjust thresholds on consec_zero_mv in noise estimation and skin detection,
as more possible reset on map means lower thresholds should be used.

Change-Id: Ibe8520057472b3609585260b51b6f95a38fb777d

vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_noise_estimate.c
vp9/encoder/vp9_skin_detection.c

index 5b679d25ec51d7afdc60bf0feecb9c06ba94988d..bedb4af6dd4bd78de63551c57db6bbc88e31f3cb 100644 (file)
@@ -4295,8 +4295,7 @@ static void update_zeromv_cnt(VP9_COMP *const cpi,
   for (y = 0; y < ymis; y++)
     for (x = 0; x < xmis; x++) {
       int map_offset = block_index + y * cm->mi_cols + x;
-      if (is_inter_block(mi) && mi->skip &&
-          mi->segment_id <= CR_SEGMENT_ID_BOOST2) {
+      if (is_inter_block(mi) && mi->segment_id <= CR_SEGMENT_ID_BOOST2) {
         if (abs(mv.row) < 8 && abs(mv.col) < 8) {
           if (cpi->consec_zero_mv[map_offset] < 255)
            cpi->consec_zero_mv[map_offset]++;
index d4fee6f9beaa6e77a5451b8eba33889b24d67cb9..c3351afe02c098b09a43088d7fd2a7b367d0e6d1 100644 (file)
@@ -102,7 +102,7 @@ void vp9_update_noise_estimate(VP9_COMP *const cpi) {
   NOISE_ESTIMATE *const ne = &cpi->noise_estimate;
   // Estimate of noise level every frame_period frames.
   int frame_period = 10;
-  int thresh_consec_zeromv = 8;
+  int thresh_consec_zeromv = 6;
   unsigned int thresh_sum_diff = 100;
   unsigned int thresh_sum_spatial = (200 * 200) << 8;
   unsigned int thresh_spatial_var = (32 * 32) << 8;
index ff0dfce679005a4c445fd49bc9716d91f756cc74..a6d67cf6ad3d6ef8563714b8efb322bc0c0230a4 100644 (file)
@@ -88,7 +88,7 @@ int vp9_compute_skin_block(const uint8_t *y, const uint8_t *u, const uint8_t *v,
                            int stride, int strideuv, int bsize,
                            int consec_zeromv, int curr_motion_magn) {
   // No skin if block has been zero/small motion for long consecutive time.
-  if (consec_zeromv > 80 && curr_motion_magn == 0) {
+  if (consec_zeromv > 60 && curr_motion_magn == 0) {
     return 0;
   } else {
     int motion = 1;
@@ -100,7 +100,7 @@ int vp9_compute_skin_block(const uint8_t *y, const uint8_t *u, const uint8_t *v,
     const uint8_t ysource = y[y_height_shift * stride + y_width_shift];
     const uint8_t usource = u[uv_height_shift * strideuv + uv_width_shift];
     const uint8_t vsource = v[uv_height_shift * strideuv + uv_width_shift];
-    if (consec_zeromv > 30 && curr_motion_magn == 0)
+    if (consec_zeromv > 25 && curr_motion_magn == 0)
       motion = 0;
     return vp9_skin_pixel(ysource, usource, vsource, motion);
   }