--- trunk/xvidcore/src/motion/motion_est.c 2002/04/25 23:24:59 141 +++ trunk/xvidcore/src/motion/motion_est.c 2002/05/07 20:03:18 167 @@ -2,6 +2,7 @@ * * Modifications: * + * 01.05.2002 updated MotionEstimationBVOP * 25.04.2002 partial prevMB conversion * 22.04.2002 remove some compile warning by chenm001 * 14.04.2002 added MotionEstimationBVOP() @@ -289,38 +290,6 @@ if (sadInit) (*sadInit)(); - - /* eventhough we have a seperate prevMBs, - pmvfast/epsz does something "funny" with the previous frames data */ - -/* for (i = 0; i < iHcount; i++) - for (j = 0; j < iWcount; j++) - { - pMBs[j + i * iWcount].mvs[0] = prevMBs[j + i * iWcount].mvs[0]; - pMBs[j + i * iWcount].mvs[1] = prevMBs[j + i * iWcount].mvs[1]; - pMBs[j + i * iWcount].mvs[2] = prevMBs[j + i * iWcount].mvs[2]; - pMBs[j + i * iWcount].mvs[3] = prevMBs[j + i * iWcount].mvs[3]; - } -*/ - /*dprintf("*** BEFORE ***"); - for (i = 0; i < iHcount; i++) - for (j = 0; j < iWcount; j++) - { - dprintf(" [%i,%i] mode=%i dquant=%i mvs=(%i %i %i %i) sad8=(%i %i %i %i) sad16=(%i)", j,i, - pMBs[j + i * iWcount].mode, - pMBs[j + i * iWcount].dquant, - pMBs[j + i * iWcount].mvs[0], - pMBs[j + i * iWcount].mvs[1], - pMBs[j + i * iWcount].mvs[2], - pMBs[j + i * iWcount].mvs[3], - prevMBs[j + i * iWcount].sad8[0], - prevMBs[j + i * iWcount].sad8[1], - prevMBs[j + i * iWcount].sad8[2], - prevMBs[j + i * iWcount].sad8[3], - prevMBs[j + i * iWcount].sad16); - } - */ - // note: i==horizontal, j==vertical for (i = 0; i < iHcount; i++) for (j = 0; j < iWcount; j++) @@ -395,11 +364,18 @@ pMB->mode = MODE_INTER; pMB->mvs[0].x = pMB->mvs[1].x = pMB->mvs[2].x = pMB->mvs[3].x = mv16.x; pMB->mvs[0].y = pMB->mvs[1].y = pMB->mvs[2].y = pMB->mvs[3].y = mv16.y; + pMB->sad8[0] = pMB->sad8[1] = pMB->sad8[2] = pMB->sad8[3] = sad16; pMB->pmvs[0].x = pmv16.x; pMB->pmvs[0].y = pmv16.y; } else + { pMB->mode = MODE_INTER4V; + pMB->sad8[0] *= 4; + pMB->sad8[1] *= 4; + pMB->sad8[2] *= 4; + pMB->sad8[3] *= 4; + } } else { @@ -407,30 +383,13 @@ pMB->mode = MODE_INTER; pMB->mvs[0].x = pMB->mvs[1].x = pMB->mvs[2].x = pMB->mvs[3].x = mv16.x; pMB->mvs[0].y = pMB->mvs[1].y = pMB->mvs[2].y = pMB->mvs[3].y = mv16.y; + pMB->sad8[0] = pMB->sad8[1] = pMB->sad8[2] = pMB->sad8[3] = sad16; + pMB->pmvs[0].x = pmv16.x; pMB->pmvs[0].y = pmv16.y; } } -/* dprintf("*** AFTER ***", pMBs[0].b_mvs[0].x); - for (i = 0; i < iHcount; i++) - for (j = 0; j < iWcount; j++) - { - dprintf(" [%i,%i] mode=%i dquant=%i mvs=(%i %i %i %i) sad8=(%i %i %i %i) sad16=(%i)", j,i, - pMBs[j + i * iWcount].mode, - pMBs[j + i * iWcount].dquant, - pMBs[j + i * iWcount].mvs[0], - pMBs[j + i * iWcount].mvs[1], - pMBs[j + i * iWcount].mvs[2], - pMBs[j + i * iWcount].mvs[3], - pMBs[j + i * iWcount].sad8[0], - pMBs[j + i * iWcount].sad8[1], - pMBs[j + i * iWcount].sad8[2], - pMBs[j + i * iWcount].sad8[3], - pMBs[j + i * iWcount].sad16); - } - */ - return 0; } @@ -2038,7 +1997,7 @@ // TODO: need to incorporate prediction here (eg. sad += calc_delta_16) ***************************************************************/ -/* + void MotionEstimationBVOP( MBParam * const pParam, FRAMEINFO * const frame, @@ -2060,7 +2019,7 @@ const uint32_t mb_height = pParam->mb_height; const int32_t edged_width = pParam->edged_width; - int32_t i,j; + uint32_t i,j; int32_t f_sad16; int32_t b_sad16; @@ -2084,7 +2043,7 @@ && b_mb->mvs[0].x == 0 && b_mb->mvs[0].y == 0) { - mb->mode = MB_IGNORE; + mb->mode = MODE_NOT_CODED; mb->mvs[0].x = 0; mb->mvs[0].y = 0; mb->b_mvs[0].x = 0; @@ -2099,7 +2058,7 @@ i, j, frame->motion_flags, frame->quant, frame->fcode, pParam, - f_mbs, + f_mbs, f_mbs /* todo */, &mb->mvs[0], &pmv_dontcare); // ignore pmv // backward search @@ -2108,7 +2067,7 @@ i, j, frame->motion_flags, frame->quant, frame->bcode, pParam, - b_mbs, + b_mbs, b_mbs, /* todo */ &mb->b_mvs[0], &pmv_dontcare); // ignore pmv // interpolate search (simple, but effective) @@ -2128,28 +2087,26 @@ if (f_sad16 < b_sad16) { best_sad = f_sad16; - mb->mode = MB_FORWARD; + mb->mode = MODE_FORWARD; } else { best_sad = b_sad16; - mb->mode = MB_BACKWARD; + mb->mode = MODE_BACKWARD; } if (i_sad16 < best_sad) { best_sad = i_sad16; - mb->mode = MB_INTERPOLATE; + mb->mode = MODE_INTERPOLATE; } if (d_sad16 < best_sad) { best_sad = d_sad16; - mb->mode = MB_DIRECT; + mb->mode = MODE_DIRECT; } } } } - -*/