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.27 by schorsch, Wed Jun 7 17:52:03 2006 UTC vs.
Revision 3.30 by greg, Tue Nov 27 02:42:54 2007 UTC

# Line 458 | Line 458 | double gamval
458          if (gamval < MINGAM)
459                  gamval = tms->mongam;
460          d = log(expmult/tms->inpsf);
461 <        for (i = tms->mbrmax-tms->mbrmin+1; i--; )
462 <                tms->lumap[i] = 256. * exp(
461 >        for (i = tms->mbrmax-tms->mbrmin+1; i--; ) {
462 >                double  val = 256. * exp(
463                          ( d + (tms->mbrmin+i)*(1./TM_BRTSCALE) )
464 <                        / gamval );
464 >                        / gamval);
465 >                tms->lumap[i] = val >= (double)0xffff ? 0xffff : (int)val;
466 >        }
467          returnOK;
468   }
469  
# Line 502 | Line 504 | double Ldmax
504          j = brt0 + histlen*HISTEP;
505          for (i = histlen; i--; ) {
506                  histot += tms->histo[i];
507 <                sum += (j -= HISTEP) * tms->histo[i];
507 >                sum += (double)(j -= HISTEP) * tms->histo[i];
508          }
509          threshold = histot*0.005 + .5;
510 <        if (threshold < 4)
510 >        if (!histot)
511                  returnErr(TM_E_TMFAIL);
512          Lwavg = tmLuminance( (double)sum / histot );
511                                        /* allocate space for mapping */
512        if (!tmNewMap(tms))
513                returnErr(TM_E_NOMEM);
513                                          /* use linear tone mapping? */
514 <        if (tms->flags & TM_F_LINEAR)
514 >        if (tms->flags & TM_F_LINEAR || threshold < 4 ||
515 >                        tms->hbrmax - tms->hbrmin < TM_BRTSCALE*logLddyn)
516                  goto linearmap;
517                                          /* clamp histogram */
518          histo = (int *)malloc(histlen*sizeof(int));
# Line 553 | Line 553 | double Ldmax
553                          goto linearmap;
554                  }
555          } while (trimmings > threshold);
556 +                                        /* allocate space for mapping */
557 +        if (!tmNewMap(tms))
558 +                returnErr(TM_E_NOMEM);
559                                          /* assign tone-mapping */
560          for (i = tms->mbrmax-tms->mbrmin+1; i--; ) {
561                  j = d = (double)i/(tms->mbrmax-tms->mbrmin)*histlen;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines