summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Paniconi <marpan@google.com>2017-06-22 22:18:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-06-22 22:18:48 +0000
commit4f917912b992cddc4a9b08a19003cec3d968a44b (patch)
tree199c3b9911eb829d89c52552f2d1e4ddcf11ce8f
parentc5f9de573fbe1cb68df8a71b01f7185f0eb68d79 (diff)
parentd7515b1187905a75bde89b1b8fc19e500b994868 (diff)
downloadlibvpx-4f917912b992cddc4a9b08a19003cec3d968a44b.tar
libvpx-4f917912b992cddc4a9b08a19003cec3d968a44b.tar.gz
libvpx-4f917912b992cddc4a9b08a19003cec3d968a44b.tar.bz2
libvpx-4f917912b992cddc4a9b08a19003cec3d968a44b.zip
Merge "vp9: Add high source sad to content state."
-rw-r--r--vp9/encoder/vp9_encodeframe.c3
-rw-r--r--vp9/encoder/vp9_encoder.h1
-rw-r--r--vp9/encoder/vp9_pickmode.c3
3 files changed, 6 insertions, 1 deletions
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c
index 4b7e0ca77..786efd24a 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 672c83bfd..7ab892000 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 20b57f44c..17dc0637f 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) {