From d7515b1187905a75bde89b1b8fc19e500b994868 Mon Sep 17 00:00:00 2001 From: Marco Date: Wed, 21 Jun 2017 20:39:59 -0700 Subject: [PATCH] vp9: Add high source sad to content state. Use it to limit NEWMV early exit in nonrd pickmode Small change in RTC metrics, has some improvement for high motion clips. Change-Id: I1d89fd955e1b3486d5fb07f4472eeeecd553f67f --- vp9/encoder/vp9_encodeframe.c | 3 +++ vp9/encoder/vp9_encoder.h | 1 + vp9/encoder/vp9_pickmode.c | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 4b7e0ca..786efd2 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1022,6 +1022,9 @@ static void avg_source_sad(VP9_COMP *cpi, MACROBLOCK *x, int shift, if (tmp_variance < (tmp_sse >> 3) && (tmp_sse - tmp_variance) > 10000) x->content_state_sb = kLowVarHighSumdiff; + if (tmp_sad > (avg_source_sad_threshold << 1)) + x->content_state_sb = kVeryHighSad; + if (cpi->content_state_sb_fd != NULL) { if (tmp_sad < avg_source_sad_threshold2) { // Cap the increment to 255. diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h index 672c83b..7ab8920 100644 --- a/vp9/encoder/vp9_encoder.h +++ b/vp9/encoder/vp9_encoder.h @@ -138,6 +138,7 @@ typedef enum { kHighSadLowSumdiff = 3, kHighSadHighSumdiff = 4, kLowVarHighSumdiff = 5, + kVeryHighSad = 6, } CONTENT_STATE_SB; typedef struct VP9EncoderConfig { diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index 20b57f4..17dc063 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -1693,7 +1693,8 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data, continue; } - if ((cpi->sf.short_circuit_low_temp_var >= 2 || + if (x->content_state_sb != kVeryHighSad && + (cpi->sf.short_circuit_low_temp_var >= 2 || (cpi->sf.short_circuit_low_temp_var == 1 && bsize == BLOCK_64X64)) && force_skip_low_temp_var && ref_frame == LAST_FRAME && this_mode == NEWMV) { -- 2.7.4