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.38 by greg, Wed Jan 6 19:25:00 2021 UTC vs.
Revision 3.41 by greg, Thu Jan 7 19:13:57 2021 UTC

# Line 67 | Line 67 | double gamval
67                  tmnew->mongam = gamval;
68                                                  /* set color divisors */
69          for (i = 0; i < 3; i++)
70 <                tmnew->cdiv[i] = 256.*pow(tmnew->clf[i], 1./tmnew->mongam);
70 >                tmnew->cdiv[i] = TM_BRES*pow(tmnew->clf[i], 1./tmnew->mongam);
71  
72                                                  /* set input transform */
73          tmnew->inppri = tmnew->monpri;
# Line 143 | Line 143 | MEM_PTR        dat
143                          tms->cmat[i][j] *= tms->inpsf;
144                                                  /* set color divisors */
145          for (i = 0; i < 3; i++)
146 <                tms->cdiv[i] = 256.*pow(tms->clf[i] < .001 ? .001 :
146 >                tms->cdiv[i] = TM_BRES*pow(tms->clf[i] < .001 ? .001 :
147                                                  tms->clf[i], 1./tms->mongam);
148                                                  /* notify packages */
149          for (i = tmNumPkgs; i--; )
# Line 379 | Line 379 | int    wt
379                  if (newhist == NULL)
380                          returnErr(TM_E_NOMEM);
381                  if (oldlen) {                   /* copy and free old */
382 <                        memcpy((MEM_PTR)newhist+(oldorig-horig),
382 >                        memcpy((MEM_PTR)(newhist+(oldorig-horig)),
383                                  (MEM_PTR)tms->histo, oldlen*sizeof(HIST_TYP));
384                          free((MEM_PTR)tms->histo);
385                  }
# Line 436 | Line 436 | double gamval
436                  gamval = tms->mongam;
437          d = log(expmult/tms->inpsf);
438          for (i = tms->mbrmax-tms->mbrmin+1; i--; ) {
439 <                double  val = 256. * exp(
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 457 | Line 459 | double Ldmax
459          HIST_TYP        *histo;
460          float   *cumf;
461          int     brt0, histlen;
462 <        HIST_TYP        threshold, ceiling, trimmings;
462 >        HIST_TYP        threshold, ceiling, trimmings, histot;
463          double  logLddyn, Ldmin, Ldavg, Lwavg, Tr, Lw, Ld;
462        HIST_TYP        histot;
464          double  sum;
465          double  d;
466          int     i, j;
# Line 540 | Line 541 | double Ldmax
541                  d -= (double)j;
542                  Ld = Ldmin*exp(logLddyn*((1.-d)*cumf[j]+d*cumf[j+1]));
543                  d = (Ld - Ldmin)/(Ldmax - Ldmin);
544 <                tms->lumap[i] = 256.*pow(d, 1./gamval);
544 >                tms->lumap[i] = TM_BRES*pow(d, 1./gamval);
545          }
546          free((MEM_PTR)histo);           /* clean up and return */
547          free((MEM_PTR)cumf);
# Line 564 | 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;
585 >                        *ps++ = li>=TM_BRES ? 255 : (int)(256*li/TM_BRES);
586                  else {
587                          pv = *cs++ * li / tms->cdiv[RED];
588                          *ps++ = pv>255 ? 255 : pv;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines