17 |
#include "../bitstream/vlc_codes.h" |
#include "../bitstream/vlc_codes.h" |
18 |
#include "../dct/fdct.h" |
#include "../dct/fdct.h" |
19 |
#include "motion_inlines.h" |
#include "motion_inlines.h" |
|
#include "../plugins/HVS_base.h" |
|
|
|
|
20 |
|
|
21 |
/* rd = BITS_MULT*bits + LAMBDA*distortion */ |
/* rd = BITS_MULT*bits + LAMBDA*distortion */ |
22 |
#define LAMBDA ( (int)(BITS_MULT*1.0) ) |
#define LAMBDA ( (int)(BITS_MULT*1.0) ) |
160 |
xc = x/2; yc = y/2; |
xc = x/2; yc = y/2; |
161 |
} |
} |
162 |
|
|
163 |
rd += BITS_MULT*d_mv_bits(x, y, data->predMV, data->iFcode, data->qpel^data->qpel_precision, 0); |
rd += BITS_MULT*d_mv_bits(x, y, data->predMV, data->iFcode, data->qpel^data->qpel_precision); |
164 |
|
|
165 |
for(i = 0; i < 4; i++) { |
for(i = 0; i < 4; i++) { |
166 |
int s = 8*((i&1) + (i>>1)*data->iEdgedWidth); |
int s = 8*((i&1) + (i>>1)*data->iEdgedWidth); |
267 |
if (cbp) |
if (cbp) |
268 |
rd += BITS_MULT * 6; |
rd += BITS_MULT * 6; |
269 |
if (cbp || x != 0 || y != 0) |
if (cbp || x != 0 || y != 0) |
270 |
rd += BITS_MULT * d_mv_bits(x, y, zeroMV, 1, 0, 0); |
rd += BITS_MULT * d_mv_bits(x, y, zeroMV, 1, 0); |
271 |
|
|
272 |
if (rd < *(data->iMinSAD)) { |
if (rd < *(data->iMinSAD)) { |
273 |
*data->iMinSAD = rd; |
*data->iMinSAD = rd; |
322 |
xcb = xb/2; ycb = yb/2; |
xcb = xb/2; ycb = yb/2; |
323 |
} |
} |
324 |
|
|
325 |
rd += BITS_MULT * (d_mv_bits(xf, yf, data->predMV, data->iFcode, data->qpel^data->qpel_precision, 0) |
rd += BITS_MULT * (d_mv_bits(xf, yf, data->predMV, data->iFcode, data->qpel^data->qpel_precision) |
326 |
+ d_mv_bits(xb, yb, data->bpredMV, data->iFcode, data->qpel^data->qpel_precision, 0)); |
+ d_mv_bits(xb, yb, data->bpredMV, data->iFcode, data->qpel^data->qpel_precision)); |
327 |
|
|
328 |
|
|
329 |
for(i = 0; i < 4; i++) { |
for(i = 0; i < 4; i++) { |
375 |
Data->iMinSAD[0] = *best_sad; |
Data->iMinSAD[0] = *best_sad; |
376 |
|
|
377 |
get_range(&Data->min_dx, &Data->max_dx, &Data->min_dy, &Data->max_dy, |
get_range(&Data->min_dx, &Data->max_dx, &Data->min_dy, &Data->max_dy, |
378 |
x, y, 4, pParam->width, pParam->height, Data->iFcode, 1 + Data->qpel, 0); |
x, y, 4, pParam->width, pParam->height, Data->iFcode, 1 + Data->qpel); |
379 |
|
|
380 |
Data->qpel_precision = Data->qpel; |
Data->qpel_precision = Data->qpel; |
381 |
|
|
418 |
Data->iMinSAD[0] = *best_sad; |
Data->iMinSAD[0] = *best_sad; |
419 |
|
|
420 |
get_range(&Data->min_dx, &Data->max_dx, &Data->min_dy, &Data->max_dy, |
get_range(&Data->min_dx, &Data->max_dx, &Data->min_dy, &Data->max_dy, |
421 |
x, y, 4, pParam->width, pParam->height, Data->iFcode, 1 + Data->qpel, 0); |
x, y, 4, pParam->width, pParam->height, Data->iFcode, 1 + Data->qpel); |
422 |
|
|
423 |
Data->qpel_precision = Data->qpel; |
Data->qpel_precision = Data->qpel; |
424 |
|
|
514 |
case MODE_BACKWARD: |
case MODE_BACKWARD: |
515 |
rd = b_rd = SearchBF_RD(x, y, MotionFlags, pParam, &best_rd, Data_b); |
rd = b_rd = SearchBF_RD(x, y, MotionFlags, pParam, &best_rd, Data_b); |
516 |
break; |
break; |
517 |
|
default: |
518 |
case MODE_INTERPOLATE: |
case MODE_INTERPOLATE: |
519 |
rd = i_rd = SearchInterpolate_RD(x, y, MotionFlags, pParam, &best_rd, Data_i); |
rd = i_rd = SearchInterpolate_RD(x, y, MotionFlags, pParam, &best_rd, Data_i); |
520 |
break; |
break; |
576 |
} |
} |
577 |
pMB->mvs[0] = *Data_f->currentMV; |
pMB->mvs[0] = *Data_f->currentMV; |
578 |
pMB->cbp = *Data_f->cbp; |
pMB->cbp = *Data_f->cbp; |
579 |
|
pMB->b_mvs[0] = *Data_b->currentMV; /* hint for future searches */ |
580 |
break; |
break; |
581 |
|
|
582 |
case MODE_BACKWARD: |
case MODE_BACKWARD: |
592 |
} |
} |
593 |
pMB->b_mvs[0] = *Data_b->currentMV; |
pMB->b_mvs[0] = *Data_b->currentMV; |
594 |
pMB->cbp = *Data_b->cbp; |
pMB->cbp = *Data_b->cbp; |
595 |
|
pMB->mvs[0] = *Data_f->currentMV; /* hint for future searches */ |
596 |
break; |
break; |
597 |
|
|
598 |
|
|