Revision: 48283
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48283
Author:   campbellbarton
Date:     2012-06-25 18:01:01 +0000 (Mon, 25 Jun 2012)
Log Message:
-----------
fix for crash with blur - happened most when there was a size input, need to 
mutex lock before allocating the gauss array.

also add suspiciously missing call to BlurBaseOperation::initExecution, X had 
but Y was missing.

Modified Paths:
--------------
    
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaXBlurOperation.cpp
    
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaYBlurOperation.cpp
    
trunk/blender/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
    
trunk/blender/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
    
trunk/blender/source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp

Modified: 
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaXBlurOperation.cpp
===================================================================
--- 
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaXBlurOperation.cpp
      2012-06-25 17:29:23 UTC (rev 48282)
+++ 
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaXBlurOperation.cpp
      2012-06-25 18:01:01 UTC (rev 48283)
@@ -36,10 +36,12 @@
 
 void *GaussianAlphaXBlurOperation::initializeTileData(rcti *rect, MemoryBuffer 
**memoryBuffers)
 {
+       lockMutex();
        if (!this->sizeavailable) {
                updateGauss(memoryBuffers);
        }
        void *buffer = getInputOperation(0)->initializeTileData(NULL, 
memoryBuffers);
+       unlockMutex();
        return buffer;
 }
 
@@ -47,6 +49,8 @@
 {
        /* BlurBaseOperation::initExecution(); */ /* until we suppoer size 
input - comment this */
 
+       initMutex();
+
        if (this->sizeavailable) {
                float rad = size * this->data->sizex;
                if (rad < 1)
@@ -154,6 +158,8 @@
        this->gausstab = NULL;
        delete [] this->distbuf_inv;
        this->distbuf_inv = NULL;
+
+       deinitMutex();
 }
 
 bool GaussianAlphaXBlurOperation::determineDependingAreaOfInterest(rcti 
*input, ReadBufferOperation *readOperation, rcti *output)

Modified: 
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaYBlurOperation.cpp
===================================================================
--- 
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaYBlurOperation.cpp
      2012-06-25 17:29:23 UTC (rev 48282)
+++ 
trunk/blender/source/blender/compositor/operations/COM_GaussianAlphaYBlurOperation.cpp
      2012-06-25 18:01:01 UTC (rev 48283)
@@ -36,10 +36,12 @@
 
 void *GaussianAlphaYBlurOperation::initializeTileData(rcti *rect, MemoryBuffer 
**memoryBuffers)
 {
+       lockMutex();
        if (!this->sizeavailable) {
                updateGauss(memoryBuffers);
        }
        void *buffer = getInputOperation(0)->initializeTileData(NULL, 
memoryBuffers);
+       unlockMutex();
        return buffer;
 }
 
@@ -47,6 +49,8 @@
 {
        /* BlurBaseOperation::initExecution(); */ /* until we suppoer size 
input - comment this */
 
+       initMutex();
+
        if (this->sizeavailable) {
                float rad = size * this->data->sizey;
                if (rad < 1)
@@ -65,7 +69,7 @@
                float rad = size * this->data->sizey;
                if (rad < 1)
                        rad = 1;
-               
+
                this->rad = rad;
                this->gausstab = BlurBaseOperation::make_gausstab(rad);
        }
@@ -154,6 +158,8 @@
        this->gausstab = NULL;
        delete [] this->distbuf_inv;
        this->distbuf_inv = NULL;
+
+       deinitMutex();
 }
 
 bool GaussianAlphaYBlurOperation::determineDependingAreaOfInterest(rcti 
*input, ReadBufferOperation *readOperation, rcti *output)

Modified: 
trunk/blender/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
===================================================================
--- 
trunk/blender/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
       2012-06-25 17:29:23 UTC (rev 48282)
+++ 
trunk/blender/source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
       2012-06-25 18:01:01 UTC (rev 48283)
@@ -34,10 +34,12 @@
 
 void *GaussianBokehBlurOperation::initializeTileData(rcti *rect, MemoryBuffer 
**memoryBuffers)
 {
+       lockMutex();
        if (!sizeavailable) {
                updateGauss(memoryBuffers);
        }
        void *buffer = getInputOperation(0)->initializeTileData(NULL, 
memoryBuffers);
+       unlockMutex();
        return buffer;
 }
 
@@ -45,6 +47,8 @@
 {
        BlurBaseOperation::initExecution();
 
+       initMutex();
+
        if (this->sizeavailable) {
                updateGauss(NULL);
        }
@@ -154,6 +158,8 @@
        BlurBaseOperation::deinitExecution();
        delete [] this->gausstab;
        this->gausstab = NULL;
+
+       deinitMutex();
 }
 
 bool GaussianBokehBlurOperation::determineDependingAreaOfInterest(rcti *input, 
ReadBufferOperation *readOperation, rcti *output)

Modified: 
trunk/blender/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
===================================================================
--- 
trunk/blender/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
   2012-06-25 17:29:23 UTC (rev 48282)
+++ 
trunk/blender/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
   2012-06-25 18:01:01 UTC (rev 48283)
@@ -31,15 +31,16 @@
 {
        this->gausstab = NULL;
        this->rad = 0;
-
 }
 
 void *GaussianXBlurOperation::initializeTileData(rcti *rect, MemoryBuffer 
**memoryBuffers)
 {
+       lockMutex();
        if (!this->sizeavailable) {
                updateGauss(memoryBuffers);
        }
        void *buffer = getInputOperation(0)->initializeTileData(NULL, 
memoryBuffers);
+       unlockMutex();
        return buffer;
 }
 
@@ -47,6 +48,8 @@
 {
        BlurBaseOperation::initExecution();
 
+       initMutex();
+
        if (this->sizeavailable) {
                float rad = size * this->data->sizex;
                if (rad < 1)
@@ -66,8 +69,8 @@
                        rad = 1;
 
                this->rad = rad;
-               this->gausstab = BlurBaseOperation::make_gausstab(rad); 
-       }       
+               this->gausstab = BlurBaseOperation::make_gausstab(rad);
+       }
 }
 
 void GaussianXBlurOperation::executePixel(float *color, int x, int y, 
MemoryBuffer *inputBuffers[], void *data)
@@ -108,6 +111,8 @@
        BlurBaseOperation::deinitExecution();
        delete [] this->gausstab;
        this->gausstab = NULL;
