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