FastLED 3.9.15
Loading...
Searching...
No Matches
blur.cpp.hpp File Reference
#include "fl/stl/stdint.h"
#include "fl/system/fastled.h"
#include "crgb.h"
#include "fl/gfx/blur.h"
#include "fl/gfx/colorutils_misc.h"
#include "fl/stl/compiler_control.h"
#include "fl/log/log.h"
#include "fl/math/xymap.h"
#include "fl/math/scale8.h"
#include "fl/stl/int.h"
#include "fl/stl/span.h"
#include "fl/gfx/crgb16.h"
#include "fl/stl/singleton.h"
#include "fl/stl/vector.h"
#include "fl/math/simd.h"
+ Include dependency graph for blur.cpp.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  fl::gfx::blur_detail::interior_row< 0, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::interior_row< 1, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::interior_row< 2, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::interior_row< 3, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::interior_row< 4, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::pixel_ops< CRGB >
 
struct  fl::gfx::blur_detail::pixel_ops< CRGB16 >
 
struct  fl::gfx::blur_detail::simd_hconv_dispatch< 0 >
 
struct  fl::gfx::blur_detail::simd_hconv_dispatch< 1 >
 
struct  fl::gfx::blur_detail::simd_hconv_dispatch< 2 >
 
struct  fl::gfx::blur_detail::simd_hconv_dispatch< 3 >
 
struct  fl::gfx::blur_detail::simd_hconv_dispatch< 4 >
 
struct  fl::gfx::blur_detail::simd_vconv_dispatch< 0 >
 
struct  fl::gfx::blur_detail::simd_vconv_dispatch< 1 >
 
struct  fl::gfx::blur_detail::simd_vconv_dispatch< 2 >
 
struct  fl::gfx::blur_detail::simd_vconv_dispatch< 3 >
 
struct  fl::gfx::blur_detail::simd_vconv_dispatch< 4 >
 
struct  fl::gfx::blur_detail::vpass_pixel_kernel< 0, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::vpass_pixel_kernel< 1, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::vpass_pixel_kernel< 2, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::vpass_pixel_kernel< 3, RGB_T, acc_t >
 
struct  fl::gfx::blur_detail::vpass_pixel_kernel< 4, RGB_T, acc_t >
 

Namespaces

namespace  fl
 Base definition for an LED controller.
 
namespace  fl::anonymous_namespace{blur.cpp.hpp}
 
namespace  fl::gfx
 
namespace  fl::gfx::blur_detail
 

Macros

#define BLUR_INST_F16(H, V, T)
 
#define BLUR_INST_F8(H, V, T)
 
#define BLUR_MAPPED_INST_F16(H, V, T)
 
#define BLUR_MAPPED_INST_F8(H, V, T)
 
#define FASTLED_INTERNAL
 

Functions

template<typename AlphaT>
constexpr AlphaT fl::gfx::blur_detail::alpha_identity ()
 
template<>
constexpr alpha16 fl::gfx::blur_detail::alpha_identity< alpha16 > ()
 
template<>
constexpr alpha8 fl::gfx::blur_detail::alpha_identity< alpha8 > ()
 
template<int R, typename RGB_T, typename acc_t>
FL_NO_INLINE_IF_AVR static FL_OPTIMIZE_FUNCTION void fl::gfx::blur_detail::apply_pass (const RGB_T *pad, RGB_T *out, int count, int stride)
 
template<int R, typename RGB_T, typename acc_t, typename AlphaT>
FL_NO_INLINE_IF_AVR static FL_OPTIMIZE_FUNCTION void fl::gfx::blur_detail::apply_pass_alpha (const RGB_T *pad, RGB_T *out, int count, int stride, AlphaT alpha)
 
void fl::gfx::blur1d (fl::span< CRGB > leds, fract8 blur_amount) FL_NOEXCEPT
 One-dimensional blur filter (span version).
 
void fl::gfx::blur2d (Canvas< CRGB > &canvas, alpha8 blur_amount) FL_NOEXCEPT
 Two-dimensional blur filter (Canvas version, no XYMap).
 
