Modularize MV search parameters in AV1_COMP
The motion vector search related parameters in AV1_COMP have been
grouped into a substructure MotionVectorSearchParams.
BUG=aomedia:2610
Change-Id: Iee827deefb79df65c04ac5c9edfc5258fe8f6c41
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c
index e66a733..167e9c0 100644
--- a/av1/encoder/encodemv.c
+++ b/av1/encoder/encodemv.c
@@ -193,7 +193,8 @@
// motion vector component used.
if (cpi->sf.mv_sf.auto_mv_step_size) {
int maxv = AOMMAX(abs(mv->row), abs(mv->col)) >> 3;
- cpi->max_mv_magnitude = AOMMAX(maxv, cpi->max_mv_magnitude);
+ cpi->mv_search_params.max_mv_magnitude =
+ AOMMAX(maxv, cpi->mv_search_params.max_mv_magnitude);
}
}
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index eeba604..53f376b 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -3952,26 +3952,27 @@
static void set_mv_search_params(AV1_COMP *cpi) {
const AV1_COMMON *const cm = &cpi->common;
+ MotionVectorSearchParams *const mv_search_params = &cpi->mv_search_params;
const int max_mv_def = AOMMAX(cm->width, cm->height);
// Default based on max resolution.
- cpi->mv_step_param = av1_init_search_range(max_mv_def);
+ mv_search_params->mv_step_param = av1_init_search_range(max_mv_def);
if (cpi->sf.mv_sf.auto_mv_step_size) {
if (frame_is_intra_only(cm)) {
// Initialize max_mv_magnitude for use in the first INTER frame
// after a key/intra-only frame.
- cpi->max_mv_magnitude = max_mv_def;
+ mv_search_params->max_mv_magnitude = max_mv_def;
} else {
// Use cpi->max_mv_magnitude == -1 to exclude first pass case.
- if (cm->show_frame && cpi->max_mv_magnitude != -1) {
+ if (cm->show_frame && mv_search_params->max_mv_magnitude != -1) {
// Allow mv_steps to correspond to twice the max mv magnitude found
// in the previous frame, capped by the default max_mv_magnitude based
// on resolution.
- cpi->mv_step_param = av1_init_search_range(
- AOMMIN(max_mv_def, 2 * cpi->max_mv_magnitude));
+ mv_search_params->mv_step_param = av1_init_search_range(
+ AOMMIN(max_mv_def, 2 * mv_search_params->max_mv_magnitude));
}
- cpi->max_mv_magnitude = -1;
+ mv_search_params->max_mv_magnitude = -1;
}
}
}
@@ -4225,6 +4226,7 @@
static void init_motion_estimation(AV1_COMP *cpi) {
AV1_COMMON *const cm = &cpi->common;
+ MotionVectorSearchParams *const mv_search_params = &cpi->mv_search_params;
const int y_stride = cpi->scaled_source.y_stride;
const int y_stride_src =
((cpi->oxcf.width != cm->width || cpi->oxcf.height != cm->height) ||
@@ -4235,23 +4237,27 @@
: cpi->scaled_source.y_stride;
// Update if ss_cfg is uninitialized or the current frame has a new stride
- const int should_update = !cpi->ss_cfg[SS_CFG_SRC].stride ||
- !cpi->ss_cfg[SS_CFG_LOOKAHEAD].stride ||
- (y_stride != cpi->ss_cfg[SS_CFG_SRC].stride);
+ const int should_update =
+ !mv_search_params->ss_cfg[SS_CFG_SRC].stride ||
+ !mv_search_params->ss_cfg[SS_CFG_LOOKAHEAD].stride ||
+ (y_stride != mv_search_params->ss_cfg[SS_CFG_SRC].stride);
if (!should_update) {
return;
}
if (cpi->sf.mv_sf.search_method == DIAMOND) {
- av1_init_dsmotion_compensation(&cpi->ss_cfg[SS_CFG_SRC], y_stride);
- av1_init_dsmotion_compensation(&cpi->ss_cfg[SS_CFG_LOOKAHEAD],
+ av1_init_dsmotion_compensation(&mv_search_params->ss_cfg[SS_CFG_SRC],
+ y_stride);
+ av1_init_dsmotion_compensation(&mv_search_params->ss_cfg[SS_CFG_LOOKAHEAD],
y_stride_src);
} else {
- av1_init3smotion_compensation(&cpi->ss_cfg[SS_CFG_SRC], y_stride);
- av1_init3smotion_compensation(&cpi->ss_cfg[SS_CFG_LOOKAHEAD], y_stride_src);
+ av1_init3smotion_compensation(&mv_search_params->ss_cfg[SS_CFG_SRC],
+ y_stride);
+ av1_init3smotion_compensation(&mv_search_params->ss_cfg[SS_CFG_LOOKAHEAD],
+ y_stride_src);
}
- av1_init_motion_fpf(&cpi->ss_cfg[SS_CFG_FPF], fpf_y_stride);
+ av1_init_motion_fpf(&mv_search_params->ss_cfg[SS_CFG_FPF], fpf_y_stride);
}
#define COUPLED_CHROMA_FROM_LUMA_RESTORATION 0
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 0a23299..826e9a6 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -834,6 +834,30 @@
} GlobalMotionInfo;
typedef struct {
+ // Largest MV component used in a frame.
+ // The value from the previous frame is used to set the full pixel search
+ // range for the current frame.
+ int max_mv_magnitude;
+ // Parameter indicating initial search window to be used in full-pixel search.
+ // Range [0, MAX_MVSEARCH_STEPS-2]. Lower value indicates larger window.
+ int mv_step_param;
+ // Pointer to sub-pixel search function.
+ // In encoder: av1_find_best_sub_pixel_tree
+ // av1_find_best_sub_pixel_tree_pruned
+ // av1_find_best_sub_pixel_tree_pruned_more
+ // av1_find_best_sub_pixel_tree_pruned_evenmore
+ // In MV unit test: av1_return_max_sub_pixel_mv
+ // av1_return_min_sub_pixel_mv
+ fractional_mv_step_fp *find_fractional_mv_step;
+ // Search site configuration for full-pel MV search.
+ // ss_cfg[SS_CFG_SRC]: Used in tpl, rd/non-rd inter mode loop, simple motion
+ // search.
+ // ss_cfg[SS_CFG_LOOKAHEAD]: Used in intraBC, temporal filter
+ // ss_cfg[SS_CFG_FPF]: Used during first pass and lookahead
+ search_site_config ss_cfg[SS_CFG_TOTAL];
+} MotionVectorSearchParams;
+
+typedef struct {
int arf_stack[FRAME_BUFFERS];
int arf_stack_size;
int lst_stack[FRAME_BUFFERS];
@@ -980,8 +1004,8 @@
// sf contains fine-grained config set internally based on speed
SPEED_FEATURES sf;
- int max_mv_magnitude;
- int mv_step_param;
+ // Parameters for motion vector search process.
+ MotionVectorSearchParams mv_search_params;
int all_one_sided_refs;
@@ -990,7 +1014,6 @@
CYCLIC_REFRESH *cyclic_refresh;
ActiveMap active_map;
- fractional_mv_step_fp *find_fractional_mv_step;
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL];
#if CONFIG_INTERNAL_STATS
@@ -1064,12 +1087,6 @@
int resize_pending_width;
int resize_pending_height;
- // ss_cfg[SS_CFG_LOOKAHEAD] : used in following cases
- // -> temporal filtering
- // -> intrabc
- // ss_cfg[SS_CFG_SRC] : used everywhere except above mentioned cases
- search_site_config ss_cfg[SS_CFG_TOTAL];
-
TileDataEnc *tile_data;
int allocated_tiles; // Keep track of memory allocated for tiles.
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index a61f6fd..d0cd939 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -232,7 +232,8 @@
const int step_param = 3 + sr;
int cost_list[5];
- const search_site_config *first_pass_search_sites = &cpi->ss_cfg[SS_CFG_FPF];
+ const search_site_config *first_pass_search_sites =
+ &cpi->mv_search_params.ss_cfg[SS_CFG_FPF];
FULLPEL_MOTION_SEARCH_PARAMS ms_params;
av1_make_default_fullpel_ms_params(&ms_params, cpi, x, bsize, ref_mv,
first_pass_search_sites);
diff --git a/av1/encoder/motion_search_facade.c b/av1/encoder/motion_search_facade.c
index 0259aa3..e12fc4e 100644
--- a/av1/encoder/motion_search_facade.c
+++ b/av1/encoder/motion_search_facade.c
@@ -25,6 +25,7 @@
int search_range, inter_mode_info *mode_info) {
MACROBLOCKD *xd = &x->e_mbd;
const AV1_COMMON *cm = &cpi->common;
+ const MotionVectorSearchParams *mv_search_params = &cpi->mv_search_params;
const int num_planes = av1_num_planes(cm);
MB_MODE_INFO *mbmi = xd->mi[0];
struct buf_2d backup_yv12[MAX_MB_PLANE] = { { 0, 0, 0, 0, 0 } };
@@ -54,11 +55,11 @@
// Take the weighted average of the step_params based on the last frame's
// max mv magnitude and that based on the best ref mvs of the current
// block for the given reference.
- step_param =
- (av1_init_search_range(x->max_mv_context[ref]) + cpi->mv_step_param) /
- 2;
+ step_param = (av1_init_search_range(x->max_mv_context[ref]) +
+ mv_search_params->mv_step_param) /
+ 2;
} else {
- step_param = cpi->mv_step_param;
+ step_param = mv_search_params->mv_step_param;
}
if (cpi->sf.mv_sf.adaptive_motion_search && bsize < cm->seq_params.sb_size) {
@@ -102,7 +103,7 @@
// Further reduce the search range.
if (search_range < INT_MAX) {
- const search_site_config *ss_cfg = &cpi->ss_cfg[SS_CFG_SRC];
+ const search_site_config *ss_cfg = &mv_search_params->ss_cfg[SS_CFG_SRC];
// MAx step_param is ss_cfg->ss_count.
if (search_range < 1) {
step_param = ss_cfg->ss_count;
@@ -124,7 +125,8 @@
int_mv second_best_mv;
x->best_mv.as_int = second_best_mv.as_int = INVALID_MV;
- const search_site_config *src_search_sites = &cpi->ss_cfg[SS_CFG_SRC];
+ const search_site_config *src_search_sites =
+ &mv_search_params->ss_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);
@@ -215,7 +217,7 @@
if (cpi->sf.mv_sf.use_accurate_subpel_search) {
const int try_second = second_best_mv.as_int != INVALID_MV &&
second_best_mv.as_int != x->best_mv.as_int;
- const int best_mv_var = cpi->find_fractional_mv_step(
+ const int best_mv_var = mv_search_params->find_fractional_mv_step(
xd, cm, &ms_params, subpel_start_mv, &x->best_mv.as_mv, &dis,
&x->pred_sse[ref], fractional_ms_list);
@@ -224,16 +226,16 @@
subpel_start_mv = get_mv_from_fullmv(&second_best_mv.as_fullmv);
if (av1_is_subpelmv_in_range(&ms_params.mv_limits,
subpel_start_mv)) {
- const int this_var = cpi->find_fractional_mv_step(
+ const int this_var = mv_search_params->find_fractional_mv_step(
xd, cm, &ms_params, subpel_start_mv, &this_best_mv, &dis,
&x->pred_sse[ref], fractional_ms_list);
if (this_var < best_mv_var) x->best_mv.as_mv = this_best_mv;
}
}
} else {
- cpi->find_fractional_mv_step(xd, cm, &ms_params, subpel_start_mv,
- &x->best_mv.as_mv, &dis,
- &x->pred_sse[ref], NULL);
+ mv_search_params->find_fractional_mv_step(
+ xd, cm, &ms_params, subpel_start_mv, &x->best_mv.as_mv, &dis,
+ &x->pred_sse[ref], NULL);
}
break;
case OBMC_CAUSAL:
@@ -411,7 +413,7 @@
mask, mask_stride, id);
ms_params.forced_stop = EIGHTH_PEL;
MV start_mv = get_mv_from_fullmv(&x->best_mv.as_fullmv);
- bestsme = cpi->find_fractional_mv_step(
+ bestsme = cpi->mv_search_params.find_fractional_mv_step(
xd, cm, &ms_params, start_mv, &x->best_mv.as_mv, &dis, &sse, NULL);
}
@@ -531,7 +533,7 @@
ref_idx);
ms_params.forced_stop = EIGHTH_PEL;
MV start_mv = get_mv_from_fullmv(&best_int_mv->as_fullmv);
- bestsme = cpi->find_fractional_mv_step(
+ bestsme = cpi->mv_search_params.find_fractional_mv_step(
xd, cm, &ms_params, start_mv, &best_int_mv->as_mv, &dis, &sse, NULL);
}
@@ -688,8 +690,9 @@
struct buf_2d backup_yv12;
// ref_mv is used to calculate the cost of the motion vector
const MV ref_mv = kZeroMv;
- const int step_param = cpi->mv_step_param;
- const search_site_config *src_search_sites = &cpi->ss_cfg[SS_CFG_SRC];
+ const int step_param = cpi->mv_search_params.mv_step_param;
+ const search_site_config *src_search_sites =
+ &cpi->mv_search_params.ss_cfg[SS_CFG_SRC];
int cost_list[5];
const int ref_idx = 0;
int var;
@@ -730,9 +733,9 @@
invert_mask);
MV subpel_start_mv = get_mv_from_fullmv(&x->best_mv.as_fullmv);
- cpi->find_fractional_mv_step(xd, cm, &ms_params, subpel_start_mv,
- &x->best_mv.as_mv, ¬_used,
- &x->pred_sse[ref], NULL);
+ cpi->mv_search_params.find_fractional_mv_step(
+ xd, cm, &ms_params, subpel_start_mv, &x->best_mv.as_mv, ¬_used,
+ &x->pred_sse[ref], NULL);
} else {
// Manually convert from units of pixel to 1/8-pixels if we are not doing
// subpel search
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index e6aebca..bc8d4e6 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -124,7 +124,7 @@
const int num_planes = av1_num_planes(cm);
MB_MODE_INFO *mi = xd->mi[0];
struct buf_2d backup_yv12[MAX_MB_PLANE] = { { 0, 0, 0, 0, 0 } };
- int step_param = cpi->mv_step_param;
+ int step_param = cpi->mv_search_params.mv_step_param;
FULLPEL_MV start_mv;
const int ref = mi->ref_frame[0];
const MV ref_mv = av1_get_ref_mv(x, mi->ref_mv_idx).as_mv;
@@ -153,7 +153,8 @@
else
center_mv = tmp_mv->as_mv;
- const search_site_config *src_search_sites = &cpi->ss_cfg[SS_CFG_SRC];
+ const search_site_config *src_search_sites =
+ &cpi->mv_search_params.ss_cfg[SS_CFG_SRC];
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
av1_make_default_fullpel_ms_params(&full_ms_params, cpi, x, bsize, ¢er_mv,
src_search_sites);
@@ -182,9 +183,9 @@
cost_list, second_pred, mask, mask_stride,
invert_mask);
MV subpel_start_mv = get_mv_from_fullmv(&x->best_mv.as_fullmv);
- cpi->find_fractional_mv_step(xd, cm, &ms_params, subpel_start_mv,
- &x->best_mv.as_mv, &dis, &x->pred_sse[ref],
- NULL);
+ cpi->mv_search_params.find_fractional_mv_step(
+ xd, cm, &ms_params, subpel_start_mv, &x->best_mv.as_mv, &dis,
+ &x->pred_sse[ref], NULL);
*tmp_mv = x->best_mv;
*rate_mv = av1_mv_bit_cost(&tmp_mv->as_mv, &ref_mv, x->nmv_vec_cost,
@@ -244,9 +245,9 @@
cost_list, second_pred, mask, mask_stride,
invert_mask);
MV start_mv = get_mv_from_fullmv(&x->best_mv.as_fullmv);
- cpi->find_fractional_mv_step(xd, cm, &ms_params, start_mv,
- &x->best_mv.as_mv, &dis,
- &x->pred_sse[ref_frame], NULL);
+ cpi->mv_search_params.find_fractional_mv_step(
+ xd, cm, &ms_params, start_mv, &x->best_mv.as_mv, &dis,
+ &x->pred_sse[ref_frame], NULL);
frame_mv[NEWMV][ref_frame].as_int = x->best_mv.as_int;
} else if (!combined_motion_search(cpi, x, bsize, mi_row, mi_col,
&frame_mv[NEWMV][ref_frame], rate_mv,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index f911733..31e1897 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2694,7 +2694,7 @@
FULLPEL_MOTION_SEARCH_PARAMS fullms_params;
const search_site_config *lookahead_search_sites =
- &cpi->ss_cfg[SS_CFG_LOOKAHEAD];
+ &cpi->mv_search_params.ss_cfg[SS_CFG_LOOKAHEAD];
av1_make_default_fullpel_ms_params(&fullms_params, cpi, x, bsize,
&dv_ref.as_mv, lookahead_search_sites);
fullms_params.is_intra_mode = 1;
@@ -2740,7 +2740,7 @@
continue;
}
- const int step_param = cpi->mv_step_param;
+ const int step_param = cpi->mv_search_params.mv_step_param;
const FULLPEL_MV start_mv = get_fullmv_from_mv(&dv_ref.as_mv);
int cost_list[5];
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 81b3f17..a085e44 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1114,9 +1114,9 @@
// This is only used in motion vector unit test.
if (cpi->oxcf.motion_vector_unit_test == 1)
- cpi->find_fractional_mv_step = av1_return_max_sub_pixel_mv;
+ cpi->mv_search_params.find_fractional_mv_step = av1_return_max_sub_pixel_mv;
else if (cpi->oxcf.motion_vector_unit_test == 2)
- cpi->find_fractional_mv_step = av1_return_min_sub_pixel_mv;
+ cpi->mv_search_params.find_fractional_mv_step = av1_return_min_sub_pixel_mv;
MACROBLOCK *const x = &cpi->td.mb;
AV1_COMMON *const cm = &cpi->common;
@@ -1193,14 +1193,18 @@
// No recode or trellis for 1 pass.
if (oxcf->pass == 0) sf->hl_sf.recode_loop = DISALLOW_RECODE;
+ MotionVectorSearchParams *const mv_search_params = &cpi->mv_search_params;
if (sf->mv_sf.subpel_search_method == SUBPEL_TREE) {
- cpi->find_fractional_mv_step = av1_find_best_sub_pixel_tree;
+ mv_search_params->find_fractional_mv_step = av1_find_best_sub_pixel_tree;
} else if (sf->mv_sf.subpel_search_method == SUBPEL_TREE_PRUNED) {
- cpi->find_fractional_mv_step = av1_find_best_sub_pixel_tree_pruned;
+ mv_search_params->find_fractional_mv_step =
+ av1_find_best_sub_pixel_tree_pruned;
} else if (sf->mv_sf.subpel_search_method == SUBPEL_TREE_PRUNED_MORE) {
- cpi->find_fractional_mv_step = av1_find_best_sub_pixel_tree_pruned_more;
+ mv_search_params->find_fractional_mv_step =
+ av1_find_best_sub_pixel_tree_pruned_more;
} else if (sf->mv_sf.subpel_search_method == SUBPEL_TREE_PRUNED_EVENMORE) {
- cpi->find_fractional_mv_step = av1_find_best_sub_pixel_tree_pruned_evenmore;
+ mv_search_params->find_fractional_mv_step =
+ av1_find_best_sub_pixel_tree_pruned_evenmore;
}
x->min_partition_size = AOMMAX(sf->part_sf.default_min_partition_size,
@@ -1212,9 +1216,9 @@
// This is only used in motion vector unit test.
if (cpi->oxcf.motion_vector_unit_test == 1)
- cpi->find_fractional_mv_step = av1_return_max_sub_pixel_mv;
+ mv_search_params->find_fractional_mv_step = av1_return_max_sub_pixel_mv;
else if (cpi->oxcf.motion_vector_unit_test == 2)
- cpi->find_fractional_mv_step = av1_return_min_sub_pixel_mv;
+ mv_search_params->find_fractional_mv_step = av1_return_min_sub_pixel_mv;
// assert ensures that tx_domain_dist_level is accessed correctly
assert(cpi->sf.rd_sf.tx_domain_dist_thres_level >= 0 &&
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index da770a0..8303967 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -89,7 +89,8 @@
FULLPEL_MOTION_SEARCH_PARAMS full_ms_params;
SUBPEL_MOTION_SEARCH_PARAMS ms_params;
- const search_site_config ss_cfg = cpi->ss_cfg[SS_CFG_LOOKAHEAD];
+ const search_site_config ss_cfg =
+ cpi->mv_search_params.ss_cfg[SS_CFG_LOOKAHEAD];
const SEARCH_METHODS full_search_method = NSTEP;
const int step_param = av1_init_search_range(
AOMMAX(frame_to_filter->y_crop_width, frame_to_filter->y_crop_height));
@@ -150,9 +151,9 @@
ms_params.forced_stop = EIGHTH_PEL;
ms_params.var_params.subpel_search_type = subpel_search_type;
MV subpel_start_mv = get_mv_from_fullmv(&mb->best_mv.as_fullmv);
- error = cpi->find_fractional_mv_step(&mb->e_mbd, &cpi->common, &ms_params,
- subpel_start_mv, &mb->best_mv.as_mv,
- &distortion, &sse, NULL);
+ error = cpi->mv_search_params.find_fractional_mv_step(
+ &mb->e_mbd, &cpi->common, &ms_params, subpel_start_mv,
+ &mb->best_mv.as_mv, &distortion, &sse, NULL);
block_mse = DIVIDE_AND_ROUND(error, mb_pels);
mb->e_mbd.mi[0]->mv[0] = mb->best_mv;
*ref_mv = mb->best_mv.as_mv;
@@ -188,7 +189,7 @@
ms_params.forced_stop = EIGHTH_PEL;
ms_params.var_params.subpel_search_type = subpel_search_type;
subpel_start_mv = get_mv_from_fullmv(&mb->best_mv.as_fullmv);
- error = cpi->find_fractional_mv_step(
+ error = cpi->mv_search_params.find_fractional_mv_step(
&mb->e_mbd, &cpi->common, &ms_params, subpel_start_mv,
&mb->best_mv.as_mv, &distortion, &sse, NULL);
subblock_mses[subblock_idx] = DIVIDE_AND_ROUND(error, subblock_pels);
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index f846f88..7973412 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -142,8 +142,9 @@
step_param = tpl_sf->reduce_first_step_size;
step_param = AOMMIN(step_param, MAX_MVSEARCH_STEPS - 2);
- search_site_config *ss_cfg = &cpi->ss_cfg[SS_CFG_SRC];
- if (ss_cfg->stride != stride_ref) ss_cfg = &cpi->ss_cfg[SS_CFG_LOOKAHEAD];
+ search_site_config *ss_cfg = &cpi->mv_search_params.ss_cfg[SS_CFG_SRC];
+ if (ss_cfg->stride != stride_ref)
+ ss_cfg = &cpi->mv_search_params.ss_cfg[SS_CFG_LOOKAHEAD];
assert(ss_cfg->stride == stride_ref);
@@ -167,9 +168,9 @@
ms_params.var_params.subpel_search_type = USE_2_TAPS;
ms_params.mv_cost_params.mv_cost_type = MV_COST_NONE;
MV subpel_start_mv = get_mv_from_fullmv(&x->best_mv.as_fullmv);
- bestsme =
- cpi->find_fractional_mv_step(xd, cm, &ms_params, subpel_start_mv,
- &x->best_mv.as_mv, &distortion, &sse, NULL);
+ bestsme = cpi->mv_search_params.find_fractional_mv_step(
+ xd, cm, &ms_params, subpel_start_mv, &x->best_mv.as_mv, &distortion, &sse,
+ NULL);
return bestsme;
}