diff --git a/.cvsignore b/.cvsignore index 9056df7..a35c86d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ Argyll_V1.0.1_autotools.patch.gz -Argyll_V1.0.1_src.zip +Argyll_V1.0.2_src.zip diff --git a/V1.0.1_patches.txt b/V1.0.1_patches.txt deleted file mode 100644 index 3ffd9dc..0000000 --- a/V1.0.1_patches.txt +++ /dev/null @@ -1,1322 +0,0 @@ -diff --strip-trailing-cr -c -r Argyll_V1.0.1/doc/printtarg.html Argyll_V1.0.2/doc/printtarg.html -*** Argyll_V1.0.1/doc/printtarg.html Mon Jul 14 14:11:45 2008 ---- Argyll_V1.0.2/doc/printtarg.html Sun Jul 20 02:25:32 2008 -*************** -*** 95,101 **** - href="#C">-C              - Don't use TIFF compression
-  -N              -! Use TIFF alpha N channels more than 4
-
 -R rsnum        ---- 95,103 ---- - href="#C">-C              - Don't use TIFF compression

-  -N              -! Use TIFF alpha N channels more than 4
-!  -Q nbits        -! Quantize test values to fit in nbits
-
 -R rsnum        -*************** -*** 320,325 **** ---- 322,343 ---- - flag causes all the channels greater than 4 to be labelled as "Alpha" - channels, which may be more palatable.
