Blender V4.5
node_composite_stabilize2d.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BLI_assert.h"
11#include "BLI_math_matrix.hh"
14
15#include "UI_interface.hh"
16#include "UI_resources.hh"
17
18#include "DNA_movieclip_types.h"
19#include "DNA_node_types.h"
20
21#include "BKE_context.hh"
22#include "BKE_lib_id.hh"
23#include "BKE_movieclip.h"
24#include "BKE_tracking.h"
25
26#include "COM_node_operation.hh"
27
29
30/* **************** Stabilize 2D ******************** */
31
33
35{
36 b.add_input<decl::Color>("Image")
37 .default_value({0.8f, 0.8f, 0.8f, 1.0f})
38 .compositor_realization_mode(CompositorInputRealizationMode::None);
39 b.add_input<decl::Bool>("Invert")
40 .default_value(false)
41 .description("Invert stabilization to reintroduce motion to the image")
42 .compositor_expects_single_value();
43
44 b.add_output<decl::Color>("Image");
45}
46
47static void init(const bContext *C, PointerRNA *ptr)
48{
49 bNode *node = (bNode *)ptr->data;
50 Scene *scene = CTX_data_scene(C);
51
52 node->id = (ID *)scene->clip;
53 id_us_plus(node->id);
54
55 /* Default to bi-linear, see node_sampler_type_items in `rna_nodetree.cc`. */
56 node->custom1 = 1;
57}
58
60{
61 bNode *node = (bNode *)ptr->data;
62
63 uiTemplateID(layout, C, ptr, "clip", nullptr, "CLIP_OT_open", nullptr);
64
65 if (!node->id) {
66 return;
67 }
68
69 layout->prop(ptr, "filter_type", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
70}
71
72using namespace blender::compositor;
73
75 public:
77
78 void execute() override
79 {
80 const Result &input = this->get_input("Image");
81 Result &output = this->get_result("Image");
82
83 MovieClip *movie_clip = get_movie_clip();
84 if (input.is_single_value() || !movie_clip) {
85 output.share_data(input);
86 return;
87 }
88
89 const int width = input.domain().size.x;
90 const int height = input.domain().size.y;
91 const int frame_number = BKE_movieclip_remap_scene_to_clip_frame(movie_clip,
92 context().get_frame_number());
93
94 float2 translation;
95 float scale, rotation;
97 movie_clip, frame_number, width, height, translation, &scale, &rotation);
98
100 translation, math::AngleRadian(rotation), float2(scale));
102 transformation = math::invert(transformation);
103 }
104
105 output.share_data(input);
106 output.transform(transformation);
107 output.get_realization_options().interpolation = this->get_interpolation();
108 }
109
124
126 {
127 return this->get_input("Invert").get_single_value_default(false);
128 }
129
131 {
132 return reinterpret_cast<MovieClip *>(bnode().id);
133 }
134};
135
137{
138 return new Stabilize2DOperation(context, node);
139}
140
141} // namespace blender::nodes::node_composite_stabilize2d_cc
142
144{
146
147 static blender::bke::bNodeType ntype;
148
149 cmp_node_type_base(&ntype, "CompositorNodeStabilize", CMP_NODE_STABILIZE2D);
150 ntype.ui_name = "Stabilize 2D";
151 ntype.ui_description = "Stabilize footage using 2D stabilization motion tracking settings";
152 ntype.enum_name_legacy = "STABILIZE2D";
154 ntype.declare = file_ns::cmp_node_stabilize2d_declare;
155 ntype.draw_buttons = file_ns::node_composit_buts_stabilize2d;
156 ntype.initfunc_api = file_ns::init;
157 ntype.get_compositor_operation = file_ns::get_compositor_operation;
158
160}
Scene * CTX_data_scene(const bContext *C)
void id_us_plus(ID *id)
Definition lib_id.cc:353
float BKE_movieclip_remap_scene_to_clip_frame(const struct MovieClip *clip, float framenr)
#define NODE_CLASS_DISTORT
Definition BKE_node.hh:441
#define CMP_NODE_STABILIZE2D
void BKE_tracking_stabilization_data_get(struct MovieClip *clip, int framenr, int width, int height, float translation[2], float *scale, float *angle)
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
CMPNodeInterpolation
@ CMP_NODE_INTERPOLATION_NEAREST
@ CMP_NODE_INTERPOLATION_BILINEAR
@ CMP_NODE_INTERPOLATION_BICUBIC
#define NOD_REGISTER_NODE(REGISTER_FUNC)
#define C
Definition RandGen.cpp:29
void uiTemplateID(uiLayout *layout, const bContext *C, PointerRNA *ptr, blender::StringRefNull propname, const char *newop, const char *openop, const char *unlinkop, int filter=UI_TEMPLATE_ID_FILTER_ALL, bool live_icon=false, std::optional< blender::StringRef > text=std::nullopt)
@ UI_ITEM_R_SPLIT_EMPTY_NAME
void init()
NodeOperation(Context &context, DNode node)
Result & get_result(StringRef identifier)
Definition operation.cc:39
Result & get_input(StringRef identifier) const
Definition operation.cc:138
T get_single_value_default(const T &default_value) const
#define input
#define output
void node_register_type(bNodeType &ntype)
Definition node.cc:2748
AngleRadianBase< float > AngleRadian
CartesianBasis invert(const CartesianBasis &basis)
MatT from_loc_rot_scale(const typename MatT::loc_type &location, const RotationT &rotation, const VecBase< typename MatT::base_type, ScaleDim > &scale)
static void node_composit_buts_stabilize2d(uiLayout *layout, bContext *C, PointerRNA *ptr)
static NodeOperation * get_compositor_operation(Context &context, DNode node)
static void cmp_node_stabilize2d_declare(NodeDeclarationBuilder &b)
VecBase< float, 2 > float2
MatBase< float, 3, 3 > float3x3
static void register_node_type_cmp_stabilize2d()
void cmp_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
Definition DNA_ID.h:404
struct MovieClip * clip
int16_t custom1
struct ID * id
Defines a node type.
Definition BKE_node.hh:226
std::string ui_description
Definition BKE_node.hh:232
NodeGetCompositorOperationFunction get_compositor_operation
Definition BKE_node.hh:336
const char * enum_name_legacy
Definition BKE_node.hh:235
void(* draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:247
NodeDeclareFunction declare
Definition BKE_node.hh:355
void(* initfunc_api)(const bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:290
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
PointerRNA * ptr
Definition wm_files.cc:4226