Only search the largest tx_size for cbs above 64
If any dimension of a coding block size is above 64, only search
the largest transform block size, since the max transform block
size supported is 64x64.
Bring back this under a speed 1 feature. The encoding goes 2.5%
faster.
Stats change expected.
Change-Id: I50ed7565cd4f83ff78c83ea6c80d56f5ef3cbb6d
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index e94c797..51403f8 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2455,6 +2455,13 @@
static int get_search_init_depth(int mi_width, int mi_height,
const SPEED_FEATURES *sf) {
if (sf->tx_size_search_method == USE_LARGESTALL) return MAX_VARTX_DEPTH;
+
+ if (sf->tx_size_search_lgr_block) {
+ if (mi_width > mi_size_wide[BLOCK_64X64] ||
+ mi_height > mi_size_high[BLOCK_64X64])
+ return MAX_VARTX_DEPTH;
+ }
+
return (mi_height != mi_width) ? sf->tx_size_search_init_depth_rect
: sf->tx_size_search_init_depth_sqr;
}
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 072b8e7..21cbff7 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -146,6 +146,7 @@
sf->selective_ref_frame = 1;
sf->tx_size_search_init_depth_rect = 1;
sf->tx_size_search_init_depth_sqr = 1;
+ sf->tx_size_search_lgr_block = 1;
sf->two_pass_partition_search = 1;
sf->prune_ext_partition_types_search = 1;
sf->use_fast_interpolation_filter_search = 1;
@@ -411,6 +412,7 @@
sf->tx_size_search_method = USE_FULL_RD;
sf->tx_size_search_init_depth_sqr = 0;
sf->tx_size_search_init_depth_rect = 0;
+ sf->tx_size_search_lgr_block = 0;
sf->reduce_inter_modes = 0;
sf->adaptive_motion_search = 0;
sf->adaptive_pred_interp_filter = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 6d82381..6e52618 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -346,6 +346,9 @@
// 0 - search full tree, 1: search 1 level, 2: search the highest level only
int tx_size_search_init_depth_sqr;
int tx_size_search_init_depth_rect;
+ // If any dimension of a coding block size above 64, always search the
+ // largest transform only, since the largest transform block size is 64x64.
+ int tx_size_search_lgr_block;
// After looking at the first set of modes (set by index here), skip
// checking modes for reference frames that don't match the reference frame