#if !defined(PIXEL_OP_HPP__) #define PIXEL_OP_HPP__ #include template void hv_op(T *__restrict ptr, const T *__restrict src, int w, int h, int dst_stride, int src_stride, std::function &&f) { for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { T c0 = src[j * component]; T c1 = src[j * component + 1]; T c2 = src[j * component + 2]; ptr[j] = f(std::move(c0), std::move(c1), std::move(c2)); } src += src_stride; ptr += dst_stride; } } template void hv_op(const T *__restrict src, int w, int h, int stride, std::function &&f) { for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { T c0 = src[j * component]; T c1 = src[j * component + 1]; T c2 = src[j * component + 2]; f(std::move(c0), std::move(c1), std::move(c2), j, i); } src += stride; } } template void hv_op(T *__restrict ptr, const T *__restrict src, int w, int h, int stride, std::function &&f) { for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { T c0 = src[j]; ptr[j] = f(std::move(c0), j, i); } src += stride; ptr += stride; } } template void hv_kernel(T *__restrict ptr, const T *__restrict src, int w, int h, int stride, std::function &&f) { for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { ptr[j] = f(src + j, stride, j, i); } src += stride; ptr += stride; } } template void hv_kernel(T *__restrict ptr, const T *__restrict src, int w, int h, int dstride, int sstride, std::function &&f) { for (int i = 0; i < h * components; i += components) { for (int j = 0; j < w * components; j += components) { T channels[components]; f(channels, src + j, sstride, j, i); for (int k = 0; k < components; k++) ptr[j + k] = channels[k]; } src += sstride; ptr += dstride; } } #endif