--- branches/dev-api-3/xvidcore/src/motion/motion_est.c 2002/10/02 12:57:25 575 +++ branches/dev-api-3/xvidcore/src/motion/motion_est.c 2002/10/03 08:26:19 576 @@ -269,7 +269,7 @@ const uint8_t *ReferenceB; VECTOR mvs, b_mvs; - if (( x > 31) || ( x < -31) || ( y > 31) || (y < -31)) return; + if (( x > 31) || ( x < -32) || ( y > 31) || (y < -32)) return; sad = lambda_vec16[data->iQuant] * d_mv_bits(x, y, 1); @@ -1711,3 +1711,32 @@ return 0; // B frame } + +int +FindFcode( const MBParam * const pParam, + const FRAMEINFO * const current) +{ + uint32_t x, y; + int max = 0, min = 0, i; + + for (y = 0; y < pParam->mb_height; y++) { + for (x = 0; x < pParam->mb_width; x++) { + + MACROBLOCK *pMB = ¤t->mbs[x + y * pParam->mb_width]; + for(i = 0; i < (pMB->mode == MODE_INTER4V ? 4:1); i++) { + if (pMB->mvs[i].x > max) max = pMB->mvs[i].x; + if (pMB->mvs[i].y > max) max = pMB->mvs[i].y; + + if (pMB->mvs[i].x < min) min = pMB->mvs[i].x; + if (pMB->mvs[i].y < min) min = pMB->mvs[i].y; + } + } + } + + min = -min; + max += 1; + if (min > max) max = min; + + for (i = 1; (max > 32 << (i - 1)); i++); + return i; +}