- for(ty = FFMAX(y - c->range, 0); ty < FFMIN(y + c->range, c->avctx->height - bh); ty++){
- for(tx = FFMAX(x - c->range, 0); tx < FFMIN(x + c->range, c->avctx->width - bw); tx++){
- if(tx == x && ty == y) continue; // we already tested this block
- dx = tx - x;
- dy = ty - y;
- tv = block_cmp(c, src, sstride, prev + dx + dy * pstride, pstride, bw, bh, xored);
+
+ /* Try previous block's MV (if not 0,0) */
+ if (mx0 || my0){
+ tv = block_cmp(c, src, sstride, prev + mx0 * c->bypp + my0 * pstride, pstride, bw, bh, &txored);
+ if(tv < bv){
+ bv = tv;
+ *mx = mx0;
+ *my = my0;
+ *xored = txored;
+ if(!bv) return 0;
+ }
+ }
+
+ /* Try other MVs from top-to-bottom, left-to-right */
+ for(dy = -c->lrange; dy <= c->urange; dy++){
+ for(dx = -c->lrange; dx <= c->urange; dx++){
+ if(!dx && !dy) continue; // we already tested this block
+ if(dx == mx0 && dy == my0) continue; // this one too
+ tv = block_cmp(c, src, sstride, prev + dx * c->bypp + dy * pstride, pstride, bw, bh, &txored);