425 |
|
) |
426 |
|
{ |
427 |
|
static const char funcName[] = "tmFixedMapping"; |
428 |
< |
int maxV = (1L<<(8*sizeof(TMAP_TYP))) - 1; |
429 |
< |
double minD; |
430 |
< |
int i; |
428 |
> |
const int maxV = (1L<<(8*sizeof(TMAP_TYP))) - 1; |
429 |
> |
double minD; |
430 |
> |
int i; |
431 |
|
|
432 |
|
if (!tmNewMap(tms)) |
433 |
|
returnErr(TM_E_NOMEM); |
439 |
|
for (i = tms->mbrmax-tms->mbrmin+1; i--; ) { |
440 |
|
double d; |
441 |
|
d = expmult/tms->inpsf * tmLuminance(tms->mbrmin + i); |
442 |
< |
if (d <= minD) |
443 |
< |
break; /* map initialized to zeroes */ |
444 |
< |
d = (d - minD)/(1. - minD); |
442 |
> |
if (d >= 2.*minD) |
443 |
> |
d -= minD; |
444 |
> |
else /* soft black crushing */ |
445 |
> |
d *= d/(4.*minD); |
446 |
> |
d /= 1. - minD; |
447 |
|
d = TM_BRES*pow(d, 1./gamval); |
448 |
< |
tms->lumap[i] = (d >= maxV) ? maxV : (int)d; |
448 |
> |
tms->lumap[i] = (d > maxV) ? maxV : (int)d; |
449 |
|
} |
450 |
|
returnOK; |
451 |
|
} |
690 |
|
tms->mbrmin = tms->hbrmin; |
691 |
|
tms->mbrmax = tms->hbrmax; |
692 |
|
if (tms->mbrmin > tms->mbrmax) |
693 |
< |
return 0; |
693 |
> |
return(0); |
694 |
|
if (tms->lumap == NULL) |
695 |
|
tms->lumap = (TMAP_TYP *)calloc(tms->mbrmax-tms->mbrmin+1, |
696 |
|
sizeof(TMAP_TYP)); |