vp9-rtc: Adjust force split logic for screen mode
In variance partition for screen content mode: force split to 32x32 if source pre-process detects non-zero temporal sad. Reduce artifacts in scroll motion content. Change-Id: Ifbe2b500eb03ae853faa28a045ce4f1185443939
This commit is contained in:
@@ -1265,9 +1265,10 @@ static int choose_partitioning(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
int pixels_wide = 64, pixels_high = 64;
|
||||
int64_t thresholds[4] = { cpi->vbp_thresholds[0], cpi->vbp_thresholds[1],
|
||||
cpi->vbp_thresholds[2], cpi->vbp_thresholds[3] };
|
||||
int scene_change_detected =
|
||||
int force_64_split =
|
||||
cpi->rc.high_source_sad ||
|
||||
(cpi->use_svc && cpi->svc.high_source_sad_superframe);
|
||||
(cpi->use_svc && cpi->svc.high_source_sad_superframe) ||
|
||||
(cpi->oxcf.content == VP9E_CONTENT_SCREEN && !x->zero_temp_sad_source);
|
||||
|
||||
// For the variance computation under SVC mode, we treat the frame as key if
|
||||
// the reference (base layer frame) is key frame (i.e., is_key_frame == 1).
|
||||
@@ -1330,7 +1331,7 @@ static int choose_partitioning(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
}
|
||||
// If source_sad is low copy the partition without computing the y_sad.
|
||||
if (x->skip_low_source_sad && cpi->sf.copy_partition_flag &&
|
||||
!scene_change_detected &&
|
||||
!force_64_split &&
|
||||
copy_partitioning(cpi, x, xd, mi_row, mi_col, segment_id, sb_offset)) {
|
||||
x->sb_use_mv_part = 1;
|
||||
if (cpi->sf.svc_use_lowres_part &&
|
||||
@@ -1359,7 +1360,7 @@ static int choose_partitioning(VP9_COMP *cpi, const TileInfo *const tile,
|
||||
|
||||
// Index for force_split: 0 for 64x64, 1-4 for 32x32 blocks,
|
||||
// 5-20 for the 16x16 blocks.
|
||||
force_split[0] = scene_change_detected;
|
||||
force_split[0] = force_64_split;
|
||||
|
||||
if (!is_key_frame) {
|
||||
// In the case of spatial/temporal scalable coding, the assumption here is
|
||||
|
||||
Reference in New Issue
Block a user