21 |
|
static float gamtab[1<<GAMTABBITS]; |
22 |
|
static float gammul[16]; |
23 |
|
static double cur_gam = 0.; |
24 |
< |
static BYTE mongamtab[MONGAMTSZ]; |
24 |
> |
static uby8 mongamtab[MONGAMTSZ]; |
25 |
|
static double cur_mongam = 0.; |
26 |
|
|
27 |
|
#define imultpow2(i,s) ((s)>=0 ? (i)<<(s) : (i)>>-(s)) |
170 |
|
|
171 |
|
/* Convert a 48-bit RGB scanline to encoded luminance/chrominance */ |
172 |
|
int |
173 |
< |
tmCvRGB48(TMstruct *tms, TMbright *ls, BYTE *cs, |
173 |
> |
tmCvRGB48(TMstruct *tms, TMbright *ls, uby8 *cs, |
174 |
|
uint16 (*scan)[3], int len, double gv) |
175 |
|
{ |
176 |
|
static const char funcName[] = "tmCvRGB48"; |
185 |
|
if (gv <= 0.) |
186 |
|
gv = DEFGAM; |
187 |
|
/* sync input gamma table */ |
188 |
< |
if ((gv != 1.) & (gv != cur_gam)) |
188 |
> |
if (gv != cur_gam) |
189 |
|
mkGamTable(gv); |
190 |
|
if (tmNeedMatrix(tms)) { /* need floating point */ |
191 |
|
COLOR *newscan; |
216 |
|
if (nshft < 0) { |
217 |
|
bi = TM_NOBRT; /* bogus value */ |
218 |
|
lum = 1.; |
219 |
+ |
setcolor(cmon, 1., 1., 1.); |
220 |
|
} else { |
221 |
|
int j = GAMTABBITS-16+nshft; |
222 |
|
int nshft2; |
235 |
|
((1L<<LOGTABBITS)-1) ]; |
236 |
|
d -= M_LN2*(gv*nshft + nshft2); |
237 |
|
d = (double)TM_BRTSCALE*(d + log_inpsf); |
238 |
< |
bi = (int)(d>0. ? d+.5 : d-.5); |
238 |
> |
bi = (int)(d + .5 - (d < 0.)); |
239 |
|
} |
240 |
|
/* world luminance */ |
241 |
|
ls[i] = bi; |
257 |
|
cmon[BLU] = slum + pf*cmon[BLU]; |
258 |
|
} |
259 |
|
} else if (tms->flags & TM_F_BW) { |
260 |
< |
cmon[RED] = cmon[GRN] = cmon[BLU] = lum; |
260 |
> |
int j = 3; |
261 |
> |
while (j--) cs[3*i+j] = tms->cdiv[j]/(TM_BRES>>8); |
262 |
> |
continue; |
263 |
|
} |
264 |
|
bi = (double)MONGAMTSZ*tms->clf[RED]*cmon[RED]/lum; |
265 |
|
cs[3*i ] = bi>=MONGAMTSZ ? 255 : mongamtab[bi]; |