Merge "Fix range checks in motion search"
This commit is contained in:
commit
f11613b620
@ -15,6 +15,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include "vp8/common/findnearmv.h"
|
||||||
|
|
||||||
#ifdef ENTROPY_STATS
|
#ifdef ENTROPY_STATS
|
||||||
static int mv_ref_ct [31] [4] [2];
|
static int mv_ref_ct [31] [4] [2];
|
||||||
@ -866,7 +867,7 @@ int vp8_hex_search
|
|||||||
unsigned char *what = (*(b->base_src) + b->src);
|
unsigned char *what = (*(b->base_src) + b->src);
|
||||||
int what_stride = b->src_stride;
|
int what_stride = b->src_stride;
|
||||||
int in_what_stride = d->pre_stride;
|
int in_what_stride = d->pre_stride;
|
||||||
int br = ref_mv->as_mv.row, bc = ref_mv->as_mv.col;
|
int br, bc;
|
||||||
int_mv this_mv;
|
int_mv this_mv;
|
||||||
unsigned int bestsad = 0x7fffffff;
|
unsigned int bestsad = 0x7fffffff;
|
||||||
unsigned int thissad;
|
unsigned int thissad;
|
||||||
@ -880,6 +881,11 @@ int vp8_hex_search
|
|||||||
fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
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.col = center_mv->as_mv.col >> 3;
|
||||||
|
|
||||||
|
// adjust ref_mv to make sure it is within MV range
|
||||||
|
vp8_clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
|
||||||
|
br = ref_mv->as_mv.row;
|
||||||
|
bc = ref_mv->as_mv.col;
|
||||||
|
|
||||||
// Work out the start point for the search
|
// Work out the start point for the search
|
||||||
base_offset = (unsigned char *)(*(d->base_pre) + d->pre);
|
base_offset = (unsigned char *)(*(d->base_pre) + d->pre);
|
||||||
this_offset = base_offset + (br * (d->pre_stride)) + bc;
|
this_offset = base_offset + (br * (d->pre_stride)) + bc;
|
||||||
@ -1043,8 +1049,8 @@ int vp8_diamond_search_sad
|
|||||||
int best_site = 0;
|
int best_site = 0;
|
||||||
int last_site = 0;
|
int last_site = 0;
|
||||||
|
|
||||||
int ref_row = ref_mv->as_mv.row;
|
int ref_row;
|
||||||
int ref_col = ref_mv->as_mv.col;
|
int ref_col;
|
||||||
int this_row_offset;
|
int this_row_offset;
|
||||||
int this_col_offset;
|
int this_col_offset;
|
||||||
search_site *ss;
|
search_site *ss;
|
||||||
@ -1057,8 +1063,10 @@ int vp8_diamond_search_sad
|
|||||||
fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
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.col = center_mv->as_mv.col >> 3;
|
||||||
|
|
||||||
|
vp8_clamp_mv(ref_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;
|
||||||
*num00 = 0;
|
*num00 = 0;
|
||||||
|
|
||||||
best_mv->as_mv.row = ref_row;
|
best_mv->as_mv.row = ref_row;
|
||||||
best_mv->as_mv.col = ref_col;
|
best_mv->as_mv.col = ref_col;
|
||||||
|
|
||||||
@ -1162,8 +1170,8 @@ int vp8_diamond_search_sadx4
|
|||||||
int best_site = 0;
|
int best_site = 0;
|
||||||
int last_site = 0;
|
int last_site = 0;
|
||||||
|
|
||||||
int ref_row = ref_mv->as_mv.row;
|
int ref_row;
|
||||||
int ref_col = ref_mv->as_mv.col;
|
int ref_col;
|
||||||
int this_row_offset;
|
int this_row_offset;
|
||||||
int this_col_offset;
|
int this_col_offset;
|
||||||
search_site *ss;
|
search_site *ss;
|
||||||
@ -1176,6 +1184,9 @@ int vp8_diamond_search_sadx4
|
|||||||
fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
|
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.col = center_mv->as_mv.col >> 3;
|
||||||
|
|
||||||
|
vp8_clamp_mv(ref_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;
|
||||||
*num00 = 0;
|
*num00 = 0;
|
||||||
best_mv->as_mv.row = ref_row;
|
best_mv->as_mv.row = ref_row;
|
||||||
best_mv->as_mv.col = ref_col;
|
best_mv->as_mv.col = ref_col;
|
||||||
|
@ -669,8 +669,6 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
|
|||||||
mvp_full.as_mv.col = mvp.as_mv.col>>3;
|
mvp_full.as_mv.col = mvp.as_mv.col>>3;
|
||||||
mvp_full.as_mv.row = mvp.as_mv.row>>3;
|
mvp_full.as_mv.row = mvp.as_mv.row>>3;
|
||||||
|
|
||||||
/* adjust mvp to make sure it is within MV range */
|
|
||||||
vp8_clamp_mv(&mvp_full, col_min, col_max, row_min, row_max);
|
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
mvp.as_int = best_ref_mv.as_int;
|
mvp.as_int = best_ref_mv.as_int;
|
||||||
|
@ -2016,9 +2016,6 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
|
|||||||
mvp_full.as_mv.col = mvp.as_mv.col>>3;
|
mvp_full.as_mv.col = mvp.as_mv.col>>3;
|
||||||
mvp_full.as_mv.row = mvp.as_mv.row>>3;
|
mvp_full.as_mv.row = mvp.as_mv.row>>3;
|
||||||
|
|
||||||
/* adjust mvp to make sure it is within MV range */
|
|
||||||
vp8_clamp_mv(&mvp_full, col_min, col_max, row_min, row_max);
|
|
||||||
|
|
||||||
// Get intersection of UMV window and valid MV window to reduce # of checks in diamond search.
|
// Get intersection of UMV window and valid MV window to reduce # of checks in diamond search.
|
||||||
if (x->mv_col_min < col_min )
|
if (x->mv_col_min < col_min )
|
||||||
x->mv_col_min = col_min;
|
x->mv_col_min = col_min;
|
||||||
|
Loading…
Reference in New Issue
Block a user