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

Comparing ray/src/px/pvalue.c (file contents):
Revision 2.28 by greg, Fri Oct 1 07:46:26 2004 UTC vs.
Revision 2.30 by greg, Thu Dec 16 21:34:41 2010 UTC

# Line 36 | Line 36 | int  original = 0;             /* convert to original values? */
36   int  wrongformat = 0;           /* wrong input format? */
37   double  gamcor = 1.0;           /* gamma correction */
38  
39 + RGBPRIMP  outprims = stdprims;  /* output primaries for reverse conversion */
40 + RGBPRIMS  myprims;
41 +
42   int  ord[3] = {RED, GRN, BLU};  /* RGB ordering */
43   int  rord[4];                   /* reverse ordering */
44  
# Line 66 | Line 69 | static putfunc_t putpascii, putpint, putpdouble, putpf
69   static void set_io(void);
70   static void pixtoval(void);
71   static void valtopix(void);
69 static void swap16(uint16  *wp, int  n);
70 static void swap32(uint32  *wp, int  n);
71 static void swap64(char  *wp, int  n);
72  
73  
74   static double
# Line 149 | Line 149 | main(
149                          case 'b':               /* brightness values */
150                                  putprim = argv[i][0] == '-' ? BRIGHT : ALL;
151                                  break;
152 <                        case 'p':               /* put primary */
152 >                        case 'p':               /* primary controls */
153                                  switch (argv[i][2]) {
154 +                                /* these two options affect -r conversion */
155 +                                case '\0':
156 +                                        myprims[RED][CIEX] = atof(argv[++i]);
157 +                                        myprims[RED][CIEY] = atof(argv[++i]);
158 +                                        myprims[GRN][CIEX] = atof(argv[++i]);
159 +                                        myprims[GRN][CIEY] = atof(argv[++i]);
160 +                                        myprims[BLU][CIEX] = atof(argv[++i]);
161 +                                        myprims[BLU][CIEY] = atof(argv[++i]);
162 +                                        myprims[WHT][CIEX] = atof(argv[++i]);
163 +                                        myprims[WHT][CIEY] = atof(argv[++i]);
164 +                                        outprims = myprims;
165 +                                        break;
166 +                                case 'x': case 'X': outprims = NULL; break;
167 +                                /* the following options affect +r only */
168                                  case 'r': case 'R': putprim = RED; break;
169                                  case 'g': case 'G': putprim = GRN; break;
170                                  case 'b': case 'B': putprim = BLU; break;
# Line 325 | Line 339 | unkopt:
339                  printargs(i, argv, stdout);
340                  if (expval < .99 || expval > 1.01)
341                          fputexpos(expval, stdout);
342 <                fputformat(COLRFMT, stdout);
342 >                if (outprims != NULL) {
343 >                        if (outprims != stdprims)
344 >                                fputprims(outprims, stdout);
345 >                        fputformat(COLRFMT, stdout);
346 >                } else                          /* XYZ data */
347 >                        fputformat(CIEFMT, stdout);
348                  putchar('\n');
349                  fputsresolu(&picres, stdout);   /* always put resolution */
350                  valtopix();
# Line 524 | Line 543 | int  code;
543   }
544  
545  
527 static void
528 swap16(         /* swap n 16-bit words */
529        register uint16  *wp,
530        int  n
531 )
532 {
533        while (n-- > 0) {
534                *wp = *wp << 8 | ((*wp >> 8) & 0xff);
535                wp++;
536        }
537 }
538
539
540 static void
541 swap32(         /* swap n 32-bit words */
542        register uint32  *wp,
543        int  n
544 )
545 {
546        while (n-- > 0) {
547                *wp = *wp << 24 | ((*wp >> 24) & 0xff) |
548                        (*wp & 0xff00) << 8 | (*wp & 0xff0000) >> 8;
549                wp++;
550        }
551 }
552
553
554 static void
555 swap64(         /* swap n 64-bit words */
556        register char  *wp,
557        int  n
558 )
559 {
560        register int    t;
561
562        while (n-- > 0) {
563                t = wp[0]; wp[0] = wp[7]; wp[7] = t;
564                t = wp[1]; wp[1] = wp[6]; wp[6] = t;
565                t = wp[2]; wp[2] = wp[5]; wp[5] = t;
566                t = wp[3]; wp[3] = wp[4]; wp[4] = t;
567                wp += 8;
568        }
569 }
570
571
546   static int
547   getcascii(              /* get an ascii color value from stream(s) */
548          COLOR  col
# Line 630 | Line 604 | getcfloat(             /* get a float color value from stream(s)
604                          return(-1);
605          }
606          if (swapbytes)
607 <                swap32((uint32 *)vf, 3);
607 >                swap32((char *)vf, 3);
608          setcolor(col, vf[rord[RED]], vf[rord[GRN]], vf[rord[BLU]]);
609          return(0);
610   }
# Line 697 | Line 671 | getcword(              /* get a 16-bit color value from stream(s)
671                          return(-1);
672          }
673          if (swapbytes)
674 <                swap16(vw, 3);
674 >                swap16((char *)vw, 3);
675          setcolor(col, (vw[rord[RED]]+.5)/65536.,
676                          (vw[rord[GRN]]+.5)/65536., (vw[rord[BLU]]+.5)/65536.);
677          return(0);
# Line 744 | Line 718 | getbfloat(             /* get a float brightness value from fin *
718          if (fread((char *)&vf, sizeof(float), 1, fin) != 1)
719                  return(-1);
720          if (swapbytes)
721 <                swap32((uint32 *)&vf, 1);
721 >                swap32((char *)&vf, 1);
722          setcolor(col, vf, vf, vf);
723          return(0);
724   }
# Line 793 | Line 767 | getbword(              /* get a 16-bit brightness value from fin *
767          if (fread((char *)&vw, sizeof(uint16), 1, fin) != 1)
768                  return(-1);
769          if (swapbytes)
770 <                swap16(&vw, 1);
770 >                swap16((char *)&vw, 1);
771          d = (vw+.5)/65536.;
772          setcolor(col, d, d, d);
773          return(0);
# Line 825 | Line 799 | putcfloat(                     /* put a float color to stdout */
799          vf[1] = colval(col,ord[1]);
800          vf[2] = colval(col,ord[2]);
801          if (swapbytes)
802 <                swap32((uint32 *)vf, 3);
802 >                swap32((char *)vf, 3);
803          fwrite((char *)vf, sizeof(float), 3, stdout);
804  
805          return(ferror(stdout) ? -1 : 0);
# Line 899 | Line 873 | putcword(                      /* put a 16-bit color to stdout */
873          i = colval(col,ord[2])*65536.;
874          vw[2] = min(i,65535);
875          if (swapbytes)
876 <                swap16(vw, 3);
876 >                swap16((char *)vw, 3);
877          fwrite((char *)vw, sizeof(uint16), 3, stdout);
878  
879          return(ferror(stdout) ? -1 : 0);
# Line 926 | Line 900 | putbfloat(                     /* put a float brightness to stdout */
900  
901          vf = (*mybright)(col);
902          if (swapbytes)
903 <                swap32((uint32 *)&vf, 1);
903 >                swap32((char *)&vf, 1);
904          fwrite((char *)&vf, sizeof(float), 1, stdout);
905  
906          return(ferror(stdout) ? -1 : 0);
# Line 987 | Line 961 | putbword(                      /* put a 16-bit brightness to stdout */
961          i = (*mybright)(col)*65536.;
962          vw = min(i,65535);
963          if (swapbytes)
964 <                swap16(&vw, 1);
964 >                swap16((char *)&vw, 1);
965          fwrite((char *)&vw, sizeof(uint16), 1, stdout);
966  
967          return(ferror(stdout) ? -1 : 0);
# Line 1014 | Line 988 | putpfloat(                     /* put a float primary to stdout */
988  
989          vf = colval(col,putprim);
990          if (swapbytes)
991 <                swap32((uint32 *)&vf, 1);
991 >                swap32((char *)&vf, 1);
992          fwrite((char *)&vf, sizeof(float), 1, stdout);
993  
994          return(ferror(stdout) ? -1 : 0);
# Line 1075 | Line 1049 | putpword(                      /* put a 16-bit primary to stdout */
1049          i = colval(col,putprim)*65536.;
1050          vw = min(i,65535);
1051          if (swapbytes)
1052 <                swap16(&vw, 1);
1052 >                swap16((char *)&vw, 1);
1053          fwrite((char *)&vw, sizeof(uint16), 1, stdout);
1054  
1055          return(ferror(stdout) ? -1 : 0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines