* using macros to shorten init part
[libav.git] / libavcodec / dsputil.c
index c12d3d4..e5ff569 100644 (file)
  */
 #include "avcodec.h"
 #include "dsputil.h"
-/*
-void (*get_pixels)(DCTELEM *block, const UINT8 *pixels, int line_size);
-void (*diff_pixels)(DCTELEM *block, const UINT8 *s1, const UINT8 *s2, int stride);
-void (*put_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size);
-void (*add_pixels_clamped)(const DCTELEM *block, UINT8 *pixels, int line_size);
-void (*ff_gmc1)(UINT8 *dst, UINT8 *src, int srcStride, int h, int x16, int y16, int rounder);
-void (*ff_gmc )(UINT8 *dst, UINT8 *src, int stride, int h, int ox, int oy, 
-                  int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height);
-void (*clear_blocks)(DCTELEM *blocks);
-int (*pix_sum)(UINT8 * pix, int line_size);
-int (*pix_norm1)(UINT8 * pix, int line_size);
-
-op_pixels_abs_func pix_abs16x16;
-op_pixels_abs_func pix_abs16x16_x2;
-op_pixels_abs_func pix_abs16x16_y2;
-op_pixels_abs_func pix_abs16x16_xy2;
-
-op_pixels_abs_func pix_abs8x8;
-op_pixels_abs_func pix_abs8x8_x2;
-op_pixels_abs_func pix_abs8x8_y2;
-op_pixels_abs_func pix_abs8x8_xy2;
-*/
+
 int ff_bit_exact=0;
 
 UINT8 cropTbl[256 + 2 * MAX_NEG_CROP];
@@ -260,7 +239,7 @@ static void OPNAME ## _pixels(uint8_t *block, const uint8_t *pixels, int line_si
     }\
 }\
 \
-static void OPNAME ## _no_rnd_pixels_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static void OPNAME ## _no_rnd_pixels_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
     int i;\
     for(i=0; i<h; i++){\
@@ -272,7 +251,7 @@ static void OPNAME ## _no_rnd_pixels_x2(uint8_t *block, const uint8_t *pixels, i
     }\
 }\
 \
-static void OPNAME ## _pixels_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static void OPNAME ## _pixels_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
     int i;\
     for(i=0; i<h; i++){\
@@ -284,7 +263,7 @@ static void OPNAME ## _pixels_x2(uint8_t *block, const uint8_t *pixels, int line
     }\
 }\
 \
-static void OPNAME ## _no_rnd_pixels_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static void OPNAME ## _no_rnd_pixels_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
     int i;\
     for(i=0; i<h; i++){\
@@ -296,7 +275,7 @@ static void OPNAME ## _no_rnd_pixels_y2(uint8_t *block, const uint8_t *pixels, i
     }\
 }\
 \
-static void OPNAME ## _pixels_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static void OPNAME ## _pixels_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
     int i;\
     for(i=0; i<h; i++){\
@@ -308,7 +287,7 @@ static void OPNAME ## _pixels_y2(uint8_t *block, const uint8_t *pixels, int line
     }\
 }\
 \
-static void OPNAME ## _pixels_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static void OPNAME ## _pixels_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
         int i;\
         const uint64_t a= LD64(pixels  );\
@@ -344,7 +323,7 @@ static void OPNAME ## _pixels_xy2(uint8_t *block, const uint8_t *pixels, int lin
         }\
 }\
 \
-static void OPNAME ## _no_rnd_pixels_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static void OPNAME ## _no_rnd_pixels_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
         int i;\
         const uint64_t a= LD64(pixels  );\
@@ -380,45 +359,19 @@ static void OPNAME ## _no_rnd_pixels_xy2(uint8_t *block, const uint8_t *pixels,
         }\
 }\
 \
