diff options
author | Didier Raboud <odyx@debian.org> | 2012-10-25 21:07:57 +0200 |
---|---|---|
committer | Didier Raboud <odyx@debian.org> | 2012-10-25 21:07:57 +0200 |
commit | 81ab83f382660bc7980ae954725c4ebf28764b03 (patch) | |
tree | 523268f698a63a8fd44f3491d94d140266b2403b /driver/lut.c | |
parent | a75966e33dbc3e3e096338fd332f515cb313b58a (diff) | |
download | cups-upstream/1.6.0.tar.gz |
Imported Upstream version 1.6.0upstream/1.6.0
Diffstat (limited to 'driver/lut.c')
-rw-r--r-- | driver/lut.c | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/driver/lut.c b/driver/lut.c deleted file mode 100644 index 76684caf..00000000 --- a/driver/lut.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * "$Id: lut.c 7306 2008-02-15 00:52:38Z mike $" - * - * Lookup table routines for CUPS. - * - * Copyright 2007 by Apple Inc. - * Copyright 1993-2005 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "LICENSE.txt" - * which should have been included with this file. If this file is - * file is missing or damaged, see the license at "http://www.cups.org/". - * - * Contents: - * - * cupsLutDelete() - Free the memory used by a lookup table. - * cupsLutLoad() - Load a LUT from a PPD file. - * cupsLutNew() - Make a lookup table from a list of pixel values. - */ - -/* - * Include necessary headers. - */ - -#include "driver.h" -#include <math.h> - - -/* - * 'cupsLutDelete()' - Free the memory used by a lookup table. - */ - -void -cupsLutDelete(cups_lut_t *lut) /* I - Lookup table to free */ -{ - if (lut != NULL) - free(lut); -} - - -/* - * 'cupsLutLoad()' - Load a LUT from a PPD file. - */ - -cups_lut_t * /* O - New lookup table */ -cupsLutLoad(ppd_file_t *ppd, /* I - PPD file */ - const char *colormodel, /* I - Color model */ - const char *media, /* I - Media type */ - const char *resolution, /* I - Resolution */ - const char *ink) /* I - Ink name */ -{ - char name[PPD_MAX_NAME], /* Attribute name */ - spec[PPD_MAX_NAME]; /* Attribute spec */ - ppd_attr_t *attr; /* Attribute */ - int nvals; /* Number of values */ - float vals[4]; /* Values */ - - - /* - * Range check input... - */ - - if (!ppd || !colormodel || !media || !resolution || !ink) - return (NULL); - - /* - * Try to find the LUT values... - */ - - snprintf(name, sizeof(name), "cups%sDither", ink); - - if ((attr = cupsFindAttr(ppd, name, colormodel, media, resolution, spec, - sizeof(spec))) == NULL) - attr = cupsFindAttr(ppd, "cupsAllDither", colormodel, media, - resolution, spec, sizeof(spec)); - - if (!attr) - return (NULL); - - vals[0] = 0.0; - vals[1] = 0.0; - vals[2] = 0.0; - vals[3] = 0.0; - nvals = sscanf(attr->value, "%f%f%f", vals + 1, vals + 2, vals + 3) + 1; - - fprintf(stderr, "DEBUG: Loaded LUT %s from PPD with values [%.3f %.3f %.3f %.3f]\n", - name, vals[0], vals[1], vals[2], vals[3]); - - return (cupsLutNew(nvals, vals)); -} - - -/* - * 'cupsLutNew()' - Make a lookup table from a list of pixel values. - * - * Returns a pointer to the lookup table on success, NULL on failure. - */ - -cups_lut_t * /* O - New lookup table */ -cupsLutNew(int num_values, /* I - Number of values */ - const float *values) /* I - Lookup table values */ -{ - int pixel; /* Pixel value */ - cups_lut_t *lut; /* Lookup table */ - int start, /* Start value */ - end, /* End value */ - maxval; /* Maximum value */ - - - /* - * Range check... - */ - - if (!num_values || !values) - return (NULL); - - /* - * Allocate memory for the lookup table... - */ - - if ((lut = (cups_lut_t *)calloc((CUPS_MAX_LUT + 1), - sizeof(cups_lut_t))) == NULL) - return (NULL); - - /* - * Generate the dither lookup table. The pixel values are roughly - * defined by a piecewise linear curve that has an intensity value - * at each output pixel. This isn't perfectly accurate, but it's - * close enough for jazz. - */ - - maxval = CUPS_MAX_LUT / values[num_values - 1]; - - for (start = 0; start <= CUPS_MAX_LUT; start ++) - lut[start].intensity = start * maxval / CUPS_MAX_LUT; - - for (pixel = 0; pixel < num_values; pixel ++) - { - /* - * Select start and end values for this pixel... - */ - - if (pixel == 0) - start = 0; - else - start = (int)(0.5 * maxval * (values[pixel - 1] + - values[pixel])) + 1; - - if (start < 0) - start = 0; - else if (start > CUPS_MAX_LUT) - start = CUPS_MAX_LUT; - - if (pixel == (num_values - 1)) - end = CUPS_MAX_LUT; - else - end = (int)(0.5 * maxval * (values[pixel] + values[pixel + 1])); - - if (end < 0) - end = 0; - else if (end > CUPS_MAX_LUT) - end = CUPS_MAX_LUT; - - if (start == end) - break; - - /* - * Generate lookup values and errors for each pixel. - */ - - while (start <= end) - { - lut[start].pixel = pixel; - if (start == 0) - lut[0].error = 0; - else - lut[start].error = start - maxval * values[pixel]; - - start ++; - } - } - - /* - * Show the lookup table... - */ - - for (start = 0; start <= CUPS_MAX_LUT; start += CUPS_MAX_LUT / 15) - fprintf(stderr, "DEBUG: %d = %d/%d/%d\n", start, lut[start].intensity, - lut[start].pixel, lut[start].error); - - /* - * Return the lookup table... - */ - - return (lut); -} - - -/* - * End of "$Id: lut.c 7306 2008-02-15 00:52:38Z mike $". - */ |