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

Comparing ray/src/px/panim.c (file contents):
Revision 1.2 by greg, Tue Sep 12 13:04:21 1989 UTC vs.
Revision 1.7 by greg, Wed Nov 7 13:10:30 1990 UTC

# Line 11 | Line 11 | static char SCCSid[] = "$SunId$ LBL";
11   */
12  
13   #include <stdio.h>
14 #include <rasterfile.h>
14  
15   #include "random.h"
16   #include "color.h"
# Line 20 | Line 19 | static char SCCSid[] = "$SunId$ LBL";
19  
20   #define GAMMA           2.0             /* gamma correction factor */
21  
22 + FILE    *popen();
23 +
24 + char    *pcom = NULL;                   /* pipe command */
25 +
26   BYTE    gammamap[256];                  /* gamma correction table */
27  
28  
# Line 35 | Line 38 | char   *argv[];
38          for (progname = *argv++; --argc; argv++)
39                  if (!strcmp(*argv, "-p") && argv[1]) {
40                          port = atoi(*++argv); argc--;
41 +                } else if (!strcmp(*argv, "-u") && argv[1]) {
42 +                        pcom = *++argv; argc--;
43                  } else
44                          break;
45          if (!argc) {
46                  fputs("Usage: ", stderr);
47                  fputs(progname, stderr);
48 <                fputs(" [-p port] hostname [-c copies][-r record] [frame] ..\n",
48 >                fputs(" [-p port] [-u uncompress] hostname [-c copies][-r record] [frame] ..\n",
49                                  stderr);
50                  exit(1);
51          }
# Line 71 | Line 76 | char   *argv[];
76   sendframe(file)                 /* convert and send a frame */
77   char    *file;
78   {
79 +        char    command[128];
80          COLR    scanin[SCANLINE];
81          int     xres, yres;
82          int     xbeg, ybeg;
83          FILE    *fp;
84 <        int     j;
85 <        register int    k, c;
80 <        register BYTE   *in;
81 <        short   *out;
84 >        int     y;
85 >        register int    x;
86                                                  /* open file */
87          if (file == NULL) {
88 <                fp = stdin;
88 >                if (pcom != NULL)
89 >                        fp = popen(pcom, "r");
90 >                else
91 >                        fp = stdin;
92                  file = "<stdin>";
93 <        } else if ((fp = fopen(file, "r")) == NULL) {
93 >        } else {
94 >                if (pcom != NULL) {
95 >                        sprintf(command, "( %s ) < %s", pcom, file);
96 >                        fp = popen(command, "r");
97 >                } else
98 >                        fp = fopen(file, "r");
99 >        }
100 >        if (fp == NULL) {
101                  perror(file);
102                  exit(1);
103          }
# Line 101 | Line 115 | char   *file;
115                                                  /* clear output */
116          bzero(sc_frame_arr, sizeof(sc_frame_arr));
117                                                  /* get frame */
118 <        for (j = yres-1; j >= 0; j--) {
118 >        for (y = yres-1; y >= 0; y--) {
119                  if (freadcolrs(scanin, xres, fp) < 0) {
120                          fputs(file, stderr);
121                          fputs(": read error\n", stderr);
122                          exit(1);
123                  }
124 <                for (in = scanin[0], out = sc_frame_arr[ybeg+j]+xbeg;
125 <                                in < scanin[xres]; in += 4, out++) {
126 <                        k = in[EXP] - COLXS;
127 <                        if (k >= 8) {
128 <                                in[RED] =
129 <                                in[GRN] =
116 <                                in[BLU] = 255;
117 <                        } else if (k <= -8) {
118 <                                in[RED] =
119 <                                in[GRN] =
120 <                                in[BLU] = 0;
121 <                        } else if (k > 0) {
122 <                                c = in[RED] << k;
123 <                                in[RED] = c > 255 ? 255 : c;
124 <                                c = in[GRN] << k;
125 <                                in[GRN] = c > 255 ? 255 : c;
126 <                                c = in[BLU] << k;
127 <                                in[BLU] = c > 255 ? 255 : c;
128 <                        } else if (k < 0) {
129 <                                in[RED] = in[RED] >> -k;
130 <                                in[GRN] = in[GRN] >> -k;
131 <                                in[BLU] = in[BLU] >> -k;
132 <                        }
133 <                        for (k = 0; k < 3; k++)
134 <                                *out = *out<<5 | (gammamap[in[k]]+(random()&0x7))>>3;
135 <                }
124 >                normcolrs(scanin, xres, 0);     /* normalize */
125 >                for (x = 0; x < xres; x++)      /* convert */
126 >                        sc_frame_arr[y+ybeg][x+xbeg] =
127 >                        ((gammamap[scanin[x][RED]]+(random()&7))&0xf8)<<7
128 >                        | ((gammamap[scanin[x][GRN]]+(random()&7))&0xf8)<<2
129 >                        | (gammamap[scanin[x][BLU]]+(random()&7))>>3;
130          }
131                                                  /* send frame */
132          scry_send_frame();
133                                                  /* close file */
134 <        fclose(fp);
134 >        if (pcom != NULL)
135 >                pclose(fp);
136 >        else
137 >                fclose(fp);
138   }
139  
140  
# Line 147 | Line 144 | compgamma()                            /* compute gamma correction map */
144          register int  i, val;
145  
146          for (i = 0; i < 256; i++) {
147 <                val = pow(i/256.0, 1.0/GAMMA) * 256.0;
147 >                val = pow((i+0.5)/256.0, 1.0/GAMMA) * 256.0;
148                  if (val > 248) val = 248;
149                  gammamap[i] = val;
150          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines