void AbsGradientSaturatedSum(const uint8_t * src, size_t srcStride, size_t width, size_t height, uint8_t * dst, size_t dstStride) { memset(dst, 0, width); src += srcStride; dst += dstStride; for (size_t row = 2; row < height; ++row) { dst[0] = 0; for (size_t col = 1; col < width - 1; ++col) { const int dy = AbsDifferenceU8(src[col - srcStride], src[col + srcStride]); const int dx = AbsDifferenceU8(src[col - 1], src[col + 1]); dst[col] = MinU8(dx + dy, 0xFF); } dst[width - 1] = 0; src += srcStride; dst += dstStride; } memset(dst, 0, width); }
template <> SIMD_INLINE uint8_t OperationBinary8u<SimdOperationBinary8uSaturatedAddition>(const uint8_t & a, const uint8_t & b) { return MinU8((int)a + (int)b, 255); }
template <> SIMD_INLINE uint8_t OperationBinary8u<SimdOperationBinary8uMinimum>(const uint8_t & a, const uint8_t & b) { return MinU8(a, b); }