]> git.sesse.net Git - vlc/blobdiff - src/video_decoder/vdec_motion.c
The input-II. (more info by mail in about an hour)
[vlc] / src / video_decoder / vdec_motion.c
index ebe5a203e96ca260b33cda72bfca3d3258d151af..2fe220ac26a8b03d9d5e44ee373e53c1d0efe034 100644 (file)
@@ -1,29 +1,46 @@
 /*****************************************************************************
  * vdec_motion.c : motion compensation routines
- * (c)1999 VideoLAN
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ *
+ * Authors: Christophe Massiot <massiot@via.ecp.fr>
+ *          Jean-Marc Dressler <polux@via.ecp.fr>
+ *          Michel Lespinasse <walken@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  *****************************************************************************/
 
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/uio.h>
+#include "defs.h"
+
+#include <sys/types.h>                        /* on BSD, uio.h needs types.h */
+#include <sys/uio.h>                                          /* for input.h */
 
 #include "config.h"
 #include "common.h"
+#include "threads.h"
 #include "mtime.h"
-#include "vlc_thread.h"
+#include "plugins.h"
 
 #include "intf_msg.h"
-#include "debug.h"                    /* ?? temporaire, requis par netlist.h */
 
-#include "input.h"
-#include "input_netlist.h"
-#include "decoder_fifo.h"
+#include "stream_control.h"
+#include "input_ext-dec.h"
+
 #include "video.h"
 #include "video_output.h"
 
 #include "video_parser.h"
 #include "video_fifo.h"
 
+#define __MotionComponents(width,height)               \
+void MotionComponent_x_y_copy_##width##_##height ();   \
+void MotionComponent_X_y_copy_##width##_##height ();   \
+void MotionComponent_x_Y_copy_##width##_##height ();   \
+void MotionComponent_X_Y_copy_##width##_##height ();   \
+void MotionComponent_x_y_avg_##width##_##height ();    \
+void MotionComponent_X_y_avg_##width##_##height ();    \
+void MotionComponent_x_Y_avg_##width##_##height ();    \
+void MotionComponent_X_Y_avg_##width##_##height ();
+
+__MotionComponents (16,16)     /* 444, 422, 420 */
+__MotionComponents (16,8)      /* 444, 422, 420 */
+__MotionComponents (8,8)       /* 422, 420 */
+__MotionComponents (8,4)       /* 420 */
+#if 0
+__MotionComponents (8,16)      /* 422 */
+#endif
+
+#define ___callTheRightOne(width,height)                                    \
+    if ((i_width == width) && (i_height == height))                         \
+    {                                                                       \
+       if (!b_average)                                                      \
+       {                                                                    \
+           switch (i_select)                                                \
+           {                                                                \
+           case 0:                                                          \
+               MotionComponent_x_y_copy_##width##_##height (p_src, p_dest,  \
+                                                            i_stride);      \
+               break;                                                       \
+           case 1:                                                          \
+               MotionComponent_X_y_copy_##width##_##height (p_src, p_dest,  \
+                                                            i_stride);      \
+               break;                                                       \
+           case 2:                                                          \
+               MotionComponent_x_Y_copy_##width##_##height (p_src, p_dest,  \
+                                                            i_stride);      \
+               break;                                                       \
+           case 3:                                                          \
+               MotionComponent_X_Y_copy_##width##_##height (p_src, p_dest,  \
+                                                            i_stride);      \
+               break;                                                       \
+           }                                                                \
+       }                                                                    \
+       else                                                                 \
+       {                                                                    \
+           switch (i_select)                                                \
+           {                                                                \
+           case 0:                                                          \
+               MotionComponent_x_y_avg_##width##_##height (p_src, p_dest,   \
+                                                           i_stride);       \
+               break;                                                       \
+           case 1:                                                          \
+               MotionComponent_X_y_avg_##width##_##height (p_src, p_dest,   \
+                                                           i_stride);       \
+               break;                                                       \
+           case 2:                                                          \
+               MotionComponent_x_Y_avg_##width##_##height (p_src, p_dest,   \
+                                                           i_stride);       \
+               break;                                                       \
+           case 3:                                                          \
+               MotionComponent_X_Y_avg_##width##_##height (p_src, p_dest,   \
+                                                           i_stride);       \
+               break;                                                       \
+           }                                                                \
+       }                                                                    \
+    }
+
 /*****************************************************************************
  * vdec_MotionComponent : last stage of motion compensation
  *****************************************************************************/