-
-+ -Q: Normally -+ the target device values are floating point numbers that may get -+ rounded and quantized in the process of printing them or reproducing -+ them on the printing or display device. If some of this quantization -+ can be accounted for, it may improve the accuracy of the resulting -+ profile, and the Q parameter -+ allows this quantization to be specified. The parameter is the number -+ of binary digits (bits) that the device values should be quantized to. -+ In many systems the right value would be 8 bits. Note that if 8 bit TIFF output is selected (-t) that the values will by default -+ be quanized to 8 bits, and that if 16 bit TIFF output is selected (-T) that the values will by default -+ be quanized to 16 bits.
-+
- The -R parameter allows setting the random - layout seed. Normally the seed is chosen at random, but sometimes it is - useful to be able to generate a chart with the same layout, so a -diff --strip-trailing-cr -c -r Argyll_V1.0.1/h/config.h Argyll_V1.0.2/h/config.h -*** Argyll_V1.0.1/h/config.h Mon Jul 14 14:11:41 2008 ---- Argyll_V1.0.2/h/config.h Sun Jul 20 02:25:28 2008 -*************** -*** 10,17 **** - /* minor number = 8 bits */ - /* major number = 8 bits */ - -! #define ARGYLL_VERSION 0x01001 -! #define ARGYLL_VERSION_STR "1.0.1" - - /* Maximum file path length */ - #define MAXNAMEL 512 ---- 10,17 ---- - /* minor number = 8 bits */ - /* major number = 8 bits */ - -! #define ARGYLL_VERSION 0x01002 -! #define ARGYLL_VERSION_STR "1.0.2" - - /* Maximum file path length */ - #define MAXNAMEL 512 -diff --strip-trailing-cr -c -r Argyll_V1.0.1/imdi/Jamfile Argyll_V1.0.2/imdi/Jamfile -*** Argyll_V1.0.1/imdi/Jamfile Mon Jul 14 14:11:32 2008 ---- Argyll_V1.0.2/imdi/Jamfile Sun Jul 20 02:25:18 2008 -*************** -*** 49,55 **** - # TIFF file monochrome conversion utlity - #Main greytiff : greytiff.c ; - Main greytiff : greytiff.c : : : ../spectro ../xicc ../gamut ../rspl ../cgats $(TIFFINC) -! : : ../xicc/libxicc ../gamut/libgamut ../rspl/librspl ../cgats/libcgats $(TIFFLIB) ; - - # ssort generation code - #Main ssort : ssort.c ; ---- 49,56 ---- - # TIFF file monochrome conversion utlity - #Main greytiff : greytiff.c ; - Main greytiff : greytiff.c : : : ../spectro ../xicc ../gamut ../rspl ../cgats $(TIFFINC) -! : : ../xicc/libxicc ../gamut/libgamut ../rspl/librspl ../cgats/libcgats -! ../plot/libplot $(TIFFLIB) ; - - # ssort generation code - #Main ssort : ssort.c ; -diff --strip-trailing-cr -c -r Argyll_V1.0.1/log.txt Argyll_V1.0.2/log.txt -*** Argyll_V1.0.1/log.txt Mon Jul 14 14:11:03 2008 ---- Argyll_V1.0.2/log.txt Sun Jul 20 02:24:46 2008 -*************** -*** 3,8 **** ---- 3,40 ---- - ===================== - - -+ Version 1.0.2 bug fix release (open) -+ ----------------------------- -+ -+ * Modified MSWindows display enumeration to not ignore displays -+ that have EnumDisplayDevices() fail, but ignore displays -+ with a name \\.\\DISPLAYV*. This us to get it working under VMWARE. -+ -+ * Added device target value quantization option to -+ target/printtarg, as well as making it default for TIFF output files. -+ -+ * Fixed a bad memory leak in render/render.c, that was -+ affecting target/printtarg. Probably improved the -+ anti-aliased rendering speed too. -+ -+ * Fix typo in spectro/dispwin.c that sometimes causes a crash -+ when the system has XRandR 1.2. -+ -+ * Fix latent bug in xicc/xfit.c that could affect -+ profiles that are not white point corrected (ie. colorof -u inputdevice). -+ -+ * Fixed problem with an i1pro that has had it's -+ EEProm reset after a firmware upgrade - a previous -+ calibration EEPRom integration time of 0.0 is increased -+ to the minimum integration time to prevent divide by zero etc. -+ -+ * Added Argyll version number to the i1pro calibration file, -+ to try and make sure that old files are invalidated with -+ each potentialy incompatible update. -+ -+ * Fix LUT entry depth reporting bug, and add yet another -+ workaround for the GCC/PPC optimizer bug. -+ - Version 1.0.1 bug fix release (14th July 2008) - ----------------------------- - -diff --strip-trailing-cr -c -r Argyll_V1.0.1/makepackagebin.sh Argyll_V1.0.2/makepackagebin.sh -*** Argyll_V1.0.1/makepackagebin.sh Mon Jul 14 14:11:03 2008 ---- Argyll_V1.0.2/makepackagebin.sh Sun Jul 20 02:24:46 2008 -*************** -*** 25,30 **** ---- 25,32 ---- - # Set the environment string VERSION from the #define, ie 1.0.0 - VERSION=`grep ARGYLL_VERSION_STR h/config.h | sed 's/#define ARGYLL_VERSION_STR //' | sed 's/"//g'` - -+ echo "About to make Argyll binary distribution $PACKAGE" -+ - TOPDIR=Argyll_V$VERSION - - if [ X$OS != "XWindows_NT" ] ; then -diff --strip-trailing-cr -c -r Argyll_V1.0.1/profile/Jamfile Argyll_V1.0.2/profile/Jamfile -*** Argyll_V1.0.1/profile/Jamfile Mon Jul 14 14:11:35 2008 ---- Argyll_V1.0.2/profile/Jamfile Sun Jul 20 02:25:21 2008 -*************** -*** 26,32 **** - Library libprof : profin.c profout.c ; - - -! LINKLIBS = ../rspl/librspl ../icc/libicc ../cgats/libcgats ../numlib/libnum ; - - # Simple profile generator - Main simpprof : simpprof.c ; ---- 26,32 ---- - Library libprof : profin.c profout.c ; - - -! LINKLIBS = ../rspl/librspl ../icc/libicc ../cgats/libcgats ../numlib/libnum ../plot/libplot ; - - # Simple profile generator - Main simpprof : simpprof.c ; -diff --strip-trailing-cr -c -r Argyll_V1.0.1/render/render.c Argyll_V1.0.2/render/render.c -*** Argyll_V1.0.1/render/render.c Mon Jul 14 14:11:37 2008 ---- Argyll_V1.0.2/render/render.c Sun Jul 20 02:25:23 2008 -*************** -*** 162,172 **** ---- 162,176 ---- - int noix; /* Number in x list */ - color2d *pixv0, *_pixv0; /* Storage for pixel values around current */ - color2d *pixv1, *_pixv1; -+ sobol *so; /* Random sampler for anti-aliasing */ - int i, j; - - double rx0, rx1, ry0, ry1; /* Box being processed, newest sample is rx1, ry1 */ - int x, y; /* Pixel x & y index */ - -+ if ((so = new_sobol(2)) == NULL) -+ return 1; -+ - switch (s->csp) { - case w_2d: /* Video style grey */ - samplesperpixel = 1; -*************** -*** 373,382 **** - || pixv0[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv0[x-1], cc) - || pixv1[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv1[x-1], cc)) { - double nn = 0; -- sobol *so; - -! if ((so = new_sobol(2)) == NULL) -! return 1; - - for (j = 0; j < s->ncc; j++) - cc[j] = 0.0; ---- 377,384 ---- - || pixv0[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv0[x-1], cc) - || pixv1[x-1][PRIX2D] != cc[PRIX2D] && colordiff(s, pixv1[x-1], cc)) { - double nn = 0; - -! so->reset(so); - - for (j = 0; j < s->ncc; j++) - cc[j] = 0.0; -*************** -*** 418,424 **** - cc[1] = 0.0; - cc[2] = 1.0; - #endif -- - } else { - - /* Compute output value as mean of surrounding samples */ ---- 420,425 ---- -*************** -*** 451,457 **** - p[j] = (int)(cc[j] + 0.5); - } else { - for (j = 0; j < s->ncc; j++) -! p[j] = (int)(65525.0 * cc[j] + 0.5); - } - } - } ---- 452,458 ---- - p[j] = (int)(cc[j] + 0.5); - } else { - for (j = 0; j < s->ncc; j++) -! p[j] = (int)(65535.0 * cc[j] + 0.5); - } - } - } -*************** -*** 479,484 **** ---- 480,487 ---- - _TIFFfree(outbuf); - TIFFClose(wh); /* Close Output file */ - -+ so->del(so); -+ - return 0; - } - -diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/Jamfile Argyll_V1.0.2/spectro/Jamfile -*** Argyll_V1.0.1/spectro/Jamfile Mon Jul 14 14:11:29 2008 ---- Argyll_V1.0.2/spectro/Jamfile Sun Jul 20 02:25:15 2008 -*************** -*** 1,7 **** - - -! PREF_CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on -! #PREF_CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags - PREF_LINKFLAGS += $(LINKDEBUGFLAG) ; - - # Setup the right hardware access libraries ---- 1,7 ---- - - -! #PREF_CCFLAGS += $(CCOPTFLAG) ; # Turn optimisation on -! PREF_CCFLAGS += $(CCDEBUGFLAG) ; # Debugging flags - PREF_LINKFLAGS += $(LINKDEBUGFLAG) ; - - # Setup the right hardware access libraries -diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/dispcal.c Argyll_V1.0.2/spectro/dispcal.c -*** Argyll_V1.0.1/spectro/dispcal.c Mon Jul 14 14:11:29 2008 ---- Argyll_V1.0.2/spectro/dispcal.c Sun Jul 20 02:25:15 2008 -*************** -*** 766,771 **** ---- 766,774 ---- - #if defined(__APPLE__) && defined(__POWERPC__) - - /* Workaround for a ppc gcc 3.3 optimiser bug... */ -+ /* It seems to cause a segmentation fault instead of */ -+ /* converting an integer loop index into a float, */ -+ /* when there are sufficient variables in play. */ - static int gcc_bug_fix(int i) { - static int nn; - nn += i; -*************** -*** 1737,1743 **** - double vct, vct_de; - double vdt, vdt_de; - double cgamma, w[3], wp[2]; -! int sigbits; /* Number of significant bits in VideoLUT/display/instrument */ - - if ((rv = dr->read(dr, tcols, 3, 1, 3, 1, 0)) != 0) { - dr->del(dr); ---- 1740,1746 ---- - double vct, vct_de; - double vdt, vdt_de; - double cgamma, w[3], wp[2]; -! int sigbits = 0; /* Number of significant bits in VideoLUT/display/instrument */ - - if ((rv = dr->read(dr, tcols, 3, 1, 3, 1, 0)) != 0) { - dr->del(dr); -*************** -*** 1785,1790 **** ---- 1788,1796 ---- - /* Do the test */ - for (n = 0; n < res_samps; n++) { - double v; -+ #if defined(__APPLE__) && defined(__POWERPC__) -+ gcc_bug_fix(sigbits); -+ #endif - v = (5 << (sigbits-3))/((1 << sigbits) - 1.0); - if ((n % 3) == 2) - v += 1.0/((1 << sigbits) - 1.0); -*************** -*** 1900,1909 **** - printf("White Visual Color Temperature = %.0fK, DE to locus = %4.1f\n",vct,vct_de); - printf("White Visual Daylight Temperature = %.0fK, DE to locus = %4.1f\n",vdt,vdt_de); - #ifdef MEAS_RES -! if (sigbits == 0) { -! warning("Unable to determine LUT entry bit depth - problems ?"); -! } else if (verb) { -! printf("Effective LUT entry depth seems to be %d bits\n",sigbits); - } - #endif /* MEAS_RES */ - dr->del(dr); ---- 1906,1917 ---- - printf("White Visual Color Temperature = %.0fK, DE to locus = %4.1f\n",vct,vct_de); - printf("White Visual Daylight Temperature = %.0fK, DE to locus = %4.1f\n",vdt,vdt_de); - #ifdef MEAS_RES -! if (doreport == 1) { -! if (sigbits == 0) { -! warning("Unable to determine LUT entry bit depth - problems ?"); -! } else if (verb) { -! printf("Effective LUT entry depth seems to be %d bits\n",sigbits); -! } - } - #endif /* MEAS_RES */ - dr->del(dr); -diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/dispwin.c Argyll_V1.0.2/spectro/dispwin.c -*** Argyll_V1.0.1/spectro/dispwin.c Mon Jul 14 14:11:31 2008 ---- Argyll_V1.0.2/spectro/dispwin.c Sun Jul 20 02:25:17 2008 -*************** -*** 108,113 **** ---- 108,126 ---- - - debugrr2((errout, "MonitorEnumProc() called with hMonitor = 0x%x\n",hMonitor)); - -+ /* Get some more information */ -+ pmi.cbSize = sizeof(MONITORINFOEX); -+ if (GetMonitorInfo(hMonitor, (MONITORINFO *)&pmi) == 0) { -+ debugrr("get_displays failed GetMonitorInfo - ignoring display\n"); -+ return TRUE; -+ } -+ -+ /* See if it seems to be a pseudo-display */ -+ if (strncmp(pmi.szDevice, "\\\\.\\DISPLAYV", 12) == 0) { -+ debugrr("Seems to be invisible pseudo-display - ignoring it\n"); -+ return TRUE; -+ } -+ - /* Add the display to the list */ - if (disps == NULL) { - if ((disps = (disppath **)calloc(sizeof(disppath *), 1 + 1)) == NULL) { -*************** -*** 131,142 **** - return FALSE; - } - -- pmi.cbSize = sizeof(MONITORINFOEX); -- if (GetMonitorInfo(hMonitor, (MONITORINFO *)&pmi) == 0) { -- debugrr("get_displays failed GetMonitorInfo\n"); -- return FALSE; -- } -- - if ((disps[ndisps]->name = strdup(pmi.szDevice)) == NULL) { - debugrr("malloc failed\n"); - return FALSE; ---- 144,149 ---- -*************** -*** 240,246 **** - - /* Now locate detailed information about displays */ - for (i = 0; ; i++) { -! if (disps[i] == NULL) - break; - - dd.cb = sizeof(dd); ---- 247,253 ---- - - /* Now locate detailed information about displays */ - for (i = 0; ; i++) { -! if (disps == NULL || disps[i] == NULL) - break; - - dd.cb = sizeof(dd); -*************** -*** 250,255 **** ---- 257,265 ---- - for (j = 0; ;j++) { - if ((*pEnumDisplayDevices)(disps[i]->name, j, &dd, 0) == 0) { - debugrr2((errout,"EnumDisplayDevices failed on '%s' Mon = %d\n",disps[i]->name,j)); -+ if (j == 0) { -+ strcpy(disps[i]->monid, ""); /* We won't be able to set a profile */ -+ } - break; - } - if (callback_ddebug) { -*************** -*** 260,274 **** - fprintf(errout,"Mon %d, key '%s'\n",j,dd.DeviceKey); - } - if (j == 0) { -- strcpy(disps[i]->monname, dd.DeviceName); - strcpy(disps[i]->monid, dd.DeviceID); - } - } -- if (j == 0) { /* Hmm. Ignore this display */ -- del_disppath(disps, i); -- i--; -- continue; -- } - - sprintf(buf,"%s, at %d, %d, width %d, height %d%s",disps[i]->name+4, - disps[i]->sx, disps[i]->sy, disps[i]->sw, disps[i]->sh, ---- 270,278 ---- -*************** -*** 626,632 **** - disps[ndisps]->sx, disps[ndisps]->sy, disps[ndisps]->sw, disps[ndisps]->sh); - - /* See if it is a clone */ -! for (k = 0; 0 < ndisps; k++) { - if (disps[k]->crtc == disps[ndisps]->crtc) { - sprintf(desc1, "[ Clone of %d ]",k+1); - strcat(desc2, desc1); ---- 630,636 ---- - disps[ndisps]->sx, disps[ndisps]->sy, disps[ndisps]->sw, disps[ndisps]->sh); - - /* See if it is a clone */ -! for (k = 0; k < ndisps; k++) { - if (disps[k]->crtc == disps[ndisps]->crtc) { - sprintf(desc1, "[ Clone of %d ]",k+1); - strcat(desc2, desc1); -*************** -*** 2832,2838 **** - dispwin_del(p); - return NULL; - } -- strcpy(p->monname, disp->monname); - strcpy(p->monid, disp->monid); - - disp_hsz = GetDeviceCaps(p->hdc, HORZSIZE); /* mm */ ---- 2836,2841 ---- -diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/dispwin.h Argyll_V1.0.2/spectro/dispwin.h -*** Argyll_V1.0.1/spectro/dispwin.h Mon Jul 14 14:11:31 2008 ---- Argyll_V1.0.2/spectro/dispwin.h Sun Jul 20 02:25:17 2008 -*************** -*** 78,84 **** - int sx,sy; /* Displays offset in pixels */ - int sw,sh; /* Displays width and height in pixels*/ - #ifdef NT -- char monname[32]; /* Monitor Name */ - char monid[128]; /* Monitor ID */ - int prim; /* NZ if primary display monitor */ - #endif /* NT */ ---- 78,83 ---- -*************** -*** 163,169 **** - char *callout; /* if not NULL - set color Shell callout routine */ - - #ifdef NT -- char monname[32]; /* Monitor Name (ie. '\\.\DISPLAY1\Monitor0') */ - char monid[128]; /* Monitor ID (ie. 'Monitor\MEA1773\{4D36E96E-E325-11CE-BFC1-08002BE10318}\0015'*/ - HDC hdc; /* Handle to display */ - char *AppName; ---- 162,167 ---- -diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/huey.c Argyll_V1.0.2/spectro/huey.c -*** Argyll_V1.0.1/spectro/huey.c Mon Jul 14 14:11:30 2008 ---- Argyll_V1.0.2/spectro/huey.c Sun Jul 20 02:25:16 2008 -*************** -*** 62,68 **** - static inst_code huey_check_unlock(huey *p); - - #define CALFACTOR 3.428 /* Emissive magic calibration factor */ -! #define AMB_SCALE_FACTOR 7.806e-3 /* Ambient mode scale factor */ - /* This is only approximate, and were derived */ - /* by matching readings from the i1pro. */ - ---- 62,69 ---- - static inst_code huey_check_unlock(huey *p); - - #define CALFACTOR 3.428 /* Emissive magic calibration factor */ -! //#define AMB_SCALE_FACTOR 7.806e-3 /* Ambient mode scale factor */ -! #define AMB_SCALE_FACTOR 5.772e-3 /* Ambient mode scale factor */ - /* This is only approximate, and were derived */ - /* by matching readings from the i1pro. */ - -diff --strip-trailing-cr -c -r Argyll_V1.0.1/spectro/i1pro_imp.c Argyll_V1.0.2/spectro/i1pro_imp.c -*** Argyll_V1.0.1/spectro/i1pro_imp.c Mon Jul 14 14:11:30 2008 ---- Argyll_V1.0.2/spectro/i1pro_imp.c Sun Jul 20 02:25:16 2008 -*************** -*** 232,238 **** - if ((m = (i1proimp *)calloc(1, sizeof(i1proimp))) == NULL) { - DBG((dbgo,"add_i1proimp malloc %d bytes failed (1)\n",sizeof(i1proimp))) - if (p->verb) printf("Malloc %d bytes failed (1)\n",sizeof(i1proimp)); -! I1PRO_INT_MALLOC; - } - m->p = p; - ---- 232,238 ---- - if ((m = (i1proimp *)calloc(1, sizeof(i1proimp))) == NULL) { - DBG((dbgo,"add_i1proimp malloc %d bytes failed (1)\n",sizeof(i1proimp))) - if (p->verb) printf("Malloc %d bytes failed (1)\n",sizeof(i1proimp)); -! return I1PRO_INT_MALLOC; - } - m->p = p; - -*************** -*** 553,559 **** - case i1p_refl_spot: - s->reflective = 1; - s->adaptive = 1; -! s->inttime = 0.02366; /* Should get this from the log */ - - s->dadaptime = 0.10; - s->wadaptime = 0.10; ---- 553,559 ---- - case i1p_refl_spot: - s->reflective = 1; - s->adaptive = 1; -! s->inttime = 0.02366; /* Should get this from the log ?? */ - - s->dadaptime = 0.10; - s->wadaptime = 0.10; -*************** -*** 962,975 **** - || (s->emiss && !s->adaptive && *calc == inst_calc_man_em_dark) - || (s->trans && !s->adaptive && *calc == inst_calc_man_trans_dark)) { - -- DBG((dbgo,"Doing initial black calibration with current int_time %f, gainmode %d\n", s->inttime, s->gainmode)) -- - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime); - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, s->gainmode)) - != I1PRO_OK) - return ev; - if (s->emiss && !s->scan && !s->adaptive) { - nummeas = i1pro_comp_nummeas(p, s->dcaltime2, s->dark_int_time2); - if ((ev = i1pro_dark_measure(p, s->dark_data2, nummeas, &s->dark_int_time2, - s->gainmode)) != I1PRO_OK) - return ev; ---- 962,976 ---- - || (s->emiss && !s->adaptive && *calc == inst_calc_man_em_dark) - || (s->trans && !s->adaptive && *calc == inst_calc_man_trans_dark)) { - - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime); -+ -+ DBG((dbgo,"Doing initial black calibration with dcaltime %f, int_time %f, nummeas %d, gainmode %d\n", s->dcaltime, s->inttime, nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, s->gainmode)) - != I1PRO_OK) - return ev; - if (s->emiss && !s->scan && !s->adaptive) { - nummeas = i1pro_comp_nummeas(p, s->dcaltime2, s->dark_int_time2); -+ DBG((dbgo,"Doing 2nd initial black calibration with dcaltime2 %f, dark_int_time2 %f, nummeas %d, gainmode %d\n", s->dcaltime2, s->dark_int_time2, nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->dark_data2, nummeas, &s->dark_int_time2, - s->gainmode)) != I1PRO_OK) - return ev; -*************** -*** 990,1016 **** - /* The black reference is probably temeprature dependent, but */ - /* there's not much we can do about this. */ - -- DBG((dbgo,"Doing adaptive interpolated black calibration\n")) - - s->idark_int_time[0] = 0.01; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]); - if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0)) - != I1PRO_OK) - return ev; - - s->idark_int_time[1] = 1.0; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[1]); - if ((ev = i1pro_dark_measure(p, s->idark_data[1], nummeas, &s->idark_int_time[1], 0)) - != I1PRO_OK) - return ev; - - s->idark_int_time[2] = 0.01; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]); - if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1)) - != I1PRO_OK) - return ev; - - s->idark_int_time[3] = 1.0; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[3]); - if ((ev = i1pro_dark_measure(p, s->idark_data[3], nummeas, &s->idark_int_time[3], 1)) - != I1PRO_OK) ---- 991,1020 ---- - /* The black reference is probably temeprature dependent, but */ - /* there's not much we can do about this. */ - - - s->idark_int_time[0] = 0.01; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]); -+ DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[0] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[0], nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0)) - != I1PRO_OK) - return ev; - - s->idark_int_time[1] = 1.0; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[1]); -+ DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[1] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[1], nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->idark_data[1], nummeas, &s->idark_int_time[1], 0)) - != I1PRO_OK) - return ev; - - s->idark_int_time[2] = 0.01; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]); -+ DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[2] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[2], nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1)) - != I1PRO_OK) - return ev; - - s->idark_int_time[3] = 1.0; -+ DBG((dbgo,"Doing adaptive interpolated black calibration, dcaltime %f, idark_int_time[3] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[3], nummeas, s->gainmode)) - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[3]); - if ((ev = i1pro_dark_measure(p, s->idark_data[3], nummeas, &s->idark_int_time[3], 1)) - != I1PRO_OK) -*************** -*** 1062,1068 **** - - } - -! /* Deal with an emsisive/transmisive adaptive black reference */ - /* when in scan mode. */ - if ((s->emiss && s->adaptive && s->scan && *calc == inst_calc_man_em_dark) - || (s->trans && s->adaptive && s->scan && *calc == inst_calc_man_trans_dark)) { ---- 1066,1072 ---- - - } - -! /* Deal with an emissive/transmisive adaptive black reference */ - /* when in scan mode. */ - if ((s->emiss && s->adaptive && s->scan && *calc == inst_calc_man_em_dark) - || (s->trans && s->adaptive && s->scan && *calc == inst_calc_man_trans_dark)) { -*************** -*** 1072,1087 **** - /* but we don't know what gain mode will be used, so measure both, */ - /* and choose the appropriate one on the fly. */ - -- DBG((dbgo,"Doing adaptive scan black calibration\n")) - - s->idark_int_time[0] = s->inttime; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]); - if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0)) - != I1PRO_OK) - return ev; - - s->idark_int_time[2] = s->inttime; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]); - if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1)) - != I1PRO_OK) - return ev; ---- 1076,1092 ---- - /* but we don't know what gain mode will be used, so measure both, */ - /* and choose the appropriate one on the fly. */ - - - s->idark_int_time[0] = s->inttime; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[0]); -+ DBG((dbgo,"Doing adaptive scan black calibration, dcaltime %f, idark_int_time[0] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[0], nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->idark_data[0], nummeas, &s->idark_int_time[0], 0)) - != I1PRO_OK) - return ev; - - s->idark_int_time[2] = s->inttime; - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->idark_int_time[2]); -+ DBG((dbgo,"Doing adaptive scan black calibration, dcaltime %f, idark_int_time[2] %f, nummeas %d, gainmode %d\n", s->dcaltime, s->idark_int_time[2], nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->idark_data[2], nummeas, &s->idark_int_time[2], 1)) - != I1PRO_OK) - return ev; -*************** -*** 1146,1154 **** - s->cal_valid = 0; - - if (*calc == inst_calc_man_ref_white) { -- DBG((dbgo,"Doing another black calibration with min inttime %f, gainmode %d\n", -- s->inttime,s->gainmode)) - nummeas = i1pro_comp_nummeas(p, s->dadaptime, s->inttime); - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, - s->gainmode)) != I1PRO_OK) - return ev; ---- 1151,1158 ---- - s->cal_valid = 0; - - if (*calc == inst_calc_man_ref_white) { - nummeas = i1pro_comp_nummeas(p, s->dadaptime, s->inttime); -+ DBG((dbgo,"Doing another black calibration with dadaptime %f, min inttime %f, nummeas %d, gainmode %d\n", s->dadaptime, s->inttime, nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, - s->gainmode)) != I1PRO_OK) - return ev; -*************** -*** 1186,1194 **** - s->inttime,s->gainmode)) - - if (*calc == inst_calc_man_ref_white) { -- DBG((dbgo,"Doing final black calibration with opt inttime %f, gainmode %d\n", -- s->inttime,s->gainmode)) - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime); - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, - s->gainmode)) != I1PRO_OK) - return ev; ---- 1190,1197 ---- - s->inttime,s->gainmode)) - - if (*calc == inst_calc_man_ref_white) { - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime); -+ DBG((dbgo,"Doing final black calibration with dcaltime %f, opt inttime %f, nummeas %d, gainmode %d\n", s->dcaltime, s->inttime, nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, - s->gainmode)) != I1PRO_OK) - return ev; -*************** -*** 1254,1262 **** - } - - if (*calc == inst_calc_man_ref_white) { -- DBG((dbgo,"Doing final black calibration with opt inttime %f, gainmode %d\n", -- s->inttime,s->gainmode)) - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime); - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, - s->gainmode)) != I1PRO_OK) - return ev; ---- 1257,1264 ---- - } - - if (*calc == inst_calc_man_ref_white) { - nummeas = i1pro_comp_nummeas(p, s->dcaltime, s->inttime); -+ DBG((dbgo,"Doing final black calibration with dcaltime %f, opt inttime %f, nummeas %d, gainmode %d\n", s->dcaltime, s->inttime, nummeas, s->gainmode)) - if ((ev = i1pro_dark_measure(p, s->dark_data, nummeas, &s->inttime, - s->gainmode)) != I1PRO_OK) - return ev; -*************** -*** 1616,1622 **** - - DISDPLOT - -! DBG((dbgo,"Doing on the fly black calibration with nummeas %d int_time %f, gainmode %d\n", - nummeas, s->inttime, s->gainmode)) - - if ((ev = i1pro_dark_measure_1(p, nummeas, &s->inttime, s->gainmode, buf, bsize)) ---- 1618,1624 ---- - - DISDPLOT - -! DBG((dbgo,"Doing on the fly black calibration_1 with nummeas %d int_time %f, gainmode %d\n", - nummeas, s->inttime, s->gainmode)) - - if ((ev = i1pro_dark_measure_1(p, nummeas, &s->inttime, s->gainmode, buf, bsize)) -*************** -*** 1658,1663 **** ---- 1660,1666 ---- - - /* Complete black reference measurement */ - if (s->reflective) { -+ DBG((dbgo,"Doing black calibration_2 with nummeas %d, inttime %f, gainmode %d\n", nummeas, s->inttime,s->gainmode)) - if ((ev = i1pro_dark_measure_2(p, s->dark_data, nummeas, s->inttime, s->gainmode, - buf, bsize)) != I1PRO_OK) { - free_dmatrix(specrd, 0, nvals-1, 0, m->nwav-1); -*************** -*** 1743,1748 **** ---- 1746,1753 ---- - i1key offst = 0; /* Offset to copy to use */ - i1pro_code ev = I1PRO_OK; - -+ DBG((dbgo,"Doing Restoring reflective spot calibration information from the EEProm\n")) -+ - chsum1 = m->data->checksum(m->data, 0); - if ((chsum2 = m->data->get_int(m->data, key_checksum, 0)) == NULL || chsum1 != *chsum2) { - offst = key_2logoff; -*************** -*** 1770,1775 **** ---- 1775,1782 ---- - return I1PRO_OK; - } - s->inttime = dp[0]; -+ if (s->inttime < m->min_int_time) /* Hmm. EEprom is occasionaly screwed up */ -+ s->inttime = m->min_int_time; - - /* Get the dark data */ - if ((ip = m->data->get_ints(m->data, &count, key_darkreading + offst)) == NULL -*************** -*** 1785,1790 **** ---- 1792,1798 ---- - } - - /* Convert to calibration data */ -+ DBG((dbgo,"Doing black calibration_2 with nummeas %d, inttime %f, gainmode %d\n", 1, s->inttime,s->gainmode)) - if ((ev = i1pro_dark_measure_2(p, s->dark_data, 1, s->inttime, s->gainmode, - buf, 256)) != I1PRO_OK) { - if (p->verb) printf("Failed to convert EEProm dark data to calibration\n"); -*************** -*** 2074,2079 **** ---- 2082,2088 ---- - FILE *fp; - i1pnonv x; - int ss; -+ int argyllversion = ARGYLL_VERSION; - - strcpy(nmode, "w"); - #if defined(O_BINARY) || defined(_O_BINARY) -*************** -*** 2101,2106 **** ---- 2110,2116 ---- - ss = sizeof(i1pro_state) + sizeof(i1proimp); - - /* Some file identification */ -+ write_ints(&x, fp, &argyllversion, 1); - write_ints(&x, fp, &ss, 1); - write_ints(&x, fp, &m->serno, 1); - write_ints(&x, fp, &m->nraw, 1); -*************** -*** 2174,2179 **** ---- 2184,2190 ---- - char *path; - FILE *fp; - i1pnonv x; -+ int argyllversion; - int ss, serno, nraw, nwav1, nwav2, chsum1, chsum2; - - strcpy(nmode, "r"); -*************** -*** 2199,2210 **** ---- 2210,2223 ---- - x.chsum = 0; - - /* Check the file identification */ -+ read_ints(&x, fp, &argyllversion, 1); - read_ints(&x, fp, &ss, 1); - read_ints(&x, fp, &serno, 1); - read_ints(&x, fp, &nraw, 1); - read_ints(&x, fp, &nwav1, 1); - read_ints(&x, fp, &nwav2, 1); - if (x.ef != 0 -+ || argyllversion != ARGYLL_VERSION - || ss != (sizeof(i1pro_state) + sizeof(i1proimp)) - || serno != m->serno - || nraw != m->nraw -*************** -*** 2294,2299 **** ---- 2307,2313 ---- - rewind(fp); - - /* Read the identification */ -+ read_ints(&x, fp, &argyllversion, 1); - read_ints(&x, fp, &ss, 1); - read_ints(&x, fp, &m->serno, 1); - read_ints(&x, fp, &m->nraw, 1); -diff --strip-trailing-cr -c -r Argyll_V1.0.1/target/printtarg.c Argyll_V1.0.2/target/printtarg.c -*** Argyll_V1.0.1/target/printtarg.c Mon Jul 14 14:11:33 2008 ---- Argyll_V1.0.2/target/printtarg.c Sun Jul 20 02:25:19 2008 -*************** -*** 2497,2502 **** ---- 2497,2503 ---- - fprintf(stderr," -T [res] Output 16 bit TIFF raster file, optional res DPI (default 100)\n"); - fprintf(stderr," -C Don't use TIFF compression\n"); - fprintf(stderr," -N Use TIFF alpha N channels more than 4\n"); -+ fprintf(stderr," -Q nbits Quantize test values to fit in nbits\n"); - fprintf(stderr," -R rsnum Use given random start number\n"); - fprintf(stderr," -x pattern Use given strip indexing pattern (Default = \"%s\")\n",DEF_SIXPAT); - fprintf(stderr," -y pattern Use given patch indexing pattern (Default = \"%s\")\n",DEF_PIXPAT); -*************** -*** 2521,2526 **** ---- 2522,2528 ---- - double pscale = 1.0; /* Patch size scale */ - double sscale = 1.0; /* Spacer size scale */ - int rand = 1; -+ int qbits = 0; /* Quantization bits */ - int oft = 0; /* Ouput File type, 0 = PS, 1 = EPS , 2 = TIFF */ - depth2d tiffdpth = bpc8_2d; /* TIFF pixel depth */ - double tiffres = 100.0; /* TIFF resolution in DPI */ -*************** -*** 2662,2671 **** - /* Specify random seed */ - else if (argv[fa][1] == 'R') { - fa = nfa; -! if (na == NULL) usage("Expected argument to -t"); - rstart = atoi(na); - if (rstart < 0) -! usage("Argument to -t must be positive"); - } - - /* Enable DeviceN color fallback */ ---- 2664,2673 ---- - /* Specify random seed */ - else if (argv[fa][1] == 'R') { - fa = nfa; -! if (na == NULL) usage("Expected argument to -R"); - rstart = atoi(na); - if (rstart < 0) -! usage("Argument to -R must be positive"); - } - - /* Enable DeviceN color fallback */ -*************** -*** 2752,2757 **** ---- 2754,2768 ---- - tiffcomp = 0; - } - -+ /* Specify quantization bits */ -+ else if (argv[fa][1] == 'Q') { -+ fa = nfa; -+ if (na == NULL) usage("Expected argument to -Q"); -+ qbits = atoi(na); -+ if (qbits < 1 || qbits > 32) -+ usage("Argument to -Q must be between 1 and 32"); -+ } -+ - /* Specify strip index pattern */ - else if (argv[fa][1] == 'x' || argv[fa][1] == 'X') { - fa = nfa; -*************** -*** 2829,2834 **** ---- 2840,2853 ---- - strcat(inname,".ti1"); - strcat(outname,".ti2"); - -+ /* Set default qantization for known output */ -+ if (qbits == 0 && oft == 2) { -+ if (tiffdpth == bpc16_2d) -+ qbits = 16; -+ else if (tiffdpth == bpc8_2d) -+ qbits = 8; -+ } -+ - if (hex && itype != instSpectroScan) { - if (verb) - printf("Can only select hexagonal patches for SpectrScan - ignored!\n"); -*************** -*** 2923,2928 **** ---- 2942,2948 ---- - int xyzix[3]; /* XYZ chanel indexes */ - char *ident; - char *xyzfname[3] = { "XYZ_X", "XYZ_Y", "XYZ_Z" }; -+ double qscale = (1 << qbits) - 1.0; - - if ((ii = icg->find_kword(icg, 0, "TOTAL_INK_LIMIT")) >= 0) - ocg->add_kword(ocg, 0, "TOTAL_INK_LIMIT",icg->t[0].kdata[ii], NULL); -*************** -*** 2959,2965 **** - - ocg->add_kword(ocg, 0, "COLOR_REP", ident, NULL); - -! /* Read all the test patches in */ - for (i = 0; i < npat; i++) { - cols[i].i = i; - cols[i].t = T_N | T_XYZ; ---- 2979,2985 ---- - - ocg->add_kword(ocg, 0, "COLOR_REP", ident, NULL); - -! /* Read all the test patches in, and quantize them */ - for (i = 0; i < npat; i++) { - cols[i].i = i; - cols[i].t = T_N | T_XYZ; -*************** -*** 2970,2977 **** - cols[i].n = nchan; - cols[i].id = ((char *)icg->t[0].fdata[i][si]); - sprintf(cols[i].loc, "???"); -! for (j = 0; j < nchan; j++) -! cols[i].dev[j] = *((double *)icg->t[0].fdata[i][chix[j]]) / 100.0; - for (j = 0; j < 3; j++) - cols[i].XYZ[j] = *((double *)icg->t[0].fdata[i][xyzix[j]]) / 100.0; - col_convert(&cols[i], wp); /* Ensure other representations */ ---- 2990,3006 ---- - cols[i].n = nchan; - cols[i].id = ((char *)icg->t[0].fdata[i][si]); - sprintf(cols[i].loc, "???"); -! for (j = 0; j < nchan; j++) { -! double vr, vv = *((double *)icg->t[0].fdata[i][chix[j]]) / 100.0; -! if (qbits > 0) { -! vv *= qscale; -! vr = floor(vv + 0.5); -! if ((vr - vv) == 0.5 && (((int)vr) & 1) != 0) /* Round to even */ -! vr -= 1.0; -! vv = vr/qscale; -! } -! cols[i].dev[j] = vv; -! } - for (j = 0; j < 3; j++) - cols[i].XYZ[j] = *((double *)icg->t[0].fdata[i][xyzix[j]]) / 100.0; - col_convert(&cols[i], wp); /* Ensure other representations */ -diff --strip-trailing-cr -c -r Argyll_V1.0.1/target/targen.c Argyll_V1.0.2/target/targen.c -*** Argyll_V1.0.1/target/targen.c Mon Jul 14 14:11:33 2008 ---- Argyll_V1.0.2/target/targen.c Sun Jul 20 02:25:19 2008 -*************** -*** 17,31 **** - - /* TTBD: - -! Should add an option to quantize the device values - -! ie. to 8 bits, so that quantizing error isn't introduced -! through a reproduction path. Should this be a default ? - - Using adaptive patch creation for grey colorspace is broken. - This should really be disabled for grey space, or fixed. - - Adaptive only does a first go placement, itterative improvement - is turned off, because the algorithm doesn't work. - The useful level for the -A parameter (degree of adapatation) - hasn't been determined. - ---- 17,31 ---- - - /* TTBD: - -! Should add an option to generate grey and near grey -! test points based on the previous profile. - - Using adaptive patch creation for grey colorspace is broken. - This should really be disabled for grey space, or fixed. - - Adaptive only does a first go placement, itterative improvement - is turned off, because the algorithm doesn't work. -+ It would be good to figure out a way of fixing this. - The useful level for the -A parameter (degree of adapatation) - hasn't been determined. - -diff --strip-trailing-cr -c -r Argyll_V1.0.1/xicc/xfit.c Argyll_V1.0.2/xicc/xfit.c -*** Argyll_V1.0.1/xicc/xfit.c Mon Jul 14 14:11:27 2008 ---- Argyll_V1.0.2/xicc/xfit.c Sun Jul 20 02:25:13 2008 -*************** -*** 87,93 **** - - /* - - - - - - - - - - - - - - - - - */ - -! #ifdef NEVER /* Not currently used */ - - /* Lookup a value though an input position curve */ - static double xfit_poscurve(xfit *p, double in, int chan) { ---- 87,93 ---- - - /* - - - - - - - - - - - - - - - - - */ - -! #ifdef DEBUG_PLOT /* Not currently used in runtime code*/ - - /* Lookup a value though an input position curve */ - static double xfit_poscurve(xfit *p, double in, int chan) { -*************** -*** 132,138 **** - out[e] = val; - } - } -! #endif /* NEVER */ - - /* - - - - - - - - - - - - - - - - - */ - /* Lookup a value though input shape curve */ ---- 132,138 ---- - out[e] = val; - } - } -! #endif /* DEBUG_PLOT */ - - /* - - - - - - - - - - - - - - - - - */ - /* Lookup a value though input shape curve */ -*************** -*** 482,487 **** ---- 482,491 ---- - } else { - icmMulBy3x3(out, p->fromAbs, in); - } -+ } else { -+ out[0] = in[0]; -+ out[1] = in[1]; -+ out[2] = in[2]; - } - } - -*************** -*** 661,667 **** - } else { - del = p->to_de2(p->cntx2, out, p->rpoints[i].v); - } -- - tw += p->rpoints[i].w; - ev += p->rpoints[i].w * del; - } ---- 665,670 ---- -*************** -*** 1384,1397 **** - break; /* Don't bother looking further */ - } - } -- - xfit_abs_to_rel(p, ov, p->ipoints[bk].v); - - for (f = 0; f < fdi; f++) - b[f * (1 << di) + e] = ov[f]; - } - -- - /* Setup output curves to be linear initially */ - b = p->v + p->out_off; - for (f = 0; f < fdi; b += p->oluord[f], f++) { ---- 1387,1398 ---- -*************** -*** 1446,1451 **** ---- 1447,1453 ---- - - if ((p->tcomb & oc_ipo) != 0 - && (p->tcomb & oc_m) == oc_m) { /* Only bother with matrix if in and/or out */ -+ double rerr; - - if (p->verb) - printf("About to optimise temporary matrix\n"); -*************** -*** 1464,1474 **** - setup_xfit(p, p->wv, p->sa, 0.0, 0.5); - - #ifdef NODDV -! if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) -! warning("xfit_fit: Powell failed to converge"); - #else -! if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge"); - #endif - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; ---- 1466,1476 ---- - setup_xfit(p, p->wv, p->sa, 0.0, 0.5); - - #ifdef NODDV -! if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) -! warning("xfit_fit: Powell failed to converge, residual error = %f",rerr); - #else -! if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge, residual error = %f", rerr); - #endif - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; -*************** -*** 1481,1486 **** ---- 1483,1489 ---- - - /* Optimise input and matrix together */ - if ((p->tcomb & oc_im) == oc_im) { -+ double rerr; - - if (p->verb) - printf("\nAbout to optimise input curves and matrix\n"); -*************** -*** 1492,1504 **** - p->opt_ch = -1; - p->opt_msk = oc_im; - setup_xfit(p, p->wv, p->sa, 0.5, 0.3); - #ifdef NODDV -! if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) -! warning("xfit_fit: Powell failed to converge"); - #else -! if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge"); - #endif - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; - #ifdef DEBUG ---- 1495,1516 ---- - p->opt_ch = -1; - p->opt_msk = oc_im; - setup_xfit(p, p->wv, p->sa, 0.5, 0.3); -+ /* Supress the warnings the first time through - it's better to cut off the */ -+ /* itterations and move on to the output curve, and worry about it not */ -+ /* converging the second time through. */ - #ifdef NODDV -! if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) { -! #ifdef DEBUG -! warning("xfit_fit: Powell failed to converge, residual error = %f",rerr); -! #endif -! } - #else -! if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) { -! #ifdef DEBUG -! warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr); - #endif -+ } -+ #endif /* !NODDV */ - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; - #ifdef DEBUG -*************** -*** 1509,1514 **** ---- 1521,1527 ---- - - /* Optimise the matrix and output curves together */ - if ((p->tcomb & oc_mo) == oc_mo) { -+ double rerr; - - if (p->verb) - printf("\nAbout to optimise output curves and matrix\n"); -*************** -*** 1521,1531 **** - p->opt_msk = oc_mo; - setup_xfit(p, p->wv, p->sa, 0.3, 0.3); - #ifdef NODDV -! if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) -! warning("xfit_fit: Powell failed to converge"); - #else -! if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge"); - #endif - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; ---- 1534,1544 ---- - p->opt_msk = oc_mo; - setup_xfit(p, p->wv, p->sa, 0.3, 0.3); - #ifdef NODDV -! if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) -! warning("xfit_fit: Powell failed to converge, residual error = %f",rerr); - #else -! if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr); - #endif - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; -*************** -*** 1548,1558 **** - p->opt_msk = oc_im; - setup_xfit(p, p->wv, p->sa, 0.2, 0.2); - #ifdef NODDV -! if (powell(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) -! warning("xfit_fit: Powell failed to converge"); - #else -! if (conjgrad(NULL, p->opt_cnt, p->v, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge"); - #endif - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; ---- 1561,1571 ---- - p->opt_msk = oc_im; - setup_xfit(p, p->wv, p->sa, 0.2, 0.2); - #ifdef NODDV -! if (powell(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, (void *)p) != 0) -! warning("xfit_fit: Powell failed to converge, residual error = %f",rerr); - #else -! if (conjgrad(&rerr, p->opt_cnt, p->v, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr); - #endif - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; -*************** -*** 1576,1583 **** - p->opt_ch = -1; - p->opt_msk = oc_imo; - setup_xfit(p, p->wv, p->sa, 0.1, 0.1); -! if (conjgrad(NULL, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge"); - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; - ---- 1589,1596 ---- - p->opt_ch = -1; - p->opt_msk = oc_imo; - setup_xfit(p, p->wv, p->sa, 0.1, 0.1); -! if (conjgrad(&rerr, p->opt_cnt, p->wv, p->sa, POWTOL, MAXITS, xfitfunc, dxfitfunc, (void *)p) != 0) -! warning("xfit_fit: Conjgrad failed to converge, residual error = %f",rerr); - for (i = 0; i < p->opt_cnt; i++) /* Copy optimised values back */ - p->v[p->opt_off + i] = p->wv[i]; - -*************** -*** 1604,1611 **** - p->opt_ch = f; - p->wv[0] = p->v[p->out_offs[f]]; /* Current parameter value */ - p->sa[0] = 0.1; /* Search radius */ -! if (powell(NULL, 1, p->wv, p->sa, 0.0000001, 1000, symoptfunc, (void *)p) != 0) -! error("xfit_fit: Powell failed to converge"); - p->v[p->out_offs[f]] = p->wv[0]; /* Copy results back */ - } - } ---- 1617,1624 ---- - p->opt_ch = f; - p->wv[0] = p->v[p->out_offs[f]]; /* Current parameter value */ - p->sa[0] = 0.1; /* Search radius */ -! if (powell(&rerr, 1, p->wv, p->sa, 0.0000001, 1000, symoptfunc, (void *)p) != 0) -! error("xfit_fit: Powell failed to converge, residual error = %f",rerr); - p->v[p->out_offs[f]] = p->wv[0]; /* Copy results back */ - } - } -*************** -*** 1867,1873 **** - p->rpoints[i].v[f] = p->ipoints[i].v[f]; - xfit_abs_to_rel(p, p->rpoints[i].v, p->rpoints[i].v); - xfit_invoutcurves(p, p->rpoints[i].v, p->rpoints[i].v); -- // ~~999 - //printf("~1 point %d, w %f, %f %f %f %f -> %f %f %f\n", - //i,p->rpoints[i].w,p->rpoints[i].p[0], p->rpoints[i].p[1], p->rpoints[i].p[2], p->rpoints[i].p[3], - //p->rpoints[i].v[0], p->rpoints[i].v[1], p->rpoints[i].v[2]); ---- 1880,1885 ---- -*************** -*** 1923,1931 **** - if (p->verb) - printf("Create final clut from scattered data\n"); - -- // ~~~999 -- //out_max[0] = 100.390625; -- - p->clut->fit_rspl_w(p->clut, rsplflags, p->rpoints, p->nodp, in_min, in_max, gres, - out_min, out_max, smooth, oavgdev, iwidth); - if (p->verb) printf("\n"); ---- 1935,1940 ---- -*************** -*** 2079,2085 **** - maxe = ev; - avee += ev; - } -! printf("Max err = %f, avg err = %f\n",maxe, avee/(double)p->nodp); - - /* Evaluate each input axis in turn */ - for (ee = 0; ee < p->di; ee++) { ---- 2088,2094 ---- - maxe = ev; - avee += ev; - } -! printf("Max resid err = %f, avg err = %f\n",maxe, avee/(double)p->nodp); - - /* Evaluate each input axis in turn */ - for (ee = 0; ee < p->di; ee++) { diff --git a/argyllcms-1.0.1-legal.patch b/argyllcms-1.0.1-legal.patch deleted file mode 100644 index cf41df5..0000000 --- a/argyllcms-1.0.1-legal.patch +++ /dev/null @@ -1,726 +0,0 @@ -diff -uNr Argyll_V1.0.1.orig/doc/ArgyllDoc.html Argyll_V1.0.1/doc/ArgyllDoc.html ---- Argyll_V1.0.1.orig/doc/ArgyllDoc.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/ArgyllDoc.html 2008-07-27 11:39:29.000000000 +0200 -@@ -18,7 +18,7 @@ - Author: Graeme Gill -

