[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49640] trunk/blender/source/blender: speedup to inpaint node in my tests was about ~30% for an optimized build.
Campbell Barton
ideasman42 at gmail.com
Tue Aug 7 11:20:30 CEST 2012
Revision: 49640
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49640
Author: campbellbarton
Date: 2012-08-07 09:20:30 +0000 (Tue, 07 Aug 2012)
Log Message:
-----------
speedup to inpaint node in my tests was about ~30% for an optimized build.
also replace MIN/MAX2 with inline functions in transform.
Modified Paths:
--------------
trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.cpp
trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.h
trunk/blender/source/blender/editors/transform/transform_conversions.c
Modified: trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.cpp 2012-08-07 07:59:48 UTC (rev 49639)
+++ trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.cpp 2012-08-07 09:20:30 UTC (rev 49640)
@@ -77,28 +77,17 @@
}
}
-float InpaintSimpleOperation::get(int x, int y, int component)
+float *InpaintSimpleOperation::get_pixel(int x, int y)
{
int width = this->getWidth();
ASSERT_XY_RANGE(x, y);
- return this->m_cached_buffer[
+ return &this->m_cached_buffer[
y * width * COM_NUMBER_OF_CHANNELS
- + x * COM_NUMBER_OF_CHANNELS + component];
+ + x * COM_NUMBER_OF_CHANNELS];
}
-void InpaintSimpleOperation::set(int x, int y, int component, float v)
-{
- int width = this->getWidth();
-
- ASSERT_XY_RANGE(x, y);
-
- this->m_cached_buffer[
- y * width * COM_NUMBER_OF_CHANNELS
- + x * COM_NUMBER_OF_CHANNELS + component] = v;
-}
-
int InpaintSimpleOperation::mdist(int x, int y)
{
int width = this->getWidth();
@@ -141,7 +130,7 @@
for (int i = 0; i < width; i++) {
int r = 0;
/* no need to clamp here */
- if (get(i, j, 3) < 1.0f) {
+ if (this->get_pixel(i, j)[3] < 1.0f) {
r = width + height;
if (i > 0)
r = mini(r, m[j * width + i - 1] + 1);
@@ -197,10 +186,11 @@
for (int dy = -1; dy <= 1; dy++) {
if (dx != 0 && dy != 0) {
- int x_ofs = x + dx;
+ int x_ofs = x + dx;
int y_ofs = y + dy;
- clamp_xy(x_ofs, y_ofs);
+ this->clamp_xy(x_ofs, y_ofs);
+
if (this->mdist(x_ofs, y_ofs) < d) {
float weight;
@@ -212,20 +202,14 @@
weight = M_SQRT1_2; /* 1.0f / sqrt(2) */
}
- for (int c = 0; c < 3; c++) {
- float fk = this->get(x_ofs, y_ofs, c);
-
- pix[c] += fk * weight;
- }
+ madd_v3_v3fl(pix, this->get_pixel(x_ofs, y_ofs), weight);
n += weight;
}
}
}
}
- for (int c = 0; c < 3; c++) {
- this->set(x, y, c, pix[c] / n);
- }
+ mul_v3_v3fl(this->get_pixel(x, y), pix, 1.0f / n);
}
void *InpaintSimpleOperation::initializeTileData(rcti *rect)
@@ -258,10 +242,8 @@
void InpaintSimpleOperation::executePixel(float *color, int x, int y, void *data)
{
- clamp_xy(x, y);
- for (int c = 0; c < 3; c++) {
- color[c] = get(x, y, c);
- }
+ this->clamp_xy(x, y);
+ copy_v3_v3(color, this->get_pixel(x, y));
color[3] = 1.0f;
}
Modified: trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.h 2012-08-07 07:59:48 UTC (rev 49639)
+++ trunk/blender/source/blender/compositor/operations/COM_InpaintOperation.h 2012-08-07 09:20:30 UTC (rev 49640)
@@ -64,11 +64,10 @@
private:
void calc_manhatten_distance();
- void clamp_xy(int & x, int & y);
- float get(int x, int y, int component);
- void set(int x, int y, int component, float v);
+ void clamp_xy(int &x, int &y);
+ float *get_pixel(int x, int y);
int mdist(int x, int y);
- bool next_pixel(int & x, int & y, int & curr, int iters);
+ bool next_pixel(int &x, int &y, int &curr, int iters);
void pix_step(int x, int y);
};
Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c 2012-08-07 07:59:48 UTC (rev 49639)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c 2012-08-07 09:20:30 UTC (rev 49640)
@@ -2509,8 +2509,8 @@
if ((td->flag & TD_SKIP) || (!td->loc))
continue;
- td->loc[0] = MIN2(MAX2(0.0f, td->loc[0]), aspx);
- td->loc[1] = MIN2(MAX2(0.0f, td->loc[1]), aspy);
+ td->loc[0] = minf(maxf(0.0f, td->loc[0]), aspx);
+ td->loc[1] = minf(maxf(0.0f, td->loc[1]), aspy);
}
}
@@ -4258,7 +4258,7 @@
for (a = 0; a < t->total; a++, td++) {
seq = ((TransDataSeq *)td->extra)->seq;
if ((seq != seq_prev)) {
- minframe = MIN2(minframe, seq->startdisp);
+ minframe = mini(minframe, seq->startdisp);
}
}
More information about the Bf-blender-cvs
mailing list