[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17521] branches/etch-a-ton: merging trunk 17485:17520

Martin Poirier theeth at yahoo.com
Thu Nov 20 22:57:22 CET 2008


Revision: 17521
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17521
Author:   theeth
Date:     2008-11-20 22:57:21 +0100 (Thu, 20 Nov 2008)

Log Message:
-----------
merging trunk 17485:17520

Modified Paths:
--------------
    branches/etch-a-ton/SConstruct
    branches/etch-a-ton/config/darwin-config.py
    branches/etch-a-ton/config/linux2-config.py
    branches/etch-a-ton/config/openbsd3-config.py
    branches/etch-a-ton/config/sunos5-config.py
    branches/etch-a-ton/config/win32-vc-config.py
    branches/etch-a-ton/source/blender/imbuf/IMB_imbuf.h
    branches/etch-a-ton/source/blender/imbuf/intern/imageprocess.c
    branches/etch-a-ton/source/blender/src/buttons_editing.c
    branches/etch-a-ton/source/blender/src/seqeffects.c
    branches/etch-a-ton/tools/Blender.py
    branches/etch-a-ton/tools/btools.py

Modified: branches/etch-a-ton/SConstruct
===================================================================
--- branches/etch-a-ton/SConstruct	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/SConstruct	2008-11-20 21:57:21 UTC (rev 17521)
@@ -249,7 +249,7 @@
 # remove stdc++ from LLIBS if we are building a statc linked CXXFLAGS
 if env['WITH_BF_STATICCXX']:
 	if 'stdc++' in env['LLIBS']:
-		env['LLIBS'] = env['LLIBS'].replace('stdc++', ' ')
+		env['LLIBS'].remove('stdc++')
 	else:
 		print '\tcould not remove stdc++ library from LLIBS, WITH_BF_STATICCXX may not work for your platform'
 

Modified: branches/etch-a-ton/config/darwin-config.py
===================================================================
--- branches/etch-a-ton/config/darwin-config.py	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/config/darwin-config.py	2008-11-20 21:57:21 UTC (rev 17521)
@@ -216,14 +216,14 @@
 PLATFORM_LINKFLAGS = '-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Carbon -framework AGL -framework AudioUnit -framework AudioToolbox -framework CoreAudio -framework QuickTime'
 
 #note to build succesfully on 10.3.9 SDK you need to patch  10.3.9 by adding the SystemStubs.a lib from 10.4
-LLIBS = 'stdc++ SystemStubs'
+LLIBS = ['stdc++', 'SystemStubs']
 
 # some flags shuffling for different Os versions
 if MAC_MIN_VERS == '10.3':
 	CFLAGS = ['-fuse-cxa-atexit']+CFLAGS
 	CXXFLAGS = ['-fuse-cxa-atexit']+CXXFLAGS
 	PLATFORM_LINKFLAGS = '-fuse-cxa-atexit '+PLATFORM_LINKFLAGS
-	LLIBS = LLIBS + ' crt3.o'
+	LLIBS.append('crt3.o')
 	
 if USE_SDK==True:
 	SDK_FLAGS=['-isysroot', MACOSX_SDK,'-mmacosx-version-min='+MAC_MIN_VERS]	

Modified: branches/etch-a-ton/config/linux2-config.py
===================================================================
--- branches/etch-a-ton/config/linux2-config.py	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/config/linux2-config.py	2008-11-20 21:57:21 UTC (rev 17521)
@@ -193,7 +193,7 @@
 
 ##FIX_STUBS_WARNINGS = -Wno-unused
 
-LLIBS = 'util c m dl pthread stdc++'
+LLIBS = ['util', 'c', 'm', 'dl', 'pthread', 'stdc++']
 ##LOPTS = --dynamic
 ##DYNLDFLAGS = -shared $(LDFLAGS)
 

Modified: branches/etch-a-ton/config/openbsd3-config.py
===================================================================
--- branches/etch-a-ton/config/openbsd3-config.py	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/config/openbsd3-config.py	2008-11-20 21:57:21 UTC (rev 17521)
@@ -151,7 +151,7 @@
 
 ##FIX_STUBS_WARNINGS = -Wno-unused
 
-LLIBS = 'm stdc++ pthread util'
+LLIBS = ['m', 'stdc++', 'pthread', 'util']
 ##LOPTS = --dynamic
 ##DYNLDFLAGS = -shared $(LDFLAGS)
 

