- // Delete the VFrames we used for blurring
- delete tmp_frame;
- delete blurry_frame;
-
- if( minima_r < 1e-3) minima_r = 1e-3;
- if( minima_g < 1e-3) minima_g = 1e-3;
- if( minima_b < 1e-3) minima_b = 1e-3;
- values.min_r = minima_r;
- values.min_g = minima_g;
- values.min_b = minima_b;
- values.light = (minima_r / maxima_r) * 0.95;
- values.gamma_g = fabs(maxima_g - minima_g) < 1e-3 ? 1. :
- logf(maxima_r / minima_r) / logf(maxima_g / minima_g);
- values.gamma_b = fabs(maxima_b - minima_b) < 1e-3 ? 1. :
- logf(maxima_r / minima_r) / logf(maxima_b / minima_b);
+ for( int i = min_row; i < max_row; i++ ) {
+ float *row = blurry_rows[i] + 3 * min_col;
+ for( int j = min_col; j < max_col; j++, row+=3 ) {
+ if( row[0] < minima_r ) minima_r = row[0];
+ if( row[0] > maxima_r ) maxima_r = row[0];
+ if( row[1] < minima_g ) minima_g = row[1];
+ if( row[1] > maxima_g ) maxima_g = row[1];
+ if( row[2] < minima_b ) minima_b = row[2];
+ if( row[2] > maxima_b ) maxima_b = row[2];
+ }
+ }
+ values.min_r = minima_r; values.max_r = maxima_r;
+ values.min_g = minima_g; values.max_g = maxima_g;
+ values.min_b = minima_b; values.max_b = maxima_b;
+ values.light = maxima_r < 1e-6 ? 1.0 : minima_r / maxima_r;
+ bclamp(minima_r, 1e-6, 1-1e-6); bclamp(maxima_r, 1e-6, 1-1e-6);
+ bclamp(minima_g, 1e-6, 1-1e-6); bclamp(maxima_g, 1e-6, 1-1e-6);
+ bclamp(minima_b, 1e-6, 1-1e-6); bclamp(maxima_b, 1e-6, 1-1e-6);
+ float log_r = logf(maxima_r / minima_r);
+ float log_g = logf(maxima_g / minima_g);
+ float log_b = logf(maxima_b / minima_b);
+ if( log_g < 1e-6 ) log_g = 1e-6;
+ if( log_b < 1e-6 ) log_b = 1e-6;
+ values.gamma_g = log_r / log_g;
+ values.gamma_b = log_r / log_b;
+ values.shave_min_col = shave_min_col;
+ values.shave_max_col = shave_max_col;
+ values.shave_min_row = shave_min_row;
+ values.shave_max_row = shave_max_row;
+ values.coef1 = values.coef2 = -1;