ref: af52e4657c064b8ba5a282335d1c3a326326d95b
parent: 0113fc35160342e3ad636e2ca7b77a6e8956b2a2
author: Angie Chiang <[email protected]>
date: Thu Jun 20 12:06:56 EDT 2019
Make vp9_nb_mvs_inconsistency return int64_t Change-Id: I925156ed45e13a06c449c2fbff8a3c26baf8d835
--- a/vp9/encoder/vp9_mcomp.c
+++ b/vp9/encoder/vp9_mcomp.c
@@ -1899,8 +1899,8 @@
}
}
-double vp9_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs,
- int mv_num) {
+int64_t vp9_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs,
+ int mv_num) {
int i;
int update = 0;
int64_t best_cost = 0;
@@ -1920,7 +1920,7 @@
}
}
}
- return best_cost * 1. / (1 << LOG2_PRECISION);
+ return best_cost;
}
static double exhaustive_mesh_search_new(const MACROBLOCK *x, MV *best_mv,
@@ -1946,7 +1946,8 @@
best_sad =
fn_ptr->sdf(what->buf, what->stride,
get_buf_from_mv(in_what, &fcenter_mv), in_what->stride) +
- lambda * vp9_nb_mvs_inconsistency(&fcenter_mv, nb_full_mvs, full_mv_num);
+ lambda * vp9_nb_mvs_inconsistency(&fcenter_mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
start_row = VPXMAX(-range, x->mv_limits.row_min - fcenter_mv.row);
start_col = VPXMAX(-range, x->mv_limits.col_min - fcenter_mv.col);
end_row = VPXMIN(range, x->mv_limits.row_max - fcenter_mv.row);
@@ -1961,8 +1962,9 @@
fn_ptr->sdf(what->buf, what->stride, get_buf_from_mv(in_what, &mv),
in_what->stride);
if (sad < best_sad) {
- sad +=
- lambda * vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num);
+ sad += lambda *
+ vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
if (sad < best_sad) {
best_sad = sad;
*best_mv = mv;
@@ -1983,8 +1985,10 @@
if (sads[i] < best_sad) {
const MV mv = { fcenter_mv.row + r, fcenter_mv.col + c + i };
const double sad =
- sads[i] + lambda * vp9_nb_mvs_inconsistency(&mv, nb_full_mvs,
- full_mv_num);
+ sads[i] +
+ lambda *
+ vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
if (sad < best_sad) {
best_sad = sad;
*best_mv = mv;
@@ -1999,7 +2003,8 @@
get_buf_from_mv(in_what, &mv), in_what->stride);
if (sad < best_sad) {
sad += lambda *
- vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num);
+ vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
if (sad < best_sad) {
best_sad = sad;
*best_mv = mv;
@@ -2114,7 +2119,8 @@
// Check the starting position
*best_mv_dist = fn_ptr->sdf(what, what_stride, in_what, in_what_stride);
*best_mv_cost =
- vp9_nb_mvs_inconsistency(best_full_mv, nb_full_mvs, full_mv_num);
+ vp9_nb_mvs_inconsistency(best_full_mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
bestsad = (*best_mv_dist) + lambda * (*best_mv_cost);
i = 0;
@@ -2148,7 +2154,8 @@
best_full_mv->col + ss_mv[i].col };
const double mv_dist = sad_array[t];
const double mv_cost =
- vp9_nb_mvs_inconsistency(&this_mv, nb_full_mvs, full_mv_num);
+ vp9_nb_mvs_inconsistency(&this_mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
double thissad = mv_dist + lambda * mv_cost;
if (thissad < bestsad) {
bestsad = thissad;
@@ -2169,7 +2176,8 @@
const double mv_dist =
fn_ptr->sdf(what, what_stride, check_here, in_what_stride);
const double mv_cost =
- vp9_nb_mvs_inconsistency(&this_mv, nb_full_mvs, full_mv_num);
+ vp9_nb_mvs_inconsistency(&this_mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
double thissad = mv_dist + lambda * mv_cost;
if (thissad < bestsad) {
bestsad = thissad;
@@ -2791,7 +2799,8 @@
*best_mv_dist =
fn_ptr->sdf(what->buf, what->stride, best_address, in_what->stride);
*best_mv_cost =
- vp9_nb_mvs_inconsistency(best_full_mv, nb_full_mvs, full_mv_num);
+ vp9_nb_mvs_inconsistency(best_full_mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
best_sad = (*best_mv_dist) + lambda * (*best_mv_cost);
for (i = 0; i < search_range; i++) {
@@ -2814,7 +2823,8 @@
best_full_mv->col + neighbors[j].col };
const double mv_dist = sads[j];
const double mv_cost =
- vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num);
+ vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
const double thissad = mv_dist + lambda * mv_cost;
if (thissad < best_sad) {
best_sad = thissad;
@@ -2833,7 +2843,8 @@
fn_ptr->sdf(what->buf, what->stride,
get_buf_from_mv(in_what, &mv), in_what->stride);
const double mv_cost =
- vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num);
+ vp9_nb_mvs_inconsistency(&mv, nb_full_mvs, full_mv_num) /
+ (double)(1 << LOG2_PRECISION);
const double thissad = mv_dist + lambda * mv_cost;
if (thissad < best_sad) {
best_sad = thissad;
--- a/vp9/encoder/vp9_mcomp.h
+++ b/vp9/encoder/vp9_mcomp.h
@@ -142,7 +142,8 @@
MV *best_mv, double *best_mv_dist,
double *best_mv_cost);
-double vp9_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs, int mv_num);
+int64_t vp9_nb_mvs_inconsistency(const MV *mv, const int_mv *nb_mvs,
+ int mv_num);
static INLINE MV get_full_mv(const MV *mv) {
MV out_mv;
out_mv.row = mv->row >> 3;