From c81ab015f8227e4a79358cfe0bde4985853e433e Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sun, 11 Mar 2007 09:51:01 +0000 Subject: Correctly ME border blocks Originally committed as revision 8322 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/zmbvenc.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'libavcodec/zmbvenc.c') diff --git a/libavcodec/zmbvenc.c b/libavcodec/zmbvenc.c index 1b6d87efae..a799644492 100644 --- a/libavcodec/zmbvenc.c +++ b/libavcodec/zmbvenc.c @@ -80,17 +80,19 @@ static inline int block_cmp(uint8_t *src, int stride, uint8_t *src2, int stride2 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; -- cgit v1.2.3