rtc: Fix to skip_encoding_non_reference_slide_change For scene changes that occur on non_reference frames (highest temporal layer) the encoder will do a skip encoding. The logic to do this is in the variance_partitioning, but this path may be bypassed under high motion flag and sb source sad, which is not correct. This can lead to some superblocks not being skip encoded while others are. This fixes the artifact observed in comment#18 of the issue below. Bug: b:383306740 Change-Id: I35ca017edf352efe4e66a5cfbd2879ab73d8a0f6
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c index 6095c47..215b571 100644 --- a/av1/encoder/encodeframe.c +++ b/av1/encoder/encodeframe.c
@@ -549,6 +549,11 @@ x->content_state_sb.source_sad_nonrd < kLowSad) { bsize_select = cm->seq_params->sb_size; } + if (cpi->sf.rt_sf.skip_encoding_non_reference_slide_change && + cpi->rc.high_source_sad && cpi->ppi->rtc_ref.non_reference_frame) { + bsize_select = cm->seq_params->sb_size; + x->force_zeromv_skip_for_sb = 1; + } const BLOCK_SIZE bsize = seg_skip ? sb_size : bsize_select; if (x->content_state_sb.source_sad_nonrd > kZeroSad) x->force_color_check_block_level = 1;