Introduction

- Argyll is an open source, ICC compatible color management --system. It supports accurate ICC profile creation for scanners, CMYK -+system. It supports accurate ICC profile creation for acquisition devices, CMYK - printers, - film recorders and calibration and profiling of displays. - Spectral sample data is supported, -diff -uNr Argyll_V1.0.1.orig/doc/chartread.html Argyll_V1.0.1/doc/chartread.html ---- Argyll_V1.0.1.orig/doc/chartread.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/chartread.html 2008-07-27 11:40:27.000000000 +0200 -@@ -206,7 +206,7 @@ -
- Normally the patch locations are not needed in the - output, but if a chart is being read as an input reference (for use in --profiling a scanner or a camera), then the patch locations will still -+profiling an acquisition device), then the patch locations will still - be needed. The -a flag adds - the locations to the output .ti3 file.
-
-diff -uNr Argyll_V1.0.1.orig/doc/colprof.html Argyll_V1.0.1/doc/colprof.html ---- Argyll_V1.0.1.orig/doc/colprof.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/colprof.html 2008-07-27 11:41:01.000000000 +0200 -@@ -617,8 +617,8 @@ - absolute value, and any values whiter than that, will not be clipped by - the profile. The profile effectively operates in an absolute intent - mode,  irrespective of what intent is selected when it is used. --This flag can be useful when an input profile is needed for using a --scanner as a "poor mans" colorimeter, or if the white point of the test -+This flag can be useful when an input profile is needed for using an -+acquisition device as a "poor mans" colorimeter, or if the white point of the test - chart doesn't represent the white points of media - that will be used in practice, and that white point adjustment will be - done individually in some downstream application.
-diff -uNr Argyll_V1.0.1.orig/doc/Installing_Linux.html Argyll_V1.0.1/doc/Installing_Linux.html ---- Argyll_V1.0.1.orig/doc/Installing_Linux.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/Installing_Linux.html 2008-07-27 11:42:29.000000000 +0200 -@@ -30,7 +30,7 @@ - variable to give access to the executables from your command line - environment. - The .tgz file also contains several useful reference files (such as --scanner -+acquisition device - chart recognition templates, sample illumination spectrum etc.) in the - ref sub-directory, as - well -diff -uNr Argyll_V1.0.1.orig/doc/Installing_MSWindows.html Argyll_V1.0.1/doc/Installing_MSWindows.html ---- Argyll_V1.0.1.orig/doc/Installing_MSWindows.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/Installing_MSWindows.html 2008-07-27 11:42:50.000000000 +0200 -@@ -69,7 +69,7 @@ -
- The .zip file also contains several useful reference files - (such as --scanner -+acquisition device - chart recognition templates, sample illumination spectrum etc.) in the - ref sub-directory, all the current documentation in a doc - sub-directory, and instrument USB drivers in the libusbw directory.
-diff -uNr Argyll_V1.0.1.orig/doc/Installing_OSX.html Argyll_V1.0.1/doc/Installing_OSX.html ---- Argyll_V1.0.1.orig/doc/Installing_OSX.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/Installing_OSX.html 2008-07-27 11:39:58.000000000 +0200 -@@ -30,7 +30,7 @@ - with how to do this, consult an appropriate tutorial, e.g. <ShellIntro>. - The .tgz file also contains several useful reference files (such as --scanner chart recognition templates, sample illumination spectrum -+acquisition device chart recognition templates, sample illumination spectrum - etc.) in the ref sub-directory, as well as - all the current documentation in a doc sub-directory.
-
-diff -uNr Argyll_V1.0.1.orig/doc/Organisation.html Argyll_V1.0.1/doc/Organisation.html ---- Argyll_V1.0.1.orig/doc/Organisation.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/Organisation.html 2008-07-27 11:36:55.000000000 +0200 -@@ -13,7 +13,7 @@ - This directory contains routines that generate calibration test charts, - based - on various distribution algorithms suitable for --reading using an Xrite DTP51 or DTP41 colorimeter, or scanner for print -+reading using an Xrite DTP51 or DTP41 colorimeter, or acquisition device for print - charts, - the Gretag Spectrolino for film charts, or the Xrite DTP92 pr DTP94 for - monitor -diff -uNr Argyll_V1.0.1.orig/doc/printtarg.html Argyll_V1.0.1/doc/printtarg.html ---- Argyll_V1.0.1.orig/doc/printtarg.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/printtarg.html 2008-07-27 11:36:27.000000000 +0200 -@@ -167,7 +167,7 @@ - file, and a .ti2 file containing the device test values together with - the layout information needed to identify the patch location. This - module can also generate the image recognition templates needed to read --the print targets in using a scanner.
-+the print targets in using an acquisition device.
-
- The -v flag turns on verbose mode. Prints - information about how many patches there are in a row, how many patches -diff -uNr Argyll_V1.0.1.orig/doc/scanin.html Argyll_V1.0.1/doc/scanin.html ---- Argyll_V1.0.1.orig/doc/scanin.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/scanin.html 2008-07-27 11:34:18.000000000 +0200 -@@ -23,7 +23,7 @@ - recogin.cht - valin.cie [diag.tif]

