ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/pfilt.c
(Generate patch)

Comparing ray/src/px/pfilt.c (file contents):
Revision 1.4 by greg, Tue Apr 11 21:50:05 1989 UTC vs.
Revision 1.10 by greg, Thu Sep 13 09:46:00 1990 UTC

# Line 16 | Line 16 | static char SCCSid[] = "$SunId$ LBL";
16  
17   #include  "color.h"
18  
19
19   extern char  *malloc();
20  
21   #define  CHECKRAD       1.5     /* radius to check for filtering */
# Line 46 | Line 45 | double  spread = 1e-4;         /* spread for star points */
45   char  *tfname = NULL;
46  
47   int  xres, yres;                /* resolution of input */
48 + double  inpaspect = 1.0;        /* pixel aspect ratio of input */
49  
50   int  xrad;                      /* x window size */
51   int  yrad;                      /* y window size */
# Line 64 | Line 64 | char  **argv;
64          extern char  *mktemp();
65          extern double  atof(), pow();
66          extern long  ftell();
67 <        extern int  quit();
67 >        extern int  quit(), headline();
68          FILE  *fin;
69          long  fpos;
70 +        double  outaspect = 0.0;
71          double  d;
72          int  i;
73  
# Line 88 | Line 89 | char  **argv;
89                          switch (argv[i][1]) {
90                          case 'x':
91                                  i++;
92 <                                if (argv[i][0] == '/')
92 >                                if (argv[i][0] == '/') {
93                                          x_c = 1.0/atof(argv[i]+1);
94 <                                else
94 >                                        ncols = 0;
95 >                                } else
96                                          ncols = atoi(argv[i]);
97                                  break;
98                          case 'y':
99                                  i++;
100 <                                if (argv[i][0] == '/')
100 >                                if (argv[i][0] == '/') {
101                                          y_r = 1.0/atof(argv[i]+1);
102 <                                else
102 >                                        nrows = 0;
103 >                                } else
104                                          nrows = atoi(argv[i]);
105                                  break;
106 +                        case 'p':
107 +                                i++;
108 +                                outaspect = atof(argv[i]);
109 +                                break;
110                          case 'e':
111                                  if (argv[i+1][0] == '+' || argv[i+1][0] == '-')
112                                          d = pow(2.0, atof(argv[i+1]));
# Line 126 | Line 133 | char  **argv;
133                          case '1':
134                                  singlepass = 1;
135                                  break;
136 <                        case 'p':
136 >                        case '2':
137 >                                singlepass = 0;
138 >                                break;
139 >                        case 'n':
140                                  npts = atoi(argv[++i]) / 2;
141                                  break;
142                          case 's':
# Line 180 | Line 190 | char  **argv;
190                  fprintf(stderr, "%s: bad # file arguments\n", progname);
191                  quit(1);
192          }
193 <                                        /* copy header */
194 <        copyheader(fin, stdout);
193 >                                        /* get header */
194 >        getheader(fin, headline);
195                                          /* add new header info. */
196          printargs(i, argv, stdout);
197                                          /* get picture size */
198 <        if (fscanf(fin, "-Y %d +X %d\n", &yres, &xres) != 2) {
198 >        if (fgetresolu(&xres, &yres, fin) != (YMAJOR|YDECR)) {
199                  fprintf(stderr, "%s: bad picture size\n", progname);
200                  quit(1);
201          }
202 <        if (ncols > 0)
203 <                x_c = (double)ncols/xres;
194 <        else
202 >                                        /* compute output resolution */
203 >        if (ncols <= 0)
204                  ncols = x_c*xres + .5;
205 <        if (nrows > 0)
197 <                y_r = (double)nrows/yres;
198 <        else
205 >        if (nrows <= 0)
206                  nrows = y_r*yres + .5;
207 +        if (outaspect > .01) {
208 +                d = inpaspect * yres/xres / outaspect;
209 +                if (d * ncols > nrows)
210 +                        ncols = nrows / d;
211 +                else
212 +                        nrows = ncols * d;
213 +        }
214 +        x_c = (double)ncols/xres;
215 +        y_r = (double)nrows/yres;
216  
217 <        if (singlepass) {
202 <                                        /* skip exposure, etc. */
217 >        if (singlepass) {               /* skip exposure, etc. */
218                  pass1default();
219                  pass2(fin);
220                  quit(0);
# Line 219 | Line 234 | char  **argv;
234   }
235  
236  
237 + headline(s)                             /* process line from header */
238 + char  *s;
239 + {
240 +        fputs(s, stdout);               /* copy to output */
241 +        if (isaspect(s))                /* get aspect ratio */
242 +                inpaspect *= aspectval(s);
243 + }
244 +
245 +
246   copyfile(in, out)                       /* copy a file */
247   register FILE  *in, *out;
248   {
# Line 302 | Line 326 | FILE  *in;
326                          quit(1);
327                  }
328          }
329 +                                        /* skip leftovers */
330 +        while (yread < yres) {
331 +                if (freadscan(scanin[0], xres, in) < 0)
332 +                        break;
333 +                yread++;
334 +        }
335   }
336  
337  
338   scan2init()                     /* prepare scanline arrays */
339   {
340 <        double  e;
340 >        double  d;
341          register int  i;
342  
343          if (rad <= 0.0) {
# Line 336 | Line 366 | scan2init()                    /* prepare scanline arrays */
366                  fprintf(stderr, "%s: out of memory\n", progname);
367                  quit(1);
368          }
369 <        e = bright(exposure);
370 <        if (e < 1-1e-7 || e > 1+1e-7)           /* record exposure */
371 <                printf("EXPOSURE=%e\n", e);
369 >                                        /* record pixel aspect and exposure */
370 >        d = x_c / y_r;
371 >        if (d < .99 || d > 1.01)
372 >                fputaspect(d, stdout);
373 >        d = bright(exposure);
374 >        if (d < .995 || d > 1.005)
375 >                fputexpos(d, stdout);
376          printf("\n");
377 <        printf("-Y %d +X %d\n", nrows, ncols);  /* write picture size */
377 >        fputresolu(YMAJOR|YDECR, ncols, nrows, stdout); /* resolution */
378   }
379  
380  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines