Mercurial > libavcodec.hg
changeset 4647:255affa5bae7 libavcodec
Correctly ME border blocks
author | kostya |
---|---|
date | Sun, 11 Mar 2007 09:51:01 +0000 |
parents | cd5964d440e8 |
children | 5683b496ffbc |
files | zmbvenc.c |
diffstat | 1 files changed, 7 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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;