-    :- inputs --'input.tif',  and outputs scanner -+'input.tif',  and outputs device - 'input.ti3', or
-
- usage                   - Replace device values in .ti3
-                       --Default is to create a scanner .ti3 file
-+Default is to create a device .ti3 file
-
 -F x1,y1,x2,y2,x3,y3,x4,y4
-@@ -187,10 +187,10 @@ - of the chart are visible within the image, and if the image is cropped - to exclude the chart edges, it may well not recognize the chart - properly. It is designed to cope with a variety of resolutions, and --will cope with some degree of noise in the scan (due to screening -+will cope with some degree of noise in the acquisition (due to screening - artefacts on the original, or film grain), but it isn't really designed - to accept very high resolution input. For anything over 600DPI, you --should consider down sampling the scan using a filtering downsample, -+should consider down sampling the image using a filtering downsample, - before submitting the file to scanin.
-
- There are 5 basic modes that scanin operates in.
-@@ -199,7 +199,7 @@ - assumed to be parsing an input device characterization chart (ie. an - IT8.7/2 chart), for the purpose of creating a .ti3 data file containing --the CIE test values and the corresponding RGB scanner values. The .ti3 file can then be used for - creating - an input profile using colprof. The file -@@ -221,7 +221,7 @@ - file in - this situation, should be a good quality image, perhaps synthetically - generated --(rather than being scanned), and perfectly oriented, to make -+(rather than being parsed), and perfectly oriented, to make - specification - of the patch locations easier. The file arguments are: The - TIFF file that -@@ -245,7 +245,7 @@ - input devices to be used as a crude replacement for a color measuring - instrument. The icc profile has - (presumably) been --created by scanning an IT8.7/2 chart (or similar) through the RGB input -+created with an image of a IT8.7/2 chart (or similar) through the RGB input - device, - and - then using scanin to create the .ti3 file needed to feed to colprof to -@@ -267,7 +267,7 @@ - The resulting .ti3 file will have the same base name as the input TIFF - file. - If there is more than one page in the test chart, then scanin will need --to be run multiple times, once for each scan file made from each test -+to be run multiple times, once for each image file made from each test - chart. The -ca flag combination should be - used - for all pages after the first, -@@ -339,7 +339,7 @@ -
- By default the automatic chart recognition copes with - rotation, scale and stretch in the chart image, making it suitable for --charts that have been scanned, or shot squarely with a camera. If a -+charts that have been acquired, or shot squarely with a camera. If a - chart has been shot not exactly facing the camera (perhaps to avoid - reflection, or to get more even lighting), then it will suffer from - perspective distortion as well. The Normally scanin computes an average of the pixel values - within a sample square, using a "robust" mean, that discards pixel - values that are too far from the average ("outlier" pixel values). This --is done in an attempt to discard value that are due to scanning -+is done in an attempt to discard value that are due to acquisition - artefacts such as dust, scratches etc. You can force scanin to return - the true mean values for the sample squares that includes all the pixel - values, by using the -m flag.
-@@ -357,9 +357,9 @@ - Normally scanin has reasonably robust feature - recognition, but the default assumption is that the input chart has an - approximately even visual distribution of patch values, and has been --scanned and converted to a typical gamma 2.2 corrected image, meaning -+acquired and converted to a typical gamma 2.2 corrected image, meaning - that the average patch pixel value is expected to be about 50%. If this --is not the case (for instance if the input chart has been scanned with -+is not the case (for instance if the input chart has been processed with - linear light or "raw" encoding), then it may enhance the image - recognition to provide the approximate gamma encoding of the image. For - instance, if linear light encoding ("Raw") is used, a Installing a - display profile -


--Profiling Scanners

-+Profiling Acquisition Devices -

    Types of test charts

--

    Taking readings from a scanner

--

    Creating a scanner profile

-+

    Taking readings from an acquisition device

-+

    Creating an acquisition device profile

-


- Profiling Printers

-

    Creating a print test chart

-

    Reading a print test chart - using an instrument

-

    Reading a print test chart --using a scanner

-+using an acquisition device -

-

    Creating a printer profile
-

-@@ -353,14 +353,14 @@ - the connected display.
-
-
--

Profiling Scanners

--Because a scanner is an input device, it is necessary to go about -+

Profiling Acquisition Devices

-+Because a acquisition device is an input device, it is necessary to go about - profiling it in quite a different way to an output device. To profile --it, a test chart is needed to exercise the scanner response, to which -+it, a test chart is needed to exercise the device response, to which - the CIE values for each test patch is known. Generally standard - reflection or transparency test charts are used for this purpose.
-

Types of test charts

--The most common and popular test chart for scanner profiling is the -+The most common and popular test chart for acquisiton device profiling is the - IT8.7/2 chart. This is a standard format chart generally reproduced on - photographic film, containing about 264 test patches. The Kodak Q-60 - Color Input Target is a typical example:
-@@ -400,18 +400,18 @@ - CMP_DT_003
-
--

Taking readings from a scanner

--The test chart you are using needs to be placed on the scanner, and the --scanner needs to be configured to a suitable state, and restored to -+

Taking readings from an acquisition device

-+The test chart you are using needs to be exposed to the device, and the -+acquisition device needs to be configured to a suitable state, and restored to - that - same state when used subsequently with the resulting profile. The chart - should - be scanned, and saved to a TIFF format file. I will assume the - resulting --file is called scanner.tif. The raster file need only be roughly -+file is called device.tif. The raster file need only be roughly - cropped so as to contain the test chart (including the charts edges).
-
--The second step is to extract the RGB values from the scanner.tif file, -+The second step is to extract the RGB values from the device.tif file, - and match then to the reference CIE values. - To locate the patch values in the scan, the scanin utility - needs to -@@ -485,32 +485,32 @@ - chart recognition template file will need to be created (this is beyond - the scope of the current documentation).
-
--To create the scanner .ti3 file, run the scanin utility as -+To create the device .ti3 file, run the scanin utility as - follows - (assuming an IT8 chart is being used):
-
-- scanin -v scanner.tif It8.cht It8ref.txt
-+ scanin -v device.tif It8.cht It8ref.txt
-
- "It8ref.txt" is assumed to be the name of the CIE reference file --supplied by the chart manufacturer. The resulting file will be named "scanner.ti3".
-+supplied by the chart manufacturer. The resulting file will be named "device.ti3".
-
- scanin will process 16 bit per --component .tiff files, which (if the scanner is capable of creating -+component .tiff files, which (if the device is capable of creating - such files),  may improve the quality of the profile.
-
- If you have any doubts about the correctness of the chart recognition, - or the subsequent profile's delta E report is unusual, then use the - scanin diagnostic flags -dipn and examine - the diag.tif diagnostic file.
--

Creating a scanner profile

--Similar to a display profile, a scanner profile can be either a --shaper/matrix or LUT based profile. Well behaved scanners will -+

Creating an acquisition device profile

-+Similar to a display profile, an acquisition device profile can be either a -+shaper/matrix or LUT based profile. Well behaved devices will - probably give the best results - with a shaper/matrix profile, but if the fit is poor, consider using a - LUT - type profile.
-
--If the purpose of the scanner profile is to use it as a substitute for -+If the purpose of the device profile is to use it as a substitute for - a - colorimeter, then the -u flag should be used to avoid clipping - values above the white point. Unless the shaper/matrix type profile is -@@ -520,24 +520,24 @@ - To create a matrix/shaper profile, the following suffices:
-
- colprof -v -D"Scanner A" -D"Device A" -qm -as --scanner
-+device
-
- For a LUT based profile then the following would be used:
-
- colprof -v -D"Scanner A" -+ href="colprof.html#E">-D"Device A" - -qm --scanner
-+device
-
- For the purposes of a poor mans colorimeter, the following would - generally be used:
-
- colprof -v -D"Scanner A" -+ href="colprof.html#E">-D"Device A" - -qm -u --scanner
-+device
-
- Make sure you check the delta E report at the end of the profile - creation, to see if the profile is behaving reasonably.
-@@ -703,7 +703,7 @@ - -ii1 -pA4 - PrinterA
-
--For using with a scanner as a colorimeter, the Gretag Spectroscan -+For using with an acquisition device as a colorimeter, the Gretag Spectroscan - layout is suitable, but the -s flag - should be used so as to generate a layout suitable for scan - recognition, as well as generating the scan recognition template -@@ -804,28 +804,27 @@ - for each type of instrument. Continue with Creating - a printer profile.
-
--

Reading a print test chart using a scanner or --camera
-+

Reading a print test chart using an acquisition device
-

-
--Argyll supports using a scanner or even a camera as a substitute for a -+Argyll supports using any acquisition device as a substitute for a - colorimeter. --While a scanner or camera is no replacement for a color measurement -+While most are no replacement for a color measurement - instrument, it may give acceptable results in some situations, and may - give better results than a generic profile for a printing device.
-
--The main limitation of the scanner-as-colorimeter approach are:
-+The main limitation of the any-device-as-colorimeter approach are:
-
--* The scanner dynamic range and/or precision may not match the printers -+* The acquisition device dynamic range and/or precision may not match the printers - or what is required for a good profile.
--* The spectral interaction of the scanner test chart and printer test --chart with the scanner -+* The spectral interaction of the device test chart and printer test -+chart with the device - spectral response can cause color errors.
- * Spectral differences caused by different black amounts in the print - test chart can cause - color errors.
- * The IT8 chart gamut may be so much smaller than the printers that the --scanner profile is too inaccurate.
-+acquisition device profile is too inaccurate.
-
- As well as some of the above, a camera may not be suitable if it - automatically adjusts exposure or white point when taking a picture, -@@ -834,23 +833,23 @@ - The end result is often a profile that has a slight color cast to, - compared to a profile created using a colorimeter or spectrometer..
-
--It is assumed that you have created a scanner or camera profile -+It is assumed that you have created an acquisition device profile - following the procedure - outline above. For best possible results it --is advisable to both profile the scanner or camera, and use it in -+is advisable to both profile the acquisition device, and use it in - scanning the - printed test chart, in as "raw" mode as possible (i.e. using 16 bits --per component images, if the scanner or camera is -+per component images, if the acquisition device is - capable of doing so; not setting white or black points, using a fixed - exposure etc.). It is - generally advisable to create a LUT type input profile, and use the -u flag to - avoid clipping scanned value whiter than the input calibration chart.
-
--Scan or photograph your printer chart (or charts) on the scanner or --camera previously profiled. -+Scan or photograph your printer chart (or charts) on the acquisition device -+previously profiled. - The --scanner or camera must be configured and used exactly the same as it -+acquisition device must be configured and used exactly the same as it - was when it - was profiled.
-
-@@ -858,21 +857,21 @@ - style="font-weight: bold;">PrinterB.tif
(or PrinterB1.tif, PrinterB2.tif etc. in the case of --multiple charts). As with profiling the scanner or camera, the raster -+multiple charts). As with profiling the acquisition device, the raster - file need - only be roughly cropped so as to contain the test chart.
-
--The scanner recognition files -+The acquisition device recognition files - created when printtarg was run - is assumed to be called PrinterB.cht. --Using the scanner profile created previously (assumed to be called scanner.icm), the printer test chart -+Using the device profile created previously (assumed to be called device.icm), the printer test chart - scan patches are converted to CIE values using the scanin utility:
-
- scanin -v -c PrinterB.tif --PrinterB.cht scanner.icm -+PrinterB.cht device.icm - PrinterB
-
- If there were multiple test chart pages, the results would be -@@ -881,15 +880,15 @@ -
- scanin -v -c PrinterB1.tif --PrinterB1.cht scanner.icm -+PrinterB1.cht device.icm - PrinterB
- scanin -v -ca PrinterB2.tif --PrinterB2.cht scanner.icm -+PrinterB2.cht device.icm - PrinterB
- scanin -v -ca PrinterB3.tif --PrinterB3.cht scanner.icm -+PrinterB3.cht device.icm - PrinterB
-
- Now that the PrinterB.ti3 data -diff -uNr Argyll_V1.0.1.orig/doc/targen.html Argyll_V1.0.1/doc/targen.html ---- Argyll_V1.0.1.orig/doc/targen.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/targen.html 2008-07-27 11:53:34.000000000 +0200 -@@ -615,7 +615,7 @@ -       3 x Letter   1386
-       4 x Letter   1848
-
--  Scanner (printtarg with -iSS -s options):
-+  Acquisition device (printtarg with -iSS -s options):
-
-        1 x A4R      1014
-        2 x A4R      2028
-diff -uNr Argyll_V1.0.1.orig/doc/ti3_format.html Argyll_V1.0.1/doc/ti3_format.html ---- Argyll_V1.0.1.orig/doc/ti3_format.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/ti3_format.html 2008-07-27 11:42:04.000000000 +0200 -@@ -173,7 +173,7 @@ - or "RGB_LAB" for an RGB printer - or display, "CMYK_XYZ" for a - printer, "XYZ_RGB" for an RGB --scanner.
-+acquisition device.
-
- If spectral values are going to be included in the file, the following - keywords and values shall be used:
-diff -uNr Argyll_V1.0.1.orig/doc/ucmm.html Argyll_V1.0.1/doc/ucmm.html ---- Argyll_V1.0.1.orig/doc/ucmm.html 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/doc/ucmm.html 2008-07-27 11:41:27.000000000 +0200 -@@ -13,7 +13,7 @@ - designed just to handle the necessary configuration needed to track the - installation and association of ICC profiles with Unix/Linux X11 - displays. It could be expanded at some point to also hold the --associations for other devices such as scanner and printers.
-+associations for other devices such as acquisition devices and printers.
-
- It consists primarily of a small configuration database that associates - a display monitor (identified by its EDID or the X11 display name if an -diff -uNr Argyll_V1.0.1.orig/log.txt Argyll_V1.0.1/log.txt ---- Argyll_V1.0.1.orig/log.txt 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/log.txt 2008-07-27 11:35:38.000000000 +0200 -@@ -1648,7 +1648,7 @@ - - * Added shaper/matrix input profile support. - (profile/profin.c, xicc/xmatrix.c) -- This may be more accurate for scanner profiles, -+ This may be more accurate for device profiles, - given the poor coverage of test points provided - by an IT8 chart (but doesn't appear to be in practice). - -@@ -1659,7 +1659,7 @@ - - * Added support in scanin.c and scanrd.c for - using a scan of a print test chart, plus a -- profile for the scanner, to be able to measure -+ profile for the device, to be able to measure - color for printer calibration. This - new mode handles multi-page test charts. - -@@ -1689,13 +1689,13 @@ - patch spacer contrast determination. - Also added an XYZ to sRGB conversion - function to support RGB previews of N color -- devices, as well as scanner recognition template files. -+ devices, as well as device recognition template files. - - * Expanded xicc/xcolorants.c to incorporate - an approximate device model for arbitrary - colorant combinations. This is used to - be able to approximate expected density readings, -- as well as preview colors and scanner recognition templates. -+ as well as preview colors and device recognition templates. - - * Create a new test point creation module, - target/simplat.c, to create higher dimentional, -@@ -1793,7 +1793,7 @@ - - * Added preliminary support in printtarg for the SpectroScan - spectrodensitometer. Also added preliminary support for -- scanner recognisable test charts. -+ device recognisable test charts. - - * Added option to icclink to turn off the use of linearisation - curves in the output link, since this sometimes seems to -@@ -1960,7 +1960,7 @@ - Cleaned up build automation somewhat. - - Added RGB output device profile generation support. -- Added RGB scanner device profile generation support. -+ Added RGB device profile generation support. - - Added a couple of spectrometer conversion utilities for - raw data files from other CMSs. -diff -uNr Argyll_V1.0.1.orig/profile/profcheck.c Argyll_V1.0.1/profile/profcheck.c ---- Argyll_V1.0.1.orig/profile/profcheck.c 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/profile/profcheck.c 2008-07-27 11:54:01.000000000 +0200 -@@ -360,7 +360,7 @@ - devchan = 3; - isLab = 1; - isAdditive = 1; -- /* Scanner .ti3 files: */ -+ /* Acquisition Device .ti3 files: */ - } else if (strcmp(icg->t[0].kdata[ti],"XYZ_RGB") == 0) { - devspace = icSigRgbData; - devchan = 3; -diff -uNr Argyll_V1.0.1.orig/profile/profin.c Argyll_V1.0.1/profile/profin.c ---- Argyll_V1.0.1.orig/profile/profin.c 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/profile/profin.c 2008-07-27 11:53:08.000000000 +0200 -@@ -49,7 +49,7 @@ - /* - Basic algorithm outline: - -- Scanner: -+ Acquisition Device: - - Figure out the input curves to give - the flattest grid. -diff -uNr Argyll_V1.0.1.orig/Readme.txt Argyll_V1.0.1/Readme.txt ---- Argyll_V1.0.1.orig/Readme.txt 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/Readme.txt 2008-07-27 11:38:54.000000000 +0200 -@@ -1,36 +1,36 @@ - --Argyll CMS README file - Version 1.0.0 -+Argyll CMS README file - Version 1.0.1 - -------------------------------------- - - Date: 27th June 2008 - Author: Graeme Gill - --Argyll is an open source, ICC compatible color management system. It supports --accurate ICC profile creation for scanners, CMYK printers, film recorders and --calibration and profiling of displays. Spectral sample data is supported, --allowing a selection of illuminants observer types, and paper fluorescent --whitener additive compensation. Profiles can also incorporate source specific --gamut mappings for perceptual and saturation intents. Gamut mapping and profile --linking uses the CIECAM02 appearance model, a unique gamut mapping algorithm, --and a wide selection of rendering intents. It also includes code for the --fastest portable 8 bit raster color conversion engine available anywhere, --as well as support for fast, fully accurate 16 bit conversion. Device color --gamuts can also be viewed and compared using a VRML viewer. Comprehensive --documentation is provided for each utility, and a general guide to using --the tools for typical color management tasks is also available. A mailing --list provides support for more advanced usage. -- --This is Version 1.00. The last full release was in December 2005, --with V0.7 Beta releases in between. The first public release of --icclib was in November 1998, and of Argyll was in July 2000. --Code development commenced in 1995. See Changes Summary for an --overview of changes since the last release. Changes between --revisions is detailed in the log.txt file that accompanies --the source code. -+Argyll is an open source, ICC compatible color management system. It supports -+accurate ICC profile creation for acquisition devices, CMYK printers, film -+recorders and calibration and profiling of displays. Spectral sample data is -+supported, allowing a selection of illuminants observer types, and paper -+fluorescent whitener additive compensation. Profiles can also incorporate -+source specific gamut mappings for perceptual and saturation intents. Gamut -+mapping and profile linking uses the CIECAM02 appearance model, a unique gamut -+mapping algorithm, and a wide selection of rendering intents. It also includes -+code for the fastest portable 8 bit raster color conversion engine available -+anywhere, as well as support for fast, fully accurate 16 bit conversion. Device -+color gamuts can also be viewed and compared using a VRML viewer. Comprehensive -+documentation is provided for each utility, and a general guide to using the -+tools for typical color management tasks is also available. A mailing list -+provides support for more advanced usage. -+ -+This is Version 1.0.1. The last full release was in December 2005, with V0.7 -+Beta releases in between. The first public release of icclib was in November -+1998, and of Argyll was in July 2000. Code development commenced in 1995. See -+Changes Summary for an overview of changes since the last release. Changes -+between revisions is detailed in the log.txt file that accompanies the source -+code. - - It is licensed under the GNU Version 3 license. - --For more information, please consult the HTML documentation in , -+For more information, please consult the HTML documentation in -+, - or . - - For the most recent source code start at . -diff -uNr Argyll_V1.0.1.orig/scanin/scanin.c Argyll_V1.0.1/scanin/scanin.c ---- Argyll_V1.0.1.orig/scanin/scanin.c 2008-07-27 11:18:53.000000000 +0200 -+++ Argyll_V1.0.1/scanin/scanin.c 2008-07-27 11:26:37.000000000 +0200 -@@ -2,7 +2,7 @@ - /* - * Argyll Color Correction System - * -- * Scanin: Input the scan of a test chart, and output cgats data -+ * Scanin: Input the image of a test chart, and output cgats data - * Uses scanrd to do the hard work. - * - * Author: Graeme W. Gill -@@ -72,7 +72,7 @@ - fprintf(stderr,"Author: Graeme W. Gill, licensed under the GPL Version 3\n"); - fprintf(stderr,"\n"); - fprintf(stderr,"usage: scanin [options] input.tif recogin.cht valin.cie [diag.tif]\n"); -- fprintf(stderr," :- inputs 'input.tif' and outputs scanner 'input.ti3', or\n"); -+ fprintf(stderr," :- inputs 'input.tif' and outputs device 'input.ti3', or\n"); - fprintf(stderr,"\n"); - fprintf(stderr,"usage: scanin -g [options] input.tif recogout.cht [diag.tif]\n"); - fprintf(stderr," :- outputs file 'recogout.cht', or\n"); -@@ -92,7 +92,7 @@ - fprintf(stderr," -ca Same as -c, but accumulates more values to .ti3\n"); - fprintf(stderr," from subsequent pages\n"); - fprintf(stderr," -r Replace device values in .ti2/.ti3\n"); -- fprintf(stderr," Default is to create a scanner .ti3 file\n"); -+ fprintf(stderr," Default is to create a device .ti3 file\n"); - fprintf(stderr," -F x1,y1,x2,y2,x3,y3,x4,y4\n"); - fprintf(stderr," Don't auto recognize, locate using four fiducual marks\n"); - fprintf(stderr," -p Compensate for perspective distortion\n"); -@@ -127,12 +127,12 @@ - static char datin_name[200] = { 0 }; /* Data input name (.cie/.q60) */ - static char datout_name[200] = { 0 }; /* Data output name (.ti3/.val) */ - static char recog_name[200] = { 0 }; /* Reference chart name (.cht) */ -- static char prof_name[200] = { 0 }; /* scanner profile name (.cht) */ -+ static char prof_name[200] = { 0 }; /* device profile name (.cht) */ - static char diag_name[200] = { 0 }; /* Diagnostic Output (.tif) name, if used */ - int verb = 1; - int tmean = 0; /* Return true mean, rather than robust mean */ - int repl = 0; /* Replace .ti3 device values from raster file */ -- int outo = 0; /* Output the values read, rather than creating scanner .ti3 */ -+ int outo = 0; /* Output the values read, rather than creating device .ti3 */ - int colm = 0; /* Use inage values to measure color for print profile. > 1 == append */ - int flags = SI_GENERAL_ROT; /* Default allow all rotations */ - -@@ -153,7 +153,7 @@ - scanrd *sr; /* Scanrd object */ - int err; - char *errm; -- int pnotscan = 0; /* Number of patches that wern't scanned */ -+ int pnotscan = 0; /* Number of patches that weren't processed */ - - if (argc <= 1) - usage(); -diff -uNr Argyll_V1.0.1.orig/target/printtarg.c Argyll_V1.0.1/target/printtarg.c ---- Argyll_V1.0.1.orig/target/printtarg.c 2008-07-27 11:18:52.000000000 +0200 -+++ Argyll_V1.0.1/target/printtarg.c 2008-07-27 11:37:20.000000000 +0200 -@@ -3252,7 +3252,7 @@ - } - - /******************************************************************/ --/* Edge tracking support, for generating the scanner image */ -+/* Edge tracking support, for generating the device image */ - /* recognition reference chart file. */ - - /* Establish width and height to convert between topleft and */ -diff -uNr Argyll_V1.0.1.orig/ttbd.txt Argyll_V1.0.1/ttbd.txt ---- Argyll_V1.0.1.orig/ttbd.txt 2008-07-27 11:18:54.000000000 +0200 -+++ Argyll_V1.0.1/ttbd.txt 2008-07-27 11:54:46.000000000 +0200 -@@ -123,7 +123,7 @@ - - * Should create a .ti2 template file for some standard charts, - such as an IT8.7/3, ECI2002 random and non-random etc. -- Scanner recognition files too ?? -+ Device recognition files too ?? - - * Add an option to targen, that allows generation of - test points down the neutral axis (how does this work -@@ -293,7 +293,7 @@ - patch variance is too high (probable faulty read). - - * Add spectral fix options to scanin code to allow compensation -- for scanner and media errors when using a scanned image to -+ for device and media errors when using an acquired image to - measure color. - This means figuring out how it will work, as well as creating - to tools to create the spectral fix data (or just add general diff --git a/argyllcms-1.0.1-printf.patch b/argyllcms-1.0.1-printf.patch deleted file mode 100644 index 1a917ce..0000000 --- a/argyllcms-1.0.1-printf.patch +++ /dev/null @@ -1,1090 +0,0 @@ -diff -uNr Argyll_V1.0.1.orig/icc/icc.c Argyll_V1.0.1/icc/icc.c ---- Argyll_V1.0.1.orig/icc/icc.c 2008-07-14 06:11:23.000000000 +0200 -+++ Argyll_V1.0.1/icc/icc.c 2008-07-27 13:38:24.000000000 +0200 -@@ -1772,8 +1772,8 @@ - if (verb <= 1) - return; - -- op->printf(op,"Unknown:\n"); -- op->printf(op," Payload size in bytes = %u\n",p->size); -+ (op->printf)(op,"Unknown:\n"); -+ (op->printf)(op," Payload size in bytes = %u\n",p->size); - - /* Print one row of binary and ASCII interpretation if verb == 2, All if == 3 */ - /* else print all of it. */ -@@ -1783,35 +1783,35 @@ - - c = 1; - if (ph != 0) { /* Print ASCII under binary */ -- op->printf(op," "); -+ (op->printf)(op," "); - i = ii; /* Swap */ - c += 11; - } else { -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - ii = i; /* Swap */ - c += 10; - } - while (i < p->size && c < 75) { - if (ph == 0) -- op->printf(op,"%02x ",p->data[i]); -+ (op->printf)(op,"%02x ",p->data[i]); - else { - if (isprint(p->data[i])) -- op->printf(op," %c ",p->data[i]); -+ (op->printf)(op," %c ",p->data[i]); - else -- op->printf(op," ",p->data[i]); -+ (op->printf)(op," ",p->data[i]); - } - c += 3; - i++; - } - if (ph == 0 || i < p->size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - - if (ph == 1 && i >= p->size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (ph == 1 && r > 1 && verb < 3) { -- op->printf(op," ...\n"); -+ (op->printf)(op," ...\n"); - break; /* Print 1 row if not verbose */ - } - -@@ -2002,12 +2002,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"UInt8Array:\n"); -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op,"UInt8Array:\n"); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) -- op->printf(op," %lu: %u\n",i,p->data[i]); -+ (op->printf)(op," %lu: %u\n",i,p->data[i]); - } - } - -@@ -2189,12 +2189,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"UInt16Array:\n"); -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op,"UInt16Array:\n"); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) -- op->printf(op," %lu: %u\n",i,p->data[i]); -+ (op->printf)(op," %lu: %u\n",i,p->data[i]); - } - } - -@@ -2376,12 +2376,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"UInt32Array:\n"); -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op,"UInt32Array:\n"); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) -- op->printf(op," %lu: %u\n",i,p->data[i]); -+ (op->printf)(op," %lu: %u\n",i,p->data[i]); - } - } - -@@ -2563,12 +2563,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"UInt64Array:\n"); -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op,"UInt64Array:\n"); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) -- op->printf(op," %lu: h=%lu, l=%lu\n",i,p->data[i].h,p->data[i].l); -+ (op->printf)(op," %lu: h=%lu, l=%lu\n",i,p->data[i].h,p->data[i].l); - } - } - -@@ -2750,12 +2750,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"U16Fixed16Array:\n"); -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op,"U16Fixed16Array:\n"); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) -- op->printf(op," %lu: %f\n",i,p->data[i]); -+ (op->printf)(op," %lu: %f\n",i,p->data[i]); - } - } - -@@ -2937,12 +2937,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"S15Fixed16Array:\n"); -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op,"S15Fixed16Array:\n"); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) -- op->printf(op," %lu: %f\n",i,p->data[i]); -+ (op->printf)(op," %lu: %f\n",i,p->data[i]); - } - } - -@@ -3166,12 +3166,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"XYZArray:\n"); -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op,"XYZArray:\n"); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) { -- op->printf(op," %lu: %s\n",i,string_XYZNumber_and_Lab(&p->data[i])); -+ (op->printf)(op," %lu: %s\n",i,string_XYZNumber_and_Lab(&p->data[i])); - - } - } -@@ -3640,18 +3640,18 @@ - if (verb <= 0) - return; - -- op->printf(op,"Curve:\n"); -+ (op->printf)(op,"Curve:\n"); - - if (p->flag == icmCurveLin) { -- op->printf(op," Curve is linear\n"); -+ (op->printf)(op," Curve is linear\n"); - } else if (p->flag == icmCurveGamma) { -- op->printf(op," Curve is gamma of %f\n",p->data[0]); -+ (op->printf)(op," Curve is gamma of %f\n",p->data[0]); - } else { -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op," No. elements = %lu\n",p->size); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->size; i++) -- op->printf(op," %3lu: %f\n",i,p->data[i]); -+ (op->printf)(op," %3lu: %f\n",i,p->data[i]); - } - } - } -@@ -3892,68 +3892,68 @@ - if (verb <= 0) - return; - -- op->printf(op,"Data:\n"); -+ (op->printf)(op,"Data:\n"); - switch(p->flag) { - case icmDataASCII: -- op->printf(op," ASCII data\n"); -+ (op->printf)(op," ASCII data\n"); - size = p->size > 0 ? p->size-1 : 0; - break; - case icmDataBin: -- op->printf(op," Binary data\n"); -+ (op->printf)(op," Binary data\n"); - size = p->size; - break; - case icmDataUndef: -- op->printf(op," Undefined data\n"); -+ (op->printf)(op," Undefined data\n"); - size = p->size; - break; - } -- op->printf(op," No. elements = %lu\n",p->size); -+ (op->printf)(op," No. elements = %lu\n",p->size); - - ii = i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - - c = 1; - if (ph != 0) { /* Print ASCII under binary */ -- op->printf(op," "); -+ (op->printf)(op," "); - i = ii; - c += 11; - } else { -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - ii = i; - c += 10; - } - while (i < size && c < 75) { - if (p->flag == icmDataASCII) { - if (isprint(p->data[i])) { -- op->printf(op,"%c",p->data[i]); -+ (op->printf)(op,"%c",p->data[i]); - c++; - } else { -- op->printf(op,"\\%03o",p->data[i]); -+ (op->printf)(op,"\\%03o",p->data[i]); - c += 4; - } - } else { - if (ph == 0) -- op->printf(op,"%02x ",p->data[i]); -+ (op->printf)(op,"%02x ",p->data[i]); - else { - if (isprint(p->data[i])) -- op->printf(op," %c ",p->data[i]); -+ (op->printf)(op," %c ",p->data[i]); - else -- op->printf(op," ",p->data[i]); -+ (op->printf)(op," ",p->data[i]); - } - c += 3; - } - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - if (verb > 2 && p->flag != icmDataASCII && ph == 0) - ph = 1; - else -@@ -4143,35 +4143,35 @@ - if (verb <= 0) - return; - -- op->printf(op,"Text:\n"); -- op->printf(op," No. chars = %lu\n",p->size); -+ (op->printf)(op,"Text:\n"); -+ (op->printf)(op," No. chars = %lu\n",p->size); - - size = p->size > 0 ? p->size-1 : 0; - i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - c = 1; -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - c += 10; - while (i < size && c < 75) { - if (isprint(p->data[i])) { -- op->printf(op,"%c",p->data[i]); -+ (op->printf)(op,"%c",p->data[i]); - c++; - } else { -- op->printf(op,"\\%03o",p->data[i]); -+ (op->printf)(op,"\\%03o",p->data[i]); - c += 4; - } - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } - -@@ -4476,8 +4476,8 @@ - if (verb <= 0) - return; - -- op->printf(op,"DateTimeNumber:\n"); -- op->printf(op," Date = %s\n", string_DateTimeNumber(p)); -+ (op->printf)(op,"DateTimeNumber:\n"); -+ (op->printf)(op," Date = %s\n", string_DateTimeNumber(p)); - } - - /* Allocate variable sized data elements */ -@@ -5988,34 +5988,34 @@ - return; - - if (p->ttype == icSigLut8Type) { -- op->printf(op,"Lut8:\n"); -+ (op->printf)(op,"Lut8:\n"); - } else { -- op->printf(op,"Lut16:\n"); -+ (op->printf)(op,"Lut16:\n"); - } -- op->printf(op," Input Channels = %u\n",p->inputChan); -- op->printf(op," Output Channels = %u\n",p->outputChan); -- op->printf(op," CLUT resolution = %u\n",p->clutPoints); -- op->printf(op," Input Table entries = %u\n",p->inputEnt); -- op->printf(op," Output Table entries = %u\n",p->outputEnt); -- op->printf(op," XYZ matrix = %f, %f, %f\n",p->e[0][0],p->e[0][1],p->e[0][2]); -- op->printf(op," %f, %f, %f\n",p->e[1][0],p->e[1][1],p->e[1][2]); -- op->printf(op," %f, %f, %f\n",p->e[2][0],p->e[2][1],p->e[2][2]); -+ (op->printf)(op," Input Channels = %u\n",p->inputChan); -+ (op->printf)(op," Output Channels = %u\n",p->outputChan); -+ (op->printf)(op," CLUT resolution = %u\n",p->clutPoints); -+ (op->printf)(op," Input Table entries = %u\n",p->inputEnt); -+ (op->printf)(op," Output Table entries = %u\n",p->outputEnt); -+ (op->printf)(op," XYZ matrix = %f, %f, %f\n",p->e[0][0],p->e[0][1],p->e[0][2]); -+ (op->printf)(op," %f, %f, %f\n",p->e[1][0],p->e[1][1],p->e[1][2]); -+ (op->printf)(op," %f, %f, %f\n",p->e[2][0],p->e[2][1],p->e[2][2]); - - if (verb >= 2) { - unsigned int i, j, size; - unsigned int ii[MAX_CHAN]; /* maximum no of input channels */ - -- op->printf(op," Input table:\n"); -+ (op->printf)(op," Input table:\n"); - for (i = 0; i < p->inputEnt; i++) { -- op->printf(op," %3u: ",i); -+ (op->printf)(op," %3u: ",i); - for (j = 0; j < p->inputChan; j++) -- op->printf(op," %1.10f",p->inputTable[j * p->inputEnt + i]); -- op->printf(op,"\n"); -+ (op->printf)(op," %1.10f",p->inputTable[j * p->inputEnt + i]); -+ (op->printf)(op,"\n"); - } - -- op->printf(op,"\n CLUT table:\n"); -+ (op->printf)(op,"\n CLUT table:\n"); - if (p->inputChan > MAX_CHAN) { -- op->printf(op," !!Can't dump > %d input channel CLUT table!!\n",MAX_CHAN); -+ (op->printf)(op," !!Can't dump > %d input channel CLUT table!!\n",MAX_CHAN); - } else { - size = (p->outputChan * uipow(p->clutPoints,p->inputChan)); - for (j = 0; j < p->inputChan; j++) -@@ -6023,14 +6023,14 @@ - for (i = 0; i < size;) { - unsigned int k; - /* Print table entry index */ -- op->printf(op," "); -+ (op->printf)(op," "); - for (j = p->inputChan-1; j < p->inputChan; j--) -- op->printf(op," %2u",ii[j]); -- op->printf(op,":"); -+ (op->printf)(op," %2u",ii[j]); -+ (op->printf)(op,":"); - /* Print table entry contents */ - for (k = 0; k < p->outputChan; k++, i++) -- op->printf(op," %1.10f",p->clutTable[i]); -- op->printf(op,"\n"); -+ (op->printf)(op," %1.10f",p->clutTable[i]); -+ (op->printf)(op,"\n"); - - for (j = 0; j < p->inputChan; j++) { /* Increment index */ - ii[j]++; -@@ -6041,12 +6041,12 @@ - } - } - -- op->printf(op,"\n Output table:\n"); -+ (op->printf)(op,"\n Output table:\n"); - for (i = 0; i < p->outputEnt; i++) { -- op->printf(op," %3u: ",i); -+ (op->printf)(op," %3u: ",i); - for (j = 0; j < p->outputChan; j++) -- op->printf(op," %1.10f",p->outputTable[j * p->outputEnt + i]); -- op->printf(op,"\n"); -+ (op->printf)(op," %1.10f",p->outputTable[j * p->outputEnt + i]); -+ (op->printf)(op,"\n"); - } - - } -@@ -6356,12 +6356,12 @@ - if (verb <= 0) - return; - -- op->printf(op,"Measurement:\n"); -- op->printf(op," Standard Observer = %s\n", string_StandardObserver(p->observer)); -- op->printf(op," XYZ for Measurement Backing = %s\n", string_XYZNumber_and_Lab(&p->backing)); -- op->printf(op," Measurement Geometry = %s\n", string_MeasurementGeometry(p->geometry)); -- op->printf(op," Measurement Flare = %5.1f%%\n", p->flare * 100.0); -- op->printf(op," Standard Illuminant = %s\n", string_Illuminant(p->illuminant)); -+ (op->printf)(op,"Measurement:\n"); -+ (op->printf)(op," Standard Observer = %s\n", string_StandardObserver(p->observer)); -+ (op->printf)(op," XYZ for Measurement Backing = %s\n", string_XYZNumber_and_Lab(&p->backing)); -+ (op->printf)(op," Measurement Geometry = %s\n", string_MeasurementGeometry(p->geometry)); -+ (op->printf)(op," Measurement Flare = %5.1f%%\n", p->flare * 100.0); -+ (op->printf)(op," Standard Illuminant = %s\n", string_Illuminant(p->illuminant)); - } - - /* Allocate variable sized data elements */ -@@ -6839,45 +6839,45 @@ - return; - - if (p->ttype == icSigNamedColorType) -- op->printf(op,"NamedColor:\n"); -+ (op->printf)(op,"NamedColor:\n"); - else -- op->printf(op,"NamedColor2:\n"); -- op->printf(op," Vendor Flag = 0x%x\n",p->vendorFlag); -- op->printf(op," No. colors = %u\n",p->count); -- op->printf(op," No. dev. coords = %u\n",p->nDeviceCoords); -- op->printf(op," Name prefix = '%s'\n",p->prefix); -- op->printf(op," Name suffix = '%s'\n",p->suffix); -+ (op->printf)(op,"NamedColor2:\n"); -+ (op->printf)(op," Vendor Flag = 0x%x\n",p->vendorFlag); -+ (op->printf)(op," No. colors = %u\n",p->count); -+ (op->printf)(op," No. dev. coords = %u\n",p->nDeviceCoords); -+ (op->printf)(op," Name prefix = '%s'\n",p->prefix); -+ (op->printf)(op," Name suffix = '%s'\n",p->suffix); - if (verb >= 2) { - unsigned long i, n; - icmNamedColorVal *vp; - for (i = 0; i < p->count; i++) { - vp = p->data + i; -- op->printf(op," Color %lu:\n",i); -- op->printf(op," Name root = '%s'\n",vp->root); -+ (op->printf)(op," Color %lu:\n",i); -+ (op->printf)(op," Name root = '%s'\n",vp->root); - - if (p->ttype == icSigNamedColor2Type) { - switch(icp->header->pcs) { - case icSigXYZData: -- op->printf(op," XYZ = %f, %f, %f\n", -+ (op->printf)(op," XYZ = %f, %f, %f\n", - vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]); - break; - case icSigLabData: -- op->printf(op," Lab = %f, %f, %f\n", -+ (op->printf)(op," Lab = %f, %f, %f\n", - vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]); - break; - default: -- op->printf(op," Unexpected PCS\n"); -+ (op->printf)(op," Unexpected PCS\n"); - break; - } - } - if (p->nDeviceCoords > 0) { -- op->printf(op," Device Coords = "); -+ (op->printf)(op," Device Coords = "); - for (n = 0; n < p->nDeviceCoords; n++) { - if (n > 0) -- op->printf(op,", "); -- op->printf(op,"%f",vp->deviceCoords[n]); -+ (op->printf)(op,", "); -+ (op->printf)(op,"%f",vp->deviceCoords[n]); - } -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } - } -@@ -7177,28 +7177,28 @@ - return; - - if (p->ttype == icSigColorantTableType) -- op->printf(op,"ColorantTable:\n"); -- op->printf(op," No. colorants = %u\n",p->count); -+ (op->printf)(op,"ColorantTable:\n"); -+ (op->printf)(op," No. colorants = %u\n",p->count); - if (verb >= 2) { - unsigned long i; - icmColorantTableVal *vp; - for (i = 0; i < p->count; i++) { - vp = p->data + i; -- op->printf(op," Colorant %lu:\n",i); -- op->printf(op," Name = '%s'\n",vp->name); -+ (op->printf)(op," Colorant %lu:\n",i); -+ (op->printf)(op," Name = '%s'\n",vp->name); - - if (p->ttype == icSigColorantTableType) { - switch(pcs) { - case icSigXYZData: -- op->printf(op," XYZ = %f, %f, %f\n", -+ (op->printf)(op," XYZ = %f, %f, %f\n", - vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]); - break; - case icSigLabData: -- op->printf(op," Lab = %f, %f, %f\n", -+ (op->printf)(op," Lab = %f, %f, %f\n", - vp->pcsCoords[0],vp->pcsCoords[1],vp->pcsCoords[2]); - break; - default: -- op->printf(op," Unexpected PCS\n"); -+ (op->printf)(op," Unexpected PCS\n"); - break; - } - } -@@ -7596,98 +7596,98 @@ - if (verb <= 0) - return; - -- op->printf(op,"TextDescription:\n"); -+ (op->printf)(op,"TextDescription:\n"); - - if (p->size > 0) { - unsigned long size = p->size > 0 ? p->size-1 : 0; -- op->printf(op," ASCII data, length %lu chars:\n",p->size); -+ (op->printf)(op," ASCII data, length %lu chars:\n",p->size); - - i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - c = 1; -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - c += 10; - while (i < size && c < 75) { - if (isprint(p->desc[i])) { -- op->printf(op,"%c",p->desc[i]); -+ (op->printf)(op,"%c",p->desc[i]); - c++; - } else { -- op->printf(op,"\\%03o",p->desc[i]); -+ (op->printf)(op,"\\%03o",p->desc[i]); - c += 4; - } - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } else { -- op->printf(op," No ASCII data\n"); -+ (op->printf)(op," No ASCII data\n"); - } - - /* Can't dump Unicode or ScriptCode as text with portable code */ - if (p->ucSize > 0) { - unsigned long size = p->ucSize; -- op->printf(op," Unicode Data, Language code 0x%x, length %lu chars\n", -+ (op->printf)(op," Unicode Data, Language code 0x%x, length %lu chars\n", - p->ucLangCode, p->ucSize); - i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - c = 1; -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - c += 10; - while (i < size && c < 75) { -- op->printf(op,"%04x ",p->ucDesc[i]); -+ (op->printf)(op,"%04x ",p->ucDesc[i]); - c += 5; - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } else { -- op->printf(op," No Unicode data\n"); -+ (op->printf)(op," No Unicode data\n"); - } - if (p->scSize > 0) { - unsigned long size = p->scSize; -- op->printf(op," ScriptCode Data, Code 0x%x, length %lu chars\n", -+ (op->printf)(op," ScriptCode Data, Code 0x%x, length %lu chars\n", - p->scCode, p->scSize); - i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - c = 1; -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - c += 10; - while (i < size && c < 75) { -- op->printf(op,"%02x ",p->scDesc[i]); -+ (op->printf)(op,"%02x ",p->scDesc[i]); - c += 3; - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } else { -- op->printf(op," No ScriptCode data\n"); -+ (op->printf)(op," No ScriptCode data\n"); - } - } - -@@ -7879,15 +7879,15 @@ - if (verb <= 0) - return; - -- op->printf(op,"DescStruct %u:\n",index); -+ (op->printf)(op,"DescStruct %u:\n",index); - if (verb >= 1) { -- op->printf(op," Dev. Mnfctr. = %s\n",tag2str(p->deviceMfg)); /* ~~~ */ -- op->printf(op," Dev. Model = %s\n",tag2str(p->deviceModel)); /* ~~~ */ -- op->printf(op," Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l)); -- op->printf(op," Dev. Technology = %s\n", string_TechnologySignature(p->technology)); -+ (op->printf)(op," Dev. Mnfctr. = %s\n",tag2str(p->deviceMfg)); /* ~~~ */ -+ (op->printf)(op," Dev. Model = %s\n",tag2str(p->deviceModel)); /* ~~~ */ -+ (op->printf)(op," Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l)); -+ (op->printf)(op," Dev. Technology = %s\n", string_TechnologySignature(p->technology)); - p->device.dump((icmBase *)&p->device, op,verb); - p->model.dump((icmBase *)&p->model, op,verb); -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } - -@@ -8068,8 +8068,8 @@ - if (verb <= 0) - return; - -- op->printf(op,"ProfileSequenceDesc:\n"); -- op->printf(op," No. elements = %u\n",p->count); -+ (op->printf)(op,"ProfileSequenceDesc:\n"); -+ (op->printf)(op," No. elements = %u\n",p->count); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->count; i++) -@@ -8249,8 +8249,8 @@ - if (verb <= 0) - return; - -- op->printf(op,"Signature\n"); -- op->printf(op," Technology = %s\n", string_TechnologySignature(p->sig)); -+ (op->printf)(op,"Signature\n"); -+ (op->printf)(op," Technology = %s\n", string_TechnologySignature(p->sig)); - } - - /* Allocate variable sized data elements */ -@@ -8457,16 +8457,16 @@ - if (verb <= 0) - return; - -- op->printf(op,"Screening:\n"); -- op->printf(op," Flags = %s\n", string_ScreenEncodings(p->screeningFlag)); -- op->printf(op," No. channels = %u\n",p->channels); -+ (op->printf)(op,"Screening:\n"); -+ (op->printf)(op," Flags = %s\n", string_ScreenEncodings(p->screeningFlag)); -+ (op->printf)(op," No. channels = %u\n",p->channels); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->channels; i++) { -- op->printf(op," %lu:\n",i); -- op->printf(op," Frequency: %f\n",p->data[i].frequency); -- op->printf(op," Angle: %f\n",p->data[i].angle); -- op->printf(op," Spot shape: %s\n", string_SpotShape(p->data[i].spotShape)); -+ (op->printf)(op," %lu:\n",i); -+ (op->printf)(op," Frequency: %f\n",p->data[i].frequency); -+ (op->printf)(op," Angle: %f\n",p->data[i].angle); -+ (op->printf)(op," Spot shape: %s\n", string_SpotShape(p->data[i].spotShape)); - } - } - } -@@ -8757,64 +8757,64 @@ - if (verb <= 0) - return; - -- op->printf(op,"Undercolor Removal Curve & Black Generation:\n"); -+ (op->printf)(op,"Undercolor Removal Curve & Black Generation:\n"); - - if (p->UCRcount == 0) { -- op->printf(op," UCR: Not specified\n"); -+ (op->printf)(op," UCR: Not specified\n"); - } else if (p->UCRcount == 1) { -- op->printf(op," UCR: %f%%\n",p->UCRcurve[0]); -+ (op->printf)(op," UCR: %f%%\n",p->UCRcurve[0]); - } else { -- op->printf(op," UCR curve no. elements = %u\n",p->UCRcount); -+ (op->printf)(op," UCR curve no. elements = %u\n",p->UCRcount); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->UCRcount; i++) -- op->printf(op," %3lu: %f\n",i,p->UCRcurve[i]); -+ (op->printf)(op," %3lu: %f\n",i,p->UCRcurve[i]); - } - } - if (p->BGcount == 0) { -- op->printf(op," BG: Not specified\n"); -+ (op->printf)(op," BG: Not specified\n"); - } else if (p->BGcount == 1) { -- op->printf(op," BG: %f%%\n",p->BGcurve[0]); -+ (op->printf)(op," BG: %f%%\n",p->BGcurve[0]); - } else { -- op->printf(op," BG curve no. elements = %u\n",p->BGcount); -+ (op->printf)(op," BG curve no. elements = %u\n",p->BGcount); - if (verb >= 2) { - unsigned long i; - for (i = 0; i < p->BGcount; i++) -- op->printf(op," %3lu: %f\n",i,p->BGcurve[i]); -+ (op->printf)(op," %3lu: %f\n",i,p->BGcurve[i]); - } - } - - { - unsigned long i, r, c, size; -- op->printf(op," Description:\n"); -- op->printf(op," No. chars = %lu\n",p->size); -+ (op->printf)(op," Description:\n"); -+ (op->printf)(op," No. chars = %lu\n",p->size); - - size = p->size > 0 ? p->size-1 : 0; - i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - c = 1; -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - c += 10; - while (i < size && c < 73) { - if (isprint(p->string[i])) { -- op->printf(op,"%c",p->string[i]); -+ (op->printf)(op,"%c",p->string[i]); - c++; - } else { -- op->printf(op,"\\%03o",p->string[i]); -+ (op->printf)(op,"\\%03o",p->string[i]); - c += 4; - } - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } - } -@@ -9171,37 +9171,37 @@ - return; - - if (p->tagType == icmVideoCardGammaTableType) { -- op->printf(op,"VideoCardGammaTable:\n"); -- op->printf(op," channels = %d\n", p->u.table.channels); -- op->printf(op," entries = %d\n", p->u.table.entryCount); -- op->printf(op," entrysize = %d\n", p->u.table.entrySize); -+ (op->printf)(op,"VideoCardGammaTable:\n"); -+ (op->printf)(op," channels = %d\n", p->u.table.channels); -+ (op->printf)(op," entries = %d\n", p->u.table.entryCount); -+ (op->printf)(op," entrysize = %d\n", p->u.table.entrySize); - if (verb >= 2) { - /* dump array contents also */ - for (c=0; cu.table.channels; c++) { -- op->printf(op," channel #%d\n",c); -+ (op->printf)(op," channel #%d\n",c); - for (i=0; iu.table.entryCount; i++) { - if (p->u.table.entrySize == 1) { -- op->printf(op," %d: %d\n",i,((ORD8 *)p->u.table.data)[c*p->u.table.entryCount+i]); -+ (op->printf)(op," %d: %d\n",i,((ORD8 *)p->u.table.data)[c*p->u.table.entryCount+i]); - } - else if (p->u.table.entrySize == 2) { -- op->printf(op," %d: %d\n",i,((ORD16 *)p->u.table.data)[c*p->u.table.entryCount+i]); -+ (op->printf)(op," %d: %d\n",i,((ORD16 *)p->u.table.data)[c*p->u.table.entryCount+i]); - } - } - } - } - } else if (p->tagType == icmVideoCardGammaFormulaType) { -- op->printf(op,"VideoCardGammaFormula:\n"); -- op->printf(op," red gamma = %f\n", p->u.formula.redGamma); -- op->printf(op," red min = %f\n", p->u.formula.redMin); -- op->printf(op," red max = %f\n", p->u.formula.redMax); -- op->printf(op," green gamma = %f\n", p->u.formula.greenGamma); -- op->printf(op," green min = %f\n", p->u.formula.greenMin); -- op->printf(op," green max = %f\n", p->u.formula.greenMax); -- op->printf(op," blue gamma = %f\n", p->u.formula.blueGamma); -- op->printf(op," blue min = %f\n", p->u.formula.blueMin); -- op->printf(op," blue max = %f\n", p->u.formula.blueMax); -+ (op->printf)(op,"VideoCardGammaFormula:\n"); -+ (op->printf)(op," red gamma = %f\n", p->u.formula.redGamma); -+ (op->printf)(op," red min = %f\n", p->u.formula.redMin); -+ (op->printf)(op," red max = %f\n", p->u.formula.redMax); -+ (op->printf)(op," green gamma = %f\n", p->u.formula.greenGamma); -+ (op->printf)(op," green min = %f\n", p->u.formula.greenMin); -+ (op->printf)(op," green max = %f\n", p->u.formula.greenMax); -+ (op->printf)(op," blue gamma = %f\n", p->u.formula.blueGamma); -+ (op->printf)(op," blue min = %f\n", p->u.formula.blueMin); -+ (op->printf)(op," blue max = %f\n", p->u.formula.blueMax); - } else { -- op->printf(op," Unknown tag format\n"); -+ (op->printf)(op," Unknown tag format\n"); - } - } - -@@ -9484,10 +9484,10 @@ - if (verb <= 0) - return; - -- op->printf(op,"Viewing Conditions:\n"); -- op->printf(op," XYZ value of illuminant in cd/m^2 = %s\n", string_XYZNumber(&p->illuminant)); -- op->printf(op," XYZ value of surround in cd/m^2 = %s\n", string_XYZNumber(&p->surround)); -- op->printf(op," Illuminant type = %s\n", string_Illuminant(p->stdIlluminant)); -+ (op->printf)(op,"Viewing Conditions:\n"); -+ (op->printf)(op," XYZ value of illuminant in cd/m^2 = %s\n", string_XYZNumber(&p->illuminant)); -+ (op->printf)(op," XYZ value of surround in cd/m^2 = %s\n", string_XYZNumber(&p->surround)); -+ (op->printf)(op," Illuminant type = %s\n", string_Illuminant(p->stdIlluminant)); - } - - /* Allocate variable sized data elements */ -@@ -9734,69 +9734,69 @@ - if (verb <= 0) - return; - -- op->printf(op,"PostScript Product name and CRD names:\n"); -+ (op->printf)(op,"PostScript Product name and CRD names:\n"); - -- op->printf(op," Product name:\n"); -- op->printf(op," No. chars = %lu\n",p->ppsize); -+ (op->printf)(op," Product name:\n"); -+ (op->printf)(op," No. chars = %lu\n",p->ppsize); - - size = p->ppsize > 0 ? p->ppsize-1 : 0; - i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - c = 1; -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - c += 10; - while (i < size && c < 73) { - if (isprint(p->ppname[i])) { -- op->printf(op,"%c",p->ppname[i]); -+ (op->printf)(op,"%c",p->ppname[i]); - c++; - } else { -- op->printf(op,"\\%03o",p->ppname[i]); -+ (op->printf)(op,"\\%03o",p->ppname[i]); - c += 4; - } - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - - for (t = 0; t < 4; t++) { /* For all 4 intents */ -- op->printf(op," CRD%ld name:\n",t); -- op->printf(op," No. chars = %lu\n",p->crdsize[t]); -+ (op->printf)(op," CRD%ld name:\n",t); -+ (op->printf)(op," No. chars = %lu\n",p->crdsize[t]); - - size = p->crdsize[t] > 0 ? p->crdsize[t]-1 : 0; - i = 0; - for (r = 1;; r++) { /* count rows */ - if (i >= size) { -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - break; - } - if (r > 1 && verb < 2) { -- op->printf(op,"...\n"); -+ (op->printf)(op,"...\n"); - break; /* Print 1 row if not verbose */ - } - c = 1; -- op->printf(op," 0x%04lx: ",i); -+ (op->printf)(op," 0x%04lx: ",i); - c += 10; - while (i < size && c < 73) { - if (isprint(p->crdname[t][i])) { -- op->printf(op,"%c",p->crdname[t][i]); -+ (op->printf)(op,"%c",p->crdname[t][i]); - c++; - } else { -- op->printf(op,"\\%03o",p->crdname[t][i]); -+ (op->printf)(op,"\\%03o",p->crdname[t][i]); - c += 4; - } - i++; - } - if (i < size) -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } - } -@@ -10108,36 +10108,36 @@ - if (verb <= 0) - return; - -- op->printf(op,"Header:\n"); -- op->printf(op," size = %d bytes\n",p->size); -- op->printf(op," CMM = %s\n",tag2str(p->cmmId)); -- op->printf(op," Version = %d.%d.%d\n",p->majv, p->minv, p->bfv); -- op->printf(op," Device Class = %s\n", string_ProfileClassSignature(p->deviceClass)); -- op->printf(op," Color Space = %s\n", string_ColorSpaceSignature(p->colorSpace)); -- op->printf(op," Conn. Space = %s\n", string_ColorSpaceSignature(p->pcs)); -- op->printf(op," Date, Time = %s\n", string_DateTimeNumber(&p->date)); -- op->printf(op," Platform = %s\n", string_PlatformSignature(p->platform)); -- op->printf(op," Flags = %s\n", string_ProfileHeaderFlags(p->flags)); -- op->printf(op," Dev. Mnfctr. = %s\n", tag2str(p->manufacturer)); /* ~~~ */ -- op->printf(op," Dev. Model = %s\n", tag2str(p->model)); /* ~~~ */ -- op->printf(op," Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l)); -- op->printf(op," Rndrng Intnt = %s\n", string_RenderingIntent(p->renderingIntent)); -- op->printf(op," Illuminant = %s\n", string_XYZNumber_and_Lab(&p->illuminant)); -- op->printf(op," Creator = %s\n", tag2str(p->creator)); /* ~~~ */ -+ (op->printf)(op,"Header:\n"); -+ (op->printf)(op," size = %d bytes\n",p->size); -+ (op->printf)(op," CMM = %s\n",tag2str(p->cmmId)); -+ (op->printf)(op," Version = %d.%d.%d\n",p->majv, p->minv, p->bfv); -+ (op->printf)(op," Device Class = %s\n", string_ProfileClassSignature(p->deviceClass)); -+ (op->printf)(op," Color Space = %s\n", string_ColorSpaceSignature(p->colorSpace)); -+ (op->printf)(op," Conn. Space = %s\n", string_ColorSpaceSignature(p->pcs)); -+ (op->printf)(op," Date, Time = %s\n", string_DateTimeNumber(&p->date)); -+ (op->printf)(op," Platform = %s\n", string_PlatformSignature(p->platform)); -+ (op->printf)(op," Flags = %s\n", string_ProfileHeaderFlags(p->flags)); -+ (op->printf)(op," Dev. Mnfctr. = %s\n", tag2str(p->manufacturer)); /* ~~~ */ -+ (op->printf)(op," Dev. Model = %s\n", tag2str(p->model)); /* ~~~ */ -+ (op->printf)(op," Dev. Attrbts = %s\n", string_DeviceAttributes(p->attributes.l)); -+ (op->printf)(op," Rndrng Intnt = %s\n", string_RenderingIntent(p->renderingIntent)); -+ (op->printf)(op," Illuminant = %s\n", string_XYZNumber_and_Lab(&p->illuminant)); -+ (op->printf)(op," Creator = %s\n", tag2str(p->creator)); /* ~~~ */ - if (p->icp->ver) { /* V4.0+ feature */ - for (i = 0; i < 16; i++) { /* Check if ID has been set */ - if (p->id[i] != 0) - break; - } - if (i < 16) -- op->printf(op," ID = %02X%02X%02X%02X%02X%02X%02X%02X" -+ (op->printf)(op," ID = %02X%02X%02X%02X%02X%02X%02X%02X" - "%02X%02X%02X%02X%02X%02X%02X%02X\n", - p->id[0], p->id[1], p->id[2], p->id[3], p->id[4], p->id[5], p->id[6], p->id[7], - p->id[8], p->id[9], p->id[10], p->id[11], p->id[12], p->id[13], p->id[14], p->id[15]); - else -- op->printf(op," ID = \n"); -+ (op->printf)(op," ID = \n"); - } -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - - static void icmHeader_delete( -@@ -11420,7 +11420,7 @@ - if (verb <= 0) - return; - -- op->printf(op,"icc:\n"); -+ (op->printf)(op,"icc:\n"); - - /* Dump the header */ - if (p->header != NULL) -@@ -11430,21 +11430,21 @@ - for (i = 0; i < p->count; i++) { /* For all the tag element data */ - icmBase *ob; - int tr; -- op->printf(op,"tag %d:\n",i); -- op->printf(op," sig %s\n",tag2str(p->data[i].sig)); -- op->printf(op," type %s\n",tag2str(p->data[i].ttype)); -- op->printf(op," offset %d\n", p->data[i].offset); -- op->printf(op," size %d\n", p->data[i].size); -+ (op->printf)(op,"tag %d:\n",i); -+ (op->printf)(op," sig %s\n",tag2str(p->data[i].sig)); -+ (op->printf)(op," type %s\n",tag2str(p->data[i].ttype)); -+ (op->printf)(op," offset %d\n", p->data[i].offset); -+ (op->printf)(op," size %d\n", p->data[i].size); - tr = 0; - if ((ob = p->data[i].objp) == NULL) { - /* The object is not loaded, so load it then free it */ - if ((ob = p->read_tag(p, p->data[i].sig)) == NULL) { -- op->printf(op,"Unable to read: %d, %s\n",p->errc,p->err); -+ (op->printf)(op,"Unable to read: %d, %s\n",p->errc,p->err); - } - tr = 1; - } - if (ob != NULL) { -- /* op->printf(op," refcount %d\n", ob->refcount); */ -+ /* (op->printf)(op," refcount %d\n", ob->refcount); */ - ob->dump(ob,op,verb-1); - - if (tr != 0) { /* Cleanup if temporary */ -@@ -11453,7 +11453,7 @@ - p->data[i].objp = NULL; - } - } -- op->printf(op,"\n"); -+ (op->printf)(op,"\n"); - } - } - -diff -uNr Argyll_V1.0.1.orig/icc/iccdump.c Argyll_V1.0.1/icc/iccdump.c ---- Argyll_V1.0.1.orig/icc/iccdump.c 2008-07-14 06:11:23.000000000 +0200 -+++ Argyll_V1.0.1/icc/iccdump.c 2008-07-27 13:38:24.000000000 +0200 -@@ -216,13 +216,13 @@ - else if (rv == 2) { - icmHeader *p = icco->header; - printf("Id check fails:\n"); -- op->printf(op," ID is = %02X%02X%02X%02X%02X%02X%02X%02X" -+ (op->printf)(op," ID is = %02X%02X%02X%02X%02X%02X%02X%02X" - "%02X%02X%02X%02X%02X%02X%02X%02X\n", - p->id[0], p->id[1], p->id[2], p->id[3], - p->id[4], p->id[5], p->id[6], p->id[7], - p->id[8], p->id[9], p->id[10], p->id[11], - p->id[12], p->id[13], p->id[14], p->id[15]); -- op->printf(op," ID should be = %02X%02X%02X%02X%02X%02X%02X%02X" -+ (op->printf)(op," ID should be = %02X%02X%02X%02X%02X%02X%02X%02X" - "%02X%02X%02X%02X%02X%02X%02X%02X\n", - id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7], - id[8], id[9], id[10], id[11], id[12], id[13], id[14], id[15]); diff --git a/argyllcms-1.0.2-legal.patch b/argyllcms-1.0.2-legal.patch new file mode 100644 index 0000000..3c6ea6e --- /dev/null +++ b/argyllcms-1.0.2-legal.patch @@ -0,0 +1,662 @@ +diff -uNr Argyll_V1.0.1.orig/doc/ArgyllDoc.html Argyll_V1.0.1/doc/ArgyllDoc.html +--- Argyll_V1.0.1.orig/doc/ArgyllDoc.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/ArgyllDoc.html 2008-07-27 11:39:29.000000000 +0200 +@@ -18,7 +18,7 @@ + Author: Graeme Gill +

Introduction

+ Argyll is an open source, ICC compatible color management +-system. It supports accurate ICC profile creation for scanners, CMYK ++system. It supports accurate ICC profile creation for acquisition devices, CMYK + printers, + film recorders and calibration and profiling of displays. + Spectral sample data is supported, +diff -uNr Argyll_V1.0.1.orig/doc/chartread.html Argyll_V1.0.1/doc/chartread.html +--- Argyll_V1.0.1.orig/doc/chartread.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/chartread.html 2008-07-27 11:40:27.000000000 +0200 +@@ -206,7 +206,7 @@ +
+ Normally the patch locations are not needed in the + output, but if a chart is being read as an input reference (for use in +-profiling a scanner or a camera), then the patch locations will still ++profiling an acquisition device), then the patch locations will still + be needed. The -a flag adds + the locations to the output .ti3 file.
+
+diff -uNr Argyll_V1.0.1.orig/doc/colprof.html Argyll_V1.0.1/doc/colprof.html +--- Argyll_V1.0.1.orig/doc/colprof.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/colprof.html 2008-07-27 11:41:01.000000000 +0200 +@@ -617,8 +617,8 @@ + absolute value, and any values whiter than that, will not be clipped by + the profile. The profile effectively operates in an absolute intent + mode,  irrespective of what intent is selected when it is used. +-This flag can be useful when an input profile is needed for using a +-scanner as a "poor mans" colorimeter, or if the white point of the test ++This flag can be useful when an input profile is needed for using an ++acquisition device as a "poor mans" colorimeter, or if the white point of the test + chart doesn't represent the white points of media + that will be used in practice, and that white point adjustment will be + done individually in some downstream application.
+diff -uNr Argyll_V1.0.1.orig/doc/Installing_Linux.html Argyll_V1.0.1/doc/Installing_Linux.html +--- Argyll_V1.0.1.orig/doc/Installing_Linux.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/Installing_Linux.html 2008-07-27 11:42:29.000000000 +0200 +@@ -30,7 +30,7 @@ + variable to give access to the executables from your command line + environment. + The .tgz file also contains several useful reference files (such as +-scanner ++acquisition device + chart recognition templates, sample illumination spectrum etc.) in the + ref sub-directory, as + well +diff -uNr Argyll_V1.0.1.orig/doc/Installing_MSWindows.html Argyll_V1.0.1/doc/Installing_MSWindows.html +--- Argyll_V1.0.1.orig/doc/Installing_MSWindows.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/Installing_MSWindows.html 2008-07-27 11:42:50.000000000 +0200 +@@ -69,7 +69,7 @@ +
+ The .zip file also contains several useful reference files + (such as +-scanner ++acquisition device + chart recognition templates, sample illumination spectrum etc.) in the + ref sub-directory, all the current documentation in a doc + sub-directory, and instrument USB drivers in the libusbw directory.
+diff -uNr Argyll_V1.0.1.orig/doc/Installing_OSX.html Argyll_V1.0.1/doc/Installing_OSX.html +--- Argyll_V1.0.1.orig/doc/Installing_OSX.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/Installing_OSX.html 2008-07-27 11:39:58.000000000 +0200 +@@ -30,7 +30,7 @@ + with how to do this, consult an appropriate tutorial, e.g. <ShellIntro>. + The .tgz file also contains several useful reference files (such as +-scanner chart recognition templates, sample illumination spectrum ++acquisition device chart recognition templates, sample illumination spectrum + etc.) in the ref sub-directory, as well as + all the current documentation in a doc sub-directory.
+
+diff -uNr Argyll_V1.0.1.orig/doc/Organisation.html Argyll_V1.0.1/doc/Organisation.html +--- Argyll_V1.0.1.orig/doc/Organisation.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/Organisation.html 2008-07-27 11:36:55.000000000 +0200 +@@ -13,7 +13,7 @@ + This directory contains routines that generate calibration test charts, + based + on various distribution algorithms suitable for +-reading using an Xrite DTP51 or DTP41 colorimeter, or scanner for print ++reading using an Xrite DTP51 or DTP41 colorimeter, or acquisition device for print + charts, + the Gretag Spectrolino for film charts, or the Xrite DTP92 pr DTP94 for + monitor +diff -uNr Argyll_V1.0.1.orig/doc/printtarg.html Argyll_V1.0.1/doc/printtarg.html +--- Argyll_V1.0.1.orig/doc/printtarg.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/printtarg.html 2008-07-27 11:36:27.000000000 +0200 +@@ -167,7 +167,7 @@ + file, and a .ti2 file containing the device test values together with + the layout information needed to identify the patch location. This + module can also generate the image recognition templates needed to read +-the print targets in using a scanner.
++the print targets in using an acquisition device.
+
+ The -v flag turns on verbose mode. Prints + information about how many patches there are in a row, how many patches +diff -uNr Argyll_V1.0.1.orig/doc/scanin.html Argyll_V1.0.1/doc/scanin.html +--- Argyll_V1.0.1.orig/doc/scanin.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/scanin.html 2008-07-27 11:34:18.000000000 +0200 +@@ -23,7 +23,7 @@ + recogin.cht + valin.cie [diag.tif]

+    :- inputs +-'input.tif',  and outputs scanner ++'input.tif',  and outputs device + 'input.ti3', or
+
+ usage                   + Replace device values in .ti3
+                       +-Default is to create a scanner .ti3 file
++Default is to create a device .ti3 file
+
 -F x1,y1,x2,y2,x3,y3,x4,y4
+@@ -187,10 +187,10 @@ + of the chart are visible within the image, and if the image is cropped + to exclude the chart edges, it may well not recognize the chart + properly. It is designed to cope with a variety of resolutions, and +-will cope with some degree of noise in the scan (due to screening ++will cope with some degree of noise in the acquisition (due to screening + artefacts on the original, or film grain), but it isn't really designed + to accept very high resolution input. For anything over 600DPI, you +-should consider down sampling the scan using a filtering downsample, ++should consider down sampling the image using a filtering downsample, + before submitting the file to scanin.
+
+ There are 5 basic modes that scanin operates in.
+@@ -199,7 +199,7 @@ + assumed to be parsing an input device characterization chart (ie. an + IT8.7/2 chart), for the purpose of creating a .ti3 data file containing +-the CIE test values and the corresponding RGB scanner values. The .ti3 file can then be used for + creating + an input profile using colprof. The file +@@ -221,7 +221,7 @@ + file in + this situation, should be a good quality image, perhaps synthetically + generated +-(rather than being scanned), and perfectly oriented, to make ++(rather than being parsed), and perfectly oriented, to make + specification + of the patch locations easier. The file arguments are: The + TIFF file that +@@ -245,7 +245,7 @@ + input devices to be used as a crude replacement for a color measuring + instrument. The icc profile has + (presumably) been +-created by scanning an IT8.7/2 chart (or similar) through the RGB input ++created with an image of a IT8.7/2 chart (or similar) through the RGB input + device, + and + then using scanin to create the .ti3 file needed to feed to colprof to +@@ -267,7 +267,7 @@ + The resulting .ti3 file will have the same base name as the input TIFF + file. + If there is more than one page in the test chart, then scanin will need +-to be run multiple times, once for each scan file made from each test ++to be run multiple times, once for each image file made from each test + chart. The -ca flag combination should be + used + for all pages after the first, +@@ -339,7 +339,7 @@ +
+ By default the automatic chart recognition copes with + rotation, scale and stretch in the chart image, making it suitable for +-charts that have been scanned, or shot squarely with a camera. If a ++charts that have been acquired, or shot squarely with a camera. If a + chart has been shot not exactly facing the camera (perhaps to avoid + reflection, or to get more even lighting), then it will suffer from + perspective distortion as well. The Normally scanin computes an average of the pixel values + within a sample square, using a "robust" mean, that discards pixel + values that are too far from the average ("outlier" pixel values). This +-is done in an attempt to discard value that are due to scanning ++is done in an attempt to discard value that are due to acquisition + artefacts such as dust, scratches etc. You can force scanin to return + the true mean values for the sample squares that includes all the pixel + values, by using the -m flag.
+@@ -357,9 +357,9 @@ + Normally scanin has reasonably robust feature + recognition, but the default assumption is that the input chart has an + approximately even visual distribution of patch values, and has been +-scanned and converted to a typical gamma 2.2 corrected image, meaning ++acquired and converted to a typical gamma 2.2 corrected image, meaning + that the average patch pixel value is expected to be about 50%. If this +-is not the case (for instance if the input chart has been scanned with ++is not the case (for instance if the input chart has been processed with + linear light or "raw" encoding), then it may enhance the image + recognition to provide the approximate gamma encoding of the image. For + instance, if linear light encoding ("Raw") is used, a Installing a + display profile +


+-Profiling Scanners

++Profiling Acquisition Devices +

    Types of test charts

+-

    Taking readings from a scanner

+-

    Creating a scanner profile

++

    Taking readings from an acquisition device

++

    Creating an acquisition device profile

+


+ Profiling Printers

+

    Creating a print test chart

+

    Reading a print test chart + using an instrument

+

    Reading a print test chart +-using a scanner

++using an acquisition device +

+

    Creating a printer profile
+

+@@ -353,14 +353,14 @@ + the connected display.
+
+
+-

Profiling Scanners

+-Because a scanner is an input device, it is necessary to go about ++

Profiling Acquisition Devices

++Because a acquisition device is an input device, it is necessary to go about + profiling it in quite a different way to an output device. To profile +-it, a test chart is needed to exercise the scanner response, to which ++it, a test chart is needed to exercise the device response, to which + the CIE values for each test patch is known. Generally standard + reflection or transparency test charts are used for this purpose.
+

Types of test charts

+-The most common and popular test chart for scanner profiling is the ++The most common and popular test chart for acquisiton device profiling is the + IT8.7/2 chart. This is a standard format chart generally reproduced on + photographic film, containing about 264 test patches. The Kodak Q-60 + Color Input Target is a typical example:
+@@ -400,18 +400,18 @@ + CMP_DT_003
+
+-

Taking readings from a scanner

+-The test chart you are using needs to be placed on the scanner, and the +-scanner needs to be configured to a suitable state, and restored to ++

Taking readings from an acquisition device

++The test chart you are using needs to be exposed to the device, and the ++acquisition device needs to be configured to a suitable state, and restored to + that + same state when used subsequently with the resulting profile. The chart + should + be scanned, and saved to a TIFF format file. I will assume the + resulting +-file is called scanner.tif. The raster file need only be roughly ++file is called device.tif. The raster file need only be roughly + cropped so as to contain the test chart (including the charts edges).
+
+-The second step is to extract the RGB values from the scanner.tif file, ++The second step is to extract the RGB values from the device.tif file, + and match then to the reference CIE values. + To locate the patch values in the scan, the scanin utility + needs to +@@ -485,32 +485,32 @@ + chart recognition template file will need to be created (this is beyond + the scope of the current documentation).
+
+-To create the scanner .ti3 file, run the scanin utility as ++To create the device .ti3 file, run the scanin utility as + follows + (assuming an IT8 chart is being used):
+
+- scanin -v scanner.tif It8.cht It8ref.txt
++ scanin -v device.tif It8.cht It8ref.txt
+
+ "It8ref.txt" is assumed to be the name of the CIE reference file +-supplied by the chart manufacturer. The resulting file will be named "scanner.ti3".
++supplied by the chart manufacturer. The resulting file will be named "device.ti3".
+
+ scanin will process 16 bit per +-component .tiff files, which (if the scanner is capable of creating ++component .tiff files, which (if the device is capable of creating + such files),  may improve the quality of the profile.
+
+ If you have any doubts about the correctness of the chart recognition, + or the subsequent profile's delta E report is unusual, then use the + scanin diagnostic flags -dipn and examine + the diag.tif diagnostic file.
+-

Creating a scanner profile

+-Similar to a display profile, a scanner profile can be either a +-shaper/matrix or LUT based profile. Well behaved scanners will ++

Creating an acquisition device profile

++Similar to a display profile, an acquisition device profile can be either a ++shaper/matrix or LUT based profile. Well behaved devices will + probably give the best results + with a shaper/matrix profile, but if the fit is poor, consider using a + LUT + type profile.
+
+-If the purpose of the scanner profile is to use it as a substitute for ++If the purpose of the device profile is to use it as a substitute for + a + colorimeter, then the -u flag should be used to avoid clipping + values above the white point. Unless the shaper/matrix type profile is +@@ -520,24 +520,24 @@ + To create a matrix/shaper profile, the following suffices:
+
+ colprof -v -D"Scanner A" -D"Device A" -qm -as +-scanner
++device
+
+ For a LUT based profile then the following would be used:
+
+ colprof -v -D"Scanner A" ++ href="colprof.html#E">-D"Device A" + -qm +-scanner
++device
+
+ For the purposes of a poor mans colorimeter, the following would + generally be used:
+
+ colprof -v -D"Scanner A" ++ href="colprof.html#E">-D"Device A" + -qm -u +-scanner
++device
+
+ Make sure you check the delta E report at the end of the profile + creation, to see if the profile is behaving reasonably.
+@@ -703,7 +703,7 @@ + -ii1 -pA4 + PrinterA
+
+-For using with a scanner as a colorimeter, the Gretag Spectroscan ++For using with an acquisition device as a colorimeter, the Gretag Spectroscan + layout is suitable, but the -s flag + should be used so as to generate a layout suitable for scan + recognition, as well as generating the scan recognition template +@@ -804,28 +804,27 @@ + for each type of instrument. Continue with Creating + a printer profile.
+
+-

Reading a print test chart using a scanner or +-camera
++

Reading a print test chart using an acquisition device
+

+
+-Argyll supports using a scanner or even a camera as a substitute for a ++Argyll supports using any acquisition device as a substitute for a + colorimeter. +-While a scanner or camera is no replacement for a color measurement ++While most are no replacement for a color measurement + instrument, it may give acceptable results in some situations, and may + give better results than a generic profile for a printing device.
+
+-The main limitation of the scanner-as-colorimeter approach are:
++The main limitation of the any-device-as-colorimeter approach are:
+
+-* The scanner dynamic range and/or precision may not match the printers ++* The acquisition device dynamic range and/or precision may not match the printers + or what is required for a good profile.
+-* The spectral interaction of the scanner test chart and printer test +-chart with the scanner ++* The spectral interaction of the device test chart and printer test ++chart with the device + spectral response can cause color errors.
+ * Spectral differences caused by different black amounts in the print + test chart can cause + color errors.
+ * The IT8 chart gamut may be so much smaller than the printers that the +-scanner profile is too inaccurate.
++acquisition device profile is too inaccurate.
+
+ As well as some of the above, a camera may not be suitable if it + automatically adjusts exposure or white point when taking a picture, +@@ -834,23 +833,23 @@ + The end result is often a profile that has a slight color cast to, + compared to a profile created using a colorimeter or spectrometer..
+
+-It is assumed that you have created a scanner or camera profile ++It is assumed that you have created an acquisition device profile + following the procedure + outline above. For best possible results it +-is advisable to both profile the scanner or camera, and use it in ++is advisable to both profile the acquisition device, and use it in + scanning the + printed test chart, in as "raw" mode as possible (i.e. using 16 bits +-per component images, if the scanner or camera is ++per component images, if the acquisition device is + capable of doing so; not setting white or black points, using a fixed + exposure etc.). It is + generally advisable to create a LUT type input profile, and use the -u flag to + avoid clipping scanned value whiter than the input calibration chart.
+
+-Scan or photograph your printer chart (or charts) on the scanner or +-camera previously profiled. ++Scan or photograph your printer chart (or charts) on the acquisition device ++previously profiled. + The +-scanner or camera must be configured and used exactly the same as it ++acquisition device must be configured and used exactly the same as it + was when it + was profiled.
+
+@@ -858,21 +857,21 @@ + style="font-weight: bold;">PrinterB.tif
(or PrinterB1.tif, PrinterB2.tif etc. in the case of +-multiple charts). As with profiling the scanner or camera, the raster ++multiple charts). As with profiling the acquisition device, the raster + file need + only be roughly cropped so as to contain the test chart.
+
+-The scanner recognition files ++The acquisition device recognition files + created when printtarg was run + is assumed to be called PrinterB.cht. +-Using the scanner profile created previously (assumed to be called scanner.icm), the printer test chart ++Using the device profile created previously (assumed to be called device.icm), the printer test chart + scan patches are converted to CIE values using the scanin utility:
+
+ scanin -v -c PrinterB.tif +-PrinterB.cht scanner.icm ++PrinterB.cht device.icm + PrinterB
+
+ If there were multiple test chart pages, the results would be +@@ -881,15 +880,15 @@ +
+ scanin -v -c PrinterB1.tif +-PrinterB1.cht scanner.icm ++PrinterB1.cht device.icm + PrinterB
+ scanin -v -ca PrinterB2.tif +-PrinterB2.cht scanner.icm ++PrinterB2.cht device.icm + PrinterB
+ scanin -v -ca PrinterB3.tif +-PrinterB3.cht scanner.icm ++PrinterB3.cht device.icm + PrinterB
+
+ Now that the PrinterB.ti3 data +diff -uNr Argyll_V1.0.1.orig/doc/targen.html Argyll_V1.0.1/doc/targen.html +--- Argyll_V1.0.1.orig/doc/targen.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/targen.html 2008-07-27 11:53:34.000000000 +0200 +@@ -615,7 +615,7 @@ +       3 x Letter   1386
+       4 x Letter   1848
+
+-  Scanner (printtarg with -iSS -s options):
++  Acquisition device (printtarg with -iSS -s options):
+
+        1 x A4R      1014
+        2 x A4R      2028
+diff -uNr Argyll_V1.0.1.orig/doc/ti3_format.html Argyll_V1.0.1/doc/ti3_format.html +--- Argyll_V1.0.1.orig/doc/ti3_format.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/ti3_format.html 2008-07-27 11:42:04.000000000 +0200 +@@ -173,7 +173,7 @@ + or "RGB_LAB" for an RGB printer + or display, "CMYK_XYZ" for a + printer, "XYZ_RGB" for an RGB +-scanner.
++acquisition device.
+
+ If spectral values are going to be included in the file, the following + keywords and values shall be used:
+diff -uNr Argyll_V1.0.1.orig/doc/ucmm.html Argyll_V1.0.1/doc/ucmm.html +--- Argyll_V1.0.1.orig/doc/ucmm.html 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/doc/ucmm.html 2008-07-27 11:41:27.000000000 +0200 +@@ -13,7 +13,7 @@ + designed just to handle the necessary configuration needed to track the + installation and association of ICC profiles with Unix/Linux X11 + displays. It could be expanded at some point to also hold the +-associations for other devices such as scanner and printers.
++associations for other devices such as acquisition devices and printers.
+
+ It consists primarily of a small configuration database that associates + a display monitor (identified by its EDID or the X11 display name if an +diff -uNr Argyll_V1.0.1.orig/log.txt Argyll_V1.0.1/log.txt +--- Argyll_V1.0.1.orig/log.txt 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/log.txt 2008-07-27 11:35:38.000000000 +0200 +@@ -1648,7 +1648,7 @@ + + * Added shaper/matrix input profile support. + (profile/profin.c, xicc/xmatrix.c) +- This may be more accurate for scanner profiles, ++ This may be more accurate for device profiles, + given the poor coverage of test points provided + by an IT8 chart (but doesn't appear to be in practice). + +@@ -1659,7 +1659,7 @@ + + * Added support in scanin.c and scanrd.c for + using a scan of a print test chart, plus a +- profile for the scanner, to be able to measure ++ profile for the device, to be able to measure + color for printer calibration. This + new mode handles multi-page test charts. + +@@ -1689,13 +1689,13 @@ + patch spacer contrast determination. + Also added an XYZ to sRGB conversion + function to support RGB previews of N color +- devices, as well as scanner recognition template files. ++ devices, as well as device recognition template files. + + * Expanded xicc/xcolorants.c to incorporate + an approximate device model for arbitrary + colorant combinations. This is used to + be able to approximate expected density readings, +- as well as preview colors and scanner recognition templates. ++ as well as preview colors and device recognition templates. + + * Create a new test point creation module, + target/simplat.c, to create higher dimentional, +@@ -1793,7 +1793,7 @@ + + * Added preliminary support in printtarg for the SpectroScan + spectrodensitometer. Also added preliminary support for +- scanner recognisable test charts. ++ device recognisable test charts. + + * Added option to icclink to turn off the use of linearisation + curves in the output link, since this sometimes seems to +@@ -1960,7 +1960,7 @@ + Cleaned up build automation somewhat. + + Added RGB output device profile generation support. +- Added RGB scanner device profile generation support. ++ Added RGB device profile generation support. + + Added a couple of spectrometer conversion utilities for + raw data files from other CMSs. +diff -uNr Argyll_V1.0.1.orig/profile/profcheck.c Argyll_V1.0.1/profile/profcheck.c +--- Argyll_V1.0.1.orig/profile/profcheck.c 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/profile/profcheck.c 2008-07-27 11:54:01.000000000 +0200 +@@ -360,7 +360,7 @@ + devchan = 3; + isLab = 1; + isAdditive = 1; +- /* Scanner .ti3 files: */ ++ /* Acquisition Device .ti3 files: */ + } else if (strcmp(icg->t[0].kdata[ti],"XYZ_RGB") == 0) { + devspace = icSigRgbData; + devchan = 3; +diff -uNr Argyll_V1.0.1.orig/profile/profin.c Argyll_V1.0.1/profile/profin.c +--- Argyll_V1.0.1.orig/profile/profin.c 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/profile/profin.c 2008-07-27 11:53:08.000000000 +0200 +@@ -49,7 +49,7 @@ + /* + Basic algorithm outline: + +- Scanner: ++ Acquisition Device: + + Figure out the input curves to give + the flattest grid. +diff -uNr Argyll_V1.0.1.orig/scanin/scanin.c Argyll_V1.0.1/scanin/scanin.c +--- Argyll_V1.0.1.orig/scanin/scanin.c 2008-07-27 11:18:53.000000000 +0200 ++++ Argyll_V1.0.1/scanin/scanin.c 2008-07-27 11:26:37.000000000 +0200 +@@ -2,7 +2,7 @@ + /* + * Argyll Color Correction System + * +- * Scanin: Input the scan of a test chart, and output cgats data ++ * Scanin: Input the image of a test chart, and output cgats data + * Uses scanrd to do the hard work. + * + * Author: Graeme W. Gill +@@ -72,7 +72,7 @@ + fprintf(stderr,"Author: Graeme W. Gill, licensed under the GPL Version 3\n"); + fprintf(stderr,"\n"); + fprintf(stderr,"usage: scanin [options] input.tif recogin.cht valin.cie [diag.tif]\n"); +- fprintf(stderr," :- inputs 'input.tif' and outputs scanner 'input.ti3', or\n"); ++ fprintf(stderr," :- inputs 'input.tif' and outputs device 'input.ti3', or\n"); + fprintf(stderr,"\n"); + fprintf(stderr,"usage: scanin -g [options] input.tif recogout.cht [diag.tif]\n"); + fprintf(stderr," :- outputs file 'recogout.cht', or\n"); +@@ -92,7 +92,7 @@ + fprintf(stderr," -ca Same as -c, but accumulates more values to .ti3\n"); + fprintf(stderr," from subsequent pages\n"); + fprintf(stderr," -r Replace device values in .ti2/.ti3\n"); +- fprintf(stderr," Default is to create a scanner .ti3 file\n"); ++ fprintf(stderr," Default is to create a device .ti3 file\n"); + fprintf(stderr," -F x1,y1,x2,y2,x3,y3,x4,y4\n"); + fprintf(stderr," Don't auto recognize, locate using four fiducual marks\n"); + fprintf(stderr," -p Compensate for perspective distortion\n"); +@@ -127,12 +127,12 @@ + static char datin_name[200] = { 0 }; /* Data input name (.cie/.q60) */ + static char datout_name[200] = { 0 }; /* Data output name (.ti3/.val) */ + static char recog_name[200] = { 0 }; /* Reference chart name (.cht) */ +- static char prof_name[200] = { 0 }; /* scanner profile name (.cht) */ ++ static char prof_name[200] = { 0 }; /* device profile name (.cht) */ + static char diag_name[200] = { 0 }; /* Diagnostic Output (.tif) name, if used */ + int verb = 1; + int tmean = 0; /* Return true mean, rather than robust mean */ + int repl = 0; /* Replace .ti3 device values from raster file */ +- int outo = 0; /* Output the values read, rather than creating scanner .ti3 */ ++ int outo = 0; /* Output the values read, rather than creating device .ti3 */ + int colm = 0; /* Use inage values to measure color for print profile. > 1 == append */ + int flags = SI_GENERAL_ROT; /* Default allow all rotations */ + +@@ -153,7 +153,7 @@ + scanrd *sr; /* Scanrd object */ + int err; + char *errm; +- int pnotscan = 0; /* Number of patches that wern't scanned */ ++ int pnotscan = 0; /* Number of patches that weren't processed */ + + if (argc <= 1) + usage(); +diff -uNr Argyll_V1.0.1.orig/target/printtarg.c Argyll_V1.0.1/target/printtarg.c +--- Argyll_V1.0.1.orig/target/printtarg.c 2008-07-27 11:18:52.000000000 +0200 ++++ Argyll_V1.0.1/target/printtarg.c 2008-07-27 11:37:20.000000000 +0200 +@@ -3252,7 +3252,7 @@ + } + + /******************************************************************/ +-/* Edge tracking support, for generating the scanner image */ ++/* Edge tracking support, for generating the device image */ + /* recognition reference chart file. */ + + /* Establish width and height to convert between topleft and */ +diff -uNr Argyll_V1.0.1.orig/ttbd.txt Argyll_V1.0.1/ttbd.txt +--- Argyll_V1.0.1.orig/ttbd.txt 2008-07-27 11:18:54.000000000 +0200 ++++ Argyll_V1.0.1/ttbd.txt 2008-07-27 11:54:46.000000000 +0200 +@@ -123,7 +123,7 @@ + + * Should create a .ti2 template file for some standard charts, + such as an IT8.7/3, ECI2002 random and non-random etc. +- Scanner recognition files too ?? ++ Device recognition files too ?? + + * Add an option to targen, that allows generation of + test points down the neutral axis (how does this work +@@ -293,7 +293,7 @@ + patch variance is too high (probable faulty read). + + * Add spectral fix options to scanin code to allow compensation +- for scanner and media errors when using a scanned image to ++ for device and media errors when using an acquired image to + measure color. + This means figuring out how it will work, as well as creating + to tools to create the spectral fix data (or just add general diff --git a/argyllcms.spec b/argyllcms.spec index c13233e..784054b 100644 --- a/argyllcms.spec +++ b/argyllcms.spec @@ -4,7 +4,7 @@ %define archivename Argyll_V%{version}%{?alphaversion}_src.zip Name: argyllcms -Version: 1.0.1 +Version: 1.0.2 Release: 1%{?alphatag}%{?dist} Summary: ICC compatible color management system @@ -15,14 +15,11 @@ URL: http://www.%{name}.com/ Source0: %{url}%{archivename} Source1: %{name}-1.0.1-19-color.fdi Source2: %{name}-0.70-color-device-file.policy -Patch0: %{url}V%{version}_patches.txt # Many thanks to Alastair M. Robinson! Patch1: http://www.blackfiveservices.co.uk/Argyll_V1.0.1_autotools.patch.gz Patch2: %{name}-1.0.1-remove-libusb-fork-check.patch -# Patch by Stefan Brüns, bz421921#c18 -Patch3: %{name}-1.0.1-printf.patch # Patch applied for legal reasons -Patch4: %{name}-1.0.1-legal.patch +Patch4: %{name}-1.0.2-legal.patch BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildRequires: libtiff-devel, libusb-devel @@ -63,14 +60,10 @@ This package contains the Argyll color management system documentation. %prep %setup -q -n Argyll_V%{version} -# Post-release fixes -%patch0 -p1 -b .fix # Autotools support %patch1 -p1 -b .auto # Use the system libusb. If there is a ***REPORTED*** problem the distro will fix it %patch2 -p1 -b .sysusb -# Printf fixes -%patch3 -p1 -b .printf # Legal patch required %patch4 -p1 -b .legal @@ -120,6 +113,10 @@ rm -rf %{buildroot} %changelog +* Mon Sep 1 2008 Nicolas Mailhot +- 1.0.2-1 +ᾢ Bugfix release + * Sun Jul 27 2008 Nicolas Mailhot - 1.0.1-1 ☻ Lots of workarounds dropped — Argyll continues progressing towards “normal diff --git a/import.log b/import.log index 25e34de..43cf798 100644 --- a/import.log +++ b/import.log @@ -1 +1,2 @@ argyllcms-1_0_1-1_fc10_nim:HEAD:argyllcms-1.0.1-1.fc10.nim.src.rpm:1217165503 +argyllcms-1_0_2-1_fc10:HEAD:argyllcms-1.0.2-1.fc10.src.rpm:1220272108 diff --git a/sources b/sources index 9b48382..b4996c3 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ cdb94385421c2fae1cf6fb068069cd9e Argyll_V1.0.1_autotools.patch.gz -e9f32b852b49ffcf28b854cecab00e67 Argyll_V1.0.1_src.zip +fd56b470873cbca980a37836adc41095 Argyll_V1.0.2_src.zip