| 78 |  |  | 
| 79 |  | /* load and convert TIFF */ | 
| 80 |  | int | 
| 81 | < | tmLoadTIFF(TMbright **lpp, BYTE **cpp, int *xp, int *yp, char *fname, TIFF *tp) | 
| 81 | > | tmLoadTIFF(TMstruct *tms, TMbright **lpp, BYTE **cpp, | 
| 82 | > | int *xp, int *yp, char *fname, TIFF *tp) | 
| 83 |  | { | 
| 84 |  | char    *funcName = fname==NULL ? "tmLoadTIFF" : fname; | 
| 85 | < | RGBPRIMP        inppri = tmTop->monpri; | 
| 85 | > | RGBPRIMP        inppri = tms->monpri; | 
| 86 |  | RGBPRIMS        myprims; | 
| 87 |  | float   *fa; | 
| 88 |  | TIFF    *tif; | 
| 93 |  | double  stonits; | 
| 94 |  | int     y; | 
| 95 |  | /* check arguments */ | 
| 96 | < | if (tmTop == NULL) | 
| 96 | > | if (tms == NULL) | 
| 97 |  | returnErr(TM_E_TMINVAL); | 
| 98 |  | if ((lpp == NULL) | (xp == NULL) | (yp == NULL) | | 
| 99 |  | ((fname == NULL) & (tp == NULL))) | 
| 133 |  | case TC_LOGLUV24: | 
| 134 |  | TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_RAW); | 
| 135 |  | sl.l = (uint32 *)malloc(width*sizeof(uint32)); | 
| 136 | < | tmSetSpace(TM_XYZPRIM, stonits); | 
| 136 | > | tmSetSpace(tms, TM_XYZPRIM, stonits); | 
| 137 |  | break; | 
| 138 |  | case TC_LOGL16: | 
| 139 |  | TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_16BIT); | 
| 140 |  | sl.w = (uint16 *)malloc(width*sizeof(uint16)); | 
| 141 | < | tmSetSpace(tmTop->monpri, stonits); | 
| 141 | > | tmSetSpace(tms, tms->monpri, stonits); | 
| 142 |  | break; | 
| 143 |  | case TC_RGBFLOAT: | 
| 144 |  | sl.f = (float *)malloc(width*3*sizeof(float)); | 
| 145 | < | tmSetSpace(inppri, stonits); | 
| 145 | > | tmSetSpace(tms, inppri, stonits); | 
| 146 |  | break; | 
| 147 |  | case TC_GRYFLOAT: | 
| 148 |  | sl.f = (float *)malloc(width*sizeof(float)); | 
| 149 | < | tmSetSpace(tmTop->monpri, stonits); | 
| 149 | > | tmSetSpace(tms, tms->monpri, stonits); | 
| 150 |  | break; | 
| 151 |  | case TC_RGBSHORT: | 
| 152 |  | sl.w = (uint16 *)malloc(width*3*sizeof(uint16)); | 
| 153 | < | tmSetSpace(inppri, stonits); | 
| 153 | > | tmSetSpace(tms, inppri, stonits); | 
| 154 |  | break; | 
| 155 |  | case TC_GRYSHORT: | 
| 156 |  | sl.w = (uint16 *)malloc(width*sizeof(uint16)); | 
| 157 | < | tmSetSpace(tmTop->monpri, stonits); | 
| 157 | > | tmSetSpace(tms, tms->monpri, stonits); | 
| 158 |  | break; | 
| 159 |  | default: | 
| 160 |  | err = TM_E_CODERR1; | 
| 187 |  | } | 
| 188 |  | switch (tcase) { | 
| 189 |  | case TC_LOGLUV32: | 
| 190 | < | err = tmCvLuv32(*lpp + y*width, | 
| 190 | > | err = tmCvLuv32(tms, *lpp + y*width, | 
| 191 |  | cpp==TM_NOCHROMP ? TM_NOCHROM : *cpp+y*3*width, | 
| 192 |  | sl.l, width); | 
| 193 |  | break; | 
| 194 |  | case TC_LOGLUV24: | 
| 195 | < | err = tmCvLuv24(*lpp + y*width, | 
| 195 | > | err = tmCvLuv24(tms, *lpp + y*width, | 
| 196 |  | cpp==TM_NOCHROMP ? TM_NOCHROM : *cpp+y*3*width, | 
| 197 |  | sl.l, width); | 
| 198 |  | break; | 
| 199 |  | case TC_LOGL16: | 
| 200 | < | err = tmCvL16(*lpp + y*width, sl.w, width); | 
| 200 | > | err = tmCvL16(tms, *lpp + y*width, sl.w, width); | 
| 201 |  | break; | 
| 202 |  | case TC_RGBFLOAT: | 
| 203 | < | err = tmCvColors(*lpp + y*width, | 
| 203 | > | err = tmCvColors(tms, *lpp + y*width, | 
| 204 |  | cpp==TM_NOCHROMP ? TM_NOCHROM : *cpp+y*3*width, | 
| 205 |  | (COLOR *)sl.f, width); | 
| 206 |  | break; | 
| 207 |  | case TC_GRYFLOAT: | 
| 208 | < | err = tmCvGrays(*lpp + y*width, sl.f, width); | 
| 208 | > | err = tmCvGrays(tms, *lpp + y*width, sl.f, width); | 
| 209 |  | break; | 
| 210 |  | case TC_RGBSHORT: | 
| 211 | < | err = tmCvRGB48(*lpp + y*width, | 
| 211 | > | err = tmCvRGB48(tms, *lpp + y*width, | 
| 212 |  | cpp==TM_NOCHROMP ? TM_NOCHROM : *cpp+y*3*width, | 
| 213 |  | (uint16 (*)[3])sl.w, width, DEFGAM); | 
| 214 |  | break; | 
| 215 |  | case TC_GRYSHORT: | 
| 216 | < | err = tmCvGray16(*lpp + y*width, sl.w, width, DEFGAM); | 
| 216 | > | err = tmCvGray16(tms, *lpp + y*width, | 
| 217 | > | sl.w, width, DEFGAM); | 
| 218 |  | break; | 
| 219 |  | default: | 
| 220 |  | err = TM_E_CODERR1; | 
| 255 |  | double gamval, double Lddyn, double Ldmax, char *fname, TIFF *tp) | 
| 256 |  | { | 
| 257 |  | char    *funcName = fname==NULL ? "tmMapTIFF" : fname; | 
| 258 | + | TMstruct        *tms; | 
| 259 |  | TMbright        *lp; | 
| 260 |  | BYTE    *cp; | 
| 261 |  | int     err; | 
| 268 |  | if (Ldmax < MINLDMAX) Ldmax = DEFLDMAX; | 
| 269 |  | if (flags & TM_F_BW) monpri = stdprims; | 
| 270 |  | /* initialize tone mapping */ | 
| 271 | < | if (tmInit(flags, monpri, gamval) == NULL) | 
| 271 | > | if ((tms = tmInit(flags, monpri, gamval)) == NULL) | 
| 272 |  | returnErr(TM_E_NOMEM); | 
| 273 |  | /* load and convert TIFF */ | 
| 274 |  | cp = TM_NOCHROM; | 
| 275 | < | err = tmLoadTIFF(&lp, flags&TM_F_BW ? TM_NOCHROMP : &cp, | 
| 275 | > | err = tmLoadTIFF(tms, &lp, flags&TM_F_BW ? TM_NOCHROMP : &cp, | 
| 276 |  | xp, yp, fname, tp); | 
| 277 |  | if (err != TM_E_OK) { | 
| 278 | < | tmDone(NULL); | 
| 278 | > | tmDone(tms); | 
| 279 |  | return(err); | 
| 280 |  | } | 
| 281 |  | if (cp == TM_NOCHROM) { | 
| 282 |  | *psp = (BYTE *)malloc(*xp * *yp * sizeof(BYTE)); | 
| 283 |  | if (*psp == NULL) { | 
| 284 |  | free((MEM_PTR)lp); | 
| 285 | < | tmDone(NULL); | 
| 285 | > | tmDone(tms); | 
| 286 |  | returnErr(TM_E_NOMEM); | 
| 287 |  | } | 
| 288 |  | } else | 
| 289 |  | *psp = cp; | 
| 290 |  | /* compute color mapping */ | 
| 291 | < | err = tmAddHisto(lp, *xp * *yp, 1); | 
| 291 | > | err = tmAddHisto(tms, lp, *xp * *yp, 1); | 
| 292 |  | if (err != TM_E_OK) | 
| 293 |  | goto done; | 
| 294 | < | err = tmComputeMapping(gamval, Lddyn, Ldmax); | 
| 294 | > | err = tmComputeMapping(tms, gamval, Lddyn, Ldmax); | 
| 295 |  | if (err != TM_E_OK) | 
| 296 |  | goto done; | 
| 297 |  | /* map pixels */ | 
| 298 | < | err = tmMapPixels(*psp, lp, cp, *xp * *yp); | 
| 298 | > | err = tmMapPixels(tms, *psp, lp, cp, *xp * *yp); | 
| 299 |  |  | 
| 300 |  | done:                                   /* clean up */ | 
| 301 |  | free((MEM_PTR)lp); | 
| 302 | < | tmDone(NULL); | 
| 302 | > | tmDone(tms); | 
| 303 |  | if (err != TM_E_OK) {           /* free memory on error */ | 
| 304 |  | free((MEM_PTR)*psp); | 
| 305 |  | *psp = NULL; |