]> granicus.if.org Git - libvpx/commitdiff
vp9-svc: Fix to non-rd pickmode for screen content
authorMarco Paniconi <marpan@google.com>
Thu, 31 Jan 2019 00:30:49 +0000 (16:30 -0800)
committerMarco Paniconi <marpan@google.com>
Thu, 31 Jan 2019 00:47:52 +0000 (16:47 -0800)
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

vp9/encoder/vp9_pickmode.c

index 0fdc61649268318c3c8982284e90a5d34ce5218b..2d34100d7284ab1a13ab7030a07b2ba41e1a63e1 100644 (file)
@@ -1943,8 +1943,9 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
   // 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 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
   // 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) &&