Modification and issue fix in full-pixel refining search
Further modification and wrong implementation fix which caused refining_search and refining_searchx4 result mismatching. Change-Id: I80cb3a44bf5824413fd50c972e383eebb75f9b6f
This commit is contained in:
parent
c7a56f677d
commit
b4da1f83e6
@ -1624,7 +1624,6 @@ int vp8_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
|
||||
int vp8_refining_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int error_per_bit, int search_range, vp8_variance_fn_ptr_t *fn_ptr, int *mvcost[2], MV *center_mv)
|
||||
{
|
||||
MV neighbors[4] = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
|
||||
MV tempmv;
|
||||
int i, j;
|
||||
short this_row_offset, this_col_offset;
|
||||
|
||||
@ -1647,8 +1646,7 @@ int vp8_refining_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int
|
||||
|
||||
for (i=0; i<search_range; i++)
|
||||
{
|
||||
tempmv.row = ref_mv->row;
|
||||
tempmv.col = ref_mv->col;
|
||||
int best_site = -1;
|
||||
|
||||
for (j = 0 ; j < 4 ; j++)
|
||||
{
|
||||
@ -1670,16 +1668,20 @@ int vp8_refining_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int
|
||||
if (thissad < bestsad)
|
||||
{
|
||||
bestsad = thissad;
|
||||
ref_mv->row = this_row_offset;
|
||||
ref_mv->col = this_col_offset;
|
||||
best_address = check_here;
|
||||
best_site = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tempmv.row == ref_mv->row && tempmv.col == ref_mv->col )
|
||||
if (best_site == -1)
|
||||
break;
|
||||
else
|
||||
{
|
||||
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.row = ref_mv->row << 3;
|
||||
@ -1695,7 +1697,6 @@ int vp8_refining_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int
|
||||
int vp8_refining_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int error_per_bit, int search_range, vp8_variance_fn_ptr_t *fn_ptr, int *mvcost[2], MV *center_mv)
|
||||
{
|
||||
MV neighbors[4] = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
|
||||
MV tempmv;
|
||||
int i, j;
|
||||
short this_row_offset, this_col_offset;
|
||||
|
||||
@ -1718,11 +1719,9 @@ int vp8_refining_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, in
|
||||
|
||||
for (i=0; i<search_range; i++)
|
||||
{
|
||||
int best_site = -1;
|
||||
int all_in = 1;
|
||||
|
||||
tempmv.row = ref_mv->row;
|
||||
tempmv.col = ref_mv->col;
|
||||
|
||||
all_in &= ((ref_mv->row - 1) > x->mv_row_min);
|
||||
all_in &= ((ref_mv->row + 1) < x->mv_row_max);
|
||||
all_in &= ((ref_mv->col - 1) > x->mv_col_min);
|
||||
@ -1750,9 +1749,7 @@ int vp8_refining_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, in
|
||||
if (sad_array[j] < bestsad)
|
||||
{
|
||||
bestsad = sad_array[j];
|
||||
ref_mv->row = this_mv.row;
|
||||
ref_mv->col = this_mv.col;
|
||||
best_address = block_offset[j];
|
||||
best_site = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1779,17 +1776,21 @@ int vp8_refining_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, in
|
||||
if (thissad < bestsad)
|
||||
{
|
||||
bestsad = thissad;
|
||||
ref_mv->row = this_row_offset;
|
||||
ref_mv->col = this_col_offset;
|
||||
best_address = check_here;
|
||||
best_site = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tempmv.row == ref_mv->row && tempmv.col == ref_mv->col )
|
||||
break;
|
||||
if (best_site == -1)
|
||||
break;
|
||||
else
|
||||
{
|
||||
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.row = ref_mv->row << 3;
|
||||
|
Loading…
x
Reference in New Issue
Block a user