inline void FEGaussianBlur::platformApplyGeneric(Uint8ClampedArray* srcPixelArray, Uint8ClampedArray* tmpPixelArray, unsigned kernelSizeX, unsigned kernelSizeY, IntSize& paintSize) { int stride = 4 * paintSize.width(); int dxLeft = 0; int dxRight = 0; int dyLeft = 0; int dyRight = 0; Uint8ClampedArray* src = srcPixelArray; Uint8ClampedArray* dst = tmpPixelArray; for (int i = 0; i < 3; ++i) { if (kernelSizeX) { kernelPosition(i, kernelSizeX, dxLeft, dxRight); #if HAVE(ARM_NEON_INTRINSICS) if (!isAlphaImage()) boxBlurNEON(src, dst, kernelSizeX, dxLeft, dxRight, 4, stride, paintSize.width(), paintSize.height()); else boxBlur(src, dst, kernelSizeX, dxLeft, dxRight, 4, stride, paintSize.width(), paintSize.height(), true, m_edgeMode); #else boxBlur(src, dst, kernelSizeX, dxLeft, dxRight, 4, stride, paintSize.width(), paintSize.height(), isAlphaImage(), m_edgeMode); #endif std::swap(src, dst); } if (kernelSizeY) { kernelPosition(i, kernelSizeY, dyLeft, dyRight); #if HAVE(ARM_NEON_INTRINSICS) if (!isAlphaImage()) boxBlurNEON(src, dst, kernelSizeY, dyLeft, dyRight, stride, 4, paintSize.height(), paintSize.width()); else boxBlur(src, dst, kernelSizeY, dyLeft, dyRight, stride, 4, paintSize.height(), paintSize.width(), true, m_edgeMode); #else boxBlur(src, dst, kernelSizeY, dyLeft, dyRight, stride, 4, paintSize.height(), paintSize.width(), isAlphaImage(), m_edgeMode); #endif std::swap(src, dst); } } // The final result should be stored in srcPixelArray. if (dst == srcPixelArray) { ASSERT(src->length() == dst->length()); memcpy(dst->data(), src->data(), src->length()); } }
inline void standardBoxBlur(Uint8ClampedArray* src, Uint8ClampedArray* dst, unsigned kernelSizeX, unsigned kernelSizeY, int stride, IntSize& paintSize, bool isAlphaImage, EdgeModeType edgeMode) { int dxLeft = 0; int dxRight = 0; int dyLeft = 0; int dyRight = 0; for (int i = 0; i < 3; ++i) { if (kernelSizeX) { kernelPosition(i, kernelSizeX, dxLeft, dxRight); #if HAVE(ARM_NEON_INTRINSICS) if (!isAlphaImage) boxBlurNEON(src, dst, kernelSizeX, dxLeft, dxRight, 4, stride, paintSize.width(), paintSize.height()); else boxBlur(src, dst, kernelSizeX, dxLeft, dxRight, 4, stride, paintSize.width(), paintSize.height(), true, edgeMode); #else boxBlur(src, dst, kernelSizeX, dxLeft, dxRight, 4, stride, paintSize.width(), paintSize.height(), isAlphaImage, edgeMode); #endif std::swap(src, dst); } if (kernelSizeY) { kernelPosition(i, kernelSizeY, dyLeft, dyRight); #if HAVE(ARM_NEON_INTRINSICS) if (!isAlphaImage) boxBlurNEON(src, dst, kernelSizeY, dyLeft, dyRight, stride, 4, paintSize.height(), paintSize.width()); else boxBlur(src, dst, kernelSizeY, dyLeft, dyRight, stride, 4, paintSize.height(), paintSize.width(), true, edgeMode); #else boxBlur(src, dst, kernelSizeY, dyLeft, dyRight, stride, 4, paintSize.height(), paintSize.width(), isAlphaImage, edgeMode); #endif std::swap(src, dst); } } // The final result should be stored in src. if (dst == src) { ASSERT(src->length() == dst->length()); memcpy(dst->data(), src->data(), src->length()); } }