From a6daaf7cce2df4123cf3f560d9dd805f3578a0a7 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 17 Dec 2006 12:07:09 +0000 Subject: [PATCH] limit x/ymin/max to me_range slight psnr/bitrate gain for most but not all files if me_range is used Originally committed as revision 7325 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/motion_est.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index cb6cc64..d81ab32 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -689,6 +689,7 @@ static inline void set_p_mv_tables(MpegEncContext * s, int mx, int my, int mv4) static inline void get_limits(MpegEncContext *s, int x, int y) { MotionEstContext * const c= &s->me; + int range= c->avctx->me_range >> (1 + !!(c->flags&FLAG_QPEL)); /* if(c->avctx->me_range) c->range= c->avctx->me_range >> 1; else c->range= 16; @@ -710,6 +711,12 @@ static inline void get_limits(MpegEncContext *s, int x, int y) c->xmax = - x + s->mb_width *16 - 16; c->ymax = - y + s->mb_height*16 - 16; } + if(range){ + c->xmin = FFMAX(c->xmin,-range); + c->xmax = FFMIN(c->xmax, range); + c->ymin = FFMAX(c->ymin,-range); + c->ymax = FFMIN(c->ymax, range); + } } static inline void init_mv4_ref(MotionEstContext *c){ -- 2.7.4