-CALL_2X_PIXELS(OPNAME ## _pixels16    , OPNAME ## _pixels    , 8)\
-CALL_2X_PIXELS(OPNAME ## _pixels16_x2 , OPNAME ## _pixels_x2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _pixels16_y2 , OPNAME ## _pixels_y2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _pixels16_xy2, OPNAME ## _pixels_xy2, 8)\
-CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_x2 , OPNAME ## _no_rnd_pixels_x2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_y2 , OPNAME ## _no_rnd_pixels_y2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_xy2, OPNAME ## _no_rnd_pixels_xy2, 8)\
-\
-void (*OPNAME ## _pixels_tab[2][4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
-    {\
-        OPNAME ## _pixels,\
-        OPNAME ## _pixels_x2,\
-        OPNAME ## _pixels_y2,\
-        OPNAME ## _pixels_xy2},\
-    {\
-        OPNAME ## _pixels16,\
-        OPNAME ## _pixels16_x2,\
-        OPNAME ## _pixels16_y2,\
-        OPNAME ## _pixels16_xy2}\
-};\
-\
-void (*OPNAME ## _no_rnd_pixels_tab[2][4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
-    {\
-        OPNAME ## _pixels,\
-        OPNAME ## _no_rnd_pixels_x2,\
-        OPNAME ## _no_rnd_pixels_y2,\
-        OPNAME ## _no_rnd_pixels_xy2},\
-    {\
-        OPNAME ## _pixels16,\
-        OPNAME ## _no_rnd_pixels16_x2,\
-        OPNAME ## _no_rnd_pixels16_y2,\
-        OPNAME ## _no_rnd_pixels16_xy2}\
-};
+CALL_2X_PIXELS(OPNAME ## _pixels16_c    , OPNAME ## _pixels_c    , 8)\
+CALL_2X_PIXELS(OPNAME ## _pixels16_x2_c , OPNAME ## _pixels_x2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _pixels16_y2_c , OPNAME ## _pixels_y2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _pixels16_xy2_c, OPNAME ## _pixels_xy2_c, 8)\
+CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_x2_c , OPNAME ## _no_rnd_pixels_x2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_y2_c , OPNAME ## _no_rnd_pixels_y2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_xy2_c, OPNAME ## _no_rnd_pixels_xy2_c, 8)
 
 #define op_avg(a, b) a = ( ((a)|(b)) - ((((a)^(b))&0xFEFEFEFEFEFEFEFEULL)>>1) )
 #else // 64 bit variant
 
 #define PIXOP2(OPNAME, OP) \
-static void OPNAME ## _pixels8(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
+static void OPNAME ## _pixels8_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
     int i;\
     for(i=0; i<h; i++){\
         OP(*((uint32_t*)(block  )), LD32(pixels  ));\
@@ -427,8 +380,8 @@ static void OPNAME ## _pixels8(uint8_t *block, const uint8_t *pixels, int line_s
         block +=line_size;\
     }\
 }\
-static inline void OPNAME ## _no_rnd_pixels8(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
-    OPNAME ## _pixels8(block, pixels, line_size, h);\
+static inline void OPNAME ## _no_rnd_pixels8_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
+    OPNAME ## _pixels8_c(block, pixels, line_size, h);\
 }\
 \
 static inline void OPNAME ## _no_rnd_pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
@@ -471,19 +424,19 @@ static inline void OPNAME ## _no_rnd_pixels16_l2(uint8_t *dst, const uint8_t *sr
     OPNAME ## _no_rnd_pixels8_l2(dst+8, src1+8, src2+8, dst_stride, src_stride1, src_stride2, h);\
 }\
 \
-static inline void OPNAME ## _no_rnd_pixels8_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
+static inline void OPNAME ## _no_rnd_pixels8_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
     OPNAME ## _no_rnd_pixels8_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);\
 }\
 \
-static inline void OPNAME ## _pixels8_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
+static inline void OPNAME ## _pixels8_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
     OPNAME ## _pixels8_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);\
 }\
 \
-static inline void OPNAME ## _no_rnd_pixels8_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
+static inline void OPNAME ## _no_rnd_pixels8_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
     OPNAME ## _no_rnd_pixels8_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);\
 }\
 \
-static inline void OPNAME ## _pixels8_y2(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
+static inline void OPNAME ## _pixels8_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
     OPNAME ## _pixels8_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);\
 }\
 \
@@ -568,7 +521,7 @@ static inline void OPNAME ## _no_rnd_pixels16_l4(uint8_t *dst, const uint8_t *sr
     OPNAME ## _no_rnd_pixels8_l4(dst+8, src1+8, src2+8, src3+8, src4+8, dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);\
 }\
 \
-static inline void OPNAME ## _pixels8_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static inline void OPNAME ## _pixels8_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
     int j;\
     for(j=0; j<2; j++){\
@@ -609,7 +562,7 @@ static inline void OPNAME ## _pixels8_xy2(uint8_t *block, const uint8_t *pixels,
     }\
 }\
 \
-static inline void OPNAME ## _no_rnd_pixels8_xy2(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
+static inline void OPNAME ## _no_rnd_pixels8_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)\
 {\
     int j;\
     for(j=0; j<2; j++){\
@@ -650,40 +603,14 @@ static inline void OPNAME ## _no_rnd_pixels8_xy2(uint8_t *block, const uint8_t *
     }\
 }\
 \
