summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2014-08-28 22:58:30 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2014-08-29 08:37:35 -0700
commit4282955ee12cc884ff9fd0875c82bd4c0940f8ea (patch)
tree3a0e1c02e1bc964b4b39ca2e47dc58b0d42137bc /vp9
parent02e6ecdc4c0bc1216f6748fe95ff6864d0f8304e (diff)
downloadlibvpx-4282955ee12cc884ff9fd0875c82bd4c0940f8ea.tar
libvpx-4282955ee12cc884ff9fd0875c82bd4c0940f8ea.tar.gz
libvpx-4282955ee12cc884ff9fd0875c82bd4c0940f8ea.tar.bz2
libvpx-4282955ee12cc884ff9fd0875c82bd4c0940f8ea.zip
Skip intra mode tests depending on inter residuals
This commit allows encoder to skip intra coding mode test, when the known inter residual is less than the source variance. It reduces the runtime of speed 3 for test clips: bus cif 1000 kbps: 8587 ms -> 8260 ms, 3.8% speed-up pedestrian 1080p 2000 kbps: 161381 ms -> 155241 ms, 3.7% speed-up. The compression performance is down by derf -0.36% stdhd -0.25% Change-Id: I75ce1e035b4da2153cb1ac14111d1a07c05a735d
Diffstat (limited to 'vp9')
-rw-r--r--vp9/encoder/vp9_rdopt.c6
-rw-r--r--vp9/encoder/vp9_speed_features.c2
-rw-r--r--vp9/encoder/vp9_speed_features.h3
3 files changed, 11 insertions, 0 deletions
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c
index d3a1db8bd..d5b8ddc23 100644
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -2794,6 +2794,10 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
}
if (ref_frame == INTRA_FRAME) {
+ if (cpi->sf.adaptive_mode_search)
+ if ((x->source_variance << num_pels_log2_lookup[bsize]) > best_intra_rd)
+ continue;
+
if (!(intra_y_mode_mask & (1 << this_mode)))
continue;
if (this_mode != DC_PRED) {
@@ -2966,6 +2970,8 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
/* required for left and above block mv */
mbmi->mv[0].as_int = 0;
max_plane = 1;
+ } else {
+ best_intra_rd = x->pred_sse[ref_frame];
}
*returnrate = rate2;
diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c
index 0bead48fe..36c02e031 100644
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -144,6 +144,7 @@ static void set_good_speed_feature(VP9_COMP *cpi, VP9_COMMON *cm,
sf->disable_split_mask = DISABLE_ALL_INTER_SPLIT;
}
sf->adaptive_pred_interp_filter = 0;
+ sf->adaptive_mode_search = 1;
sf->cb_partition_search = !boosted;
sf->cb_pred_filter_search = 1;
sf->alt_ref_search_fp = 1;
@@ -386,6 +387,7 @@ void vp9_set_speed_features(VP9_COMP *cpi) {
sf->use_lp32x32fdct = 0;
sf->adaptive_motion_search = 0;
sf->adaptive_pred_interp_filter = 0;
+ sf->adaptive_mode_search = 0;
sf->cb_pred_filter_search = 0;
sf->cb_partition_search = 0;
sf->motion_field_mode_search = 0;
diff --git a/vp9/encoder/vp9_speed_features.h b/vp9/encoder/vp9_speed_features.h
index e31185e59..33c441f62 100644
--- a/vp9/encoder/vp9_speed_features.h
+++ b/vp9/encoder/vp9_speed_features.h
@@ -291,6 +291,9 @@ typedef struct SPEED_FEATURES {
// was selected, and 2 means we use 8 tap if no 8x8 filter mode was selected.
int adaptive_pred_interp_filter;
+ // Adaptive prediction mode search
+ int adaptive_mode_search;
+
// Chessboard pattern prediction filter type search
int cb_pred_filter_search;