+
+       deinitMutex();
 }
 
 bool GaussianXBlurOperation::determineDependingAreaOfInterest(rcti *input, 
ReadBufferOperation *readOperation, rcti *output)

Modified: 
trunk/blender/source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp
===================================================================
--- 
trunk/blender/source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp
   2012-06-25 17:29:23 UTC (rev 48282)
+++ 
trunk/blender/source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp
   2012-06-25 18:01:01 UTC (rev 48283)
@@ -35,15 +35,21 @@
 
 void *GaussianYBlurOperation::initializeTileData(rcti *rect, MemoryBuffer 
**memoryBuffers)
 {
+       lockMutex();
        if (!this->sizeavailable) {
                updateGauss(memoryBuffers);
        }
        void *buffer = getInputOperation(0)->initializeTileData(NULL, 
memoryBuffers);
+       unlockMutex();
        return buffer;
 }
 
 void GaussianYBlurOperation::initExecution()
 {
+       BlurBaseOperation::initExecution();
+
+       initMutex();
+
        if (this->sizeavailable) {
                float rad = size * this->data->sizey;
                if (rad < 1)
@@ -61,7 +67,7 @@
                float rad = size * this->data->sizey;
                if (rad < 1)
                        rad = 1;
-               
+
                this->rad = rad;
                this->gausstab = BlurBaseOperation::make_gausstab(rad);
        }
@@ -86,8 +92,8 @@
        maxy = min(maxy, inputBuffer->getRect()->ymax);
        maxx = min(maxx, inputBuffer->getRect()->xmax);
 
+       int index;
        int step = getStep();
-       int index;
        for (int ny = miny; ny < maxy; ny += step) {
                index = (ny - y) + this->rad;
                int bufferindex = ((minx - bufferstartx) * 4) + ((ny - 
bufferstarty) * 4 * bufferwidth);
@@ -103,6 +109,8 @@
        BlurBaseOperation::deinitExecution();
        delete [] this->gausstab;
        this->gausstab = NULL;
+
+       deinitMutex();
 }
 
 bool GaussianYBlurOperation::determineDependingAreaOfInterest(rcti *input, 
ReadBufferOperation *readOperation, rcti *output)

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

Reply via email to