summaryrefslogtreecommitdiff
path: root/sys/src/cmd/gs/icclib/NOTES
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/gs/icclib/NOTES
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/gs/icclib/NOTES')
-rwxr-xr-xsys/src/cmd/gs/icclib/NOTES310
1 files changed, 310 insertions, 0 deletions
diff --git a/sys/src/cmd/gs/icclib/NOTES b/sys/src/cmd/gs/icclib/NOTES
new file mode 100755
index 000000000..85508d1ea
--- /dev/null
+++ b/sys/src/cmd/gs/icclib/NOTES
@@ -0,0 +1,310 @@
+This directory contains a subset of the icclib 2.0 distribution for
+use with Ghostscript. The full version of icclib is available from
+Graeme Gill's website: http://web.access.net.au/argyll/color.html
+
+In the near future, we expect to treat icclib much the same way we
+do libjpeg and friends. At that point, it will be available from
+the Ghostscript download locations, but won't actually be included
+in the Ghostscript distribution proper, or in the source tree.
+
+Raph Levien
+18 October 2001
+
+Release notes by Jan Stoeckenius follow (lightly edited by Raph Levien
+to reflect the icclib 2.0 integration):
+
+This patch integrates Graeme W. Gill's icclib code into ghostscript,
+to support ICCBased color spaces for both PostScript and PDF.
+
+The PDF support is as documented in version 1.3 of PDF; see the "PDR
+Reference", 2nd. ed., Sec. 4.5.4 (pp. 165 - 180).
+
+Support for PostScript is essentially identical. An ICCBased color space is
+array of the form:
+
+ [ /ICCBased <dictionary> ]
+
+The recognized entries in the dictionary are:
+
+ N integer (Required) The number of color space components,
+ as in the PDF dictionary. This may be 1, 3, or 4.
+
+ Alternate array or (Optional) The alternative color space to use if
+ name the ICC profile is not useable (for any reason).
+ If this entry is not provided, its default value
+ is determined by N, using the rule 1 ==> DeviceGray,
+ 3 ==> DeviceRGB, 4 ==> DeviceCMYK. All this is
+ the same as in the PDF dictionary.
+
+ Range array (Optional) An array of 2 * N numbers, which obey
+ the relationship Range[2 * i] <= Range[2 * i + 1].
+ The i'th component of a color, c[i], is
+ constrained such that:
+
+ Range[2 * i] <= c[i] <= Range[2 * i + 1]
+
+ If this entry is not provided, its default value
+ is an array of length 2 * N with the form
+ [ 0 1 0 1 ... ]. All of this is the same as for
+ the PDF dictionary.
+
+ DataSource file or (Required)The ICC profile data. If this is a
+ string file it must be positionable.
+
+With the exception of running out of memory, most errors discovered while
+reading the profile will result in the alternative space being used.
+
+
+New Files:
+
+ src/gsicc.c
+ Implementation of the methods associated with the ICCBased color space
+ structure (a gs_color_space_s structure of type gs_color_space_index_CIEICC).
+ The gs_cspace_build_CIEICC procedure is also implemented in this file.
+
+ src/gsicc.h
+ Definition of the gs_cie_icc_s structure, which is the essential
+ parameter structure for ICCBased color spaces. The files in this
+ structure are all straightforward, except for the file_id field. This
+ latter field is compared with the read_id and write_id of a stream,
+ to verify that the stream is still valid. This is the same mechanism
+ as is used by the ref structure, and for the same reason.
+
+ src/zicc.c
+ Implementation of the .seticcspace operator, which is used to set the
+ current color space to be an ICCBased color space.
+
+ src/icclib.mak
+ Makefile for building the icclib code (which is in a separate directory).
+ The mechanism used is identical to that used by zlib.mak.
+
+ lib/gs_icc.ps
+ Implementation of the ICCBased color space specific routine in
+ colorspacedict. This routine is much more extensive that those used
+ for the other color spaces, both due to the greater complexity of the
+ color space and because we have chosen to implement much of the error
+ checking in this routine.
+
+ NB: To disable support for ICCBased color spaces, replace "NOCIE" in
+ this file with "true". Though ICCBased will still be a recognized
+ color space family, the alternative space will always be used.
+
+ gs_icclib/icc.c
+ gs_icclib/icc.h
+ gs_icclib/icc9809.h
+ The gs_icclib directory is the default location of the icclib code.
+ The files in this directory are identical to those of the usual
+ distribution of this library.
+
+
+Modified Files:
+
+ src/gdevpdfc.c
+ Added support for ICCBased color spaces to the pdf_color_space procedure.
+ These are effectively translated into themselves, with the DataSource
+ component replaced by a (PDF) stream.
+
+ src/gdevpx.c
+ Added ICCBased to the set of color spaces that
+ pclxl_can_handle_color_space reports as one that cannot be handled.
+
+ src/gscie.c
+ Added support for ICCBased color spaces in the cie_cs_common_abc
+ procedure. Also exported gx_cie_common_complete (previously
+ cie_common_complete) and gx_cie_load_common_cache (previously
+ cie_load_common_cache) for use in gsicc.c.
+
+ src/gscie.h
+ Modified the definitions of st_cie_common and st_cie_common_elements
+ to be public.
+
+ src/gsciemap.c
+ Removed the definition of the macro CIE_CHECK_RENDERING (it is now in
+ gxcie.h). Exported gx_cie_remap_finish (previously cie_remap_finish)
+ for use in gsicc.c.
+
+ src/gscolor.c
+ Added support for ICCBased color spaces in gs_currentrgbcolor.
+
+ src/gscolor1.c
+ Added support for ICCBased color spaces in gs_currentcmykcolor.
+
+ src/gscscie.c
+ Exported st_cie_common, st_cie_common_elements, gx_concrete_space_CIE,
+ gx_install_CIE, gx_set_common_cie_defaults (previously
+ set_common_cie_defaults), and gx_build_cie_space (previously
+ build_cie_space) for use in gsicc.c.
+
+ src/gscspace.h
+ Added the gs_icc_params data structure (for ICCBased color spaces),
+ and the associated type indicator (gs_color_space_index_CIEICC). Also
+ broke what had been the gs_base_color_space structure into two, with
+ gs_small_base_color_space covering all the prior base color spaces,
+ and gs_base_color_space covering these and the ICCBased color space.
+ See the comments in the file for an explanation as to why this was
+ necessary.
+
+ src/gscssub.c
+ Added code to allow ICCBased color spaces to be substituted for the
+ device specific color spaces. This is necessary to support the
+ DefaultDevice* color spaces in PDF.
+
+ src/gxcie.h
+ Moved the definition of the CIE_CHECK_RENDERING macro to this file
+ (it was in gsciemap.c). Added prototypes for st_cie_common,
+ st_cie_common_elemets_t, gx_set_common_cie_defaults,
+ gx_cie_load_common_cache, gx_cie_common_complete, gx_install_CIE,
+ gx__build_cie_space, and gs_concrete_cspace_CIE.
+
+ src/gxshade.c
+ Added support for ICCBased color spaces in shade_init_fill_state.
+
+ src/icie.h
+ Added a prototype for cie_set_finish.
+
+ src/zcie.c
+ Exported cie_set_finish (previously set_cie_finish) for use in zicc.c
+ (the name change maintains consistency with other exported CIE-specific
+ interpreter routines).
+
+ src/lib.mak
+ Added the sicclib.dev feature device, and the associated compilation
+ directives and dependency lists. Also updated the dependency lists
+ for gscie.c and gxshade.c (both now require gsicc.h).
+
+ src/int.mak
+ Added the icc.dev feature device, and the associated compilation
+ directives and dependency lists. This pdf.dev feature device now
+ lists icc.dev as a prerequisite.
+
+ src/devs.mak
+ Updated the dependency list for gdevpdfc.c.
+
+ src/bcwin32.mak
+ src/dvx-gcc.mak
+ src/msvc32.mak
+ src/msvclib.mak
+ src/openvms.mak
+ src/os2.mak
+ src/ugcclib.mak
+ src/unix-gcc.mak
+ src/unixansi.mak
+ src/unixtrad.mak
+ src/watc.mak
+ src/watclib.mak
+ src/watcw32.mak
+ Added a default definition for ICCSRCDIR, the source directory for
+ the icclib code.
+
+ src/gs.mak
+ Added default definitions for ICCGENDIR, ICCOBJDIR, ICCI_ (ICC specific
+ include directories), and ICCF_ (currently empty).
+
+
+ lib/pdf_draw.ps
+ Added ICCBased color space specific procedures for csncompdict and
+ defaultdecodedict. Modified the ICCBased color space procedure in
+ csrdict to map a PDF-form color space to the PostScript form.
+
+ lib/pdf__ops.ps
+ Added ICCBased color space specific procedure to CSdict and Cdict.
+
+Additional notes by Jan Stoeckenius:
+
+1. The color produced when ICCBased color spaces are employed is
+ dependent on the installed color rendering dictionary. For the
+ default X11 device, this dictionary does not provide correction
+ for the relative white point (at least, not as far as we can tell).
+ ICC profiles use the D50 white point. In the absence of white point
+ adjustment, "white" in the associated color space appears to be
+ a moderate yellow on the output device (other colors are similarly
+ "red-shifted").
+
+ This arrangement has the advantage of making it obvious when ICCBased
+ color spaces are supported (useful for testing). On the other hand,
+ the output is probably not what the user intended.
+
+ If you have any devices with known "good" color rendering dictionaries,
+ it would be useful to test ICCBased color space support on those
+ devices as soon as possible.
+
+2. The tests we have run do not exercise the memory handling facilities
+ in ghostscript to any extent. The support for ICCBased color spaces
+ involves two new structures, for which we have provided structure
+ descriptors. We believe these have been correctly constructed, and
+ that the one reference-counted structure is being handled properly,
+ but we have no simple way of testing for this.
+
+3. Changes were required in an unexpectedly large number of files
+ (9 new files, 34 existing files [these figures refer to the
+ integration into 7.00 - RLL]), though in many cases only a few
+ lines needed to be modified.
+
+ The primary reason for this is that the graphic library color space
+ code severely violates the principles of object-oriented programming.
+ Color space objects have a visible type indicator, and this type is
+ directly used in many places. When adding a new color space type, it
+ was not sufficient to create the associated methods. We also had to
+ search the code for all places in which a color space type indicator
+ was explicitly accessed.
+
+ We believe we have found all the places where this occurs, and have
+ modified them appropriately (see the ReleaseNotes file for details).
+ On the other hand, we have not come remotely close to testing all of
+ these changes, nor is there any easy test to see if there are places
+ we missed.
+
+ When Peter was the only person working on the graphic library,
+ this situation was bothersome but probably not critical. In the
+ new environment in which ghostscript is being developed, we believe
+ this situation will lead to serious problems. We recommend that a
+ project be started to make the color space code much more object-
+ oriented, by creating color space methods for all of the required
+ color space properties.
+
+4. The current method of "inline" storage of alternative/base color spaces
+ is becoming hard to maintain. Strictly speaking, ICCBased color spaces
+ cannot be implemented within this mechanism: the color spaces may be
+ (and are) used as alternative color spaces for Separation and DeviceN
+ color spaces, and may in turn access such color spaces as their own
+ alternative color space. We hacked around this problem by disallowing
+ the latter possibility, and introducing yet another layer in the
+ color space hierarchy. The class gs_base_color_space is now split
+ into gs_small_base_color_space (all of the previous base color spaces)
+ and gs_base_color_space (gs_small_base_color_space and ICCBased color
+ spaces). This is an unholy mess, but at least it seems to be functional.
+
+ As the number of layers in the color space hierarchy grows, so does the
+ potential for serious and well-hidden problems. The reason is that
+ pointers to alternative/base color spaces may point into the middle of
+ an object. If such a pointer is accessible via the heap, and is subject
+ to relocation, the location of the structure descriptor will be read
+ incorrectly. By the time this error is apparent, much of the affected
+ memory may be overwritten. Tracing such problems is typically quite
+ time-consuming.
+
+ The original guard against this problem was to perform all color space
+ assignments by value. This worked when Peter was the only person regularly
+ changing the code, and may continue to work under the current arrangement.
+ We believe, however, that this situation will cause trouble in the
+ future.
+
+ We recommend that the current color space mechanism be discarded. A new
+ mechanism should allow alternative/base color spaces to be included by
+ reference rather than by value. Such a mechanism should also move the
+ generic color space parameters (number of components, additive/subtractive
+ indicator, etc.) into the base structure, even if these parameters are
+ fixed for certain color spaces.
+
+5. The PDF device code currently attempts to translate PostScript's
+ CIEBased color spaces into the more restrictive set of CIE color spaces
+ in PDF. Many color spaces cannot be translated directly, and the code
+ will fail if such a color space is encountered.
+
+ We have generalized this code to handle ICCBased color spaces, which
+ effectively are translated to themselves. A much more complete solution
+ could be provided by mapping PostScript's CIEBased color spaces into
+ ICCBased color spaces in PDF. Essentially all CIEBased color spaces
+ could be handled in this manner (via sample and generation of a lookup
+ table).
+