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 uint8_t *mv_penalty = c->current_mv_penalty; \
const int pred_x= c->pred_x;\
const int pred_y= c->pred_y;\
if (mx > xmin && mx < xmax &&
my > ymin && my < ymax) {
int d= dmin;
- const int index= (my<<ME_MAP_SHIFT) + mx;
+ const int index = my * (1 << ME_MAP_SHIFT) + mx;
const int t= score_map[(index-(1<<ME_MAP_SHIFT))&(ME_MAP_SIZE-1)]
+ (mv_penalty[bx - pred_x] + mv_penalty[by-2 - pred_y])*c->penalty_factor;
const int l= score_map[(index- 1 )&(ME_MAP_SIZE-1)]
#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1
unsigned key;
unsigned map_generation= c->map_generation;
- key= ((my-1)<<ME_MAP_MV_BITS) + (mx) + map_generation;
+ key = (my - 1) * (1 << ME_MAP_MV_BITS) + (mx) + map_generation;
av_assert2(c->map[(index-(1<<ME_MAP_SHIFT))&(ME_MAP_SIZE-1)] == key);
- key= ((my+1)<<ME_MAP_MV_BITS) + (mx) + map_generation;
+ key = (my + 1) * (1 << ME_MAP_MV_BITS) + (mx) + map_generation;
av_assert2(c->map[(index+(1<<ME_MAP_SHIFT))&(ME_MAP_SIZE-1)] == key);
- key= ((my)<<ME_MAP_MV_BITS) + (mx+1) + map_generation;
+ key = (my) * (1 << ME_MAP_MV_BITS) + (mx + 1) + map_generation;
av_assert2(c->map[(index+1)&(ME_MAP_SIZE-1)] == key);
- key= ((my)<<ME_MAP_MV_BITS) + (mx-1) + map_generation;
+ key = (my) * (1 << ME_MAP_MV_BITS) + (mx - 1) + map_generation;
av_assert2(c->map[(index-1)&(ME_MAP_SIZE-1)] == key);
#endif
if(t<=b){
int src_index, int ref_index,
int size, int h)
{
- (*mx_ptr)<<=1;
- (*my_ptr)<<=1;
+ (*mx_ptr) *= 2;
+ (*my_ptr) *= 2;
return dmin;
}
int bx=4*mx, by=4*my;
int d= dmin;
int i, nx, ny;
- const int index= (my<<ME_MAP_SHIFT) + mx;
+ const int index = my * (1 << ME_MAP_SHIFT) + mx;
const int t= score_map[(index-(1<<ME_MAP_SHIFT) )&(ME_MAP_SIZE-1)];
const int l= score_map[(index- 1 )&(ME_MAP_SIZE-1)];
const int r= score_map[(index+ 1 )&(ME_MAP_SIZE-1)];
const int cy2= b + t - 2*c;
int cxy;
- if(map[(index-(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)] == ((my-1)<<ME_MAP_MV_BITS) + (mx-1) + map_generation){
+ if (map[(index - (1 << ME_MAP_SHIFT) - 1) & (ME_MAP_SIZE - 1)] ==
+ (my - 1) * (1 << ME_MAP_MV_BITS) + (mx - 1) + map_generation) {
tl= score_map[(index-(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)];
}else{
tl= cmp(s, mx-1, my-1, 0, 0, size, h, ref_index, src_index, cmpf, chroma_cmpf, flags);//FIXME wrong if chroma me is different
for(i=0; i<8; i++){
if(score < best[i]){
memmove(&best[i+1], &best[i], sizeof(int)*(7-i));
- memmove(&best_pos[i+1][0], &best_pos[i][0], sizeof(int)*2*(7-i));
+ memmove(best_pos[i + 1], best_pos[i], sizeof(best_pos[0]) * (7 - i));
best[i]= score;
best_pos[i][0]= nx + 4*mx;
best_pos[i][1]= ny + 4*my;
}
}
-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)
-{
- MotionEstContext * const c= &s->me;
- int best[2]={0, 0};
- int d, dmin;
- unsigned map_generation;
- const int penalty_factor= c->penalty_factor;
- const int size=1;
- const int h=8;
- const int ref_mv_stride= s->mb_stride;
- const int ref_mv_xy= s->mb_x + s->mb_y *ref_mv_stride;
- me_cmp_func cmpf, chroma_cmpf;
- LOAD_COMMON
- int flags= c->flags;
- LOAD_COMMON2
-
- cmpf = s->mecc.me_cmp[size];
- chroma_cmpf = s->mecc.me_cmp[size + 1];
-
- map_generation= update_map_generation(c);
-
- dmin = 1000000;
-
- /* first line */
- if (s->first_slice_line) {
- CHECK_MV(P_LEFT[0]>>shift, P_LEFT[1]>>shift)
- CHECK_CLIPPED_MV((last_mv[ref_mv_xy][0]*ref_mv_scale + (1<<15))>>16,
- (last_mv[ref_mv_xy][1]*ref_mv_scale + (1<<15))>>16)
- CHECK_MV(P_MV1[0]>>shift, P_MV1[1]>>shift)
- }else{
- CHECK_MV(P_MV1[0]>>shift, P_MV1[1]>>shift)
- //FIXME try some early stop
- CHECK_MV(P_MEDIAN[0]>>shift, P_MEDIAN[1]>>shift)
- CHECK_MV(P_LEFT[0]>>shift, P_LEFT[1]>>shift)
- CHECK_MV(P_TOP[0]>>shift, P_TOP[1]>>shift)
- CHECK_MV(P_TOPRIGHT[0]>>shift, P_TOPRIGHT[1]>>shift)
- CHECK_CLIPPED_MV((last_mv[ref_mv_xy][0]*ref_mv_scale + (1<<15))>>16,
- (last_mv[ref_mv_xy][1]*ref_mv_scale + (1<<15))>>16)
- }
- if(dmin>64*4){
- CHECK_CLIPPED_MV((last_mv[ref_mv_xy+1][0]*ref_mv_scale + (1<<15))>>16,
- (last_mv[ref_mv_xy+1][1]*ref_mv_scale + (1<<15))>>16)
- if(s->mb_y+1<s->end_mb_y) //FIXME replace at least with last_slice_line
- CHECK_CLIPPED_MV((last_mv[ref_mv_xy+ref_mv_stride][0]*ref_mv_scale + (1<<15))>>16,
- (last_mv[ref_mv_xy+ref_mv_stride][1]*ref_mv_scale + (1<<15))>>16)
- }
-
- dmin= diamond_search(s, best, dmin, src_index, ref_index, penalty_factor, size, h, flags);
-
- *mx_ptr= best[0];
- *my_ptr= best[1];
-
- return dmin;
-}
-
-//try to merge with above FIXME (needs PSNR test)
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)
+ int ref_mv_scale, const int size)
{
MotionEstContext * const c= &s->me;
int best[2]={0, 0};
int d, dmin;
unsigned map_generation;
const int penalty_factor= c->penalty_factor;
- const int size=0; //FIXME pass as arg
const int h=8;
const int ref_mv_stride= s->mb_stride;
const int ref_mv_xy= s->mb_x + s->mb_y *ref_mv_stride;