Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > 6d8e28e363a097fb9758fe8fff2f78a8 > files > 13

blender-2.49b-10.1.mga1.src.rpm

--- blender-2.48a/source/blender/blenkernel/intern/node.c.deinterlace	2008-09-11 12:17:17.000000000 +0200
+++ blender-2.48a/source/blender/blenkernel/intern/node.c	2009-01-21 19:26:00.000000000 +0100
@@ -2680,6 +2680,7 @@
 	nodeRegisterType(ntypelist, &cmp_node_vecblur);
 	nodeRegisterType(ntypelist, &cmp_node_dilateerode);
 	nodeRegisterType(ntypelist, &cmp_node_defocus);
+	nodeRegisterType(ntypelist, &cmp_node_deinterlace);
 	
 	nodeRegisterType(ntypelist, &cmp_node_valtorgb);
 	nodeRegisterType(ntypelist, &cmp_node_rgbtobw);
--- blender-2.48a/source/blender/blenkernel/BKE_node.h.deinterlace	2008-09-04 22:51:28.000000000 +0200
+++ blender-2.48a/source/blender/blenkernel/BKE_node.h	2009-01-21 19:26:00.000000000 +0100
@@ -338,6 +338,7 @@
 #define CMP_NODE_DBLUR		254
 #define CMP_NODE_BILATERALBLUR  255
 #define CMP_NODE_PREMULKEY  256
+#define CMP_NODE_DEINTERLACE	257
 
 #define CMP_NODE_GLARE		301
 #define CMP_NODE_TONEMAP	302
--- blender-2.48a/source/blender/nodes/CMP_node.h.deinterlace	2008-03-11 15:40:27.000000000 +0100
+++ blender-2.48a/source/blender/nodes/CMP_node.h	2009-01-21 19:26:00.000000000 +0100
@@ -71,6 +71,7 @@
 extern bNodeType cmp_node_vecblur;
 extern bNodeType cmp_node_dilateerode;
 extern bNodeType cmp_node_defocus;
+extern bNodeType cmp_node_deinterlace;
 
 extern bNodeType cmp_node_valtorgb;
 extern bNodeType cmp_node_rgbtobw;	
