Add FAST_BIGDIA motion search method
Change-Id: Ifc506a62719cfab0c1847f22b419ea9d29bd7998
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 375053f..d157685 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1719,7 +1719,7 @@
av1_init_motion_fpf(&mv_search_params->search_site_cfg[SS_CFG_FPF],
fpf_y_stride);
- if (cpi->sf.tpl_sf.search_method == FAST_DIAMOND) {
+ if (cpi->sf.tpl_sf.search_method == FAST_BIGDIA) {
av1_init_motion_compensation_bigdia(
&mv_search_params->search_site_cfg[SS_CFG_TPL_SRC], y_stride);
av1_init_motion_compensation_bigdia(
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index d1e415e..1401963 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -234,7 +234,7 @@
FULLPEL_MOTION_SEARCH_PARAMS ms_params;
av1_make_default_fullpel_ms_params(&ms_params, cpi, x, bsize, ref_mv,
first_pass_search_sites,
- fine_search_interval, 0);
+ fine_search_interval);
ms_params.search_method = NSTEP;
FULLPEL_MV this_best_mv;
diff --git a/av1/encoder/mcomp.c b/av1/encoder/mcomp.c
index bdbff81..9767338 100644
--- a/av1/encoder/mcomp.c
+++ b/av1/encoder/mcomp.c
@@ -80,8 +80,7 @@
const MACROBLOCK *x, BLOCK_SIZE bsize,
const MV *ref_mv,
const search_site_config *search_sites,
- int fine_search_interval,
- int fast_dia_search_level) {
+ int fine_search_interval) {
const MV_SPEED_FEATURES *mv_sf = &cpi->sf.mv_sf;
// High level params
@@ -106,7 +105,6 @@
ms_params->prune_mesh_search = mv_sf->prune_mesh_search;
ms_params->run_mesh_search = 0;
ms_params->fine_search_interval = fine_search_interval;
- ms_params->fast_dia_search_level = fast_dia_search_level;
ms_params->is_intra_mode = 0;
@@ -1454,14 +1452,18 @@
const FULLPEL_MOTION_SEARCH_PARAMS *ms_params,
const int search_step, const int do_init_search,
int *cost_list, FULLPEL_MV *best_mv) {
- if (ms_params->fast_dia_search_level)
- return bigdia_search_level1(start_mv, ms_params,
- AOMMAX(MAX_MVSEARCH_STEPS - 3, search_step),
- do_init_search, cost_list, best_mv);
- else
- return bigdia_search(start_mv, ms_params,
- AOMMAX(MAX_MVSEARCH_STEPS - 2, search_step),
- do_init_search, cost_list, best_mv);
+ return bigdia_search(start_mv, ms_params,
+ AOMMAX(MAX_MVSEARCH_STEPS - 2, search_step),
+ do_init_search, cost_list, best_mv);
+}
+
+static int fast_bigdia_search(const FULLPEL_MV start_mv,
+ const FULLPEL_MOTION_SEARCH_PARAMS *ms_params,
+ const int search_step, const int do_init_search,
+ int *cost_list, FULLPEL_MV *best_mv) {
+ return bigdia_search_level1(start_mv, ms_params,
+ AOMMAX(MAX_MVSEARCH_STEPS - 3, search_step),
+ do_init_search, cost_list, best_mv);
}
static int diamond_search_sad(FULLPEL_MV start_mv,
@@ -1888,6 +1890,10 @@
}
switch (search_method) {
+ case FAST_BIGDIA:
+ var = fast_bigdia_search(start_mv, ms_params, step_param, 0, cost_list,
+ best_mv);
+ break;
case FAST_DIAMOND:
var = fast_dia_search(start_mv, ms_params, step_param, 0, cost_list,
best_mv);
diff --git a/av1/encoder/mcomp.h b/av1/encoder/mcomp.h
index d4e2d6f..7cef4fc 100644
--- a/av1/encoder/mcomp.h
+++ b/av1/encoder/mcomp.h
@@ -136,7 +136,8 @@
BIGDIA = 3,
SQUARE = 4,
FAST_HEX = 5,
- FAST_DIAMOND = 6
+ FAST_DIAMOND = 6,
+ FAST_BIGDIA = 7,
} UENUM1BYTE(SEARCH_METHODS);
// This struct holds fullpixel motion search parameters that should be constant
@@ -170,11 +171,6 @@
// For calculating mv cost
MV_COST_PARAMS mv_cost_params;
-
- // Search level flag for FAST_DIAMOND search method.
- // 0 : Number of search steps 2
- // 1 : Number of search steps 3
- int fast_dia_search_level;
} FULLPEL_MOTION_SEARCH_PARAMS;
void av1_make_default_fullpel_ms_params(FULLPEL_MOTION_SEARCH_PARAMS *ms_params,
@@ -182,8 +178,7 @@
const MACROBLOCK *x, BLOCK_SIZE bsize,
const MV *ref_mv,
const search_site_config *search_sites,
- int fine_search_interval,
- int fast_dia_search_level);
+ int fine_search_interval);
// Sets up configs for fullpixel diamond search
void av1_init_dsmotion_compensation(search_site_config *cfg, int stride);
diff --git a/av1/encoder/motion_search_facade.c b/av1/encoder/motion_search_facade.c
index 809c08b..2db1c89 100644
--- a/av1/encoder/motion_search_facade.c
+++ b/av1/encoder/motion_search_facade.c
@@ -185,7 +185,7 @@
&mv_search_params->search_site_cfg[SS_CFG_SRC];
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, &ref_mv,
- src_search_sites, fine_search_interval, 0);
+ src_search_sites, fine_search_interval);
switch (mbmi->motion_mode) {
case SIMPLE_TRANSLATION: {
@@ -421,7 +421,7 @@
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize,
&ref_mv[id].as_mv, NULL,
- /*fine_search_interval=*/0, 0);
+ /*fine_search_interval=*/0);
av1_set_ms_compound_refs(&full_ms_params.ms_buffers, second_pred, mask,
mask_stride, id);
@@ -547,7 +547,7 @@
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize,
&ref_mv.as_mv, NULL,
- /*fine_search_interval=*/0, 0);
+ /*fine_search_interval=*/0);
av1_set_ms_compound_refs(&full_ms_params.ms_buffers, second_pred, mask,
mask_stride, ref_idx);
@@ -765,7 +765,7 @@
const int fine_search_interval = use_fine_search_interval(cpi);
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, &ref_mv,
- src_search_sites, fine_search_interval, 0);
+ src_search_sites, fine_search_interval);
var = av1_full_pixel_search(start_mv, &full_ms_params, step_param,
cond_cost_list(cpi, cost_list),
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 93a0c82..e2ccf6d 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -182,7 +182,7 @@
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, ¢er_mv,
src_search_sites,
- /*fine_search_interval=*/0, 0);
+ /*fine_search_interval=*/0);
av1_full_pixel_search(start_mv, &full_ms_params, step_param,
cond_cost_list(cpi, cost_list), &tmp_mv->as_fullmv,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 2875e6d..4b77551 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2963,7 +2963,7 @@
&cpi->mv_search_params.search_site_cfg[SS_CFG_LOOKAHEAD];
av1_make_default_fullpel_ms_params(&fullms_params, cpi, x, bsize,
&dv_ref.as_mv, lookahead_search_sites,
- /*fine_search_interval=*/0, 0);
+ /*fine_search_interval=*/0);
fullms_params.is_intra_mode = 1;
for (enum IntrabcMotionDirection dir = IBC_MOTION_ABOVE;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index fdf6107..c58eca9 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -563,8 +563,7 @@
sf->tpl_sf.prune_starting_mv = 2;
sf->tpl_sf.subpel_force_stop = HALF_PEL;
- sf->tpl_sf.search_method = FAST_DIAMOND;
- sf->tpl_sf.fast_dia_search_level = 1;
+ sf->tpl_sf.search_method = FAST_BIGDIA;
sf->tx_sf.tx_type_search.winner_mode_tx_type_pruning = 1;
sf->tx_sf.tx_type_search.fast_intra_tx_type_search = 1;
@@ -844,8 +843,6 @@
sf->rd_sf.optimize_coefficients = NO_TRELLIS_OPT;
sf->rd_sf.simple_model_rd_from_var = 1;
- sf->tpl_sf.search_method = FAST_DIAMOND;
-
sf->lpf_sf.cdef_pick_method = CDEF_PICK_FROM_Q;
sf->lpf_sf.lpf_pick = LPF_PICK_FROM_Q;
@@ -942,7 +939,6 @@
tpl_sf->subpel_force_stop = EIGHTH_PEL;
tpl_sf->search_method = NSTEP;
tpl_sf->disable_filtered_key_tpl = 0;
- tpl_sf->fast_dia_search_level = 0;
}
static AOM_INLINE void init_gm_sf(GLOBAL_MOTION_SPEED_FEATURES *gm_sf) {
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index a2d24fb..436d639 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -345,11 +345,6 @@
// Not run TPL for filtered Key frame.
int disable_filtered_key_tpl;
-
- // Search level flag for FAST_DIAMOND search method.
- // 0 : Number of search steps 2
- // 1 : Number of search steps 3
- int fast_dia_search_level;
} TPL_SPEED_FEATURES;
typedef struct GLOBAL_MOTION_SPEED_FEATURES {
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index 5a007b8..9ce3306 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -129,7 +129,7 @@
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, mb, block_size,
&baseline_mv, &search_site_cfg,
- /*fine_search_interval=*/0, 0);
+ /*fine_search_interval=*/0);
full_ms_params.run_mesh_search = 1;
full_ms_params.search_method = full_search_method;
full_ms_params.mv_cost_params.mv_cost_type = mv_cost_type;
@@ -182,7 +182,7 @@
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, mb,
subblock_size, &baseline_mv,
&search_site_cfg,
- /*fine_search_interval=*/0, 0);
+ /*fine_search_interval=*/0);
full_ms_params.run_mesh_search = 1;
full_ms_params.search_method = full_search_method;
full_ms_params.mv_cost_params.mv_cost_type = mv_cost_type;
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 013d034..84975b2 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -165,7 +165,7 @@
// When motion search method is FAST_DIAMOND retrive
// search_site_cfg from corresponding buffers.
- if (tpl_sf->search_method == FAST_DIAMOND) {
+ if (tpl_sf->search_method == FAST_BIGDIA) {
search_site_cfg = &cpi->mv_search_params.search_site_cfg[SS_CFG_TPL_SRC];
if (search_site_cfg->stride != stride_ref)
search_site_cfg =
@@ -179,9 +179,9 @@
assert(search_site_cfg->stride == stride_ref);
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
- av1_make_default_fullpel_ms_params(
- &full_ms_params, cpi, x, bsize, ¢er_mv, search_site_cfg,
- /*fine_search_interval=*/0, cpi->sf.tpl_sf.fast_dia_search_level);
+ av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, ¢er_mv,
+ search_site_cfg,
+ /*fine_search_interval=*/0);
full_ms_params.search_method = tpl_sf->search_method;
av1_full_pixel_search(start_mv, &full_ms_params, step_param,