@@ -47,206 +131,17 @@ static __inline__ void MotionComponent(
                     int i_height,           /* (explicit) height of block */
                     int i_stride,           /* number of coeffs to jump
                                              * between each predicted line */
-                    int i_step,             /* number of coeffs to jump to
-                                             * go to the next line of the
-                                             * field */
                     int i_select,           /* half-pel vectors */
                     boolean_t b_average     /* (explicit) averaging of several
                                              * predictions */ )
 {
-    int i_x, i_y, i_x1, i_y1;
-    unsigned int i_dummy;
-
-    if( !b_average )
-    {
-        /* Please note that b_average will be expanded at compile time */
-
-        switch( i_select )
-        {
-        case 0:
-            /* !xh, !yh, !average */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             p_dest[i_x+i_x1] = p_src[i_x+i_x1];
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-
-        case 1:
-            /* xh, !yh, !average */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             p_dest[i_x+i_x1] = (unsigned int)(p_src[i_x+i_x1]
-                                                      + p_src[i_x+i_x1 + 1] + 1)
-                                                    >> 1;
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-
-        case 2:
-            /* !xh, yh, !average */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             p_dest[i_x+i_x1] = (unsigned int)(p_src[i_x+i_x1] + 1
-                                                + p_src[i_x+i_x1 + i_step])
-                                              >> 1;
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-
-        case 3:
-            /* xh, yh, !average (3) */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             p_dest[i_x+i_x1]
-                                = ((unsigned int)(
-                                      p_src[i_x+i_x1]
-                                    + p_src[i_x+i_x1 + 1]
-                                    + p_src[i_x+i_x1 + i_step]
-                                    + p_src[i_x+i_x1 + i_step + 1]
-                                    + 2) >> 2);
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-        }
-
-    }
-    else
-    {
-        /* b_average */
-        switch( i_select )
-        {
-        case 0:
-            /* !xh, !yh, average */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             i_dummy = p_dest[i_x + i_x1] + p_src[i_x + i_x1];
-                             p_dest[i_x + i_x1] = (i_dummy + 1) >> 1;
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-
-        case 1:
-            /* xh, !yh, average */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             i_dummy = p_dest[i_x+i_x1]
-                                + ((unsigned int)(p_src[i_x+i_x1]
-                                                  + p_src[i_x+i_x1 + 1] + 1) >> 1);
-                             p_dest[i_x + i_x1] = (i_dummy + 1) >> 1;
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-
-        case 2:
-            /* !xh, yh, average */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             i_dummy = p_dest[i_x+i_x1]
-                                + ((unsigned int)(p_src[i_x+i_x1] + 1
-                                         + p_src[i_x+i_x1 + i_step]) >> 1);
-                             p_dest[i_x + i_x1] = (i_dummy + 1) >> 1;
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-
-        case 3:
-            /* xh, yh, average */
-            for( i_y = 0; i_y < i_height; i_y += 4 )
-            {
-                for( i_y1 = 0; i_y1 < 4; i_y1++ )
-                {
-                    for( i_x = 0; i_x < i_width; i_x += 8 )
-                    {
-                         for( i_x1 = 0; i_x1 < 8; i_x1++ )
-                         {
-                             i_dummy = p_dest[i_x+i_x1]
-                                + ((unsigned int)(
-                                      p_src[i_x+i_x1]
-                                    + p_src[i_x+i_x1 + 1]
-                                    + p_src[i_x+i_x1 + i_step]
-                                    + p_src[i_x+i_x1 + i_step + 1]
-                                    + 2) >> 2);
-                             p_dest[i_x + i_x1] = (i_dummy + 1) >> 1;
-                         }
-                    }
-                    p_dest += i_stride;
-                    p_src += i_stride;
-                }
-            }
-            break;
-        }
-    }
+___callTheRightOne (16,16)
+___callTheRightOne (16,8)
+___callTheRightOne (8,8)
+___callTheRightOne (8,4)
+#if 0
+___callTheRightOne (8,16)
+#endif
 }
 
 /*****************************************************************************
@@ -276,12 +171,12 @@ static __inline__ void Motion420(
 
     i_source_offset = (p_mb->i_l_x + (i_mv_x >> 1))
                        + (p_mb->i_motion_l_y + i_offset
-                         + (i_mv_y >> 1)
                          + b_source_field)
-                         * p_mb->p_picture->i_width;
+                       * p_mb->p_picture->i_width
+                       + (i_mv_y >> 1) * i_l_stride;
     if( i_source_offset >= p_source->i_width * p_source->i_height )
     {
-        fprintf( stderr, "vdec error: bad motion vector\n" );
+        intf_ErrMsg( "vdec error: bad motion vector (lum)\n" );
         return;
     }
 
@@ -291,29 +186,30 @@ static __inline__ void Motion420(
                      /* destination */
                      p_mb->p_picture->p_y
                        + (p_mb->i_l_x)
