@@ -61,57 +61,57 @@ DebayerCpu::~DebayerCpu() = default;
const pixel_t *curr = (const pixel_t *)src[1] + xShift_; \
const pixel_t *next = (const pixel_t *)src[2] + xShift_;
+#define STORE_PIXEL(b, g, r) \
+ *dst++ = blue_[b]; \
+ *dst++ = green_[g]; \
+ *dst++ = red_[r]; \
+ if constexpr (addAlphaByte) \
+ *dst++ = 255; \
+ x++;
+
/*
* RGR
* GBG
* RGR
*/
-#define BGGR_BGR888(p, n, div) \
- *dst++ = blue_[curr[x] / (div)]; \
- *dst++ = green_[(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div))]; \
- *dst++ = red_[(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div))]; \
- if constexpr (addAlphaByte) \
- *dst++ = 255; \
- x++;
+#define BGGR_BGR888(p, n, div) \
+ STORE_PIXEL( \
+ curr[x] / (div), \
+ (prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div)), \
+ (prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div)))
/*
* GBG
* RGR
* GBG
*/
-#define GRBG_BGR888(p, n, div) \
- *dst++ = blue_[(prev[x] + next[x]) / (2 * (div))]; \
- *dst++ = green_[curr[x] / (div)]; \
- *dst++ = red_[(curr[x - p] + curr[x + n]) / (2 * (div))]; \
- if constexpr (addAlphaByte) \
- *dst++ = 255; \
- x++;
+#define GRBG_BGR888(p, n, div) \
+ STORE_PIXEL( \
+ (prev[x] + next[x]) / (2 * (div)), \
+ curr[x] / (div), \
+ (curr[x - p] + curr[x + n]) / (2 * (div)))
/*
* GRG
* BGB
* GRG
*/
-#define GBRG_BGR888(p, n, div) \
- *dst++ = blue_[(curr[x - p] + curr[x + n]) / (2 * (div))]; \
- *dst++ = green_[curr[x] / (div)]; \
- *dst++ = red_[(prev[x] + next[x]) / (2 * (div))]; \
- if constexpr (addAlphaByte) \
- *dst++ = 255; \
- x++;
+#define GBRG_BGR888(p, n, div) \
+ STORE_PIXEL( \
+ (curr[x - p] + curr[x + n]) / (2 * (div)), \
+ curr[x] / (div), \
+ (prev[x] + next[x]) / (2 * (div)))
/*
* BGB
* GRG
* BGB
*/
-#define RGGB_BGR888(p, n, div) \
- *dst++ = blue_[(prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div))]; \
- *dst++ = green_[(prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div))]; \
- *dst++ = red_[curr[x] / (div)]; \
- if constexpr (addAlphaByte) \
- *dst++ = 255; \
- x++;
+#define RGGB_BGR888(p, n, div) \
+ STORE_PIXEL( \
+ (prev[x - p] + prev[x + n] + next[x - p] + next[x + n]) / (4 * (div)), \
+ (prev[x] + curr[x - p] + curr[x + n] + next[x]) / (4 * (div)), \
+ curr[x] / (div))
template<bool addAlphaByte>
void DebayerCpu::debayer8_BGBG_BGR888(uint8_t *dst, const uint8_t *src[])
The debayering macros use the same pattern, let's extract it to a common macro. This reduces code duplication a bit now and it'll make changes of debayering easier when color correction matrix is introduced. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> --- src/libcamera/software_isp/debayer_cpu.cpp | 56 +++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-)