Use a smaller subset of intra modes in tpl speed 5
The quality change is negligible, but improves speed by up to 3% when
bitrate is low.
STATS_CHANGED
Change-Id: I46ce8963f155493f0eb4a721ed318e9c01063aef
diff --git a/av1/common/enums.h b/av1/common/enums.h
index d5a9151..a91c45e 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -411,6 +411,8 @@
MB_MODE_COUNT,
INTRA_MODE_START = DC_PRED,
INTRA_MODE_END = NEARESTMV,
+ DIR_MODE_START = V_PRED,
+ DIR_MODE_END = D67_PRED + 1,
INTRA_MODE_NUM = INTRA_MODE_END - INTRA_MODE_START,
SINGLE_INTER_MODE_START = NEARESTMV,
SINGLE_INTER_MODE_END = NEAREST_NEARESTMV,
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index b5858ec..b1c5eae 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -493,6 +493,7 @@
sf->disable_interinter_wedge = 1;
sf->disable_smooth_interintra = 1;
sf->disable_onesided_comp = 1;
+ sf->tpl_sf.prune_intra_modes = 1;
}
}
@@ -922,6 +923,7 @@
sf->skip_repeated_newmv = 0;
// TODO(any) Cleanup this speed feature
sf->prune_single_motion_modes_by_simple_trans = 0;
+ sf->tpl_sf.prune_intra_modes = 0;
// Set decoder side speed feature to use less dual sgr modes
sf->dual_sgr_penalty_level = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 5043382..bbf358f 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -247,6 +247,13 @@
SUBPEL_FORCE_STOP subpel_force_stop;
} MV_SPEED_FEATURES;
+typedef struct TPL_SPEED_FEATURES {
+ // Prune the intra modes search by tpl. If set to 0, we will search all intra
+ // modes from DC_PRED to PAETH_PRED. If set to one, we only search DC_PRED and
+ // the direction modes
+ int prune_intra_modes;
+} TPL_SPEED_FEATURES;
+
#define MAX_MESH_STEP 4
typedef struct MESH_PATTERN {
@@ -320,6 +327,9 @@
// adds overhead.
int static_segmentation;
+ // Speed features related to how tpl's searches are done.
+ TPL_SPEED_FEATURES tpl_sf;
+
/*
* Global motion speed features:
*/
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 92cca91..3d5e909 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -187,7 +187,6 @@
int64_t best_intra_cost = INT64_MAX;
int64_t intra_cost;
- PREDICTION_MODE mode;
PREDICTION_MODE best_mode = DC_PRED;
int mb_y_offset = mi_row * MI_SIZE * xd->cur_buf->y_stride + mi_col * MI_SIZE;
@@ -232,7 +231,10 @@
#endif
}
- for (mode = DC_PRED; mode <= PAETH_PRED; ++mode) {
+ const PREDICTION_MODE last_intra_mode =
+ cpi->sf.tpl_sf.prune_intra_modes ? DIR_MODE_END : INTRA_MODE_END;
+ for (PREDICTION_MODE mode = INTRA_MODE_START; mode < last_intra_mode;
+ ++mode) {
uint8_t *src;
uint8_t *dst;
int dst_stride;