diff options
Diffstat (limited to 'src/3rdparty/jasper/src/libjasper/pnm')
-rw-r--r-- | src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.c | 146 | ||||
-rw-r--r-- | src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.h | 156 | ||||
-rw-r--r-- | src/3rdparty/jasper/src/libjasper/pnm/pnm_dec.c | 564 | ||||
-rw-r--r-- | src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.c | 452 | ||||
-rw-r--r-- | src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.h | 70 |
5 files changed, 1388 insertions, 0 deletions
diff --git a/src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.c b/src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.c new file mode 100644 index 0000000..fd5760f --- /dev/null +++ b/src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.c @@ -0,0 +1,146 @@ +/* + * Copyright (c) 1999-2000 Image Power, Inc. and the University of + * British Columbia. + * Copyright (c) 2001-2002 Michael David Adams. + * All rights reserved. + */ + +/* __START_OF_JASPER_LICENSE__ + * + * JasPer License Version 2.0 + * + * Copyright (c) 2001-2006 Michael David Adams + * Copyright (c) 1999-2000 Image Power, Inc. + * Copyright (c) 1999-2000 The University of British Columbia + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person (the + * "User") obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the + * following conditions: + * + * 1. The above copyright notices and this permission notice (which + * includes the disclaimer below) shall be included in all copies or + * substantial portions of the Software. + * + * 2. The name of a copyright holder shall not be used to endorse or + * promote products derived from the Software without specific prior + * written permission. + * + * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS + * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER + * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS + * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE + * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE + * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. + * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS + * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL + * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS + * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE + * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE + * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL + * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, + * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL + * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH + * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, + * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH + * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY + * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. + * + * __END_OF_JASPER_LICENSE__ + */ + +/* + * Portable Pixmap/Graymap Format Support + * + * $Id$ + */ + +/******************************************************************************\ +* Includes. +\******************************************************************************/ + +#include <ctype.h> +#include <math.h> +#include <stdlib.h> +#include <assert.h> + +#include "jasper/jas_math.h" + +#include "pnm_cod.h" + +/******************************************************************************\ +* Miscellaneous utilities. +\******************************************************************************/ + +/* Determine the PNM type (i.e., PGM or PPM) from the magic number. */ +int pnm_type(uint_fast16_t magic) +{ + int type; + switch (magic) { + case PNM_MAGIC_TXTPPM: + case PNM_MAGIC_BINPPM: + type = PNM_TYPE_PPM; + break; + case PNM_MAGIC_TXTPGM: + case PNM_MAGIC_BINPGM: + type = PNM_TYPE_PGM; + break; + case PNM_MAGIC_TXTPBM: + case PNM_MAGIC_BINPBM: + type = PNM_TYPE_PBM; + break; + default: + /* This should not happen. */ + abort(); + break; + } + return type; +} + +/* Determine the PNM format (i.e., text or binary) from the magic number. */ +int pnm_fmt(uint_fast16_t magic) +{ + int fmt; + switch (magic) { + case PNM_MAGIC_TXTPBM: + case PNM_MAGIC_TXTPGM: + case PNM_MAGIC_TXTPPM: + fmt = PNM_FMT_TXT; + break; + case PNM_MAGIC_BINPBM: + case PNM_MAGIC_BINPGM: + case PNM_MAGIC_BINPPM: + fmt = PNM_FMT_BIN; + break; + default: + /* This should not happen. */ + abort(); + break; + } + return fmt; +} + +/* Determine the depth (i.e., precision) from the maximum value. */ +int pnm_maxvaltodepth(uint_fast32_t maxval) +{ + int n; + + n = 0; + while (maxval > 0) { + maxval >>= 1; + ++n; + } + return n; +} diff --git a/src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.h b/src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.h new file mode 100644 index 0000000..8320304 --- /dev/null +++ b/src/3rdparty/jasper/src/libjasper/pnm/pnm_cod.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 1999-2000 Image Power, Inc. and the University of + * British Columbia. + * Copyright (c) 2001-2002 Michael David Adams. + * All rights reserved. + */ + +/* __START_OF_JASPER_LICENSE__ + * + * JasPer License Version 2.0 + * + * Copyright (c) 2001-2006 Michael David Adams + * Copyright (c) 1999-2000 Image Power, Inc. + * Copyright (c) 1999-2000 The University of British Columbia + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person (the + * "User") obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the + * following conditions: + * + * 1. The above copyright notices and this permission notice (which + * includes the disclaimer below) shall be included in all copies or + * substantial portions of the Software. + * + * 2. The name of a copyright holder shall not be used to endorse or + * promote products derived from the Software without specific prior + * written permission. + * + * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS + * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER + * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS + * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE + * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE + * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. + * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS + * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL + * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS + * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE + * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE + * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL + * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, + * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL + * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH + * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, + * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH + * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY + * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. + * + * __END_OF_JASPER_LICENSE__ + */ + +/* + * Portable Pixmap/Graymap Format Support + * + * $Id$ + */ + +#ifndef PNM_COD_H +#define PNM_COD_H + +/******************************************************************************\ +* Includes. +\******************************************************************************/ + +#include "jasper/jas_types.h" + +/******************************************************************************\ +* Constants. +\******************************************************************************/ + +/* Magic numbers. */ +#define PNM_MAGIC_TXTPBM 0x5031 /* Text Portable BitMap (P1) */ +#define PNM_MAGIC_TXTPGM 0x5032 /* Text Portable GrayMap (P2) */ +#define PNM_MAGIC_TXTPPM 0x5033 /* Text Portable PixMap (P3) */ +#define PNM_MAGIC_BINPBM 0x5034 /* Binary Portable BitMap (P4) */ +#define PNM_MAGIC_BINPGM 0x5035 /* Binary Portable GrayMap (P5) */ +#define PNM_MAGIC_BINPPM 0x5036 /* Binary Portable PixMap (P6) */ +#define PNM_MAGIC_PAM 0x5037 /* PAM (P7) */ + +/* Type of image data. */ +#define PNM_TYPE_PPM 0 /* PixMap */ +#define PNM_TYPE_PGM 1 /* GrayMap */ +#define PNM_TYPE_PBM 2 /* BitMap */ + +/* Format of image data. */ +#define PNM_FMT_TXT 0 /* Text */ +#define PNM_FMT_BIN 1 /* Binary */ + +#define PNM_MAXLINELEN 79 + +#define PNM_TUPLETYPE_UNKNOWN 0 +#define PNM_TUPLETYPE_MONO 1 +#define PNM_TUPLETYPE_GRAY 2 +#define PNM_TUPLETYPE_GRAYA 3 +#define PNM_TUPLETYPE_RGB 4 +#define PNM_TUPLETYPE_RGBA 5 + +/******************************************************************************\ +* Types. +\******************************************************************************/ + +/* File header. */ + +typedef struct { + + int magic; + /* The magic number. */ + + int width; + /* The image width. */ + + int height; + /* The image height. */ + + int numcmpts; + + int maxval; + /* The maximum allowable sample value. */ + +#if 0 + int tupletype; +#endif + + bool sgnd; + /* The sample data is signed. */ + +} pnm_hdr_t; + +/******************************************************************************\ +* Functions. +\******************************************************************************/ + +int pnm_type(uint_fast16_t magic); +/* Determine type (i.e., PGM or PPM) from magic number. */ + +int pnm_fmt(uint_fast16_t magic); +/* Determine format (i.e., text or binary) from magic number. */ + +int pnm_maxvaltodepth(uint_fast32_t maxval); +/* Determine depth (i.e., precision) from maximum value. */ + +#define PNM_ONES(n) \ + (((n) < 32) ? ((1UL << (n)) - 1) : 0xffffffffUL) +#endif diff --git a/src/3rdparty/jasper/src/libjasper/pnm/pnm_dec.c b/src/3rdparty/jasper/src/libjasper/pnm/pnm_dec.c new file mode 100644 index 0000000..14dd035 --- /dev/null +++ b/src/3rdparty/jasper/src/libjasper/pnm/pnm_dec.c @@ -0,0 +1,564 @@ +/* + * Copyright (c) 1999-2000 Image Power, Inc. and the University of + * British Columbia. + * Copyright (c) 2001-2003 Michael David Adams. + * All rights reserved. + */ + +/* __START_OF_JASPER_LICENSE__ + * + * JasPer License Version 2.0 + * + * Copyright (c) 2001-2006 Michael David Adams + * Copyright (c) 1999-2000 Image Power, Inc. + * Copyright (c) 1999-2000 The University of British Columbia + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person (the + * "User") obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the + * following conditions: + * + * 1. The above copyright notices and this permission notice (which + * includes the disclaimer below) shall be included in all copies or + * substantial portions of the Software. + * + * 2. The name of a copyright holder shall not be used to endorse or + * promote products derived from the Software without specific prior + * written permission. + * + * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS + * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER + * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS + * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE + * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE + * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. + * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS + * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL + * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS + * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE + * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE + * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL + * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, + * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL + * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH + * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, + * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH + * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY + * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. + * + * __END_OF_JASPER_LICENSE__ + */ + +/* + * Portable Pixmap/Graymap Format Support + * + * $Id$ + */ + +/******************************************************************************\ +* Includes. +\******************************************************************************/ + +#include <ctype.h> +#include <math.h> +#include <stdlib.h> +#include <assert.h> + +#include "jasper/jas_types.h" +#include "jasper/jas_stream.h" +#include "jasper/jas_image.h" + +#include "pnm_cod.h" + +/******************************************************************************\ +* Local function prototypes. +\******************************************************************************/ + +static int pnm_gethdr(jas_stream_t *in, pnm_hdr_t *hdr); +static int pnm_getdata(jas_stream_t *in, pnm_hdr_t *hdr, jas_image_t *image); + +static int pnm_getsintstr(jas_stream_t *in, int_fast32_t *val); +static int pnm_getuintstr(jas_stream_t *in, uint_fast32_t *val); +static int pnm_getbitstr(jas_stream_t *in, int *val); +static int pnm_getc(jas_stream_t *in); + +static int pnm_getsint(jas_stream_t *in, int wordsize, int_fast32_t *val); +static int pnm_getuint(jas_stream_t *in, int wordsize, uint_fast32_t *val); +static int pnm_getint16(jas_stream_t *in, int *val); +#define pnm_getuint32(in, val) pnm_getuint(in, 32, val) + +/******************************************************************************\ +* Local data. +\******************************************************************************/ + +static int pnm_allowtrunc = 1; + +/******************************************************************************\ +* Load function. +\******************************************************************************/ + +jas_image_t *pnm_decode(jas_stream_t *in, char *opts) +{ + pnm_hdr_t hdr; + jas_image_t *image; + jas_image_cmptparm_t cmptparms[3]; + jas_image_cmptparm_t *cmptparm; + int i; + + if (opts) { + jas_eprintf("warning: ignoring options\n"); + } + + /* Read the file header. */ + if (pnm_gethdr(in, &hdr)) { + return 0; + } + + /* Create an image of the correct size. */ + for (i = 0, cmptparm = cmptparms; i < hdr.numcmpts; ++i, ++cmptparm) { + cmptparm->tlx = 0; + cmptparm->tly = 0; + cmptparm->hstep = 1; + cmptparm->vstep = 1; + cmptparm->width = hdr.width; + cmptparm->height = hdr.height; + cmptparm->prec = pnm_maxvaltodepth(hdr.maxval); + cmptparm->sgnd = hdr.sgnd; + } + if (!(image = jas_image_create(hdr.numcmpts, cmptparms, JAS_CLRSPC_UNKNOWN))) { + return 0; + } + + if (hdr.numcmpts == 3) { + jas_image_setclrspc(image, JAS_CLRSPC_SRGB); + jas_image_setcmpttype(image, 0, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_R)); + jas_image_setcmpttype(image, 1, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_G)); + jas_image_setcmpttype(image, 2, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_B)); + } else { + jas_image_setclrspc(image, JAS_CLRSPC_SGRAY); + jas_image_setcmpttype(image, 0, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y)); + } + + /* Read image data from stream into image. */ + if (pnm_getdata(in, &hdr, image)) { + jas_image_destroy(image); + return 0; + } + + return image; +} + +/******************************************************************************\ +* Validation function. +\******************************************************************************/ + +int pnm_validate(jas_stream_t *in) +{ + uchar buf[2]; + int i; + int n; + + assert(JAS_STREAM_MAXPUTBACK >= 2); + + /* Read the first two characters that constitute the signature. */ + if ((n = jas_stream_read(in, buf, 2)) < 0) { + return -1; + } + /* Put these characters back to the stream. */ + for (i = n - 1; i >= 0; --i) { + if (jas_stream_ungetc(in, buf[i]) == EOF) { + return -1; + } + } + /* Did we read enough data? */ + if (n < 2) { + return -1; + } + /* Is this the correct signature for a PNM file? */ + if (buf[0] == 'P' && isdigit(buf[1])) { + return 0; + } + return -1; +} + +/******************************************************************************\ +* Functions for reading the header. +\******************************************************************************/ + +static int pnm_gethdr(jas_stream_t *in, pnm_hdr_t *hdr) +{ + int_fast32_t maxval; + int_fast32_t width; + int_fast32_t height; + if (pnm_getint16(in, &hdr->magic) || pnm_getsintstr(in, &width) || + pnm_getsintstr(in, &height)) { + return -1; + } + hdr->width = width; + hdr->height = height; + if (pnm_type(hdr->magic) != PNM_TYPE_PBM) { + if (pnm_getsintstr(in, &maxval)) { + return -1; + } + } else { + maxval = 1; + } + if (maxval < 0) { + hdr->maxval = -maxval; + hdr->sgnd = true; + } else { + hdr->maxval = maxval; + hdr->sgnd = false; + } + + switch (pnm_type(hdr->magic)) { + case PNM_TYPE_PBM: + case PNM_TYPE_PGM: + hdr->numcmpts = 1; + break; + case PNM_TYPE_PPM: + hdr->numcmpts = 3; + break; + default: + abort(); + break; + } + + return 0; +} + +/******************************************************************************\ +* Functions for processing the sample data. +\******************************************************************************/ + +static int pnm_getdata(jas_stream_t *in, pnm_hdr_t *hdr, jas_image_t *image) +{ + int ret; +#if 0 + int numcmpts; +#endif + int cmptno; + int fmt; + jas_matrix_t *data[3]; + int x; + int y; + int_fast64_t v; + int depth; + int type; + int c; + int n; + + ret = -1; + +#if 0 + numcmpts = jas_image_numcmpts(image); +#endif + fmt = pnm_fmt(hdr->magic); + type = pnm_type(hdr->magic); + depth = pnm_maxvaltodepth(hdr->maxval); + + data[0] = 0; + data[1] = 0; + data[2] = 0; + for (cmptno = 0; cmptno < hdr->numcmpts; ++cmptno) { + if (!(data[cmptno] = jas_matrix_create(1, hdr->width))) { + goto done; + } + } + + for (y = 0; y < hdr->height; ++y) { + if (type == PNM_TYPE_PBM) { + if (fmt == PNM_FMT_BIN) { + for (x = 0; x < hdr->width;) { + if ((c = jas_stream_getc(in)) == EOF) { + goto done; + } + n = 8; + while (n > 0 && x < hdr->width) { + jas_matrix_set(data[0], 0, x, 1 - ((c >> 7) & 1)); + c <<= 1; + --n; + ++x; + } + } + } else { + for (x = 0; x < hdr->width; ++x) { + int uv; + if (pnm_getbitstr(in, &uv)) { + goto done; + } + jas_matrix_set(data[0], 0, x, 1 - uv); + } + } + } else { + for (x = 0; x < hdr->width; ++x) { + for (cmptno = 0; cmptno < hdr->numcmpts; ++cmptno) { + if (fmt == PNM_FMT_BIN) { + /* The sample data is in binary format. */ + if (hdr->sgnd) { + /* The sample data is signed. */ + int_fast32_t sv; + if (pnm_getsint(in, depth, &sv)) { + if (!pnm_allowtrunc) { + goto done; + } + sv = 0; + } + v = sv; + } else { + /* The sample data is unsigned. */ + uint_fast32_t uv; + if (pnm_getuint(in, depth, &uv)) { + if (!pnm_allowtrunc) { + goto done; + } + uv = 0; + } + v = uv; + } + } else { + /* The sample data is in text format. */ + if (hdr->sgnd) { + /* The sample data is signed. */ + int_fast32_t sv; + if (pnm_getsintstr(in, &sv)) { + if (!pnm_allowtrunc) { + goto done; + } + sv = 0; + } + v = sv; + } else { + /* The sample data is unsigned. */ + uint_fast32_t uv; + if (pnm_getuintstr(in, &uv)) { + if (!pnm_allowtrunc) { + goto done; + } + uv = 0; + } + v = uv; + } + } + jas_matrix_set(data[cmptno], 0, x, v); + } + } + } + for (cmptno = 0; cmptno < hdr->numcmpts; ++cmptno) { + if (jas_image_writecmpt(image, cmptno, 0, y, hdr->width, 1, + data[cmptno])) { + goto done; + } + } + } + + ret = 0; + +done: + + for (cmptno = 0; cmptno < hdr->numcmpts; ++cmptno) { + if (data[cmptno]) { + jas_matrix_destroy(data[cmptno]); + } + } + + return ret; +} + +/******************************************************************************\ +* Miscellaneous functions. +\******************************************************************************/ + +static int pnm_getsint(jas_stream_t *in, int wordsize, int_fast32_t *val) +{ + uint_fast32_t tmpval; + + if (pnm_getuint(in, wordsize, &tmpval)) { + return -1; + } + if (val) { + assert((tmpval & (1 << (wordsize - 1))) == 0); + *val = tmpval; + } + + return 0; +} + +static int pnm_getuint(jas_stream_t *in, int wordsize, uint_fast32_t *val) +{ + uint_fast32_t tmpval; + int c; + int n; + + tmpval = 0; + n = (wordsize + 7) / 8; + while (--n >= 0) { + if ((c = jas_stream_getc(in)) == EOF) { + return -1; + } + tmpval = (tmpval << 8) | c; + } + tmpval &= (((uint_fast64_t) 1) << wordsize) - 1; + if (val) { + *val = tmpval; + } + + return 0; +} + +static int pnm_getbitstr(jas_stream_t *in, int *val) +{ + int c; + int_fast32_t v; + for (;;) { + if ((c = pnm_getc(in)) == EOF) { + return -1; + } + if (c == '#') { + for (;;) { + if ((c = pnm_getc(in)) == EOF) { + return -1; + } + if (c == '\n') { + break; + } + } + } else if (c == '0' || c == '1') { + v = c - '0'; + break; + } + } + if (val) { + *val = v; + } + return 0; +} + +static int pnm_getuintstr(jas_stream_t *in, uint_fast32_t *val) +{ + uint_fast32_t v; + int c; + + /* Discard any leading whitespace. */ + do { + if ((c = pnm_getc(in)) == EOF) { + return -1; + } + } while (isspace(c)); + + /* Parse the number. */ + v = 0; + while (isdigit(c)) { + v = 10 * v + c - '0'; + if ((c = pnm_getc(in)) < 0) { + return -1; + } + } + + /* The number must be followed by whitespace. */ + if (!isspace(c)) { + return -1; + } + + if (val) { + *val = v; + } + return 0; +} + +static int pnm_getsintstr(jas_stream_t *in, int_fast32_t *val) +{ + int c; + int s; + int_fast32_t v; + + /* Discard any leading whitespace. */ + do { + if ((c = pnm_getc(in)) == EOF) { + return -1; + } + } while (isspace(c)); + + /* Get the number, allowing for a negative sign. */ + s = 1; + if (c == '-') { + s = -1; + if ((c = pnm_getc(in)) == EOF) { + return -1; + } + } else if (c == '+') { + if ((c = pnm_getc(in)) == EOF) { + return -1; + } + } + v = 0; + while (isdigit(c)) { + v = 10 * v + c - '0'; + if ((c = pnm_getc(in)) < 0) { + return -1; + } + } + + /* The number must be followed by whitespace. */ + if (!isspace(c)) { + return -1; + } + + if (val) { + *val = (s >= 0) ? v : (-v); + } + + return 0; +} + +static int pnm_getc(jas_stream_t *in) +{ + int c; + for (;;) { + if ((c = jas_stream_getc(in)) == EOF) { + return -1; + } + if (c != '#') { + return c; + } + do { + if ((c = jas_stream_getc(in)) == EOF) { + return -1; + } + } while (c != '\n' && c != '\r'); + } +} + +static int pnm_getint16(jas_stream_t *in, int *val) +{ + int v; + int c; + + if ((c = jas_stream_getc(in)) == EOF) { + return -1; + } + v = c & 0xff; + if ((c = jas_stream_getc(in)) == EOF) { + return -1; + } + v = (v << 8) | (c & 0xff); + *val = v; + + return 0; +} diff --git a/src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.c b/src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.c new file mode 100644 index 0000000..9b19c64 --- /dev/null +++ b/src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.c @@ -0,0 +1,452 @@ +/* + * Copyright (c) 1999-2000 Image Power, Inc. and the University of + * British Columbia. + * Copyright (c) 2001-2003 Michael David Adams. + * All rights reserved. + */ + +/* __START_OF_JASPER_LICENSE__ + * + * JasPer License Version 2.0 + * + * Copyright (c) 2001-2006 Michael David Adams + * Copyright (c) 1999-2000 Image Power, Inc. + * Copyright (c) 1999-2000 The University of British Columbia + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person (the + * "User") obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the + * following conditions: + * + * 1. The above copyright notices and this permission notice (which + * includes the disclaimer below) shall be included in all copies or + * substantial portions of the Software. + * + * 2. The name of a copyright holder shall not be used to endorse or + * promote products derived from the Software without specific prior + * written permission. + * + * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS + * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER + * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS + * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE + * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE + * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. + * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS + * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL + * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS + * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE + * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE + * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL + * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, + * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL + * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH + * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, + * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH + * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY + * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. + * + * __END_OF_JASPER_LICENSE__ + */ + +/* + * Portable Pixmap/Graymap Format Support + * + * $Id$ + */ + +/******************************************************************************\ +* Includes. +\******************************************************************************/ + +#include <ctype.h> +#include <math.h> +#include <stdlib.h> +#include <assert.h> + +#include "jasper/jas_types.h" +#include "jasper/jas_tvp.h" +#include "jasper/jas_image.h" +#include "jasper/jas_stream.h" +#include "jasper/jas_debug.h" + +#include "pnm_cod.h" +#include "pnm_enc.h" + +/******************************************************************************\ +* Local types. +\******************************************************************************/ + +typedef struct { + bool bin; +} pnm_encopts_t; + +typedef enum { + OPT_TEXT +} pnm_optid_t; + +jas_taginfo_t pnm_opttab[] = { + {OPT_TEXT, "text"}, + {-1, 0} +}; + +/******************************************************************************\ +* Local function prototypes. +\******************************************************************************/ + +static int pnm_parseencopts(char *optstr, pnm_encopts_t *encopts); +static int pnm_puthdr(jas_stream_t *out, pnm_hdr_t *hdr); +static int pnm_putdata(jas_stream_t *out, pnm_hdr_t *hdr, jas_image_t *image, int numcmpts, int *cmpts); + +static int pnm_putsint(jas_stream_t *out, int wordsize, int_fast32_t *val); +static int pnm_putuint(jas_stream_t *out, int wordsize, uint_fast32_t *val); +static int pnm_putuint16(jas_stream_t *out, uint_fast16_t val); + +/******************************************************************************\ +* Save function. +\******************************************************************************/ + +int pnm_encode(jas_image_t *image, jas_stream_t *out, char *optstr) +{ + int width; + int height; + int cmptno; + pnm_hdr_t hdr; + pnm_encopts_t encopts; + int prec; + int sgnd; + pnm_enc_t encbuf; + pnm_enc_t *enc = &encbuf; + + /* Parse the encoder option string. */ + if (pnm_parseencopts(optstr, &encopts)) { + jas_eprintf("invalid PNM encoder options specified\n"); + return -1; + } + + switch (jas_clrspc_fam(jas_image_clrspc(image))) { + case JAS_CLRSPC_FAM_RGB: + if (jas_image_clrspc(image) != JAS_CLRSPC_SRGB) + jas_eprintf("warning: inaccurate color\n"); + enc->numcmpts = 3; + if ((enc->cmpts[0] = jas_image_getcmptbytype(image, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_R))) < 0 || + (enc->cmpts[1] = jas_image_getcmptbytype(image, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_G))) < 0 || + (enc->cmpts[2] = jas_image_getcmptbytype(image, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_RGB_B))) < 0) { + jas_eprintf("error: missing color component\n"); + return -1; + } + break; + case JAS_CLRSPC_FAM_GRAY: + if (jas_image_clrspc(image) != JAS_CLRSPC_SGRAY) + jas_eprintf("warning: inaccurate color\n"); + enc->numcmpts = 1; + if ((enc->cmpts[0] = jas_image_getcmptbytype(image, + JAS_IMAGE_CT_COLOR(JAS_CLRSPC_CHANIND_GRAY_Y))) < 0) { + jas_eprintf("error: missing color component\n"); + return -1; + } + break; + default: + jas_eprintf("error: unsupported color space\n"); + return -1; + break; + } + + + width = jas_image_cmptwidth(image, enc->cmpts[0]); + height = jas_image_cmptheight(image, enc->cmpts[0]); + prec = jas_image_cmptprec(image, enc->cmpts[0]); + sgnd = jas_image_cmptsgnd(image, enc->cmpts[0]); + + /* The PNM format is quite limited in the set of image geometries + that it can handle. Here, we check to ensure that the image to + be saved can actually be represented reasonably accurately using the + PNM format. */ + /* All of the components must have the same width and height. */ + /* All of the components must have unsigned samples with the same + precision.*/ + /* All of the components must have their top-left corner located at + the origin. */ + for (cmptno = 0; cmptno < enc->numcmpts; ++cmptno) { + if (jas_image_cmptwidth(image, enc->cmpts[cmptno]) != width || + jas_image_cmptheight(image, enc->cmpts[cmptno]) != height || + jas_image_cmptprec(image, enc->cmpts[cmptno]) != prec || + jas_image_cmptsgnd(image, enc->cmpts[cmptno]) != sgnd || + jas_image_cmpthstep(image, enc->cmpts[cmptno]) != jas_image_cmpthstep(image, 0) || + jas_image_cmptvstep(image, enc->cmpts[cmptno]) != jas_image_cmptvstep(image, 0) || + jas_image_cmpttlx(image, enc->cmpts[cmptno]) != jas_image_cmpttlx(image, 0) || + jas_image_cmpttly(image, enc->cmpts[cmptno]) != jas_image_cmpttly(image, 0)) { + jas_eprintf("The PNM format cannot be used to represent an image with this geometry.\n"); + return -1; + } + } + + if (sgnd) { + jas_eprintf("warning: support for signed sample data requires use of nonstandard extension to PNM format\n"); + jas_eprintf("You may not be able to read or correctly display the resulting PNM data with other software.\n"); + } + + /* Initialize the header. */ + if (enc->numcmpts == 1) { + hdr.magic = encopts.bin ? PNM_MAGIC_BINPGM : PNM_MAGIC_TXTPGM; + } else if (enc->numcmpts == 3) { + hdr.magic = encopts.bin ? PNM_MAGIC_BINPPM : PNM_MAGIC_TXTPPM; + } else { + return -1; + } + hdr.width = width; + hdr.height = height; + hdr.maxval = (1 << prec) - 1; + hdr.sgnd = sgnd; + + /* Write the header. */ + if (pnm_puthdr(out, &hdr)) { + return -1; + } + + /* Write the image data. */ + if (pnm_putdata(out, &hdr, image, enc->numcmpts, enc->cmpts)) { + return -1; + } + + /* Flush the output stream. */ + if (jas_stream_flush(out)) { + return -1; + } + + return 0; +} + +/******************************************************************************\ +* Code for parsing options. +\******************************************************************************/ + +/* Parse the encoder options string. */ +static int pnm_parseencopts(char *optstr, pnm_encopts_t *encopts) +{ + jas_tvparser_t *tvp; + int ret; + + tvp = 0; + + /* Initialize default values for encoder options. */ + encopts->bin = true; + + /* Create the tag-value parser. */ + if (!(tvp = jas_tvparser_create(optstr ? optstr : ""))) { + goto error; + } + + /* Get tag-value pairs, and process as necessary. */ + while (!(ret = jas_tvparser_next(tvp))) { + switch (jas_taginfo_nonull(jas_taginfos_lookup(pnm_opttab, + jas_tvparser_gettag(tvp)))->id) { + case OPT_TEXT: + encopts->bin = false; + break; + default: + jas_eprintf("warning: ignoring invalid option %s\n", + jas_tvparser_gettag(tvp)); + break; + } + } + if (ret < 0) { + goto error; + } + + /* Destroy the tag-value parser. */ + jas_tvparser_destroy(tvp); + + return 0; + +error: + if (tvp) { + jas_tvparser_destroy(tvp); + } + return -1; +} + +/******************************************************************************\ +* Function for writing header. +\******************************************************************************/ + +/* Write the header. */ +static int pnm_puthdr(jas_stream_t *out, pnm_hdr_t *hdr) +{ + int_fast32_t maxval; + + if (pnm_putuint16(out, hdr->magic)) { + return -1; + } + if (hdr->sgnd) { + maxval = -hdr->maxval; + } else { + maxval = hdr->maxval; + } + jas_stream_printf(out, "\n%lu %lu\n%ld\n", (unsigned long) hdr->width, + (unsigned long) hdr->height, (long) maxval); + if (jas_stream_error(out)) { + return -1; + } + return 0; +} + +/******************************************************************************\ +* Functions for processing the sample data. +\******************************************************************************/ + +/* Write the image sample data. */ +static int pnm_putdata(jas_stream_t *out, pnm_hdr_t *hdr, jas_image_t *image, int numcmpts, int *cmpts) +{ + int ret; + int cmptno; + int x; + int y; + jas_matrix_t *data[3]; + int fmt; + jas_seqent_t *d[3]; + jas_seqent_t v; + int minval; + int linelen; + int n; + char buf[256]; + int depth; + + ret = -1; + fmt = pnm_fmt(hdr->magic); + minval = -((int) hdr->maxval + 1); + depth = pnm_maxvaltodepth(hdr->maxval); + + data[0] = 0; + data[1] = 0; + data[2] = 0; + for (cmptno = 0; cmptno < numcmpts; ++cmptno) { + if (!(data[cmptno] = jas_matrix_create(1, hdr->width))) { + goto done; + } + } + + for (y = 0; y < hdr->height; ++y) { + for (cmptno = 0; cmptno < numcmpts; ++cmptno) { + if (jas_image_readcmpt(image, cmpts[cmptno], 0, y, hdr->width, 1, + data[cmptno])) { + goto done; + } + d[cmptno] = jas_matrix_getref(data[cmptno], 0, 0); + } + linelen = 0; + for (x = 0; x < hdr->width; ++x) { + for (cmptno = 0; cmptno < numcmpts; ++cmptno) { + v = *d[cmptno]; + if (v < minval) { + v = minval; + } + if (v > ((int) hdr->maxval)) { + v = hdr->maxval; + } + if (fmt == PNM_FMT_BIN) { + if (hdr->sgnd) { + int_fast32_t sv; + sv = v; + if (pnm_putsint(out, depth, &sv)) { + goto done; + } + } else { + uint_fast32_t uv; + uv = v; + if (pnm_putuint(out, depth, &uv)) { + goto done; + } + } + } else { + n = sprintf(buf, "%s%ld", ((!(!x && !cmptno)) ? " " : ""), + (long) v); + if (linelen > 0 && linelen + n > PNM_MAXLINELEN) { + jas_stream_printf(out, "\n"); + linelen = 0; + } + jas_stream_printf(out, "%s", buf); + linelen += n; + } + ++d[cmptno]; + } + } + if (fmt != PNM_FMT_BIN) { + jas_stream_printf(out, "\n"); + linelen = 0; + } + if (jas_stream_error(out)) { + goto done; + } + } + + ret = 0; + +done: + + for (cmptno = 0; cmptno < numcmpts; ++cmptno) { + if (data[cmptno]) { + jas_matrix_destroy(data[cmptno]); + } + } + + return ret; +} + +/******************************************************************************\ +* Miscellaneous functions. +\******************************************************************************/ + +static int pnm_putsint(jas_stream_t *out, int wordsize, int_fast32_t *val) +{ + uint_fast32_t tmpval; + tmpval = (*val < 0) ? + ((~(JAS_CAST(uint_fast32_t, -(*val)) + 1)) & PNM_ONES(wordsize)) : + JAS_CAST(uint_fast32_t, (*val)); + return pnm_putuint(out, wordsize, &tmpval); +} + +static int pnm_putuint(jas_stream_t *out, int wordsize, uint_fast32_t *val) +{ + int n; + uint_fast32_t tmpval; + int c; + + n = (wordsize + 7) / 8; + tmpval = (*val); + tmpval &= PNM_ONES(8 * n); + tmpval = tmpval << (8 * (4 - n)); + while (--n >= 0) { + c = (tmpval >> 24) & 0xff; + if (jas_stream_putc(out, c) == EOF) { + return -1; + } + tmpval = (tmpval << 8) & 0xffffffff; + } + return 0; +} + +/* Write a 16-bit unsigned integer to a stream. */ +static int pnm_putuint16(jas_stream_t *out, uint_fast16_t val) +{ + if (jas_stream_putc(out, (unsigned char)(val >> 8)) == EOF || + jas_stream_putc(out, (unsigned char)(val & 0xff)) == EOF) { + return -1; + } + return 0; +} diff --git a/src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.h b/src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.h new file mode 100644 index 0000000..a2e8ab9 --- /dev/null +++ b/src/3rdparty/jasper/src/libjasper/pnm/pnm_enc.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2002 Michael David Adams. + * All rights reserved. + */ + +/* __START_OF_JASPER_LICENSE__ + * + * JasPer License Version 2.0 + * + * Copyright (c) 2001-2006 Michael David Adams + * Copyright (c) 1999-2000 Image Power, Inc. + * Copyright (c) 1999-2000 The University of British Columbia + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person (the + * "User") obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the + * following conditions: + * + * 1. The above copyright notices and this permission notice (which + * includes the disclaimer below) shall be included in all copies or + * substantial portions of the Software. + * + * 2. The name of a copyright holder shall not be used to endorse or + * promote products derived from the Software without specific prior + * written permission. + * + * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS + * LICENSE. NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER + * THIS DISCLAIMER. THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS + * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. NO ASSURANCES ARE + * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE + * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. + * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS + * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL + * PROPERTY RIGHTS OR OTHERWISE. AS A CONDITION TO EXERCISING THE RIGHTS + * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE + * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY. THE SOFTWARE + * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL + * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, + * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL + * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH + * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, + * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH + * RISK ACTIVITIES"). THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY + * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. + * + * __END_OF_JASPER_LICENSE__ + */ + +#ifndef PNM_ENC_H +#define PNM_ENC_H + +typedef struct { + int numcmpts; + int cmpts[4]; +} pnm_enc_t; + +#endif |