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 |
|
|
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); |
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; |
491 |
|
} |
492 |
|
if (!histot) |
493 |
|
returnErr(TM_E_TMFAIL); |
494 |
< |
threshold = histot*0.025 + 1.; |
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 || |
535 |
|
free(cumf); |
536 |
|
goto linearmap; |
537 |
|
} |
538 |
< |
threshold = 0.025*histot + 1.; |
538 |
< |
|
539 |
< |
} while ((threshold > 4) & (trimmings > threshold)); |
538 |
> |
} while (40*trimmings > histot); |
539 |
|
/* allocate space for mapping */ |
540 |
|
if (!tmNewMap(tms)) |
541 |
|
returnErr(TM_E_NOMEM); |