--- ray/src/util/evalglare.c 2017/05/18 02:25:27 2.6 +++ ray/src/util/evalglare.c 2017/08/12 15:11:09 2.7 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: evalglare.c,v 2.6 2017/05/18 02:25:27 greg Exp $"; +static const char RCSid[] = "$Id: evalglare.c,v 2.7 2017/08/12 15:11:09 greg Exp $"; #endif /* EVALGLARE V2.00 * Evalglare Software License, Version 2.0 @@ -317,10 +317,18 @@ changed masking threshold to 0.05 cd/m2 /* evalglare.c, v2.01 2016/11/16 change of -2 option (now -2 dir_illum). External provision of the direct illuminance necessary, since the sun interpolation of daysim is causing problems in calculation of the background luminance. */ /* evalglare.c, v2.02 2017/02/28 change of warning message, when invalid exposure setting is found. Reason: tab removal is not in all cases the right measure - it depends which tool caused the invalid exposure entry */ - + +/* evalglare.c, v2.03 2017/08/12 ad of -O option - disk replacement by providing luminance, not documented +remove some minor memory leakages, clean up initialization by C. Reetz + */ + + + +#ifndef EVALGLARE #define EVALGLARE +#endif #define PROGNAME "evalglare" -#define VERSION "2.02 release 28.02.2017 by EPFL, J.Wienold" +#define VERSION "2.03 release 12.08.2017 by EPFL, J.Wienold" #define RELEASENAME PROGNAME " " VERSION @@ -1388,7 +1396,7 @@ int main(int argc, char **argv) i_split, posindex_2, task_lum, checkfile, rval, i, i_max, x, y,x2,y2,x_zone,y_zone, i_z1, i_z2, igs, actual_igs, lastpixelwas_gs, icol, xt, yt, change,checkpixels, before_igs, sgs, splithigh,uniform_gs,x_max, y_max,y_mid, detail_out, posindex_picture, non_cos_lb, rx, ry, rmx,rmy,apply_disability,band_calc,band_color,masking,i_mask,no_glaresources,force; - double lum_total_max,age_corr_factor,age,dgp_ext,dgp,low_light_corr,omega_cos_contr, setvalue, lum_ideal, E_v_contr, sigma,om,delta_E, + double LUM_replace,lum_total_max,age_corr_factor,age,dgp_ext,dgp,low_light_corr,omega_cos_contr, setvalue, lum_ideal, E_v_contr, sigma,om,delta_E, E_vl_ext, lum_max, new_lum_max, r_center, ugp, ugr_exp, dgi_mod,lum_a, pgsv,E_v_mask,pgsv_sat,angle_disk,dist,n_corner_px,zero_corner_px, search_pix, a1, a2, a3, a4, a5, c3, c1, c2, r_split, max_angle,r_actual,lum_actual,dir_ill, omegat, sang, E_v, E_v2, E_v_dir, avlum, act_lum, ang, angle_z1, angle_z2,per_95_band,per_75_band,pos, @@ -1402,40 +1410,45 @@ int main(int argc, char **argv) float lum_task, lum_thres, dgi, vcp, cgi, ugr, limit, dgr, abs_max, Lveil; char maskfile[500],file_out[500], file_out2[500], version[500]; - char *cline; + char *cline = NULL; VIEW userview = STDVIEW; int gotuserview = 0; - struct muc_rvar* s_mask; + struct muc_rvar* s_mask = NULL; + struct muc_rvar* s_band = NULL; + struct muc_rvar* s_z1 = NULL; + struct muc_rvar* s_z2 = NULL; + struct muc_rvar* s_noposweight = NULL; + struct muc_rvar* s_posweight = NULL; + struct muc_rvar* s_posweight2 = NULL; + + // initializing variables .... + Lveil = lum_backg_cos = 0; + dgi = ugr = ugp = ugr_exp = dgi_mod = cgi = dgr = vcp = 0.0; + lum_task = lum_thres = limit = 0; s_mask = muc_rvar_create(); - muc_rvar_set_dim(s_mask, 1); + muc_rvar_set_dim(s_mask, 1); muc_rvar_clear(s_mask); - struct muc_rvar* s_band; s_band = muc_rvar_create(); - muc_rvar_set_dim(s_band, 1); + muc_rvar_set_dim(s_band, 1); muc_rvar_clear(s_band); - struct muc_rvar* s_z1; s_z1 = muc_rvar_create(); - muc_rvar_set_dim(s_z1, 1); + muc_rvar_set_dim(s_z1, 1); muc_rvar_clear(s_z1); - struct muc_rvar* s_z2; s_z2 = muc_rvar_create(); - muc_rvar_set_dim(s_z2, 1); + muc_rvar_set_dim(s_z2, 1); muc_rvar_clear(s_z2); - struct muc_rvar* s_noposweight; s_noposweight = muc_rvar_create(); - muc_rvar_set_dim(s_noposweight, 1); + muc_rvar_set_dim(s_noposweight, 1); muc_rvar_clear(s_noposweight); - struct muc_rvar* s_posweight; s_posweight = muc_rvar_create(); - muc_rvar_set_dim(s_posweight, 1); + muc_rvar_set_dim(s_posweight, 1); muc_rvar_clear(s_posweight); - struct muc_rvar* s_posweight2; s_posweight2 = muc_rvar_create(); - muc_rvar_set_dim(s_posweight2, 1); + muc_rvar_set_dim(s_posweight2, 1); muc_rvar_clear(s_posweight2); /*set required user view parameters to invalid values*/ @@ -1542,6 +1555,7 @@ int main(int argc, char **argv) omega_mask=0.0; i_mask=0; actual_igs=0; + LUM_replace=0; /* command line for output picture*/ cline = (char *) malloc(CLINEMAX+1); @@ -1680,7 +1694,18 @@ int main(int argc, char **argv) strcpy(file_out2, argv[++i]); /* printf("max lum set to %f\n",new_lum_max);*/ break; + case 'O': + img_corr = 1; + set_lum_max2 = 3; + x_disk = atoi(argv[++i]); + y_disk = atoi(argv[++i]); + angle_disk = atof(argv[++i]); + LUM_replace = atof(argv[++i]); + strcpy(file_out2, argv[++i]); +/* printf("max lum set to %f\n",new_lum_max);*/ + break; + case 'n': non_cos_lb = 0; break; @@ -2083,8 +2108,10 @@ if (cut_view==2) { lum_pos_mean= lum_pos_mean/sang; lum_pos2_mean= lum_pos2_mean/sang; - if (set_lum_max2 >= 1 && E_v_contr > 0 && (E_vl_ext - E_v) > 0) { + // XXX: sure this works? I'd suggest parenthesis. + if ((set_lum_max2 >= 1 && E_v_contr > 0 && (E_vl_ext - E_v) > 0) || set_lum_max2==3) { + if (set_lum_max2<3){ lum_ideal = (E_vl_ext - E_v + E_v_contr) / omega_cos_contr; if (set_lum_max2 == 2 && lum_ideal >= 2e9) { printf("warning! luminance of replacement pixels would be larger than 2e9 cd/m2. Value set to 2e9cd/m2!\n") ; @@ -2095,6 +2122,8 @@ if (cut_view==2) { } printf("change luminance values!! lum_ideal,setvalue,E_vl_ext,E_v,E_v_contr %f %f %f %f %f\n", lum_ideal, setvalue, E_vl_ext, E_v, E_v_contr); + }else{setvalue=LUM_replace; + } for (x = 0; x < pict_get_xsize(p); x++) @@ -2114,7 +2143,7 @@ if (cut_view==2) { pict_get_color(p, x, y)[BLU] = setvalue / 179.0; - }else{ if(set_lum_max2 ==2 ) { + }else{ if(set_lum_max2 >1 ) { r_actual =acos(DOT(pict_get_cached_dir(p, x_disk, y_disk), pict_get_cached_dir(p, x, y))) * 2; if (x_disk == x && y_disk==y ) r_actual=0.0; @@ -2127,9 +2156,7 @@ if (cut_view==2) { pict_get_color(p, x, y)[BLU] = setvalue / 179.0; - } - - + } } } } @@ -2894,15 +2921,33 @@ has to be re-written from scratch.... } - + pict_free(p); + pict_free(pm); + muc_rvar_free(s_mask); + muc_rvar_free(s_band); + muc_rvar_free(s_z1); + muc_rvar_free(s_z2); + muc_rvar_free(s_noposweight); + muc_rvar_free(s_posweight); + muc_rvar_free(s_posweight2); + free(cline); return EXIT_SUCCESS; - exit(0); userr: fprintf(stderr, "Usage: %s [-s][-d][-c picture][-t xpos ypos angle] [-T xpos ypos angle] [-b fact] [-r angle] [-y] [-Y lum] [-i Ev] [-I Ev ymax ymin] [-v] picfile\n", progname); - exit(1); + pict_free(p); + pict_free(pm); + muc_rvar_free(s_mask); + muc_rvar_free(s_band); + muc_rvar_free(s_z1); + muc_rvar_free(s_z2); + muc_rvar_free(s_noposweight); + muc_rvar_free(s_posweight); + muc_rvar_free(s_posweight2); + free(cline); + return 1; }