[Bf-blender-cvs] [28502f22398] compositor-full-frame: Make Track Position a constant operation
Manuel Castilla
noreply at git.blender.org
Mon Aug 2 23:12:20 CEST 2021
Commit: 28502f2239838576713098a9c1b3d5a8a49dbdb5
Author: Manuel Castilla
Date: Mon Aug 2 17:45:26 2021 +0200
Branches: compositor-full-frame
https://developer.blender.org/rB28502f2239838576713098a9c1b3d5a8a49dbdb5
Make Track Position a constant operation
===================================================================
M source/blender/compositor/operations/COM_TrackPositionOperation.cc
M source/blender/compositor/operations/COM_TrackPositionOperation.h
===================================================================
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.cc b/source/blender/compositor/operations/COM_TrackPositionOperation.cc
index 1d24cba0a97..0f4be16a620 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.cc
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.cc
@@ -42,16 +42,24 @@ TrackPositionOperation::TrackPositionOperation()
this->m_relativeFrame = 0;
this->m_speed_output = false;
flags.is_set_operation = true;
- flags.is_fullframe_operation = true;
- flags.can_be_constant = true;
+ is_track_position_calculated_ = false;
}
void TrackPositionOperation::initExecution()
{
+ if (!is_track_position_calculated_) {
+ calc_track_position();
+ }
+}
+
+void TrackPositionOperation::calc_track_position()
+{
+ is_track_position_calculated_ = true;
MovieTracking *tracking = nullptr;
MovieClipUser user = {0};
MovieTrackingObject *object;
+ track_position_ = 0;
zero_v2(this->m_markerPos);
zero_v2(this->m_relativePos);
@@ -116,6 +124,14 @@ void TrackPositionOperation::initExecution()
}
}
}
+
+ track_position_ = this->m_markerPos[this->m_axis] - this->m_relativePos[this->m_axis];
+ if (this->m_axis == 0) {
+ track_position_ *= this->m_width;
+ }
+ else {
+ track_position_ *= this->m_height;
+ }
}
void TrackPositionOperation::executePixelSampled(float output[4],
@@ -133,21 +149,12 @@ void TrackPositionOperation::executePixelSampled(float output[4],
}
}
-void TrackPositionOperation::update_memory_buffer(MemoryBuffer *output,
- const rcti &area,
- Span<MemoryBuffer *> UNUSED(inputs))
+const float *TrackPositionOperation::get_constant_elem()
{
- /* Should always be folded into a constant operation because there are no inputs and
- * can_be_constant flag is enabled. */
- BLI_assert(BLI_rcti_size_x(&area) == 1 && BLI_rcti_size_y(&area) == 1);
- float *out = output->get_elem(area.xmin, area.ymin);
- out[0] = this->m_markerPos[this->m_axis] - this->m_relativePos[this->m_axis];
- if (this->m_axis == 0) {
- out[0] *= this->m_width;
- }
- else {
- out[0] *= this->m_height;
+ if (!is_track_position_calculated_) {
+ calc_track_position();
}
+ return &track_position_;
}
void TrackPositionOperation::determineResolution(unsigned int resolution[2],
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.h b/source/blender/compositor/operations/COM_TrackPositionOperation.h
index 6916b5cbbff..f716bd97737 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.h
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.h
@@ -20,7 +20,7 @@
#include <string.h>
-#include "COM_NodeOperation.h"
+#include "COM_ConstantOperation.h"
#include "DNA_movieclip_types.h"
#include "DNA_tracking_types.h"
@@ -33,7 +33,7 @@ namespace blender::compositor {
/**
* Class with implementation of green screen gradient rasterization
*/
-class TrackPositionOperation : public NodeOperation {
+class TrackPositionOperation : public ConstantOperation {
protected:
MovieClip *m_movieClip;
int m_framenumber;
@@ -47,6 +47,8 @@ class TrackPositionOperation : public NodeOperation {
int m_width, m_height;
float m_markerPos[2];
float m_relativePos[2];
+ float track_position_;
+ bool is_track_position_calculated_;
/**
* Determine the output resolution. The resolution is retrieved from the Renderer
@@ -94,9 +96,10 @@ class TrackPositionOperation : public NodeOperation {
void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override;
- void update_memory_buffer(MemoryBuffer *output,
- const rcti &area,
- Span<MemoryBuffer *> inputs) override;
+ const float *get_constant_elem() override;
+
+ private:
+ void calc_track_position();
};
} // namespace blender::compositor
More information about the Bf-blender-cvs
mailing list