| Index: source/libvpx/vp9/encoder/vp9_mcomp.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_mcomp.c (revision 240950)
|
| +++ source/libvpx/vp9/encoder/vp9_mcomp.c (working copy)
|
| @@ -24,7 +24,7 @@
|
|
|
| // #define NEW_DIAMOND_SEARCH
|
|
|
| -void vp9_clamp_mv_min_max(MACROBLOCK *x, MV *mv) {
|
| +void vp9_set_mv_search_range(MACROBLOCK *x, MV *mv) {
|
| const int col_min = (mv->col >> 3) - MAX_FULL_PEL_VAL + (mv->col & 7 ? 1 : 0);
|
| const int row_min = (mv->row >> 3) - MAX_FULL_PEL_VAL + (mv->row & 7 ? 1 : 0);
|
| const int col_max = (mv->col >> 3) + MAX_FULL_PEL_VAL;
|
| @@ -51,9 +51,6 @@
|
| while ((size << sr) < MAX_FULL_PEL_VAL)
|
| sr++;
|
|
|
| - if (sr)
|
| - sr--;
|
| -
|
| sr += cpi->sf.reduce_first_step_size;
|
| sr = MIN(sr, (cpi->sf.max_step_search_steps - 2));
|
| return sr;
|
| @@ -1069,11 +1066,130 @@
|
| #undef CHECK_POINT
|
| #undef CHECK_BETTER
|
|
|
| +int vp9_full_range_search_c(MACROBLOCK *x, MV *ref_mv, MV *best_mv,
|
| + int search_param, int sad_per_bit, int *num00,
|
| + vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost,
|
| + int *mvcost[2], const MV *center_mv) {
|
| + const MACROBLOCKD* const xd = &x->e_mbd;
|
| + uint8_t *what = x->plane[0].src.buf;
|
| + int what_stride = x->plane[0].src.stride;
|
| + uint8_t *in_what;
|
| + int in_what_stride = xd->plane[0].pre[0].stride;
|
| + uint8_t *best_address;
|
| +
|
| + MV this_mv;
|
| +
|
| + int bestsad = INT_MAX;
|
| + int ref_row, ref_col;
|
| +
|
| + uint8_t *check_here;
|
| + int thissad;
|
| + MV fcenter_mv;
|
| +
|
| + int *mvjsadcost = x->nmvjointsadcost;
|
| + int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
| +
|
| + int tr, tc;
|
| + int best_tr = 0;
|
| + int best_tc = 0;
|
| + int range = 64;
|
| +
|
| + int start_col, end_col;
|
| + int start_row, end_row;
|
| + int i;
|
| +
|
| + fcenter_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.col = center_mv->col >> 3;
|
| +
|
| + clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
|
| + ref_row = ref_mv->row;
|
| + ref_col = ref_mv->col;
|
| + *num00 = 11;
|
| + best_mv->row = ref_row;
|
| + best_mv->col = ref_col;
|
| +
|
| + // Work out the start point for the search
|
| + in_what = (uint8_t *)(xd->plane[0].pre[0].buf +
|
| + (ref_row * (xd->plane[0].pre[0].stride)) + ref_col);
|
| + best_address = in_what;
|
| +
|
| + // Check the starting position
|
| + bestsad = fn_ptr->sdf(what, what_stride, in_what, in_what_stride, 0x7fffffff)
|
| + + mvsad_err_cost(best_mv, &fcenter_mv,
|
| + mvjsadcost, mvsadcost, sad_per_bit);
|
| +
|
| + start_row = MAX(-range, x->mv_row_min - ref_row);
|
| + start_col = MAX(-range, x->mv_col_min - ref_col);
|
| + end_row = MIN(range, x->mv_row_max - ref_row);
|
| + end_col = MIN(range, x->mv_col_max - ref_col);
|
| +
|
| + for (tr = start_row; tr <= end_row; ++tr) {
|
| + for (tc = start_col; tc <= end_col; tc += 4) {
|
| + if ((tc + 3) <= end_col) {
|
| + unsigned int sad_array[4];
|
| + unsigned char const *addr_ref[4];
|
| + for (i = 0; i < 4; ++i)
|
| + addr_ref[i] = in_what + tr * in_what_stride + tc + i;
|
| +
|
| + fn_ptr->sdx4df(what, what_stride, addr_ref, in_what_stride, sad_array);
|
| +
|
| + for (i = 0; i < 4; ++i) {
|
| + if (sad_array[i] < bestsad) {
|
| + this_mv.row = ref_row + tr;
|
| + this_mv.col = ref_col + tc + i;
|
| + thissad = sad_array[i] +
|
| + mvsad_err_cost(&this_mv, &fcenter_mv,
|
| + mvjsadcost, mvsadcost, sad_per_bit);
|
| + if (thissad < bestsad) {
|
| + bestsad = thissad;
|
| + best_tr = tr;
|
| + best_tc = tc + i;
|
| + }
|
| + }
|
| + }
|
| + } else {
|
| + for (i = 0; i < end_col - tc; ++i) {
|
| + check_here = in_what + tr * in_what_stride + tc + i;
|
| + thissad = fn_ptr->sdf(what, what_stride, check_here, in_what_stride,
|
| + bestsad);
|
| +
|
| + if (thissad < bestsad) {
|
| + this_mv.row = ref_row + tr;
|
| + this_mv.col = ref_col + tc + i;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| + mvjsadcost, mvsadcost, sad_per_bit);
|
| +
|
| + if (thissad < bestsad) {
|
| + bestsad = thissad;
|
| + best_tr = tr;
|
| + best_tc = tc + i;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + best_mv->row += best_tr;
|
| + best_mv->col += best_tc;
|
| +
|
| + this_mv.row = best_mv->row * 8;
|
| + this_mv.col = best_mv->col * 8;
|
| +
|
| + if (bestsad == INT_MAX)
|
| + return INT_MAX;
|
| +
|
| + return fn_ptr->vf(what, what_stride, best_address, in_what_stride,
|
| + (unsigned int *)(&thissad)) +
|
| + mv_err_cost(&this_mv, center_mv,
|
| + mvjcost, mvcost, x->errorperbit);
|
| +}
|
| +
|
| int vp9_diamond_search_sad_c(MACROBLOCK *x,
|
| - int_mv *ref_mv, int_mv *best_mv,
|
| + MV *ref_mv, MV *best_mv,
|
| int search_param, int sad_per_bit, int *num00,
|
| vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost,
|
| - int *mvcost[2], int_mv *center_mv) {
|
| + int *mvcost[2], const MV *center_mv) {
|
| int i, j, step;
|
|
|
| const MACROBLOCKD* const xd = &x->e_mbd;
|
| @@ -1084,7 +1200,7 @@
|
| uint8_t *best_address;
|
|
|
| int tot_steps;
|
| - int_mv this_mv;
|
| + MV this_mv;
|
|
|
| int bestsad = INT_MAX;
|
| int best_site = 0;
|
| @@ -1101,25 +1217,24 @@
|
| int *mvjsadcost = x->nmvjointsadcost;
|
| int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
|
|
| - fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
| - fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
|
| + fcenter_mv.as_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.as_mv.col = center_mv->col >> 3;
|
|
|
| - clamp_mv(&ref_mv->as_mv,
|
| - x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
|
| - ref_row = ref_mv->as_mv.row;
|
| - ref_col = ref_mv->as_mv.col;
|
| + clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
|
| + ref_row = ref_mv->row;
|
| + ref_col = ref_mv->col;
|
| *num00 = 0;
|
| - best_mv->as_mv.row = ref_row;
|
| - best_mv->as_mv.col = ref_col;
|
| + best_mv->row = ref_row;
|
| + best_mv->col = ref_col;
|
|
|
| // Work out the start point for the search
|
| in_what = (uint8_t *)(xd->plane[0].pre[0].buf +
|
| - (ref_row * (xd->plane[0].pre[0].stride)) + ref_col);
|
| + ref_row * in_what_stride + ref_col);
|
| best_address = in_what;
|
|
|
| // Check the starting position
|
| bestsad = fn_ptr->sdf(what, what_stride, in_what, in_what_stride, 0x7fffffff)
|
| - + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv.as_mv,
|
| + + mvsad_err_cost(best_mv, &fcenter_mv.as_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| // search_param determines the length of the initial step and hence the number
|
| @@ -1134,8 +1249,8 @@
|
| for (step = 0; step < tot_steps; step++) {
|
| for (j = 0; j < x->searches_per_step; j++) {
|
| // Trap illegal vectors
|
| - this_row_offset = best_mv->as_mv.row + ss[i].mv.row;
|
| - this_col_offset = best_mv->as_mv.col + ss[i].mv.col;
|
| + this_row_offset = best_mv->row + ss[i].mv.row;
|
| + this_col_offset = best_mv->col + ss[i].mv.col;
|
|
|
| if ((this_col_offset > x->mv_col_min) &&
|
| (this_col_offset < x->mv_col_max) &&
|
| @@ -1146,9 +1261,9 @@
|
| bestsad);
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.row = this_row_offset;
|
| - this_mv.as_mv.col = this_col_offset;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = this_row_offset;
|
| + this_mv.col = this_col_offset;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv.as_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1162,14 +1277,14 @@
|
| }
|
|
|
| if (best_site != last_site) {
|
| - best_mv->as_mv.row += ss[best_site].mv.row;
|
| - best_mv->as_mv.col += ss[best_site].mv.col;
|
| + best_mv->row += ss[best_site].mv.row;
|
| + best_mv->col += ss[best_site].mv.col;
|
| best_address += ss[best_site].offset;
|
| last_site = best_site;
|
| #if defined(NEW_DIAMOND_SEARCH)
|
| while (1) {
|
| - this_row_offset = best_mv->as_mv.row + ss[best_site].mv.row;
|
| - this_col_offset = best_mv->as_mv.col + ss[best_site].mv.col;
|
| + this_row_offset = best_mv->row + ss[best_site].mv.row;
|
| + this_col_offset = best_mv->col + ss[best_site].mv.col;
|
| if ((this_col_offset > x->mv_col_min) &&
|
| (this_col_offset < x->mv_col_max) &&
|
| (this_row_offset > x->mv_row_min) &&
|
| @@ -1178,14 +1293,14 @@
|
| thissad = fn_ptr->sdf(what, what_stride, check_here, in_what_stride,
|
| bestsad);
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.row = this_row_offset;
|
| - this_mv.as_mv.col = this_col_offset;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = this_row_offset;
|
| + this_mv.col = this_col_offset;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv.as_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
| if (thissad < bestsad) {
|
| bestsad = thissad;
|
| - best_mv->as_mv.row += ss[best_site].mv.row;
|
| - best_mv->as_mv.col += ss[best_site].mv.col;
|
| + best_mv->row += ss[best_site].mv.row;
|
| + best_mv->col += ss[best_site].mv.col;
|
| best_address += ss[best_site].offset;
|
| continue;
|
| }
|
| @@ -1199,23 +1314,24 @@
|
| }
|
| }
|
|
|
| - this_mv.as_mv.row = best_mv->as_mv.row * 8;
|
| - this_mv.as_mv.col = best_mv->as_mv.col * 8;
|
| + this_mv.row = best_mv->row * 8;
|
| + this_mv.col = best_mv->col * 8;
|
|
|
| if (bestsad == INT_MAX)
|
| return INT_MAX;
|
|
|
| return fn_ptr->vf(what, what_stride, best_address, in_what_stride,
|
| (unsigned int *)(&thissad)) +
|
| - mv_err_cost(&this_mv.as_mv, ¢er_mv->as_mv,
|
| + mv_err_cost(&this_mv, center_mv,
|
| mvjcost, mvcost, x->errorperbit);
|
| }
|
|
|
| int vp9_diamond_search_sadx4(MACROBLOCK *x,
|
| - int_mv *ref_mv, int_mv *best_mv, int search_param,
|
| + MV *ref_mv, MV *best_mv, int search_param,
|
| int sad_per_bit, int *num00,
|
| vp9_variance_fn_ptr_t *fn_ptr,
|
| - int *mvjcost, int *mvcost[2], int_mv *center_mv) {
|
| + int *mvjcost, int *mvcost[2],
|
| + const MV *center_mv) {
|
| int i, j, step;
|
|
|
| const MACROBLOCKD* const xd = &x->e_mbd;
|
| @@ -1226,7 +1342,7 @@
|
| uint8_t *best_address;
|
|
|
| int tot_steps;
|
| - int_mv this_mv;
|
| + MV this_mv;
|
|
|
| unsigned int bestsad = INT_MAX;
|
| int best_site = 0;
|
| @@ -1245,25 +1361,24 @@
|
| int *mvjsadcost = x->nmvjointsadcost;
|
| int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
|
|
| - fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
| - fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
|
| + fcenter_mv.as_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.as_mv.col = center_mv->col >> 3;
|
|
|
| - clamp_mv(&ref_mv->as_mv,
|
| - x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
|
| - ref_row = ref_mv->as_mv.row;
|
| - ref_col = ref_mv->as_mv.col;
|
| + clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
|
| + ref_row = ref_mv->row;
|
| + ref_col = ref_mv->col;
|
| *num00 = 0;
|
| - best_mv->as_mv.row = ref_row;
|
| - best_mv->as_mv.col = ref_col;
|
| + best_mv->row = ref_row;
|
| + best_mv->col = ref_col;
|
|
|
| // Work out the start point for the search
|
| in_what = (uint8_t *)(xd->plane[0].pre[0].buf +
|
| - (ref_row * (xd->plane[0].pre[0].stride)) + ref_col);
|
| + ref_row * in_what_stride + ref_col);
|
| best_address = in_what;
|
|
|
| // Check the starting position
|
| bestsad = fn_ptr->sdf(what, what_stride, in_what, in_what_stride, 0x7fffffff)
|
| - + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv.as_mv,
|
| + + mvsad_err_cost(best_mv, &fcenter_mv.as_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| // search_param determines the length of the initial step and hence the number
|
| @@ -1281,10 +1396,10 @@
|
|
|
| // All_in is true if every one of the points we are checking are within
|
| // the bounds of the image.
|
| - all_in &= ((best_mv->as_mv.row + ss[i].mv.row) > x->mv_row_min);
|
| - all_in &= ((best_mv->as_mv.row + ss[i + 1].mv.row) < x->mv_row_max);
|
| - all_in &= ((best_mv->as_mv.col + ss[i + 2].mv.col) > x->mv_col_min);
|
| - all_in &= ((best_mv->as_mv.col + ss[i + 3].mv.col) < x->mv_col_max);
|
| + all_in &= ((best_mv->row + ss[i].mv.row) > x->mv_row_min);
|
| + all_in &= ((best_mv->row + ss[i + 1].mv.row) < x->mv_row_max);
|
| + all_in &= ((best_mv->col + ss[i + 2].mv.col) > x->mv_col_min);
|
| + all_in &= ((best_mv->col + ss[i + 3].mv.col) < x->mv_col_max);
|
|
|
| // If all the pixels are within the bounds we don't check whether the
|
| // search point is valid in this loop, otherwise we check each point
|
| @@ -1303,9 +1418,9 @@
|
|
|
| for (t = 0; t < 4; t++, i++) {
|
| if (sad_array[t] < bestsad) {
|
| - this_mv.as_mv.row = best_mv->as_mv.row + ss[i].mv.row;
|
| - this_mv.as_mv.col = best_mv->as_mv.col + ss[i].mv.col;
|
| - sad_array[t] += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = best_mv->row + ss[i].mv.row;
|
| + this_mv.col = best_mv->col + ss[i].mv.col;
|
| + sad_array[t] += mvsad_err_cost(&this_mv, &fcenter_mv.as_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (sad_array[t] < bestsad) {
|
| @@ -1318,8 +1433,8 @@
|
| } else {
|
| for (j = 0; j < x->searches_per_step; j++) {
|
| // Trap illegal vectors
|
| - this_row_offset = best_mv->as_mv.row + ss[i].mv.row;
|
| - this_col_offset = best_mv->as_mv.col + ss[i].mv.col;
|
| + this_row_offset = best_mv->row + ss[i].mv.row;
|
| + this_col_offset = best_mv->col + ss[i].mv.col;
|
|
|
| if ((this_col_offset > x->mv_col_min) &&
|
| (this_col_offset < x->mv_col_max) &&
|
| @@ -1330,9 +1445,9 @@
|
| bestsad);
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.row = this_row_offset;
|
| - this_mv.as_mv.col = this_col_offset;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = this_row_offset;
|
| + this_mv.col = this_col_offset;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv.as_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1345,14 +1460,14 @@
|
| }
|
| }
|
| if (best_site != last_site) {
|
| - best_mv->as_mv.row += ss[best_site].mv.row;
|
| - best_mv->as_mv.col += ss[best_site].mv.col;
|
| + best_mv->row += ss[best_site].mv.row;
|
| + best_mv->col += ss[best_site].mv.col;
|
| best_address += ss[best_site].offset;
|
| last_site = best_site;
|
| #if defined(NEW_DIAMOND_SEARCH)
|
| while (1) {
|
| - this_row_offset = best_mv->as_mv.row + ss[best_site].mv.row;
|
| - this_col_offset = best_mv->as_mv.col + ss[best_site].mv.col;
|
| + this_row_offset = best_mv->row + ss[best_site].mv.row;
|
| + this_col_offset = best_mv->col + ss[best_site].mv.col;
|
| if ((this_col_offset > x->mv_col_min) &&
|
| (this_col_offset < x->mv_col_max) &&
|
| (this_row_offset > x->mv_row_min) &&
|
| @@ -1361,14 +1476,14 @@
|
| thissad = fn_ptr->sdf(what, what_stride, check_here, in_what_stride,
|
| bestsad);
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.row = this_row_offset;
|
| - this_mv.as_mv.col = this_col_offset;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = this_row_offset;
|
| + this_mv.col = this_col_offset;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv.as_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
| if (thissad < bestsad) {
|
| bestsad = thissad;
|
| - best_mv->as_mv.row += ss[best_site].mv.row;
|
| - best_mv->as_mv.col += ss[best_site].mv.col;
|
| + best_mv->row += ss[best_site].mv.row;
|
| + best_mv->col += ss[best_site].mv.col;
|
| best_address += ss[best_site].offset;
|
| continue;
|
| }
|
| @@ -1382,15 +1497,15 @@
|
| }
|
| }
|
|
|
| - this_mv.as_mv.row = best_mv->as_mv.row * 8;
|
| - this_mv.as_mv.col = best_mv->as_mv.col * 8;
|
| + this_mv.row = best_mv->row * 8;
|
| + this_mv.col = best_mv->col * 8;
|
|
|
| if (bestsad == INT_MAX)
|
| return INT_MAX;
|
|
|
| return fn_ptr->vf(what, what_stride, best_address, in_what_stride,
|
| (unsigned int *)(&thissad)) +
|
| - mv_err_cost(&this_mv.as_mv, ¢er_mv->as_mv,
|
| + mv_err_cost(&this_mv, center_mv,
|
| mvjcost, mvcost, x->errorperbit);
|
| }
|
|
|
| @@ -1405,10 +1520,10 @@
|
| int_mv *ref_mv, int_mv *dst_mv) {
|
| int_mv temp_mv;
|
| int thissme, n, num00;
|
| - int bestsme = cpi->diamond_search_sad(x, mvp_full, &temp_mv,
|
| + int bestsme = cpi->diamond_search_sad(x, &mvp_full->as_mv, &temp_mv.as_mv,
|
| step_param, sadpb, &num00,
|
| fn_ptr, x->nmvjointcost,
|
| - x->mvcost, ref_mv);
|
| + x->mvcost, &ref_mv->as_mv);
|
| dst_mv->as_int = temp_mv.as_int;
|
|
|
| n = num00;
|
| @@ -1425,10 +1540,10 @@
|
| if (num00) {
|
| num00--;
|
| } else {
|
| - thissme = cpi->diamond_search_sad(x, mvp_full, &temp_mv,
|
| + thissme = cpi->diamond_search_sad(x, &mvp_full->as_mv, &temp_mv.as_mv,
|
| step_param + n, sadpb, &num00,
|
| fn_ptr, x->nmvjointcost, x->mvcost,
|
| - ref_mv);
|
| + &ref_mv->as_mv);
|
|
|
| /* check to see if refining search is needed. */
|
| if (num00 > (further_steps - n))
|
| @@ -1446,9 +1561,9 @@
|
| int search_range = 8;
|
| int_mv best_mv;
|
| best_mv.as_int = dst_mv->as_int;
|
| - thissme = cpi->refining_search_sad(x, &best_mv, sadpb, search_range,
|
| + thissme = cpi->refining_search_sad(x, &best_mv.as_mv, sadpb, search_range,
|
| fn_ptr, x->nmvjointcost, x->mvcost,
|
| - ref_mv);
|
| + &ref_mv->as_mv);
|
|
|
| if (thissme < bestsme) {
|
| bestsme = thissme;
|
| @@ -1458,11 +1573,11 @@
|
| return bestsme;
|
| }
|
|
|
| -int vp9_full_search_sad_c(MACROBLOCK *x, int_mv *ref_mv,
|
| +int vp9_full_search_sad_c(MACROBLOCK *x, MV *ref_mv,
|
| int sad_per_bit, int distance,
|
| vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost,
|
| int *mvcost[2],
|
| - int_mv *center_mv, int n) {
|
| + const MV *center_mv, int n) {
|
| const MACROBLOCKD* const xd = &x->e_mbd;
|
| uint8_t *what = x->plane[0].src.buf;
|
| int what_stride = x->plane[0].src.stride;
|
| @@ -1471,27 +1586,27 @@
|
| int mv_stride = xd->plane[0].pre[0].stride;
|
| uint8_t *bestaddress;
|
| int_mv *best_mv = &x->e_mbd.mi_8x8[0]->bmi[n].as_mv[0];
|
| - int_mv this_mv;
|
| + MV this_mv;
|
| int bestsad = INT_MAX;
|
| int r, c;
|
|
|
| uint8_t *check_here;
|
| int thissad;
|
|
|
| - int ref_row = ref_mv->as_mv.row;
|
| - int ref_col = ref_mv->as_mv.col;
|
| + int ref_row = ref_mv->row;
|
| + int ref_col = ref_mv->col;
|
|
|
| int row_min = ref_row - distance;
|
| int row_max = ref_row + distance;
|
| int col_min = ref_col - distance;
|
| int col_max = ref_col + distance;
|
| - int_mv fcenter_mv;
|
| + MV fcenter_mv;
|
|
|
| int *mvjsadcost = x->nmvjointsadcost;
|
| int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
|
|
| - fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
| - fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
|
| + fcenter_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.col = center_mv->col >> 3;
|
|
|
| // Work out the mid point for the search
|
| in_what = xd->plane[0].pre[0].buf;
|
| @@ -1503,7 +1618,7 @@
|
| // Baseline value at the centre
|
| bestsad = fn_ptr->sdf(what, what_stride, bestaddress,
|
| in_what_stride, 0x7fffffff)
|
| - + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv.as_mv,
|
| + + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| // Apply further limits to prevent us looking using vectors that stretch
|
| @@ -1514,15 +1629,15 @@
|
| row_max = MIN(row_max, x->mv_row_max);
|
|
|
| for (r = row_min; r < row_max; r++) {
|
| - this_mv.as_mv.row = r;
|
| + this_mv.row = r;
|
| check_here = r * mv_stride + in_what + col_min;
|
|
|
| for (c = col_min; c < col_max; c++) {
|
| thissad = fn_ptr->sdf(what, what_stride, check_here, in_what_stride,
|
| bestsad);
|
|
|
| - this_mv.as_mv.col = c;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.col = c;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1536,22 +1651,22 @@
|
| }
|
| }
|
|
|
| - this_mv.as_mv.row = best_mv->as_mv.row * 8;
|
| - this_mv.as_mv.col = best_mv->as_mv.col * 8;
|
| + this_mv.row = best_mv->as_mv.row * 8;
|
| + this_mv.col = best_mv->as_mv.col * 8;
|
|
|
| if (bestsad < INT_MAX)
|
| return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride,
|
| (unsigned int *)(&thissad)) +
|
| - mv_err_cost(&this_mv.as_mv, ¢er_mv->as_mv,
|
| + mv_err_cost(&this_mv, center_mv,
|
| mvjcost, mvcost, x->errorperbit);
|
| else
|
| return INT_MAX;
|
| }
|
|
|
| -int vp9_full_search_sadx3(MACROBLOCK *x, int_mv *ref_mv,
|
| +int vp9_full_search_sadx3(MACROBLOCK *x, MV *ref_mv,
|
| int sad_per_bit, int distance,
|
| vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost,
|
| - int *mvcost[2], int_mv *center_mv, int n) {
|
| + int *mvcost[2], const MV *center_mv, int n) {
|
| const MACROBLOCKD* const xd = &x->e_mbd;
|
| uint8_t *what = x->plane[0].src.buf;
|
| int what_stride = x->plane[0].src.stride;
|
| @@ -1560,15 +1675,15 @@
|
| int mv_stride = xd->plane[0].pre[0].stride;
|
| uint8_t *bestaddress;
|
| int_mv *best_mv = &x->e_mbd.mi_8x8[0]->bmi[n].as_mv[0];
|
| - int_mv this_mv;
|
| + MV this_mv;
|
| unsigned int bestsad = INT_MAX;
|
| int r, c;
|
|
|
| uint8_t *check_here;
|
| unsigned int thissad;
|
|
|
| - int ref_row = ref_mv->as_mv.row;
|
| - int ref_col = ref_mv->as_mv.col;
|
| + int ref_row = ref_mv->row;
|
| + int ref_col = ref_mv->col;
|
|
|
| int row_min = ref_row - distance;
|
| int row_max = ref_row + distance;
|
| @@ -1576,13 +1691,13 @@
|
| int col_max = ref_col + distance;
|
|
|
| unsigned int sad_array[3];
|
| - int_mv fcenter_mv;
|
| + MV fcenter_mv;
|
|
|
| int *mvjsadcost = x->nmvjointsadcost;
|
| int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
|
|
| - fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
| - fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
|
| + fcenter_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.col = center_mv->col >> 3;
|
|
|
| // Work out the mid point for the search
|
| in_what = xd->plane[0].pre[0].buf;
|
| @@ -1594,7 +1709,7 @@
|
| // Baseline value at the centre
|
| bestsad = fn_ptr->sdf(what, what_stride,
|
| bestaddress, in_what_stride, 0x7fffffff)
|
| - + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv.as_mv,
|
| + + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| // Apply further limits to prevent us looking using vectors that stretch
|
| @@ -1605,11 +1720,11 @@
|
| row_max = MIN(row_max, x->mv_row_max);
|
|
|
| for (r = row_min; r < row_max; r++) {
|
| - this_mv.as_mv.row = r;
|
| + this_mv.row = r;
|
| check_here = r * mv_stride + in_what + col_min;
|
| c = col_min;
|
|
|
| - while ((c + 2) < col_max) {
|
| + while ((c + 2) < col_max && fn_ptr->sdx3f != NULL) {
|
| int i;
|
|
|
| fn_ptr->sdx3f(what, what_stride, check_here, in_what_stride, sad_array);
|
| @@ -1618,8 +1733,8 @@
|
| thissad = sad_array[i];
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.col = c;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.col = c;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1640,8 +1755,8 @@
|
| bestsad);
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.col = c;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.col = c;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1657,23 +1772,23 @@
|
| }
|
| }
|
|
|
| - this_mv.as_mv.row = best_mv->as_mv.row * 8;
|
| - this_mv.as_mv.col = best_mv->as_mv.col * 8;
|
| + this_mv.row = best_mv->as_mv.row * 8;
|
| + this_mv.col = best_mv->as_mv.col * 8;
|
|
|
| if (bestsad < INT_MAX)
|
| return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride,
|
| (unsigned int *)(&thissad)) +
|
| - mv_err_cost(&this_mv.as_mv, ¢er_mv->as_mv,
|
| + mv_err_cost(&this_mv, center_mv,
|
| mvjcost, mvcost, x->errorperbit);
|
| else
|
| return INT_MAX;
|
| }
|
|
|
| -int vp9_full_search_sadx8(MACROBLOCK *x, int_mv *ref_mv,
|
| +int vp9_full_search_sadx8(MACROBLOCK *x, MV *ref_mv,
|
| int sad_per_bit, int distance,
|
| vp9_variance_fn_ptr_t *fn_ptr,
|
| int *mvjcost, int *mvcost[2],
|
| - int_mv *center_mv, int n) {
|
| + const MV *center_mv, int n) {
|
| const MACROBLOCKD* const xd = &x->e_mbd;
|
| uint8_t *what = x->plane[0].src.buf;
|
| int what_stride = x->plane[0].src.stride;
|
| @@ -1682,15 +1797,15 @@
|
| int mv_stride = xd->plane[0].pre[0].stride;
|
| uint8_t *bestaddress;
|
| int_mv *best_mv = &x->e_mbd.mi_8x8[0]->bmi[n].as_mv[0];
|
| - int_mv this_mv;
|
| + MV this_mv;
|
| unsigned int bestsad = INT_MAX;
|
| int r, c;
|
|
|
| uint8_t *check_here;
|
| unsigned int thissad;
|
|
|
| - int ref_row = ref_mv->as_mv.row;
|
| - int ref_col = ref_mv->as_mv.col;
|
| + int ref_row = ref_mv->row;
|
| + int ref_col = ref_mv->col;
|
|
|
| int row_min = ref_row - distance;
|
| int row_max = ref_row + distance;
|
| @@ -1699,13 +1814,13 @@
|
|
|
| DECLARE_ALIGNED_ARRAY(16, uint32_t, sad_array8, 8);
|
| unsigned int sad_array[3];
|
| - int_mv fcenter_mv;
|
| + MV fcenter_mv;
|
|
|
| int *mvjsadcost = x->nmvjointsadcost;
|
| int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
|
|
| - fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
| - fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
|
| + fcenter_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.col = center_mv->col >> 3;
|
|
|
| // Work out the mid point for the search
|
| in_what = xd->plane[0].pre[0].buf;
|
| @@ -1717,7 +1832,7 @@
|
| // Baseline value at the centre
|
| bestsad = fn_ptr->sdf(what, what_stride,
|
| bestaddress, in_what_stride, 0x7fffffff)
|
| - + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv.as_mv,
|
| + + mvsad_err_cost(&best_mv->as_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| // Apply further limits to prevent us looking using vectors that stretch
|
| @@ -1728,7 +1843,7 @@
|
| row_max = MIN(row_max, x->mv_row_max);
|
|
|
| for (r = row_min; r < row_max; r++) {
|
| - this_mv.as_mv.row = r;
|
| + this_mv.row = r;
|
| check_here = r * mv_stride + in_what + col_min;
|
| c = col_min;
|
|
|
| @@ -1741,8 +1856,8 @@
|
| thissad = (unsigned int)sad_array8[i];
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.col = c;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.col = c;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1767,8 +1882,8 @@
|
| thissad = sad_array[i];
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.col = c;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.col = c;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1789,8 +1904,8 @@
|
| bestsad);
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.col = c;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.col = c;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, sad_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1806,21 +1921,22 @@
|
| }
|
| }
|
|
|
| - this_mv.as_mv.row = best_mv->as_mv.row * 8;
|
| - this_mv.as_mv.col = best_mv->as_mv.col * 8;
|
| + this_mv.row = best_mv->as_mv.row * 8;
|
| + this_mv.col = best_mv->as_mv.col * 8;
|
|
|
| if (bestsad < INT_MAX)
|
| return fn_ptr->vf(what, what_stride, bestaddress, in_what_stride,
|
| (unsigned int *)(&thissad)) +
|
| - mv_err_cost(&this_mv.as_mv, ¢er_mv->as_mv,
|
| + mv_err_cost(&this_mv, center_mv,
|
| mvjcost, mvcost, x->errorperbit);
|
| else
|
| return INT_MAX;
|
| }
|
| int vp9_refining_search_sad_c(MACROBLOCK *x,
|
| - int_mv *ref_mv, int error_per_bit,
|
| + MV *ref_mv, int error_per_bit,
|
| int search_range, vp9_variance_fn_ptr_t *fn_ptr,
|
| - int *mvjcost, int *mvcost[2], int_mv *center_mv) {
|
| + int *mvjcost, int *mvcost[2],
|
| + const MV *center_mv) {
|
| const MACROBLOCKD* const xd = &x->e_mbd;
|
| MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}};
|
| int i, j;
|
| @@ -1830,31 +1946,31 @@
|
| int in_what_stride = xd->plane[0].pre[0].stride;
|
| uint8_t *what = x->plane[0].src.buf;
|
| uint8_t *best_address = xd->plane[0].pre[0].buf +
|
| - (ref_mv->as_mv.row * xd->plane[0].pre[0].stride) +
|
| - ref_mv->as_mv.col;
|
| + (ref_mv->row * xd->plane[0].pre[0].stride) +
|
| + ref_mv->col;
|
| uint8_t *check_here;
|
| unsigned int thissad;
|
| - int_mv this_mv;
|
| + MV this_mv;
|
| unsigned int bestsad = INT_MAX;
|
| - int_mv fcenter_mv;
|
| + MV fcenter_mv;
|
|
|
| int *mvjsadcost = x->nmvjointsadcost;
|
| int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
|
|
| - fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
| - fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
|
| + fcenter_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.col = center_mv->col >> 3;
|
|
|
| bestsad = fn_ptr->sdf(what, what_stride, best_address,
|
| in_what_stride, 0x7fffffff) +
|
| - mvsad_err_cost(&ref_mv->as_mv, &fcenter_mv.as_mv,
|
| + mvsad_err_cost(ref_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, error_per_bit);
|
|
|
| for (i = 0; i < search_range; i++) {
|
| int best_site = -1;
|
|
|
| for (j = 0; j < 4; j++) {
|
| - this_row_offset = ref_mv->as_mv.row + neighbors[j].row;
|
| - this_col_offset = ref_mv->as_mv.col + neighbors[j].col;
|
| + this_row_offset = ref_mv->row + neighbors[j].row;
|
| + this_col_offset = ref_mv->col + neighbors[j].col;
|
|
|
| if ((this_col_offset > x->mv_col_min) &&
|
| (this_col_offset < x->mv_col_max) &&
|
| @@ -1866,9 +1982,9 @@
|
| bestsad);
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.row = this_row_offset;
|
| - this_mv.as_mv.col = this_col_offset;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = this_row_offset;
|
| + this_mv.col = this_col_offset;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, error_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1882,29 +1998,30 @@
|
| if (best_site == -1) {
|
| break;
|
| } else {
|
| - ref_mv->as_mv.row += neighbors[best_site].row;
|
| - ref_mv->as_mv.col += neighbors[best_site].col;
|
| + ref_mv->row += neighbors[best_site].row;
|
| + ref_mv->col += neighbors[best_site].col;
|
| best_address += (neighbors[best_site].row) * in_what_stride +
|
| neighbors[best_site].col;
|
| }
|
| }
|
|
|
| - this_mv.as_mv.row = ref_mv->as_mv.row * 8;
|
| - this_mv.as_mv.col = ref_mv->as_mv.col * 8;
|
| + this_mv.row = ref_mv->row * 8;
|
| + this_mv.col = ref_mv->col * 8;
|
|
|
| if (bestsad < INT_MAX)
|
| return fn_ptr->vf(what, what_stride, best_address, in_what_stride,
|
| (unsigned int *)(&thissad)) +
|
| - mv_err_cost(&this_mv.as_mv, ¢er_mv->as_mv,
|
| + mv_err_cost(&this_mv, center_mv,
|
| mvjcost, mvcost, x->errorperbit);
|
| else
|
| return INT_MAX;
|
| }
|
|
|
| int vp9_refining_search_sadx4(MACROBLOCK *x,
|
| - int_mv *ref_mv, int error_per_bit,
|
| + MV *ref_mv, int error_per_bit,
|
| int search_range, vp9_variance_fn_ptr_t *fn_ptr,
|
| - int *mvjcost, int *mvcost[2], int_mv *center_mv) {
|
| + int *mvjcost, int *mvcost[2],
|
| + const MV *center_mv) {
|
| const MACROBLOCKD* const xd = &x->e_mbd;
|
| MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}};
|
| int i, j;
|
| @@ -1914,31 +2031,31 @@
|
| int in_what_stride = xd->plane[0].pre[0].stride;
|
| uint8_t *what = x->plane[0].src.buf;
|
| uint8_t *best_address = xd->plane[0].pre[0].buf +
|
| - (ref_mv->as_mv.row * xd->plane[0].pre[0].stride) +
|
| - ref_mv->as_mv.col;
|
| + (ref_mv->row * xd->plane[0].pre[0].stride) +
|
| + ref_mv->col;
|
| uint8_t *check_here;
|
| unsigned int thissad;
|
| - int_mv this_mv;
|
| + MV this_mv;
|
| unsigned int bestsad = INT_MAX;
|
| - int_mv fcenter_mv;
|
| + MV fcenter_mv;
|
|
|
| int *mvjsadcost = x->nmvjointsadcost;
|
| int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
|
|
|
| - fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
| - fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
|
| + fcenter_mv.row = center_mv->row >> 3;
|
| + fcenter_mv.col = center_mv->col >> 3;
|
|
|
| bestsad = fn_ptr->sdf(what, what_stride, best_address,
|
| in_what_stride, 0x7fffffff) +
|
| - mvsad_err_cost(&ref_mv->as_mv, &fcenter_mv.as_mv,
|
| + mvsad_err_cost(ref_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, error_per_bit);
|
|
|
| for (i = 0; i < search_range; i++) {
|
| int best_site = -1;
|
| - int all_in = ((ref_mv->as_mv.row - 1) > x->mv_row_min) &
|
| - ((ref_mv->as_mv.row + 1) < x->mv_row_max) &
|
| - ((ref_mv->as_mv.col - 1) > x->mv_col_min) &
|
| - ((ref_mv->as_mv.col + 1) < x->mv_col_max);
|
| + int all_in = ((ref_mv->row - 1) > x->mv_row_min) &
|
| + ((ref_mv->row + 1) < x->mv_row_max) &
|
| + ((ref_mv->col - 1) > x->mv_col_min) &
|
| + ((ref_mv->col + 1) < x->mv_col_max);
|
|
|
| if (all_in) {
|
| unsigned int sad_array[4];
|
| @@ -1953,9 +2070,9 @@
|
|
|
| for (j = 0; j < 4; j++) {
|
| if (sad_array[j] < bestsad) {
|
| - this_mv.as_mv.row = ref_mv->as_mv.row + neighbors[j].row;
|
| - this_mv.as_mv.col = ref_mv->as_mv.col + neighbors[j].col;
|
| - sad_array[j] += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = ref_mv->row + neighbors[j].row;
|
| + this_mv.col = ref_mv->col + neighbors[j].col;
|
| + sad_array[j] += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, error_per_bit);
|
|
|
| if (sad_array[j] < bestsad) {
|
| @@ -1966,8 +2083,8 @@
|
| }
|
| } else {
|
| for (j = 0; j < 4; j++) {
|
| - this_row_offset = ref_mv->as_mv.row + neighbors[j].row;
|
| - this_col_offset = ref_mv->as_mv.col + neighbors[j].col;
|
| + this_row_offset = ref_mv->row + neighbors[j].row;
|
| + this_col_offset = ref_mv->col + neighbors[j].col;
|
|
|
| if ((this_col_offset > x->mv_col_min) &&
|
| (this_col_offset < x->mv_col_max) &&
|
| @@ -1979,9 +2096,9 @@
|
| bestsad);
|
|
|
| if (thissad < bestsad) {
|
| - this_mv.as_mv.row = this_row_offset;
|
| - this_mv.as_mv.col = this_col_offset;
|
| - thissad += mvsad_err_cost(&this_mv.as_mv, &fcenter_mv.as_mv,
|
| + this_mv.row = this_row_offset;
|
| + this_mv.col = this_col_offset;
|
| + thissad += mvsad_err_cost(&this_mv, &fcenter_mv,
|
| mvjsadcost, mvsadcost, error_per_bit);
|
|
|
| if (thissad < bestsad) {
|
| @@ -1996,20 +2113,20 @@
|
| if (best_site == -1) {
|
| break;
|
| } else {
|
| - ref_mv->as_mv.row += neighbors[best_site].row;
|
| - ref_mv->as_mv.col += neighbors[best_site].col;
|
| + ref_mv->row += neighbors[best_site].row;
|
| + ref_mv->col += neighbors[best_site].col;
|
| best_address += (neighbors[best_site].row) * in_what_stride +
|
| neighbors[best_site].col;
|
| }
|
| }
|
|
|
| - this_mv.as_mv.row = ref_mv->as_mv.row * 8;
|
| - this_mv.as_mv.col = ref_mv->as_mv.col * 8;
|
| + this_mv.row = ref_mv->row * 8;
|
| + this_mv.col = ref_mv->col * 8;
|
|
|
| if (bestsad < INT_MAX)
|
| return fn_ptr->vf(what, what_stride, best_address, in_what_stride,
|
| (unsigned int *)(&thissad)) +
|
| - mv_err_cost(&this_mv.as_mv, ¢er_mv->as_mv,
|
| + mv_err_cost(&this_mv, center_mv,
|
| mvjcost, mvcost, x->errorperbit);
|
| else
|
| return INT_MAX;
|
|
|