-                       + (p_mb->i_motion_l_y + b_dest_field)
+                       + (p_mb->i_motion_l_y + b_dest_field + i_offset)
                          * p_mb->p_picture->i_width,
                      /* prediction width and height */
                      16, i_height,
                      /* stride */
-                     i_l_stride, p_mb->i_l_stride,
+                     i_l_stride,
                      /* select */
                      ((i_mv_y & 1) << 1) | (i_mv_x & 1),
                      b_average );
 
     i_source_offset = (p_mb->i_c_x + ((i_mv_x/2) >> 1))
-                        + ((p_mb->i_motion_c_y + (i_offset >> 1)
-                           + ((i_mv_y/2) >> 1))
+                        + (p_mb->i_motion_c_y + (i_offset >> 1)
                            + b_source_field)
-                          * p_mb->p_picture->i_chroma_width;
+                          * p_mb->p_picture->i_chroma_width
+                        + ((i_mv_y/2) >> 1) * i_c_stride;
     if( i_source_offset >= (p_source->i_width * p_source->i_height) / 4 )
     {
-        fprintf( stderr, "vdec error: bad motion vector\n" );
+        intf_ErrMsg( "vdec error: bad motion vector (chroma)\n" );
         return;
     }
 
     i_dest_offset = (p_mb->i_c_x)
-                      + (p_mb->i_motion_c_y + b_dest_field)
+                      + (p_mb->i_motion_c_y + b_dest_field
+                          + (i_offset >> 1))
                         * p_mb->p_picture->i_chroma_width;
     i_c_height = i_height >> 1;
     i_c_select = (((i_mv_y/2) & 1) << 1) | ((i_mv_x/2) & 1);
@@ -323,7 +219,7 @@ static __inline__ void Motion420(
                        + i_source_offset,
                      p_mb->p_picture->p_u
                        + i_dest_offset,
-                     8, i_c_height, i_c_stride, p_mb->i_c_stride,
+                     8, i_c_height, i_c_stride,
                      i_c_select, b_average );
 
     /* Chrominance Cb */
@@ -331,7 +227,7 @@ static __inline__ void Motion420(
                        + i_source_offset,
                      p_mb->p_picture->p_v
                        + i_dest_offset,
-                     8, i_c_height, i_c_stride, p_mb->i_c_stride,
+                     8, i_c_height, i_c_stride,
                      i_c_select, b_average );
 }
 
@@ -365,9 +261,9 @@ static __inline__ void Motion422(
                      p_source->p_y
                        + (p_mb->i_l_x + (i_mv_x >> 1))
                        + (p_mb->i_motion_l_y + i_offset
-                          + (i_mv_y >> 1)
                           + b_source_field)
-                         * p_mb->p_picture->i_width,
+                      * p_mb->p_picture->i_width
+                       + (i_mv_y >> 1) * p_mb->i_l_stride,
                      /* destination */
                      p_mb->p_picture->p_y
                        + (p_mb->i_l_x)
@@ -376,16 +272,16 @@ static __inline__ void Motion422(
                      /* prediction width and height */
                      16, i_height,
                      /* stride */
-                     i_l_stride, p_mb->i_l_stride,
+                     i_l_stride,
                      /* select */
                      ((i_mv_y & 1) << 1) | (i_mv_x & 1),
                      b_average );
 
     i_source_offset = (p_mb->i_c_x + ((i_mv_x/2) >> 1))
-                        + ((p_mb->i_motion_c_y + (i_offset)
-                           + ((i_mv_y) >> 1))
+                        + (p_mb->i_motion_c_y + i_offset
                            + b_source_field)
-                          * p_mb->p_picture->i_chroma_width;
+                        * p_mb->p_picture->i_chroma_width
+                        + (i_mv_y) >> 1) * p_mb->i_c_stride;
     i_dest_offset = (p_mb->i_c_x)
                       + (p_mb->i_motion_c_y + b_dest_field)
                         * p_mb->p_picture->i_chroma_width;
@@ -396,7 +292,7 @@ static __inline__ void Motion422(
                        + i_source_offset,
                      p_mb->p_picture->p_u
                        + i_dest_offset,
-                     8, i_height, i_c_stride, p_mb->i_c_stride,
+                     8, i_height, i_c_stride,
                      i_c_select, b_average );
 
     /* Chrominance Cb */
@@ -404,7 +300,7 @@ static __inline__ void Motion422(
                        + i_source_offset,
                      p_mb->p_picture->p_u
                        + i_dest_offset,
-                     8, i_height, i_c_stride, p_mb->i_c_stride,
+                     8, i_height, i_c_stride,
                      i_c_select, b_average );
 #endif
 }
