1 /* Copyright (C) 2001-2006 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, modified
8    or distributed except as expressly authorized under the terms of that
9    license.  Refer to licensing information at http://www.artifex.com/
10    or contact Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134,
11    San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
12 */
13 
14 /* $Id: gscrd.h 8022 2007-06-05 22:23:38Z giles $ */
15 /* Interface for CIE color rendering dictionary creation */
16 
17 #ifndef gscrd_INCLUDED
18 #  define gscrd_INCLUDED
19 
20 #include "gscie.h"
21 
22 /*
23  * Allocate and minimally initialize a CRD.  Note that this procedure sets
24  * the reference count of the structure to 1, not 0.  gs_setcolorrendering
25  * will increment the reference count again, so unless you want the
26  * structure to stay allocated permanently (or until a garbage collection),
27  * you should call rc_decrement(pcrd, "client name") *after* calling
28  * gs_setcolorrendering.
29  */
30 int
31     gs_cie_render1_build(gs_cie_render ** ppcrd, gs_memory_t * mem,
32 			 client_name_t cname);
33 
34 /*
35  * Initialize a CRD given all of the relevant parameters.
36  * Any of the pointers except WhitePoint may be zero, meaning
37  * use the default values.
38  *
39  * The actual point, matrix, range, and procedure values are copied into the
40  * CRD, but only the pointer to the color lookup table
41  * (RenderTable.lookup.table) is copied, not the table itself.
42  *
43  * If pfrom_crd is not NULL, then if the EncodeLMN, EncodeABC, or
44  * RenderTable.T procedures indicate that the values exist only in the
45  * cache, the corresponding values will be copied from pfrom_crd.
46  * Note that NULL values for the individual pointers still represent
47  * default values.
48  */
49 int
50     gs_cie_render1_init_from(const gs_memory_t  *mem,
51 	    		     gs_cie_render *pcrd,
52 			     void *client_data,
53 			     const gs_cie_render * pfrom_crd,
54 			     const gs_vector3 * WhitePoint,
55 			     const gs_vector3 * BlackPoint,
56 			     const gs_matrix3 * MatrixPQR,
57 			     const gs_range3 * RangePQR,
58 			     const gs_cie_transform_proc3 * TransformPQR,
59 			     const gs_matrix3 * MatrixLMN,
60 			     const gs_cie_render_proc3 * EncodeLMN,
61 			     const gs_range3 * RangeLMN,
62 			     const gs_matrix3 * MatrixABC,
63 			     const gs_cie_render_proc3 * EncodeABC,
64 			     const gs_range3 * RangeABC,
65 			     const gs_cie_render_table_t * RenderTable);
66 /*
67  * Initialize a CRD without the option of copying cached values.
68  */
69 int
70     gs_cie_render1_initialize(const gs_memory_t *mem,
71 			      gs_cie_render *pcrd,
72 			      void *client_data,
73 			      const gs_vector3 * WhitePoint,
74 			      const gs_vector3 * BlackPoint,
75 			      const gs_matrix3 * MatrixPQR,
76 			      const gs_range3 * RangePQR,
77 			      const gs_cie_transform_proc3 * TransformPQR,
78 			      const gs_matrix3 * MatrixLMN,
79 			      const gs_cie_render_proc3 * EncodeLMN,
80 			      const gs_range3 * RangeLMN,
81 			      const gs_matrix3 * MatrixABC,
82 			      const gs_cie_render_proc3 * EncodeABC,
83 			      const gs_range3 * RangeABC,
84 			      const gs_cie_render_table_t * RenderTable);
85 
86 /*
87  * Set or access the client_data pointer in a CRD.
88  * The macro is an L-value.
89  */
90 #define gs_cie_render_client_data(pcrd) ((pcrd)->client_data)
91 
92 #endif /* gscrd_INCLUDED */
93