[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45758] branches/tile/source/blender: TileBranch
Jeroen Bakker
j.bakker at atmind.nl
Wed Apr 18 20:01:47 CEST 2012
Revision: 45758
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45758
Author: jbakker
Date: 2012-04-18 18:01:47 +0000 (Wed, 18 Apr 2012)
Log Message:
-----------
TileBranch
* Added ViewLevels (no buckets)
- Calculate Mean
- Calculate Standard deviation
* improved overall performance
- default tile size = 256
- At Mind -
Modified Paths:
--------------
branches/tile/source/blender/compositor/CMakeLists.txt
branches/tile/source/blender/compositor/intern/COM_Converter.cpp
branches/tile/source/blender/editors/space_node/node_edit.c
Added Paths:
-----------
branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.cpp
branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.h
branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.cpp
branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.h
branches/tile/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.cpp
branches/tile/source/blender/compositor/operations/COM_CalculateStandardDeviationOperation.h
Modified: branches/tile/source/blender/compositor/CMakeLists.txt
===================================================================
--- branches/tile/source/blender/compositor/CMakeLists.txt 2012-04-18 17:50:30 UTC (rev 45757)
+++ branches/tile/source/blender/compositor/CMakeLists.txt 2012-04-18 18:01:47 UTC (rev 45758)
@@ -143,6 +143,12 @@
nodes/COM_ViewerNode.h
nodes/COM_SplitViewerNode.cpp
nodes/COM_SplitViewerNode.h
+ nodes/COM_ViewLevelsNode.cpp
+ nodes/COM_ViewLevelsNode.h
+ operations/COM_CalculateStandardDeviationOperation.cpp
+ operations/COM_CalculateStandardDeviationOperation.h
+ operations/COM_CalculateMeanOperation.cpp
+ operations/COM_CalculateMeanOperation.h
# distort nodes
nodes/COM_TranslateNode.cpp
Modified: branches/tile/source/blender/compositor/intern/COM_Converter.cpp
===================================================================
--- branches/tile/source/blender/compositor/intern/COM_Converter.cpp 2012-04-18 17:50:30 UTC (rev 45757)
+++ branches/tile/source/blender/compositor/intern/COM_Converter.cpp 2012-04-18 18:01:47 UTC (rev 45758)
@@ -112,6 +112,7 @@
#include "COM_BilateralBlurNode.h"
#include "COM_VectorBlurNode.h"
#include "COM_MovieDistortionNode.h"
+#include "COM_ViewLevelsNode.h"
Node* Converter::convert(bNode *bNode) {
Node * node;
@@ -348,11 +349,13 @@
case CMP_NODE_MOVIEDISTORTION:
node = new MovieDistortionNode(bNode);
break;
+ case CMP_NODE_VIEW_LEVELS:
+ node = new ViewLevelsNode(bNode);
+ break;
/* not inplemented yet */
case CMP_NODE_DOUBLEEDGEMASK:
case CMP_NODE_DEFOCUS:
case CMP_NODE_CROP:
- case CMP_NODE_VIEW_LEVELS:
default:
node = new MuteNode(bNode);
break;
Added: branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.cpp
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.cpp (rev 0)
+++ branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.cpp 2012-04-18 18:01:47 UTC (rev 45758)
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2011, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_ViewLevelsNode.h"
+#include "DNA_scene_types.h"
+#include "COM_ExecutionSystem.h"
+#include "COM_CalculateMeanOperation.h"
+#include "COM_CalculateStandardDeviationOperation.h"
+
+ViewLevelsNode::ViewLevelsNode(bNode *editorNode): Node(editorNode) {
+}
+void ViewLevelsNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context) {
+ InputSocket * input = this->getInputSocket(0);
+ if (input->isConnected()) {
+ OutputSocket* inputSocket= input->getConnection()->getFromSocket();
+ inputSocket->clearConnections();
+ // add preview to inputSocket;
+
+ OutputSocket * socket = this->getOutputSocket(0);
+ if (socket->isConnected()) {
+ // calculate mean operation
+ CalculateMeanOperation * operation = new CalculateMeanOperation();
+ addLink(graph, inputSocket, operation->getInputSocket(0));
+ operation->setSetting(this->getbNode()->custom1);
+ socket->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+ }
+
+ socket = this->getOutputSocket(1);
+ if (socket->isConnected()) {
+ // calculate standard deviation operation
+ CalculateStandardDeviationOperation * operation = new CalculateStandardDeviationOperation();
+ addLink(graph, inputSocket, operation->getInputSocket(0));
+ operation->setSetting(this->getbNode()->custom1);
+ socket->relinkConnections(operation->getOutputSocket());
+ graph->addOperation(operation);
+ }
+ }
+}
+
Added: branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.h
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.h (rev 0)
+++ branches/tile/source/blender/compositor/nodes/COM_ViewLevelsNode.h 2012-04-18 18:01:47 UTC (rev 45758)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2011, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#ifndef _COM_ViewLevelsNode_h_
+#define _COM_ViewLevelsNode_h_
+
+#include "COM_Node.h"
+
+/**
+ * @brief ViewLevelsNode
+ * @ingroup Node
+ */
+class ViewLevelsNode: public Node {
+public:
+ ViewLevelsNode(bNode *editorNode);
+ void convertToOperations(ExecutionSystem* graph, CompositorContext * context);
+};
+
+#endif
Added: branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.cpp
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.cpp (rev 0)
+++ branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.cpp 2012-04-18 18:01:47 UTC (rev 45758)
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2011, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor:
+ * Jeroen Bakker
+ * Monique Dewanchand
+ */
+
+#include "COM_CalculateMeanOperation.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+
+
+CalculateMeanOperation::CalculateMeanOperation(): NodeOperation() {
+ this->addInputSocket(COM_DT_COLOR, COM_SC_NO_RESIZE);
+ this->addOutputSocket(COM_DT_VALUE);
+ this->imageReader = NULL;
+ this->iscalculated = false;
+ this->setting = 1;
+ this->setComplex(true);
+}
+void CalculateMeanOperation::initExecution() {
+ this->imageReader = this->getInputSocketReader(0);
+ this->iscalculated = false;
+ NodeOperation::initMutex();
+}
+
+void CalculateMeanOperation::executePixel(float* color, int x, int y, MemoryBuffer *inputBuffers[], void * data) {
+ color[0] = this->result;
+}
+
+void CalculateMeanOperation::deinitExecution() {
+ this->imageReader = NULL;
+ NodeOperation::deinitMutex();
+}
+
+bool CalculateMeanOperation::determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output) {
+ rcti imageInput;
+ if (iscalculated) {
+ return false;
+ }
+ NodeOperation* operation = getInputOperation(0);
+ imageInput.xmax = operation->getWidth();
+ imageInput.xmin = 0;
+ imageInput.ymax = operation->getHeight();
+ imageInput.ymin = 0;
+ if (operation->determineDependingAreaOfInterest(&imageInput, readOperation, output) ) {
+ return true;
+ }
+ return false;
+}
+
+void* CalculateMeanOperation::initializeTileData(rcti *rect, MemoryBuffer **memoryBuffers) {
+ BLI_mutex_lock(getMutex());
+ if (!this->iscalculated) {
+ MemoryBuffer* tile = (MemoryBuffer*)imageReader->initializeTileData(rect, memoryBuffers);
+ calculateMean(tile);
+ this->iscalculated = true;
+ }
+ BLI_mutex_unlock(getMutex());
+ return NULL;
+}
+
+void CalculateMeanOperation::calculateMean(MemoryBuffer * tile) {
+ this->result = 0.0f;
+ float* buffer = tile->getBuffer();
+ int size = tile->getWidth()*tile->getHeight();
+ int pixels = 0;
+ float sum;
+ for (int i = 0, offset = 0 ; i < size ; i ++, offset +=4) {
+ if (buffer[offset+3] > 0) {
+ pixels ++;
+
+ switch(this->setting)
+ {
+ case 1:
+ {
+ sum += buffer[offset]*0.35f + buffer[offset+1]*0.45f + buffer[offset+2]*0.2f;
+ break;
+ }
+ case 2:
+ {
+ sum+= buffer[offset];
+ break;
+ }
+ case 3:
+ {
+ sum+= buffer[offset+1];
+ break;
+ }
+ case 4:
+ {
+ sum+= buffer[offset+2];
+ break;
+ }
+ case 5:
+ {
+ float yuv[3];
+ rgb_to_yuv(buffer[0], buffer[offset+1], buffer[offset+2], &yuv[0], &yuv[1], &yuv[2]);
+ sum+=yuv[0];
+ break;
+ }
+ }
+ }
+ }
+ this->result = sum / pixels;
+}
Added: branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.h
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.h (rev 0)
+++ branches/tile/source/blender/compositor/operations/COM_CalculateMeanOperation.h 2012-04-18 18:01:47 UTC (rev 45758)
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2011, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list