22 #ifndef __HQX_COMMON_H_
23 #define __HQX_COMMON_H_
29 #define MASK_2 0x0000FF00
30 #define MASK_13 0x00FF00FF
31 #define MASK_RGB 0x00FFFFFF
32 #define MASK_ALPHA 0xFF000000
34 #define MASK16_2 0x07E0
35 #define MASK16_13 0xF81F
36 #define MASK16_RGB 0xFFFF
38 #define Ymask 0x00FF0000
39 #define Umask 0x0000FF00
40 #define Vmask 0x000000FF
41 #define trY 0x00300000
42 #define trU 0x00000700
43 #define trV 0x00000006
56 return RGBtoYUV[(((c & 0xF800) << 8) |
58 ((c & 0x001F) << 3))];
64 #ifdef HQX_U24CPY_MEMCPY
65 memcpy(*dst, src,
sizeof(*dst));
76 return RGBtoYUV[((c[0] << 16) | (c[1] << 8) | c[2])];
80 static inline int yuv_diff(uint32_t yuv1, uint32_t yuv2) {
81 return (( abs((yuv1 &
Ymask) - (yuv2 & Ymask)) >
trY ) ||
82 ( abs((yuv1 &
Umask) - (yuv2 & Umask)) >
trU ) ||
83 ( abs((yuv1 &
Vmask) - (yuv2 & Vmask)) >
trV ) );
108 (((((c1 &
MASK_ALPHA) >> 24) * w1 + ((c2 & MASK_ALPHA) >> 24) * w2) << (24-s)) & MASK_ALPHA) +
116 (((((c1 &
MASK_ALPHA) >> 24) * w1 + ((c2 & MASK_ALPHA) >> 24) * w2 + ((c3 & MASK_ALPHA) >> 24) * w3) << (24-s)) & MASK_ALPHA) +
188 ((((c1 &
MASK16_2) * w1 + (c2 & MASK16_2) * w2) >> s) & MASK16_2) +
195 ((((c1 &
MASK16_2) * w1 + (c2 & MASK16_2) * w2 + (c3 & MASK16_2) * w3) >> s) & MASK16_2) +
262 if (!memcmp(c1, c2, 3)) {
266 (*ret)[0] = (((c1[0] * w1) + (c2[0] * w2)) >> s);
267 (*ret)[1] = (((c1[1] * w1) + (c2[1] * w2)) >> s);
268 (*ret)[2] = (((c1[2] * w1) + (c2[2] * w2)) >> s);
273 (*ret)[0] = (((c1[0] * w1) + (c2[0] * w2) + (c3[0] * w3)) >> s);
274 (*ret)[1] = (((c1[1] * w1) + (c2[1] * w2) + (c3[1] * w3)) >> s);
275 (*ret)[2] = (((c1[2] * w1) + (c2[2] * w2) + (c3[2] * w3)) >> s);