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.12 2004-07-21 14:52:22 syskin Exp $ |
* $Id: estimation_bvop.c,v 1.16 2004-10-12 21:08:41 edgomez Exp $ |
25 |
* |
* |
26 |
****************************************************************************/ |
****************************************************************************/ |
27 |
|
|
522 |
{ |
{ |
523 |
int k; |
int k; |
524 |
|
|
|
pMB->mode = MODE_DIRECT; /* just to initialize it */ |
|
|
|
|
525 |
if (!Data->chroma) { |
if (!Data->chroma) { |
526 |
int dx = 0, dy = 0, b_dx = 0, b_dy = 0; |
int dx = 0, dy = 0, b_dx = 0, b_dy = 0; |
527 |
int32_t sum; |
int32_t sum; |
541 |
b_dx = (b_dx >> 3) + roundtab_76[b_dx & 0xf]; |
b_dx = (b_dx >> 3) + roundtab_76[b_dx & 0xf]; |
542 |
|
|
543 |
sum = sad8bi(Data->CurU, |
sum = sad8bi(Data->CurU, |
544 |
Data->RefP[4] + (dy/2) * stride + dx/2, |
Data->RefP[4] + (dy/2) * (int)stride + dx/2, |
545 |
Data->b_RefP[4] + (b_dy/2) * stride + b_dx/2, |
Data->b_RefP[4] + (b_dy/2) * (int)stride + b_dx/2, |
546 |
stride); |
stride); |
547 |
|
|
548 |
if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */ |
if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */ |
549 |
|
|
550 |
sum += sad8bi(Data->CurV, |
sum += sad8bi(Data->CurV, |
551 |
Data->RefP[5] + (dy/2) * stride + dx/2, |
Data->RefP[5] + (dy/2) * (int)stride + dx/2, |
552 |
Data->b_RefP[5] + (b_dy/2) * stride + b_dx/2, |
Data->b_RefP[5] + (b_dy/2) * (int)stride + b_dx/2, |
553 |
stride); |
stride); |
554 |
|
|
555 |
if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */ |
if (sum >= MAX_CHROMA_SAD_FOR_SKIP * (int)Data->iQuant) return; /* no skip */ |
564 |
for (k = 0; k < 4; k++) { |
for (k = 0; k < 4; k++) { |
565 |
pMB->qmvs[k] = pMB->mvs[k] = Data->directmvF[k]; |
pMB->qmvs[k] = pMB->mvs[k] = Data->directmvF[k]; |
566 |
pMB->b_qmvs[k] = pMB->b_mvs[k] = Data->directmvB[k]; |
pMB->b_qmvs[k] = pMB->b_mvs[k] = Data->directmvB[k]; |
567 |
|
if (Data->qpel) { |
568 |
|
pMB->mvs[k].x /= 2; pMB->mvs[k].y /= 2; /* it's a hint for future searches */ |
569 |
|
pMB->b_mvs[k].x /= 2; pMB->b_mvs[k].y /= 2; |
570 |
|
} |
571 |
} |
} |
572 |
} |
} |
573 |
|
|
643 |
Data->directmvB[0].y |
Data->directmvB[0].y |
644 |
: Data->currentMV[1].y - Data->referencemv[0].y); |
: Data->currentMV[1].y - Data->referencemv[0].y); |
645 |
|
|
646 |
|
*best_sad = Data->iMinSAD[0]; |
647 |
|
|
648 |
return skip_sad; |
return skip_sad; |
649 |
} |
} |
650 |
|
|
939 |
const IMAGE * const b_refHV) |
const IMAGE * const b_refHV) |
940 |
{ |
{ |
941 |
uint32_t i, j; |
uint32_t i, j; |
942 |
int32_t best_sad, sad2; |
int32_t best_sad = 256*4096; |
943 |
|
int32_t sad2; |
944 |
uint32_t skip_sad; |
uint32_t skip_sad; |
945 |
|
|
946 |
const MACROBLOCK * const b_mbs = b_reference->mbs; |
const MACROBLOCK * const b_mbs = b_reference->mbs; |
1036 |
if ( (skip_sad < 2 * Data_d.iQuant * MAX_SAD00_FOR_SKIP ) |
if ( (skip_sad < 2 * Data_d.iQuant * MAX_SAD00_FOR_SKIP ) |
1037 |
&& ((100*best_sad)/(skip_sad+1) > FINAL_SKIP_THRESH) ) { |
&& ((100*best_sad)/(skip_sad+1) > FINAL_SKIP_THRESH) ) { |
1038 |
|
|
1039 |
if (!Data_d.chroma) { /* we still need to check chroma */ |
Data_d.chromaSAD = 0; /* green light for chroma check */ |
1040 |
|
|
1041 |
SkipDecisionB(pMB, &Data_d); |
SkipDecisionB(pMB, &Data_d); |
1042 |
|
|
1043 |
if (pMB->mode == MODE_DIRECT_NONE_MV) { /* skipped? */ |
if (pMB->mode == MODE_DIRECT_NONE_MV) { /* skipped? */ |
1044 |
pMB->sad16 = skip_sad; |
pMB->sad16 = skip_sad; |
1045 |
continue; |
continue; |
1046 |
} |
} |
|
} else { /* just SKIP */ |
|
|
pMB->mode = MODE_DIRECT_NONE_MV; |
|
|
pMB->sad16 = skip_sad; |
|
|
continue; |
|
|
} |
|
1047 |
} |
} |
1048 |
|
|
1049 |
if (frame->vop_flags & XVID_VOP_RD_BVOP) |
if (frame->vop_flags & XVID_VOP_RD_BVOP) |