28 #define H264_CHROMA_MC(OPNAME, OP)\ 29 static void FUNCC(OPNAME ## h264_chroma_mc1)(uint8_t *_dst , uint8_t *_src , ptrdiff_t stride, int h, int x, int y){\ 30 pixel *dst = (pixel*)_dst;\ 31 pixel *src = (pixel*)_src;\ 32 const int A=(8-x)*(8-y);\ 33 const int B=( x)*(8-y);\ 34 const int C=(8-x)*( y);\ 35 const int D=( x)*( y);\ 37 stride >>= sizeof(pixel)-1;\ 39 av_assert2(x<8 && y<8 && x>=0 && y>=0);\ 43 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ 49 const int step= C ? stride : 1;\ 51 OP(dst[0], (A*src[0] + E*src[step+0]));\ 57 OP(dst[0], (A*src[0]));\ 63 static void FUNCC(OPNAME ## h264_chroma_mc2)(uint8_t *_dst , uint8_t *_src , ptrdiff_t stride, int h, int x, int y)\ 65 pixel *dst = (pixel*)_dst;\ 66 pixel *src = (pixel*)_src;\ 67 const int A=(8-x)*(8-y);\ 68 const int B=( x)*(8-y);\ 69 const int C=(8-x)*( y);\ 70 const int D=( x)*( y);\ 72 stride >>= sizeof(pixel)-1;\ 74 av_assert2(x<8 && y<8 && x>=0 && y>=0);\ 78 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ 79 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\ 85 const ptrdiff_t step = C ? stride : 1;\ 87 OP(dst[0], (A*src[0] + E*src[step+0]));\ 88 OP(dst[1], (A*src[1] + E*src[step+1]));\ 93 for ( i = 0; i < h; i++){\ 94 OP(dst[0], A * src[0]);\ 95 OP(dst[1], A * src[1]);\ 102 static void FUNCC(OPNAME ## h264_chroma_mc4)(uint8_t *_dst , uint8_t *_src , ptrdiff_t stride, int h, int x, int y)\ 104 pixel *dst = (pixel*)_dst;\ 105 pixel *src = (pixel*)_src;\ 106 const int A=(8-x)*(8-y);\ 107 const int B=( x)*(8-y);\ 108 const int C=(8-x)*( y);\ 109 const int D=( x)*( y);\ 111 stride >>= sizeof(pixel)-1;\ 113 av_assert2(x<8 && y<8 && x>=0 && y>=0);\ 117 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ 118 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\ 119 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));\ 120 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));\ 126 const ptrdiff_t step = C ? stride : 1;\ 128 OP(dst[0], (A*src[0] + E*src[step+0]));\ 129 OP(dst[1], (A*src[1] + E*src[step+1]));\ 130 OP(dst[2], (A*src[2] + E*src[step+2]));\ 131 OP(dst[3], (A*src[3] + E*src[step+3]));\ 136 for ( i = 0; i < h; i++){\ 137 OP(dst[0], A * src[0]);\ 138 OP(dst[1], A * src[1]);\ 139 OP(dst[2], A * src[2]);\ 140 OP(dst[3], A * src[3]);\ 147 static void FUNCC(OPNAME ## h264_chroma_mc8)(uint8_t *_dst , uint8_t *_src , ptrdiff_t stride, int h, int x, int y)\ 149 pixel *dst = (pixel*)_dst;\ 150 pixel *src = (pixel*)_src;\ 151 const int A=(8-x)*(8-y);\ 152 const int B=( x)*(8-y);\ 153 const int C=(8-x)*( y);\ 154 const int D=( x)*( y);\ 156 stride >>= sizeof(pixel)-1;\ 158 av_assert2(x<8 && y<8 && x>=0 && y>=0);\ 162 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ 163 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\ 164 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));\ 165 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));\ 166 OP(dst[4], (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5]));\ 167 OP(dst[5], (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6]));\ 168 OP(dst[6], (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7]));\ 169 OP(dst[7], (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8]));\ 175 const ptrdiff_t step = C ? stride : 1;\ 177 OP(dst[0], (A*src[0] + E*src[step+0]));\ 178 OP(dst[1], (A*src[1] + E*src[step+1]));\ 179 OP(dst[2], (A*src[2] + E*src[step+2]));\ 180 OP(dst[3], (A*src[3] + E*src[step+3]));\ 181 OP(dst[4], (A*src[4] + E*src[step+4]));\ 182 OP(dst[5], (A*src[5] + E*src[step+5]));\ 183 OP(dst[6], (A*src[6] + E*src[step+6]));\ 184 OP(dst[7], (A*src[7] + E*src[step+7]));\ 189 for ( i = 0; i < h; i++){\ 190 OP(dst[0], A * src[0]);\ 191 OP(dst[1], A * src[1]);\ 192 OP(dst[2], A * src[2]);\ 193 OP(dst[3], A * src[3]);\ 194 OP(dst[4], A * src[4]);\ 195 OP(dst[5], A * src[5]);\ 196 OP(dst[6], A * src[6]);\ 197 OP(dst[7], A * src[7]);\ 204 #define op_avg(a, b) a = (((a)+(((b) + 32)>>6)+1)>>1) 205 #define op_put(a, b) a = (((b) + 32)>>6)
#define H264_CHROMA_MC(OPNAME, OP)
simple assert() macros that are a bit more flexible than ISO C assert().