diff options
author | Jerome Jiang <jianj@google.com> | 2016-11-15 10:37:12 -0800 |
---|---|---|
committer | Jerome Jiang <jianj@google.com> | 2016-11-15 13:56:27 -0800 |
commit | 360217a233bf67f78a3ab60a6a36e75b20cef816 (patch) | |
tree | 3b2bfcfd6f3d75c6f0fdb515e408b1736e0fc5dd /vp9/encoder/vp9_encodeframe.c | |
parent | a3128ad33af5a348269c01c3fd3c30a1d8d53f39 (diff) | |
download | libvpx-360217a233bf67f78a3ab60a6a36e75b20cef816.tar libvpx-360217a233bf67f78a3ab60a6a36e75b20cef816.tar.gz libvpx-360217a233bf67f78a3ab60a6a36e75b20cef816.tar.bz2 libvpx-360217a233bf67f78a3ab60a6a36e75b20cef816.zip |
vp9: Speed 8: More aggresive golden skip for low res.
Add a new, more aggresive short circuit: short_circuit_low_temp_var = 3 to skip
golden of any mode when variance is lower than threshold for low res.
This change only affects speed = 8, low resolution.
Metrics for avgPSNR/SSIM on rtc_derf (low resolution) show loss of
0.27/0.31%.
On Nexus 6, the encoding time is reduced by ~2.3% on average across all
low-res clips.
Visually little change on rtc_derf clips.
Change-Id: Ia8f7366fc2d49181a96733a380b4dbd7390246ec
Diffstat (limited to 'vp9/encoder/vp9_encodeframe.c')
-rw-r--r-- | vp9/encoder/vp9_encodeframe.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 3ab05375f..5f1175bb7 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -742,9 +742,12 @@ static void set_low_temp_var_flag(VP9_COMP *cpi, MACROBLOCK *x, MACROBLOCKD *xd, continue; if ((*this_mi)->sb_type == BLOCK_32X32) { - if (vt->split[i].part_variances.none.variance < (thresholds[1] >> 1)) + int64_t threshold_32x32 = cpi->sf.short_circuit_low_temp_var == 3 + ? ((3 * thresholds[1]) >> 2) + : (thresholds[1] >> 1); + if (vt->split[i].part_variances.none.variance < threshold_32x32) x->variance_low[i + 5] = 1; - } else if (cpi->sf.short_circuit_low_temp_var == 2) { + } else if (cpi->sf.short_circuit_low_temp_var >= 2) { // For 32x16 and 16x32 blocks, the flag is set on each 16x16 block // inside. if ((*this_mi)->sb_type == BLOCK_16X16 || |