499 |
|
if ((histo == NULL) | (cumf == NULL)) |
500 |
|
returnErr(TM_E_NOMEM); |
501 |
|
cumf[histlen+1] = 1.; /* guard for assignment code */ |
502 |
< |
for (i = histlen; i--; ) /* make malleable copy */ |
503 |
< |
histo[i] = tms->histo[i]; |
502 |
> |
/* make malleable copy */ |
503 |
> |
memcpy((MEM_PTR)histo, (MEM_PTR)tms->histo, histlen*sizeof(HIST_TYP)); |
504 |
|
do { /* iterate to solution */ |
505 |
|
sum = 0; /* cumulative probability */ |
506 |
|
for (i = 0; i < histlen; i++) { |
581 |
|
lv = tms->mbrmax; |
582 |
|
li = tms->lumap[lv - tms->mbrmin]; |
583 |
|
} |
584 |
< |
if (cs == TM_NOCHROM) |
585 |
< |
*ps++ = li>=TM_BRES ? 255 : (int)(256*li/TM_BRES); |
586 |
< |
else { |
584 |
> |
if (cs == TM_NOCHROM) { |
585 |
> |
#if !(TM_BRES & 0xff) |
586 |
> |
*ps++ = li>=TM_BRES ? 255 : li/(TM_BRES>>8); |
587 |
> |
#else |
588 |
> |
*ps++ = li>=TM_BRES ? 255 : (li<<8)/TM_BRES; |
589 |
> |
#endif |
590 |
> |
} else { |
591 |
|
pv = *cs++ * li / tms->cdiv[RED]; |
592 |
|
*ps++ = pv>255 ? 255 : pv; |
593 |
|
pv = *cs++ * li / tms->cdiv[GRN]; |
601 |
|
|
602 |
|
|
603 |
|
TMstruct * |
604 |
< |
tmDup( /* duplicate top tone mapping */ |
604 |
> |
tmDup( /* duplicate tone mapping */ |
605 |
|
TMstruct *tms |
606 |
|
) |
607 |
|
{ |