Terminate partition search when NONE and SPLIT are invalid
Terminate partition search for child partition,
when NONE and SPLIT partition rd_costs are INT64_MAX.
Instruction Count BD-Rate Loss(%)
cpu-used Reduction(%) avg.psnr ovr.psnr ssim
4 1.358 0.0476 0.0492 0.0033
5 0.368 0.0262 0.0330 0.0281
6 0.346 0.0206 0.0221 0.0506
STATS_CHANGED
Change-Id: If973ebd29657b0c4b3e2607247139693988dafb8
diff --git a/av1/encoder/partition_search.c b/av1/encoder/partition_search.c
index d88ea23..8a6ee65 100644
--- a/av1/encoder/partition_search.c
+++ b/av1/encoder/partition_search.c
@@ -3514,6 +3514,14 @@
&part_search_state, &best_rdc, multi_pass_mode,
&part_split_rd);
+ // Terminate partition search for child partition,
+ // when NONE and SPLIT partition rd_costs are INT64_MAX.
+ if (cpi->sf.part_sf.early_term_after_none_split &&
+ part_none_rd == INT64_MAX && part_split_rd == INT64_MAX &&
+ !x->must_find_valid_partition && (bsize != cm->seq_params.sb_size)) {
+ part_search_state.terminate_partition_search = 1;
+ }
+
// Prune partitions based on PARTITION_NONE and PARTITION_SPLIT.
prune_partitions_after_split(cpi, x, sms_tree, &part_search_state, &best_rdc,
part_none_rd, part_split_rd);
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index da068b5..ce4fbee 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -537,6 +537,7 @@
sf->part_sf.simple_motion_search_prune_agg = 2;
sf->part_sf.simple_motion_search_reduce_search_steps = 4;
sf->part_sf.prune_ab_partition_using_split_info = 1;
+ sf->part_sf.early_term_after_none_split = 1;
sf->inter_sf.alt_ref_search_fp = 1;
sf->inter_sf.txfm_rd_gate_level = boosted ? 0 : 4;
@@ -997,6 +998,7 @@
part_sf->ext_partition_eval_thresh = BLOCK_8X8;
part_sf->prune_4_partition_using_split_info = 0;
part_sf->prune_ab_partition_using_split_info = 0;
+ part_sf->early_term_after_none_split = 0;
}
static AOM_INLINE void init_mv_sf(MV_SPEED_FEATURES *mv_sf) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index c415b17..1ed4ac6 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -469,6 +469,10 @@
// Prune AB partition search using split and HORZ/VERT info
int prune_ab_partition_using_split_info;
+
+ // Terminate partition search for child partition,
+ // when NONE and SPLIT partition rd_costs are INT64_MAX.
+ int early_term_after_none_split;
} PARTITION_SPEED_FEATURES;
typedef struct MV_SPEED_FEATURES {