21 |
* along with this program ; if not, write to the Free Software |
* along with this program ; if not, write to the Free Software |
22 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
23 |
* |
* |
24 |
* $Id: estimation_bvop.c,v 1.4 2004-04-22 13:39:33 syskin Exp $ |
* $Id: estimation_bvop.c,v 1.6 2004-07-03 08:46:39 syskin Exp $ |
25 |
* |
* |
26 |
****************************************************************************/ |
****************************************************************************/ |
27 |
|
|
63 |
filter = ((fx & 1) << 1) | (fy & 1); |
filter = ((fx & 1) << 1) | (fy & 1); |
64 |
|
|
65 |
if (filter != 0) { |
if (filter != 0) { |
66 |
f_refu = data->RefQ; |
f_refu = data->RefQ + 64; |
67 |
f_refv = data->RefQ + 8; |
f_refv = data->RefQ + 64 + 8; |
68 |
if (data->chromaX != fx || data->chromaY != fy) { |
if (data->chromaX != fx || data->chromaY != fy) { |
69 |
interpolate8x8_halfpel[filter](f_refu, data->RefP[4] + offset, stride, data->rounding); |
interpolate8x8_halfpel[filter](f_refu, data->RefP[4] + offset, stride, data->rounding); |
70 |
interpolate8x8_halfpel[filter](f_refv, data->RefP[5] + offset, stride, data->rounding); |
interpolate8x8_halfpel[filter](f_refv, data->RefP[5] + offset, stride, data->rounding); |
79 |
filter = ((bx & 1) << 1) | (by & 1); |
filter = ((bx & 1) << 1) | (by & 1); |
80 |
|
|
81 |
if (filter != 0) { |
if (filter != 0) { |
82 |
b_refu = data->RefQ + 16; |
b_refu = data->RefQ + 64 + 16; |
83 |
b_refv = data->RefQ + 24; |
b_refv = data->RefQ + 64 + 24; |
84 |
if (data->b_chromaX != bx || data->b_chromaY != by) { |
if (data->b_chromaX != bx || data->b_chromaY != by) { |
85 |
interpolate8x8_halfpel[filter](b_refu, data->b_RefP[4] + offset, stride, data->rounding); |
interpolate8x8_halfpel[filter](b_refu, data->b_RefP[4] + offset, stride, data->rounding); |
86 |
interpolate8x8_halfpel[filter](b_refv, data->b_RefP[5] + offset, stride, data->rounding); |
interpolate8x8_halfpel[filter](b_refv, data->b_RefP[5] + offset, stride, data->rounding); |
611 |
return *Data->iMinSAD; /* skipped */ |
return *Data->iMinSAD; /* skipped */ |
612 |
} |
} |
613 |
|
|
|
*Data->iMinSAD += Data->lambda16; |
|
614 |
skip_sad = 4*MAX(MAX(Data->iMinSAD[1],Data->iMinSAD[2]), MAX(Data->iMinSAD[3],Data->iMinSAD[4])); |
skip_sad = 4*MAX(MAX(Data->iMinSAD[1],Data->iMinSAD[2]), MAX(Data->iMinSAD[3],Data->iMinSAD[4])); |
615 |
if (Data->chroma) skip_sad += Data->chromaSAD; |
if (Data->chroma) skip_sad += Data->chromaSAD; |
616 |
|
|
626 |
xvid_me_SubpelRefine(Data, CheckCandidate, 0); |
xvid_me_SubpelRefine(Data, CheckCandidate, 0); |
627 |
} |
} |
628 |
|
|
629 |
|
*Data->iMinSAD += Data->lambda16; |
630 |
*best_sad = *Data->iMinSAD; |
*best_sad = *Data->iMinSAD; |
631 |
|
|
632 |
if (Data->qpel || b_mb->mode == MODE_INTER4V) pMB->mode = MODE_DIRECT; |
if (Data->qpel || b_mb->mode == MODE_INTER4V) pMB->mode = MODE_DIRECT; |