diff options
Diffstat (limited to 'converter/other/jpeg2000/libjasper/base/jas_image.c')
-rw-r--r-- | converter/other/jpeg2000/libjasper/base/jas_image.c | 74 |
1 files changed, 52 insertions, 22 deletions
diff --git a/converter/other/jpeg2000/libjasper/base/jas_image.c b/converter/other/jpeg2000/libjasper/base/jas_image.c index 5c2822be..c6f984c1 100644 --- a/converter/other/jpeg2000/libjasper/base/jas_image.c +++ b/converter/other/jpeg2000/libjasper/base/jas_image.c @@ -126,6 +126,8 @@ #include <assert.h> #include <ctype.h> +#include "netpbm/nstring.h" + #include "jasper/jas_math.h" #include "jasper/jas_image.h" #include "jasper/jas_malloc.h" @@ -379,22 +381,47 @@ static void jas_image_cmpt_destroy(jas_image_cmpt_t *cmpt) * Load and save operations. \*****************************************************************************/ -jas_image_t *jas_image_decode(jas_stream_t *in, int fmt, char *optstr) -{ +void +pmjas_image_decode(jas_stream_t * const in, + int const fmtArg, + const char * const optstr, + jas_image_t ** const imagePP, + const char ** const errorP) { +/*---------------------------------------------------------------------------- + Create an image from a stream in some specified format +-----------------------------------------------------------------------------*/ jas_image_fmtinfo_t *fmtinfo; + int fmt; /* If possible, try to determine the format of the input data. */ - if (fmt < 0) { + if (fmtArg < 0) { if ((fmt = jas_image_getfmt(in)) < 0) { - return 0; + pm_asprintf(errorP, "jas_image_getfmt failed"); + return; } - } + } else + fmt = fmtArg; + if (!(fmtinfo = jas_image_lookupfmtbyid(fmt))) { - return 0; + pm_asprintf(errorP, "jas_image_lookupfmtbyid of format %d failed", + fmt); + return; + } + { + const char * error; + + (*fmtinfo->ops.decode)(in, optstr, imagePP, &error); + if (error) { + pm_asprintf(errorP, "decoder failed. %s", error); + pm_strfree(error); + } else { + *errorP = NULL; + } } - return (fmtinfo->ops.decode) ? (*fmtinfo->ops.decode)(in, optstr) : 0; } + + int jas_image_encode(jas_image_t *image, jas_stream_t *out, int fmt, char *optstr) { jas_image_fmtinfo_t *fmtinfo; @@ -648,7 +675,7 @@ int jas_image_fmtfromname(char *name) return -1; } ++ext; - /* Try to find a format that uses this extension. */ + /* Try to find a format that uses this extension. */ for (i = 0, fmtinfo = jas_image_fmtinfos; i < jas_image_numfmts; ++i, ++fmtinfo) { /* Do we have a match? */ @@ -659,25 +686,28 @@ int jas_image_fmtfromname(char *name) return -1; } -/******************************************************************************\ +/*****************************************************************************\ * Miscellaneous operations. -\******************************************************************************/ +\*****************************************************************************/ -uint_fast32_t jas_image_rawsize(jas_image_t *image) -{ - uint_fast32_t rawsize; - uint_fast32_t cmptno; - jas_image_cmpt_t *cmpt; +uint_fast32_t +jas_image_rawsize(jas_image_t * const imageP) { +/*---------------------------------------------------------------------------- + The raw size of the image, i.e. the number of bytes the raster of the image + would take if just represented simply, with no compression. +-----------------------------------------------------------------------------*/ + uint_fast32_t rawsize; + uint_fast32_t cmptno; - rawsize = 0; - for (cmptno = 0; cmptno < image->numcmpts_; ++cmptno) { - cmpt = image->cmpts_[cmptno]; - rawsize += (cmpt->width_ * cmpt->height_ * cmpt->prec_ + - 7) / 8; - } - return rawsize; + for (cmptno = 0, rawsize = 0; cmptno < imageP->numcmpts_; ++cmptno) { + jas_image_cmpt_t * const cmptP = imageP->cmpts_[cmptno]; + rawsize += (cmptP->width_ * cmptP->height_ * cmptP->prec_ + 7) / 8; + } + return rawsize; } + + void jas_image_delcmpt(jas_image_t *image, uint_fast16_t cmptno) { if (cmptno >= image->numcmpts_) { |