ref: 43fc0879082e9c010c08c68c6147527f0d859bf9
parent: 8971779e60c5127d2cf0d74b0b6493a07e3e5132
author: Marco Paniconi <marpan@google.com>
date: Fri Mar 1 06:18:36 EST 2019
vp9-rtc: Fix for scroll motion for rtc Increase threshold to detect frames with high num of motion blocks, and fix conditions to detect horiz & vert scroll and avoid split below 16x16 blocks in variance partition. Reduces artifacts in horizonal scroll screenshare testing. Change-Id: Icf5b87f69971d7331c660fc2727c9246c6cbf8b5
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -1424,14 +1424,16 @@
x->sb_mvcol_part = mi->mv[0].as_mv.col;
x->sb_mvrow_part = mi->mv[0].as_mv.row;
if (cpi->oxcf.content == VP9E_CONTENT_SCREEN &&
- cpi->svc.spatial_layer_id == 0 &&
+ cpi->svc.spatial_layer_id == cpi->svc.first_spatial_layer_to_encode &&
cpi->svc.high_num_blocks_with_motion && !x->zero_temp_sad_source &&
cm->width > 640 && cm->height > 480) {
- // Disable split below 16x16 block size when scroll motion is detected.
+ // Disable split below 16x16 block size when scroll motion (horz or
+ // vert) is detected.
// TODO(marpan/jianj): Improve this condition: issue is that search
// range is hard-coded/limited in vp9_int_pro_motion_estimation() so
// scroll motion may not be detected here.
- if ((abs(x->sb_mvrow_part) >= 48 && abs(x->sb_mvcol_part) <= 8) ||
+ if (((abs(x->sb_mvrow_part) >= 48 && abs(x->sb_mvcol_part) <= 8) ||
+ (abs(x->sb_mvcol_part) >= 48 && abs(x->sb_mvrow_part) <= 8)) &&
y_sad < 100000) {
compute_minmax_variance = 0;
thresholds[2] = INT64_MAX;
--- a/vp9/encoder/vp9_ratectrl.c
+++ b/vp9/encoder/vp9_ratectrl.c
@@ -2932,7 +2932,7 @@
} else {
rc->avg_source_sad[lagframe_idx] = avg_sad;
}
- if (num_zero_temp_sad < (num_samples >> 1))
+ if (num_zero_temp_sad < (3 * num_samples >> 2))
rc->high_num_blocks_with_motion = 1;
}
}