shithub: libvpx

Download patch

ref: 9f61a83bf9201be73083dd09fbb67f93955f4ac2
parent: 0684c647ef38e81396567720e6fe5a1190e3c103
author: Fritz Koenig <frkoenig@google.com>
date: Fri Oct 29 13:09:33 EDT 2010

postproc : Added SPLITMV visualization, fix line constrain.

Now draw 16 vectors for SPLITMV mode.

Fixed constrain line to block divide by zero issues.

Blend block was not centering the shaded area correctly.

Change-Id: I1edabd8b4e553aac8d980f7b45c80159e9202434

--- a/vp8/common/postproc.c
+++ b/vp8/common/postproc.c
@@ -484,7 +484,7 @@
     int u1_const = u1*((1<<16)-alpha);
     int v1_const = v1*((1<<16)-alpha);
 
-    y += stride + 2;
+    y += stride + 1;
     for (i = 0; i < 14; i++)
     {
         for (j = 0; j < 14; j++)
@@ -522,7 +522,7 @@
         dy = *y1 - y0;
 
         *x1 = width;
-        if (dy)
+        if (dx)
             *y1 = ((width-x0)*dy)/dx + y0;
     }
     if (*x1 < 0)
@@ -531,7 +531,7 @@
         dy = *y1 - y0;
 
         *x1 = 0;
-        if (dy)
+        if (dx)
             *y1 = ((0-x0)*dy)/dx + y0;
     }
     if (*y1 > height)
@@ -540,7 +540,7 @@
         dy = *y1 - y0;
 
         *y1 = height;
-        if (dx)
+        if (dy)
             *x1 = ((height-y0)*dx)/dy + x0;
     }
     if (*y1 < 0)
@@ -549,7 +549,7 @@
         dy = *y1 - y0;
 
         *y1 = 0;
-        if (dx)
+        if (dy)
             *x1 = ((0-y0)*dx)/dy + x0;
     }
 }
@@ -753,8 +753,36 @@
         {
             for (x0 = 8; x0 < (width + 8); x0 += 16)
             {
-               int x1, y1;
-               if (mi->mbmi.mode >= NEARESTMV)
+                int x1, y1;
+
+                if (mi->mbmi.mode == SPLITMV)
+                {
+                    int bx0, by0;
+
+                    B_MODE_INFO *bmi = mi->bmi;
+                    MV *mv = &bmi->mv.as_mv;
+
+                    for (by0 = (y0-8); by0 < y0+8; by0 += 4)
+                    {
+                        for (bx0 = (x0-8); bx0 < x0+8; bx0 += 4)
+                        {
+
+                            x1 = bx0 + (mv->col >> 3);
+                            y1 = by0 + (mv->row >> 3);
+
+                            if (x1 != bx0 && y1 != by0)
+                            {
+                                constrain_line (bx0, &x1, by0, &y1, width, height);
+                                vp8_blit_line  (bx0,  x1, by0,  y1, y_buffer, y_stride);
+                            }
+                            else
+                                vp8_blit_line  (bx0,  x1, by0,  y1, y_buffer, y_stride);
+
+                            mv++;
+                        }
+                    }
+                }
+                else if (mi->mbmi.mode >= NEARESTMV)
                 {
                     MV *mv = &mi->mbmi.mv.as_mv;
 
--