changeset 3510:f8d3be212bce libavcodec

Replace code for clipping MV vectors (which is wrong to use here) with clipping source coords.
author kostya
date Sat, 22 Jul 2006 03:57:53 +0000
parents da6095607f26
children f88787aeed6b
files vc1.c
diffstat 1 files changed, 8 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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