From dbea726dafcaa26af48583cec8bb73d0f014b616 Mon Sep 17 00:00:00 2001 From: Deb Mukherjee <debargha@google.com> Date: Thu, 1 Aug 2013 12:56:12 -0700 Subject: [PATCH] Adds a source variance computation function Adds a function to compute source variance for various sb_types to be used for pruning mode and partition searches. [The existing activity measure function is currently specialized for only 16x16 MBs and needs to be updated]. Change-Id: I22a41e6f1430184201487326fdbebb9b47e6fc24 --- vp9/common/vp9_common_data.c | 3 +++ vp9/common/vp9_common_data.h | 1 + vp9/encoder/vp9_encodeframe.c | 21 +++++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/vp9/common/vp9_common_data.c b/vp9/common/vp9_common_data.c index 7cd302a304..d272646960 100644 --- a/vp9/common/vp9_common_data.c +++ b/vp9/common/vp9_common_data.c @@ -35,6 +35,9 @@ const int num_8x8_blocks_high_lookup[BLOCK_SIZE_TYPES] = const int size_group_lookup[BLOCK_SIZE_TYPES] = {0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3}; +const int num_pels_log2_lookup[BLOCK_SIZE_TYPES] = + {4, 5, 5, 6, 7, 7, 8, 9, 9, 10, 11, 11, 12}; + const PARTITION_TYPE partition_lookup[][BLOCK_SIZE_TYPES] = { { // 4X4 diff --git a/vp9/common/vp9_common_data.h b/vp9/common/vp9_common_data.h index 44ec7ae752..b3c1ba3db8 100644 --- a/vp9/common/vp9_common_data.h +++ b/vp9/common/vp9_common_data.h @@ -22,6 +22,7 @@ extern const int num_8x8_blocks_high_lookup[BLOCK_SIZE_TYPES]; extern const int num_4x4_blocks_high_lookup[BLOCK_SIZE_TYPES]; extern const int num_4x4_blocks_wide_lookup[BLOCK_SIZE_TYPES]; extern const int size_group_lookup[BLOCK_SIZE_TYPES]; +extern const int num_pels_log2_lookup[BLOCK_SIZE_TYPES]; extern const PARTITION_TYPE partition_lookup[][BLOCK_SIZE_TYPES]; diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 458da3f9c9..0919dc6802 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -60,8 +60,25 @@ static void adjust_act_zbin(VP9_COMP *cpi, MACROBLOCK *x); * Eventually this should be replaced by custom no-reference routines, * which will be faster. */ -static const uint8_t VP9_VAR_OFFS[16] = {128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128}; +static const uint8_t VP9_VAR_OFFS[64] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128 +}; + +static unsigned int get_sb_variance(VP9_COMP *cpi, MACROBLOCK *x, + BLOCK_SIZE_TYPE bs) { + unsigned int var, sse; + var = cpi->fn_ptr[bs].vf(x->plane[0].src.buf, + x->plane[0].src.stride, + VP9_VAR_OFFS, 0, &sse); + return var >> num_pels_log2_lookup[bs]; +} // Original activity measure from Tim T's code. static unsigned int tt_activity_measure(VP9_COMP *cpi, MACROBLOCK *x) { -- GitLab