--- blender-2.48a/source/blender/nodes/intern/CMP_nodes/CMP_deinterlace.c.deinterlace	2009-01-21 19:26:00.000000000 +0100
+++ blender-2.48a/source/blender/nodes/intern/CMP_nodes/CMP_deinterlace.c	2009-01-21 19:26:00.000000000 +0100
@@ -0,0 +1,148 @@
+/**
+* $Id: CMP_deinterlace.c 10516 2007-04-13 04:22:32Z scourage $
+*
+* ***** BEGIN GPL LICENSE BLOCK *****
+*
+* 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+* 
+* The Original Code is Copyright (C) 2006 Blender Foundation.
+* All rights reserved.
+* 
+* The Original Code is: all of this file.
+* 
+* Contributor(s): none yet.
+* 
+* ***** END GPL LICENSE BLOCK *****
+
+*/
+
+#include "../CMP_util.h"
+
+
+/* **************** Deinterlace Tools  ******************** */
+  
+static bNodeSocketType cmp_node_deinterlace_in[]= {
+	{	SOCK_RGBA, 1, "Image",		0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+    {	-1, 0, ""	}
+};
+static bNodeSocketType cmp_node_deinterlace_out[]= {
+	{	SOCK_RGBA, 0, "Image",			0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+	{	-1, 0, ""	}
+};
+
+static void do_deinterlace(bNode *node,CompBuf *stackbuf, CompBuf *cbuf,float *vec)
+{
+	int x, y, sx, sy;
+	float *out= stackbuf->rect;
+	float *ytop,*ybot,*current;
+	int dyn,dyp;
+
+	
+	sx=cbuf->x;
+	sy=cbuf->y;
+
+	for (y=0; y < sy; y++) {
+		for (x=0; x < sx; x++,out+=stackbuf->type) {
+			current = compbuf_get_pixel(cbuf, vec,x-cbuf->xrad,y-cbuf->yrad, cbuf->xrad, cbuf->yrad);
+			//check corners and sides
+			if (y == 0) dyn = 1;
+			else dyn = -1;
+			if (y == sy-1) dyp = -1;
+			else dyp = 1;
+
+				ytop = compbuf_get_pixel(cbuf, vec,x-cbuf->xrad,y+dyp-cbuf->yrad, cbuf->xrad, cbuf->yrad);
+				ybot = compbuf_get_pixel(cbuf, vec,x-cbuf->xrad,y+dyn-cbuf->yrad, cbuf->xrad, cbuf->yrad);
+			
+			
+				switch(node->custom1)
+	
+				{
+	
+				case 0: /*remove even rows */
+					//if row is even
+					if(y%2 ==0) 
+					{
+					//average the 2 rows		
+						out[0] = (ytop[0]+ybot[0])/2;
+						out[1] = (ytop[1]+ybot[1])/2;
+						out[2] = (ytop[2]+ybot[2])/2;
+						out[3] = 1;
+					}
+					else {
+						out[0] = current[0];
+						out[1] = current[1];
+						out[2] = current[2];
+						out[3] = 1;
+					}
+					break; 
+					case 1: /*remove Odd rows */
+					if(y%2 ==1) 
+					{
+					//average the 2 rows		
+						out[0] = (ytop[0]+ybot[0])/2;
+						out[1] = (ytop[1]+ybot[1])/2;
+						out[2] = (ytop[2]+ybot[2])/2;
+						out[3] = 1;
+					}
+					else {
+						out[0] = current[0];
+						out[1] = current[1];
+						out[2] = current[2];
+						out[3] = 1;
+					}
+					break; 
+				}
+		}
+	}
+}
+static void node_composit_exec_deinterlace(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+	if(in[0]->data) 
+	{		
+		/* make output size of input image */
+		CompBuf *cbuf= in[0]->data;
+		CompBuf *stackbuf;
+				
+		cbuf= typecheck_compbuf(cbuf, CB_RGBA);
+
+		// allocs
+		stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1);
+	
+		do_deinterlace(node,stackbuf,cbuf,in[0]->vec);
+	
+		out[0]->data= stackbuf;
+			
+		if(cbuf!=in[0]->data)
+			free_compbuf(cbuf);
+	}
+}
+
+bNodeType cmp_node_deinterlace= {
+	/* *next,*prev */	NULL, NULL,
+	/* type code   */	CMP_NODE_DEINTERLACE,
+	/* name        */	"Deinterlace",
+	/* width+range */	140, 100, 320,
+	/* class+opts  */	NODE_CLASS_OP_FILTER, NODE_OPTIONS,
+	/* input sock  */	cmp_node_deinterlace_in,
+	/* output sock */	cmp_node_deinterlace_out,
+	/* storage     */	"",
+	/* execfunc    */	node_composit_exec_deinterlace,	
+        /* butfunc     */       NULL,
+        /* initfunc    */       NULL,
+        /* freestoragefunc      */ NULL,
+        /* copysotragefunc      */ NULL,
+        /* id          */       NULL
+};
+
--- blender-2.48a/source/blender/src/drawnode.c.deinterlace	2008-10-12 02:59:58.000000000 +0200
+++ blender-2.48a/source/blender/src/drawnode.c	2009-01-21 19:26:00.000000000 +0100
@@ -527,6 +527,17 @@
 	return 20; 
 }
 
+static int node_composite_buts_deinterlace(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+{
+	if(block) {
+		uiBut *bt;
+
+		bt=uiDefButS(block, MENU, B_NODE_EXEC,  "Even rows %x0|Odd rows %x1", butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, &node->custom1, 0, 0, 0, 0, ""); 
+		uiButSetFunc(bt, node_but_title_cb, node, bt); 
+	} 
+	return 20; 
+}
+
 
 /* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */
 
@@ -2178,6 +2189,9 @@
 		case CMP_NODE_PREMULKEY:
 			ntype->butfunc= node_composit_buts_premulkey;
 			break;
+		case CMP_NODE_DEINTERLACE:
+			ntype->butfunc= node_composite_buts_deinterlace;
+			break;
 		default:
 			ntype->butfunc= NULL;
 	}