Argyll CMS change log ===================== Version 1.5.1 (8th March 2013) ------------- * Fix spectro/instlib.ksh and standalone instlib build. * Turned off debug plot on using FWA. * Changed link $(LINKFLAGS) location in link command line Jambase to get latest gcc working. * Fixed new bug in matrix display profile creation that causes an inacurate relative white point. This causes Photoshop to barf on the profiles. * Added -m option to printcal. * Fix bug in webwin that causes crash. Version 1.5.0 (1st March 2013) ------------- * Made SpectroScanT respond to enter key when reading transparent samples. * Added signal handlers to dispwin to restore VideoLUT in case of interrupt. * Added support for an FWA simulated instrument illuminant separate to the illuminant used to compute XYZ values. This (and the provision of appropriate illuminants and illuminant aliases) allows simulation of ISO 13655:2009 M0, M1 and M2 measurements using any spectrometer that can take non-UV filtered measurements. An optional argumen to the -f flag is used to select this. * Increased stability of i1d3 refresh display measurements by increasing integration time, and tweaking crossover from frequency to period measurement. Fixed bug that sometimes resulted in zero dark readings due to round up of integration time that then exceeded the valid maximum. * Added spotread interactive function 'f' to read out the calibrate display refresh rate for instruments that have a refresh display mode, as well as an 'F' function that measures the refresh rate for instruments that support a refresh rate measurement function (colorimeters & spectrometers). * Added refresh rate measurement function to the i1pro and ColorMunki Spectro's. Also added a set refresh rate function, so that a refresh rate calibration can be carried over between sessions, or set manually. * Bumped icclib to 2.15. Change icc->read_tag() to only succeed if the tag type is known, since the standard expectation of a non NULL return type is that it is of a known type. Added new method icc->read_tag_any() which will return a icmSigUnknownType if the tag type is unknown. * The Display Type selection option -y in dispcal, dispread, chartread, spotread & ccxxmake now lists installed CCSS and CCMX files as a selction. The -X options is no longer used to select installed CCSS files. To make this work, the CCMX and CCSS files now have extra fields to indicate the refresh mode, an optional list of default UI selection characters, and (for CCMX files) the base display type they apply over (CB-n). ccxxmake now only allows Base Calibration display types to be selected. The installer (oeminst) checks for the refresh mode and base ID before installing CCMX and CCSS's. * Tweaked B2A least squares aproximation code to reduce artefacts when used on badly behaved CMYK profiles. * Fixed targen so that use of -v1 (verify) doesn't cause it to fail if ofps stats pass fails. * Tweaked CIECAM02 to imrove behaviour for extreme blue colors, so that the hue doesn't swing too far towards the cyan. This helps in the clipping behaviour from colorspaces such as ProPhotoRGB. * Added some post table setting filtering to the B2A table creation for out of gamut colors. * Made the input profile cLUT extra neutral axis extrapolation points the default for colprof -u and non -u profiles. Fixed serious bug in colprof -u :- the white point was being set incorrectly. Changed -u algorithm to work similarly to -U scale :- it sets the scale automatically. Relative colorimetric is therefore hue matched to the white reference patch, Removed colprof -un, as it seems unnecessary. Added coloprof -uc, which clips cLUT colors over Y = 1 to white. Modified matrix profile creation to match cLUT in terms of how these options work. * Add verbose report if dispcal/dispread -Ibw is used. * Fixed bug in CRI computation - the TCS09 sample was incorrect. (Thanks to Gabriele Guarnieri for noticing this). * The spyd2en, spyd4en and i1d3ccss tools have been combined into and replaced by a single oeminst tool. * Fix problem with dispwin/dispcal/dispread -dweb and the latest Safari browser. * Added optional fourth parameter to dispwin, dispcal, dispread, ccxxmake -P option, that allows setting different horizontal and vertical scalings of the test window. * Changed to a single ArgyllCMS.inf file for MSWin USB driver installation. This eases instalation of more than a single type of isntrument. Tested on MS Windows 8 and updated installation instructions. * Added scanin support for ColorCheckerPassort (Thanks to Ben Goren) * Enable the ColorHug by default, although it isn't advertised as supported, since it doesn't yet work reliably on OS X. * Updated OS X code to compile on 10.6 and 10.7 (64 bit compatible API used when compiling on those platforms, including Cocoa for the test patch window). * Added support for Quato Silver Haze 3 OEM i1d3 * No longer using libusb for USB access, using native USB access instead. MSWin uses the libusb-win32 kernel driver. (This resolves the long standing issue of ArgyllCMS using a custom version of libusb.) * Moved the usb setup files from libusb1 to a new directory, usb. * Added support for X-Rite ColorMunki Smile colorimeter. * Changed udev file usb/55-Argyll.rules to eliminate the test for /lib/udev/udev-acl as a condition of using ACL_MANAGE, since I'm informed that it is deprecated in recent distribution releases. * Deprecated -V flag (adaptive mode) in dispcal, dispread and ccxxmake, since this is now the default. Flag will be ignored with a warning. Added -ZA flag instead, to select non-adaptive integration time mode. * spotread -d flag is deprecated, and is now a synonym for the -e flag, since it defaults to adaptive mode. Added -ZA flag instead, to select non-adaptive integration time mode. Also addes -Zr and -ZR flags to allow testing of the refresh mode overrides. * Migrated ArgyllCMS specific application runtime files (such as instrument blobs, calibration state & calibration files) to an "ArgyllCMS" subdirectory rather than the generic "color" directory. On OS X also moved data files to below the "Application Support" sub directory. The old locations will be used as a fallback. * Fix potential array bounds violation in icc/icc.c for malformed cLUT profiles with zero input channels. Bump to icclib to V2.14 * Fixed bug in cgats/pars.c that caused a parsing failure with the ARM compiler. * Modified colprof so that a -rr smoothing parameter is now passed to the shaper fitting of shaper/matrix. * Reduced regularisation weight of order 0 & 1 curve shape parameters for matrix and cLUT based profiles, as well as converting it to be a two pass matrix then matrix+curves approach, making for a more reliable and better fit for some devices. This may improve matrix input profiles. * Added partial i1pro Rev E (i1pro2) support. Uses RevE measurement mode, and does wavelength calibration. Uses RevE (internal) stray light reduction, and black level temperature compensation. The only Rev E feature not currently supported is U.V. measurement, which would improve the accuracy of FWA compensation. Rev E driver can be disabled and the legacy driver mode used by setting the ARGYLL_DISABLE_I1PRO2_DRIVER environment variable. * Changed ColorMunki adaptive mode to avoid high gain mode, so as to give more consistent and longer integration times for low levels. Added black level temperature compensation. * Changed i1pro adaptive mode to avoid high gain mode, so as to give more consistent and longer integration times for low light levels. * Added automatic adjustment of patch reading delay for i1d3, so that a more conservative (longer) default value (200 msec) can be used without impacting i1d3 speed. Also added environment variable ARGYLL_MIN_DISPLAY_UPDATE_DELAY_MS that can set a different minimum update delay. * Fixed a bug introduced in V1.3.6 that stops the dtp41 from being initialised properly. * Added warning message to colprof if an additive device (ie. RGB) has an ink limit set that will affect the white point. * Modified printtarg so as to output CMY colorspace charts in CMYK PS, EPS & TIFF files by default rather than Device N, and to add an option (-o) to select CMY as inverted RGB, or CMY Device N as an option * Add explicity icoms error message when there are no instruments to be found. * Updated ColorHug PCI VID & PID * Change ColorHug driver to not do Raw mode post scale if firmware is >= 1.1.5 * Fixed regression with Spectrolino not taking filter options. * Added doco for QPcard_201, and ref. files for QPcar_202 * Modify numlib/numsup so that error() is marked noreturn, to shut up bogus compiler warnings. * Fix problem in libusb1 for MSWIN libusb0 devices not being able to be opened with more than one instance of usb open (This bug is not relevant to ArgyllCMS, but is to libinst use). * For Spyder, emit a warning rather than error if the feature bits are missing for calibration tables. * Added an introduction to color management document. * Change libjpg to libjpeg in Jamtop & jpg/Jamfile so it picks up system libraries, and fix system library link flag. * Fix bug in profile B2A table construction that sometimes created reversals in black clipping behaviour. * For i1d3, make transition to longer re-measure integration time smooth and progressive. Changed debugging so that reading details are printed if debug >= 6 * Fix bug in gamut/gammap.c - freeing not allocated memory if no nearpoint mapping was being done. * Update icclib to address robustness against malformed profiles. * Various API changes to the instlib to make it more self contained and flexible: The ipatch structure has been changed to remove the unused/unsupported Lab[] value, and merge the XYZ[] and aXYZ[] values. There is a new type indicator "mtype" to track what sort of measurement it is, and (implicitly) what units the measurement is in. Spectral readings have always been clamped to be +ve in past release of Argyll, but this has now been removed, because it has a detrimetal effect on dark XYZ readings, limiting the minimum reading possible. By default now, read_sample allows possibly -ve XYZ values (which will aid the accuracy of averaged dark readings) and has an option flag to clamp XYZ values to be +ve for compatibility with previous behaviour. To avoid enumerating USB devices multiple times, the list of available instruments now uses an icompaths object, and a particular icompath is handed to new_inst(). An error, debug and verbose logging object 'a1log' (declared in numlib/numsup.h) is now used to control and capture informational output. This is handed to new_icompaths() as well as new_inst(); Existing error(), warning() and verbose() function calls now funnel into the default global a1log object 'g_log'. instlib user interaction is now funnelled through a callback function (uicallback) rather than interacting with stdout and command line input itself. The implementation of the callback function and the default calibration setup handler for Argyll command line applications is now in a separate library instappsup.c. There is now an asynchronous callback for indicating events such as the instrument switch being pressed, or the instrument measurement configuration being changed (ie. sensor position, ambient filter). Only some instruments will use this. This is called from a thread. inst_capability and inst_mode are now one and the same: inst_mode. The IMODETST macro should be used for testing a capability or mode, but because a specific mode is represented by a combinations of bits, this test is not definitive, and should also be verified with the check_mode() function to be sure it is valid, and won't be rejected by set_mode(); inst_emis_disptype, inst_emis_disptypem, inst_ccmx and inst_ccss have moved to cap2 as inst2_disptype, inst2_disptypem, inst2_ccmx and inst2_ccss respectively. The capabilities2() method has been removed, and capabilities() now returns inst_mode capability, inst2_capability and new placeholder inst3_capability flags. All the inst2_cal_* enumerations have been replaced by the new get_n_a_cals() call, which gives fuller information about what calibrations are needed and available for the current measurement mode. needs_calibration() now retuns a mask of calibrations needed. calibrate() now can be given one of three pseudo-calibrations, and returns a mask of remaining calibrations. The inst_mode_emis_disp and inst_mode_emis_proj modes have been removed and replaced with a general emissive mode, with a "tele" modifier to indicate projector mode (there are also corresponding changes in the calibration types and conditions, replacing "disp" and "proj" with "emis"). Adaptive measurement mode used as default for emmissive measurement. inst_mode_emis_spot and inst_mode_emis_tele can be used as replacements, with the inst_mode_emis_nonadaptive option used to get the non-adaptive display measurement mode previously triggered by inst_mode_emis_disp/proj in those instances where it is wanted and the device supports it. (i1pro, colormunki spectro.) By default display refresh synchronized calibration and measurement is selected in tandem with the display type selector (indicated in inst_disptypesel). Where supported, this refresh mode can now be overridden using the inst_mode_emis_refresh_ovd and inst_mode_emis_norefresh_ovd modes. Changed get_status(inst_stat_sensmode) to a new function meas_config(), and changed the values returned to be the valid measurement modes or calibration conditions for the current instrument physical configuration. This allows the application to be sensitive to what measurement modes are available with things like the Colormunki sensor position, and the i1d3 ambient adapter position. A new function get_ref_rate() has been added to make the measured display refresh rate available. get_opt_details(inst_optdet_disptypesel) has been replaced by get_disptypesel(); Commbined set_opt_mode() and get_status() into get_set_opt(), and combined inst_opt_mode and inst_status_type into inst_opt_type; col_cal_spec_set() now only sets the CCSS, not the observer. The observer can be set by a call to get_set_opt(inst_opt_set_ccss_obs); Version 1.4.0 (20th April 2012) ------------- * Modified spectro/ccxxmake so that a colorimeter can be used as a reference to make ccmx files if two .ti3 files are used. Added ref/ccxx.ti1 as convenient way of creating ccmx .ti3 files. * Added dither/screening support for 8 bit output of render, and then made it available in target/printtarg -D switch. * Added JPEG file support to imdi/cctiff, xicc/tiffgamut and xicc/extracticc. ICC profiles embedded in JPEG files can now be used anywhere a TIFF file with embedded ICC profile can be used as a source of an ICC profile. This makes it more convenient to color correct photographs. * Fixed memory leaks in usbio.c, xdg_bds.c & conv.c * Fixed double memory free bug in icc/icc.c when iccdump'ing a profile that has a duplicate tag. * Changed license of xicc/ccmx.[ch] to GPL2+. * Removed dispcal -K option, since it is not needed with more graceful handling of no VideoLUT access. * Made display calibration and profile making deal with displays without hardware calibration support (VideoLUT support) more graceful. Added tutorial section covering this. * Added option to dispwin/dispcal/dispread/ccxxmake to redirect the test patches to a web browser via a local web server. This augments Argyll's long standing local and remote display capability. * Fixed bug in spectro/i1d3.c which results in NAN if a low level readings drops to zero at a particular time. Improved refresh rate calibration accuracy. Fixed bugs in adaptive measurement logic that caused a channel to be pre-measured when it shouldn't. This seems to noticeably improve repeatability on refresh displays. * Fixed bug in ucmm/jcnf where it was failing to locate the correct profile for a display. * Fix bugs in ColorMunki Transmissive measurement mode calibration. Version 1.3.7 (26 March 2012) ------------- * Fix regression in Spyder support - ccmx files were not being handled (bug introduced in 1.3.6). * Fix packaging problem - Spyder4 MSWin .inf file was missing. * Change dispwin so that it will install a profile when there is no access to the display VideoLUT if the profile has no vcgt. Version 1.3.6 (19th March 2012) ------------- * Experimental ColorHug support is compiled in, but is disabled unless the environment variable "ENABLE_COLORHUG" is set. (The ColorHug currently doesn't seem to work reliably accross all platforms Argyll supports). * Modified spectro/hidio.c for OS X so that it only attaches run loop when an hid call is made, to make the SW more GUI friendly. * Fixed bug in Spyder 2 driver, where aborting a reading (ie. in interactive dispcal), leaves hardware out of sync with driver, leading to a bad next reading. * Reworked i1disp driver slightly to improve repeatability when in CRT mode. * Added a -V option to spotread to allow tracking reading consistency. * Tweaked i1d3 integration times, and added refresh period calibration to the refresh display mode. Refresh display measurement times are double non-refresh displays. * Added Spyder4 support. Note the need for sptd4en. Speeded up Spyder on brighter colors. Hopefully this doesn't affect accuracy. * Changed ccxxmake to create default .ccss with just RGBW, and not to weight W. This may give better matching. Made corresponding change to CCMX, giving the white patch 1/4 weighting of sum of all other patches. * Changed display selection (-y flag) to be instrument specific. This is to support the Spyder4 and ColorHug. * Improved i1d3 period measurement logic to improve measurement speed and accuracy for dark colors. * Removed Linux serial port filtering code for USB serial ports, since it may interfere with other devices. * Fixed OS X and Linux profile installation so that if you run dispwin -I as root (ie. sudo), the profile is still installed as the underlying user, not to the root user location. * Fixed bug in black point finding code in xicc/xicc.c that affected xicclu. * Fixed txt2ti3 to cope with inputs that don't have any device values. This is useful for dealing with input chart reference values. * Fixed applycal so that it applies calibration to both A2B and B2A tables, to preserve softproofing. * Changed ICC unknown manufracturer and model Tags to value 0, rather than "????". * Fixed timeout in SpectroScanT reference transmission measurement. * Switched ucmm over to using spectro/xdg_bds code, to solve problem with multiple paths in XDG_*_DIRS. Changed xdg_bds and aglob code to an "MIT" license, consistent with all the ucmm code. * Made DTRP94 driver ignore with a warning any NEEDS_OFFSET_DRIFT_CAL_ERR after a full reset. It seems that occasionally a few instruments do this, and X-Rite don't appear to be prepared to treat this as an instrument fault. * Added support for Datacolor SpyderCheckr (Thanks to Jos Pereira). * Improved the ability of spyd2en to cope with slightly different setup.exe formats. * Made sure that dispcal and dispread now error if reading of ccmx or ccss files fail. * Add support for NEC SpectraSensor Pro version of the i1d3. * Add smoothing control flag to printcal. * Fix bug in ccxxmake with regard to -I and -T options. * Fix bug in ccxxmake that stops the test patch from being scaled properly using -P * Supress TIFF open message errors better when attempting to open an ICC profile embedded within a TIFF file. Version 1.3.5 (24th October 2011) ------------- * Add support for the OEM version of the i1d3. * Fix bug in dispread where spectral instrument readings weren't being normalized to the display white Y when they were supposed to be. * Kill i1ProfileTray.exe process if unable to open i1d3 on MSWin. * Tweak gamut mapping to improve dark area mapping, non-monotonic profile inversion, and contrast preservation to small gamut. * Fix bug that stopped ccxxmake being able to make ccmx's. (Unable to use colorimeter due to "instrument doesn't support spectral or CCSS" error). * Fix bug (crash) that affects ColorMunki design/photo display measurement. This also stops it restoring a calibration (-N flag). * Fix DTP20 chart printing - TID was sometimes incomplete. This shows up on a 4x6 chart. * Changed DTP20 chart to use a much smaller and ligher row label to try and avoid mis-reads. Version 1.3.4 (31 August 2011) ------------- * Fix gamut code to ignore setting primary/secondary cusps that are unlikely to be true. This avoids buggy gamut mapping behaviour for gamuts that are very small and odd shaped. Tweak saturation intent very slightly to improved hue consistency. * Changed Linux USB code to avoid doing a set_configuration if possible, since the USB driver does this by default. This then avoids triggering a bug in the Spyder2, which allows it to work on Linux version without the reset_ep fix, and may also allow the Spyder to work better with USB hubs. * Added support for the X-Rite i1 Display Pro and ColorMunki Display colorimeters. As part of this, added support for CCSS calibration files for the instruments and added CCSS support to ccxxmake (renamed from ccmxmake). Provide new tool i1d3ccss to translating and installing CCSS files as well as the manufacturers calibration files for these instruments. Added non-default observer support for these instruments too. * Fix all colorimeters so that the ccmx matrix is used only for non-Ambient measurements. * Change printtarg for DTP20 to allow for variable patch size. Note that patch length must me 6.5, 7, 10, 12.5 or 13 mm. * Changed dummy display matrix table to have channels rotated rather than R & G swapped, to make it more obvious. * Added option to colprof to allow setting the default profile rendering intent. * Fix bug in spectro/average.c - field match check index was wrong variable. * Fix bug in xicc/xlut.c that caused bad reverse lookup values at some clipped grid points. * Increase number of re-seeding retries in target/ofps.c, and fix bug that caused failure to finish rather than error. * Enhanced spectro/fakeread so that it will process a .ti3 file that has been renamed to .ti1. * Fix bug in matrix input profile white point selection, + add in slight neutral bias code used in clut profiles. * New profcheck -I wasn't working - fix option parsing. Version 1.3.3 (12th May 2011) ------------- * Added -I relative colorimetric intent flags to spectro/fakeread and profile/profcheck, for special use. * Fixed compiler dependant bug in Eye-One pro and (posibly) Munki high res. spectral wavelength calculation. * Add support for install variables DESTDIR and PREFIX in Jamtop. These can be set on the command line using "jam -s" * Add ref/linear.cal to distribution. * Added targen -N parameter to allow adjustment of neutral axis patch density emphasis. The default effect has also been increased. Note this is only effective when perceptual distributions are created, or the defaul OFPS with a high level of Adaptation is used. This will be most effective when a pre-conditioning profile is used. This may reduce the number of patches needed for a given quality profile, or increase the quality for a given number of patches. This should improve the result without needing to add explicit grey test patches. * Added spectro/instlib.ksh script to assemble all the files needed for a standalone instrument library. Changed licence to GPLv2 for the files included in the instlib.zip file that is thus created. Can be built using the included Makefile, once libusb-1.0A has been built. * Fix Jambase so that recent MingW compilers don't need extra .dll's * Change Linux serial code to test ports using O_NONBLOCK * Modify xspect & illumread to improve realism of UV spectrum estimation. * Fixed profile/txt2ti3 so that a sample name that looks like an integer is treated as text. (Fixes problem with latest ProfileMaker file). * Added LCh option to spotread. * Fixed numerical issue in scanin/scanrd.c, where large input rasters would cause fitting to fail. * Modified colprof input chart white patch detection to slightly favour patches that are close to D50 neutral. * Scaled XYZ PCS A2B profile deviation to improve default smoothness. * Change Make cLUT input -u black & white point extrapolation to use gamma curve + one order shaper, and increase these extra points weights. * Change black point search weighting to give a*b* error less weight, so that devices narow gamuts due to strange inks get a better chance at a reasonable black point. * Added -Z option to colprof, to allow setting ICC attribute flags. * Attempted to (yet again) fix the shortcoming of cam02 blue behaviour. This may well improve the purity and color of blue gamut mapping. Also fixed problem with inversion not matching the forward conversion, resulting in gamut mapped cLUT tables white points not being exact, and resulted in non perfect device values for white. * Add code to temporarily disable X-Rite's new Daemon drivers on OS X, for ColorMunki and EyeOne. The Argyll utilities either need to be run as root, or the X-Rite Daeomon .plist's need to be changed to run as the user. * Added -R flag to colprof, which restricts the values of the white, black and primaryies to have Y <= 1 and +ve, respectively. This can aid compatibility with other programs. * Fixed typo in spectro/inst.h that prevented flash measurement mode from working. * Replaced spectro/average with a new version that is more general. Merging and Averaging are are now separate operations. * Fixed bug in printcal - it wasn't dealing with spectral only files. * Added extra verbose output to printcal in which it computes an ideal power-like value to apply to the test chart values in targen. Modified targen to use power-like function, to avoid issues with small values with real power curve. * Reduced printcal data point smoothing slightly, to improve accuracy. * Fix bug in profile/printcal where the white point device value wasn't beeing computed as the average of all the white patches. Tightened up definition of white patch to avoid targen -p type test charts slipping non-white patches into white average. Made sort of device value consistent. * Modify the way that XYZ cLUT B2A tables are indexed, so that the white point is at the top corner of the grid. This should make better use of the cLUT, as well as improving the accuracy of the inverse white mapping. [Should solve Photoshop CS4/CS5 complaining that XYZ LUT profiles are 'defective'.] * Added option in xicc/xicclu to plot an arbitrary slice. * Expand the number of i1 Display OEM devices that can be used. * Added some patches to help compile on FreeBSD. (Thanks to Simon Walton) * Added offset parameter to spectro/synthcal, to allow generation of inverted ramps. * Added another intent, "pa", Perceptual Appearance, which is the same as perceptual except that the grey axes are not forced into alignment, allowing the appearance parameters to have full affect, including altering the chromatic mapping. * txt2ti3 wasn't creating an iRGB colorspace file for output device RGB files. This can cause warnings and failurs when mixed with other iRGB tool sequences. Also fixed fakeread grey fudge to recognise both RGB and iRGB. * Added pathological case fix for target/ofps where the ink limit == di-2. For CMYK this needs slightly more than 32 bits of mask. Fix forces limit to be slightly less than di-2. * targen was failing to proceed when fixed points happened to be numerically just over the total ink limit, and ofps then got stumped in adding them. Now clip them before ofps tries to add them. * Added more navigation options for chartread patch by patch mode. * Fixed bug in "chartread -r -H" that caused resume of i1Pro high res to fail with "The resumed spectral type seems to have changed" due to a floating point mismatch. * Modified profcheck so that it prints patch location if it is present in the .ti3 file. * Made doubly sure that DTP94 has offset drift compensation on. * Changed dispcal and dispread -K option to -J. Added -K option to dispcal as an alternate way of profiling a calibrated display, and also added a -K option to dispcal. These options may be useful for displays that don't have VideoLUTs or that (very strangely) have VideoLUTs with lower precision entries than the frame buffer. * Increased ColorMunki emissive auto scaling target "over" margine from 5% to 10% to allow more room for instrument drift. * Add more runtime debugging output in dispsup code (dispcal, dispread etc.) * Fix bug in winusb + i1Display, where dark CRT measurements timeout. Version 1.3.2 (4th November 2010) ------------- * Turn off debugging that was accidentally left on in FWA code. Add gcc 3.3 PPC optimizer bug workaround to FWA code in xicc/xspect.c * Change shaper/matrix profile back to using power curve as 0th order shape. Improve it with input & output offsets and straight segment at zero. Make cLUT input -u black & white point extrapolation use pure shaper curves with special tweaks. * Increase dispcal native white target weighting from 10 to 50 to encourage white to be device 1.0,1.0,1.0 more strongly. Version 1.3.1 (26th October 2010) ------------- * Tightened up scanin -ca option parsing to reduce chances of false trigger. * Added synthetic device white/black point for input cLUT profiles where the -u flag is being used. Particularly for Lab PCS, this can improve the reasonableness of the extrapolation along the neutral axis. Added -un flag option to disable this. * Changed shaper/matrix profiles so that they use pure shaper curves rather than base gamma + shapers, as this seems to be a better fit for real device behaviour. * Fixed MSWIN Vista/Win7 problem where having Task Manager running would stop display test window updating. Also fixed plot library to avid the same problem. * Added -i (input) option to profile/txt2ti3, as well as making device value scaling be guessed from the data range. * Fixed problem in MSWin .inf files not copying libusb .dll to system directories. * Swapped dispwin -E and -D flags, to make -D debug consistent throughout tools. * Changed the ARGYLL_NOT_INTERACTIVE mode so that all return and line feed characters are ignored, so that they can be used freely to flush stdin without triggering anything. * Added ref/ECI2002.ti1, so ECI2002 test values can be printed using printtarg. * Added -L option to chartread, to save both XYZ and Lab values. * Fixed endless loop problem with chartread -r -p on fully read chart. * Increase display patch color change to instrument measurement settling time from 60 to 200 msec, to allow for very slow MVA and PVA LCD displays. * Fixed problem in Jambase that stops MSWin MingW compiling. * Added -S option to chartread, that suppresses wrong strip and unexpected value warnings. * Fix dispcal and spotread so that color temperature takes into account any non-standard observer (ie. the color temperature is the closest point on the spectrum locus as determined by the chosen observers interpretation of the Plancian or daylight spectrum.) * Fix bug in libusb1 triggered on systems that support bulk continuation (Linux) * Added 1964_10c observer to spectro/dispcal, to better allow comparison to the default numbers. * Added recognition for Huey built into Lenovo W series Laptops. * Fixed chartread/dispsup/spotread etc. so that -N isn't fatal if the instrument doesn't support it. * Fixed dispcal to disable black & white drift tracking during interactive adjustment. * Added -s option to ccmxmake to allow the number of test patches to be set. Version 1.3.0 (8th September 2010) ------------- * Added option to dispread to save non-normalised to Y=100 values. Fixed colprof to normalise display spectral values that haven't been normalised. Fixed profcheck to normalise display spectral values that haven't been normalised. Fixed verify to scale white point reference to be larger than largest Y value being compared. * Added option to dispcal and dispread that attempts to counteract instrument black drift and display white drift (-I option). This may help with instruments that haven't properly acclimatised to the measurement location, and LCD displays that also take some time to stabilise. * Added option to dispcal to allow specifying a non 1931 2 degree observer if a spectrometer is being used. * Added new utility spectro/ccmxmake, which makes Colorimeter Correction Matrices for a particular Colorimeter/Display combination, using a Spectrometer as a reference. The resulting .ccmx file can then be used with spotread/dispcal/dispread (-X option) to improve the accuracy of the colorimeter on that particular display. * Fixed bug in spotread's handling of emsissive measurements. If the XYZ was computed from spectral, it was using a D50 white instead of no white reference. * Fixed bug in i1pro normal resolution wavelength calibration, introduced in V1.2.0. * Fixed bug in the way illumread displays available instruments. * Changed libusb V1.0 name to libusb-1.0A, so as not to clash with any official but different libubs V1.0 installation. [This may necessitate re-installing device drivers on MSWin.] * Added support for HP DreamColor version of the i1 display. * Fix problem with ARGYLL_NOT_INTERACTIVE - reading from instruments was not actually possible, because polling for input was disabled. * Adjust ColorMunki dark threshold to reduce misread reports. Add inconsitent data to debug output. Fix bug in adaptive mode - the integration time was sometimes too short. Set adapative emissive target at 95% to allow a little more margin to saturation. * Fix some minor compiler warnings. * Added direction indicators to xy values in dispcal interactive monitor adjustments. Version 1.2.1 (9 August 2010) ------------- * Fix problem with ColorMunki reporting erroneous inconsistent measurement errors. This shows up on display calibration. * Fix bug in CIECAM02 viewing condition settings :- the enumerated conditions after "mt" are displaced by 1. (ie. "mt" is really "pc", "mb" is "mt", "md" is "mb" etc.) Added option -c:sn for auto surround from the Lv parameter (-c:l). * Add option to illumread to average several readings. Version 1.2.0 (30 July 2010) ------------- * Added EV calculation to spotread -a * Updates included libtiff to V3.9.4 * Modified colprof -p to allow different abstract profiles to be applied for each intent. * Added -I option (imitation) to printcal, so that an existing devices response can be set as a target. * Fixed scale by 100 bug in spec2cie -f spectral output values. * Fixed memory allocation bug in spectro/fakeread.c. (Also fix memory allocation leak in xicc/mpp.c) * Fixed bug in target/targen where .mpp pre-conditioning profiles ink limits wern't being handled properly. * Reduced i1pro high res mode from 750 to 740 nm because of unreliable sensor values. * Added support for filter in chartread. * Re-worked gamut mapping to improve perceptual intent saturation levels, as well as improve highlight and shadow contrast. Added fine tuning to improve both smoothness and the precision with which the source is mapped to the destination. * Fixed bug in installing profile on MSWin Vista/Win 7 in system scope. * Fixed bug in xsp_Tdensity() table values. * Enable -C option in dispcal. * Increase target/ofps.c vertex intersection retries from 10 to 40 to give it a better chance of working with difficult profiles. * Fixed printcal -D problem. * Fixed average spectral output problems. * Changed i1pro & Munki driver to save instrument calibration file in $XDG_CACHE_HOME/color/ (or the XDG fallback) rather than in the directory that the executable exists in. Also changed spyd2en to save the PLD pattern in the $XDG_DATA_HOME or $XDG_DATA_DIRS. * Fixed bug in plot that shows up on XP+, where the window isn't dismissed by the first keystroke, but only after it has been moved or resized. * Added illumread, which allows measuring an illuminant and estimating its UV content, for better accuracy with FWA compensation. * Use a modified/forked version of libusb V1.0, that supports Win2K (libusb0.sys) back end by default. Supports 64 but MSWin using a combination of WinUSB.sys and ptlibusb0.sys. [ The HCFR does not work on Win 64 bit though, due to its buggy USB implementation. ] NOTE that the included version of Libusb V1 has been carefully tested with all supported instruments on all supported platforms, and includes many bug fixes needed for correct functioning. While bug fixes have been fed upstream, not all have been adopted. In particular there is a nasty race condition that has not, and may never be fixed upstream, as well as missing critical functionality (clearep()). * Changed CMYK black point to be neutral, rather than the darkest point in the same direction and K only. This may wreck K only to black point matching, but it will stop printers with funny colored K ink from messing up the black point. * Make Lacie Blue Eye colorimeter appear as an i1display. * Improved i1pro matching to Original Manufacturers Driver (see doc/i1proDriver.html). * Improved i1pro/ColorMunki patch recognition for beter uniformity. * Fixed bug in ColorMunki driver scan mode calibration when instrument is more sensitive than usual. * Fix usage of dispread, -V option was missing. * Fix plot bug in printcal Version 1.1.1 (21 February 2010) ------------- * Altered xpsect FWA code to reduce overshoot artefacts due to filetering. * Updated ref/CMP_Digital_Target-3.cht as it seems that the reference chart has columns labeled "2A - 2D" rather than the "AA - AD" that is actually printed on the chart... * Changed dispcal and dispread so that a request for projector mode falls back to display mode if the instrument doesn't support a projector mode. * Changed printcal so that it will create .AMP file with more than 4 channels. Also fixed up plotting to plot up to 10 channels. * Renamed the following tools: cb2cgats -> cb2ti3 kodak2cgats -> kodak2ti3 logo2cgats -> txt2ti3 splitcgats -> splitti3 mpprof -> mppprof * Modified scanin so that it ignores any alpha channels in the input .tif file. * Change spotread so that it takes spectral readings by default so that FWA comensation readings can be used. * Changed link/collink to apply Y to L* curve if the input or output space is XYZ. Fixed the Y to L* scaling to make sure it only apples to XYZ space, and that the L* non-linearisation still applies to Y like device spaces. * Fixed colprof so that the per channel input curves for XYZ PCS B2A tables are actually scaled correctly. * Re-organized imdi/cctiff to allow for the possibility of the Y to L* linearization being applied to actual XYZ input spaces, not just Y like device spaces. * Modifed target/targen to cope better with case where adding nodes fails to determine vertex positions a lot of the time, causing extreme slowdown. Re-shuffle node order and retry now. Also change appoach of adding fixed nodes to temporarily skip fixed nodes that fail to add due to vertex positioning failures. Also removed special node as this doesn't seem to be required for reasonable positioning, and caused problems in at least one case (media fixed node could never be added). * Modified libusb/55-Argyll.rules for better compatibility with systems that have ACL installed but no ConsoleKit. Also set ID_VENDOR and ID_MODEL using usb-db * Added matrix only/linear algorithm option to profile/colprof, for raw camera profiling. * Fixed bug in input matrix profiles introduced by the XYZ cLUT display matrix profile change, where the correct white and black point wern't being written. * Changed tiffgamut to use one pass gamut hull finding, since this seems to be more reliable on the odd shaped image gamuts, as well as use a convex hull surface that more closely wraps the raster colors. * Added standards references to the viewing condition pre-set descriptions, and also added a preset for the ISO Critical print viewing lighting level. * Fixed bug in profile/colprof -u, this wasn't being applied properly to matrix profiles. * Fixed several build bugs in imdi code related to 64 bits. The 64 bit code was sometimes being compiled on non-native 64 bit architectures, and not being compiled on native 64 bit architectures. The table setup code was not handling 64 bit setup correctly on 32 bit architectures. * Tried to improve dispcal -E (verify) behavior by switching to native response for base measurement used to establish black aim point. Probably would be better to store all aim info in .cal file, and verify against that rather than altering verification target by the current response... * Added documentation for specplot. * Added -M option to printtarg, for the case where the TIFF file is to include the margin. * Fixed bug in ucmm/ucmm.c where wrong malloc length causes crash when installing/unintstalling profiles with long filenames. * Modified black curve to make sure that smoothed curve meets target level at boundaries, and to reduce smoothing filter width. Version 1.1.0 (17th January 2010) ------------- * Added some warnings to colprof for strange combinations of -s -S and -t -T and -g. * Fixed problem in perceptual gamut mapping that resulting in less deep blacks than desirable. Also tweaked gamut mapping to try and maintain luminance gradation near black for chromatic colors. * Simplified the Linux instalation instructions, particularly with regard to USB and serial permissions. Permissions use groups now, or ACL if it is available. * Added working MSWindows 64 bit libusb drivers, which will work on Vista 64 and MSWindows 7 64 bit. Because of Microsofts driver signing requirements though, they won't be usable unless a driver code signing workaround is used. * Fixed viewgam so that the number of gamuts that can be viewed is unlimited. Also added error when computing intersecting volume if the two gamuts are incompatible. * Added -O option to scanin and colprof, to allow overriding the default output filename/location. * There was a regression in the black inking fixes, the K target was corresponding to the pre-1D Lut values, this is now fixed. * Fixed another glitch in rspl/rev.c when computing black solution - the auxiliary target was not always the closest one possible. This fix may also help smoothness near black. Version 1.1.0 RC4 (6th January 2010) ----------------- * Fixed bug in xicclu -pz that caused maximum rather than minimum ink. Also fixed tolerance glitch in rspl/rev.c that was causing non-exact black values to be returned. * Changed printtarg so that the TIFF output has the paper margin subtracted from it. This is so that the resulting TIFF can be placed on that sized paper without clipping or scaling. Set the margin to zero to get a TIFF that exactly fits into the specified paper size. * Fixed bug in colprof -aX which caused crash when there are calibration curves. * Fixed bug in printcal, changed first -n option to -d to distinguish it from second -n parameter. Version 1.1.0 RC3 (4th January 2010) ----------------- * Fixed bug in Linux profile uninstall (dispwin -U) (Typo in path causes uninstall to fail). * Changed MSWindows athread implementation to kill a thread that hasn't terminated on thread object deletion. This isn't nice, but avoids the problem of the i1pro switch handler thread exiting after 600 seconds and then accessing a free'd structure when dispread -K is used. * Change colprof XYZ B2A table scaling to make better use of the cLUT table grid resolution. * Fixed bugs in black generation rule to do with white->black point calculations, scale and input/output curve handling. Changed xicclu -g to better correspond with -k p parameters. Changed xlut CMYK black locus handling to pick largest K value when there are multiple K locus segments and the desired K doesn't fall on any segment, to give better K continuity. Added "skew" adjustment to K generation rule to make the curve it better fit typical device behaviour. Updated tutorial to reflect these changes. Note that the -kp parameter values will have to be re-established for a particular device using V1.1.0 RC3. (This may improve the "bumpy black" problem ?) * Changed profile/colprof to generate matrix tags for Display XYZ PCS cLUT profiles, to improve compatibility with other CMMs. By default (-ax) the matrix tags will be a dummy transform that swaps red and green so that it is obvious if the matrix is being used instead of the cLUT, and so it does not increase profiling time. Using -aX will create real matrix tags. * Removed deprecated imdi/cctiff -o option, and added per profile -o option to set the tag search order so as to be able to test profiles that have both matrix and cLUT tags. * Removed general cLUT clip warnings, and added a specific RGB display/output device warning if a primary can't be encoded in L*a*b* PCS. * Fixed bug in i1pro driver - the linearization factors were being swapped between low and high gain. This improves the absolute luminance calibration, and may have subtle effects on the accuracy of other readings. * Added -V option to dispcal and dispread to allow using the adaptive mode of the i1pro for display measurement. This may give better low level readings ? * Improved targen so that it doesn't slow down as badly when a very large number of fixed points are used together with full spread points. * Improved profile/logo2cgats so that it errors on a wrong spectral field type. * Change spectro/dispcal to default to -f 1.0 (assume black is all output offset) to make it work in more sympathy to a typical display response. This may give better fit and lessen the chance of color tints due to a poor fit. * Increased profile/printcal curve smoothing to reduce the effect of noise. * Changed chartread strip reading mode to allow navigating about the strips, saving a partially read chart, and resuming a partially read chart (chartread -r). Also added a "next unread patch" key to the patch by patch mode. Chartread won't exeit automaticcaly now, once all the patches have been read (in case any patches need to be re-read), so the 'd' key must be hit to finish. Removed chartread -a option (it always saves the patch locations now). Added a -I option to allow re-using .ti2 files on a chart printed with different calibration curves. * Modified xicc/cam02 to clip the blue to avoid crazy behaviour outside the spectrum locus. Removed previous attempt at spectrum locus clipping. * Fixed bug in Spyder 3 driver that can cause readings to be scaled by a factor of 16. (This depends on when the Spyder was manufactured.) * Fixed bug in adding CIE illuminant C to spectral support. * Change printtarg last row padding to be media color for both random and non-random layout. Version 1.1.0 RC2 (7th December 2009) ----------------- * Re-worked gamut mapping to improve saturation levels within the bulk of the gamut, as well as improve hue preservation. * Changed "la" intent (luminance matched appearance) to have zero luminance matching enhancement "knee", to make it more appropriate for assessing transformations in light of their estimated appearance. * Added CIE C type illuminant spectrum support. * Modified DTP20 driver to double check for an offline read chart in case it is running old firmware. * Added device power value for targen to allow calibrating devices that have extreme non linearity. * Fixed bug in targen when full spread patches were mixed with other test patch types. * Updated yajl library to latest version. * Improved X11 XRandR CRTC detection * Added verbosity level to profcheck to match invprofcheck. * Clarified licensing of various files (GPLv2+ files, reference files and documentation). Version 1.1.0 RC1 (6 November 2009) ----------------- * Added flash measurement support to i1pro and Munki, + corresponding option in spotread. * Added new link/collink flags -fcmy that force pure 100% C, M and/or Y colorant input values to be pure output values. Gamut mapping is adjusted sympathetically with these options too. * Fixed link/collink so that the -f, fk and -F options used to force K only output also trigger gammut mapping to the K only destination range. Also made these options set black generation and intent in a sympathetic way by default. The result is that there now should be no discontinuity between the K only mapped colors and others in the gamut, and the source gamut should be mapped to be within the range of the K only black device. * Modified and improved gamut mapping to fix perceptual uniformity, and also greatly improves smoothness and preservation of source detail.. Re-tuned gamut mapping parameters. Added support for K only black gamut mapping from source and/or destination. * Fixed most CIECAM02 usages so as to clip values against the spectrum locus before converting to Jab. This may help avoid poor CIECAM behaviour for imaginary color values. * Fixed bug in rspl/inv.c that was causing innacurate inverse lookups in some corner cases. This may have been afecting black generation accuracy and general B2A table and device link accuracy. * Added support for Spyder3Express (ie. disable ambient capability if it's an Express). * Added workalike sRGB and Adobe1998 ICC profiles to /ref Note that the sRGB profile has slightly higher accuracy (better matching of matrix to white point) than the original H.P./Microsoft profile. Also provided lab2lab profile to use with collink. * Add support for the ColorMunki Create colorimeter. * Fixed xicc/xicc.x and xicc/xlut.c to be more robust in computing a CMYK black point. Fixed bug in K limit handling. * Changed xicc/xfit to use higher order delta E metric, so that maximum errors do not blow out. This seems to make the output curves a much better fit, and reduces the error when higher rspl smoothing factors are used. Curve stiffness has been increased to improve smoothness ant match higher order error values. * Added support for the Christophe Mtairie's Digital Target-3 chart with 570 patches. (Thanks to Nikolay Pokhilchenko & Ben Goren). * Changed the rspl/rev "> colprof: Error - rev: bwd vertex 0 is not prime or secondary" error to a warning. This seems to be triggered by odd data sets (ie. monochrome). * Created a new tool extractttag to extract text tags from an ICC profile. This can be used to extract the original target data (ie. .ti3 file) and/or CAL curves from an ICC profile. * Fixed all the ink limit calculations to work in post-calibrated final device values when per-channel calibration is being used, and the calibration curves are embedded in the .ti3 file or ICC profile. * Added printer calibration capability: Added printcal utility to create and verify printer calibrations. Added calibration file support to printtarg. Added calibration file support to cctiff. New utility "applycal" to apply calibration to ICC profiles. Modified targen etc. to distiguish between real RGB and fake printer RGB. * Changed targen ofps point distribution to maintain any initial gamut surface points during itterative refinement, and to distribute them independently in the sub-dimension they lie in. Changed adaptive operation to be the default, and to use a much more sophisticated error estimation model in determining the points locations. * Fixed problem with reliably detecting backward read strips using the i1pro & Munki, by making target/printtarg optimize the random patch layout to maximize the difference between patches read from each direction. (This problem was more prevalent with large charts with lots of strips.) * Added support for the LaserSoft DCPro scanner/camera target chart. * Changed profile/logo2cats.c spectral scaling heuristic threshold from 2 to 10 to allow more margin. * Fixed bug in spectro/dispwin.c for 256 byte EDID's (thanks to Omari Stephens). * Fixed bug in scanin/scanrd.c that caused crash due to diagnositic output when a gross chart recognition mismatch occures. * Added warnings to colprof, collink and tweak if any values get clipped when setting the cLUTs. * Fix bug in xicc/xfit.c where too little memory was being allocated. * Fix dispwin/dispcal problem on X11 with compositing WMs displaying transparent test window. * Fix spectro/dispcal to fall back if Jacobian inversion fails. * Reduce default reverse cache memory limits to avoid thrashing. * Changed all code with my copyright to the GNU AFFERO GENERAL PUBLIC LICENSE Version 3. This may be of significance to anyone using this code to provide a service over the Internet. * Modified spyder 2 & 3 driver to change how adaptive works. Now increases the integration time to try and get a minimum transition count. This speeds Spyder 2 readings (at some cost to accuracy), while helping make the Spyder 3 a bit more useful on dark displays (at the cost of a long read time). Also added workaround to the Spyder 3 not having a reset command - drain any pending read data on startup, so that it doesn't corrupt calibration or initial readings. * Fix USB instruments so that a comms failure doesn't try and re-establish communications. Fix i1pro & Munki so that they don't return a comms error on a short measurement. * For the ColorMunki on OS X, kill the manufacturers daemon process that has it open, when Argyll wants to open it. (daemon will automatically restart). * Changed spectro/dispsup.c to show test window without black background to position instrument, and then re-create the test window with black backgroud. * Fixed memory allocation bug in i1pro & Munki drivers when sensor gets saturated during display measurement. * Tweaked Jambase to work with Microsoft VC++8 and 9 when the Platform SDK February 2003 is used. * Removed need for DDK to access HID devices on MSWindows. This simplifies compiling with Microsoft VC++ and means that a MingW compile can use HID. * Enhanced plot library to aid debugging target/ofps. * Added a -M "command" option to dispcal and dispread, that allows an external command to supply display readings. This could be used to interface to an instrument not directly supported by Argyll. * Fix spectrum -> XYZ conversion scale factor for absolute readings. It was in error by 100/(10.685 * 6.83) = 1.37. This affected display and emission readings for the i1pro. * Modified printtarg to allow creating of a ColorMunki chart. By default the rows are as wide as the instrument, but -h will double the row density. * Added -p for projector mode to spotread, dispcal and dispread. * Change dispread, dispcal & dispwin to use -P to position test window, so that -p can be used for projector mode. * Added ColorMunki spectrometer driver. * Changed most code that reports progress on optimization to aproximate percentage rather than ".....". * Added interactive option to spotread to allow saving specrums to a CGATS ".sp" spectral file, suitable for use as an illuminant. * Added Spyder3 colorimeter driver. * Modified libusb/linux.c to make sure that a single large request is broken down into overlapping 16K reads, so that the i1pro rev A/B doesn't time out on SuSE Linux. * Fix bug in spectro/ntio.c involving error() and warning() declarations. This causes crashes on machines with no serial ports. * Added another challenge/response key for DTP22. * Fix bug in gamut creation that caused internal error if .gam points matches fake initial gamut tetrahedron. * Fix two problems in spectro/i1pro_imp.c: The way that calibration files were detected as invalid was insufficiently sesitive to the parameters being changed in the driver. This meant reading and partially re-using some parameters when the previous calibratin should really have been ignored. The second issue was in not being sufficiently sensitive to sensor saturation for display measurement. Fix by now having a zero tollerance, and allowing for 3 different display measurement exposures. * Fix bug in link/collink -ke where the K value was being distorted by not taking into account the B2A per channel output curves. * Fix bug in spectro/hidio.c that can cause a crash (bus error) on OS X for any program that accesses the instruments. * Make cgats lib easier to use from C++ (Thanks to Alastair M. Robinson). * Fix ICC spec. compliance issue with minimum description tag length in Profile Sequence Description tag type. * Fix bug in spectro/dispwin that prevented DPMS being re-enabled if the process is killed. * Fix bug in xicc/tiffgamut.c that prevented it working for Lab TIFF input. Fixed issues with doing image specific gamut mapping in collink. * Make sure CGATS file identifiers are always a minimum of 7 characters. * Add 'targ' tag to hold chart data in profiles. * Fix problem where rev would fail on systems with lots of RAM, due to running out of Virtual Memory space. This happens mostly on OS X, because its malloc routine use a lot more VM for small allocations than the actual memory consumed. * Fixed problem with Spyder 2 driver, where errors or user terminating/aborting measurements leaves the instrument in a hung or corrupted state. Fix by making sure that a measurement is always completed before returning. * Added Color Rendering Ra Index to measurements returned from spotread for ambient or with the -T flag. * Add an option to tweak/refine to improve matching for white point relative test chart data (Relative Colorimetric intent matching). * Fix a memory leak in gamut.c, plus a few other 1-off minor leaks elsewhere. (Thanks to Jordi Nodal for pointing these out.) * Add -U scale option to colprof so that input profiles can be created that have a media white that is whiter than PCS white. * Fixed bug introduced in V1.0.0 in matrix input profiles where white point was being normalized rather than being left absolute. Also changed Lut based display profiles so that the white point is forced to have a Y value of 1.0, to bring it into line with matrix profiles. (This may worsen the verification match to the original data though.) * Change rev cache RAM allocation to make sure ARGYLL_REV_CACHE_MULT scaled value can't exceed VM size. * Added -A option to displcal, so that the neutral axis to black point blend rate can be altered, and changed default to 4.0 to improve the off axis visual appearance with some LCD displays. * Made verify and refine a bit more robust in the face of different format .ti3 files, partucularly those created by logo2cgats. * Added a -O parameter to tiffgamut, to allow the resulting gamut file to be located somewhere other that the directory the last .tiff file is in. Version 1.0.4 bug fix release (30th June 2009) ----------------------------- * Modify icc/icclib to protect against integer overflow exploits, and fixes to minor bugs. Bump icclib version to 2.11 to reflect this. * Fix bug in spectro/hidio.c that can cause a crash (bus error) on OS X for any program that accesses the instruments. * Fix bug in xicc/xfit.c where too little memory was being allocated. Version 1.0.3 bug fix release (3rd September 2008) ----------------------------- * Modified tiffgamut so that it processes an arbitrary number of raster files. Also added a filter option, that filters out little used colors from the raster gamut. * Changed gamut mapping to fix problem in which the gamut mapping for profiles didn't match that in collink by fixeing out of gamut mapping to make extended source gamut of B2A table more sensible without afecting primary gamut hull fidelity. Tweaked the gamut mapping to de-emphasise luminence matching slightly, resulting in more saturated but darker primaries for the typical RGB->CMYK gamut mapping. * Fixed problem with i1display in which it would time out for some particular inputs (low level dynamic input ?) * Fixed MSWindows screensaver reset to work on Vista by adding fake mouse move event. * Changes rspl/rev to have a "fast setup" mode that trades a faster setup time for slower reverse lookups. This is to improve the responsiveness of xicclu. * Fixed bug in dispcal when using -a with -t * Added -L option to printtarg to suppress the i1pro target holder clip margin. * Fix yet another PPC GCC optimizer bug in spectro/dispread.c * Modifed rspl/rev cache allocation to make sure that it is somewhat less than the maximum virtual memory that a process can allocate. On some systems with lots of RAM, it is possible to have malloc() fail due to this. * Added support for i1 Monitor instrument, which is an i1pro without reflective capability. Version 1.0.2 bug fix release 19th August 2008 ----------------------------- * Fixed two typo bugs in colprof (xicc/xfit.c) to do with output per curve optimization - the symptoms were gcc based compiles taking a long time to create the A2B tables. * Added workaround to strange i1pro Rev A upgrade/Rev B quirk, that causes extra time to be taken for reads. * Added some extra verbose output when creating profiles (rspl/rev) to show the system RAM detected and the limit imposed on each rev cache. Also changed code to prevent failure when there is not enough memory to allocate a single cell to search, and to fix memory limit setting for systems that may have 4 Gbytes or more of memory. * Added new option to collink -fk, that forces 000K input to K only output. * Fix dispwin.c so that -K option (calibrate instrument) doesn't fail when it thinks two dispwin's are being requested. * Change spectro/hidio.c so that HidD_GetAttributes() fail is ignored. * Fixed bug in dispcal which causes a numerical fault if a Yxy white point is specified and ambient correction is used. * Changed colprof -bn to be the same effect as -B (ie. a minimal resolution B2A table). * Fixed dispwin -R "Effective LUT entry depth" report to work without -v. * 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) ----------------------------- * Changed XRandR code to index the _ICC_PROFILE property such than inactive displays are ignored. * Fixed problem in rspl/rev.c where the memory consuption was sometimes exceeding the maximum RAM limit. * Changed XRandR code to fall back to other extensions if it fails simple VideoLUT access tests. * Add environment variable "ARGYLL_IGNORE_XRANDR1_2" to cause XRandR 1.2 to be ignored on X11 systems that have buggy XRandR 1.2 implementation. * Fixed problem with locating displays on MSWindows with some particular configurations. * Fixed bug introduced into cam02.c that ignored enumerated viewing condition. * Changed udev USB matches to lower case, since apparently udev does a text match rather than matching the integers... * Fixed malloc size bug in profile/logo2cgats.c (thanks to Steven Greaves). * Fix dispwin so that the lack of an EDID_DATA atome is not a fatal error. * Fixed jcnf so that the temporary file is in the same directory as the file it will be renamed to. * Added debug option to dispwin/ucmm to help with diagnosis of locating displays. Version 1.0.0 changes (1st July 2008) --------------------- * Changed input device profile creation to create B2A table by default. This can be disabled with the -b option. * Changed scanin to pass spectral information from reference file to .ti3 file, and also changed coloprof to honour observer and illuminant options for input profile creation. * Added check to using libusb to check that it has been patched to work properly with Argyll supported instruments. * Remove termination character setting from ntio.c and unixio.c to work around problem with Prolific 2302 USB<->Serial converted. * Fixed bug in MingW build that caused a run time "(null) DLL cannot be found" error, for any program that linked to the libusb library. * Modified profile/logo2cgats to output the sample name, to make it more useful. Added -n flag to spectro/spec2cie to optionaly suppress spectral output. Documented spec2cie-p (plot spectrum) flag. * Modified gamut/nearsmth.c to change optimization search from 3D to 2D to improve speed. * Added experimental "Daemon" mode to dispwin, so that it monitors an X11 server and keeps each screen up to date with the corresponding profile and calibration using XRandR 1.2. * Tweaked dispcal to try and improve behaviour and resulting smoothness of curves. Added black brightness option -B. Added extra report to -R to show VideoLUT entry bits of significance. * The i1pro fixed integration time of 2.0 seconds for display calibration turns out to be too long for some very bright displays. To cope, an alternat 1.0 second integration time is calibrated, and switched to if the display is bright enough. * Changed distribution archives so that they have a top level directory. Changed OS X and Linux to gzip'd tar archives rather than .zip, so as to preserve the UNIX style permissions better. * Modified rspl/rev.c to add improved nearest acceleration lookup grid structure, to tackle performance issues. Changed aceleration grids to only hold fwd cells that are within the ink limit. Changes sub-simplex handling to make common face sub-simplexes shared between cells. Fixed bug in ink limit bug that was causing many sub-simplexes to be treated as if they straddled the ink boundary, slowing down inversions with ink limits applied. Changed reverse memory size accounting from cells to bytes, for more accurate containtment of memory usage below the swap threshold. Made default memory limit automatically adapt to available system RAM. Increased default reverse acceleration grid resolution to be twice the forward grid resolution, for much improved speed. Added another performance tuning environment variable ARGYLL_REV_ACC_GRID_RES_MULT to allow altering the reverse acceleration grid resolution. * Fixed cctiff so that it will copy a tiff file with no color transformation. This allows embedding an ICC profile in the output. Note that the TIFF file will have been modified, the format may have changed, and tags may be lost (ie., this is not the same as an "in place" embedding). * Added a simple utility "extracticc" to extract embedded ICC profiles from TIF files. * Modify tiffgamut, cctiff colprof and collink so that a TIFF file with an embedded profile may be used to supply ICC profiles. Also added an option to cctiff of embedding a profile in the destination raster file. * Added a micro cmm to Linux port, to supord recording the installed display profile to monitor association in the file system. dispwin uses this for installing display profiles, as well as setting a display to the currently installed profile. * Changed dispwin operation on OS X to be able to set the display calibration in a semi-persistent way that is similar to the behaviour on other systems. * Fixed imdi/cctiff and link/collink so that they no longer rely on a Matrix profile device space being roughtly perceptualy linear - instead use the per channel curves and convert them to an L* type space for indexing the CLUT grid, and also make a Matrix output space L* like for interpolation. * Changed colprof to extract the source gamuts for the perceptual and saturation gamut mapping from the perceptual and saturation A2B tables of the source profile (if they exist). This makes for a better match of the gamut mapping to that particular source profile when subsequently linked with a CMM that chooses the same intent table for source and destination profiles. Changed iccgamut, tiffgamut and xicclu to correspond - make Jab appearance space selection orthogonal to intent table used. * Checked and adjsted ambient calibration (Lux etc.). The Eye-One pro, Huey etc. now give reasonable readings. * Changed dispcal to make handling of input and/or output black offset consistent across all calibration curve selections, as well as make it selectable/blendable. Added some other standard video calibration curves. Added a viewing conditions transform based on CIECAM02 to adjust for the effect of ambient light on display visual contrast, plus option of measuring the ambient light with the instrument. * Made cam02 set_view() argument order consistent. * Added battery status report to spotread and chartread for DTP20. * Enhanced dispwin to take care of installing and uninstalling profiles for a chosen display. Also allow setting the display calibration to the appropriate installed profile. * Changed colprof so that the .ti3 data is included in a 'DevD' and 'CIED' text tag in the profile. * Added X11 RandR 1.2 support, and use this in preference to Xinerama and XF86VidMode extensions. Support the _ICC_PROFILE atom in the Xrandr output object, as well as the usual RootWindow properties. * Added TIFF file output support to target/printtarg, as well as an identification string on each page. * Enhance argyll/render to support text (using Hershey fonts), solid and dotted lines, improve speed, plus add anti-aliased output. This is in order to make it usable with printtarg. * Completely re-wrote the Jambase & Jamfiles to make a build system thaht works from the top and within sub-directories, as well as cleaning up the Jamfiles and improving the build system capabilities. This solves the circular dependency issues, makes a full build faster and cleaner, and makes it easier to ensure that a full build has consistent build flags and completes sucessfuly. The system TIFF library will now be used if available. Argyll project setup is now in "Jamtop" in the project root directory. * Added ability to dispwin to display test patches from a CGATS file, so that it can be used for manual patch measurement. * Improved ability of cctiff to cope with input files that have extra planes. * Changed tiffgamut to accept Lab encoded TIFF files without using an ICC profile, as well as accepting a colorspace ICC profile. * Removed limititation that VideoLUTs have exactly 256 entries. * Fixed problem with accuracy of dispcal -o profiles. [There were two issues, one being that the fitting was weighting smoothness to the detrement of accuracy, and the other being that there are unconstrained parameters that allow the model curves not to go through 1,1] * Fixed problem with Linux PolicyKit/Hal permission files not enabling serial ports and Huey. * Fixed and verified that the major Linux/X11 screensavers (X11 saver, xscreensaver, gnome & kde screensavers) and DPMS are disabled properly, and now we avoid doing an exec() every 60 seconds! * Modified libusb to address Linux intr/bulk polling and reliability issues. * Improved install documentation in the light of current Linux distributions, and MSWindows versions. * Renamed "profile" to "colprof", and "icclink" to "collink" to avoid clashes that have arisen with other executable names. * Fixed bug in scanin/scanrd.c that sometimes caused a double free crash on Linux. (Thanks to Guy K. Kloss) * Modified dispwin to open a device context to a particular MSWindows display differently, for better compatibility with MS Vista. * Changed dispwin to allow several of the commands to operate in one call. Clearing the LUT, setting the X11 ICC_PROFILE, loading the profile or X11 ICC_PROFILE can now be done with one invokation of dispwin. * Fixed bug in dispcal that affected black level adjustment and calibration. Symptom was a black level not quite as low as it should be. [Thanks to Hal V. Engel for noticing this] * Made sure that display profiles have the luminance tag value set, so that it's possible to recover the actual instrument reading. * Fixed dispcal and dispread -dfake so that they will take notice of a -kcal file. [Beta 8 Snapshot 2008/1/15] * Added -S and -L options to spectro/dispwin for Unix/X11 systems, to allow setting and using the _ICC_PROFILE root window property to store the displays profile and calibration. * Changed MSWindows and OS X dispwin/dispcal/dispread test window to be title and borderless, and also have an option (-B) to mask the whole screen behind the test window with black. * Added a "create intersection gamut" method to the gamut class, and also added a companion -i/-I flag to viewgam to print out the intersecting volume of the first two gamuts, and oprionaly save the intersecting gamut. Improved robustness of the gamut "radial" point test methods slightly. * Fixed spotread so that it doesn't display any color information when reading the Huey ambient sensor, and added an option (-T) to show color temperature for each reading. * Added gamut volume report (with -v) to tiffgamut. * Changed spectro/spyd2setup.h to only set the loaded flag after sucessfuly loaded a firmware file. * Changed numlib/numsup.c error, warning and verbose functions into function pointers so that they can be overridden by callers of library functions that make use of them (lprof). * Switched icc and cgats library from the "BSD like" license to the "MIT" license. * Added better DTP22 support to driver and printtarg.c (thanks to Nigel Rowe) * Fixed spectro/ntio.c to cope gracefully with systems that don't have any serial ports. * Renamed spectro/printread to spectro/chartread. * Fixed problem in spectro/usbio.c where on some systems usb_detach_kernel_driver_np() needs to be called before usb_set_configuration(). * Added option to dispread (-C) to allow a shell callout with each color being tested, to allow relaying the test patch value to a remote display via a script. * Removed spectro/filmread.c and target/filmtarg.c until their licensing compatibility with GPLv3 is figured out. * Added -W parameter to instrument using programs, that allows overriding the default serial flow control protocol. This may allow working around problems caused by flow control not working on certain systems. * Added quick ICC profile creation to dispcal, so that single operation calibration & profile is now possible. * Fixed some bugs in cctiff handling of Lab PCS and/or -p operation. * Added a new test chart type to render/timage, for testing profile B2A tables. * Added -V option to spectro/dispwin, that verifies the currently loaded calibration. * Added (yet another!) variation of the spectral field names to support colorport output, to profile/logo2cgats. * Fixed problem with dispcal -u (and possibly other cases, ie. profile) where an out of range VideoLUT calibration value can wrap around rather than saturating. * Improved black point setting in dispcal, so that it doesn't get lighter if the white point is reset during the run. Also changed the white point cliping to use the device model, rather than relying in the cube clipping code, which was not so accurate. * Modified profout per channel curve algorithm to be encapsulated in an independent module (xicc/xfit.c), and to create input curves that adjust the curve shape and clut grid locations independently of each other. This has similar performance to the old code in many cases, but reduces fit errors for certain types of device characteristics. [Beta 7 Snapshot 2007/10/15] * Fixed minor bug in icc.c - was double freeing while a V4 profile was being rejected. Also changed SYMETRICAL_DEFAULT_LAB_RANGE B2A input curve tweak for 16 bit - the range can be almost -128 to 128 and still remain symetrical. * Improved robustness of dispcal in zeroing in on the neutral patches. Got Jacobian matrix refinement going, added device value clipping, and made it revert back to the best ever value as a worst case result. Tested all the colorimeters on every platform, fixed bugs with spyder on different platforms (USB bugs ?). * Tweaked spyder driver to improve repeatability for low light conditions - made integration time adaptive. * Added Huey colorimeter support, including driving it through the HID drivers on MSWindows and OS X. * Added Spyder 2 Colorimeter support, including the firware transfer utility spyd2en, to allow the end user to get their instrument workings. * Fixed a problem in dispwin/dispcal/dispread not keeping the Gnome screensaver at bay. * Fixed very minor error in profile that caused a crash if -taw was used without a -s. * Hopefully fixed the last lingering issues with the gamut function "split plane" problem. Improved the split plane choice criteria too, reducing the structure size and (presumably) improving interogation speed slightly. (Visualizing things always helps a lot!) [Beta 6 Snapshot 2007/9/15] * Fixed bugs in dispcal target curve - the curves didn't seem to be as neutral as they should be. * Changed HCFR setup to assume no special 2mm apatures on its sensors, since this is the default hardware configuration. * Added support for more scan targets. The list is now: IT8.7/2, ColorCheckerDC, ColorCheckerSG, Eye-One Pro Scan Target 1.4 and HutchColor HCT. * Fixed bug in printread -xl :- XYZ wasn't being scaled to 100 (thanks to Duane Ruck for pointing this out). * Fixed bug that affected printread handling a chart with the patch location identifier that has patch location before strip location. This was affecting reading the Eye-One Pro Scan Target 1.4 chart. * Added a -a flag to printread, to cause the patch locations to be saved to the output, so that a chart read can be used to create a scan/input CIE reference file. * Added good/bad beeps to printread for the Eye-One Pro, to speed up chart reading. * Added a -B flag to print read, to disable bi-directional strip recognition if the reference patch values are not to be relied upon. * Modified i1pro patch recognition to make it more sensitive to differences in just some wavelength bands - this fixes Eye-One Scan Target 1.4 patch recognition, and generally helps robustness for all charts. * Supressed "There is at least one patch with an very unexpected response!" warning in printread unless the expected values were created using a specific device model such as an ICC or MPP profile in targen. [Beta5a Snapshot 2007/9/10] * Fixed bug that had crept into profile/profout.c that wreckes the contents of the gamut lut. * Added a manual chart recognition fiducial marks to print charts that are intended to be scanned in (printtar -s), so that manual chart recognition can be used on these too. [Beta5 Snapshot 2007/8/28] * Fixed serious bug in dispcal & dispread on Linux - screensaver suppression using fork() was causing programs to execute twice at the same time. * Changed spectro/dispcal.c calibration algorithm to be faster, more precise, and more robust. Improved handling of "native white" mode to better hit the target 1.0 RGB values. This should contain the worst case errors better. * Changed printtarg to pad i1 test chart last row, since the printread logic can't cope otherwise. * Added a manual chart recognition option (-F) to scanin, that makes use of fiducial marks defined in the .cht file. * Added a -G gamma option to scanin/scanin to allow some flexibility in the face of extreme device behaviour. * (Hopefully) fixed DTP02Q thanks to feedback from Udo Lembke. * Changed all of my code and other GPL code that allows upgrading, to the GPL Version 3 license. Corrected "licence" to "license" in many (but probably not all) places. * Modified DTP51 driver to ignore a "bad command" error to the GI command (allow for old firmware ?) * Modifed dtp20 on-line reading to be more forgiving of unexpected status after a strip read. * Added some fudge scale factors for i1pro emission and ambient modes. I'm not sure at the moment where the real scale factors come from, so I've roughly matched the scale to what the GM driver returns. Also add fudge factor for i1display2 ambient mode. * Fixed some bugs that had crept into DTP20 offline chart reading (not reading, heap corruption on free). * Added diagnostic for DTP20 offline chart reading to hint at what strip hasn't been read. * Changed printtarg to optimise contrast between test patches and spacers. * Added "aproximate least squares" setting mode to icc set_lut and rspl set_rspl to improve average accuract when setting interpolation arrays from a function (ie. when inverting A2B). * Added a "display with normalized brightness" to spot read to make it easier to verify spot readings for a display profile. * Fixed "r" and "rl" intents so that the white points are linearly mapped, as is the normal expectation with relative colorimetric intents. [Beta4 Snapshot 2007/5/16] * Fixed icclib to handle unknown tag types now, as well as cope more gracefully with ProfileMaker4 profiles that have an illegal flag value in their data tagtype flag field. * Modified gamut mapping to improve coherence of mapping outside the source gamut when used to create B2A table. * Created first cut of VRML debug plot library in plot/vrml.c, and switched gamut/gammap.c to use it. Other diagnostics could be switched to use it too (ie gamut/gamut.c). * Modified ciecam02 to improve handling of imaginary colors, and coherence in those regions. * Added a delay between setting a screen color (spectro/dispwin.c) and starting to read the patch with a display instrument. * Fixed issue on OS X with locating displays - IO dictionary string handling. * Made the dispcal/dispread calibration a bit friendlier if the instrument doesn't actually support calibration. * Added profile comment options to link/icclink. * Fixed bugs in xicc/xicc.c and xicc/xlut.c that were affecting how black generation was controlled by the input luminence value for a -kp option. This affected profile/profile the most, but could also have changed how link/icclink -G generates black as well. The black generation should now match quite closelgy between the B2A tables generated by profile/profile, and the black generation generated by link/icclink -G. * Added "patch by patch" mode to print read, that allows reading media where strip recognition is unreliable. * Added patch consistency tolerance modifier to printread and the i1pro driver. [Beta3 Snapshot 2007/4/10] * Modified i1pro driver to do scan measurements with single USB read, to avoid read latency issues. * Added display/emission distinction for i1pro, to speed up display measurement, while still allowing general ambient measurements to be adaptive. Added display mode to spotread. * Added workaround to the i1pro rev D crashing on close under Linux. It's reset rather than closed. * Modified libusb-win32 to fix problem with i1pro rev D crashing on a get_configuration. * Reworked scan patch recognition to work for reflective or emissive scans, and to be more tolerant of noisy media. * Added support for emission scans to i1pro and printreaf. * Fixed ref/*.sp files, as well as adding back in D50*.sp variations that seem to have gone missing. * Change i1pro trigger/read logic to ensure that process scheduling latency doesn't cause the read to be late, causing read failure. Add trigger/read timing diagnostics. * Fix i1pro switch thread cleanup to avoid memory access fault. * Tweak xicc/xspect.c FWA to have better estimation accuracy with a range of paper stocks, as verified by xicc/spectest2.c and xicc/spectest.c * Fixed spotread to display FWA corrected spectra correctly, as well as fix some bugs with the reference spectra. [Beta2 Snapshot 2007/3/29] * Fixed gcc 3.3 optimiser problems on OS X which were causing crashes in spotread -S and i1pro high res. * Modified spec2cie to look for specific device values to identify white, since some devices fool looking for maximum Y. * Fix triggering to make FWA spotreads work. * Fix bug in Spectrolino calibration with filter messages work properly. * Fix bugs with DTP41 and DTP51 triggering. * Change how rows per strip are stored in .ti2 file, to remove base 62 limit. * Increase scope of target/printtarg scale options, and add extra scale for spacers. * Changed Linux serial port location to look for /dev/ttyUSB* as well as /dev/ttyS*, and only offer them if they can be opened. * Fix i1pro driver so that it does not return spectral data unless asked. [Beta1 Snapshot 2007/3/22] * Finished i1pro driver by adding highres spectral mode (+ matching changes in dispcal, dispread, printread, spotread), and making the calibrations non-volatile so that they can be retained between utility starts. * Changed the default observer backto the 1931 2 degree observer in various programs (profile etc.), so there is less surprise at the discrepancy between the default instrument values and the values when spectral data is used. * Changed profile/logo2cgats so that it uses a heuristic to determine if the spectral data needs scaling by 1.0 or 100.0, since it seems the type of file cannot be relied upon as an indicator. * Fixed link/icclink to record a more accurate summary of overall intent in the header. * Re-worked tweak/refine.c slightly, to try and improve how it copes with out of gamut points. Added automatic extra weight (5) for lightest patch. * Added new black generation feature to link/icclink. It can now take the output inking from that of the output profile B2A table, just like revfix. * Fix bug in link/icclink - the changeover to using K target rather than locus had a bug in it. It was still partially defaulting to locus rather than K value target (some C library has a global called locus ?) * Made it so Eye-One pro can recognise strips when read in either direction. * Re-worked instrument calibration and measurement triggering to support instrument operated buttons. * Added support for DTP20 spectrometer. * Added support for Eye-One Pro spectrometer. * Fixed bug in profile where RGB space profiles didn't handle FWA correctly. * Fixed some bugs in cctiff that were causing inacurate results. * Added support for the DTP22/Digital Swatchbook. * Changed serial port driven instruments type to be automatically recognized, eliminating the need for the -i option on all the instrument using utilities (dispcal, dispread, printread, spotread). * Reworked gamut hull triangulation, hopefully making it more robust against any numerical issues. * Fix bug in printtarg that caused green spacers instead of white ones. * Added -c flag to spectro/dispwin. This clears a display calibration. * Added support for Eye-One Display 1 and 2 colorimeters. * Added extra configuration for DTP92 to cope with a firmware bug for certain early DTP92Q instruments. * Fixed bug in logo2cgats - X-Rite ColorPort spectral data is already scaled to 100, so only do this for Gretag files. * Added the -m flag to scanin/scanin, to allow it to return true mean values, rather than robust mean values (but see latter bugfix). * Fixed a bug in profile/profout.c that caused some matrix shaper profile to generate colorant XYZ values slightly less than 0.0, due to numerical inacuracy, triggering an assert. * Added a new option to spectro/spot read to allow use of the Spectrolino with filters fitted. * Added error handler to spectro/dispwin.c, so that there is not a fatal error triggered in just listing the screens on an X11 system running TwinView or MergedFB. * Fixed problem with USB/DTP94 that caused instrument coms to fail after doing calibration. * Fix bug in render/timage.c that caused central wedge to be corrupted. Version 0.60 changes (July 17 2006) -------------------- * Changed both gamut mapping intents, and enumerated viewing conditions to be symbolic mnemonics, so that the options don't change as intents and viewing conditions are added, deleted or re-ordered. Selection of intents or viewinging conditions using a numerical enumerator is no longer supported, to help catch problems caused by changes to the list with this releas. * Fixed bug in profile/profile.c when creation XYZ PCS LUT profiles - the gamut tag was being created with the wrong color space, and often this would cause an internal fault in gamut surface creation. * Changed profile/profile so that if a source gamut/profile is supplied for display LUT type profile creation, an ICC V2.4.0 profile is created with all 3 intent tables, rather than the single colorimetric intent that is default for ICC V2.2.0 and earlier. Fixed icc/icc.c to properly support the possibility of a full set of intent Luts in display and input profiles. (Profile does not yet support intents for input profiles.) * Added new intent to link/icclink and profile/profile.c, that does an absolute colorimetric link, but will scale the brightness down if needed to avoid clipping the source white point. This is useful in soft-proofing situatations. * Went through with both gcc -Wall, and Vc++ -w3 and reduced the number of waring messages. Fixed some very minor bugs along the way. * Made additional changes to spectro/dispcal.c, to improve behaviour when adjusting controls with and without targets. When adjusting without a white target, the control hints now help you adjust to be on the chosen black body or daylight locus. * Changed profile smoothing factors that are different for the L* a* and b* channels. * Made profile/profile.c label the profile with the platform it was created on. * Improved the device model used by dispcal, including optimising the model, so that it zero's in on calibration faster, and handles the black point more accurately. Added a variable -k option to dispcal. * Added display controls addjustment mode to dispcal, and altered the target gamma curve to better take the black point into account. * Added report option to dispcal, to measure and report on the current display behaviour. * Added verification mode to dispcal (-E), to allow checking how well a display meets its calibration targets. * Added -N option to dispcal, dispread and spotread to allow instrument calibration to be bypassed. This makes repeatedly operating some instruments (ie. Spectrolino) more convenient in emission mode. * Added a "load video LUT" mode to dispwin, so it can now be used to initialse the displays from either ICC profiles, or Argyll .cal files. Can be used on all platforms (but particularly MSWindows and X11) in startup scripts. * Fixed bug in X11 disable screensaver, and disabled the cursor over the test window. * Added proper multiscreen support on all platforms (Even X11 Xinerama!). * Fixed bug in dispcal that was causing the achievable brightness calculation to misbehave. * Added -u "update" option to dispcal, to speed up maintenance of display calibration. * Added separate options in dispcal for a daylight or black body color temperature target. * Added "plot spectra" option to spotread. * Added support for the X-Rite DTP94 (AKA OPTIX) to spotread, dispcal, dispread. Added -y option to allow specifying whether a CRT or LCD is being read. * Streamlined instalation (particularly on Unix and OSX), so that tifflib and libusb don't need special handling. Changes to Jambase to accomodate this. * Added support for USB connected instruments using libusb. * Added support in profile/logo2cgats for converting from X-Rite ColorPort format. * Added extra facilities to imdi to suppport arbitrary colorant order, arbitrary pixel padding, reduced runtime code size and improved cross platform compatibility. * Added warnings in all the instrument driver code, that instrument companies are not to be expected to support anything involving these drivers. * Completed new version of cctiff, that deals with an arbitrary sequence of profiles, as well as supporting L*a*B* encoded TIFF I/O. * Added alternate sort algorithm to imdi/cgen.c, for 16 bit input support, speeding up higher dimensional input conversions. * Changed icc/iccdump so that the -t parameter can be specified multiple times. * Added extra PCS curve for BtoA table of XYZ LUT profiles :- this greatly improves the accuracy of the BtoA lookup of XYZ LUT profiles. * Added greytiff utlity to binary distribution, and also added option to convert using CIECAM02 space, for lighter chromatic colors. * Added ColorantTable tag to profiles created by profile/profile. * Added a new option to dispcal and dispread, to allow the test window to be positioned and sized. This allows some people to cope with multiple displays better, and may give some flexibility in applying these utilities to projectors etc. * Added three stage overal conversions to icc/icclib.c, for monochrome, matrix and lut conversion classes. This is to make it convenient to split up every conversion into input per component, core intercomponent conversion, and per component output, to match the capabilities of imdi. * Modifed xicc/xicclu, xicc/revfix.c, profile/profile.c and link/icclink.c, to default the -k black generation to setting black level targets, instead of locus targets. In pratcice it seems easier to create smooth black curves this way, especially when meshing with the black behaviour forced by ink limits and L target levels. Backward compatibility with the previous controls is provided via the -K flag. Default black generation has generally been switched to -kr. xicc/xicclu has had the -kq option added, so that the behaviour of icclink -kq can be explored. Some bugs in -kq may have been fixed. * Added full verbosity levels to icc/icclu and xicc/icclu, so that -v0 can be used to capture batch output that is ready for further batch processing. * Enabled proper gamut tag creation in profiles. * Fixed numerical issue in xicc/xicc.c:icxdCIE94sq(), that was causing profile to fail when optimising matrix and curves. * Bumped up the default profile smoothing factors, as the resulting gamut boundaries were noticably bumpy. Default profile -r is 0.5%, and internal factors within rspl/scat.c have also been increased. This seems to be favouring smoothness over accuracy somewhat, but is still on the shallow part of the "knee", where further increasing smoothness would start to strongly decrease fit. * Fixed problem in profile (xicc/xlut.c) in locating the black point. Doing one search is not robust given the behaviour of many profiles, so several searches are now used to avoid local minima. The same fix is applied to xicc/mpp.c (Thanks to Gerhard Fuernkranz for discovering the problem.) * Fixed target/targen, link/icclink, xicc/iccgamut, xicc/fakeCMY, xicc/revfx, xicc/xfbview and xicc/xicclu to have estimated default ink limit values. Added input profile ink limit options to link/icclink. * Added a function to icc/icc.c to estimate the total link limit and per channel limits of an ICC profile. This is to workaround the lack of a standard tag in the ICC profiles. A function built on top of this in xicc/xicc.c (icxDefaultLimits()) established default total and black ink limits for a profile. * Modified gammap.c & nearsmth.c to increase the control over gamut mapping, and add new features. The controll weightings within gammap.c are now tables rather than #defines, and can be segmented by color, to fine tune particular areas. Only yellow uses this feature, to keep the gamut mapping universal. Two aditional features have been added, cusp mapping, that applies a degree of rotation to areas surounding source primary/secondary colorant cusps to partially align them with the destination cusps. The radius of influence of this mapping is settable. Another factor called "elevation" has been added, that simulates the effect of inflating the source gamut, allowing more complience in the mapping of the control vectors. Just perceptual and saturation tables are present. In nearsmth, expansion of the gamut is finessed a little by termporarily reversing the direction of the mapping when expansion is present. There are lots of other changes in nearsmth.c aimed at improving the robustness and behaviour of the nearsmooth function. The gammap tuning factors are aimed at providing good saturation while maintaining smoothness at the gamut surface. * Added code to the gamut hull finding, to locate and store the primary and secondary colorant "cusps" in the gamut file, as well as adding options to the various vrml utilities to mark the cusps. The cusps can be used within the new gamut mapping to align or partially align the colorants of the source to the destination. * Modified gamut boundary code to improve detail and acuracy of the gamut hulls. The smoothness of the destination hull affects the smoothness of the resulting gamut mapping to some degree. * Changed gamut mapping so that "full" neutral axis alignment no longer aligns the black point a*b* to the destination. The L/J range is mapped as if the black points are fully aligned, so the contrast ratio is not compromised. This approach seems to give a better subjective neutral result. (There appears to be no such thing as black point hue adaptation.) * Modified enumerated viewing conditions list to tweak ambient values slihtly, and introduce "monitor in bright work environment". * Added new option to spectro/fakeread to allow manipulation of the black point of the fake readings, to allow creation of test profiles with different black points. * Added another numerical problem workaround to xicc/cam02.c, to deal with Jab->XYZ issues when J == 0 * Created utility render/itest to generate RGB test images for checking gamut mapping behaviour. * Created new sub project "render", for a simple 2d raster rendering system. This is intended for use in generating test images, as well as rendering measurment test charts directly to rasters, rather than just postscript. * Added a -m option to target/printtarg, so that the paper margins can be increased from the default. * Added documentation for the .ti3 and .cal file formats. * Fixed bug in spectro/unixio.c, which caused long strips read on the DTP41 on OSX or Linux to fail when spectral readings were enabled. The canonical input buffer size was being exceeded. Switched to non-canonical input mode. (Also seemed to fix problem with Xon/Xoff flow control on OSX.) * Added flow control to serio I/O, to make instrument communications more robust. Hardware handshaking seems to be the most reliable (but see above). * Converted icc/fbtest into profile/invprofcheck, and added some more features to make it comparible to profile/profcheck. * Added VRML L*a*b* axis labels to gamut/viewgam, profile/*profcheck. * Increased gamut mapping RSPL smoothness, to compensate for RSPL changes in V0.53. Smooths out bumps in saturation mapping somewhat better, and should eliminate the "non-monotonic" warning message. Version 0.53 changes (16 December 2005) -------------------- * Fixed serious bug in target/ofps.c, that made the default distribution of points very non-optimal. * Added CIEDE2000 Delta E function to icc/icc.c, and also added this as an option to profile/profcheck, profile/mppcheck and profile/verify. * Added new utilities rspl/smtmpp.c and profile/splitcgats.c to allow testing and verification of profile optimised smoothness factors with more realistic device data. Use splitcgats in combination with profcheck and the hidden "-rs" flag in profile to cross validate the optimised smoothness factors. * Added new "-r" parameter to profile/profile to allow the profile smoothness factor to be adjusted to suite the uncertaintly of the device and instrument readings. * Created more in depth simulation of device behaviour to verify profiling operation (rspl/smtnd.c). Running this indicated that no single smoothness factor will suite all combinations of dimension, number of sample points and sample point uncertainty. Create a interpolation table lookup to provide an "optimised" smoothness factor, determined from the simulations. Used new profile/splitcgats to cross validate * Fixed serious bug in rspl/scat.c - new smoothness tracking factors were seriously wrong. Figured out correct approach and fixed it. Will affect various components including profile, icclink and refine. * Added support for hexagonal layout of charts on XY instruments. Supports aprox 14% more patches on the same sized chart. Changed default patch size for Spectrolino to 7mm, since this fits more patches on a page while remaining more reliable than the 6mm patches used in charts such as the ECI2002. (Changes to target/printtarg and spectro/printread) * Added extra check code for argument handling in link/icclink.c - we now switch to appropriate linking mode if options that require it are selected. * Added better algorithm for weakly tending rspl's to a particular mapping. Added weak default function API to scattered fit, and now make use of this in tweak/refine. This should eliminate an "overshoot" issue that was present with the simple grid of weak mapping points previously used (Thanks to Gerhard Fuernkranz for pointing out the problem.) Affects tweak/refine. tweak/refine has also been afected by problems with RSPL scattered data fit functionality - see above. * Modified spectro/dispcal.c to more acurately compute clip of target white with device gamut, and also use matrix to compute aprox. inverse more quickly and acurately, to give faster and more accurate convergence. Needs some more testing, may not work well on real monitors ? * Started adding support for ICC V4 Lab encoding into icc.c Version 0.52 changes (3 November 2005) -------------------- * Added a display calibration utility, dispcal, to create appropriate display lookup curves. Modified dispread and profile to carry the display curves through to the vcgt tag in the profile. Not extensively tested yet. * Added spectro/spec2cie.c from Gerhard Fuernkranz. * Changed clut profile input and output curve optimisation code to use conjgrad() instead of powell(). Aim was to speed up profiling, but speed seems to be about even. Added "optimise all" step since conjgrad() makes this feasible, getting slightly better fit. * Modified the rspl code to support non-equal grid resolutions. This was to support display calibration, but may come in handy for support of V4 profiles. Noticed that the smoothness tracking with different resolutions and dimensions wasn't working very well. Improved the test code (c1, t2d, t3d) to help reveal this, and fixed the problem. Now operates faster, more accurately, more smooth output with a better fit to the input points. Should improve the quality of forward profiles somewhat. The fitting error is more noticably improved from -ql through -qu. Gamut mapping seems to be a little smoother. * Completed the tweak/refine tool, useful for improving the accuracy of proofing systems. Changes were made to profile, icclink and revfix to support simple use of abstract correction profiles created using refine. * Added option to printread, to allow CIE data to be saved as D50 L*a*b*, for more flexibility for other purposes. * Fixed minor bug in DTP51 reading, where the guide setting was wrong for strips with less than the 6 passes. Also added fix code for DTP51 "off by one" patch problem - the error should be corrected automatically. * Fixed problem in reverse lookup of per channel curves, that affected performance of profile and icclink -G. This problem became evident when CAM was switched to CIECAM02. Note this problem seems only significant when CIECAM02 is used, ie. when the -c and -d flags are used to specify viewing conditions. * Added support for alternate test patch indexing, to better support non Argyll test charts (ie. ECI2002) * Renamed printspot to spotread, and expanded the range of instrument modes supported. * Added emmisive measurement mode support to printspot. * Added independent Gretag Spectrlino/SpectroScan interface library to cleanup some minor problems, and add some more features (such as a fake transmission measurement mode using a light table, etc.) * Added extra option to targen that allows creating test points targetted at a specified portion of the devices colorspace. * Fixed problem with imid & cctiff, where a profile that returns device values > 1.0 causes pixel value wraparound. * Added an extra option to printtarg to scale the size of the test patches. This can be used to allow for coarse screening, poor registration, and packing more test patches onto a page. * Added extra support in fakeread to allow monochrome test charts to be faked using RGB/CMYK profiles. * Added extra options to printtarg, to allow greyscale test charts to be represented in a number of different postscript color representations. * Fixed bug in targen when > 4 colorants are used, and -v is turned on. Diagnostic fails for > 4 colorants. (Thanks to Andrej Javorsek). * Fixed bugs in matrix/shaper profiling :- -ve offsets in shaper don't make any sense, so removed them; weighting of parameter values was faulty, so suppression of unsconstrained bumps in curves wasn't always effective. This change may improve matrix/shaper profile quality slightly. Version 0.51 changes (11 March 2005) -------------------- * Added new option to xicc/xicclu to allow plotting of the neutral axis to examine black generation behaviour. * scanin has problems with new correlation code. Revert to old code until problems are figured out. * Added support for a black channel ink limit in nearly all utilities that currently support a total ink limit. * Created cam02plot to explore discontinuities in CIECAM02 conversions. To support this, the usage of Helmholtz-Kohlraush effect is now a runtime flag. * A few changes in icc/ moving towards V4 support * Modify Jamfiles to support a more restricted "install" of executables and other files to bin/ Version 0.5 changes (7 November 2004) ------------------- * Got the GUI and serial coms dependent parts running under Mac OSX. Changes to Jambase and Jamfiles to make this work. * Modified Jambase to allow for Mac OSX Carbon GUI applications needing a minimal resource fork to run properly. * Added incremental rspl scattered point suport, to allow for us in an error driven targen point generation routine. * Added "EXTRAFIT" option to rspl, that allows for better fitting to scattered data points that have a high error after normal fitting. May improve profile accuracy when large test charts are used. * Add a special purpose "-f" and "-F" option to icclink, that causes K only or all output for RGB/CMY in to CMYK out devices for neutral (R=G=B) input. * Switched around gamut mapping high level controls into a simple "Perceptual" and "Saturation" set of pre-canned surface point weighting values. This allows more detail in setting the two different styles. A saturation enhancement control has also been made available, although this may need a little more work to be fully effective. * Switched over to CIECAM02 for better blue gamut mappings. Fix CIECAM02 so that it is robust given arbitrary Jab input values. * Fixed bug in gretag spectroscan print chart reader - it wasn't recalibrating every 50 readings. * Added support in spectro/fakeread.c for a "separation" device link profile to preceed the real device profile. This allows simulating the response of a device that used an explicit separation in its rendering pipeline. * Creating a hack CMY to CMYK separation creation support tool called xicc/fakeCMY.c This creates a dummy CMY->PCS .ti3 file from a CMYK device profile, that can then be turned into a CMY device profile that can then be linked with the CMYK device profile to create a CMY->CMYK device link separation profile. This program will be redundant when profile/sepgen is completed. * Add support for the Spectrocam illuminant spectrum (Xenon Lamp), even though this instrument is not supported directly. This allows the FWA to be used on spectral readings from this instrument. (Thanks to Gerhard Fuernkranz for providing this information). * Add method to gamut object to compute a gamuts volume, and report the total volume in xicc/iccgamut if verbose is set. * Modified scanin to work with scan of Gretag ColorCheckerDC. Needed to modify edge detection filter to reduce noise, modify edge matching code to support a wider range of scales, change matching logic to ignore target edges with no matching reference edge, stop using crossings as part of edge matching. * Added new entries to test chart recognition template, to allow scanin to determine correct rotation, even when the chart has no asymetric elements. This works similarly to the strip reading code, in checking correlation between expected and measured color values. Printtarg has also been modified to support this new scan recognition template entries. * Fixed up Gretag Spectroscan operation so that emission readings (for displays) etc. modes are correctly set and calibrated. * Added new facility to cgats library, to allow for a wildcard table keyword, as well as a variable "CGATS.XX" table keyword. * Switched to CIE94 delta E for shaper/matrix profile model fitting. * Introduce new flag ICX_CAM_CLIP to xicc, to allow full accuracy lookups within gamut, and clipping in CAM Jab space for out of gamut values. Turned this flag on in profile/profile, to improve clipping behaviour of colorimetric B2A table, and in link/icclink, to do the same for absolute and appearance indents. * fix argument '-t' processing error in profile/profile.c * gamut/gammap.c: Change over to better vector alignment code. * Improved some of the black point handling precision in icclink to reduce some innacuracies noticed by Gerhard Fuernkranz. * Modified Absolute Appearance intent to use a common white point between the input and output profiles, as well as scaling it to Y = 1.0, to try and prevent Jab values exceeding J = 100.0 * Improved profile/logo2cgats to cope with the latest formats of data files from Gretag. They seems to have moved over to including the device values in the readings file, just like Argyll :-). * Changed rspl/rev.c so that instead of failing when it runs out of room to cache all the cells being searched in a query, it proceeds with the search in chunks. This allows the memory usage to be curtailed, without risking the reverse lookup being aborted. There will be a slight performance loss if this happens though. * Fixed imdi/cctiff when linking profiles, to not use explicit per channel curves when the PCS is XYZ. This was causing excessive quantization, because XYZ is a non-perceptual space. (Same problem noticed in link/icclink some time ago!) * Fixed old bug in target/ppoint.c, that caused a crash under Linux in targen. (Thanks to Greg Sullivan for bringing this to my attention.) * Improved robustness of cam97s3 some more, some cases encountered in b2a table creation triggered problems with out of range values. * Added grid range override for gamut creation, to assist uniform handling of gamut compression in b2a table creation. * Added perceptual and saturation gamut mapping support to the profile creator (profile.c, profout.c). This takes an input profile as a parameter, to determine the necessary gamut mapping. * Added new function to icclib to allow setting of up to 3 Lut tags simultaniously. This is to allow the multiple intent B2A table values to be set while getting the best possible speed of inverse A2B lookup. * Added two new functions (fwd_relpcs_outpcs, bwd_outpcs_relpcs) to xicclu, to allow converting between native relative PCS and the appearance space configured in the space conversion. This is to allow converting to/from source/destination CAM Jab space for gamut mapping during profile creation. * 2003/12/9 Unstable release * Started HTML documentation in the doc directory. This is work in progress, and is not yet complete. See doc/Index.html * Changed per channel curve algorithm in xicc/profout.c, xicc/mpp.c and xicc/xmatrix.c, to improve accuracy of profile, and markedly reduce "wiggles" in certain cases, as well as improving the accuracy of the profile compared to the "true" underlying device characteristic. Changed how the white point is preserved once again, this time by simply adjusting the order 0 a*b* curve harmonic to map 0.0 to 0.0. Tuned curve weighting. Checked that the rspl scatterd data smoothing default is still an approproate compromise. * Added support for a TI3 file as reference for profile/fakeread, to improve reference set generation. * Fixed a bug that was causing the A2B output curve ranges to be excessive (160%, rather than the intended 110%). Altered profile/profile.c to remove the code that disables the use of A2B output curves when a high quality B2A is needed, now that there is a way of ensuring that the a*b* curves go through 0.0. * Tweaked xicc/mpp.c to improve accuracy with a very small number of points, by improving the sophistication of its estimation of ink 100% overlap values in the "anchor points" (which become defaults if measured values are missing), as well as strengthening the weight given to minimising the transfer curve and ink interaction "shape" values. * Added comment support in icclink, similar to that in profile. * Added support for MPP profile in profile/fakeread, to permit a simple way of creating an ICC profile from an MPP profile for <= 4 colorants. Spectral values can be generated using an MPP profile. This provides a path to creating a useful profile when very few measurements are available. * Changed -n flag in profile/profile.c to allow disabling input (-ni) and/or output (-no) clut lut curves. This allows testing of the effects of per channel curves. * Added -r flag to link/icclink.c to allow overriding the device link clut resolution. * Add some filtering to the K locus curve generation in profile, icclink etc., to smooth out mixing behaviour. Transition to ink limiting isn't smoothed at the moment. This may improve problems with banded colorization, but only if high resolution, reverse AtoB linking is being performed. * Correct Gamut boundary table support has been added to profile/profout.c, but isn't enabled or debugged yet. * Add spectral lookup support to mpplu.c utility. * Fix bug in spectro/dispread.c - we hadn't updated it for the latest .ti1 format. * Added a special "simple" mpp model mode to profile/mpprof.c and xicc/mpp.c, to support a more simple Neugenbauer like model for possible proofing standards use. * Added support in diagnostic plot for up to 6 curves, with do_plot6() function. * Disable USE_MERGE_CLUT_OPT from icclink, since it compromises accuracy, without a noticable improvement in speed. * Added simple link support into cctiff for convenience, and to serve as an example of how to link and convert pixel data in one step. * 2003/4/23 Unstable release * Modify gamut/gamut.c to #undefine ADD_EXTRA. This code doesn't seem to add much, and seems to go crazy with some profiles, using endless amounts of memory. * Changed rev.c allocation code to make sure doubles get allocated on their natural boundaries. This may fix problems with some processors (MIPS). (Thanks to Daniel Borenstein for pointing out the issue.). * Changed Absolute intent to clip in CIECAM97 space, for improved out of gamut color handling. (link/icclink.c, xicc/xicc.h, xicc/xicc.c, xicc/xlut.x xicc/xicclu.x). CIECAM97 is tricked into an absolute mode by forcing a D50 adapted white point for both source and destination profiles. The other appearance parameters still have an effect. * Hopefully removed the last problems involving the confusion about whether RGB device values ranges are 0-100 or 0-255. Argyll should now be consistent in using 0-100 for all its CGATS data files. [Changes mainly to scanin/scanin.c, plus warning code in profile/profout.c and profile/profin.c] * Added support in targen for using an mpp model to set test point distribution. * MPP profile format and creation now complete. Using much more complicated derivative minimisation equations to get adequate speed out of it. Overall accuracy of the profiles hasn't yet been established. * 2003/2/8 Unstable release * Added a slight refinement to the CIECAM97 model - rather than using linear interpolation for computing the eccentricity factor, use a spline blend to smooth out the slight "kink" at the knot points. * Updates mpp.c - work in progress. * 2002/12/25 Unstable release * Completed Gretag Macbeth Spectroscan support for print profiling. Most changess in spectro/printread.c, spectro/gretag.[ch] and spectro/spm.[ch]. * Tuned gamut mapping to improve perceptual. Fixed gamut/gammap.c so that separate luminance, chrominance and hue weighting works properly. Added variable chrominance weighting so that blues will be mapped with high L weight, while yellows will map to closest. This exploits the extra blue lightness added by allowing for the Helmholtz-Kohlraush effect in conversion to CIECAM97 Jab colorspace. Tweaked xicc/xicc.c gamut mapping control parameters to improve perceptual and saturation gamut mapping. Made extra gamut mapping surface point code in gamut/gamut.c more robust so that it can be turned on by default (since disabled again). * Added Helmholtz-Kohlraush effect modeling in xicc/cam97s3, using the equation from Bradford-Hunt 96C, as detailed in Mark Fairchilds "Color Appearance Models". CIECAM97 was derived from Bradford-Hunt 96S Simple model. It turns out that this effect is crucuial in gamut mapping CRT blues onto printing blues, and making sure that they take into account the subjective lightness of the highly saturated CRT blue. * Added more elaborate "thru Black" controll to link/icclink.c, allowing a CMYK to CMYK with a partial through black. This is implemented using two "upper" and "lower" limit black generation curves. * Added hack program profile/logo3 to allow for a smaller number of test sheets read on the Spectrolino. * Added new test point generation module target/ifarp.c, an "Incremental Far Point" generation algorithm, intended for N dimention test chart generation. This is none too quick, but seems to generate reasonably well distributed test points at a steady rate. Any reasonable algorithm in N dimensions needs to create test points starting with some in gamut "seed" point, as the valid gamut space becomes smaller and smaller as N increases. * 2002/12/2 Unstable release * Increased imdi code to handle at least 8 channels in and out. Added tables to generate all possible dimension combinations in and out from 3 to 8. Added -q and -s flags to itest to increase testing speed. * Added full 16 bit processing support to the imdi code. This also allows the handling of > 4 channel input conversions. Configured generation of 8 bit to 16 bit conversion kernels. The per channel output table value is 16 bits, useful for final device linearisation without the penalty of 16 bit precision thruout. Cleaned up the cgen code to more gracefully handle the differences between sort and simplex table code, as well as better handle 64 bit capability properly. * Changes imdi_gen to, by default generate all the imdi kernel code in a single file, reducing clutter. The -i flag invokes the previous behaviour. * Added -w flag to icclink, which enables a white point matching hack during linking. If set, the white points are forced to match regardless of the intent or gamut mapping. * Modified rspl to separate out the functions that are limited in the maximum input dimensions, and those that aren't, so that some rspl functionality can be used with larger numbers of colors. This translates through to increased number of colors support in some of xicc. * Fixed memory leak in imdi/imdi_tab.c (thanks to Krzysztof Spera) * Merged back basic changes to support compiling under Mac OSX. GUI and serial port dependent code isn't finished though. * Made allowance in CGATS and icc library for compiling without support of the usual system file and memory allocation calls, to increase flexibility when using these libraries in non standard environments. * Changed CGATS library to support alternate allocator and/or file I/O, for broader system compatibiliy. Added error return codes for all methods, to eliminate any calls to error(). Added new method error() to avoid having to check every method for a return code. * Finished first cut at the model printer profile object (xicc/mpp.[ch], profile/mpprof.c), that supports profiling N color printing devices. Note that ink modeling is not supported at the moment, but there is enough support for optimised seprations. * Added -u flag to profile/profile, that forces input Lut based profiles to be stored as an absolute profile. This is non-standard, but very useful for avoiding Lab range clipping when using a image as a colorimiter. * Added hack program profile/logo4 to convert four separate spectral files read using the logo software, to a single argyll .ti3 file. This won't be needed once Argyll can run the SpectroScan directly. * Added numerical library support for a Sobol sub-random multi-dimentional sequence generator, to support an alternate means of creating greater than 4 dimentional test chart values, plus first cut point support using it in target/qrand.c (This doesn't seem useful in practice though.) * Added -s option to iccdump to enable searching and dumping embedded profiles. * Fix bug in profile white point adjustment (xlut.c). The actual white point didn't match the specified white point to the degree of accuracy desired. There may also have been issues with clipping values in Lab PCS. * Added option to spectral to CIE module to compensate for the presense of FWA (Fluorescent Whitener Additive) in paper. This improves the accuracy of the CIE color values when a media measured under one illuminant is going to be viewer under a different illuminant. This works if you are using a spectral measurment instrument. (See poster in proceedings of the IS&T/SID 11th Color Imaging Conference, November 2003 page 248). * Added shaper/matrix input profile support. (profile/profin.c, xicc/xmatrix.c) This may be more accurate for scanner profiles, given the poor coverage of test points provided by an IT8 chart (but doesn't appear to be in practice). * Added support in scanin.c and scanrd.c for processing 16 bit TIFFs, allowing for higher precision scans (useful when using the image to measure color). * 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 color for printer calibration. This new mode handles multi-page test charts. * Added support in printtarg, for producing a scan recognition template (.cht) for each page. * Added patch optimisation module to target/printtarg, to arrange patches to maximise their contrast for strip reading instruments. * Removed the color directory, since it's functionality has been taken over by the xcolorants library, and the (yet to be completed) MPP profile library. * Added DTP41T (tranmission) support in target/printtarg.c and spectro/printread.c etc. * Made changes to target/targen.c, target/printtarg.c and spectro/printread.c to be able to generate and then read >4 color test charts, to be able to characterise 6 to 8 color devices. * Added support in xicc/xspect.c for measuring StatusT and Visual density from a spectral reading, as well as an aproximate XYZ to density conversion, to support spectrometer 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. * 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. * Create a new test point creation module, target/simplat.c, to create higher dimentional, regular simplex latice test pointsi (this seems rather slow and has difficulty arriving at the desired number of test points.) Fourth snapshot changes: (25 March 2002) ------------------------ * Removed gamut/iccgamut, and renamed xicc/xiccgamut to xicc/iccgamut. * Modified tiffgamut to be able to emit CIECAM97 style colorspace gamuts, so that it can be used to generate appropriate gamut files as input to icclink. Moved it to the xicc subdirectory, as it depends on xicc, just like xiccgamut. * Fixed up icclink.c, gammap.c and nearsmth.c to more correctly handle gammut mapping for a particular image gamut, rather than a source colorspace. * Added text description option to profile utility. * Made significant modifications to the perceptual gamut mapping. Turned gammap into an object, rather than merely returning a rspl to allow for a separate L mapping step. Added #define to control this. Made the source to destination surface point a weighted optimisation algorithm for more control over the absolute vs. relative error introduced, and setup some initial weighting values. This is intended to combat the tendency of the "smallest absolute error" mapping to map many to one in the most saturated regions, leading to a loss of detail. The weighting scheme could probably use some more fine tuning, or even some alteration to make it vary with respect to (say) the absolute L value, or the absolute C value. * Added first cut at a model based forward profile creation (profile/mpprof.c). This is intended for profiling 6 or more color devices, and using as the profile driving optimised separations. * Added xcolorants resource to allow specifying and defining device colorant combinations. This is needed as a foundation to profiling 6 or more color printing devices. * Tweaked targen to concentrate test patch points at regions of higher curvature. This should improve profiling efficiency slightly. * Fix bug in xlut.c where creating a gamut cleared any ink limit set on a rspl. This caused the ink limit to be ignored in any icclink that used gamut mapping. * Modified printtarg.c to try and get more reliable DTP41 operation. Switch to black and white patch spacers by default. It's difficult to know what the instrument really requires to reliably pick up the test spacers. * Fixed bug in gamut where it was still hanging on to vertex points that disapear below the log convex hull. This has no consequences. * Added option in icclink to allow specifying an explicit source gamut for the gamut mapping. This allows tailoring the gamut compression to be optimised for a particular image. * Added profile checking utility, that checks measured device points against an icc profile. * Fixed probem with linking when any of the profiles native PCS is XYX. The device linearisation curve should not be preserved if the native device profile PCS is XYZ. * Fixed bug in xmatrix.c & xmono.c when finding the gamuts of matrix and mono transforms when a Bwd transform is used. Showed up in icclink when the output profile was a matrix of monochrome transform. * Fixed bug in icclib when PCS overide is used with a Bwd transform. Similar problem to above for matrix & mono profiles, but at the icclib level. * Added function in icclink.c to allow the generation of a device linearisation curve for XYZ profiles. This was expected to improve the result when linking to XYZ profiles, but currently seems to make things worse. This feature is therefore off by default. :-( (This should be changed to work the same as the current xlut.c profile code!) * Added preliminary support in printtarg for the SpectroScan spectrodensitometer. Also added preliminary support for scanner recognisable test charts. * Added option to icclink to turn off the use of linearisation curves in the output link, since this sometimes seems to make the accuracy worse given profiles with odd device linearisation curves. * Added custom page size support to printtarg. * Modified icc library defines to use INR32 rather than INT32 definition, to avoid clashes with system typdefs etc. * Added CIE94 delta E support to profchek utility, changed peak reading to be peak delta E rather than peak individual L, a or b, and made the same change in the check code in profout.c * Added utility to do reflective spot readings using appropriate instrument (printspot). DTP41 supported. * Fixed bug in profile.c that meant that the spectral mode was ignored unless an observer was specified (ie. it wasn't defaulting to 1978_2). * Modified targen.c so that when a previous profile is used to pre-condition test points, the neutral axis has a higher density of points, in line with the higher sensitivity the CIE94 delta E formula has in this region. This should improve the tolerance of the resulting profile in the important neutral gray area. * Fixed bug in printread.c that is triggered when more than 26 strips are being read. * Modified targen.c so that the 4 dimentional auxiliary chanel weighting (ie. K chanel in CMYK) is 150% of the Lab spacing, rather than being 50% of it, when ICC profile pre-conditioning is being used. This seems to improve both the worst case, and average error of the resulting profile for at least some devices. * Switched to (now working) xlut2.c code, for creating clut based profiles. This version creates both input and output 1D luts by optimising the accuracy of the profile for a linear clut. The result seems to be more accurate profiles, since the underlying device characteristic is better modeled. It also seems to aleviate some of the issues when linking and preserving the device 1D luts in the linked profile. * Added verification function to icclink.c, to check the accuracy of a link profile. * Fixed numsup.c 2d array malloc/free to be more efficient by allocating the main array as a single block. * Fixed bugs in handling XYZ lut based profiles. * Fixed bug in setting white and black points for input profiles. * Added support for selecting algorithm type for all types of profiles - input, display and output. (XYZ lut doesn't seem to work properly yet though!) * Merged Raph Levien's cleanups to icc.c, to quiet gcc warnings. * Improved new xlut2.c to handle pathalogical input data from gridded charts. The order of the curves is now adjusted so that it is not greater than what can be supported by the data. Also changed shaper curve parameter action to be more progressive, and tied the parameters into the optimisation goal so that parameters that have no effect are minimised, resulting in less "ringing". Fixed bug in shaper curve transform that was clipping parameters, resulting in gross errors before the white point was exactly fixed on. * Added new features to profcheck: Sorting feature to indicate support for a particular device->pcs value, + VRML output of errors between profile and datapoints. * Modified scanin/scanrd to allow for Grey and CMYK .tiff files, as well as just outputing a CGATS data file, rather than only performing the data collection needed for and RGB scan calibration. This is useful for capturing the patch values from a test chart only available as a TIFF file. Removed automatic extention stuff. * Added black wedge generation to targen, and extra checking to elminate redundant test patches. * Added EPS output support to printtarg. * Added a couple of options to cctiff to aid diagnostics. Third snapshot changes: (17 July 2001) ---------------------- * Changed targen to allow full spread test points to take account of the others sorts of test points. * Changed icclib to use the Bradford chromatic adaption for white point shifting in profile creation and absolute profiles lookup. This creates some minor incompatiblity with profiles produced with earlier versions, but is likely to be more compatible with other CMMs. * Added support in icclib for abstract file accesor type (icmFile), and included implementations for standard file and memory image. * Added support in icclib for abstract memory allocator, and included implementation for standard alloc/free. * 25/2/2001 Changed targen to use ICC profile for perceptual even point generation. Includes support for Gray and RGB as well as CMYK perceptual support. * Film profiling using the Spectroscan-T care of Niel Okamoto. * Print charts suitable for the Xrite DTP41 are now supported, and print chart reading using the DTP41 is now supported. * Added DTP92 support and Lut and matrix profile support for display profiles. * Added spectral reading support to the DTP41 readings. * Added support in profile for using spectral data with choice of observers and builtin or loadable illuminant spectra. * Modified the gammap code to precicely match the white and black points. Solves "background color" problems in linking RGB and CMYK etc. * Changed K generation curve parameters to be easier to control. Have two breakpoints and curve shape along the luminance axis. * Added more sophisticated auxiliary chanel locus finder in rspl/rev.c, to be able to detect profile anomolies (not made use of in current code). * Added underlying support for optimised separations into 4 to 8 separations in rspl/opt.[ch] . This is intended to be used internally as an option for driving a CMYK device, and also explicitly to support 6 or more color devices. Not tested or made use of just yet. * Added development area for Java GUI development. The intention is to use Java as a sophisticated scripting front end, to make the command line commands more palatable. Second snapshot changes: (30 November 2000) ------------------------ Neil Okamoto has contributed support for generating RGB TIFF targets suitable for film recorder output, as well as Gretag Spectrolino support for reading them in again. The target patch generation now uses ICC profile to pre-condition the test points. This now works for RGB and Grey targets. Finished port to Linux. Cleaned up build automation somewhat. Added RGB output device profile generation support. Added RGB scanner device profile generation support. Added a couple of spectrometer conversion utilities for raw data files from other CMSs. Added gamut boundary mapping and visualization tools (VRML) Added CIECAM97s Color Appearance Model (CAM) colorspace support. Added experimental gamut mapping code. Enhanced linker to use CAM and gamut mapping. Numerous bug fixes and enhancement. First snapshot (28 October 2000) --------------