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.47 by greg, Wed Apr 7 21:13:52 2021 UTC vs.
Revision 3.51 by greg, Tue May 4 21:50:54 2021 UTC

# Line 160 | Line 160 | TMstruct       *tms
160          if (tms == NULL || tms->histo == NULL)
161                  return;
162          free(tms->histo);
163 +        tms->hbrmin = 10; tms->hbrmax = -10;
164          tms->histo = NULL;
165   }
166  
# Line 343 | Line 344 | int    wt
344   {
345          static const char funcName[] = "tmAddHisto";
346          int     oldorig=0, oldlen, horig, hlen;
347 <        int     i, j;
347 >        int     i;
348  
349          if (tms == NULL)
350                  returnErr(TM_E_TMINVAL);
# Line 364 | Line 365 | int    wt
365                  oldlen = HISTI(tms->hbrmax) + 1 - oldorig;
366          }
367          for (i = len; i--; ) {
368 <                if ((j = ls[i]) < MINBRT)
368 >                if (ls[i] < MINBRT)
369                          continue;
370 <                if (j < tms->hbrmin)
371 <                        tms->hbrmin = j;
372 <                else if (j > tms->hbrmax)
373 <                        tms->hbrmax = j;
370 >                if (ls[i] < tms->hbrmin)
371 >                        tms->hbrmin = ls[i];
372 >                else if (ls[i] > tms->hbrmax)
373 >                        tms->hbrmax = ls[i];
374          }
375          horig = HISTI(tms->hbrmin);
376          hlen = HISTI(tms->hbrmax) + 1 - horig;
# Line 439 | Line 440 | double  Lddyn
440          for (i = tms->mbrmax-tms->mbrmin+1; i--; ) {
441                  double  d;
442                  d = expmult/tms->inpsf * tmLuminance(tms->mbrmin + i);
443 <                if (d <= minD)
444 <                        break;          /* map initialized to zeroes */
445 <                d = (d - minD)/(1. - minD);
443 >                if (d >= 2.*minD)
444 >                        d -= minD;
445 >                else                    /* soft black crushing */
446 >                        d *= d/(4.*minD);
447 >                d /= 1. - minD;
448                  d = TM_BRES*pow(d, 1./gamval);
449                  tms->lumap[i] = (d > maxV) ? maxV : (int)d;
450          }
# Line 486 | Line 489 | double Ldmax
489                  histot += tms->histo[i];
490                  sum += (double)(j -= HISTEP) * tms->histo[i];
491          }
489        threshold = histot*0.002 + .5;
492          if (!histot)
493                  returnErr(TM_E_TMFAIL);
494 +        threshold = histot/40 + 1;
495          Lwavg = tmLuminance( (double)sum / histot );
496                                          /* use linear tone mapping? */
497          if (tms->flags & TM_F_LINEAR || threshold < 4 ||
# Line 532 | Line 535 | double Ldmax
535                          free(cumf);
536                          goto linearmap;
537                  }
538 <        } while (trimmings > threshold);
538 >        } while (40*trimmings > histot);
539                                          /* allocate space for mapping */
540          if (!tmNewMap(tms))
541                  returnErr(TM_E_NOMEM);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines