3297 |
f_predMV.x, f_predMV.y, b_predMV.x, b_predMV.y, |
f_predMV.x, f_predMV.y, b_predMV.x, b_predMV.y, |
3298 |
f_min_dx, f_max_dx, f_min_dy, f_max_dy, |
f_min_dx, f_max_dx, f_min_dy, f_max_dy, |
3299 |
b_min_dx, b_max_dx, b_min_dy, b_max_dy, |
b_min_dx, b_max_dx, b_min_dy, b_max_dy, |
3300 |
edged_width, 1, |
edged_width, 2, |
3301 |
frame->fcode, frame->bcode,frame->quant,0); |
frame->fcode, frame->bcode,frame->quant,0); |
3302 |
|
|
3303 |
|
i_sad16 = Diamond16_InterpolMainSearch( |
3304 |
|
f_ref->y, f_refH->y, f_refV->y, f_refHV->y, |
3305 |
|
frame->image.y + i * 16 + j * 16 * edged_width, |
3306 |
|
b_ref->y, b_refH->y, b_refV->y, b_refHV->y, |
3307 |
|
i, j, |
3308 |
|
f_interpolMV.x, f_interpolMV.y, |
3309 |
|
b_interpolMV.x, b_interpolMV.y, |
3310 |
|
i_sad16, |
3311 |
|
&f_interpolMV, &b_interpolMV, |
3312 |
|
f_predMV.x, f_predMV.y, b_predMV.x, b_predMV.y, |
3313 |
|
f_min_dx, f_max_dx, f_min_dy, f_max_dy, |
3314 |
|
b_min_dx, b_max_dx, b_min_dy, b_max_dy, |
3315 |
|
edged_width, 1, |
3316 |
|
frame->fcode, frame->bcode,frame->quant,0); // equiv to halfpel refine |
3317 |
|
|
3318 |
|
|
3319 |
/* DIRECT MODE DELTA VECTOR SEARCH. |
/* DIRECT MODE DELTA VECTOR SEARCH. |
3320 |
This has to be made more effective, but at the moment I'm happy it's running at all */ |
This has to be made more effective, but at the moment I'm happy it's running at all */ |
3321 |
|
|
3322 |
/* range is taken without fcode restriction, just a hack instead of writing down the dimensions, of course */ |
/* There are two range restrictions for direct mode: deltaMV is limited to [-32,31] in halfpel units, and |
3323 |
|
absolute vector must not lie outside of image dimensions. Constraint one is dealt with by CHECK_MV16_DIRECT |
3324 |
|
and for constraint two we need distance to boundary. This is done by get_range very large fcode (hack!) */ |
3325 |
|
|
3326 |
get_range(&min_dx, &max_dx, &min_dy, &max_dy, i, j, 16, iWidth, iHeight, 19); |
get_range(&min_dx, &max_dx, &min_dy, &max_dy, i, j, 16, iWidth, iHeight, 19); |
3327 |
|
|
3334 |
0,0, |
0,0, |
3335 |
d_sad16, |
d_sad16, |
3336 |
&mb->deltamv, |
&mb->deltamv, |
3337 |
mb->directmv, // this has to be pre-initialized with b_mb->mvs[} |
mb->directmv, // this has to be pre-initialized with b_mb->mvs[] |
3338 |
|
min_dx, max_dx, min_dy, max_dy, |
3339 |
|
edged_width, 2, frame->quant, 0); |
3340 |
|
|
3341 |
|
d_sad16 = Diamond16_DirectMainSearch( |
3342 |
|
f_ref->y, f_refH->y, f_refV->y, f_refHV->y, |
3343 |
|
frame->image.y + i*16 + j*16*edged_width, |
3344 |
|
b_ref->y, b_refH->y, b_refV->y, b_refHV->y, |
3345 |
|
i, j, |
3346 |
|
TRB,TRD, |
3347 |
|
mb->deltamv.x, mb->deltamv.y, |
3348 |
|
d_sad16, |
3349 |
|
&mb->deltamv, |
3350 |
|
mb->directmv, // this has to be pre-initialized with b_mb->mvs[] |
3351 |
min_dx, max_dx, min_dy, max_dy, |
min_dx, max_dx, min_dy, max_dy, |
3352 |
edged_width, 1, frame->quant, 0); |
edged_width, 1, frame->quant, 0); // equiv to halfpel refine |
3353 |
|
|
3354 |
|
|
3355 |
// i_sad16 = 65535; /* remove the comment to disable any of the MODEs */ |
// i_sad16 = 65535; /* remove the comment to disable any of the MODEs */ |