// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #ifndef BLUR_HPP_ #define BLUR_HPP_ #include #include "gpu/buffer.hpp" #include "gpu/stream.hpp" namespace VideoStitch { namespace Image { Status gaussianBlur2D(GPU::Buffer buf, GPU::Buffer work, std::size_t width, std::size_t height, unsigned radius, unsigned passes, bool wrap, unsigned blockSize, GPU::Stream stream); /** * Blur @buf with a gaussian filter of radius @radius. @work must be at least as big as @buf. * @passes is the number of box filtering passes and must be even (performance reasons). */ template Status gaussianBlur2D(GPU::Buffer dst, GPU::Buffer src, GPU::Buffer work, std::size_t width, std::size_t height, unsigned radius, unsigned passes, bool wrap, GPU::Stream stream); /** * Specialized gaussian blur: * - Applies to an RGBA formatted buffer, colors are blurred independently. * - Output is written to dst. * Passes need not be even nor odd. */ Status gaussianBlur2DRGBA(GPU::Buffer dst, GPU::Buffer src, GPU::Buffer work, std::size_t width, std::size_t height, unsigned radius, unsigned passes, bool wrap, GPU::Stream stream); Status gaussianBlur2DRGB210(GPU::Buffer dst, GPU::Buffer src, GPU::Buffer work, std::size_t width, std::size_t height, unsigned radius, unsigned passes, bool wrap, GPU::Stream stream); /** * Small-support optimized version. * In-place. */ Status gaussianBlur2DRGBASS(GPU::Buffer buf, GPU::Buffer work, std::size_t width, std::size_t height, std::size_t radius, bool wrap, GPU::Stream stream); Status gaussianBlur2DRGB210SS(GPU::Buffer buf, GPU::Buffer work, std::size_t width, std::size_t height, std::size_t radius, bool wrap, GPU::Stream stream); template Status boxBlur1DNoWrap(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, unsigned blockSize, GPU::Stream stream); Status boxBlur1DNoWrapRGBA210(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, GPU::Stream stream); Status boxBlur1DRowWrapRGBA210(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, GPU::Stream stream); template Status boxBlur1DWrap(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, unsigned blockSize, GPU::Stream stream); Status boxBlurColumnsNoWrapRGBA210(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, GPU::Stream gpuStream); Status boxBlurColumnsWrapRGBA210(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, GPU::Stream gpuStream); Status boxBlurRowsRGBA210(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, GPU::Stream stream, bool wrap); Status boxBlur1DWrapRGBA210(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, GPU::Stream stream); Status gaussianBlur1DRGBA210SS(GPU::Buffer dst, GPU::Buffer src, std::size_t width, std::size_t height, unsigned radius, bool wrap, GPU::Stream stream); } // namespace Image } // namespace VideoStitch #endif