[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