summaryrefslogtreecommitdiff
path: root/base/gxdownscale.h
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2016-07-15 18:39:56 +0100
committerRobin Watts <robin.watts@artifex.com>2016-07-18 19:09:25 +0100
commit0df325b4bdbd037c92e2528fc16900de84f8d9c1 (patch)
treecca12195ac9ac472b64e683eb9328f34d4206b38 /base/gxdownscale.h
parent2e7642ca7abdddc7fba5ab2a6450f1fc7dad62eb (diff)
downloadghostpdl-0df325b4bdbd037c92e2528fc16900de84f8d9c1.tar.gz
Add color management hooks for downscaler.
Diffstat (limited to 'base/gxdownscale.h')
-rw-r--r--base/gxdownscale.h125
1 files changed, 100 insertions, 25 deletions
diff --git a/base/gxdownscale.h b/base/gxdownscale.h
index 846cb4f7a..1dead6171 100644
--- a/base/gxdownscale.h
+++ b/base/gxdownscale.h
@@ -25,6 +25,24 @@
#include "claptrap.h"
+/* Function to apply color management to a rectangle of data.
+ *
+ * data points to an array of pointers, 1 per component.
+ * In the chunky case, only the first pointer is valid.
+ * In the planar case, with n planes, the first n pointers
+ * are valid.
+ * w and h are the width and height of the rectangle of
+ * data to be processed.
+ * raster is the number of bytes to offset from the start
+ * of one line to the next. This value should be ignored
+ * in chunky cases.
+ */
+typedef int (gx_downscale_cm_fn)(void *arg,
+ byte **data,
+ int w,
+ int h,
+ int raster);
+
/* The following structure definitions should really be considered
* private, and are exposed here only because it enables us to define
* gx_downscaler_t's on the stack, thus avoiding mallocs.
@@ -32,6 +50,7 @@
typedef struct gx_downscaler_s gx_downscaler_t;
+/* Private function type for the core downscaler routines */
typedef void (gx_downscale_core)(gx_downscaler_t *ds,
byte *out_buffer,
byte *in_buffer,
@@ -59,6 +78,10 @@ struct gx_downscaler_s {
ClapTrap *claptrap; /* ClapTrap pointer (if trapping) */
int claptrap_y; /* y pointer (if trapping) */
gs_get_bits_params_t *claptrap_params; /* params (if trapping) */
+
+ int early_cm;
+ gx_downscale_cm_fn *apply_cm;
+ void *apply_cm_arg;
};
/* To use the downscaler:
@@ -93,6 +116,46 @@ int gx_downscaler_init(gx_downscaler_t *ds,
int (*adjust_width_proc)(int, int),
int adjust_width);
+int gx_downscaler_init_trapped(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ int factor,
+ int mfs,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width,
+ int trap_w,
+ int trap_h,
+ const int *comp_order);
+
+int gx_downscaler_init_cm(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ int factor,
+ int mfs,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg);
+
+int gx_downscaler_init_trapped_cm(gx_downscaler_t *ds,
+ gx_device *dev,
+ int src_bpc,
+ int dst_bpc,
+ int num_comps,
+ int factor,
+ int mfs,
+ int (*adjust_width_proc)(int, int),
+ int adjust_width,
+ int trap_w,
+ int trap_h,
+ const int *comp_order,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg);
+
int gx_downscaler_init_planar(gx_downscaler_t *ds,
gx_device *dev,
gs_get_bits_params_t *params,
@@ -102,6 +165,43 @@ int gx_downscaler_init_planar(gx_downscaler_t *ds,
int src_bpc,
int dst_bpc);
+int gx_downscaler_init_planar_trapped(gx_downscaler_t *ds,
+ gx_device *dev,
+ gs_get_bits_params_t *params,
+ int num_comps,
+ int factor,
+ int mfs,
+ int src_bpc,
+ int dst_bpc,
+ int trap_w,
+ int trap_h,
+ const int *comp_order);
+
+int gx_downscaler_init_planar_cm(gx_downscaler_t *ds,
+ gx_device *dev,
+ gs_get_bits_params_t *params,
+ int num_comps,
+ int factor,
+ int mfs,
+ int src_bpc,
+ int dst_bpc,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg);
+
+int gx_downscaler_init_planar_trapped_cm(gx_downscaler_t *ds,
+ gx_device *dev,
+ gs_get_bits_params_t *params,
+ int num_comps,
+ int factor,
+ int mfs,
+ int src_bpc,
+ int dst_bpc,
+ int trap_w,
+ int trap_h,
+ const int *comp_order,
+ gx_downscale_cm_fn *apply_cm,
+ void *apply_cm_arg);
+
int gx_downscaler_getbits(gx_downscaler_t *ds,
byte *out_data,
int row);
@@ -135,31 +235,6 @@ int gx_downscaler_process_page(gx_device *dev,
gx_process_page_options_t *options,
int factor);
-int gx_downscaler_init_trapped(gx_downscaler_t *ds,
- gx_device *dev,
- int src_bpc,
- int dst_bpc,
- int num_comps,
- int factor,
- int mfs,
- int (*adjust_width_proc)(int, int),
- int adjust_width,
- int trap_w,
- int trap_h,
- const int *comp_order);
-
-int gx_downscaler_init_planar_trapped(gx_downscaler_t *ds,
- gx_device *dev,
- gs_get_bits_params_t *params,
- int num_comps,
- int factor,
- int mfs,
- int src_bpc,
- int dst_bpc,
- int trap_w,
- int trap_h,
- const int *comp_order);
-
/* The following structure is used to hold the configuration
* parameters for the downscaler.
*/