[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