Refactor subpel_search_method setting
Change-Id: I35f7aa260a2b4bdf71c69d00aa2a547cd28aea3a
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 2e9ecfc..95a6060 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -2148,23 +2148,22 @@
rt_sf->check_globalmv_on_single_ref = true;
}
+static fractional_mv_step_fp
+ *const fractional_mv_search[SUBPEL_SEARCH_METHODS] = {
+ av1_find_best_sub_pixel_tree, // SUBPEL_TREE = 0
+ av1_find_best_sub_pixel_tree_pruned, // SUBPEL_TREE_PRUNED = 1
+ av1_find_best_sub_pixel_tree_pruned_more // SUBPEL_TREE_PRUNED_MORE = 2
+ };
+
// Populate appropriate sub-pel search method based on speed feature and user
// specified settings
static void set_subpel_search_method(
MotionVectorSearchParams *mv_search_params,
unsigned int motion_vector_unit_test,
- SUBPEL_SEARCH_METHODS subpel_search_method) {
- if (subpel_search_method == SUBPEL_TREE) {
- mv_search_params->find_fractional_mv_step = av1_find_best_sub_pixel_tree;
- } else if (subpel_search_method == SUBPEL_TREE_PRUNED) {
- mv_search_params->find_fractional_mv_step =
- av1_find_best_sub_pixel_tree_pruned;
- } else if (subpel_search_method == SUBPEL_TREE_PRUNED_MORE) {
- mv_search_params->find_fractional_mv_step =
- av1_find_best_sub_pixel_tree_pruned_more;
- } else {
- assert(0);
- }
+ SUBPEL_SEARCH_METHOD subpel_search_method) {
+ assert(subpel_search_method <= SUBPEL_TREE_PRUNED_MORE);
+ mv_search_params->find_fractional_mv_step =
+ fractional_mv_search[subpel_search_method];
// This is only used in motion vector unit test.
if (motion_vector_unit_test == 1)
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index bef24c1..e2acf52 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -134,7 +134,8 @@
SUBPEL_TREE = 0,
SUBPEL_TREE_PRUNED = 1, // Prunes 1/2-pel searches
SUBPEL_TREE_PRUNED_MORE = 2, // Prunes 1/2-pel searches more aggressively
-} UENUM1BYTE(SUBPEL_SEARCH_METHODS);
+ SUBPEL_SEARCH_METHODS
+} UENUM1BYTE(SUBPEL_SEARCH_METHOD);
enum {
// Try the full image with different values.
@@ -762,7 +763,7 @@
// logarithmic search that keeps stepping at 1/2 pixel units until
// you stop getting a gain, and then goes on to 1/4 and repeats
// the same process. Along the way it skips many diagonals.
- SUBPEL_SEARCH_METHODS subpel_search_method;
+ SUBPEL_SEARCH_METHOD subpel_search_method;
// Maximum number of steps in logarithmic subpel search before giving up.
int subpel_iters_per_step;