460 |
|
float *cumf; |
461 |
|
int brt0, histlen; |
462 |
|
HIST_TYP threshold, ceiling, trimmings, histot; |
463 |
< |
double logLddyn, Ldmin, Ldavg, Lwavg, Tr, Lw, Ld; |
463 |
> |
double logLddyn, Ldmin, Lwavg, Tr, Lw, Ld; |
464 |
|
double sum; |
465 |
|
double d; |
466 |
|
int i, j; |
474 |
|
/* compute handy values */ |
475 |
|
Ldmin = Ldmax/Lddyn; |
476 |
|
logLddyn = log(Lddyn); |
477 |
– |
Ldavg = sqrt(Ldmax*Ldmin); |
477 |
|
i = HISTI(tms->hbrmin); |
478 |
|
brt0 = HISTV(i); |
479 |
|
histlen = HISTI(tms->hbrmax) + 1 - i; |
498 |
|
if ((histo == NULL) | (cumf == NULL)) |
499 |
|
returnErr(TM_E_NOMEM); |
500 |
|
cumf[histlen+1] = 1.; /* guard for assignment code */ |
501 |
< |
for (i = histlen; i--; ) /* make malleable copy */ |
502 |
< |
histo[i] = tms->histo[i]; |
501 |
> |
/* make malleable copy */ |
502 |
> |
memcpy((MEM_PTR)histo, (MEM_PTR)tms->histo, histlen*sizeof(HIST_TYP)); |
503 |
|
do { /* iterate to solution */ |
504 |
|
sum = 0; /* cumulative probability */ |
505 |
|
for (i = 0; i < histlen; i++) { |
547 |
|
returnOK; |
548 |
|
linearmap: /* linear tone-mapping */ |
549 |
|
if (tms->flags & TM_F_HCONTR) |
550 |
< |
d = htcontrs(Ldavg) / htcontrs(Lwavg); |
550 |
> |
d = htcontrs(sqrt(Ldmax*Ldmin)) / htcontrs(Lwavg); |
551 |
|
else |
552 |
< |
d = Ldavg / Lwavg; |
552 |
> |
d = Ldmax / tmLuminance(tms->hbrmax); |
553 |
|
return(tmFixedMapping(tms, tms->inpsf*d/Ldmax, gamval)); |
554 |
|
} |
555 |
|
|
580 |
|
lv = tms->mbrmax; |
581 |
|
li = tms->lumap[lv - tms->mbrmin]; |
582 |
|
} |
583 |
< |
if (cs == TM_NOCHROM) |
584 |
< |
*ps++ = li>=TM_BRES ? 255 : (int)(256*li/TM_BRES); |
585 |
< |
else { |
583 |
> |
if (cs == TM_NOCHROM) { |
584 |
> |
#if !(TM_BRES & 0xff) |
585 |
> |
*ps++ = li>=TM_BRES ? 255 : li/(TM_BRES>>8); |
586 |
> |
#else |
587 |
> |
*ps++ = li>=TM_BRES ? 255 : (li<<8)/TM_BRES; |
588 |
> |
#endif |
589 |
> |
} else { |
590 |
|
pv = *cs++ * li / tms->cdiv[RED]; |
591 |
|
*ps++ = pv>255 ? 255 : pv; |
592 |
|
pv = *cs++ * li / tms->cdiv[GRN]; |
600 |
|
|
601 |
|
|
602 |
|
TMstruct * |
603 |
< |
tmDup( /* duplicate top tone mapping */ |
603 |
> |
tmDup( /* duplicate tone mapping */ |
604 |
|
TMstruct *tms |
605 |
|
) |
606 |
|
{ |