From 0df325b4bdbd037c92e2528fc16900de84f8d9c1 Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Fri, 15 Jul 2016 18:39:56 +0100 Subject: Add color management hooks for downscaler. --- base/gxdownscale.h | 125 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 100 insertions(+), 25 deletions(-) (limited to 'base/gxdownscale.h') 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. */ -- cgit v1.2.1