shithub: libvpx

Download patch

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) &&