| 1 | schorsch | 3.12 | /* RCSid: $Id: pcond.h,v 3.11 2003/07/14 22:24:00 schorsch Exp $ */ | 
| 2 | greg | 3.1 | /* | 
| 3 |  |  | * Header file for picture file conditioning. | 
| 4 |  |  | */ | 
| 5 | schorsch | 3.11 | #ifndef _RAD_PCOND_H_ | 
| 6 |  |  | #define _RAD_PCOND_H_ | 
| 7 | greg | 3.1 |  | 
| 8 |  |  | #include "standard.h" | 
| 9 |  |  | #include "color.h" | 
| 10 |  |  | #include "view.h" | 
| 11 |  |  |  | 
| 12 | schorsch | 3.11 | #ifdef __cplusplus | 
| 13 |  |  | extern "C" { | 
| 14 |  |  | #endif | 
| 15 | greg | 3.1 |  | 
| 16 | greg | 3.10 | #ifndef ADJ_VEIL | 
| 17 |  |  | #define ADJ_VEIL        0               /* adjust veil to preserve contrast? */ | 
| 18 |  |  | #endif | 
| 19 | greg | 3.1 |  | 
| 20 |  |  | #define SWNORM          2.26            /* scotopic/photopic ratio for white */ | 
| 21 |  |  | #define WHTSEFFICACY    (SWNORM*WHTEFFICACY) | 
| 22 |  |  |  | 
| 23 | greg | 3.3 | #define BotMesopic      5.62e-3         /* top of scotopic range */ | 
| 24 |  |  | #define TopMesopic      5.62            /* bottom of photopic range */ | 
| 25 |  |  |  | 
| 26 | greg | 3.10 | #define FOVDIA          (1.0*PI/180.0)  /* foveal diameter (radians) */ | 
| 27 | greg | 3.1 |  | 
| 28 |  |  | #define HISTRES         100             /* histogram resolution */ | 
| 29 | gwlarson | 3.9 | #define MAXPREHIST      1024            /* maximum precomputed histogram */ | 
| 30 | greg | 3.1 |  | 
| 31 | gwlarson | 3.8 | #define LMIN            1e-7            /* minimum visible world luminance */ | 
| 32 | greg | 3.1 | #define LMAX            1e5             /* maximum visible world luminance */ | 
| 33 |  |  |  | 
| 34 |  |  | #define Bl(Lw)          log(Lw)         /* brightness function */ | 
| 35 |  |  | #define Bl1(Lw)         (1.0/(Lw))      /* first derivative of Bl(Lw) */ | 
| 36 |  |  | #define Lb(Bw)          exp(Bw)         /* inverse of brightness function */ | 
| 37 |  |  | #define Lb1(Bw)         exp(Bw)         /* first derivative of Lb(Bw) */ | 
| 38 |  |  |  | 
| 39 |  |  | /* Flags of what to do */ | 
| 40 | greg | 3.2 | #define DO_ACUITY       01 | 
| 41 | greg | 3.1 | #define DO_VEIL         02 | 
| 42 |  |  | #define DO_HSENS        04 | 
| 43 |  |  | #define DO_COLOR        010 | 
| 44 |  |  | #define DO_CWEIGHT      020 | 
| 45 | greg | 3.5 | #define DO_FIXHIST      040 | 
| 46 | gwlarson | 3.9 | #define DO_PREHIST      0100 | 
| 47 |  |  | #define DO_LINEAR       0200 | 
| 48 | greg | 3.1 |  | 
| 49 |  |  | #define DO_HUMAN        (DO_ACUITY|DO_VEIL|DO_HSENS|DO_COLOR) | 
| 50 |  |  |  | 
| 51 |  |  | extern int      what2do;                /* desired adjustments */ | 
| 52 |  |  |  | 
| 53 |  |  | extern double   ldmax;                  /* maximum output luminance */ | 
| 54 | greg | 3.7 | extern double   lddyn;                  /* display dynamic range */ | 
| 55 |  |  | extern double   Bldmin, Bldmax;         /* Bl(ldmax/lddyn) and Bl(ldmax) */ | 
| 56 | greg | 3.1 |  | 
| 57 |  |  | extern char     *progname;              /* global argv[0] */ | 
| 58 |  |  |  | 
| 59 |  |  | extern char     *infn;                  /* input file name */ | 
| 60 |  |  | extern FILE     *infp;                  /* input stream */ | 
| 61 |  |  | extern double   (*lumf)();              /* input luminance function */ | 
| 62 |  |  | extern double   inpexp;                 /* input exposure value */ | 
| 63 |  |  |  | 
| 64 |  |  | #define plum(clr)       ((*lumf)(clr,0)/inpexp) | 
| 65 |  |  | #define slum(clr)       ((*lumf)(clr,1)/inpexp) | 
| 66 | greg | 3.7 |  | 
| 67 |  |  | #define ldmin           (ldmax/lddyn) | 
| 68 | greg | 3.1 |  | 
| 69 |  |  | extern COLOR    *fovimg;                /* foveal (1 degree) averaged image */ | 
| 70 | greg | 3.10 | extern int      fvxr, fvyr;             /* foveal image resolution */ | 
| 71 |  |  | extern float    *crfimg;                /* contrast reduction factors */ | 
| 72 | greg | 3.1 |  | 
| 73 |  |  | #define fovscan(y)      (fovimg+(y)*fvxr) | 
| 74 | greg | 3.10 | #define crfscan(y)      (crfimg+(y)*fvxr) | 
| 75 | greg | 3.5 |  | 
| 76 |  |  | extern double   fixfrac;                /* histogram share due to fixations */ | 
| 77 |  |  | extern short    (*fixlst)[2];           /* fixation history list */ | 
| 78 |  |  | extern int      nfixations;             /* number of fixation points */ | 
| 79 | greg | 3.1 |  | 
| 80 | greg | 3.10 | extern double   bwhist[HISTRES];        /* luminance histogram */ | 
| 81 | greg | 3.4 | extern double   histot;                 /* total count of histogram */ | 
| 82 | greg | 3.1 | extern double   bwmin, bwmax;           /* histogram limits */ | 
| 83 |  |  | extern double   bwavg;                  /* mean brightness */ | 
| 84 |  |  |  | 
| 85 | greg | 3.4 | #define bwhi(B)         (int)(HISTRES*((B)-bwmin)/(bwmax-bwmin)) | 
| 86 | greg | 3.1 |  | 
| 87 |  |  | extern RGBPRIMP inprims;                /* input primaries */ | 
| 88 |  |  | extern COLORMAT inrgb2xyz;              /* convert input RGB to XYZ */ | 
| 89 |  |  |  | 
| 90 |  |  | extern RGBPRIMP outprims;               /* output primaries */ | 
| 91 |  |  |  | 
| 92 |  |  | extern double   scalef;                 /* linear scaling factor */ | 
| 93 |  |  |  | 
| 94 |  |  | extern VIEW     ourview;                /* picture view */ | 
| 95 |  |  | extern double   pixaspect;              /* pixel aspect ratio */ | 
| 96 |  |  | extern RESOLU   inpres;                 /* input picture resolution */ | 
| 97 |  |  |  | 
| 98 |  |  | extern char     *mbcalfile;             /* macbethcal mapping file */ | 
| 99 | greg | 3.6 | extern char     *cwarpfile;             /* color warp mapping file */ | 
| 100 | greg | 3.1 |  | 
| 101 |  |  |  | 
| 102 | schorsch | 3.12 |  | 
| 103 |  |  | /* defined in pcond.c */ | 
| 104 |  |  | extern void syserror(char *s); | 
| 105 |  |  |  | 
| 106 |  |  | /* defined in pcond2.c */ | 
| 107 |  |  | extern double rgblum(COLOR clr, int scotopic);  /* compute (scotopic) luminance of RGB color */ | 
| 108 |  |  | extern double cielum(COLOR xyz, int scotopic);  /* compute (scotopic) luminance of CIE color */ | 
| 109 |  |  | extern COLOR    *nextscan(void);                /* next processed scanline */ | 
| 110 |  |  | extern COLOR    *firstscan(void);               /* first processed scanline */ | 
| 111 |  |  |  | 
| 112 |  |  | /* defined in pcond3.c */ | 
| 113 |  |  | extern void getfixations(FILE *fp);     /* load fixation history list */ | 
| 114 |  |  | extern void gethisto(FILE *fp);         /* load precomputed luminance histogram */ | 
| 115 |  |  | extern void comphist(void);             /* create foveal sampling histogram */ | 
| 116 |  |  | extern double htcontrs(double La);      /* human contrast sens. func. */ | 
| 117 |  |  | extern double clampf(double La);        /* histogram clamping function */ | 
| 118 |  |  | extern double crfactor(double La);      /* contrast reduction factor */ | 
| 119 |  |  | extern int mkbrmap(void);               /* make dynamic range map */ | 
| 120 |  |  | extern void putmapping(FILE     *fp);   /* put out mapping function */ | 
| 121 |  |  | extern void scotscan(COLOR *scan, int xres);    /* apply scotopic color sensitivity loss */ | 
| 122 |  |  | extern void mapscan(COLOR *scan, int xres);     /* apply tone mapping operator to scanline */ | 
| 123 |  |  |  | 
| 124 |  |  | /* defined in pcond4.c */ | 
| 125 |  |  | extern void compveil(void);             /* compute veiling image */ | 
| 126 |  |  | #if ADJ_VEIL | 
| 127 |  |  | extern void adjveil(void);              /* adjust veil image */ | 
| 128 |  |  | #endif | 
| 129 |  |  | extern void acuscan(COLOR *scln, int y);        /* get acuity-sampled scanline */ | 
| 130 |  |  | extern void addveil(COLOR *sl, int y);          /* add veil to scanline */ | 
| 131 |  |  | extern void initacuity(void);   /* initialize variable acuity sampling */ | 
| 132 |  |  | extern double hacuity(double La);       /* human acuity func. (cycles/deg.) */ | 
| 133 | schorsch | 3.11 |  | 
| 134 |  |  | #ifdef __cplusplus | 
| 135 |  |  | } | 
| 136 |  |  | #endif | 
| 137 |  |  | #endif /* _RAD_PCOND_H_ */ |