38 #define PIXOP2(OPNAME, OP) \ 39 static inline void OPNAME ## _no_rnd_pixels8_l2_8(uint8_t *dst, \ 40 const uint8_t *src1, \ 41 const uint8_t *src2, \ 49 for (i = 0; i < h; i++) { \ 51 a = AV_RN32(&src1[i * src_stride1]); \ 52 b = AV_RN32(&src2[i * src_stride2]); \ 53 OP(*((uint32_t *) &dst[i * dst_stride]), \ 54 no_rnd_avg32(a, b)); \ 55 a = AV_RN32(&src1[i * src_stride1 + 4]); \ 56 b = AV_RN32(&src2[i * src_stride2 + 4]); \ 57 OP(*((uint32_t *) &dst[i * dst_stride + 4]), \ 58 no_rnd_avg32(a, b)); \ 62 static inline void OPNAME ## _no_rnd_pixels8_x2_8_c(uint8_t *block, \ 63 const uint8_t *pixels, \ 64 ptrdiff_t line_size, \ 67 OPNAME ## _no_rnd_pixels8_l2_8(block, pixels, pixels + 1, \ 68 line_size, line_size, line_size, h); \ 71 static inline void OPNAME ## _pixels8_x2_8_c(uint8_t *block, \ 72 const uint8_t *pixels, \ 73 ptrdiff_t line_size, \ 76 OPNAME ## _pixels8_l2_8(block, pixels, pixels + 1, \ 77 line_size, line_size, line_size, h); \ 80 static inline void OPNAME ## _no_rnd_pixels8_y2_8_c(uint8_t *block, \ 81 const uint8_t *pixels, \ 82 ptrdiff_t line_size, \ 85 OPNAME ## _no_rnd_pixels8_l2_8(block, pixels, pixels + line_size, \ 86 line_size, line_size, line_size, h); \ 89 static inline void OPNAME ## _pixels8_y2_8_c(uint8_t *block, \ 90 const uint8_t *pixels, \ 91 ptrdiff_t line_size, \ 94 OPNAME ## _pixels8_l2_8(block, pixels, pixels + line_size, \ 95 line_size, line_size, line_size, h); \ 98 static inline void OPNAME ## _pixels4_x2_8_c(uint8_t *block, \ 99 const uint8_t *pixels, \ 100 ptrdiff_t line_size, \ 103 OPNAME ## _pixels4_l2_8(block, pixels, pixels + 1, \ 104 line_size, line_size, line_size, h); \ 107 static inline void OPNAME ## _pixels4_y2_8_c(uint8_t *block, \ 108 const uint8_t *pixels, \ 109 ptrdiff_t line_size, \ 112 OPNAME ## _pixels4_l2_8(block, pixels, pixels + line_size, \ 113 line_size, line_size, line_size, h); \ 116 static inline void OPNAME ## _pixels2_x2_8_c(uint8_t *block, \ 117 const uint8_t *pixels, \ 118 ptrdiff_t line_size, \ 121 OPNAME ## _pixels2_l2_8(block, pixels, pixels + 1, \ 122 line_size, line_size, line_size, h); \ 125 static inline void OPNAME ## _pixels2_y2_8_c(uint8_t *block, \ 126 const uint8_t *pixels, \ 127 ptrdiff_t line_size, \ 130 OPNAME ## _pixels2_l2_8(block, pixels, pixels + line_size, \ 131 line_size, line_size, line_size, h); \ 134 static inline void OPNAME ## _pixels2_xy2_8_c(uint8_t *block, \ 135 const uint8_t *pixels, \ 136 ptrdiff_t line_size, \ 140 int a0 = pixels[0]; \ 141 int b0 = pixels[1] + 2; \ 145 pixels += line_size; \ 146 for (i = 0; i < h; i += 2) { \ 152 block[0] = (a1 + a0) >> 2; \ 153 block[1] = (b1 + b0) >> 2; \ 155 pixels += line_size; \ 156 block += line_size; \ 159 b0 = pixels[1] + 2; \ 163 block[0] = (a1 + a0) >> 2; \ 164 block[1] = (b1 + b0) >> 2; \ 165 pixels += line_size; \ 166 block += line_size; \ 170 static inline void OPNAME ## _pixels4_xy2_8_c(uint8_t *block, \ 171 const uint8_t *pixels, \ 172 ptrdiff_t line_size, \ 177 const uint32_t a = AV_RN32(pixels); \ 178 const uint32_t b = AV_RN32(pixels + 1); \ 179 uint32_t l0 = (a & 0x03030303UL) + \ 180 (b & 0x03030303UL) + \ 182 uint32_t h0 = ((a & 0xFCFCFCFCUL) >> 2) + \ 183 ((b & 0xFCFCFCFCUL) >> 2); \ 186 pixels += line_size; \ 187 for (i = 0; i < h; i += 2) { \ 188 uint32_t a = AV_RN32(pixels); \ 189 uint32_t b = AV_RN32(pixels + 1); \ 190 l1 = (a & 0x03030303UL) + \ 191 (b & 0x03030303UL); \ 192 h1 = ((a & 0xFCFCFCFCUL) >> 2) + \ 193 ((b & 0xFCFCFCFCUL) >> 2); \ 194 OP(*((uint32_t *) block), h0 + h1 + \ 195 (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \ 196 pixels += line_size; \ 197 block += line_size; \ 198 a = AV_RN32(pixels); \ 199 b = AV_RN32(pixels + 1); \ 200 l0 = (a & 0x03030303UL) + \ 201 (b & 0x03030303UL) + \ 203 h0 = ((a & 0xFCFCFCFCUL) >> 2) + \ 204 ((b & 0xFCFCFCFCUL) >> 2); \ 205 OP(*((uint32_t *) block), h0 + h1 + \ 206 (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \ 207 pixels += line_size; \ 208 block += line_size; \ 212 static inline void OPNAME ## _pixels8_xy2_8_c(uint8_t *block, \ 213 const uint8_t *pixels, \ 214 ptrdiff_t line_size, \ 220 for (j = 0; j < 2; j++) { \ 222 const uint32_t a = AV_RN32(pixels); \ 223 const uint32_t b = AV_RN32(pixels + 1); \ 224 uint32_t l0 = (a & 0x03030303UL) + \ 225 (b & 0x03030303UL) + \ 227 uint32_t h0 = ((a & 0xFCFCFCFCUL) >> 2) + \ 228 ((b & 0xFCFCFCFCUL) >> 2); \ 231 pixels += line_size; \ 232 for (i = 0; i < h; i += 2) { \ 233 uint32_t a = AV_RN32(pixels); \ 234 uint32_t b = AV_RN32(pixels + 1); \ 235 l1 = (a & 0x03030303UL) + \ 236 (b & 0x03030303UL); \ 237 h1 = ((a & 0xFCFCFCFCUL) >> 2) + \ 238 ((b & 0xFCFCFCFCUL) >> 2); \ 239 OP(*((uint32_t *) block), h0 + h1 + \ 240 (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \ 241 pixels += line_size; \ 242 block += line_size; \ 243 a = AV_RN32(pixels); \ 244 b = AV_RN32(pixels + 1); \ 245 l0 = (a & 0x03030303UL) + \ 246 (b & 0x03030303UL) + \ 248 h0 = ((a & 0xFCFCFCFCUL) >> 2) + \ 249 ((b & 0xFCFCFCFCUL) >> 2); \ 250 OP(*((uint32_t *) block), h0 + h1 + \ 251 (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \ 252 pixels += line_size; \ 253 block += line_size; \ 255 pixels += 4 - line_size * (h + 1); \ 256 block += 4 - line_size * h; \ 260 static inline void OPNAME ## _no_rnd_pixels8_xy2_8_c(uint8_t *block, \ 261 const uint8_t *pixels, \ 262 ptrdiff_t line_size, \ 268 for (j = 0; j < 2; j++) { \ 270 const uint32_t a = AV_RN32(pixels); \ 271 const uint32_t b = AV_RN32(pixels + 1); \ 272 uint32_t l0 = (a & 0x03030303UL) + \ 273 (b & 0x03030303UL) + \ 275 uint32_t h0 = ((a & 0xFCFCFCFCUL) >> 2) + \ 276 ((b & 0xFCFCFCFCUL) >> 2); \ 279 pixels += line_size; \ 280 for (i = 0; i < h; i += 2) { \ 281 uint32_t a = AV_RN32(pixels); \ 282 uint32_t b = AV_RN32(pixels + 1); \ 283 l1 = (a & 0x03030303UL) + \ 284 (b & 0x03030303UL); \ 285 h1 = ((a & 0xFCFCFCFCUL) >> 2) + \ 286 ((b & 0xFCFCFCFCUL) >> 2); \ 287 OP(*((uint32_t *) block), h0 + h1 + \ 288 (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \ 289 pixels += line_size; \ 290 block += line_size; \ 291 a = AV_RN32(pixels); \ 292 b = AV_RN32(pixels + 1); \ 293 l0 = (a & 0x03030303UL) + \ 294 (b & 0x03030303UL) + \ 296 h0 = ((a & 0xFCFCFCFCUL) >> 2) + \ 297 ((b & 0xFCFCFCFCUL) >> 2); \ 298 OP(*((uint32_t *) block), h0 + h1 + \ 299 (((l0 + l1) >> 2) & 0x0F0F0F0FUL)); \ 300 pixels += line_size; \ 301 block += line_size; \ 303 pixels += 4 - line_size * (h + 1); \ 304 block += 4 - line_size * h; \ 308 CALL_2X_PIXELS(OPNAME ## _pixels16_x2_8_c, \ 309 OPNAME ## _pixels8_x2_8_c, \ 311 CALL_2X_PIXELS(OPNAME ## _pixels16_y2_8_c, \ 312 OPNAME ## _pixels8_y2_8_c, \ 314 CALL_2X_PIXELS(OPNAME ## _pixels16_xy2_8_c, \ 315 OPNAME ## _pixels8_xy2_8_c, \ 317 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_8_c, \ 318 OPNAME ## _pixels8_8_c, \ 320 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_x2_8_c, \ 321 OPNAME ## _no_rnd_pixels8_x2_8_c, \ 323 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_y2_8_c, \ 324 OPNAME ## _no_rnd_pixels8_y2_8_c, \ 326 CALL_2X_PIXELS(OPNAME ## _no_rnd_pixels16_xy2_8_c, \ 327 OPNAME ## _no_rnd_pixels8_xy2_8_c, \ 330 #define op_avg(a, b) a = rnd_avg32(a, b) 331 #define op_put(a, b) a = b 332 #define put_no_rnd_pixels8_8_c put_pixels8_8_c 340 #define hpel_funcs(prefix, idx, num) \ 341 c->prefix ## _pixels_tab idx [0] = prefix ## _pixels ## num ## _8_c; \ 342 c->prefix ## _pixels_tab idx [1] = prefix ## _pixels ## num ## _x2_8_c; \ 343 c->prefix ## _pixels_tab idx [2] = prefix ## _pixels ## num ## _y2_8_c; \ 344 c->prefix ## _pixels_tab idx [3] = prefix ## _pixels ## num ## _xy2_8_c
av_cold void ff_hpeldsp_init_arm(HpelDSPContext *c, int flags)
Macro definitions for various function/variable attributes.
av_cold void ff_hpeldsp_init_alpha(HpelDSPContext *c, int flags)
void ff_hpeldsp_init_x86(HpelDSPContext *c, int flags)
av_cold void ff_hpeldsp_init(HpelDSPContext *c, int flags)
void ff_hpeldsp_init_ppc(HpelDSPContext *c, int flags)
#define hpel_funcs(prefix, idx, num)
av_cold void ff_hpeldsp_init_aarch64(HpelDSPContext *c, int flags)
#define PIXOP2(OPNAME, OP)
void ff_hpeldsp_init_mips(HpelDSPContext *c, int flags)