Blender V5.0
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 "BLF_enums.hh"
12
13#include "BLI_array.hh"
14#include "BLI_math_color.h"
16#include "BLI_task.hh"
17
18#include "IMB_imbuf_types.hh"
19#include "SEQ_effects.hh"
20
21struct ImBuf;
22struct Scene;
23struct Strip;
24
25namespace blender::seq {
26
32void strip_effect_speed_rebuild_map(Scene *scene, Strip *strip);
37 Strip *strip_speed,
38 float timeline_frame,
39 int input);
40
41ImBuf *prepare_effect_imbufs(const RenderData *context,
42 ImBuf *ibuf1,
43 ImBuf *ibuf2,
44 bool uninitialized_pixels = true);
45
46blender::Array<float> make_gaussian_blur_kernel(float rad, int size);
47
49{
52 return res;
53}
54
56{
57 return blender::float4(ptr);
58}
59
60inline void store_premul_pixel(const blender::float4 &pix, uchar *dst)
61{
63}
64
65inline void store_premul_pixel(const blender::float4 &pix, float *dst)
66{
67 *reinterpret_cast<blender::float4 *>(dst) = pix;
68}
69
71{
72 dst[0] = 0;
73 dst[1] = 0;
74 dst[2] = 0;
75 dst[3] = 255;
76}
77
78inline void store_opaque_black_pixel(float *dst)
79{
80 dst[0] = 0.0f;
81 dst[1] = 0.0f;
82 dst[2] = 0.0f;
83 dst[3] = 1.0f;
84}
85
86StripEarlyOut early_out_mul_input1(const Strip * /*seq*/, float fac);
87StripEarlyOut early_out_mul_input2(const Strip * /*seq*/, float fac);
88StripEarlyOut early_out_fade(const Strip * /*seq*/, float fac);
89void get_default_fac_fade(const Scene *scene,
90 const Strip *strip,
91 float timeline_frame,
92 float *fac);
93
94EffectHandle effect_handle_get(StripType strip_type);
95
96void add_effect_get_handle(EffectHandle &rval);
97void adjustment_effect_get_handle(EffectHandle &rval);
98void alpha_over_effect_get_handle(EffectHandle &rval);
99void alpha_under_effect_get_handle(EffectHandle &rval);
100void blend_mode_effect_get_handle(EffectHandle &rval);
101void color_mix_effect_get_handle(EffectHandle &rval);
102void cross_effect_get_handle(EffectHandle &rval);
103void gamma_cross_effect_get_handle(EffectHandle &rval);
104void gaussian_blur_effect_get_handle(EffectHandle &rval);
105void glow_effect_get_handle(EffectHandle &rval);
106void mul_effect_get_handle(EffectHandle &rval);
107void multi_camera_effect_get_handle(EffectHandle &rval);
108void solid_color_effect_get_handle(EffectHandle &rval);
109void speed_effect_get_handle(EffectHandle &rval);
110void sub_effect_get_handle(EffectHandle &rval);
111void text_effect_get_handle(EffectHandle &rval);
114
115/* Given `OpT` that implements an `apply` function:
116 *
117 * template <typename T>
118 * void apply(const T *src1, const T *src2, T *dst, int64_t size) const;
119 *
120 * this function calls the apply() function in parallel
121 * chunks of the image to process, and with uchar or float types
122 * All images are expected to have 4 (RGBA) color channels. */
123template<typename OpT>
124static void apply_effect_op(const OpT &op, const ImBuf *src1, const ImBuf *src2, ImBuf *dst)
125{
126 BLI_assert_msg(src1->channels == 0 || src1->channels == 4,
127 "Sequencer only supports 4 channel images");
128 BLI_assert_msg(src2->channels == 0 || src2->channels == 4,
129 "Sequencer only supports 4 channel images");
130 BLI_assert_msg(dst->channels == 0 || dst->channels == 4,
131 "Sequencer only supports 4 channel images");
133 blender::IndexRange(size_t(dst->x) * dst->y), 32 * 1024, [&](blender::IndexRange range) {
134 int64_t offset = range.first() * 4;
135 if (dst->float_buffer.data) {
136 const float *src1_ptr = src1->float_buffer.data + offset;
137 const float *src2_ptr = src2->float_buffer.data + offset;
138 float *dst_ptr = dst->float_buffer.data + offset;
139 op.apply(src1_ptr, src2_ptr, dst_ptr, range.size());
140 }
141 else {
142 const uchar *src1_ptr = src1->byte_buffer.data + offset;
143 const uchar *src2_ptr = src2->byte_buffer.data + offset;
144 uchar *dst_ptr = dst->byte_buffer.data + offset;
145 op.apply(src1_ptr, src2_ptr, dst_ptr, range.size());
146 }
147 });
148}
149
150TextVarsRuntime *text_effect_calc_runtime(const Strip *strip, int font, const int2 image_size);
151int text_effect_font_init(const RenderData *context, const Strip *strip, FontFlags font_flags);
152
153} // namespace blender::seq
FontFlags
Definition BLF_enums.hh:31
#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 TextVarsRuntime TextVarsRuntime
struct Strip Strip
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
#define input
EffectHandle strip_blend_mode_handle_get(Strip *strip)
Definition effects.cc:305
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:60
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:70
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:48
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
EffectHandle effect_handle_get(StripType strip_type)
Definition effects.cc:159
void transform_effect_get_handle(EffectHandle &rval)
void adjustment_effect_get_handle(EffectHandle &rval)
void sub_effect_get_handle(EffectHandle &rval)
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:124
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:4238