summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/jasper/src/libjasper/bmp/bmp_dec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/jasper/src/libjasper/bmp/bmp_dec.c')
-rw-r--r--src/3rdparty/jasper/src/libjasper/bmp/bmp_dec.c464
1 files changed, 0 insertions, 464 deletions
diff --git a/src/3rdparty/jasper/src/libjasper/bmp/bmp_dec.c b/src/3rdparty/jasper/src/libjasper/bmp/bmp_dec.c
deleted file mode 100644
index b1ff065..0000000
--- a/src/3rdparty/jasper/src/libjasper/bmp/bmp_dec.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * 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__
- */
-
-/*
- * Windows Bitmap File Library
- *
- * $Id$
- */
-
-/******************************************************************************\
-* Includes.
-\******************************************************************************/
-
-#include <assert.h>
-
-#include "jasper/jas_debug.h"
-#include "jasper/jas_types.h"
-#include "jasper/jas_stream.h"
-#include "jasper/jas_image.h"
-#include "jasper/jas_malloc.h"
-
-#include "bmp_cod.h"
-
-/******************************************************************************\
-* Local prototypes.
-\******************************************************************************/
-
-static int bmp_gethdr(jas_stream_t *in, bmp_hdr_t *hdr);
-static bmp_info_t *bmp_getinfo(jas_stream_t *in);
-static int bmp_getdata(jas_stream_t *in, bmp_info_t *info, jas_image_t *image);
-static int bmp_getint16(jas_stream_t *in, int_fast16_t *val);
-static int bmp_getint32(jas_stream_t *in, int_fast32_t *val);
-static int bmp_gobble(jas_stream_t *in, long n);
-
-/******************************************************************************\
-* Interface functions.
-\******************************************************************************/
-
-jas_image_t *bmp_decode(jas_stream_t *in, char *optstr)
-{
- jas_image_t *image;
- bmp_hdr_t hdr;
- bmp_info_t *info;
- uint_fast16_t cmptno;
- jas_image_cmptparm_t cmptparms[3];
- jas_image_cmptparm_t *cmptparm;
- uint_fast16_t numcmpts;
- long n;
-
- if (optstr) {
- jas_eprintf("warning: ignoring BMP decoder options\n");
- }
-
- jas_eprintf(
- "THE BMP FORMAT IS NOT FULLY SUPPORTED!\n"
- "THAT IS, THE JASPER SOFTWARE CANNOT DECODE ALL TYPES OF BMP DATA.\n"
- "IF YOU HAVE ANY PROBLEMS, PLEASE TRY CONVERTING YOUR IMAGE DATA\n"
- "TO THE PNM FORMAT, AND USING THIS FORMAT INSTEAD.\n"
- );
-
- /* Read the bitmap header. */
- if (bmp_gethdr(in, &hdr)) {
- jas_eprintf("cannot get header\n");
- return 0;
- }
-
- /* Read the bitmap information. */
- if (!(info = bmp_getinfo(in))) {
- jas_eprintf("cannot get info\n");
- return 0;
- }
-
- /* Ensure that we support this type of BMP file. */
- if (!bmp_issupported(&hdr, info)) {
- jas_eprintf("error: unsupported BMP encoding\n");
- bmp_info_destroy(info);
- return 0;
- }
-
- /* Skip over any useless data between the end of the palette
- and start of the bitmap data. */
- if ((n = hdr.off - (BMP_HDRLEN + BMP_INFOLEN + BMP_PALLEN(info))) < 0) {
- jas_eprintf("error: possibly bad bitmap offset?\n");
- return 0;
- }
- if (n > 0) {
- jas_eprintf("skipping unknown data in BMP file\n");
- if (bmp_gobble(in, n)) {
- bmp_info_destroy(info);
- return 0;
- }
- }
-
- /* Get the number of components. */
- numcmpts = bmp_numcmpts(info);
-
- for (cmptno = 0, cmptparm = cmptparms; cmptno < numcmpts; ++cmptno,
- ++cmptparm) {
- cmptparm->tlx = 0;
- cmptparm->tly = 0;
- cmptparm->hstep = 1;
- cmptparm->vstep = 1;
- cmptparm->width = info->width;
- cmptparm->height = info->height;
- cmptparm->prec = 8;
- cmptparm->sgnd = false;
- }
-
- /* Create image object. */
- if (!(image = jas_image_create(numcmpts, cmptparms,
- JAS_CLRSPC_UNKNOWN))) {
- bmp_info_destroy(info);
- return 0;
- }
-
- if (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 the bitmap data. */
- if (bmp_getdata(in, info, image)) {
- bmp_info_destroy(info);
- jas_image_destroy(image);
- return 0;
- }
-
- bmp_info_destroy(info);
-
- return image;
-}
-
-int bmp_validate(jas_stream_t *in)
-{
- int n;
- int i;
- uchar buf[2];
-
- assert(JAS_STREAM_MAXPUTBACK >= 2);
-
- /* Read the first two characters that constitute the signature. */
- if ((n = jas_stream_read(in, (char *) buf, 2)) < 0) {
- return -1;
- }
- /* Put the characters read back onto the stream. */
- for (i = n - 1; i >= 0; --i) {
- if (jas_stream_ungetc(in, buf[i]) == EOF) {
- return -1;
- }
- }
- /* Did we read enough characters? */
- if (n < 2) {
- return -1;
- }
- /* Is the signature correct for the BMP format? */
- if (buf[0] == (BMP_MAGIC & 0xff) && buf[1] == (BMP_MAGIC >> 8)) {
- return 0;
- }
- return -1;
-}
-
-/******************************************************************************\
-* Code for aggregate types.
-\******************************************************************************/
-
-static int bmp_gethdr(jas_stream_t *in, bmp_hdr_t *hdr)
-{
- if (bmp_getint16(in, &hdr->magic) || hdr->magic != BMP_MAGIC ||
- bmp_getint32(in, &hdr->siz) || bmp_getint16(in, &hdr->reserved1) ||
- bmp_getint16(in, &hdr->reserved2) || bmp_getint32(in, &hdr->off)) {
- return -1;
- }
- return 0;
-}
-
-static bmp_info_t *bmp_getinfo(jas_stream_t *in)
-{
- bmp_info_t *info;
- int i;
- bmp_palent_t *palent;
-
- if (!(info = bmp_info_create())) {
- return 0;
- }
-
- if (bmp_getint32(in, &info->len) || info->len != 40 ||
- bmp_getint32(in, &info->width) || bmp_getint32(in, &info->height) ||
- bmp_getint16(in, &info->numplanes) ||
- bmp_getint16(in, &info->depth) || bmp_getint32(in, &info->enctype) ||
- bmp_getint32(in, &info->siz) ||
- bmp_getint32(in, &info->hres) || bmp_getint32(in, &info->vres) ||
- bmp_getint32(in, &info->numcolors) ||
- bmp_getint32(in, &info->mincolors)) {
- bmp_info_destroy(info);
- return 0;
- }
-
- if (info->height < 0) {
- info->topdown = 1;
- info->height = -info->height;
- } else {
- info->topdown = 0;
- }
-
- if (info->width <= 0 || info->height <= 0 || info->numplanes <= 0 ||
- info->depth <= 0 || info->numcolors < 0 || info->mincolors < 0) {
- bmp_info_destroy(info);
- return 0;
- }
-
- if (info->enctype != BMP_ENC_RGB) {
- jas_eprintf("unsupported BMP encoding\n");
- bmp_info_destroy(info);
- return 0;
- }
-
- if (info->numcolors > 0) {
- if (!(info->palents = jas_malloc(info->numcolors *
- sizeof(bmp_palent_t)))) {
- bmp_info_destroy(info);
- return 0;
- }
- } else {
- info->palents = 0;
- }
-
- for (i = 0; i < info->numcolors; ++i) {
- palent = &info->palents[i];
- if ((palent->blu = jas_stream_getc(in)) == EOF ||
- (palent->grn = jas_stream_getc(in)) == EOF ||
- (palent->red = jas_stream_getc(in)) == EOF ||
- (palent->res = jas_stream_getc(in)) == EOF) {
- bmp_info_destroy(info);
- return 0;
- }
- }
-
- return info;
-}
-
-static int bmp_getdata(jas_stream_t *in, bmp_info_t *info, jas_image_t *image)
-{
- int i;
- int j;
- int y;
- jas_matrix_t *cmpts[3];
- int numpad;
- int red;
- int grn;
- int blu;
- int ret;
- int numcmpts;
- int cmptno;
- int ind;
- bmp_palent_t *palent;
- int mxind;
- int haspal;
-
- assert(info->depth == 8 || info->depth == 24);
- assert(info->enctype == BMP_ENC_RGB);
-
- numcmpts = bmp_numcmpts(info);
- haspal = bmp_haspal(info);
-
- ret = 0;
- for (i = 0; i < numcmpts; ++i) {
- cmpts[i] = 0;
- }
-
- /* Create temporary matrices to hold component data. */
- for (i = 0; i < numcmpts; ++i) {
- if (!(cmpts[i] = jas_matrix_create(1, info->width))) {
- ret = -1;
- goto bmp_getdata_done;
- }
- }
-
- /* Calculate number of padding bytes per row of image data. */
- numpad = (numcmpts * info->width) % 4;
- if (numpad) {
- numpad = 4 - numpad;
- }
-
- mxind = (1 << info->depth) - 1;
- for (i = 0; i < info->height; ++i) {
- for (j = 0; j < info->width; ++j) {
- if (haspal) {
- if ((ind = jas_stream_getc(in)) == EOF) {
- ret = -1;
- goto bmp_getdata_done;
- }
- if (ind > mxind) {
- ret = -1;
- goto bmp_getdata_done;
- }
- if (ind < info->numcolors) {
- palent = &info->palents[ind];
- red = palent->red;
- grn = palent->grn;
- blu = palent->blu;
- } else {
- red = ind;
- grn = ind;
- blu = ind;
- }
- } else {
- if ((blu = jas_stream_getc(in)) == EOF ||
- (grn = jas_stream_getc(in)) == EOF ||
- (red = jas_stream_getc(in)) == EOF) {
- ret = -1;
- goto bmp_getdata_done;
- }
- }
- if (numcmpts == 3) {
- jas_matrix_setv(cmpts[0], j, red);
- jas_matrix_setv(cmpts[1], j, grn);
- jas_matrix_setv(cmpts[2], j, blu);
- } else {
- jas_matrix_setv(cmpts[0], j, red);
- }
- }
- for (j = numpad; j > 0; --j) {
- if (jas_stream_getc(in) == EOF) {
- ret = -1;
- goto bmp_getdata_done;
- }
- }
- for (cmptno = 0; cmptno < numcmpts; ++cmptno) {
- y = info->topdown ? i : (info->height - 1 - i);
- if (jas_image_writecmpt(image, cmptno, 0, y, info->width,
- 1, cmpts[cmptno])) {
- ret = -1;
- goto bmp_getdata_done;
- }
- }
- }
-
-bmp_getdata_done:
- /* Destroy the temporary matrices. */
- for (i = 0; i < numcmpts; ++i) {
- if (cmpts[i]) {
- jas_matrix_destroy(cmpts[i]);
- }
- }
-
- return ret;
-}
-
-/******************************************************************************\
-* Code for primitive types.
-\******************************************************************************/
-
-static int bmp_getint16(jas_stream_t *in, int_fast16_t *val)
-{
- int lo;
- int hi;
- if ((lo = jas_stream_getc(in)) == EOF || (hi = jas_stream_getc(in)) == EOF) {
- return -1;
- }
- if (val) {
- *val = (hi << 8) | lo;
- }
- return 0;
-}
-
-static int bmp_getint32(jas_stream_t *in, int_fast32_t *val)
-{
- int n;
- uint_fast32_t v;
- int c;
- for (n = 4, v = 0;;) {
- if ((c = jas_stream_getc(in)) == EOF) {
- return -1;
- }
- v |= (c << 24);
- if (--n <= 0) {
- break;
- }
- v >>= 8;
- }
- if (val) {
- *val = v;
- }
- return 0;
-}
-
-static int bmp_gobble(jas_stream_t *in, long n)
-{
- while (--n >= 0) {
- if (jas_stream_getc(in) == EOF) {
- return -1;
- }
- }
- return 0;
-}