25 const float fac = this->
factor;
26 int ifac = int(256.0f * fac);
28 if constexpr (std::is_same_v<T, uchar>) {
29 const int f = ifac * int(src2[3]);
30 dst[0] =
min_ii(src1[0] + ((f * src2[0]) >> 16), 255);
31 dst[1] =
min_ii(src1[1] + ((f * src2[1]) >> 16), 255);
32 dst[2] =
min_ii(src1[2] + ((f * src2[2]) >> 16), 255);
35 const float f = (1.0f - (src1[3] * (1.0f - fac))) * src2[3];
36 dst[0] = src1[0] + f * src2[0];
37 dst[1] = src1[1] + f * src2[1];
38 dst[2] = src1[2] + f * src2[2];
70 const float fac = this->
factor;
71 int ifac = int(256.0f * fac);
73 if constexpr (std::is_same_v<T, uchar>) {
74 const int f = ifac * int(src2[3]);
75 dst[0] =
max_ii(src1[0] - ((f * src2[0]) >> 16), 0);
76 dst[1] =
max_ii(src1[1] - ((f * src2[1]) >> 16), 0);
77 dst[2] =
max_ii(src1[2] - ((f * src2[2]) >> 16), 0);
80 const float f = (1.0f - (src1[3] * (1.0f - fac))) * src2[3];
81 dst[0] =
max_ff(src1[0] - f * src2[0], 0.0f);
82 dst[1] =
max_ff(src1[1] - f * src2[1], 0.0f);
83 dst[2] =
max_ff(src1[2] - f * src2[2], 0.0f);
115 const float fac = this->
factor;
116 int ifac = int(256.0f * fac);
119 if constexpr (std::is_same_v<T, uchar>) {
120 dst[0] = src1[0] + ((ifac * src1[0] * (src2[0] - 255)) >> 16);
121 dst[1] = src1[1] + ((ifac * src1[1] * (src2[1] - 255)) >> 16);
122 dst[2] = src1[2] + ((ifac * src1[2] * (src2[2] - 255)) >> 16);
123 dst[3] = src1[3] + ((ifac * src1[3] * (src2[3] - 255)) >> 16);
126 dst[0] = src1[0] + fac * src1[0] * (src2[0] - 1.0f);
127 dst[1] = src1[1] + fac * src1[1] * (src2[1] - 1.0f);
128 dst[2] = src1[2] + fac * src1[2] * (src2[2] - 1.0f);
129 dst[3] = src1[3] + fac * src1[3] * (src2[3] - 1.0f);
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void mul_effect_get_handle(EffectHandle &rval)
StripEarlyOut early_out_mul_input2(const Strip *, float fac)
ImBuf * prepare_effect_imbufs(const RenderData *context, ImBuf *ibuf1, ImBuf *ibuf2, bool uninitialized_pixels)
void add_effect_get_handle(EffectHandle &rval)
static ImBuf * do_mul_effect(const RenderData *context, SeqRenderState *, Strip *, float, float fac, ImBuf *src1, ImBuf *src2)
void sub_effect_get_handle(EffectHandle &rval)
static ImBuf * do_sub_effect(const RenderData *context, SeqRenderState *, Strip *, float, float fac, ImBuf *src1, ImBuf *src2)
static void apply_effect_op(const OpT &op, const ImBuf *src1, const ImBuf *src2, ImBuf *dst)
static ImBuf * do_add_effect(const RenderData *context, SeqRenderState *, Strip *, float, float fac, ImBuf *src1, ImBuf *src2)
void apply(const T *src1, const T *src2, T *dst, int64_t size) const
ImBuf *(* execute)(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame, float fac, ImBuf *ibuf1, ImBuf *ibuf2)
StripEarlyOut(* early_out)(const Strip *strip, float fac)
void apply(const T *src1, const T *src2, T *dst, int64_t size) const
void apply(const T *src1, const T *src2, T *dst, int64_t size) const