10#include <spdlog/spdlog.h>
14template<
typename InputType>
16 const InputType& input,
17 const Halide::Param<float>& param_blacks,
22 Halide::Func blacks_func(
"blacks_op");
25 Halide::Expr L = input(x, y, 0);
30 Halide::Expr t = clamp((0.3f - L) / (0.3f - 0.0f), 0.0f, 1.0f);
34 Halide::Expr mask = t * t * (3.0f - 2.0f * t);
37 Halide::Expr safe_val = clamp(
45 blacks_func(x, y, c) = select(
59 const Halide::Func& input_func,
63 const Halide::Param<float>& param
66 spdlog::trace(
"OperationBlacks::appendToFusedPipeline: Fusing with Halide Param");
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 MAX_BLACKS_VALUE
Maximum allowed blacks value. Defined by OperationRanges::getBlacksMaxValue().
static constexpr float MIN_BLACKS_VALUE
Minimum allowed blacks value. Defined by OperationRanges::getBlacksMinValue().
Halide::Func applyBlacksAdjustment(const InputType &input, const Halide::Param< float > ¶m_blacks, const Halide::Var &x, const Halide::Var &y, const Halide::Var &c)
Concrete implementation of Blacks adjustment.