+ lpay++; lpaa += alpha_inc; \
+} while (0)
+
+#define BLEND_CHROMA2(c) \
+do { \
+ if (!lpaa[0] && !lpaa[1]) { \
+ *lpu = lrintf(c.yuv.u + 128.0f); \
+ *lpv = lrintf(c.yuv.v + 128.0f); \
+ } else if (255 == lpaa[0] && 255 == lpaa[1]) { \
+ *lpu = *lpau; *lpv = *lpav; \
+ } else { \
+ float a0 = (0.5f/255.0f) * lpaa[0]; \
+ float a1 = (0.5f/255.0f) * lpaa[1]; \
+ float b = 1.0f - a0 - a1; \
+ *lpu = lrintf(a0 * lpau[0] + a1 * lpau[1] + b * (c.yuv.u + 128.0f)); \
+ *lpv = lrintf(a0 * lpav[0] + a1 * lpav[1] + b * (c.yuv.v + 128.0f)); \
+ } \
+ lpau += 2; lpav += 2; lpaa++; lpu++; lpv++; \
+} while (0)
+
+#define BLEND_CHROMA2x2(c) \
+do { \
+ if (!lpaa[0] && !lpaa[1] && !lpaa[lsaa] && !lpaa[lsaa+1]) { \
+ *lpu = lrintf(c.yuv.u + 128.0f); \
+ *lpv = lrintf(c.yuv.v + 128.0f); \
+ } else if (255 == lpaa[0] && 255 == lpaa[1] && \
+ 255 == lpaa[lsaa] && 255 == lpaa[lsaa+1]) { \
+ *lpu = *lpau; *lpv = *lpav; \
+ } else { \
+ float a0 = (0.25f/255.0f) * lpaa[0]; \
+ float a1 = (0.25f/255.0f) * lpaa[1]; \
+ float a2 = (0.25f/255.0f) * lpaa[lsaa]; \
+ float a3 = (0.25f/255.0f) * lpaa[lsaa+1]; \
+ float b = 1.0f - a0 - a1 - a2 - a3; \
+ *lpu = lrintf(a0 * lpau[0] + a1 * lpau[1] + a2 * lpau[lsau] + a3 * lpau[lsau+1] \
+ + b * (c.yuv.u + 128.0f)); \
+ *lpv = lrintf(a0 * lpav[0] + a1 * lpav[1] + a2 * lpav[lsav] + a3 * lpav[lsav+1] \
+ + b * (c.yuv.v + 128.0f)); \
+ } \
+ lpau += 2; lpav += 2; lpaa++; lpu++; lpv++; \