vp9-screen: Fix to screen wth layered encoding
authorMarco Paniconi <marpan@google.com>
Fri, 8 Mar 2019 18:04:31 +0000 (10:04 -0800)
committerMarco Paniconi <marpan@google.com>
Fri, 8 Mar 2019 18:41:36 +0000 (10:41 -0800)
zero_temp_sad_source is only computed when
compute_source_sad_onepass and sf->use_source_sad are
on, which currently is only for the top layer of the
layered encoding. So qualify the usage of
zero_temp_sad_source on those flags.

This affects the quality/speed of the lower layers of
screen content mode when SVC (quality layers) are used.

Change-Id: I54167265a05a4b918ce015931375aa42d3e75cf5

vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_pickmode.c

index 5ed46f2..b4cda00 100644 (file)
@@ -1265,10 +1265,11 @@ 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 force_64_split =
-      cpi->rc.high_source_sad ||
-      (cpi->use_svc && cpi->svc.high_source_sad_superframe) ||
-      (cpi->oxcf.content == VP9E_CONTENT_SCREEN && !x->zero_temp_sad_source);
+  int force_64_split = cpi->rc.high_source_sad ||
+                       (cpi->use_svc && cpi->svc.high_source_sad_superframe) ||
+                       (cpi->oxcf.content == VP9E_CONTENT_SCREEN &&
+                        cpi->compute_source_sad_onepass &&
+                        cpi->sf.use_source_sad && !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).
index b799a11..558210c 100644 (file)
@@ -2033,6 +2033,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
     // stationary blocks, only skip zero motion check for non-stationary blocks.
     if (cpi->oxcf.content == VP9E_CONTENT_SCREEN &&
         sf->short_circuit_flat_blocks && x->source_variance == 0 &&
+        cpi->compute_source_sad_onepass && cpi->sf.use_source_sad &&
         ((frame_mv[this_mode][ref_frame].as_int != 0 &&
           x->zero_temp_sad_source) ||
          (frame_mv[this_mode][ref_frame].as_int == 0 &&