-CALL_2X_PIXELS(OPNAME ## _pixels16    , OPNAME ## _pixels8    , 8)\
-CALL_2X_PIXELS(OPNAME ## _pixels16_x2 , OPNAME ## _pixels8_x2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _pixels16_y2 , OPNAME ## _pixels8_y2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _pixels16_xy2, OPNAME ## _pixels8_xy2, 8)\
-CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16    , OPNAME ## _pixels8    , 8)\
-CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_x2 , OPNAME ## _no_rnd_pixels8_x2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_y2 , OPNAME ## _no_rnd_pixels8_y2 , 8)\
-CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_xy2, OPNAME ## _no_rnd_pixels8_xy2, 8)\
-\
-void (*OPNAME ## _pixels_tab[2][4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
-    {\
-        OPNAME ## _pixels16,\
-        OPNAME ## _pixels16_x2,\
-        OPNAME ## _pixels16_y2,\
-        OPNAME ## _pixels16_xy2},\
-    {\
-        OPNAME ## _pixels8,\
-        OPNAME ## _pixels8_x2,\
-        OPNAME ## _pixels8_y2,\
-        OPNAME ## _pixels8_xy2},\
-};\
-\
-void (*OPNAME ## _no_rnd_pixels_tab[2][4])(uint8_t *block, const uint8_t *pixels, int line_size, int h) = {\
-    {\
-        OPNAME ## _pixels16,\
-        OPNAME ## _no_rnd_pixels16_x2,\
-        OPNAME ## _no_rnd_pixels16_y2,\
-        OPNAME ## _no_rnd_pixels16_xy2},\
-    {\
-        OPNAME ## _pixels8,\
-        OPNAME ## _no_rnd_pixels8_x2,\
-        OPNAME ## _no_rnd_pixels8_y2,\
-        OPNAME ## _no_rnd_pixels8_xy2},\
-};
+CALL_2X_PIXELS(OPNAME ## _pixels16_c  , OPNAME ## _pixels8_c  , 8)\
+CALL_2X_PIXELS(OPNAME ## _pixels16_x2_c , OPNAME ## _pixels8_x2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _pixels16_y2_c , OPNAME ## _pixels8_y2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _pixels16_xy2_c, OPNAME ## _pixels8_xy2_c, 8)\
+CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_c  , OPNAME ## _pixels8_c         , 8)\
+CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_x2_c , OPNAME ## _no_rnd_pixels8_x2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_y2_c , OPNAME ## _no_rnd_pixels8_y2_c , 8)\
+CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_xy2_c, OPNAME ## _no_rnd_pixels8_xy2_c, 8)\
 
 #define op_avg(a, b) a = ( ((a)|(b)) - ((((a)^(b))&0xFEFEFEFEUL)>>1) )
 #endif
@@ -694,133 +621,6 @@ PIXOP2(put, op_put)
 #undef op_avg
 #undef op_put
 
-#if 0
-/* FIXME this stuff could be removed as its ot really used anymore */
-#define PIXOP(BTYPE, OPNAME, OP, INCR)                                                   \
-                                                                                         \
-static void OPNAME ## _pixels(BTYPE *block, const UINT8 *pixels, int line_size, int h)    \
-{                                                                                        \
-    BTYPE *p;                                                                            \
-    const UINT8 *pix;                                                                    \
-                                                                                         \
-    p = block;                                                                           \
-    pix = pixels;                                                                        \
-    do {                                                                                 \
-        OP(p[0], pix[0]);                                                                  \
-        OP(p[1], pix[1]);                                                                  \
-        OP(p[2], pix[2]);                                                                  \
-        OP(p[3], pix[3]);                                                                  \
-        OP(p[4], pix[4]);                                                                  \
-        OP(p[5], pix[5]);                                                                  \
-        OP(p[6], pix[6]);                                                                  \
-        OP(p[7], pix[7]);                                                                  \
-        pix += line_size;                                                                \
-        p += INCR;                                                                       \
-    } while (--h);;                                                                       \
-}                                                                                        \
-                                                                                         \
-static void OPNAME ## _pixels_x2(BTYPE *block, const UINT8 *pixels, int line_size, int h)     \
-{                                                                                        \
-    BTYPE *p;                                                                          \
-    const UINT8 *pix;                                                                    \
-                                                                                         \
-    p = block;                                                                           \
-    pix = pixels;                                                                        \
-    do {                                                                   \
-        OP(p[0], avg2(pix[0], pix[1]));                                                    \
-        OP(p[1], avg2(pix[1], pix[2]));                                                    \
-        OP(p[2], avg2(pix[2], pix[3]));                                                    \
-        OP(p[3], avg2(pix[3], pix[4]));                                                    \
-        OP(p[4], avg2(pix[4], pix[5]));                                                    \
-        OP(p[5], avg2(pix[5], pix[6]));                                                    \
-        OP(p[6], avg2(pix[6], pix[7]));                                                    \
-        OP(p[7], avg2(pix[7], pix[8]));                                                    \
-        pix += line_size;                                                                \
-        p += INCR;                                                                       \
-    } while (--h);                                                                        \
-}                                                                                        \
-                                                                                         \
-static void OPNAME ## _pixels_y2(BTYPE *block, const UINT8 *pixels, int line_size, int h)     \
-{                                                                                        \
-    BTYPE *p;                                                                          \
-    const UINT8 *pix;                                                                    \
-    const UINT8 *pix1;                                                                   \
-                                                                                         \
-    p = block;                                                                           \
-    pix = pixels;                                                                        \
-    pix1 = pixels + line_size;                                                           \
-    do {                                                                                 \
-        OP(p[0], avg2(pix[0], pix1[0]));                                                   \
-        OP(p[1], avg2(pix[1], pix1[1]));                                                   \
-        OP(p[2], avg2(pix[2], pix1[2]));                                                   \
-        OP(p[3], avg2(pix[3], pix1[3]));                                                   \
-        OP(p[4], avg2(pix[4], pix1[4]));                                                   \
-        OP(p[5], avg2(pix[5], pix1[5]));                                                   \
-        OP(p[6], avg2(pix[6], pix1[6]));                                                   \
-        OP(p[7], avg2(pix[7], pix1[7]));                                                   \
-        pix += line_size;                                                                \
-        pix1 += line_size;                                                               \
-        p += INCR;                                                                       \
-    } while(--h);                                                                         \
-}                                                                                        \
-                                                                                         \
-static void OPNAME ## _pixels_xy2(BTYPE *block, const UINT8 *pixels, int line_size, int h)    \
-{                                                                                        \
-    BTYPE *p;                                                                          \
-    const UINT8 *pix;                                                                    \
-    const UINT8 *pix1;                                                                   \
-                                                                                         \
-    p = block;                                                                           \
-    pix = pixels;                                                                        \
-    pix1 = pixels + line_size;                                                           \
-    do {                                                                   \
-        OP(p[0], avg4(pix[0], pix[1], pix1[0], pix1[1]));                                  \
-        OP(p[1], avg4(pix[1], pix[2], pix1[1], pix1[2]));                                  \
-        OP(p[2], avg4(pix[2], pix[3], pix1[2], pix1[3]));                                  \
-        OP(p[3], avg4(pix[3], pix[4], pix1[3], pix1[4]));                                  \
-        OP(p[4], avg4(pix[4], pix[5], pix1[4], pix1[5]));                                  \
-        OP(p[5], avg4(pix[5], pix[6], pix1[5], pix1[6]));                                  \
-        OP(p[6], avg4(pix[6], pix[7], pix1[6], pix1[7]));                                  \
-        OP(p[7], avg4(pix[7], pix[8], pix1[7], pix1[8]));                                  \
-        pix += line_size;                                                                \
-        pix1 += line_size;                                                               \
-        p += INCR;                                                                       \
-    } while(--h);                                                                         \
-}                                                                                        \
-                                                                                         \
-void (*OPNAME ## _pixels_tab[4])(BTYPE *block, const UINT8 *pixels, int line_size, int h) = { \
-    OPNAME ## _pixels,                                                                   \
-    OPNAME ## _pixels_x2,                                                                \
-    OPNAME ## _pixels_y2,                                                                \
-    OPNAME ## _pixels_xy2,                                                               \
-};
-
-/* rounding primitives */
-#define avg2(a,b) ((a+b+1)>>1)
-#define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
-
-#define op_avg(a, b) a = avg2(a, b)
-#define op_sub(a, b) a -= b
-#define op_put(a, b) a = b
-
-PIXOP(DCTELEM, sub, op_sub, 8)
-PIXOP(uint8_t, avg, op_avg, line_size)
-PIXOP(uint8_t, put, op_put, line_size)
-
-/* not rounding primitives */
-#undef avg2
-#undef avg4
-#define avg2(a,b) ((a+b)>>1)
-#define avg4(a,b,c,d) ((a+b+c+d+1)>>2)
-
-PIXOP(uint8_t, avg_no_rnd, op_avg, line_size)
-PIXOP(uint8_t, put_no_rnd, op_put, line_size)
-/* motion estimation */
-
-#undef avg2
-#undef avg4
-#endif
-
 #define avg2(a,b) ((a+b+1)>>1)
 #define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
 
@@ -1050,7 +850,7 @@ static void OPNAME ## mpeg4_qpel16_v_lowpass(UINT8 *dst, UINT8 *src, int dstStri
 }\
 \
 static void OPNAME ## qpel8_mc00_c (UINT8 *dst, UINT8 *src, int stride){\
-    OPNAME ## pixels8(dst, src, stride, 8);\
+    OPNAME ## pixels8_c(dst, src, stride, 8);\
 }\
 \
 static void OPNAME ## qpel8_mc10_c(UINT8 *dst, UINT8 *src, int stride){\
@@ -1176,7 +976,7 @@ static void OPNAME ## qpel8_mc22_c(UINT8 *dst, UINT8 *src, int stride){\
     OPNAME ## mpeg4_qpel8_v_lowpass(dst, halfH, stride, 8, 8);\
 }\
 static void OPNAME ## qpel16_mc00_c (UINT8 *dst, UINT8 *src, int stride){\
-    OPNAME ## pixels16(dst, src, stride, 16);\
+    OPNAME ## pixels16_c(dst, src, stride, 16);\
 }\
 \
 static void OPNAME ## qpel16_mc10_c(UINT8 *dst, UINT8 *src, int stride){\
@@ -1300,44 +1100,7 @@ static void OPNAME ## qpel16_mc22_c(UINT8 *dst, UINT8 *src, int stride){\
     UINT8 halfH[272];\
     put ## RND ## mpeg4_qpel16_h_lowpass(halfH, src, 16, stride, 17);\
     OPNAME ## mpeg4_qpel16_v_lowpass(dst, halfH, stride, 16, 16);\
-}\
-qpel_mc_func OPNAME ## qpel_pixels_tab[2][16]={ \
-  {\
-    OPNAME ## qpel16_mc00_c,                                                                   \
-    OPNAME ## qpel16_mc10_c,                                                                   \
-    OPNAME ## qpel16_mc20_c,                                                                   \
-    OPNAME ## qpel16_mc30_c,                                                                   \
-    OPNAME ## qpel16_mc01_c,                                                                   \
-    OPNAME ## qpel16_mc11_c,                                                                   \
-    OPNAME ## qpel16_mc21_c,                                                                   \
-    OPNAME ## qpel16_mc31_c,                                                                   \
-    OPNAME ## qpel16_mc02_c,                                                                   \
-    OPNAME ## qpel16_mc12_c,                                                                   \
-    OPNAME ## qpel16_mc22_c,                                                                   \
-    OPNAME ## qpel16_mc32_c,                                                                   \
-    OPNAME ## qpel16_mc03_c,                                                                   \
-    OPNAME ## qpel16_mc13_c,                                                                   \
-    OPNAME ## qpel16_mc23_c,                                                                   \
-    OPNAME ## qpel16_mc33_c,                                                                   \
-  },{\
-    OPNAME ## qpel8_mc00_c,                                                                   \
-    OPNAME ## qpel8_mc10_c,                                                                   \
-    OPNAME ## qpel8_mc20_c,                                                                   \
-    OPNAME ## qpel8_mc30_c,                                                                   \
-    OPNAME ## qpel8_mc01_c,                                                                   \
-    OPNAME ## qpel8_mc11_c,                                                                   \
-    OPNAME ## qpel8_mc21_c,                                                                   \
-    OPNAME ## qpel8_mc31_c,                                                                   \
-    OPNAME ## qpel8_mc02_c,                                                                   \
-    OPNAME ## qpel8_mc12_c,                                                                   \
-    OPNAME ## qpel8_mc22_c,                                                                   \
-    OPNAME ## qpel8_mc32_c,                                                                   \
-    OPNAME ## qpel8_mc03_c,                                                                   \
-    OPNAME ## qpel8_mc13_c,                                                                   \
-    OPNAME ## qpel8_mc23_c,                                                                   \
-    OPNAME ## qpel8_mc33_c,                                                                   \
-  }\
-};
+}
 
 #define op_avg(a, b) a = (((a)+cm[((b) + 16)>>5]+1)>>1)
 #define op_avg_no_rnd(a, b) a = (((a)+cm[((b) + 15)>>5])>>1)
@@ -1603,6 +1366,7 @@ void dsputil_init(DSPContext* c, unsigned mask)
     c->pix_sum = pix_sum_c;
     c->pix_norm1 = pix_norm1_c;
 
+    /* TODO [0] 16  [1] 8 */
     c->pix_abs16x16     = pix_abs16x16_c;
     c->pix_abs16x16_x2  = pix_abs16x16_x2_c;
     c->pix_abs16x16_y2  = pix_abs16x16_y2_c;
@@ -1612,183 +1376,53 @@ void dsputil_init(DSPContext* c, unsigned mask)
     c->pix_abs8x8_y2  = pix_abs8x8_y2_c;
     c->pix_abs8x8_xy2 = pix_abs8x8_xy2_c;
 
-    c->put_pixels_tab[0][0] = put_pixels16;
-    c->put_pixels_tab[0][1] = put_pixels16_x2;
-    c->put_pixels_tab[0][2] = put_pixels16_y2;
-    c->put_pixels_tab[0][3] = put_pixels16_xy2;
-
-    c->put_no_rnd_pixels_tab[0][0] = put_pixels16;
-    c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2;
-    c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2;
-    c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2;
-
-    c->avg_pixels_tab[0][0] = avg_pixels16;
-    c->avg_pixels_tab[0][1] = avg_pixels16_x2;
-    c->avg_pixels_tab[0][2] = avg_pixels16_y2;
-    c->avg_pixels_tab[0][3] = avg_pixels16_xy2;
-
-    c->avg_no_rnd_pixels_tab[0][0] = avg_no_rnd_pixels16;
-    c->avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x2;
-    c->avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y2;
-    c->avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy2;
-
-    c->put_pixels_tab[1][0] = put_pixels8;
-    c->put_pixels_tab[1][1] = put_pixels8_x2;
-    c->put_pixels_tab[1][2] = put_pixels8_y2;
-    c->put_pixels_tab[1][3] = put_pixels8_xy2;
-
-    c->put_no_rnd_pixels_tab[1][0] = put_pixels8;
-    c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2;
-    c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2;
-    c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2;
-
-    c->avg_pixels_tab[1][0] = avg_pixels8;
-    c->avg_pixels_tab[1][1] = avg_pixels8_x2;
-    c->avg_pixels_tab[1][2] = avg_pixels8_y2;
-    c->avg_pixels_tab[1][3] = avg_pixels8_xy2;
-
-    c->avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8;
-    c->avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x2;
-    c->avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y2;
-    c->avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy2;
-
-    c->put_qpel_pixels_tab[0][ 0]= put_qpel16_mc00_c;
-    c->put_qpel_pixels_tab[0][ 1]= put_qpel16_mc10_c;
-    c->put_qpel_pixels_tab[0][ 2]= put_qpel16_mc20_c;
-    c->put_qpel_pixels_tab[0][ 3]= put_qpel16_mc30_c;
-    c->put_qpel_pixels_tab[0][ 4]= put_qpel16_mc01_c;
-    c->put_qpel_pixels_tab[0][ 5]= put_qpel16_mc11_c;
-    c->put_qpel_pixels_tab[0][ 6]= put_qpel16_mc21_c;
-    c->put_qpel_pixels_tab[0][ 7]= put_qpel16_mc31_c;
-    c->put_qpel_pixels_tab[0][ 8]= put_qpel16_mc02_c;
-    c->put_qpel_pixels_tab[0][ 9]= put_qpel16_mc12_c;
-    c->put_qpel_pixels_tab[0][10]= put_qpel16_mc22_c;
-    c->put_qpel_pixels_tab[0][11]= put_qpel16_mc32_c;
-    c->put_qpel_pixels_tab[0][12]= put_qpel16_mc03_c;
-    c->put_qpel_pixels_tab[0][13]= put_qpel16_mc13_c;
-    c->put_qpel_pixels_tab[0][14]= put_qpel16_mc23_c;
-    c->put_qpel_pixels_tab[0][15]= put_qpel16_mc33_c;
-    
-    c->put_no_rnd_qpel_pixels_tab[0][ 0]= put_no_rnd_qpel16_mc00_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 1]= put_no_rnd_qpel16_mc10_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 2]= put_no_rnd_qpel16_mc20_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 3]= put_no_rnd_qpel16_mc30_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 4]= put_no_rnd_qpel16_mc01_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 5]= put_no_rnd_qpel16_mc11_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 6]= put_no_rnd_qpel16_mc21_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 7]= put_no_rnd_qpel16_mc31_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 8]= put_no_rnd_qpel16_mc02_c;
-    c->put_no_rnd_qpel_pixels_tab[0][ 9]= put_no_rnd_qpel16_mc12_c;
-    c->put_no_rnd_qpel_pixels_tab[0][10]= put_no_rnd_qpel16_mc22_c;
-    c->put_no_rnd_qpel_pixels_tab[0][11]= put_no_rnd_qpel16_mc32_c;
-    c->put_no_rnd_qpel_pixels_tab[0][12]= put_no_rnd_qpel16_mc03_c;
-    c->put_no_rnd_qpel_pixels_tab[0][13]= put_no_rnd_qpel16_mc13_c;
-    c->put_no_rnd_qpel_pixels_tab[0][14]= put_no_rnd_qpel16_mc23_c;
-    c->put_no_rnd_qpel_pixels_tab[0][15]= put_no_rnd_qpel16_mc33_c;
-
-    c->avg_qpel_pixels_tab[0][ 0]= avg_qpel16_mc00_c;
-    c->avg_qpel_pixels_tab[0][ 1]= avg_qpel16_mc10_c;
-    c->avg_qpel_pixels_tab[0][ 2]= avg_qpel16_mc20_c;
-    c->avg_qpel_pixels_tab[0][ 3]= avg_qpel16_mc30_c;
-    c->avg_qpel_pixels_tab[0][ 4]= avg_qpel16_mc01_c;
-    c->avg_qpel_pixels_tab[0][ 5]= avg_qpel16_mc11_c;
-    c->avg_qpel_pixels_tab[0][ 6]= avg_qpel16_mc21_c;
-    c->avg_qpel_pixels_tab[0][ 7]= avg_qpel16_mc31_c;
-    c->avg_qpel_pixels_tab[0][ 8]= avg_qpel16_mc02_c;
-    c->avg_qpel_pixels_tab[0][ 9]= avg_qpel16_mc12_c;
-    c->avg_qpel_pixels_tab[0][10]= avg_qpel16_mc22_c;
-    c->avg_qpel_pixels_tab[0][11]= avg_qpel16_mc32_c;
-    c->avg_qpel_pixels_tab[0][12]= avg_qpel16_mc03_c;
-    c->avg_qpel_pixels_tab[0][13]= avg_qpel16_mc13_c;
-    c->avg_qpel_pixels_tab[0][14]= avg_qpel16_mc23_c;
-    c->avg_qpel_pixels_tab[0][15]= avg_qpel16_mc33_c;
-/*
-    c->avg_no_rnd_qpel_pixels_tab[0][ 0]= avg_no_rnd_qpel16_mc00_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 1]= avg_no_rnd_qpel16_mc10_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 2]= avg_no_rnd_qpel16_mc20_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 3]= avg_no_rnd_qpel16_mc30_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 4]= avg_no_rnd_qpel16_mc01_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 5]= avg_no_rnd_qpel16_mc11_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 6]= avg_no_rnd_qpel16_mc21_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 7]= avg_no_rnd_qpel16_mc31_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 8]= avg_no_rnd_qpel16_mc02_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][ 9]= avg_no_rnd_qpel16_mc12_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][10]= avg_no_rnd_qpel16_mc22_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][11]= avg_no_rnd_qpel16_mc32_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][12]= avg_no_rnd_qpel16_mc03_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][13]= avg_no_rnd_qpel16_mc13_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][14]= avg_no_rnd_qpel16_mc23_c;
-    c->avg_no_rnd_qpel_pixels_tab[0][15]= avg_no_rnd_qpel16_mc33_c;
-*/
-
-    c->put_qpel_pixels_tab[1][ 0]= put_qpel8_mc00_c;
-    c->put_qpel_pixels_tab[1][ 1]= put_qpel8_mc10_c;
-    c->put_qpel_pixels_tab[1][ 2]= put_qpel8_mc20_c;
-    c->put_qpel_pixels_tab[1][ 3]= put_qpel8_mc30_c;
-    c->put_qpel_pixels_tab[1][ 4]= put_qpel8_mc01_c;
-    c->put_qpel_pixels_tab[1][ 5]= put_qpel8_mc11_c;
-    c->put_qpel_pixels_tab[1][ 6]= put_qpel8_mc21_c;
-    c->put_qpel_pixels_tab[1][ 7]= put_qpel8_mc31_c;
-    c->put_qpel_pixels_tab[1][ 8]= put_qpel8_mc02_c;
-    c->put_qpel_pixels_tab[1][ 9]= put_qpel8_mc12_c;
-    c->put_qpel_pixels_tab[1][10]= put_qpel8_mc22_c;
-    c->put_qpel_pixels_tab[1][11]= put_qpel8_mc32_c;
-    c->put_qpel_pixels_tab[1][12]= put_qpel8_mc03_c;
-    c->put_qpel_pixels_tab[1][13]= put_qpel8_mc13_c;
-    c->put_qpel_pixels_tab[1][14]= put_qpel8_mc23_c;
-    c->put_qpel_pixels_tab[1][15]= put_qpel8_mc33_c;
-    
-    c->put_no_rnd_qpel_pixels_tab[1][ 0]= put_no_rnd_qpel8_mc00_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 1]= put_no_rnd_qpel8_mc10_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 2]= put_no_rnd_qpel8_mc20_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 3]= put_no_rnd_qpel8_mc30_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 4]= put_no_rnd_qpel8_mc01_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 5]= put_no_rnd_qpel8_mc11_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 6]= put_no_rnd_qpel8_mc21_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 7]= put_no_rnd_qpel8_mc31_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 8]= put_no_rnd_qpel8_mc02_c;
-    c->put_no_rnd_qpel_pixels_tab[1][ 9]= put_no_rnd_qpel8_mc12_c;
-    c->put_no_rnd_qpel_pixels_tab[1][10]= put_no_rnd_qpel8_mc22_c;
-    c->put_no_rnd_qpel_pixels_tab[1][11]= put_no_rnd_qpel8_mc32_c;
-    c->put_no_rnd_qpel_pixels_tab[1][12]= put_no_rnd_qpel8_mc03_c;
-    c->put_no_rnd_qpel_pixels_tab[1][13]= put_no_rnd_qpel8_mc13_c;
-    c->put_no_rnd_qpel_pixels_tab[1][14]= put_no_rnd_qpel8_mc23_c;
-    c->put_no_rnd_qpel_pixels_tab[1][15]= put_no_rnd_qpel8_mc33_c;
-
-    c->avg_qpel_pixels_tab[1][ 0]= avg_qpel8_mc00_c;
-    c->avg_qpel_pixels_tab[1][ 1]= avg_qpel8_mc10_c;
-    c->avg_qpel_pixels_tab[1][ 2]= avg_qpel8_mc20_c;
-    c->avg_qpel_pixels_tab[1][ 3]= avg_qpel8_mc30_c;
-    c->avg_qpel_pixels_tab[1][ 4]= avg_qpel8_mc01_c;
-    c->avg_qpel_pixels_tab[1][ 5]= avg_qpel8_mc11_c;
-    c->avg_qpel_pixels_tab[1][ 6]= avg_qpel8_mc21_c;
-    c->avg_qpel_pixels_tab[1][ 7]= avg_qpel8_mc31_c;
-    c->avg_qpel_pixels_tab[1][ 8]= avg_qpel8_mc02_c;
-    c->avg_qpel_pixels_tab[1][ 9]= avg_qpel8_mc12_c;
-    c->avg_qpel_pixels_tab[1][10]= avg_qpel8_mc22_c;
-    c->avg_qpel_pixels_tab[1][11]= avg_qpel8_mc32_c;
-    c->avg_qpel_pixels_tab[1][12]= avg_qpel8_mc03_c;
-    c->avg_qpel_pixels_tab[1][13]= avg_qpel8_mc13_c;
-    c->avg_qpel_pixels_tab[1][14]= avg_qpel8_mc23_c;
-    c->avg_qpel_pixels_tab[1][15]= avg_qpel8_mc33_c;
-/*
-    c->avg_no_rnd_qpel_pixels_tab[1][ 0]= avg_no_rnd_qpel8_mc00_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 1]= avg_no_rnd_qpel8_mc10_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 2]= avg_no_rnd_qpel8_mc20_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 3]= avg_no_rnd_qpel8_mc30_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 4]= avg_no_rnd_qpel8_mc01_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 5]= avg_no_rnd_qpel8_mc11_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 6]= avg_no_rnd_qpel8_mc21_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 7]= avg_no_rnd_qpel8_mc31_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 8]= avg_no_rnd_qpel8_mc02_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][ 9]= avg_no_rnd_qpel8_mc12_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][10]= avg_no_rnd_qpel8_mc22_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][11]= avg_no_rnd_qpel8_mc32_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][12]= avg_no_rnd_qpel8_mc03_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][13]= avg_no_rnd_qpel8_mc13_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][14]= avg_no_rnd_qpel8_mc23_c;
-    c->avg_no_rnd_qpel_pixels_tab[1][15]= avg_no_rnd_qpel8_mc33_c;
-*/
+#define dspfunc(PFX, IDX, NUM) \
+    c->PFX ## _pixels_tab[IDX][0] = PFX ## _pixels ## NUM ## _c;     \
+    c->PFX ## _pixels_tab[IDX][1] = PFX ## _pixels ## NUM ## _x2_c;  \
+    c->PFX ## _pixels_tab[IDX][2] = PFX ## _pixels ## NUM ## _y2_c;  \
+    c->PFX ## _pixels_tab[IDX][3] = PFX ## _pixels ## NUM ## _xy2_c
+
+    dspfunc(put, 0, 16);
+    dspfunc(put_no_rnd, 0, 16);
+    dspfunc(put, 1, 8);
+    dspfunc(put_no_rnd, 1, 8);
+
+    dspfunc(avg, 0, 16);
+    dspfunc(avg_no_rnd, 0, 16);
+    dspfunc(avg, 1, 8);
+    dspfunc(avg_no_rnd, 1, 8);
+#undef dspfunc
+
+#define dspfunc(PFX, IDX, NUM) \
+    c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_c; \
+    c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_c; \
+    c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_c; \
+    c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_c; \
+    c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_c; \
+    c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_c; \
+    c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_c; \
+    c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_c; \
+    c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_c; \
+    c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_c; \
+    c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_c; \
+    c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_c; \
+    c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_c; \
+    c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_c; \
+    c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_c; \
+    c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_c
+
+    dspfunc(put_qpel, 0, 16);
+    dspfunc(put_no_rnd_qpel, 0, 16);
+
+    dspfunc(avg_qpel, 0, 16);
+    /* dspfunc(avg_no_rnd_qpel, 0, 16); */
+
+    dspfunc(put_qpel, 1, 8);
+    dspfunc(put_no_rnd_qpel, 1, 8);
+
+    dspfunc(avg_qpel, 1, 8);
+    /* dspfunc(avg_no_rnd_qpel, 1, 8); */
+#undef dspfunc
 
 #ifdef HAVE_MMX
     dsputil_init_mmx(c, mask);