From 22f703cab05b7cd368f4de9e03991b7664dc5022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Mon, 1 Sep 2014 13:56:46 +0200 Subject: Initial import of argyll version 1.5.1-8 --- imdi/imdi.h | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 imdi/imdi.h (limited to 'imdi/imdi.h') diff --git a/imdi/imdi.h b/imdi/imdi.h new file mode 100644 index 0000000..1e72b8c --- /dev/null +++ b/imdi/imdi.h @@ -0,0 +1,93 @@ +#ifndef IMDI_H +#define IMDI_H + +/* Integer Multi-Dimensional Interpolation */ + +/* + * Copyright 2000 - 2007 Graeme W. Gill + * All rights reserved. + * + * This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :- + * see the License.txt file for licencing details. + */ + +/* + * This file provides the common definitions for IMDI, and + * in particular, the runtime conversion object. + * Actual runtime details are kept opaque. + */ + +#include "imdi_utl.h" +#include "imdi_arch.h" +#include "imdi_gen.h" + +/* IMDI Object */ +struct _imdi { + void *impl; /* Opaque pointer to implementation information (type imdi_imp *) */ + + /* Do the interpolation. */ + + /* Each pointer corresponds to the colors plane for plane interleaved. */ + /* pointer[0] is used for pixel interleave. */ + + /* Stride is only obeyed if the appropriate option flag was set */ + /* in new_imdi, and is in pixel components, and effectively defaults */ + /* to 1 for plane interleaved, and id and od (adjusted for skip) for pixel interleave, */ + /* so stride is in color components (NOT bytes) */ + /* Output pointers and data must only reference non-skipped output channels. */ + + /* Note that once an imdi is created, multiple can call interp() without */ + /* interfering with each other, allowing parallel execution. */ + void (*interp)(struct _imdi *s, void **outp, int outst, /* Ouput pointers and stride */ + void **inp, int inst, /* Input pointers and stride */ + unsigned int npixels); /* Number of pixels */ + + /* Return some information about the imdi */ + void (*info)(struct _imdi *s, unsigned long *size, int *gres, int *sres); + + /* Get the per output channel check flags (bit is indexed by callback channel) */ + /* Flag gets set if output != checkv */ + unsigned int (*get_check)(struct _imdi *s); + + /* Reset the output check flags (flag is not reset by interp) */ + void (*reset_check)(struct _imdi *s); + + /* Delete this object */ + void (*del)(struct _imdi *s); + +}; typedef struct _imdi imdi; + +/* Create a new imdi. */ +/* Return NULL if request is not supported */ +imdi *new_imdi( + int id, /* Number of input dimensions */ + int od, /* Number of output lookup dimensions */ + /* Number of output channels written = od - no. of oopt skip flags */ + imdi_pixrep in, /* Input pixel representation */ + int in_signed, /* Bit flag per channel, NZ if treat as signed */ + int *inm, /* Input raster channel to callback channel mapping, NULL for none. */ + imdi_iprec iprec, /* Internal processing precision */ + imdi_pixrep out, /* Output pixel representation */ + int out_signed, /* Bit flag per channel, NZ if treat as signed */ + int *outm, /* Output raster channel to callback channel mapping, NULL for none. */ + /* Mapping must include skipped channels. */ + int res, /* Desired table resolution */ + imdi_ooptions oopt, /* Output per channel options (by callback channel) */ + unsigned int *checkv, /* Output channel check values (by callback channel, NULL == 0) */ + imdi_options opt, /* Direction and stride options */ + + /* Callbacks to lookup the imdi table values. */ + /* (Skip output channels are looked up) */ + void (*input_curves) (void *cntx, double *out_vals, double *in_vals), + void (*md_table) (void *cntx, double *out_vals, double *in_vals), + void (*output_curves)(void *cntx, double *out_vals, double *in_vals), + void *cntx /* Context to callbacks */ +); + +#endif /* IMDI_H */ + + + + + + -- cgit v1.2.3