|
|
|
@@ -991,13 +991,24 @@ static av_always_inline int diamond_search(MpegEncContext * s, int *best, int dm |
|
|
|
return var_diamond_search(s, best, dmin, src_index, ref_index, penalty_factor, size, h, flags); |
|
|
|
} |
|
|
|
|
|
|
|
/*! |
|
|
|
\param P[10][2] a list of candidate mvs to check before starting the |
|
|
|
iterative search. If one of the candidates is close to the optimal mv, then |
|
|
|
it takes fewer iterations. And it increases the chance that we find the |
|
|
|
optimal mv. |
|
|
|
*/ |
|
|
|
static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int *mx_ptr, int *my_ptr, |
|
|
|
int P[10][2], int src_index, int ref_index, int16_t (*last_mv)[2], |
|
|
|
int ref_mv_scale, int flags, int size, int h) |
|
|
|
{ |
|
|
|
MotionEstContext * const c= &s->me; |
|
|
|
int best[2]={0, 0}; |
|
|
|
int d, dmin; |
|
|
|
int best[2]={0, 0}; /*!< x and y coordinates of the best motion vector. |
|
|
|
i.e. the difference between the position of the |
|
|
|
block current being encoded and the position of |
|
|
|
the block chosen to predict it from. */ |
|
|
|
int d; ///< the score (cmp + penalty) of any given mv |
|
|
|
int dmin; /*!< the best value of d, i.e. the score |
|
|
|
corresponding to the mv stored in best[]. */ |
|
|
|
int map_generation; |
|
|
|
int penalty_factor; |
|
|
|
const int ref_mv_stride= s->mb_stride; //pass as arg FIXME |
|
|
|
|