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

Comparing ray/src/px/pinterp.c (file contents):
Revision 1.31 by greg, Fri Dec 21 17:20:07 1990 UTC vs.
Revision 2.2 by greg, Thu Dec 19 14:51:55 1991 UTC

# Line 1 | Line 1
1 + /* Copyright (c) 1991 Regents of the University of California */
2 +
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
5   #endif
# Line 16 | Line 18 | static char SCCSid[] = "$SunId$ LBL";
18  
19   #include "color.h"
20  
21 + #include "resolu.h"
22 +
23   #ifndef BSD
24   #define vfork           fork
25   #endif
# Line 57 | Line 61 | double ourexp = -1;                    /* output picture exposure */
61  
62   VIEW    theirview = STDVIEW;            /* input view */
63   int     gotview;                        /* got input view? */
64 < int     thresolu, tvresolu;             /* input resolution */
64 > int     wrongformat = 0;                /* input in another format? */
65 > RESOLU  tresolu;                        /* input resolution */
66   double  theirexp;                       /* input picture exposure */
67   double  theirs2ours[4][4];              /* transformation matrix */
68   int     hasmatrix = 0;                  /* has transformation matrix */
# Line 73 | Line 78 | int    argc;
78   char    *argv[];
79   {
80   #define check(olen,narg)        if (argv[i][olen] || narg >= argc-i) goto badopt
76        extern double   atof();
81          int     gotvfile = 0;
82          char    *zfile = NULL;
83          char    *err;
# Line 211 | Line 215 | char   *argv[];
215                  fputaspect(pixaspect, stdout);
216          if (ourexp > 0 && (ourexp < .995 || ourexp > 1.005))
217                  fputexpos(ourexp, stdout);
218 +        fputformat(COLRFMT, stdout);
219          putc('\n', stdout);
220                                                          /* write picture */
221          writepicture();
# Line 233 | Line 238 | char   *s;
238   {
239          static char     *altname[] = {VIEWSTR,"rpict","rview","pinterp",NULL};
240          register char   **an;
241 +        char    fmt[32];
242  
243 +        if (isformat(s)) {
244 +                formatval(fmt, s);
245 +                wrongformat = strcmp(fmt, COLRFMT);
246 +                return;
247 +        }
248          putc('\t', stdout);
249          fputs(s, stdout);
250  
# Line 253 | Line 264 | char   *s;
264   addpicture(pfile, zspec)                /* add picture to output */
265   char    *pfile, *zspec;
266   {
256        extern double   atof();
267          FILE    *pfp;
268          int     zfd;
269          char    *err;
# Line 270 | Line 280 | char   *pfile, *zspec;
280          theirexp = 1.0;
281          gotview = 0;
282          printf("%s:\n", pfile);
283 <        getheader(pfp, headline);
284 <        if (!gotview || fgetresolu(&thresolu, &tvresolu, pfp)
285 <                        != (YMAJOR|YDECR)) {
276 <                fprintf(stderr, "%s: picture view error\n", pfile);
283 >        getheader(pfp, headline, NULL);
284 >        if (wrongformat || !gotview || !fgetsresolu(&tresolu, pfp)) {
285 >                fprintf(stderr, "%s: picture format error\n", pfile);
286                  exit(1);
287          }
288          if (ourexp <= 0)
# Line 287 | Line 296 | char   *pfile, *zspec;
296                                          /* compute transformation */
297          hasmatrix = pixform(theirs2ours, &theirview, &ourview);
298                                          /* allocate scanlines */
299 <        scanin = (COLR *)malloc(thresolu*sizeof(COLR));
300 <        zin = (float *)malloc(thresolu*sizeof(float));
301 <        plast = (struct position *)calloc(thresolu, sizeof(struct position));
299 >        scanin = (COLR *)malloc(scanlen(&tresolu)*sizeof(COLR));
300 >        zin = (float *)malloc(scanlen(&tresolu)*sizeof(float));
301 >        plast = (struct position *)calloc(scanlen(&tresolu),
302 >                        sizeof(struct position));
303          if (scanin == NULL || zin == NULL || plast == NULL)
304                  syserror();
305                                          /* get z specification or file */
# Line 300 | Line 310 | char   *pfile, *zspec;
310                          perror(zspec);
311                          exit(1);
312                  }
313 <                for (x = 0; x < thresolu; x++)
313 >                for (x = scanlen(&tresolu); x-- > 0; )
314                          zin[x] = zvalue;
315          }
316                                          /* load image */
317 <        for (y = tvresolu-1; y >= 0; y--) {
318 <                if (freadcolrs(scanin, thresolu, pfp) < 0) {
317 >        for (y = 0; y < numscans(&tresolu); y++) {
318 >                if (freadcolrs(scanin, scanlen(&tresolu), pfp) < 0) {
319                          fprintf(stderr, "%s: read error\n", pfile);
320                          exit(1);
321                  }
322 <                if (zfd != -1 && read(zfd,(char *)zin,thresolu*sizeof(float))
323 <                                < thresolu*sizeof(float)) {
322 >                if (zfd != -1 && read(zfd,(char *)zin,
323 >                                scanlen(&tresolu)*sizeof(float))
324 >                                < scanlen(&tresolu)*sizeof(float)) {
325                          fprintf(stderr, "%s: read error\n", zspec);
326                          exit(1);
327                  }
# Line 379 | Line 390 | struct position        *lasty;         /* input/output */
390          register int    x;
391  
392          lastx.z = 0;
393 <        for (x = thresolu-1; x >= 0; x--) {
394 <                pos[0] = (x+.5)/thresolu;
384 <                pos[1] = (y+.5)/tvresolu;
393 >        for (x = scanlen(&tresolu); x-- > 0; ) {
394 >                pix2loc(pos, &tresolu, x, y);
395                  pos[2] = zline[x];
396                  if (movepixel(pos) < 0) {
397                          lasty[x].z = lastx.z = 0;       /* mark invalid */
# Line 465 | Line 475 | FVECT  pos;
475   {
476          FVECT   pt, direc;
477          
478 +        if (pos[2] <= 0)                /* empty pixel */
479 +                return(-1);
480          if (hasmatrix) {
481                  pos[0] += theirview.hoff - .5;
482                  pos[1] += theirview.voff - .5;
# Line 492 | Line 504 | FVECT  pos;
504          pt[0] += direc[0]*pos[2];
505          pt[1] += direc[1]*pos[2];
506          pt[2] += direc[2]*pos[2];
507 <        viewpixel(&pos[0], &pos[1], &pos[2], &ourview, pt);
507 >        viewloc(pos, &ourview, pt);
508          if (pos[2] <= 0)
509                  return(-1);
510          return(0);
# Line 610 | Line 622 | writepicture()                         /* write out picture */
622   {
623          int     y;
624  
625 <        fputresolu(YMAJOR|YDECR, hresolu, vresolu, stdout);
625 >        fprtresolu(hresolu, vresolu, stdout);
626          for (y = vresolu-1; y >= 0; y--)
627                  if (fwritecolrs(pscan(y), hresolu, stdout) < 0)
628                          syserror();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines