[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