ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/tonemap.c
(Generate patch)

Comparing ray/src/common/tonemap.c (file contents):
Revision 3.40 by greg, Thu Jan 7 02:13:49 2021 UTC vs.
Revision 3.43 by greg, Fri Feb 5 01:07:28 2021 UTC

# Line 439 | Line 439 | double gamval
439                  double  val = TM_BRES * exp(
440                          ( d + (tms->mbrmin+i)*(1./TM_BRTSCALE) )
441                          / gamval);
442 <                tms->lumap[i] = val >= (double)0xffff ? 0xffff : (int)val;
442 >                tms->lumap[i] = val;
443 >                if (sizeof(TMAP_TYP) == 2 && val >= 0xffff)
444 >                        tms->lumap[i] = 0xffff;
445          }
446          returnOK;
447   }
# Line 497 | Line 499 | double Ldmax
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++) {
# Line 563 | Line 565 | int    len
565   )
566   {
567          static const char funcName[] = "tmMapPixels";
568 <        int32   li, pv;
568 >        TMbright        lv;
569 >        TMAP_TYP        li;
570 >        int             pv;
571  
572          if (tms == NULL || tms->lumap == NULL)
573                  returnErr(TM_E_TMINVAL);
574          if ((ps == NULL) | (ls == NULL) | (len < 0))
575                  returnErr(TM_E_ILLEGAL);
576          while (len--) {
577 <                if ((li = *ls++) < tms->mbrmin) {
577 >                if ((lv = *ls++) < tms->mbrmin) {
578                          li = 0;
579                  } else {
580 <                        if (li > tms->mbrmax)
581 <                                li = tms->mbrmax;
582 <                        li = tms->lumap[li - tms->mbrmin];
580 >                        if (lv > tms->mbrmax)
581 >                                lv = tms->mbrmax;
582 >                        li = tms->lumap[lv - tms->mbrmin];
583                  }
584 <                if (cs == TM_NOCHROM)
585 <                        *ps++ = li>255 ? 255 : li;
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];
# Line 593 | Line 601 | int    len
601  
602  
603   TMstruct *
604 < tmDup(                          /* duplicate top tone mapping */
604 > tmDup(                          /* duplicate tone mapping */
605   TMstruct        *tms
606   )
607   {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines