# HG changeset patch # User kostya # Date 1153540673 0 # Node ID f8d3be212bceed78a758d60c186abd1b46661e81 # Parent da6095607f260b208997eaa4138c2d5450f97fc5 Replace code for clipping MV vectors (which is wrong to use here) with clipping source coords. diff -r da6095607f26 -r f8d3be212bce vc1.c --- a/vc1.c Sat Jul 22 03:54:00 2006 +0000 +++ b/vc1.c Sat Jul 22 03:57:53 2006 +0000 @@ -894,11 +894,6 @@ dsp->put_pixels_clamped(block[5], v->s.dest[2], vs); } -/* clip motion vector as specified in 8.3.6.5 */ -#define CLIP_RANGE(mv, src, lim, bs) \ - if(mv < -bs) mv = -bs - src * bs; \ - if(mv > lim) mv = lim - src * bs; - /** Do motion compensation over 1 macroblock * Mostly adapted hpel_motion and qpel_motion from mpegvideo.c */ @@ -924,10 +919,10 @@ uvsrc_x = s->mb_x * 8 + (uvmx >> 2); uvsrc_y = s->mb_y * 8 + (uvmy >> 2); - CLIP_RANGE( src_x, s->mb_x, s->mb_width * 16, 16); - CLIP_RANGE( src_y, s->mb_y, s->mb_height * 16, 16); - CLIP_RANGE(uvsrc_x, s->mb_x, s->mb_width * 8, 8); - CLIP_RANGE(uvsrc_y, s->mb_y, s->mb_height * 8, 8); + src_x = clip( src_x, -16, s->mb_width * 16); + src_y = clip( src_y, -16, s->mb_height * 16); + uvsrc_x = clip(uvsrc_x, -8, s->mb_width * 8); + uvsrc_y = clip(uvsrc_y, -8, s->mb_height * 8); srcY += src_y * s->linesize + src_x; srcU += uvsrc_y * s->uvlinesize + uvsrc_x; @@ -1022,8 +1017,8 @@ src_x = s->mb_x * 16 + (n&1) * 8 + (mx >> 2); src_y = s->mb_y * 16 + (n&2) * 4 + (my >> 2); - CLIP_RANGE(src_x, s->mb_x, s->mb_width * 16, 16); - CLIP_RANGE(src_y, s->mb_y, s->mb_height * 16, 16); + src_x = clip( src_x, -16, s->mb_width * 16); + src_y = clip( src_y, -16, s->mb_height * 16); srcY += src_y * s->linesize + src_x; @@ -1124,8 +1119,8 @@ uvsrc_x = s->mb_x * 8 + (uvmx >> 2); uvsrc_y = s->mb_y * 8 + (uvmy >> 2); - CLIP_RANGE(uvsrc_x, s->mb_x, s->mb_width * 8, 8); - CLIP_RANGE(uvsrc_y, s->mb_y, s->mb_height * 8, 8); + uvsrc_x = clip(uvsrc_x, -8, s->mb_width * 8); + uvsrc_y = clip(uvsrc_y, -8, s->mb_height * 8); srcU = s->last_picture.data[1] + uvsrc_y * s->uvlinesize + uvsrc_x; srcV = s->last_picture.data[2] + uvsrc_y * s->uvlinesize + uvsrc_x; if((unsigned)uvsrc_x > (s->h_edge_pos >> 1) - ((uvmx >> 1)&1) - 8