|
@@ -44,75 +44,6 @@ |
|
|
COPY3_IF_LT(dmin, d, bx, hx, by, hy)\ |
|
|
COPY3_IF_LT(dmin, d, bx, hx, by, hy)\ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
|
|
static int hpel_motion_search)(MpegEncContext * s, |
|
|
|
|
|
int *mx_ptr, int *my_ptr, int dmin, |
|
|
|
|
|
uint8_t *ref_data[3], |
|
|
|
|
|
int size) |
|
|
|
|
|
{ |
|
|
|
|
|
const int xx = 16 * s->mb_x + 8*(n&1); |
|
|
|
|
|
const int yy = 16 * s->mb_y + 8*(n>>1); |
|
|
|
|
|
const int mx = *mx_ptr; |
|
|
|
|
|
const int my = *my_ptr; |
|
|
|
|
|
const int penalty_factor= c->sub_penalty_factor; |
|
|
|
|
|
|
|
|
|
|
|
LOAD_COMMON |
|
|
|
|
|
|
|
|
|
|
|
// INIT; |
|
|
|
|
|
//FIXME factorize |
|
|
|
|
|
me_cmp_func cmp, chroma_cmp, cmp_sub, chroma_cmp_sub; |
|
|
|
|
|
|
|
|
|
|
|
if(s->no_rounding /*FIXME b_type*/){ |
|
|
|
|
|
hpel_put= &s->dsp.put_no_rnd_pixels_tab[size]; |
|
|
|
|
|
chroma_hpel_put= &s->dsp.put_no_rnd_pixels_tab[size+1]; |
|
|
|
|
|
}else{ |
|
|
|
|
|
hpel_put=& s->dsp.put_pixels_tab[size]; |
|
|
|
|
|
chroma_hpel_put= &s->dsp.put_pixels_tab[size+1]; |
|
|
|
|
|
} |
|
|
|
|
|
cmpf= s->dsp.me_cmp[size]; |
|
|
|
|
|
chroma_cmpf= s->dsp.me_cmp[size+1]; |
|
|
|
|
|
cmp_sub= s->dsp.me_sub_cmp[size]; |
|
|
|
|
|
chroma_cmp_sub= s->dsp.me_sub_cmp[size+1]; |
|
|
|
|
|
|
|
|
|
|
|
if(c->skip){ //FIXME somehow move up (benchmark) |
|
|
|
|
|
*mx_ptr = 0; |
|
|
|
|
|
*my_ptr = 0; |
|
|
|
|
|
return dmin; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(c->avctx->me_cmp != c->avctx->me_sub_cmp){ |
|
|
|
|
|
CMP_HPEL(dmin, 0, 0, mx, my, size); |
|
|
|
|
|
if(mx || my) |
|
|
|
|
|
dmin += (mv_penalty[2*mx - pred_x] + mv_penalty[2*my - pred_y])*penalty_factor; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (mx > xmin && mx < xmax && |
|
|
|
|
|
my > ymin && my < ymax) { |
|
|
|
|
|
int bx=2*mx, by=2*my; |
|
|
|
|
|
int d= dmin; |
|
|
|
|
|
|
|
|
|
|
|
CHECK_HALF_MV(1, 1, mx-1, my-1) |
|
|
|
|
|
CHECK_HALF_MV(0, 1, mx , my-1) |
|
|
|
|
|
CHECK_HALF_MV(1, 1, mx , my-1) |
|
|
|
|
|
CHECK_HALF_MV(1, 0, mx-1, my ) |
|
|
|
|
|
CHECK_HALF_MV(1, 0, mx , my ) |
|
|
|
|
|
CHECK_HALF_MV(1, 1, mx-1, my ) |
|
|
|
|
|
CHECK_HALF_MV(0, 1, mx , my ) |
|
|
|
|
|
CHECK_HALF_MV(1, 1, mx , my ) |
|
|
|
|
|
|
|
|
|
|
|
assert(bx >= xmin*2 || bx <= xmax*2 || by >= ymin*2 || by <= ymax*2); |
|
|
|
|
|
|
|
|
|
|
|
*mx_ptr = bx; |
|
|
|
|
|
*my_ptr = by; |
|
|
|
|
|
}else{ |
|
|
|
|
|
*mx_ptr =2*mx; |
|
|
|
|
|
*my_ptr =2*my; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return dmin; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#else |
|
|
|
|
|
static int hpel_motion_search(MpegEncContext * s, |
|
|
static int hpel_motion_search(MpegEncContext * s, |
|
|
int *mx_ptr, int *my_ptr, int dmin, |
|
|
int *mx_ptr, int *my_ptr, int dmin, |
|
|
int src_index, int ref_index, |
|
|
int src_index, int ref_index, |
|
@@ -218,7 +149,6 @@ static int hpel_motion_search(MpegEncContext * s, |
|
|
|
|
|
|
|
|
return dmin; |
|
|
return dmin; |
|
|
} |
|
|
} |
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
static int no_sub_motion_search(MpegEncContext * s, |
|
|
static int no_sub_motion_search(MpegEncContext * s, |
|
|
int *mx_ptr, int *my_ptr, int dmin, |
|
|
int *mx_ptr, int *my_ptr, int dmin, |
|
@@ -321,7 +251,6 @@ static int qpel_motion_search(MpegEncContext * s, |
|
|
int best_pos[8][2]; |
|
|
int best_pos[8][2]; |
|
|
|
|
|
|
|
|
memset(best, 64, sizeof(int)*8); |
|
|
memset(best, 64, sizeof(int)*8); |
|
|
#if 1 |
|
|
|
|
|
if(s->me.dia_size>=2){ |
|
|
if(s->me.dia_size>=2){ |
|
|
const int tl= score_map[(index-(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)]; |
|
|
const int tl= score_map[(index-(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)]; |
|
|
const int bl= score_map[(index+(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)]; |
|
|
const int bl= score_map[(index+(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)]; |
|
@@ -410,76 +339,6 @@ static int qpel_motion_search(MpegEncContext * s, |
|
|
CHECK_QUARTER_MV(nx&3, ny&3, nx>>2, ny>>2) |
|
|
CHECK_QUARTER_MV(nx&3, ny&3, nx>>2, ny>>2) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
|
|
const int tl= score_map[(index-(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)]; |
|
|
|
|
|
const int bl= score_map[(index+(1<<ME_MAP_SHIFT)-1)&(ME_MAP_SIZE-1)]; |
|
|
|
|
|
const int tr= score_map[(index-(1<<ME_MAP_SHIFT)+1)&(ME_MAP_SIZE-1)]; |
|
|
|
|
|
const int br= score_map[(index+(1<<ME_MAP_SHIFT)+1)&(ME_MAP_SIZE-1)]; |
|
|
|
|
|
// if(l < r && l < t && l < b && l < tl && l < bl && l < tr && l < br && bl < tl){ |
|
|
|
|
|
if(tl<br){ |
|
|
|
|
|
|
|
|
|
|
|
// nx= FFMAX(4*mx - bx, bx - 4*mx); |
|
|
|
|
|
// ny= FFMAX(4*my - by, by - 4*my); |
|
|
|
|
|
|
|
|
|
|
|
static int stats[7][7], count; |
|
|
|
|
|
count++; |
|
|
|
|
|
stats[4*mx - bx + 3][4*my - by + 3]++; |
|
|
|
|
|
if(256*256*256*64 % count ==0){ |
|
|
|
|
|
for(i=0; i<49; i++){ |
|
|
|
|
|
if((i%7)==0) printf("\n"); |
|
|
|
|
|
printf("%6d ", stats[0][i]); |
|
|
|
|
|
} |
|
|
|
|
|
printf("\n"); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
#else |
|
|
|
|
|
|
|
|
|
|
|
CHECK_QUARTER_MV(2, 2, mx-1, my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(0, 2, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 2, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 0, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 2, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(0, 2, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 2, mx-1, my ) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 0, mx-1, my ) |
|
|
|
|
|
|
|
|
|
|
|
nx= bx; |
|
|
|
|
|
ny= by; |
|
|
|
|
|
|
|
|
|
|
|
for(i=0; i<8; i++){ |
|
|
|
|
|
int ox[8]= {0, 1, 1, 1, 0,-1,-1,-1}; |
|
|
|
|
|
int oy[8]= {1, 1, 0,-1,-1,-1, 0, 1}; |
|
|
|
|
|
CHECK_QUARTER_MV((nx + ox[i])&3, (ny + oy[i])&3, (nx + ox[i])>>2, (ny + oy[i])>>2) |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
#if 0 |
|
|
|
|
|
//outer ring |
|
|
|
|
|
CHECK_QUARTER_MV(1, 3, mx-1, my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 2, mx-1, my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 1, mx-1, my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 1, mx-1, my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 1, mx-1, my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(0, 1, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 1, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 1, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 1, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 2, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 3, mx , my-1) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 0, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 1, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 2, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 3, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 3, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 3, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(0, 3, mx , my ) |
|
|
|
|
|
CHECK_QUARTER_MV(3, 3, mx-1, my ) |
|
|
|
|
|
CHECK_QUARTER_MV(2, 3, mx-1, my ) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 3, mx-1, my ) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 2, mx-1, my ) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 1, mx-1, my ) |
|
|
|
|
|
CHECK_QUARTER_MV(1, 0, mx-1, my ) |
|
|
|
|
|
#endif |
|
|
|
|
|
assert(bx >= xmin*4 && bx <= xmax*4 && by >= ymin*4 && by <= ymax*4); |
|
|
assert(bx >= xmin*4 && bx <= xmax*4 && by >= ymin*4 && by <= ymax*4); |
|
|
|
|
|
|
|
|
*mx_ptr = bx; |
|
|
*mx_ptr = bx; |
|
|