Browse code

avfilter/xbr: refactor alpha blending macros

Clément Bœsch authored on 2014/11/16 19:55:08
Showing 1 changed files
... ...
@@ -76,26 +76,12 @@ static uint32_t pixel_diff(uint32_t x, uint32_t y, const uint32_t *r2y)
76 76
 }
77 77
 
78 78
 #define ALPHA_BLEND_128_W(dst, src) dst = ((src & LB_MASK) >> 1) + ((dst & LB_MASK) >> 1)
79
-
80
-#define ALPHA_BLEND_32_W(dst, src) \
81
-    dst = ((RED_BLUE_MASK & ((dst & RED_BLUE_MASK) + ((((src & RED_BLUE_MASK) - \
82
-          (dst & RED_BLUE_MASK))) >> 3))) | (GREEN_MASK & ((dst & GREEN_MASK) + \
83
-          ((((src & GREEN_MASK) - (dst & GREEN_MASK))) >> 3))))
84
-
85
-#define ALPHA_BLEND_64_W(dst, src) \
86
-    dst = ((RED_BLUE_MASK & ((dst & RED_BLUE_MASK) + ((((src & RED_BLUE_MASK) - \
87
-          (dst & RED_BLUE_MASK))) >> 2))) | (GREEN_MASK & ((dst & GREEN_MASK) + \
88
-          ((((src & GREEN_MASK) - (dst & GREEN_MASK))) >> 2))))
89
-
90
-#define ALPHA_BLEND_192_W(dst, src) \
91
-    dst = ((RED_BLUE_MASK & ((dst & RED_BLUE_MASK) + ((((src & RED_BLUE_MASK) - \
92
-          (dst & RED_BLUE_MASK)) * 3) >> 2))) | (GREEN_MASK & ((dst & GREEN_MASK) + \
93
-          ((((src & GREEN_MASK) - (dst & GREEN_MASK)) * 3) >> 2))))
94
-
95
-#define ALPHA_BLEND_224_W(dst, src) \
96
-    dst = ((RED_BLUE_MASK & ((dst & RED_BLUE_MASK) + ((((src & RED_BLUE_MASK) - \
97
-          (dst & RED_BLUE_MASK)) * 7) >> 3))) | (GREEN_MASK & ((dst & GREEN_MASK) + \
98
-          ((((src & GREEN_MASK) - (dst & GREEN_MASK)) * 7) >> 3))))
79
+#define ALPHA_BLEND_BASE(a, b, m, s) (  (RED_BLUE_MASK & (((a) & RED_BLUE_MASK) + (((((b) & RED_BLUE_MASK) - ((a) & RED_BLUE_MASK)) * (m)) >> (s)))) \
80
+                                      | (GREEN_MASK    & (((a) & GREEN_MASK)    + (((((b) & GREEN_MASK)    - ((a) & GREEN_MASK))    * (m)) >> (s)))))
81
+#define ALPHA_BLEND_32_W(dst, src)  dst = ALPHA_BLEND_BASE(dst, src, 1, 3)
82
+#define ALPHA_BLEND_64_W(dst, src)  dst = ALPHA_BLEND_BASE(dst, src, 1, 2)
83
+#define ALPHA_BLEND_192_W(dst, src) dst = ALPHA_BLEND_BASE(dst, src, 3, 2)
84
+#define ALPHA_BLEND_224_W(dst, src) dst = ALPHA_BLEND_BASE(dst, src, 7, 3)
99 85
 
100 86
 #define df(A, B) pixel_diff(A, B, r2y)
101 87
 #define eq(A, B) (df(A, B) < 155)