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);
                                                        }
                                                }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to