summaryrefslogtreecommitdiff
path: root/gs/base/gxband.h
diff options
context:
space:
mode:
Diffstat (limited to 'gs/base/gxband.h')
-rw-r--r--gs/base/gxband.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/gs/base/gxband.h b/gs/base/gxband.h
new file mode 100644
index 000000000..bd757d830
--- /dev/null
+++ b/gs/base/gxband.h
@@ -0,0 +1,89 @@
+/* Copyright (C) 2001-2006 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied, modified
+ or distributed except as expressly authorized under the terms of that
+ license. Refer to licensing information at http://www.artifex.com/
+ or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
+ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
+*/
+
+/* $Id$ */
+/* Band-processing parameters for Ghostscript */
+
+#ifndef gxband_INCLUDED
+# define gxband_INCLUDED
+
+#include "gxclio.h"
+
+/*
+ * Define the parameters controlling banding.
+ */
+typedef struct gx_band_params_s {
+ bool page_uses_transparency; /* PDF 1.4 transparency is used on the page */
+ int BandWidth; /* (optional) band width in pixels */
+ int BandHeight; /* (optional) */
+ long BandBufferSpace; /* (optional) */
+} gx_band_params_t;
+
+#define BAND_PARAMS_INITIAL_VALUES 0, 0, 0
+
+/*
+ * Define information about the colors used on a page.
+ */
+typedef struct gx_colors_used_s {
+ gx_color_index or; /* the "or" of all the used colors */
+ bool slow_rop; /* true if any RasterOps that can't be */
+ /* executed plane-by-plane on CMYK devices */
+} gx_colors_used_t;
+
+/*
+ * We want to store color usage information for each band in the page_info
+ * structure, but we also want this structure to be of a fixed (and
+ * reasonable) size. We do this by allocating a fixed number of colors_used
+ * structures in the page_info structure, and if there are more bands than
+ * we have allocated, we simply reduce the precision of the information by
+ * letting each colors_used structure cover multiple bands.
+ *
+ * 30 entries would be large enough to cover A4 paper (11.3") at 600 dpi
+ * with 256-scan-line bands. We pick 50 somewhat arbitrarily.
+ */
+#define PAGE_INFO_NUM_COLORS_USED 50
+
+/*
+ * Define the information for a saved page.
+ */
+typedef struct gx_band_page_info_s {
+ char cfname[gp_file_name_sizeof]; /* command file name */
+ clist_file_ptr cfile; /* command file, normally 0 */
+ char bfname[gp_file_name_sizeof]; /* block file name */
+ clist_file_ptr bfile; /* block file, normally 0 */
+ const clist_io_procs_t *io_procs;
+ uint tile_cache_size; /* size of tile cache */
+ int64_t bfile_end_pos; /* ftell at end of bfile */
+ gx_band_params_t band_params; /* parameters used when writing band list */
+ /* (actual values, no 0s) */
+ int scan_lines_per_colors_used; /* number of scan lines per colors_used */
+ /* entry (a multiple of the band height) */
+ gx_colors_used_t band_colors_used[PAGE_INFO_NUM_COLORS_USED]; /* colors used on the page */
+} gx_band_page_info_t;
+#define PAGE_INFO_NULL_VALUES\
+ { 0 }, 0, { 0 }, NULL, 0, 0, 0, { BAND_PARAMS_INITIAL_VALUES },\
+ 0x3fffffff, { { 0 } }
+
+/*
+ * By convention, the structure member containing the above is called
+ * page_info. Define shorthand accessors for its members.
+ */
+#define page_cfile page_info.cfile
+#define page_cfname page_info.cfname
+#define page_bfile page_info.bfile
+#define page_bfname page_info.bfname
+#define page_tile_cache_size page_info.tile_cache_size
+#define page_bfile_end_pos page_info.bfile_end_pos
+#define page_band_height page_info.band_params.BandHeight
+
+#endif /* ndef gxband_INCLUDED */