Modified: branches/etch-a-ton/config/sunos5-config.py
===================================================================
--- branches/etch-a-ton/config/sunos5-config.py	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/config/sunos5-config.py	2008-11-20 21:57:21 UTC (rev 17521)
@@ -165,7 +165,7 @@
 
 ##FIX_STUBS_WARNINGS = -Wno-unused
 
-LLIBS = 'c m dl pthread stdc++'
+LLIBS = ['c', 'm', 'dl', 'pthread', 'stdc++']
 ##LOPTS = --dynamic
 ##DYNLDFLAGS = -shared $(LDFLAGS)
 

Modified: branches/etch-a-ton/config/win32-vc-config.py
===================================================================
--- branches/etch-a-ton/config/win32-vc-config.py	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/config/win32-vc-config.py	2008-11-20 21:57:21 UTC (rev 17521)
@@ -181,7 +181,7 @@
 CC_WARN = []
 CXX_WARN = []
 
-LLIBS = 'ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid'
+LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid']
 
 PLATFORM_LINKFLAGS = '''
                        /SUBSYSTEM:CONSOLE

Modified: branches/etch-a-ton/source/blender/imbuf/IMB_imbuf.h
===================================================================
--- branches/etch-a-ton/source/blender/imbuf/IMB_imbuf.h	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/source/blender/imbuf/IMB_imbuf.h	2008-11-20 21:57:21 UTC (rev 17521)
@@ -403,9 +403,14 @@
  *
  * @attention defined in imageprocess.c
  */
-void bicubic_interpolation(struct ImBuf *in, struct ImBuf *out, float x, float y, int xout, int yout);
+void bicubic_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
 void neareast_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
 void bilinear_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+
+void bicubic_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void neareast_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void bilinear_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+
 /**
  * Change the ordering of the color bytes pointed to by rect from
  * rgba to abgr. size * 4 color bytes are reordered.

Modified: branches/etch-a-ton/source/blender/imbuf/intern/imageprocess.c
===================================================================
--- branches/etch-a-ton/source/blender/imbuf/intern/imageprocess.c	2008-11-20 21:45:22 UTC (rev 17520)
+++ branches/etch-a-ton/source/blender/imbuf/intern/imageprocess.c	2008-11-20 21:57:21 UTC (rev 17521)
@@ -80,7 +80,18 @@
 		}
 	}
 }
+static void pixel_from_buffer(struct ImBuf *ibuf, unsigned char **outI, float **outF, int x, int y)
 
+{
+	int offset = ibuf->x * y * 4 + 4*x;
+	
+	if (ibuf->rect)
+		*outI= (unsigned char *)ibuf->rect + offset;
+	
+	if (ibuf->rect_float)
+		*outF= (float *)ibuf->rect_float + offset;
+}
+
 /**************************************************************************
 *                            INTERPOLATIONS 
 *
@@ -92,33 +103,41 @@
 /*  More info: http://wiki.blender.org/index.php/User:Damiles#Bicubic_pixel_interpolation
 */
 /* function assumes out to be zero'ed, only does RGBA */
+
 static float P(float k){
+	float p1, p2, p3, p4;
+	p1 = MAX2(k+2.0f,0);
+	p2 = MAX2(k+1.0f,0);
+	p3 = MAX2(k,0);
+	p4 = MAX2(k-1.0f,0);
+	return (float)(1.0f/6.0f)*( p1*p1*p1 - 4.0f * p2*p2*p2 + 6.0f * p3*p3*p3 - 4.0f * p4*p4*p4);
+}
+
+
+#if 0
+/* older, slower function, works the same as above */
+static float P(float k){
 	return (float)(1.0f/6.0f)*( pow( MAX2(k+2.0f,0) , 3.0f ) - 4.0f * pow( MAX2(k+1.0f,0) , 3.0f ) + 6.0f * pow( MAX2(k,0) , 3.0f ) - 4.0f * pow( MAX2(k-1.0f,0) , 3.0f));
 }
+#endif
 
-void bicubic_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, int yout)
+void bicubic_interpolation_color(struct ImBuf *in, unsigned char *outI, float *outF, float u, float v)
 {
 	int i,j,n,m,x1,y1;
-	unsigned char *dataI,*outI;
-	float a,b,w,wx,wy[4], outR,outG,outB,outA,*dataF,*outF;
-	int do_rect, do_float;
+	unsigned char *dataI;
+	float a,b,w,wx,wy[4], outR,outG,outB,outA,*dataF;
 
-	if (in == NULL) return;
-	if (in->rect == NULL && in->rect_float == NULL) return;
+	/* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
 
-	do_rect= (out->rect != NULL);
-	do_float= (out->rect_float != NULL);
+	i= (int)floor(u);
+	j= (int)floor(v);
+	a= u - i;
+	b= v - j;
 
-	i= (int)floor(x);
-	j= (int)floor(y);
-	a= x - i;
-	b= y - j;
-
-	outR= 0.0f;
-	outG= 0.0f;
-	outB= 0.0f;
-	outA= 0.0f;
+	outR = outG = outB = outA = 0.0f;
 	
+/* Optimized and not so easy to read */
+	
 	/* avoid calling multiple times */
 	wy[0] = P(b-(-1));
 	wy[1] = P(b-  0);
@@ -137,14 +156,14 @@
 					/* except that would call P() 16 times per pixel therefor pow() 64 times, better precalc these */
 					w = wx * wy[m+1];
 					
-					if (do_float) {
+					if (outF) {
 						dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
 						outR+= dataF[0] * w;
 						outG+= dataF[1] * w;
 						outB+= dataF[2] * w;
 						outA+= dataF[3] * w;
 					}
-					if (do_rect) {
+					if (outI) {
 						dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
 						outR+= dataI[0] * w;
 						outG+= dataI[1] * w;
@@ -155,15 +174,42 @@
 			}
 		}
 	}
-	if (do_rect) {
-		outI= (unsigned char *)out->rect + out->x * yout * 4 + 4*xout;
+
+/* Done with optimized part */
+	
+#if 0 
+	/* older, slower function, works the same as above */
+	for(n= -1; n<= 2; n++){
+		for(m= -1; m<= 2; m++){
+			x1= i+n;
+			y1= j+m;
+			if (x1>0 && x1 < in->x && y1>0 && y1<in->y) {
+				if (do_float) {
+					dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
+					outR+= dataF[0] * P(n-a) * P(b-m);
+					outG+= dataF[1] * P(n-a) * P(b-m);
+					outB+= dataF[2] * P(n-a) * P(b-m);
+					outA+= dataF[3] * P(n-a) * P(b-m);
+				}
+				if (do_rect) {
+					dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
+					outR+= dataI[0] * P(n-a) * P(b-m);
+					outG+= dataI[1] * P(n-a) * P(b-m);
+					outB+= dataI[2] * P(n-a) * P(b-m);
+					outA+= dataI[3] * P(n-a) * P(b-m);
+				}
+			}
+		}
+	}
+#endif
+	
+	if (outI) {
 		outI[0]= (int)outR;
 		outI[1]= (int)outG;
 		outI[2]= (int)outB;
 		outI[3]= (int)outA;
 	}
-	if (do_float) {
-		outF= (float *)out->rect_float + out->x * yout * 4 + 4*xout;
+	if (outF) {
 		outF[0]= outR;
 		outF[1]= outG;
 		outF[2]= outB;
@@ -171,24 +217,34 @@
 	}
 }
 
+
+void bicubic_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, int yout)
+{
+	
+	unsigned char *outI = NULL;
+	float *outF = NULL;
+	
+	if (in == NULL || (in->rect == NULL && in->rect_float == NULL)) return;
+	
+	pixel_from_buffer(out, &outI, &outF, xout, yout); /* gcc warns these could be uninitialized, but its ok */
+	
+	bicubic_interpolation_color(in, outI, outF, u, v);
+}
+
 /* function assumes out to be zero'ed, only does RGBA */
 /* BILINEAR INTERPOLATION */
-void bilinear_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, int yout)
+void bilinear_interpolation_color(struct ImBuf *in, unsigned char *outI, float *outF, float u, float v)
 {
-	float *row1, *row2, *row3, *row4, a, b, *outF;
-	unsigned char *row1I, *row2I, *row3I, *row4I, *outI;
+	float *row1, *row2, *row3, *row4, a, b;
+	unsigned char *row1I, *row2I, *row3I, *row4I;
 	float a_b, ma_b, a_mb, ma_mb;
 	float empty[4]= {0.0f, 0.0f, 0.0f, 0.0f};
 	unsigned char emptyI[4]= {0, 0, 0, 0};
 	int y1, y2, x1, x2;
-	int do_rect, do_float;
+	
+	
+	/* ImBuf in must have a valid rect or rect_float, assume this is alredy checked */
 
-	if (in==NULL) return;
-	if (in->rect==NULL && in->rect_float==NULL) return;
-

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list