Changeset View
Changeset View
Standalone View
Standalone View
source/blender/compositor/operations/COM_CalculateMeanOperation.h
| Show All 12 Lines | |||||
| * along with this program; if not, write to the Free Software Foundation, | * along with this program; if not, write to the Free Software Foundation, | ||||
| * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
| * | * | ||||
| * Copyright 2011, Blender Foundation. | * Copyright 2011, Blender Foundation. | ||||
| */ | */ | ||||
| #pragma once | #pragma once | ||||
| #include "COM_NodeOperation.h" | #include "COM_MultiThreadedOperation.h" | ||||
| #include "DNA_node_types.h" | #include "DNA_node_types.h" | ||||
| #include <functional> | |||||
| namespace blender::compositor { | namespace blender::compositor { | ||||
| /** | /** | ||||
| * \brief base class of CalculateMean, implementing the simple CalculateMean | * \brief base class of CalculateMean, implementing the simple CalculateMean | ||||
| * \ingroup operation | * \ingroup operation | ||||
| */ | */ | ||||
| class CalculateMeanOperation : public NodeOperation { | class CalculateMeanOperation : public MultiThreadedOperation { | ||||
| public: | |||||
| struct PixelsSum { | |||||
| float sum; | |||||
| int num_pixels; | |||||
| }; | |||||
| protected: | protected: | ||||
| /** | /** | ||||
| * \brief Cached reference to the reader | * \brief Cached reference to the reader | ||||
| */ | */ | ||||
| SocketReader *m_imageReader; | SocketReader *m_imageReader; | ||||
| bool m_iscalculated; | bool m_iscalculated; | ||||
| float m_result; | float m_result; | ||||
| int m_setting; | int m_setting; | ||||
| std::function<float(const float *elem)> setting_func_; | |||||
| public: | public: | ||||
| CalculateMeanOperation(); | CalculateMeanOperation(); | ||||
| /** | /** | ||||
| * The inner loop of this operation. | * The inner loop of this operation. | ||||
| */ | */ | ||||
| void executePixel(float output[4], int x, int y, void *data) override; | void executePixel(float output[4], int x, int y, void *data) override; | ||||
| /** | /** | ||||
| * Initialize the execution | * Initialize the execution | ||||
| */ | */ | ||||
| void initExecution() override; | void initExecution() override; | ||||
| void *initializeTileData(rcti *rect) override; | void *initializeTileData(rcti *rect) override; | ||||
| /** | /** | ||||
| * Deinitialize the execution | * Deinitialize the execution | ||||
| */ | */ | ||||
| void deinitExecution() override; | void deinitExecution() override; | ||||
| bool determineDependingAreaOfInterest(rcti *input, | bool determineDependingAreaOfInterest(rcti *input, | ||||
| ReadBufferOperation *readOperation, | ReadBufferOperation *readOperation, | ||||
| rcti *output) override; | rcti *output) override; | ||||
| void setSetting(int setting) | void setSetting(int setting); | ||||
| { | |||||
| this->m_setting = setting; | void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override; | ||||
| } | |||||
| virtual void update_memory_buffer_started(MemoryBuffer *output, | |||||
| const rcti &area, | |||||
| Span<MemoryBuffer *> inputs) override; | |||||
| virtual void update_memory_buffer_partial(MemoryBuffer *output, | |||||
| const rcti &area, | |||||
| Span<MemoryBuffer *> inputs) override; | |||||
| protected: | protected: | ||||
| void calculateMean(MemoryBuffer *tile); | void calculateMean(MemoryBuffer *tile); | ||||
| float calc_mean(const MemoryBuffer *input); | |||||
| private: | |||||
| PixelsSum calc_area_sum(const MemoryBuffer *input, const rcti &area); | |||||
| }; | }; | ||||
| } // namespace blender::compositor | } // namespace blender::compositor | ||||