1 /* Copyright (C) 2001-2012 Artifex Software, Inc.
2    All Rights Reserved.
3 
4    This software is provided AS-IS with no warranty, either express or
5    implied.
6 
7    This software is distributed under license and may not be copied,
8    modified or distributed except as expressly authorized under the terms
9    of the license contained in the file LICENSE in this distribution.
10 
11    Refer to licensing information at http://www.artifex.com or contact
12    Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134, San Rafael,
13    CA  94903, U.S.A., +1(415)492-9861, for further information.
14 */
15 
16 
17 /*  Header for the ICC Manager */
18 
19 #ifndef gsiccmanage_INCLUDED
20 #  define gsiccmanage_INCLUDED
21 
22 #define ICC_DUMP 0
23 
24 /* Define the default ICC profiles in the file system */
25 #define OI_PROFILE        "OIProfile" /* Keyword to indicate use of OI profile */
26 #define DEFAULT_GRAY_ICC  "default_gray.icc"
27 #define DEFAULT_RGB_ICC   "default_rgb.icc"
28 #define DEFAULT_CMYK_ICC  "default_cmyk.icc"
29 #define LAB_ICC           "lab.icc"
30 #define SMASK_GRAY_ICC    "ps_gray.icc"
31 #define SMASK_RGB_ICC     "ps_rgb.icc"
32 #define SMASK_CMYK_ICC    "ps_cmyk.icc"
33 #define GRAY_TO_K         "gray_to_k.icc"
34 #define DEFAULT_DIR_ICC   "%rom%iccprofiles/"
35 #define MAX_DEFAULT_ICC_LENGTH 17
36 
37 /* Key names for special common canned profiles.
38    These are found in some image file formats as
39    a magic number.   */
40 
41 #define GSICC_STANDARD_PROFILES_KEYS\
42   "srgb", "sgray"
43 #define GSICC_STANDARD_PROFILES\
44   "srgb.icc", "sgray.icc"
45 #define GSICC_NUMBER_STANDARD_PROFILES 2
46 #define GSICC_STANDARD_INTENT_KEYS\
47   "per", "col" , "sat", "abs"
48 /* This enumeration has to be in sync with GSICC_SRCGTAG_KEYS */
49 typedef enum {
50     COLOR_TUNE,
51     GRAPHIC_CMYK,
52     IMAGE_CMYK,
53     TEXT_CMYK,
54     GRAPHIC_RGB,
55     IMAGE_RGB,
56     TEXT_RGB
57 } gsicc_srcgtagkey_t;
58 
59 #define GSICC_SRCGTAG_KEYS\
60   "ColorTune", "Graphic_CMYK", "Image_CMYK", "Text_CMYK",\
61   "Graphic_RGB", "Image_RGB", "Text_RGB"
62 #define GSICC_NUM_SRCGTAG_KEYS 7
63 #define GSICC_SRCGTAG_MAX_KEY 12
64 
65 #include "gsicc_cms.h"
66 
67 /* Prototypes */
68 void gsicc_profile_reference(cmm_profile_t *icc_profile, int delta);
69 void gsicc_extract_profile(gs_graphics_type_tag_t graphics_type_tag,
70                        cmm_dev_profile_t *profile_struct,
71                        cmm_profile_t **profile,
72                        gsicc_rendering_intents_t *rendering_intent);
73 void gsicc_get_srcprofile(gsicc_colorbuffer_t data_cs,
74                      gs_graphics_type_tag_t graphics_type_tag,
75                      cmm_srcgtag_profile_t *srcgtag_profile,
76                      cmm_profile_t **profile,
77                      gsicc_rendering_intents_t *rendering_intent);
78 int gsicc_getsrc_channel_count(cmm_profile_t *icc_profile);
79 int gsicc_init_iccmanager(gs_state * pgs);
80 int gsicc_init_gs_colors(gs_state *pgs);
81 void  gsicc_profile_serialize(gsicc_serialized_profile_t *profile_data,
82                               cmm_profile_t *iccprofile);
83 int gsicc_set_device_profile_intent(gx_device *dev, gsicc_profile_types_t intent,
84                                 gsicc_profile_types_t profile_type);
85 int gsicc_init_device_profile_struct(gx_device * dev,  char *profile_name,
86                                      gsicc_profile_types_t profile_type);
87 int gsicc_set_profile(gsicc_manager_t *icc_manager, const char *pname,
88                       int namelen, gsicc_profile_t defaulttype);
89 int gsicc_set_srcgtag_struct(gsicc_manager_t *icc_manager, const char* pname,
90                             int namelen);
91 cmm_profile_t* gsicc_get_profile_handle_file(const char* pname, int namelen,
92                                              gs_memory_t *mem);
93 void gsicc_init_profile_info(cmm_profile_t *profile);
94 int gsicc_initialize_default_profile(cmm_profile_t *icc_profile);
95 gsicc_manager_t* gsicc_manager_new(gs_memory_t *memory);
96 cmm_profile_t* gsicc_profile_new(stream *s, gs_memory_t *memory,
97                                  const char* pname, int namelen);
98 int gsicc_set_gscs_profile(gs_color_space *pcs, cmm_profile_t *icc_profile,
99                            gs_memory_t * mem);
100 cmm_profile_t* gsicc_get_gscs_profile(gs_color_space *gs_colorspace,
101                                       gsicc_manager_t *icc_manager);
102 void gsicc_init_hash_cs(cmm_profile_t *picc_profile, gs_imager_state *pis);
103 gcmmhprofile_t gsicc_get_profile_handle_clist(cmm_profile_t *picc_profile,
104                                               gs_memory_t *memory);
105 gcmmhprofile_t gsicc_get_profile_handle_buffer(unsigned char *buffer,
106                                                int profile_size);
107 gsicc_smask_t* gsicc_new_iccsmask(gs_memory_t *memory);
108 int gsicc_initialize_iccsmask(gsicc_manager_t *icc_manager);
109 unsigned int gsicc_getprofilesize(unsigned char *buffer);
110 void gscms_set_icc_range(cmm_profile_t **icc_profile);
111 cmm_profile_t* gsicc_read_serial_icc(gx_device * dev, int64_t icc_hashcode);
112 cmm_profile_t* gsicc_finddevicen(const gs_color_space *pcs,
113                                  gsicc_manager_t *icc_manager);
114 gs_color_space_index gsicc_get_default_type(cmm_profile_t *profile_data);
115 cmm_dev_profile_t* gsicc_new_device_profile_array(gs_memory_t *memory);
116 void gs_setoverrideicc(gs_imager_state *pis, bool value);
117 bool gs_currentoverrideicc(const gs_imager_state *pis);
118 void gs_setoverride_ri(gs_imager_state *pis, bool value);
119 bool gs_currentoverride_ri(const gs_imager_state *pis);
120 cmm_profile_t* gsicc_set_iccsmaskprofile(const char *pname, int namelen,
121                                          gsicc_manager_t *icc_manager,
122                                          gs_memory_t *mem);
123 int gsicc_set_device_profile(gx_device * pdev, gs_memory_t * mem,
124                              char *file_name, gsicc_profile_types_t defaulttype);
125 void gsicc_setrange_lab(cmm_profile_t *profile);
126 /* system and user params */
127 void gs_currentdevicenicc(const gs_state * pgs, gs_param_string * pval);
128 int gs_setdevicenprofileicc(const gs_state * pgs, gs_param_string * pval);
129 void gs_currentdefaultgrayicc(const gs_state * pgs, gs_param_string * pval);
130 int gs_setdefaultgrayicc(const gs_state * pgs, gs_param_string * pval);
131 void gs_currenticcdirectory(const gs_state * pgs, gs_param_string * pval);
132 int gs_seticcdirectory(const gs_state * pgs, gs_param_string * pval);
133 void gs_currentsrcgtagicc(const gs_state * pgs, gs_param_string * pval);
134 int gs_setsrcgtagicc(const gs_state * pgs, gs_param_string * pval);
135 void gs_currentdefaultrgbicc(const gs_state * pgs, gs_param_string * pval);
136 int gs_setdefaultrgbicc(const gs_state * pgs, gs_param_string * pval);
137 void gs_currentnamedicc(const gs_state * pgs, gs_param_string * pval);
138 int gs_setnamedprofileicc(const gs_state * pgs, gs_param_string * pval);
139 void gs_currentdefaultcmykicc(const gs_state * pgs, gs_param_string * pval);
140 int gs_setdefaultcmykicc(const gs_state * pgs, gs_param_string * pval);
141 void gs_currentlabicc(const gs_state * pgs, gs_param_string * pval);
142 int gs_setlabicc(const gs_state * pgs, gs_param_string * pval);
143 
144 
145 
146 #if ICC_DUMP
147 static void dump_icc_buffer(int buffersize, char filename[],byte *Buffer);
148 #endif
149 #endif
150