diff options
-rw-r--r-- | source/blender/compositor/operations/COM_MovieDistortionOperation.h | 81 |
1 files changed, 30 insertions, 51 deletions
diff --git a/source/blender/compositor/operations/COM_MovieDistortionOperation.h b/source/blender/compositor/operations/COM_MovieDistortionOperation.h index 85f075ab65a..38b1dbfa856 100644 --- a/source/blender/compositor/operations/COM_MovieDistortionOperation.h +++ b/source/blender/compositor/operations/COM_MovieDistortionOperation.h @@ -47,11 +47,9 @@ private: int m_calibration_width; int m_calibration_height; bool m_inverted; - float *m_buffer; - int *m_bufferCalculated; double timeLastUsage; int m_margin[2]; - + public: DistortionCache(MovieClip *movieclip, int width, int height, @@ -73,28 +71,14 @@ public: this->m_calibration_width = calibration_width; this->m_calibration_height = calibration_height; this->m_inverted = inverted; - this->m_bufferCalculated = (int *)MEM_callocN(sizeof(int) * this->m_width * this->m_height, __func__); - this->m_buffer = (float *)MEM_mallocN(sizeof(float) * this->m_width * this->m_height * 2, __func__); copy_v2_v2_int(this->m_margin, margin); this->updateLastUsage(); } - - ~DistortionCache() { - if (this->m_buffer) { - MEM_freeN(this->m_buffer); - this->m_buffer = NULL; - } - - if (this->m_bufferCalculated) { - MEM_freeN(this->m_bufferCalculated); - this->m_bufferCalculated = NULL; - } - } - + void updateLastUsage() { this->timeLastUsage = PIL_check_seconds_timer(); } - + inline double getTimeLastUsage() { return this->timeLastUsage; } @@ -119,43 +103,38 @@ public: this->m_calibration_width == calibration_width && this->m_calibration_height == claibration_height; } - - void getUV(MovieTracking *trackingData, int x, int y, float *u, float *v) + + void getUV(MovieTracking *trackingData, + float x, + float y, + float *r_u, + float *r_v) { if (x < 0 || x >= this->m_width || y < 0 || y >= this->m_height) { - *u = x; - *v = y; + *r_u = x; + *r_v = y; } else { - int offset = y * this->m_width + x; - int offset2 = offset * 2; - - if (!this->m_bufferCalculated[offset]) { - //float overscan = 0.0f; - const float w = (float)this->m_width /* / (1 + overscan) */; - const float h = (float)this->m_height /* / (1 + overscan) */; - const float aspx = w / (float)this->m_calibration_width; - const float aspy = h / (float)this->m_calibration_height; - float in[2]; - float out[2]; - - in[0] = (x /* - 0.5 * overscan * w */) / aspx; - in[1] = (y /* - 0.5 * overscan * h */) / aspy / this->m_pixel_aspect; - - if (this->m_inverted) { - BKE_tracking_undistort_v2(trackingData, in, out); - } - else { - BKE_tracking_distort_v2(trackingData, in, out); - } - - this->m_buffer[offset2] = out[0] * aspx /* + 0.5 * overscan * w */; - this->m_buffer[offset2 + 1] = (out[1] * aspy /* + 0.5 * overscan * h */) * this->m_pixel_aspect; - - this->m_bufferCalculated[offset] = 1; + /* float overscan = 0.0f; */ + const float w = (float)this->m_width /* / (1 + overscan) */; + const float h = (float)this->m_height /* / (1 + overscan) */; + const float aspx = w / (float)this->m_calibration_width; + const float aspy = h / (float)this->m_calibration_height; + float in[2]; + float out[2]; + + in[0] = (x /* - 0.5 * overscan * w */) / aspx; + in[1] = (y /* - 0.5 * overscan * h */) / aspy / this->m_pixel_aspect; + + if (this->m_inverted) { + BKE_tracking_undistort_v2(trackingData, in, out); + } + else { + BKE_tracking_distort_v2(trackingData, in, out); } - *u = this->m_buffer[offset2]; - *v = this->m_buffer[offset2 + 1]; + + *r_u = out[0] * aspx /* + 0.5 * overscan * w */; + *r_v = (out[1] * aspy /* + 0.5 * overscan * h */) * this->m_pixel_aspect; } } |