--- ray/src/px/pcond2.c 1999/01/25 11:51:37 3.9 +++ ray/src/px/pcond2.c 2004/11/08 15:50:59 3.13 @@ -1,11 +1,9 @@ -/* Copyright (c) 1997 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: pcond2.c,v 3.13 2004/11/08 15:50:59 greg Exp $"; #endif - /* * Input and output conditioning routines for pcond. + * Added white-balance adjustment 10/01 (GW). */ #include "pcond.h" @@ -33,11 +31,18 @@ static WARP3D *cwarp; /* color warping structure */ static COLOR *scanbuf; /* scanline processing buffer */ static int nread; /* number of scanlines processed */ +static void sfscan(COLOR *sl, int len, double sf); +static void matscan(COLOR *sl, int len, COLORMAT mat); +static void mbscan(COLOR *sl, int len, struct mbc *mb); +static void cwscan(COLOR *sl, int len, WARP3D *wp); +static void getmbcalfile(char *fn, struct mbc *mb); -double -rgblum(clr, scotopic) /* compute (scotopic) luminance of RGB color */ -COLOR clr; -int scotopic; + +extern double +rgblum( /* compute (scotopic) luminance of RGB color */ + COLOR clr, + int scotopic +) { if (scotopic) /* approximate */ return( WHTSEFFICACY * (colval(clr,RED)*.062 + @@ -48,10 +53,11 @@ int scotopic; } -double -cielum(xyz, scotopic) /* compute (scotopic) luminance of CIE color */ -COLOR xyz; -int scotopic; +extern double +cielum( /* compute (scotopic) luminance of CIE color */ + COLOR xyz, + int scotopic +) { if (scotopic) /* approximate */ return(colval(xyz,CIEY) * @@ -61,13 +67,13 @@ int scotopic; } -COLOR * -nextscan() /* read and condition next scanline */ +extern COLOR * +nextscan(void) /* read and condition next scanline */ { if (nread >= numscans(&inpres)) { if (cwarpfile != NULL) free3dw(cwarp); - free((char *)scanbuf); + free((void *)scanbuf); return(scanbuf = NULL); } if (what2do&DO_ACUITY) @@ -89,15 +95,15 @@ nextscan() /* read and condition next scanline */ mbscan(scanbuf, scanlen(&inpres), &mbcond); else if (cwarpfile != NULL) /* device color space warp */ cwscan(scanbuf, scanlen(&inpres), cwarp); - else if (lumf == cielum | inprims != outprims) + else if ((lumf == cielum) | (inprims != outprims)) matscan(scanbuf, scanlen(&inpres), mbcond.cmat); nread++; return(scanbuf); } -COLOR * -firstscan() /* return first processed scanline */ +extern COLOR * +firstscan(void) /* return first processed scanline */ { if (mbcalfile != NULL) /* load macbethcal file */ getmbcalfile(mbcalfile, &mbcond); @@ -106,11 +112,14 @@ firstscan() /* return first processed scanline */ syserror(cwarpfile); } else if (lumf == rgblum) - comprgb2rgbmat(mbcond.cmat, inprims, outprims); + comprgb2rgbWBmat(mbcond.cmat, inprims, outprims); else - compxyz2rgbmat(mbcond.cmat, outprims); - if (what2do&DO_ACUITY) - initacuity(); + compxyz2rgbWBmat(mbcond.cmat, outprims); + if (what2do&DO_ACUITY && !initacuity()) { + fprintf(stderr, "%s: warning - cannot initialize acuity pass\n", + progname); + what2do &= ~DO_ACUITY; + } scanbuf = (COLOR *)malloc(scanlen(&inpres)*sizeof(COLOR)); if (scanbuf == NULL) syserror("malloc"); @@ -119,10 +128,12 @@ firstscan() /* return first processed scanline */ } -sfscan(sl, len, sf) /* apply scalefactor to scanline */ -register COLOR *sl; -int len; -double sf; +static void +sfscan( /* apply scalefactor to scanline */ + register COLOR *sl, + int len, + double sf +) { while (len--) { scalecolor(sl[0], sf); @@ -131,10 +142,12 @@ double sf; } -matscan(sl, len, mat) /* apply color matrix to scaline */ -register COLOR *sl; -int len; -COLORMAT mat; +static void +matscan( /* apply color matrix to scaline */ + register COLOR *sl, + int len, + COLORMAT mat +) { while (len--) { colortrans(sl[0], mat, sl[0]); @@ -144,10 +157,12 @@ COLORMAT mat; } -mbscan(sl, len, mb) /* apply macbethcal adj. to scaline */ -COLOR *sl; -int len; -register struct mbc *mb; +static void +mbscan( /* apply macbethcal adj. to scaline */ + COLOR *sl, + int len, + register struct mbc *mb +) { double d; register int i, j; @@ -168,10 +183,12 @@ register struct mbc *mb; } -cwscan(sl, len, wp) /* apply color space warp to scaline */ -COLOR *sl; -int len; -WARP3D *wp; +static void +cwscan( /* apply color space warp to scaline */ + COLOR *sl, + int len, + WARP3D *wp +) { int rval; @@ -190,11 +207,12 @@ WARP3D *wp; } -getmbcalfile(fn, mb) /* load macbethcal file */ -char *fn; -register struct mbc *mb; +static void +getmbcalfile( /* load macbethcal file */ + char *fn, + register struct mbc *mb +) { - extern char *fgets(); char buf[128]; FILE *fp; int inpflags = 0;