--- ray/src/px/ra_tiff.c 1997/07/31 21:26:45 2.10 +++ ray/src/px/ra_tiff.c 1997/08/27 11:10:45 2.13 @@ -38,7 +38,7 @@ struct { float gamcor; /* gamma correction value */ short bradj; /* Radiance exposure adjustment (stops) */ uint16 orient; /* visual orientation (TIFF spec.) */ - float stonits; /* input conversion to nits */ + double stonits; /* input conversion to nits */ float pixrat; /* pixel aspect ratio */ FILE *rfp; /* Radiance stream pointer */ TIFF *tif; /* TIFF pointer */ @@ -241,16 +241,25 @@ initfromtif() /* initialize conversion from TIFF inpu if (cvts.pconf != PLANARCONFIG_CONTIG) quiterr("cannot handle separate Luv planes"); TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT, - SGILOGDATAFMT_FLTXYZ); + SGILOGDATAFMT_FLOAT); cvts.tf = Luv2Color; break; case PHOTOMETRIC_LOGL: SET(C_GRY|C_RFLT|C_TFLT|C_GAMUT); cvts.pconf = PLANARCONFIG_CONTIG; TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT, - SGILOGDATAFMT_FLTY); + SGILOGDATAFMT_FLOAT); cvts.tf = L2Color; break; + case PHOTOMETRIC_YCBCR: + if (cvts.comp == COMPRESSION_JPEG && + cvts.pconf == PLANARCONFIG_CONTIG) { + TIFFSetField(cvts.tif, TIFFTAG_JPEGCOLORMODE, + JPEGCOLORMODE_RGB); + cvts.phot = PHOTOMETRIC_RGB; + } else + quiterr("unsupported photometric type"); + /* fall through */ case PHOTOMETRIC_RGB: SET(C_GAMMA|C_GAMUT); setcolrgam(cvts.gamcor); @@ -407,7 +416,7 @@ initfromrad() /* initialize input from a Radiance pi cvts.comp != COMPRESSION_SGILOG24) quiterr("internal error 2 in initfromrad"); TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT, - SGILOGDATAFMT_FLTXYZ); + SGILOGDATAFMT_FLOAT); cvts.tf = Color2Luv; break; case PHOTOMETRIC_LOGL: @@ -415,7 +424,7 @@ initfromrad() /* initialize input from a Radiance pi if (cvts.comp != COMPRESSION_SGILOG) quiterr("internal error 3 in initfromrad"); TIFFSetField(cvts.tif, TIFFTAG_SGILOGDATAFMT, - SGILOGDATAFMT_FLTY); + SGILOGDATAFMT_FLOAT); cvts.tf = Color2L; break; case PHOTOMETRIC_RGB: @@ -637,7 +646,7 @@ uint32 y; double m = pow(2.,(double)cvts.bradj); register int x; - if (CHK(C_RFLT|C_TFLT) != (C_RFLT|C_TFLT) | !CHK(C_GRY)) + if (CHK(C_RFLT|C_TFLT|C_GRY) != (C_RFLT|C_TFLT|C_GRY)) quiterr("internal error 1 in Color2L"); if (freadscan(cvts.r.colors, cvts.xmax, cvts.rfp) < 0)