void fl::gfx::blur2d (CRGB *leds, u8 width, u8 height, fract8 blur_amount) FL_NOEXCEPT FASTLED_DEPRECATED("Use blur2d(...
 Legacy version of blur2d, which does not require an XYMap but instead implicitly binds to XY() function.
 
void fl::gfx::blur2d (fl::span< CRGB > leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 Two-dimensional blur filter (span version).
 
 fl::gfx::BLUR_INST_F16 (0, 0, CRGB) BLUR_INST_F16(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F16 (0, 1, CRGB16) BLUR_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F16 (0, 2, CRGB) BLUR_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F16 (0, 3, CRGB16) BLUR_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F16 (0, 4, CRGB) BLUR_INST_F16(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F16 (1, 0, CRGB16) BLUR_INST_F16(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 fl::gfx::BLUR_INST_F16 (1, 1, CRGB16) BLUR_INST_F16(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F16 (1, 2, CRGB16) BLUR_INST_F16(2
 
CRGB CRGB CRGB fl::gfx::BLUR_INST_F16 (2, 0, CRGB) BLUR_INST_F16(3
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F16 (2, 1, CRGB) BLUR_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F16 (3, 0, CRGB16) BLUR_INST_F16(4
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 fl::gfx::BLUR_INST_F16 (3, 3, CRGB16) BLUR_INST_F16(4
 
CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F16 (4, 0, CRGB) BLUR_INST_F16(0
 
CRGB CRGB fl::gfx::BLUR_INST_F16 (4, 4, CRGB) BLUR_INST_F16(1
 
 fl::gfx::BLUR_INST_F8 (0, 0, CRGB) BLUR_INST_F8(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F8 (0, 1, CRGB16) BLUR_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F8 (0, 2, CRGB) BLUR_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F8 (0, 3, CRGB16) BLUR_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F8 (0, 4, CRGB) BLUR_INST_F8(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F8 (1, 0, CRGB16) BLUR_INST_F8(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 fl::gfx::BLUR_INST_F8 (1, 1, CRGB16) BLUR_INST_F8(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F8 (1, 2, CRGB16) BLUR_INST_F8(2
 
CRGB CRGB CRGB fl::gfx::BLUR_INST_F8 (2, 0, CRGB) BLUR_INST_F8(3
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F8 (2, 1, CRGB) BLUR_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_INST_F8 (3, 0, CRGB16) BLUR_INST_F8(4
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 fl::gfx::BLUR_INST_F8 (3, 3, CRGB16) BLUR_INST_F8(4
 
CRGB CRGB CRGB CRGB fl::gfx::BLUR_INST_F8 (4, 0, CRGB) BLUR_INST_F8(0
 
CRGB CRGB fl::gfx::BLUR_INST_F8 (4, 4, CRGB) BLUR_INST_F8(1
 
 fl::gfx::BLUR_MAPPED_INST_F16 (0, 0, CRGB) BLUR_MAPPED_INST_F16(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F16 (0, 1, CRGB16) BLUR_MAPPED_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F16 (0, 2, CRGB) BLUR_MAPPED_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F16 (0, 3, CRGB16) BLUR_MAPPED_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F16 (0, 4, CRGB) BLUR_MAPPED_INST_F16(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F16 (1, 0, CRGB16) BLUR_MAPPED_INST_F16(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 fl::gfx::BLUR_MAPPED_INST_F16 (1, 1, CRGB16) BLUR_MAPPED_INST_F16(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F16 (1, 2, CRGB16) BLUR_MAPPED_INST_F16(2
 
CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F16 (2, 0, CRGB) BLUR_MAPPED_INST_F16(3
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F16 (2, 1, CRGB) BLUR_MAPPED_INST_F16(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F16 (3, 0, CRGB16) BLUR_MAPPED_INST_F16(4
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F16 (3, 3, CRGB16) BLUR_MAPPED_INST_F16(4
 
CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F16 (4, 0, CRGB) BLUR_MAPPED_INST_F16(0
 
CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F16 (4, 4, CRGB) BLUR_MAPPED_INST_F16(1
 
 fl::gfx::BLUR_MAPPED_INST_F8 (0, 0, CRGB) BLUR_MAPPED_INST_F8(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F8 (0, 1, CRGB16) BLUR_MAPPED_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F8 (0, 2, CRGB) BLUR_MAPPED_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F8 (0, 3, CRGB16) BLUR_MAPPED_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F8 (0, 4, CRGB) BLUR_MAPPED_INST_F8(1
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F8 (1, 0, CRGB16) BLUR_MAPPED_INST_F8(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 fl::gfx::BLUR_MAPPED_INST_F8 (1, 1, CRGB16) BLUR_MAPPED_INST_F8(2
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F8 (1, 2, CRGB16) BLUR_MAPPED_INST_F8(2
 
CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F8 (2, 0, CRGB) BLUR_MAPPED_INST_F8(3
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F8 (2, 1, CRGB) BLUR_MAPPED_INST_F8(0
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F8 (3, 0, CRGB16) BLUR_MAPPED_INST_F8(4
 
CRGB CRGB CRGB CRGB CRGB CRGB CRGB CRGB16 CRGB16 fl::gfx::BLUR_MAPPED_INST_F8 (3, 3, CRGB16) BLUR_MAPPED_INST_F8(4
 
CRGB CRGB CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F8 (4, 0, CRGB) BLUR_MAPPED_INST_F8(0
 
CRGB CRGB fl::gfx::BLUR_MAPPED_INST_F8 (4, 4, CRGB) BLUR_MAPPED_INST_F8(1
 
void fl::gfx::blurColumns (Canvas< CRGB > &canvas, alpha8 blur_amount) FL_NOEXCEPT
 Perform a blur1d() on every column of a rectangular matrix (Canvas version).
 
void fl::gfx::blurColumns (fl::span< CRGB > leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 Perform a blur1d() on every column of a rectangular matrix (span version).
 
template<int hRadius, int vRadius, typename RGB_T>
void fl::gfx::blurGaussian (Canvas< RGB_T > &canvas, alpha16 dimFactor) FL_NOEXCEPT
 Higher-precision dim overload (UNORM16).
 
template<int hRadius, int vRadius, typename RGB_T>
void fl::gfx::blurGaussian (Canvas< RGB_T > &canvas, alpha8 dimFactor) FL_NOEXCEPT
 Compile-time Gaussian blur with independent H/V radii.
 
template<int hRadius, int vRadius, typename RGB_T>
void fl::gfx::blurGaussian (CanvasMapped< RGB_T > &canvas, alpha16 dimFactor) FL_NOEXCEPT
 Higher-precision dim overload for CanvasMapped (UNORM16).
 
template<int hRadius, int vRadius, typename RGB_T>
void fl::gfx::blurGaussian (CanvasMapped< RGB_T > &canvas, alpha8 dimFactor) FL_NOEXCEPT
 XYMap-backed Gaussian blur (non-optimized, per-pixel path).
 
template<int hRadius, int vRadius, typename RGB_T, typename AlphaT>
FL_OPTIMIZE_FUNCTION void fl::gfx::blurGaussianImpl (Canvas< RGB_T > &canvas, AlphaT alpha)
 
template<int hRadius, int vRadius, typename RGB_T, typename AlphaT>
FL_OPTIMIZE_FUNCTION void fl::gfx::blurGaussianMappedImpl (CanvasMapped< RGB_T > &canvas, AlphaT alpha)
 
void fl::gfx::blurRows (Canvas< CRGB > &canvas, alpha8 blur_amount) FL_NOEXCEPT
 Perform a blur1d() on every row of a rectangular matrix (Canvas version).
 
void fl::gfx::blurRows (fl::span< CRGB > leds, u8 width, u8 height, fract8 blur_amount, const XYMap &xymap) FL_NOEXCEPT
 Perform a blur1d() on every row of a rectangular matrix (span version).
 
template<int hR, int vR, typename RGB_T>
static int fl::gfx::blur_detail::compute_pad_size (int w, int h)
 
template<typename RGB_T>
static fl::span< RGB_T > fl::gfx::blur_detail::get_padbuf (int minSize)
 
template<int R, typename RGB_T, typename acc_t, bool ApplyAlpha, typename AlphaT>
FL_ALWAYS_INLINE void fl::gfx::blur_detail::hpass_row (RGB_T *pad, RGB_T *out, int w, AlphaT alpha)
 
static void fl::gfx::blur_detail::simd_conv_121 (const u8 *FL_RESTRICT_PARAM a, const u8 *FL_RESTRICT_PARAM b, const u8 *FL_RESTRICT_PARAM c, u8 *FL_RESTRICT_PARAM out, int nbytes)
 
static void fl::gfx::blur_detail::simd_conv_14641 (const u8 *p0, const u8 *p1, const u8 *p2, const u8 *p3, const u8 *p4, u8 *out, int nbytes)
 
static void fl::gfx::blur_detail::simd_conv_r3 (const u8 *p0, const u8 *p1, const u8 *p2, const u8 *p3, const u8 *p4, const u8 *p5, const u8 *p6, u8 *out, int nbytes)
 
static void fl::gfx::blur_detail::simd_conv_r4 (const u8 *p0, const u8 *p1, const u8 *p2, const u8 *p3, const u8 *p4, const u8 *p5, const u8 *p6, const u8 *p7, const u8 *p8, u8 *out, int nbytes)
 
template<int R, typename RGB_T, typename acc_t, bool ApplyAlpha, typename AlphaT>
static void fl::gfx::blur_detail::vpass_full (RGB_T *pixels, int w, int h, RGB_T *scratch, AlphaT alpha)
 
template<int R, typename RGB_T, typename acc_t, bool ApplyAlpha, typename AlphaT>
static FL_OPTIMIZE_FUNCTION void fl::gfx::blur_detail::vpass_rowmajor_impl (RGB_T *pixels, int w, int h, RGB_T *scratch, AlphaT alpha)
 
FL_OPTIMIZATION_LEVEL_O3_BEGIN fl::u16 XY (fl::u8 x, fl::u8 y) FL_LINK_WEAK
 
fl::u16 fl::anonymous_namespace{blur.cpp.hpp}::xy_legacy_wrapper (fl::u16 x, fl::u16 y, fl::u16 width, fl::u16 height)
 

Variables

CRGB fl::gfx::BLUR_INST_F16 (2, 2, CRGB) BLUR_INST_F16(3
 
CRGB fl::gfx::BLUR_INST_F8 (2, 2, CRGB) BLUR_INST_F8(3
 
CRGB fl::gfx::BLUR_MAPPED_INST_F16 (2, 2, CRGB) BLUR_MAPPED_INST_F16(3
 
CRGB fl::gfx::BLUR_MAPPED_INST_F8 (2, 2, CRGB) BLUR_MAPPED_INST_F8(3