@@ -436,9 +332,9 @@ static __inline__ void Motion444(
 
     i_source_offset = (p_mb->i_l_x + (i_mv_x >> 1))
                         + (p_mb->i_motion_l_y + i_offset
-                           + (i_mv_y >> 1)
                            + b_source_field)
-                          * p_mb->p_picture->i_width;
+                        * p_mb->p_picture->i_width
+                        + (i_mv_y >> 1) * p_mb->i_l_stride;
     i_dest_offset = (p_mb->i_l_x)
                       + (p_mb->i_motion_l_y + b_dest_field)
                         * p_mb->p_picture->i_width;
@@ -450,7 +346,7 @@ static __inline__ void Motion444(
                        + i_source_offset,
                      p_mb->p_picture->p_y
                        + i_dest_offset,
-                     16, i_height, i_l_stride, p_mb->i_l_stride,
+                     16, i_height, i_l_stride,
                      i_select, b_average );
 
     /* Chrominance Cr */
@@ -458,7 +354,7 @@ static __inline__ void Motion444(
                        + i_source_offset,
                      p_mb->p_picture->p_u
                        + i_dest_offset,
-                     16, i_height, i_l_stride, p_mb->i_l_stride,
+                     16, i_height, i_l_stride,
                      i_select, b_average );
 
     /* Chrominance Cb */
@@ -466,7 +362,7 @@ static __inline__ void Motion444(
                        + i_source_offset,
                      p_mb->p_picture->p_v
                        + i_dest_offset,
-                     16, i_height, i_l_stride, p_mb->i_l_stride,
+                     16, i_height, i_l_stride,
                      i_select, b_average );
 #endif
 }
@@ -475,6 +371,7 @@ static __inline__ void Motion444(
  * vdec_MotionFieldField : motion compensation for field motion type (field)
  *****************************************************************************/
 #define FIELDFIELD( MOTION )                                            \
+{                                                                       \
     picture_t *     p_pred;                                             \
                                                                         \
     if( p_mb->i_mb_type & MB_MOTION_FORWARD )                           \
@@ -499,6 +396,7 @@ static __inline__ void Motion444(
                     p_mb->pppi_motion_vectors[0][1][0],                 \
                     p_mb->pppi_motion_vectors[0][1][1],                 \
                     p_mb->i_l_stride, p_mb->i_c_stride, 16, 0, 1 );     \
+        }                                                               \
     }                                                                   \
                                                                         \
     else /* MB_MOTION_BACKWARD */                                       \
