summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngie Chiang <angiebird@google.com>2018-12-05 15:19:00 -0800
committerAngie Chiang <angiebird@google.com>2018-12-06 15:54:35 -0800
commitf497f8f71985dca5259ecd6349ef04b52c7dfbad (patch)
tree05d12ccb700f28aaebd2cb155b55f5c910ea13d6
parent67c999876e9ae1a0f927c09ef2c64fc8b638eec1 (diff)
downloadlibvpx-f497f8f71985dca5259ecd6349ef04b52c7dfbad.tar
libvpx-f497f8f71985dca5259ecd6349ef04b52c7dfbad.tar.gz
libvpx-f497f8f71985dca5259ecd6349ef04b52c7dfbad.tar.bz2
libvpx-f497f8f71985dca5259ecd6349ef04b52c7dfbad.zip
Pass mv_num into vp9_nb_mvs_inconsistency()
This allow av1_nb_mvs_inconsistency to cope with variant number of motion vectors. Change-Id: I391aa322d458cfefaf640e7b07d5ad5ce2d3375c
-rw-r--r--vp9/encoder/vp9_encoder.c4
-rw-r--r--vp9/encoder/vp9_mcomp.c48
-rw-r--r--vp9/encoder/vp9_mcomp.h9
-rw-r--r--vp9/encoder/vp9_rdopt.c10
4 files changed, 39 insertions, 32 deletions
diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c
index a73185623..96111a7ac 100644
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -5666,7 +5666,7 @@ uint32_t motion_compensated_prediction(VP9_COMP *cpi, ThreadData *td,
nb_full_mvs);
vp9_full_pixel_diamond_new(
cpi, x, &best_ref_mv1_full, step_param, lambda, 1, &cpi->fn_ptr[bsize],
- nb_full_mvs, &tpl_stats->mv_arr[rf_idx].as_mv,
+ nb_full_mvs, NB_MVS_NUM, &tpl_stats->mv_arr[rf_idx].as_mv,
&tpl_stats->mv_dist[rf_idx], &tpl_stats->mv_cost[rf_idx]);
#else
(void)frame_idx;
@@ -6361,7 +6361,7 @@ void mc_flow_dispenser(VP9_COMP *cpi, GF_PICTURE *gf_picture, int frame_idx,
full_mv.row = this_tpl_stats->mv_arr[rf_idx].as_mv.row >> 3;
full_mv.col = this_tpl_stats->mv_arr[rf_idx].as_mv.col >> 3;
this_tpl_stats->mv_cost[rf_idx] =
- av1_nb_mvs_inconsistency(&full_mv, nb_full_mvs);
+ vp9_nb_mvs_inconsistency(&full_mv, nb_full_mvs, NB_MVS_NUM);
#endif // RE_COMPUTE_MV_INCONSISTENCY
tpl_frame->mv_dist_sum[rf_idx] += this_tpl_stats->mv_dist[rf_idx];
tpl_frame->mv_cost_sum[rf_idx] += this_tpl_stats->mv_cost[rf_idx];
diff --git a/vp9/encoder/vp9_mcomp.c b/vp9/encoder/vp9_mcomp.c
index 235f0345e..316227e3c 100644
--- a/vp9/encoder/vp9_mcomp.c
+++ b/vp9/encoder/vp9_mcomp.c
@@ -1733,12 +1733,13 @@ static int exhuastive_mesh_search(const MACROBLOCK *x, MV *ref_mv, MV *best_mv,
}
#if CONFIG_NON_GREEDY_MV
-double av1_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs) {
+double vp9_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs,
+ int mv_num) {
int i;
int update = 0;
double best_cost = 0;
vpx_clear_system_state();
- for (i = 0; i < NB_MVS_NUM; ++i) {
+ for (i = 0; i < mv_num; ++i) {
if (nb_mvs[i].as_int != INVALID_MV) {
MV nb_mv = nb_mvs[i].as_mv;
const double row_diff = mv->row - nb_mv.row;
@@ -1762,7 +1763,7 @@ double vp9_diamond_search_sad_new(const MACROBLOCK *x,
double *best_mv_dist, double *best_mv_cost,
int search_param, double lambda, int *num00,
const vp9_variance_fn_ptr_t *fn_ptr,
- const int_mv *nb_full_mvs) {
+ const int_mv *nb_full_mvs, int full_mv_num) {
int i, j, step;
const MACROBLOCKD *const xd = &x->e_mbd;
@@ -1799,7 +1800,8 @@ double vp9_diamond_search_sad_new(const MACROBLOCK *x,
// Check the starting position
*best_mv_dist = fn_ptr->sdf(what, what_stride, in_what, in_what_stride);
- *best_mv_cost = av1_nb_mvs_inconsistency(best_full_mv, nb_full_mvs);
+ *best_mv_cost =
+ vp9_nb_mvs_inconsistency(best_full_mv, nb_full_mvs, full_mv_num);
bestsad = (*best_mv_dist) + lambda * (*best_mv_cost);
i = 0;
@@ -1833,7 +1835,7 @@ double vp9_diamond_search_sad_new(const MACROBLOCK *x,
best_full_mv->col + ss_mv[i].col };
const double mv_dist = sad_array[t];
const double mv_cost =
- av1_nb_mvs_inconsistency(&this_mv, nb_full_mvs);
+ vp9_nb_mvs_inconsistency(&this_mv, nb_full_mvs, full_mv_num);
double thissad = mv_dist + lambda * mv_cost;
if (thissad < bestsad) {
bestsad = thissad;
@@ -1854,7 +1856,7 @@ double vp9_diamond_search_sad_new(const MACROBLOCK *x,
const double mv_dist =
fn_ptr->sdf(what, what_stride, check_here, in_what_stride);
const double mv_cost =
- av1_nb_mvs_inconsistency(&this_mv, nb_full_mvs);
+ vp9_nb_mvs_inconsistency(&this_mv, nb_full_mvs, full_mv_num);
double thissad = mv_dist + lambda * mv_cost;
if (thissad < bestsad) {
bestsad = thissad;
@@ -2242,16 +2244,17 @@ double vp9_full_pixel_diamond_new(const VP9_COMP *cpi, MACROBLOCK *x,
MV *mvp_full, int step_param, double lambda,
int do_refine,
const vp9_variance_fn_ptr_t *fn_ptr,
- const int_mv *nb_full_mvs, MV *best_mv,
- double *best_mv_dist, double *best_mv_cost) {
+ const int_mv *nb_full_mvs, int full_mv_num,
+ MV *best_mv, double *best_mv_dist,
+ double *best_mv_cost) {
int n, num00 = 0;
double thissme;
double bestsme;
const int further_steps = MAX_MVSEARCH_STEPS - 1 - step_param;
vpx_clear_system_state();
- bestsme = vp9_diamond_search_sad_new(x, &cpi->ss_cfg, mvp_full, best_mv,
- best_mv_dist, best_mv_cost, step_param,
- lambda, &n, fn_ptr, nb_full_mvs);
+ bestsme = vp9_diamond_search_sad_new(
+ x, &cpi->ss_cfg, mvp_full, best_mv, best_mv_dist, best_mv_cost,
+ step_param, lambda, &n, fn_ptr, nb_full_mvs, full_mv_num);
// If there won't be more n-step search, check to see if refining search is
// needed.
@@ -2265,9 +2268,9 @@ double vp9_full_pixel_diamond_new(const VP9_COMP *cpi, MACROBLOCK *x,
MV temp_mv;
double mv_dist;
double mv_cost;
- thissme = vp9_diamond_search_sad_new(x, &cpi->ss_cfg, mvp_full, &temp_mv,
- &mv_dist, &mv_cost, step_param + n,
- lambda, &num00, fn_ptr, nb_full_mvs);
+ thissme = vp9_diamond_search_sad_new(
+ x, &cpi->ss_cfg, mvp_full, &temp_mv, &mv_dist, &mv_cost,
+ step_param + n, lambda, &num00, fn_ptr, nb_full_mvs, full_mv_num);
// check to see if refining search is needed.
if (num00 > further_steps - n) do_refine = 0;
@@ -2286,9 +2289,9 @@ double vp9_full_pixel_diamond_new(const VP9_COMP *cpi, MACROBLOCK *x,
MV temp_mv = *best_mv;
double mv_dist;
double mv_cost;
- thissme =
- vp9_refining_search_sad_new(x, &temp_mv, &mv_dist, &mv_cost, lambda,
- search_range, fn_ptr, nb_full_mvs);
+ thissme = vp9_refining_search_sad_new(x, &temp_mv, &mv_dist, &mv_cost,
+ lambda, search_range, fn_ptr,
+ nb_full_mvs, full_mv_num);
if (thissme < bestsme) {
bestsme = thissme;
*best_mv = temp_mv;
@@ -2428,7 +2431,7 @@ double vp9_refining_search_sad_new(const MACROBLOCK *x, MV *best_full_mv,
double *best_mv_dist, double *best_mv_cost,
double lambda, int search_range,
const vp9_variance_fn_ptr_t *fn_ptr,
- const int_mv *nb_full_mvs) {
+ const int_mv *nb_full_mvs, int full_mv_num) {
const MACROBLOCKD *const xd = &x->e_mbd;
const MV neighbors[4] = { { -1, 0 }, { 0, -1 }, { 0, 1 }, { 1, 0 } };
const struct buf_2d *const what = &x->plane[0].src;
@@ -2439,7 +2442,8 @@ double vp9_refining_search_sad_new(const MACROBLOCK *x, MV *best_full_mv,
vpx_clear_system_state();
*best_mv_dist =
fn_ptr->sdf(what->buf, what->stride, best_address, in_what->stride);
- *best_mv_cost = av1_nb_mvs_inconsistency(best_full_mv, nb_full_mvs);
+ *best_mv_cost =
+ vp9_nb_mvs_inconsistency(best_full_mv, nb_full_mvs, full_mv_num);
best_sad = (*best_mv_dist) + lambda * (*best_mv_cost);
for (i = 0; i < search_range; i++) {
@@ -2461,7 +2465,8 @@ double vp9_refining_search_sad_new(const MACROBLOCK *x, MV *best_full_mv,
const MV mv = { best_full_mv->row + neighbors[j].row,
best_full_mv->col + neighbors[j].col };
const double mv_dist = sads[j];
- const double mv_cost = av1_nb_mvs_inconsistency(&mv, nb_full_mvs);
+ const double mv_cost =
+ vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num);
const double thissad = mv_dist + lambda * mv_cost;
if (thissad < best_sad) {
best_sad = thissad;
@@ -2479,7 +2484,8 @@ double vp9_refining_search_sad_new(const MACROBLOCK *x, MV *best_full_mv,
const double mv_dist =
fn_ptr->sdf(what->buf, what->stride,
get_buf_from_mv(in_what, &mv), in_what->stride);
- const double mv_cost = av1_nb_mvs_inconsistency(&mv, nb_full_mvs);
+ const double mv_cost =
+ vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num);
const double thissad = mv_dist + lambda * mv_cost;
if (thissad < best_sad) {
best_sad = thissad;
diff --git a/vp9/encoder/vp9_mcomp.h b/vp9/encoder/vp9_mcomp.h
index 54f68ca74..0ac76e30d 100644
--- a/vp9/encoder/vp9_mcomp.h
+++ b/vp9/encoder/vp9_mcomp.h
@@ -126,16 +126,17 @@ double vp9_refining_search_sad_new(const MACROBLOCK *x, MV *best_full_mv,
double *best_mv_dist, double *best_mv_cost,
double lambda, int search_range,
const vp9_variance_fn_ptr_t *fn_ptr,
- const int_mv *nb_full_mvs);
+ const int_mv *nb_full_mvs, int full_mv_num);
double vp9_full_pixel_diamond_new(const struct VP9_COMP *cpi, MACROBLOCK *x,
MV *mvp_full, int step_param, double lambda,
int do_refine,
const vp9_variance_fn_ptr_t *fn_ptr,
- const int_mv *nb_full_mvs, MV *best_mv,
- double *best_mv_dist, double *best_mv_cost);
+ const int_mv *nb_full_mvs, int full_mv_num,
+ MV *best_mv, double *best_mv_dist,
+ double *best_mv_cost);
-double av1_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs);
+double vp9_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs, int mv_num);
#endif // CONFIG_NON_GREEDY_MV
#ifdef __cplusplus
} // extern "C"
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c
index b55e2ddb4..afe35d7b2 100644
--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -2418,9 +2418,9 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize,
mvp_full.row >>= 3;
#if CONFIG_NON_GREEDY_MV
- bestsme = vp9_full_pixel_diamond_new(cpi, x, &mvp_full, step_param, lambda, 1,
- &cpi->fn_ptr[bsize], nb_full_mvs,
- &tmp_mv->as_mv, &mv_dist, &mv_cost);
+ bestsme = vp9_full_pixel_diamond_new(
+ cpi, x, &mvp_full, step_param, lambda, 1, &cpi->fn_ptr[bsize],
+ nb_full_mvs, NB_MVS_NUM, &tmp_mv->as_mv, &mv_dist, &mv_cost);
#else // CONFIG_NON_GREEDY_MV
bestsme = vp9_full_pixel_search(
cpi, x, bsize, &mvp_full, step_param, cpi->sf.mv.search_method, sadpb,
@@ -2461,8 +2461,8 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize,
#if CONFIG_NON_GREEDY_MV
this_me = vp9_full_pixel_diamond_new(
cpi, x, &mvp_full, VPXMAX(step_param, MAX_MVSEARCH_STEPS - step),
- lambda, 1, &cpi->fn_ptr[bsize], nb_full_mvs, &this_mv, &mv_dist,
- &mv_cost);
+ lambda, 1, &cpi->fn_ptr[bsize], nb_full_mvs, NB_MVS_NUM, &this_mv,
+ &mv_dist, &mv_cost);
#else // CONFIG_NON_GREEDY_MV
this_me = vp9_full_pixel_search(
cpi, x, bsize, &mvp_full,