Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-06-25 22:01:01 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-06-25 22:01:01 +0400
commitfa0c5a100da6afe58462709f2b3acf0f870112cb (patch)
tree498ceeac763d72dac8b39f86c823188f79c9cd4d /source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
parent6badc77cb0de84286db9b0df365ff4e2c85ec7b9 (diff)
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.
Diffstat (limited to 'source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp')
-rw-r--r--source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp b/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
index 7a1964a4a63..51a71b90923 100644
--- a/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
+++ b/source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
@@ -31,15 +31,16 @@ GaussianXBlurOperation::GaussianXBlurOperation() : BlurBaseOperation(COM_DT_COLO
{
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 @@ void GaussianXBlurOperation::initExecution()
{
BlurBaseOperation::initExecution();
+ initMutex();
+
if (this->sizeavailable) {
float rad = size * this->data->sizex;
if (rad < 1)
@@ -66,8 +69,8 @@ void GaussianXBlurOperation::updateGauss(MemoryBuffer **memoryBuffers)
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 @@ void GaussianXBlurOperation::deinitExecution()
BlurBaseOperation::deinitExecution();
delete [] this->gausstab;
this->gausstab = NULL;
+
+ deinitMutex();
}
bool GaussianXBlurOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output)