Go to the source code of this file.
Defines | |
#define | LOAD_COMMON |
#define | CHECK_HALF_MV(dx, dy, x, y) |
#define | CHECK_QUARTER_MV(dx, dy, x, y) |
#define | CHECK_MV(x, y) |
#define | CHECK_CLIPPED_MV(ax, ay) |
#define | CHECK_MV_DIR(x, y, new_dir) |
#define | check(x, y, S, v) |
#define | LOAD_COMMON2 |
#define | SAB_CHECK_MV(ax, ay) |
#define | MAX_SAB_SIZE ME_MAP_SIZE |
Functions | |
static int | hpel_motion_search (MpegEncContext *s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h) |
static int | no_sub_motion_search (MpegEncContext *s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h) |
static int | get_mb_score (MpegEncContext *s, int mx, int my, int src_index, int ref_index, int size, int h, int add_rate) |
int | ff_get_mb_score (MpegEncContext *s, int mx, int my, int src_index, int ref_index, int size, int h, int add_rate) |
static int | qpel_motion_search (MpegEncContext *s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h) |
static av_always_inline int | small_diamond_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
static int | funny_diamond_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
static int | hex_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags, int dia_size) |
static int | l2s_dia_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
static int | umh_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
static int | full_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
static int | sab_diamond_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
static int | var_diamond_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
static av_always_inline int | diamond_search (MpegEncContext *s, int *best, int dmin, int src_index, int ref_index, int const penalty_factor, int size, int h, int flags) |
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) |
int | ff_epzs_motion_search (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 size, int h) |
static int | epzs_motion_search4 (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) |
static int | epzs_motion_search2 (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) |
Definition in file motion_est_template.c.
#define check | ( | x, | |||
y, | |||||
S, | |||||
v | ) |
Value:
if( (x)<(xmin<<(S)) ) printf("%d %d %d %d %d xmin" #v, xmin, (x), (y), s->mb_x, s->mb_y);\ if( (x)>(xmax<<(S)) ) printf("%d %d %d %d %d xmax" #v, xmax, (x), (y), s->mb_x, s->mb_y);\ if( (y)<(ymin<<(S)) ) printf("%d %d %d %d %d ymin" #v, ymin, (x), (y), s->mb_x, s->mb_y);\ if( (y)>(ymax<<(S)) ) printf("%d %d %d %d %d ymax" #v, ymax, (x), (y), s->mb_x, s->mb_y);\
Definition at line 406 of file motion_est_template.c.
Referenced by h261_decode_block(), and voc_probe().
#define CHECK_CLIPPED_MV | ( | ax, | |||
ay | ) |
Value:
{\ const int Lx= ax;\ const int Ly= ay;\ const int Lx2= FFMAX(xmin, FFMIN(Lx, xmax));\ const int Ly2= FFMAX(ymin, FFMIN(Ly, ymax));\ CHECK_MV(Lx2, Ly2)\ }
Definition at line 377 of file motion_est_template.c.
Referenced by epzs_motion_search2(), epzs_motion_search4(), epzs_motion_search_internal(), full_search(), hex_search(), l2s_dia_search(), and umh_search().
#define CHECK_HALF_MV | ( | dx, | |||
dy, | |||||
x, | |||||
y | ) |
Value:
{\ const int hx= 2*(x)+(dx);\ const int hy= 2*(y)+(dy);\ d= cmp_hpel(s, x, y, dx, dy, size, h, ref_index, src_index, cmp_sub, chroma_cmp_sub, flags);\ d += (mv_penalty[hx - pred_x] + mv_penalty[hy - pred_y])*penalty_factor;\ COPY3_IF_LT(dmin, d, bx, hx, by, hy)\ }
Definition at line 38 of file motion_est_template.c.
Referenced by hpel_motion_search().
#define CHECK_MV | ( | x, | |||
y | ) |
Value:
{\ const unsigned key = ((y)<<ME_MAP_MV_BITS) + (x) + map_generation;\ const int index= (((y)<<ME_MAP_SHIFT) + (x))&(ME_MAP_SIZE-1);\ av_assert2((x) >= xmin);\ av_assert2((x) <= xmax);\ av_assert2((y) >= ymin);\ av_assert2((y) <= ymax);\ /*printf("check_mv %d %d\n", x, y);*/\ if(map[index]!=key){\ d= cmp(s, x, y, 0, 0, size, h, ref_index, src_index, cmpf, chroma_cmpf, flags);\ map[index]= key;\ score_map[index]= d;\ d += (mv_penalty[((x)<<shift)-pred_x] + mv_penalty[((y)<<shift)-pred_y])*penalty_factor;\ /*printf("score:%d\n", d);*/\ COPY3_IF_LT(dmin, d, best[0], x, best[1], y)\ }\ }
Definition at line 358 of file motion_est_template.c.
Referenced by epzs_motion_search2(), epzs_motion_search4(), epzs_motion_search_internal(), full_search(), funny_diamond_search(), sab_diamond_search(), umh_search(), and var_diamond_search().
#define CHECK_MV_DIR | ( | x, | |||
y, | |||||
new_dir | ) |
Value:
{\ const unsigned key = ((y)<<ME_MAP_MV_BITS) + (x) + map_generation;\ const int index= (((y)<<ME_MAP_SHIFT) + (x))&(ME_MAP_SIZE-1);\ /*printf("check_mv_dir %d %d %d\n", x, y, new_dir);*/\ if(map[index]!=key){\ d= cmp(s, x, y, 0, 0, size, h, ref_index, src_index, cmpf, chroma_cmpf, flags);\ map[index]= key;\ score_map[index]= d;\ d += (mv_penalty[((x)<<shift)-pred_x] + mv_penalty[((y)<<shift)-pred_y])*penalty_factor;\ /*printf("score:%d\n", d);*/\ if(d<dmin){\ best[0]=x;\ best[1]=y;\ dmin=d;\ next_dir= new_dir;\ }\ }\ }
Definition at line 386 of file motion_est_template.c.
Referenced by small_diamond_search().
#define CHECK_QUARTER_MV | ( | dx, | |||
dy, | |||||
x, | |||||
y | ) |
Value:
{\ const int hx= 4*(x)+(dx);\ const int hy= 4*(y)+(dy);\ d= cmp_qpel(s, x, y, dx, dy, size, h, ref_index, src_index, cmpf, chroma_cmpf, flags);\ d += (mv_penalty[hx - pred_x] + mv_penalty[hy - pred_y])*penalty_factor;\ COPY3_IF_LT(dmin, d, bx, hx, by, hy)\ }
Definition at line 196 of file motion_est_template.c.
Referenced by qpel_motion_search().
#define LOAD_COMMON |
Value:
uint32_t av_unused * const score_map= c->score_map;\ const int av_unused xmin= c->xmin;\ const int av_unused ymin= c->ymin;\ const int av_unused xmax= c->xmax;\ const int av_unused ymax= c->ymax;\ uint8_t *mv_penalty= c->current_mv_penalty;\ const int pred_x= c->pred_x;\ const int pred_y= c->pred_y;\
Definition at line 28 of file motion_est_template.c.
Referenced by epzs_motion_search2(), epzs_motion_search4(), epzs_motion_search_internal(), full_search(), funny_diamond_search(), get_mb_score(), hex_search(), hpel_motion_search(), l2s_dia_search(), qpel_motion_search(), sab_diamond_search(), sad_hpel_motion_search(), small_diamond_search(), umh_search(), and var_diamond_search().
#define LOAD_COMMON2 |
Value:
Definition at line 412 of file motion_est_template.c.
Referenced by epzs_motion_search2(), epzs_motion_search4(), epzs_motion_search_internal(), full_search(), funny_diamond_search(), hex_search(), l2s_dia_search(), sab_diamond_search(), small_diamond_search(), umh_search(), and var_diamond_search().
#define MAX_SAB_SIZE ME_MAP_SIZE |
#define SAB_CHECK_MV | ( | ax, | |||
ay | ) |
Value:
{\ const unsigned key = ((ay)<<ME_MAP_MV_BITS) + (ax) + map_generation;\ const int index= (((ay)<<ME_MAP_SHIFT) + (ax))&(ME_MAP_SIZE-1);\ /*printf("sab check %d %d\n", ax, ay);*/\ if(map[index]!=key){\ d= cmp(s, ax, ay, 0, 0, size, h, ref_index, src_index, cmpf, chroma_cmpf, flags);\ map[index]= key;\ score_map[index]= d;\ d += (mv_penalty[((ax)<<shift)-pred_x] + mv_penalty[((ay)<<shift)-pred_y])*penalty_factor;\ /*printf("score: %d\n", d);*/\ if(d < minima[minima_count-1].height){\ int j=0;\ \ while(d >= minima[j].height) j++;\ \ memmove(&minima [j+1], &minima [j], (minima_count - j - 1)*sizeof(Minima));\ \ minima[j].checked= 0;\ minima[j].height= d;\ minima[j].x= ax;\ minima[j].y= ay;\ \ i=-1;\ continue;\ }\ }\ }
Definition at line 655 of file motion_est_template.c.
Referenced by sab_diamond_search().
static av_always_inline int diamond_search | ( | MpegEncContext * | s, | |
int * | best, | |||
int | dmin, | |||
int | src_index, | |||
int | ref_index, | |||
int const | penalty_factor, | |||
int | size, | |||
int | h, | |||
int | flags | |||
) | [static] |
Definition at line 833 of file motion_est_template.c.
Referenced by epzs_motion_search2(), epzs_motion_search4(), and epzs_motion_search_internal().
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 | |||
) | [static] |
P | 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. |
< x and y coordinates of the best motion vector. i.e. the difference between the position of the block currently being encoded and the position of the block chosen to predict it from.
< the score (cmp + penalty) of any given mv
< the best value of d, i.e. the score corresponding to the mv stored in best[].
Definition at line 861 of file motion_est_template.c.
Referenced by ff_epzs_motion_search().
int ff_epzs_motion_search | ( | 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 | size, | |||
int | h | |||
) |
Definition at line 978 of file motion_est_template.c.
Referenced by direct_search(), encode_q_branch(), ff_estimate_motion_b(), ff_estimate_p_frame_motion(), and ff_pre_estimate_p_frame_motion().
static int get_mb_score | ( | MpegEncContext * | s, | |
int | mx, | |||
int | my, | |||
int | src_index, | |||
int | ref_index, | |||
int | size, | |||
int | h, | |||
int | add_rate | |||
) | [inline, static] |
Definition at line 162 of file motion_est_template.c.
Referenced by direct_search(), ff_estimate_motion_b(), ff_estimate_p_frame_motion(), and ff_get_mb_score().
static int hex_search | ( | MpegEncContext * | s, | |
int * | best, | |||
int | dmin, | |||
int | src_index, | |||
int | ref_index, | |||
int const | penalty_factor, | |||
int | size, | |||
int | h, | |||
int | flags, | |||
int | dia_size | |||
) | [static] |
Definition at line 501 of file motion_est_template.c.
Referenced by diamond_search(), and umh_search().
static int hpel_motion_search | ( | MpegEncContext * | s, | |
int * | mx_ptr, | |||
int * | my_ptr, | |||
int | dmin, | |||
int | src_index, | |||
int | ref_index, | |||
int | size, | |||
int | h | |||
) | [static] |
Definition at line 47 of file motion_est_template.c.
Referenced by direct_search(), and ff_init_me().
static int qpel_motion_search | ( | MpegEncContext * | s, | |
int * | mx_ptr, | |||
int * | my_ptr, | |||
int | dmin, | |||
int | src_index, | |||
int | ref_index, | |||
int | size, | |||
int | h | |||
) | [static] |
Definition at line 205 of file motion_est_template.c.
Referenced by direct_search(), and ff_init_me().