@@ -527,7 +425,7 @@ void vdec_MotionFieldField444( macroblock_t * p_mb )
 }
 
 /*****************************************************************************
- * vdec_MotionField16x8XXX : motion compensation for 16x8 motion type (field)
+ * vdec_MotionField16x8XXX: motion compensation for 16x8 motion type (field)
  *****************************************************************************/
 #define FIELD16X8( MOTION )                                             \
 {                                                                       \
@@ -651,7 +549,7 @@ void vdec_MotionFieldDMV444( macroblock_t * p_mb )
 }
 
 /*****************************************************************************
- * vdec_MotionFrameFrameXXX : motion compensation for frame motion type (frame)
+ * vdec_MotionFrameFrameXXX?? : motion compensation for frame motion type (frame)
  *****************************************************************************/
 #define FRAMEFRAME( MOTION )                                            \
 {                                                                       \
@@ -696,7 +594,7 @@ void vdec_MotionFrameFrame444( macroblock_t * p_mb )
 }
 
 /*****************************************************************************
- * vdec_MotionFrameFieldXXX : motion compensation for field motion type (frame)
+ * vdec_MotionFrameFieldXXX?? : motion compensation for field motion type (frame)
  *****************************************************************************/
 #define FRAMEFIELD( MOTION )                                            \
 {                                                                       \
@@ -707,12 +605,12 @@ void vdec_MotionFrameFrame444( macroblock_t * p_mb )
     {                                                                   \
         MOTION( p_mb, p_mb->p_forward, p_mb->ppi_field_select[0][0], 0, \
                 p_mb->pppi_motion_vectors[0][0][0],                     \
-                p_mb->pppi_motion_vectors[0][0][1],                     \
+                p_mb->pppi_motion_vectors[0][0][1] >> 1,                \
                 i_l_stride, i_c_stride, 8, 0, 0 );                      \
                                                                         \
         MOTION( p_mb, p_mb->p_forward, p_mb->ppi_field_select[1][0], 1, \
                 p_mb->pppi_motion_vectors[1][0][0],                     \
-                p_mb->pppi_motion_vectors[1][0][1],                     \
+                p_mb->pppi_motion_vectors[1][0][1] >> 1,                \
                 i_l_stride, i_c_stride, 8, 0, 0 );                      \
                                                                         \
         if( p_mb->i_mb_type & MB_MOTION_BACKWARD )                      \
@@ -720,13 +618,13 @@ void vdec_MotionFrameFrame444( macroblock_t * p_mb )
             MOTION( p_mb, p_mb->p_backward,                             \
                     p_mb->ppi_field_select[0][1], 0,                    \
                     p_mb->pppi_motion_vectors[0][1][0],                 \
-                    p_mb->pppi_motion_vectors[0][1][1],                 \
+                    p_mb->pppi_motion_vectors[0][1][1] >> 1,            \
                     i_l_stride, i_c_stride, 8, 0, 1 );                  \
                                                                         \
             MOTION( p_mb, p_mb->p_backward,                             \
                     p_mb->ppi_field_select[1][1], 1,                    \
                     p_mb->pppi_motion_vectors[1][1][0],                 \
-                    p_mb->pppi_motion_vectors[1][1][1],                 \
+                    p_mb->pppi_motion_vectors[1][1][1] >> 1,            \
                     i_l_stride, i_c_stride, 8, 0, 1 );                  \
         }                                                               \
     }                                                                   \
@@ -735,12 +633,12 @@ void vdec_MotionFrameFrame444( macroblock_t * p_mb )
     {                                                                   \
         MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[0][1], 0,\
                 p_mb->pppi_motion_vectors[0][1][0],                     \
-                p_mb->pppi_motion_vectors[0][1][1],                     \
+                p_mb->pppi_motion_vectors[0][1][1] >> 1,                \
                 i_l_stride, i_c_stride, 8, 0, 0 );                      \
                                                                         \
         MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[1][1], 1,\
                 p_mb->pppi_motion_vectors[1][1][0],                     \
-                p_mb->pppi_motion_vectors[1][1][1],                     \
+                p_mb->pppi_motion_vectors[1][1][1] >> 1,                \
                 i_l_stride, i_c_stride, 8, 0, 0 );                      \
     }                                                                   \
 } /* FRAMEFIELD */
@@ -761,7 +659,7 @@ void vdec_MotionFrameField444( macroblock_t * p_mb )
 }
 
 /*****************************************************************************
- * vdec_MotionFrameDMVXXX : motion compensation for dmv motion type (frame)
+ * vdec_MotionFrameDMVXXX?? : motion compensation for dmv motion type (frame)
  *****************************************************************************/
 #define FRAMEDMV( MOTION )                                              \
 {                                                                       \
@@ -772,7 +670,7 @@ void vdec_MotionFrameField444( macroblock_t * p_mb )
     MOTION( p_mb, p_mb->p_forward, 0, 0,                                \
             p_mb->pppi_motion_vectors[0][0][0],                         \
             p_mb->pppi_motion_vectors[0][0][1],                         \
-            /* ????? >> 1 ? */                                          \
+            /* XXX?? XXX?? >> 1 ? */                                        \
             p_mb->i_l_stride << 1, p_mb->i_c_stride << 1, 8, 0, 0 );    \
                                                                         \
     /* predict and add to top field from bottom field */                \
@@ -784,7 +682,7 @@ void vdec_MotionFrameField444( macroblock_t * p_mb )
     MOTION( p_mb, p_mb->p_forward, 1, 1,                                \
             p_mb->pppi_motion_vectors[0][0][0],                         \
             p_mb->pppi_motion_vectors[0][0][1],                         \
-            /* ????? >> 1 ? */                                          \
+            /* XXX?? XXX?? >> 1 ? */                                        \
             p_mb->i_l_stride << 1, p_mb->i_c_stride << 1, 8, 0, 0 );    \
                                                                         \
     /* predict and add to bottom field from top field */                \