# HG changeset patch # User kostya # Date 1173606661 0 # Node ID 255affa5bae7bafbc0ce2439c9a68b40bd964536 # Parent cd5964d440e87f8e9f1d668e0c69a6c279f41ca7 Correctly ME border blocks diff -r cd5964d440e8 -r 255affa5bae7 zmbvenc.c --- a/zmbvenc.c Sun Mar 11 09:16:11 2007 +0000 +++ b/zmbvenc.c Sun Mar 11 09:51:01 2007 +0000 @@ -80,17 +80,19 @@ static int zmbv_me(ZmbvEncContext *c, uint8_t *src, int sstride, uint8_t *prev, int pstride, int x, int y, int *mx, int *my) { - int dx, dy, tx, ty, tv, bv; + int dx, dy, tx, ty, tv, bv, bw, bh; *mx = *my = 0; - bv = block_cmp(src, sstride, prev, pstride, ZMBV_BLOCK, ZMBV_BLOCK); + bw = FFMIN(ZMBV_BLOCK, c->avctx->width - x); + bh = FFMIN(ZMBV_BLOCK, c->avctx->height - y); + bv = block_cmp(src, sstride, prev, pstride, bw, bh); if(!bv) return 0; - for(ty = FFMAX(y - c->range, 0); ty < FFMIN(y + c->range, c->avctx->height - ZMBV_BLOCK); ty++){ - for(tx = FFMAX(x - c->range, 0); tx < FFMIN(x + c->range, c->avctx->width - ZMBV_BLOCK); tx++){ + 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(src, sstride, prev + dx + dy*pstride, pstride, ZMBV_BLOCK, ZMBV_BLOCK); + tv = block_cmp(src, sstride, prev + dx + dy*pstride, pstride, bw, bh); if(tv < bv){ bv = tv; *mx = dx;