AV1 RT: Limit RT RDO TX types to DCT only
5-6% speed up on Speed6 on lowres with 0.5% BDRate loss
1.4% Max BDRate loss
No impact on other speeds
Change-Id: I0aa260b563d19dbcbe58dc088c1578efccefdc7d
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 0024c66..6035876 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -813,6 +813,7 @@
sf->tx_sf.tx_type_search.prune_mode = PRUNE_2D_MORE;
sf->tx_sf.use_inter_txb_hash = 0;
+ sf->tx_sf.refine_fast_tx_search_results = 0;
sf->rd_sf.optimize_coefficients = NO_TRELLIS_OPT;
sf->rd_sf.simple_model_rd_from_var = 1;
@@ -1042,6 +1043,7 @@
tx_sf->adaptive_txb_search_level = 0;
tx_sf->use_intra_txb_hash = 0;
tx_sf->use_inter_txb_hash = 1;
+ tx_sf->refine_fast_tx_search_results = 1;
}
static AOM_INLINE void init_rd_sf(RD_CALC_SPEED_FEATURES *rd_sf,
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index e45c18c..acb1e35 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -766,6 +766,9 @@
// Use hash table to store inter txb transform search results
// to avoid repeated search on the same residue signal.
int use_inter_txb_hash;
+
+ // Refine TX type after fast TX search.
+ int refine_fast_tx_search_results;
} TX_SPEED_FEATURES;
typedef struct RD_CALC_SPEED_FEATURES {
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c
index ee85454..d6a0fdc 100644
--- a/av1/encoder/tx_search.c
+++ b/av1/encoder/tx_search.c
@@ -3154,7 +3154,7 @@
// If fast_tx_search is true, only DCT and 1D DCT were tested in
// select_inter_block_yrd() above. Do a better search for tx type with
// tx sizes already decided.
- if (fast_tx_search) {
+ if (fast_tx_search && cpi->sf.tx_sf.refine_fast_tx_search_results) {
if (!inter_block_yrd(cpi, x, rd_stats, bsize, ref_best_rd, FTXS_NONE))
return INT64_MAX;
}
diff --git a/test/rt_end_to_end_test.cc b/test/rt_end_to_end_test.cc
index 1de22f0..124a719 100644
--- a/test/rt_end_to_end_test.cc
+++ b/test/rt_end_to_end_test.cc
@@ -32,11 +32,11 @@
std::unordered_map<std::string,
std::unordered_map<int, std::unordered_map<int, double>>>
kPsnrThreshold = { { "park_joy_90p_8_420.y4m",
- { { 6, { { 0, 35.4 }, { 3, 36.2 } } },
+ { { 6, { { 0, 35.3 }, { 3, 36.2 } } },
{ 7, { { 0, 34.9 }, { 3, 35.8 } } },
{ 8, { { 0, 35.0 }, { 3, 35.8 } } } } },
{ "paris_352_288_30.y4m",
- { { 6, { { 0, 36.2 }, { 3, 36.7 } } },
+ { { 6, { { 0, 36.1 }, { 3, 36.6 } } },
{ 7, { { 0, 35.5 }, { 3, 36.0 } } },
{ 8, { { 0, 36.0 }, { 3, 36.5 } } } } },
{ "niklas_1280_720_30.y4m",