10#include <spdlog/spdlog.h>
14template<
typename InputType>
16 const InputType& input,
17 const Halide::Param<float>& param_whites,
22 Halide::Func whites_func(
"whites_op");
25 Halide::Expr L = input(x, y, 0);
30 constexpr float whites_cutoff = 0.85f;
32 Halide::Expr t = clamp((L - whites_cutoff) / (1.0f - whites_cutoff), 0.0f, 1.0f);
35 Halide::Expr mask = t * t * (3.0f - 2.0f * t);
38 Halide::Expr safe_val = clamp(
46 whites_func(x, y, c) = select(
60 const Halide::Func& input_func,
64 const Halide::Param<float>& param
68 spdlog::trace(
"OperationWhites::appendToFusedPipeline: Fusing with Halide Param (In-Graph Clamped)");
Halide::Func appendToFusedPipeline(const Halide::Func &input_func, const Halide::Var &x, const Halide::Var &y, const Halide::Var &c, const Halide::Param< float > ¶m) const override
Appends this operation's logic to a fused Halide pipeline. This method is used by the PipelineBuilder...
static constexpr float MIN_WHITES_VALUE
Minimum allowed whites value. Defined by OperationRanges::getWhitesMinValue().
static constexpr float MAX_WHITES_VALUE
Maximum allowed whites value. Defined by OperationRanges::getWhitesMaxValue().
Halide::Func applyWhitesAdjustment(const InputType &input, const Halide::Param< float > ¶m_whites, const Halide::Var &x, const Halide::Var &y, const Halide::Var &c)
Concrete implementation of Whites adjustment.