[OpenICC] Device Settings in ICC

Graeme Gill graeme at argyllcms.com
Mon Sep 4 21:24:46 PDT 2006


Kai-Uwe Behrmann wrote:
> as discussed some time ago and prepared on the ColourWiki pages I finally 
> created a specification on how I imagine a ICC profile could include 
> device driver specific settings.

Just to address some narrow technical issues first:

If you're going to introduce a custom ICC tag (which
seems to be what you are suggesting), then I'm presuming
that you're suggesting a tag signature of 'DevS'. Are
you intending to register that signature with the ICC ?
If not, what's to stop that tag signature being
used officially by someone else, some time in the future ?

The tagtype you're suggesting, uses the signature 'data',
but this tag is already reserved by the ICC, and has a
different layout. Bytes 8..11 contain a flag, indicating
the type of data (ASCII or binary), and the data payload
starts at offset 12.

Assuming you fix this problem, then since 'data' is a general
purpose tagtype, I'd also suggest perhaps adding
a magic number, and version number at the start of the
payload data, to provide some error resilience, and
some allowance for coping with changes in the future.

The allowance for only 6 bytes for various names, seems
rather restrictive. Many names are likely
to be longer than this, ie. "Epson 1800" exceeds this.
A USB serial number is a string, so nothing restricts it
to being 6 bytes or less either.
A lot of the information I would have expected to be used
for matching, isn't there, ie.
type of paper, printing resolution, quality/speed setting,
inkset (ie. photo black vs. matt black etc.), and so on.

If this is all buried in the driver specific configuration
data, then it's not clear how it gets from the driver
into the profile.


Addressing some wider issues (and Hal has already raised
a large number of them), then I'd like to understand
what alternatives to introducing a private tag were
considered.

For instance, the ICC have already standardized
a number of tags for encoding the device and settings.
Since they were created for various circumstances, they
may not address everything necessary, nor will they
probably map directly into something that is useful
in your specific circumstances, but they should at least
be examined, and some attempt made to use standard
tags if possible.

Existing tags for this general purpose are:

  icSigCalibrationDateTimeTag
  icSigColorantOrderTag
  icSigDeviceMfgDescTag
  icSigDeviceModelDescTag
  icSigDeviceSettingsTag
  icSigProfileDescriptionTag
  icSigScreeningDescTag
  icSigScreeningTag
  icSigViewingCondDescTag
  icSigViewingConditionsTag

One approach would be to encode the information
you want as a text string, in (say) the
icSigDeviceModelDescTag.

Another possibility is the icSigDeviceSettingsTag,
which could be expanded in a relatively compatible
way, without having to worry so much about
collisions with existing or future use.

The thing to do would be to register a platform
signature for *nix with the ICC, and then
there is a great deal of flexibility to
create device setting signatures, and device
setting values in this tag, since they are platform
specific.

(A complication is that icSigDeviceSettingsTag
has been removed from ICC V4.2, but its format
was standardized in previous versions, and
therefore will still be recognized correctly
by all ICC software, for backwards compatibility).

Another option is not to place this information
in the ICC profile itself, but to have some
other sort of record, which points to the ICC profile.
This isn't as convenient or bullet proof for things
like installation, but probably wouldn't make things
any worse (and might be easier in some ways), in
terms of creating profiles, and would mean the
whole ICC registration issue goes away.

I hope these thoughts are useful.

Graeme Gill.


More information about the openicc mailing list