Blender V4.3
COM_ConvertColorSpaceNode.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7#include "BKE_node.hh"
8
9#include "BLI_utildefines.h"
10
13#include "COM_ExecutionSystem.h"
14#include "COM_ImageOperation.h"
16
17#include "CLG_log.h"
18
19static CLG_LogRef LOG = {"compositor"};
20
21namespace blender::compositor {
22
24{
25 /* pass */
26}
27
29 const CompositorContext & /*context*/) const
30{
31 const bNode *b_node = get_bnode();
32
33 NodeInput *inputSocketImage = this->get_input_socket(0);
34 NodeOutput *outputSocketImage = this->get_output_socket(0);
35
36 NodeConvertColorSpace *settings = static_cast<NodeConvertColorSpace *>(b_node->storage);
37
38 if (!performs_conversion(*settings)) {
40 converter.add_input_proxy(get_input_socket(0), false));
41 return;
42 }
43
45 operation->set_settings((NodeConvertColorSpace *)b_node->storage);
46 converter.add_operation(operation);
47
48 converter.map_input_socket(inputSocketImage, operation->get_input_socket(0));
49 converter.map_output_socket(outputSocketImage, operation->get_output_socket());
50}
51
52bool ConvertColorSpaceNode::performs_conversion(NodeConvertColorSpace &settings) const
53{
54 const bNode *b_node = get_bnode();
55
56 if (IMB_colormanagement_space_name_is_data(settings.from_color_space)) {
58 2,
59 "Color space conversion bypassed for node: %s. From color space is data: %s.",
60 b_node->name,
61 settings.from_color_space);
62 return false;
63 }
64
65 if (IMB_colormanagement_space_name_is_data(settings.to_color_space)) {
67 2,
68 "Color space conversion bypassed for node: %s. To color space is data: %s.",
69 b_node->name,
70 settings.to_color_space);
71 return false;
72 }
73
74 if (STREQLEN(
75 settings.from_color_space, settings.to_color_space, sizeof(settings.from_color_space)))
76 {
78 2,
79 "Color space conversion bypassed for node: %s. To and from are the same: %s.",
80 b_node->name,
81 settings.from_color_space);
82 return false;
83 }
84 return true;
85}
86
87} // namespace blender::compositor
#define STREQLEN(a, b, n)
#define CLOG_INFO(clg_ref, level,...)
Definition CLG_log.h:179
static CLG_LogRef LOG
bool IMB_colormanagement_space_name_is_data(const char *name)
Overall context of the compositor.
void convert_to_operations(NodeConverter &converter, const CompositorContext &context) const override
convert node to operation
void set_settings(NodeConvertColorSpace *node_color_space)
void map_output_socket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
NodeOperationOutput * add_input_proxy(NodeInput *input, bool use_conversion)
void add_operation(NodeOperation *operation)
void map_input_socket(NodeInput *node_socket, NodeOperationInput *operation_socket)
NodeInput are sockets that can receive data/input.
Definition COM_Node.h:191
NodeOperationOutput * get_output_socket(unsigned int index=0)
NodeOperationInput * get_input_socket(unsigned int index)
NodeOutput are sockets that can send data/input.
Definition COM_Node.h:239
NodeOutput * get_output_socket(unsigned int index=0) const
Definition COM_Node.cc:85
NodeInput * get_input_socket(unsigned int index) const
Definition COM_Node.cc:90
const bNode * get_bnode() const
get the reference to the SDNA bNode struct
Definition COM_Node.h:65
#define LOG(severity)
Definition log.h:33
char name[64]
void * storage