Merge "Refactor refining_search_sad code"
This commit is contained in:
Коммит
46441ec5c8
|
@ -786,8 +786,7 @@ $vp9_full_search_sad_sse3=vp9_full_search_sadx3;
|
|||
$vp9_full_search_sad_sse4_1=vp9_full_search_sadx8;
|
||||
|
||||
add_proto qw/int vp9_refining_search_sad/, "const struct macroblock *x, struct mv *ref_mv, int sad_per_bit, int distance, const struct vp9_variance_vtable *fn_ptr, const struct mv *center_mv";
|
||||
specialize qw/vp9_refining_search_sad sse3/;
|
||||
$vp9_refining_search_sad_sse3=vp9_refining_search_sadx4;
|
||||
specialize qw/vp9_refining_search_sad/;
|
||||
|
||||
add_proto qw/int vp9_diamond_search_sad/, "const struct macroblock *x, const struct search_site_config *cfg, struct mv *ref_mv, struct mv *best_mv, int search_param, int sad_per_bit, int *num00, const struct vp9_variance_vtable *fn_ptr, const struct mv *center_mv";
|
||||
specialize qw/vp9_diamond_search_sad sse3/;
|
||||
|
|
|
@ -1334,51 +1334,6 @@ int vp9_refining_search_sad_c(const MACROBLOCK *x,
|
|||
int search_range,
|
||||
const vp9_variance_fn_ptr_t *fn_ptr,
|
||||
const MV *center_mv) {
|
||||
const MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}};
|
||||
const MACROBLOCKD *const xd = &x->e_mbd;
|
||||
const struct buf_2d *const what = &x->plane[0].src;
|
||||
const struct buf_2d *const in_what = &xd->plane[0].pre[0];
|
||||
const MV fcenter_mv = {center_mv->row >> 3, center_mv->col >> 3};
|
||||
unsigned int best_sad = fn_ptr->sdf(what->buf, what->stride,
|
||||
get_buf_from_mv(in_what, ref_mv),
|
||||
in_what->stride) +
|
||||
mvsad_err_cost(x, ref_mv, &fcenter_mv, error_per_bit);
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < search_range; i++) {
|
||||
int best_site = -1;
|
||||
|
||||
for (j = 0; j < 4; j++) {
|
||||
const MV mv = {ref_mv->row + neighbors[j].row,
|
||||
ref_mv->col + neighbors[j].col};
|
||||
if (is_mv_in(x, &mv)) {
|
||||
unsigned int sad = fn_ptr->sdf(what->buf, what->stride,
|
||||
get_buf_from_mv(in_what, &mv), in_what->stride);
|
||||
if (sad < best_sad) {
|
||||
sad += mvsad_err_cost(x, &mv, &fcenter_mv, error_per_bit);
|
||||
if (sad < best_sad) {
|
||||
best_sad = sad;
|
||||
best_site = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (best_site == -1) {
|
||||
break;
|
||||
} else {
|
||||
ref_mv->row += neighbors[best_site].row;
|
||||
ref_mv->col += neighbors[best_site].col;
|
||||
}
|
||||
}
|
||||
return best_sad;
|
||||
}
|
||||
|
||||
int vp9_refining_search_sadx4(const MACROBLOCK *x,
|
||||
MV *ref_mv, int error_per_bit,
|
||||
int search_range,
|
||||
const vp9_variance_fn_ptr_t *fn_ptr,
|
||||
const MV *center_mv) {
|
||||
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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче