ref: 037c8e6b13ce0956be08b86fa56545963d42e5f7
parent: e7d45715dc108f3ada42fb04c2aa9363a2e3d170
author: Marco Paniconi <marpan@google.com>
date: Wed Jan 30 11:30:49 EST 2019
vp9-svc: Fix to non-rd pickmode for screen content For screen content mode: always force intra check for spatially flat blocks that have moved. Also adjust/fix condition for forcing check of zeromv-golden for quality layers. Reduces artifacts in screensharing tests. Change-Id: Iafd62fb24a4e05f5b12af663dde2805fdb4c7b36
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -1943,8 +1943,9 @@
// For SVC with quality layers, when QP of lower layer is lower
// than current layer: force check of GF-ZEROMV before early exit
// due to skip flag.
- if (svc->spatial_layer_id > 0 && usable_ref_frame == GOLDEN_FRAME &&
- no_scaling && cm->base_qindex > svc->lower_layer_qindex + 10)
+ if (svc->spatial_layer_id > 0 && no_scaling &&
+ (cpi->ref_frame_flags & flag_list[GOLDEN_FRAME]) &&
+ cm->base_qindex > svc->lower_layer_qindex + 10)
force_test_gf_zeromv = 1;
for (idx = 0; idx < num_inter_modes + comp_modes; ++idx) {
@@ -2407,6 +2408,8 @@
// Perform intra prediction search, if the best SAD is above a certain
// threshold.
if (best_rdc.rdcost == INT64_MAX ||
+ (cpi->oxcf.content == VP9E_CONTENT_SCREEN && x->source_variance == 0 &&
+ !x->zero_temp_sad_source) ||
(scene_change_detected && perform_intra_pred) ||
((!force_skip_low_temp_var || bsize < BLOCK_32X32 ||
x->content_state_sb == kVeryHighSad) &&