Blender V4.5
effects.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2004 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
11#include "BLI_array.hh"
12#include "BLI_math_color.h"
14#include "BLI_task.hh"
15#include "IMB_imbuf_types.hh"
16#include "SEQ_effects.hh"
17
18struct ImBuf;
19struct Scene;
20struct Strip;
21
22namespace blender::seq {
23
29void strip_effect_speed_rebuild_map(Scene *scene, Strip *strip);
34 Strip *strip_speed,
35 float timeline_frame,
36 int input);
37
38ImBuf *prepare_effect_imbufs(const RenderData *context,
39 ImBuf *ibuf1,
40 ImBuf *ibuf2,
41 bool uninitialized_pixels = true);
42
43blender::Array<float> make_gaussian_blur_kernel(float rad, int size);
44
46{
49 return res;
50}
51
53{
54 return blender::float4(ptr);
55}
56
57inline void store_premul_pixel(const blender::float4 &pix, uchar *dst)
58{
60}
61
62inline void store_premul_pixel(const blender::float4 &pix, float *dst)
63{
64 *reinterpret_cast<blender::float4 *>(dst) = pix;
65}
66
68{
69 dst[0] = 0;
70 dst[1] = 0;
71 dst[2] = 0;
72 dst[3] = 255;
73}
74
75inline void store_opaque_black_pixel(float *dst)
76{
77 dst[0] = 0.0f;
78 dst[1] = 0.0f;
79 dst[2] = 0.0f;
80 dst[3] = 1.0f;
81}
82
83StripEarlyOut early_out_mul_input1(const Strip * /*seq*/, float fac);
84StripEarlyOut early_out_mul_input2(const Strip * /*seq*/, float fac);
85StripEarlyOut early_out_fade(const Strip * /*seq*/, float fac);
86void get_default_fac_fade(const Scene *scene,
87 const Strip *strip,
88 float timeline_frame,
89 float *fac);
90
91EffectHandle effect_handle_get(int strip_type);
92
93void add_effect_get_handle(EffectHandle &rval);
94void adjustment_effect_get_handle(EffectHandle &rval);
95void alpha_over_effect_get_handle(EffectHandle &rval);
96void alpha_under_effect_get_handle(EffectHandle &rval);
97void blend_mode_effect_get_handle(EffectHandle &rval);
98void color_mix_effect_get_handle(EffectHandle &rval);
99void cross_effect_get_handle(EffectHandle &rval);
100void gamma_cross_effect_get_handle(EffectHandle &rval);
101void gaussian_blur_effect_get_handle(EffectHandle &rval);
102void glow_effect_get_handle(EffectHandle &rval);
103void mul_effect_get_handle(EffectHandle &rval);
104void multi_camera_effect_get_handle(EffectHandle &rval);
105void solid_color_effect_get_handle(EffectHandle &rval);
106void speed_effect_get_handle(EffectHandle &rval);
107void sub_effect_get_handle(EffectHandle &rval);
108void text_effect_get_handle(EffectHandle &rval);
109void transform_effect_get_handle(EffectHandle &rval);
110void wipe_effect_get_handle(EffectHandle &rval);
111
112/* Given `OpT` that implements an `apply` function:
113 *
114 * template <typename T>
115 * void apply(const T *src1, const T *src2, T *dst, int64_t size) const;
116 *
117 * this function calls the apply() function in parallel
118 * chunks of the image to process, and with uchar or float types
119 * All images are expected to have 4 (RGBA) color channels. */
120template<typename OpT>
121static void apply_effect_op(const OpT &op, const ImBuf *src1, const ImBuf *src2, ImBuf *dst)
122{
123 BLI_assert_msg(src1->channels == 0 || src1->channels == 4,
124 "Sequencer only supports 4 channel images");
125 BLI_assert_msg(src2->channels == 0 || src2->channels == 4,
126 "Sequencer only supports 4 channel images");
127 BLI_assert_msg(dst->channels == 0 || dst->channels == 4,
128 "Sequencer only supports 4 channel images");
130 blender::IndexRange(size_t(dst->x) * dst->y), 32 * 1024, [&](blender::IndexRange range) {
131 int64_t offset = range.first() * 4;
132 if (dst->float_buffer.data) {
133 const float *src1_ptr = src1->float_buffer.data + offset;
134 const float *src2_ptr = src2->float_buffer.data + offset;
135 float *dst_ptr = dst->float_buffer.data + offset;
136 op.apply(src1_ptr, src2_ptr, dst_ptr, range.size());
137 }
138 else {
139 const uchar *src1_ptr = src1->byte_buffer.data + offset;
140 const uchar *src2_ptr = src2->byte_buffer.data + offset;
141 uchar *dst_ptr = dst->byte_buffer.data + offset;
142 op.apply(src1_ptr, src2_ptr, dst_ptr, range.size());
143 }
144 });
145}
146
147} // namespace blender::seq
#define BLI_assert_msg(a, msg)
Definition BLI_assert.h:53
MINLINE void straight_uchar_to_premul_float(float result[4], const unsigned char color[4])
MINLINE void premul_float_to_straight_uchar(unsigned char *result, const float color[4])
unsigned char uchar
struct Scene Scene
struct Strip Strip
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
#define input
void mul_effect_get_handle(EffectHandle &rval)
void alpha_under_effect_get_handle(EffectHandle &rval)
void wipe_effect_get_handle(EffectHandle &rval)
void gaussian_blur_effect_get_handle(EffectHandle &rval)
void solid_color_effect_get_handle(EffectHandle &rval)
StripEarlyOut early_out_mul_input2(const Strip *, float fac)
Definition effects.cc:128
void text_effect_get_handle(EffectHandle &rval)
Array< float > make_gaussian_blur_kernel(float rad, int size)
Definition effects.cc:80
void store_premul_pixel(const blender::float4 &pix, uchar *dst)
Definition effects.hh:57
ImBuf * prepare_effect_imbufs(const RenderData *context, ImBuf *ibuf1, ImBuf *ibuf2, bool uninitialized_pixels)
Definition effects.cc:28
void store_opaque_black_pixel(uchar *dst)
Definition effects.hh:67
void gamma_cross_effect_get_handle(EffectHandle &rval)
void blend_mode_effect_get_handle(EffectHandle &rval)
void get_default_fac_fade(const Scene *scene, const Strip *strip, float timeline_frame, float *fac)
Definition effects.cc:152
void cross_effect_get_handle(EffectHandle &rval)
blender::float4 load_premul_pixel(const uchar *ptr)
Definition effects.hh:45
void multi_camera_effect_get_handle(EffectHandle &rval)
float strip_speed_effect_target_frame_get(Scene *scene, Strip *strip_speed, float timeline_frame, int input)
void speed_effect_get_handle(EffectHandle &rval)
void add_effect_get_handle(EffectHandle &rval)
void strip_effect_speed_rebuild_map(Scene *scene, Strip *strip)
StripEarlyOut early_out_mul_input1(const Strip *, float fac)
Definition effects.cc:136
void transform_effect_get_handle(EffectHandle &rval)
void adjustment_effect_get_handle(EffectHandle &rval)
void sub_effect_get_handle(EffectHandle &rval)
EffectHandle effect_handle_get(int strip_type)
Definition effects.cc:159
void glow_effect_get_handle(EffectHandle &rval)
static void apply_effect_op(const OpT &op, const ImBuf *src1, const ImBuf *src2, ImBuf *dst)
Definition effects.hh:121
EffectHandle strip_effect_get_sequence_blend(Strip *strip)
Definition effects.cc:264
void color_mix_effect_get_handle(EffectHandle &rval)
void alpha_over_effect_get_handle(EffectHandle &rval)
StripEarlyOut early_out_fade(const Strip *, float fac)
Definition effects.cc:117
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
Definition BLI_task.hh:93
VecBase< float, 4 > float4
PointerRNA * ptr
Definition wm_files.cc:4227