(v13) Custom color space management
This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP
Independent of ICC profiles, the alternate CMM can declare custom color spaces that perform proprietary conversions. Once they are declared to the RIP, they can be used in the same way as other PostScript language color spaces when configuring the RIP.
declare_custom_colorspace
Declares a custom color space to the RIP which is returned in a structure.
sw_cmm_custom_colorspace *(RIPCALL *declare_custom_colorspace)
(sw_cmm_instance *instance, uint32 index);
The alternate CMM is expected to maintain an array of sw_cmm_custom_colorspace
structures. The RIP will query the alternate CMM for this list, obtaining a pointer to one structure within the array with each call.
index | This is a zero-based index in the array of structures maintained by the alternate CMM. The return value should be a pointer to the index element within the array. If index is out of the range of the array, then NULL should be returned. |
The declare_custom_colorspace() method returns a pointer to a custom colorspace structure.
The fields in the custom colorspace definitions are:
name | This is a zero-terminated string within the alternate CMMs memory that identifies the custom color space. This same string is used in the PostScript language color space in the RIP configuration, see (v13) PostScript language configuration of custom color spaces |
num_input_channels | This is the number of input channels. This is not directly used by the RIP, but it must correspond to the input color space used in the PostScript language configuration. See Chapter 17 of [HQNEXTN]. |
num_output_channels in custom color spaces | This is the number of output channels. This is not directly used by the RIP, but it must correspond to the output color space used in the PostScript language configuration. See Chapter 17 of [HQNEXTN]. |
The RIP may call declare_custom_colorspace at unpredictable times and for any value of index.
Alternate CMMs that do not support custom color spaces must return NULL for all values of index.
open_custom_colorspace in custom color spaces
As with open_profile() above, open_custom_colorspace() returns a sw_cmm_result
, and stores a CMM profile handle in the output handle parameter.
NOTE: close_profile() will be called for custom colorspace profiles as well as ICC profiles.
sw_cmm_result (RIPCALL *open_custom_colorspace) (sw_cmm_instance *instance,
uint32 index, sw_cmm_profile *handle);
The RIP does not interpret the profile handle returned by this call. The profile handle is passed back to the alternate CMM implementation as a means of identifying the custom colorspace when creating a transform, or closing the profile.
instance | An alternate CMM instance which previously declared support for the custom colorspace through a call to declare_custom_colorspace(). |
index | A zero-based index used to identify the custom colorspace defined by the alternate CMM instance. |
handle | A pointer in which a CMM profile handle is stored. This handle will be used to refer to the profile by close_profile() and |
It returns SW_CMM_SUCCESS if the profile was successfully opened, in which case a nonNULL profile pointer should have been stored in handle. If the profile could not be opened, one of the sw_cmm_result
error codes is returned. If a valid profile handle is returned, the close_profile() method will be called to destroy the profile later.