ref: 8d488e8c3b301804bf0287a27f06972affa96378
parent: 47f8ce0f7c6ee95598d336263d6714abe19aa204
author: Marco Paniconi <[email protected]>
date: Fri Mar 8 05:04:31 EST 2019
vp9-screen: Fix to screen wth layered encoding 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
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -1265,10 +1265,11 @@
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).
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -2033,6 +2033,7 @@
// 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 &&