26 #define H264_CHROMA_MC(OPNAME, OP)\ 27 static void FUNCC(OPNAME ## h264_chroma_mc2)(uint8_t *_dst, uint8_t *_src, int stride, int h, int x, int y){\ 28 pixel *dst = (pixel*)_dst;\ 29 pixel *src = (pixel*)_src;\ 30 const int A=(8-x)*(8-y);\ 31 const int B=( x)*(8-y);\ 32 const int C=(8-x)*( y);\ 33 const int D=( x)*( y);\ 35 stride /= sizeof(pixel);\ 37 assert(x<8 && y<8 && x>=0 && y>=0);\ 41 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ 42 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\ 48 const int step= C ? stride : 1;\ 50 OP(dst[0], (A*src[0] + E*src[step+0]));\ 51 OP(dst[1], (A*src[1] + E*src[step+1]));\ 56 for ( i = 0; i < h; i++){\ 57 OP(dst[0], A * src[0]);\ 58 OP(dst[1], A * src[1]);\ 65 static void FUNCC(OPNAME ## h264_chroma_mc4)(uint8_t *_dst, uint8_t *_src, int stride, int h, int x, int y){\ 66 pixel *dst = (pixel*)_dst;\ 67 pixel *src = (pixel*)_src;\ 68 const int A=(8-x)*(8-y);\ 69 const int B=( x)*(8-y);\ 70 const int C=(8-x)*( y);\ 71 const int D=( x)*( y);\ 73 stride /= sizeof(pixel);\ 75 assert(x<8 && y<8 && x>=0 && y>=0);\ 79 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ 80 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\ 81 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));\ 82 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));\ 88 const int step= C ? stride : 1;\ 90 OP(dst[0], (A*src[0] + E*src[step+0]));\ 91 OP(dst[1], (A*src[1] + E*src[step+1]));\ 92 OP(dst[2], (A*src[2] + E*src[step+2]));\ 93 OP(dst[3], (A*src[3] + E*src[step+3]));\ 98 for ( i = 0; i < h; i++){\ 99 OP(dst[0], A * src[0]);\ 100 OP(dst[1], A * src[1]);\ 101 OP(dst[2], A * src[2]);\ 102 OP(dst[3], A * src[3]);\ 109 static void FUNCC(OPNAME ## h264_chroma_mc8)(uint8_t *_dst, uint8_t *_src, int stride, int h, int x, int y){\ 110 pixel *dst = (pixel*)_dst;\ 111 pixel *src = (pixel*)_src;\ 112 const int A=(8-x)*(8-y);\ 113 const int B=( x)*(8-y);\ 114 const int C=(8-x)*( y);\ 115 const int D=( x)*( y);\ 117 stride /= sizeof(pixel);\ 119 assert(x<8 && y<8 && x>=0 && y>=0);\ 123 OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));\ 124 OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));\ 125 OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));\ 126 OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));\ 127 OP(dst[4], (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5]));\ 128 OP(dst[5], (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6]));\ 129 OP(dst[6], (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7]));\ 130 OP(dst[7], (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8]));\ 136 const int step= C ? stride : 1;\ 138 OP(dst[0], (A*src[0] + E*src[step+0]));\ 139 OP(dst[1], (A*src[1] + E*src[step+1]));\ 140 OP(dst[2], (A*src[2] + E*src[step+2]));\ 141 OP(dst[3], (A*src[3] + E*src[step+3]));\ 142 OP(dst[4], (A*src[4] + E*src[step+4]));\ 143 OP(dst[5], (A*src[5] + E*src[step+5]));\ 144 OP(dst[6], (A*src[6] + E*src[step+6]));\ 145 OP(dst[7], (A*src[7] + E*src[step+7]));\ 150 for ( i = 0; i < h; i++){\ 151 OP(dst[0], A * src[0]);\ 152 OP(dst[1], A * src[1]);\ 153 OP(dst[2], A * src[2]);\ 154 OP(dst[3], A * src[3]);\ 155 OP(dst[4], A * src[4]);\ 156 OP(dst[5], A * src[5]);\ 157 OP(dst[6], A * src[6]);\ 158 OP(dst[7], A * src[7]);\ 165 #define op_avg(a, b) a = (((a)+(((b) + 32)>>6)+1)>>1) 166 #define op_put(a, b) a = (((b) + 32)>>6)
#define H264_CHROMA_MC(OPNAME, OP)