diff options
Diffstat (limited to 'fitz/filt_jpxd.c')
-rw-r--r-- | fitz/filt_jpxd.c | 172 |
1 files changed, 86 insertions, 86 deletions
diff --git a/fitz/filt_jpxd.c b/fitz/filt_jpxd.c index 4f34e41a..fff6a306 100644 --- a/fitz/filt_jpxd.c +++ b/fitz/filt_jpxd.c @@ -18,146 +18,146 @@ struct fz_jpxd_s static void fz_opj_error_callback(const char *msg, void *client_data) { - fprintf(stderr, "openjpeg error: %s", msg); + fprintf(stderr, "openjpeg error: %s", msg); } static void fz_opj_warning_callback(const char *msg, void *client_data) { - fprintf(stderr, "openjpeg warning: %s", msg); + fprintf(stderr, "openjpeg warning: %s", msg); } static void fz_opj_info_callback(const char *msg, void *client_data) { - /* fprintf(stdout, "openjpeg info: %s", msg); */ + /* fprintf(stdout, "openjpeg info: %s", msg); */ } fz_error fz_newjpxd(fz_filter **fp, fz_obj *params) { - FZ_NEWFILTER(fz_jpxd, d, jpxd); + FZ_NEWFILTER(fz_jpxd, d, jpxd); - d->info = nil; - d->image = nil; - d->stage = 0; + d->info = nil; + d->image = nil; + d->stage = 0; - d->x = 0; - d->y = 0; - d->k = 0; + d->x = 0; + d->y = 0; + d->k = 0; - memset(&d->evtmgr, 0, sizeof(d->evtmgr)); - d->evtmgr.error_handler = fz_opj_error_callback; - d->evtmgr.warning_handler = fz_opj_warning_callback; - d->evtmgr.info_handler = fz_opj_info_callback; + memset(&d->evtmgr, 0, sizeof(d->evtmgr)); + d->evtmgr.error_handler = fz_opj_error_callback; + d->evtmgr.warning_handler = fz_opj_warning_callback; + d->evtmgr.info_handler = fz_opj_info_callback; - opj_set_default_decoder_parameters(&d->params); + opj_set_default_decoder_parameters(&d->params); - d->info = opj_create_decompress(CODEC_JP2); - if (!d->info) - return fz_throw("opj_create_decompress failed"); + d->info = opj_create_decompress(CODEC_JP2); + if (!d->info) + return fz_throw("opj_create_decompress failed"); - opj_set_event_mgr((opj_common_ptr)d->info, &d->evtmgr, stderr); - opj_setup_decoder(d->info, &d->params); + opj_set_event_mgr((opj_common_ptr)d->info, &d->evtmgr, stderr); + opj_setup_decoder(d->info, &d->params); - return fz_okay; + return fz_okay; } void fz_dropjpxd(fz_filter *filter) { - fz_jpxd *d = (fz_jpxd*)filter; - if (d->image) opj_image_destroy(d->image); - if (d->info) opj_destroy_decompress(d->info); + fz_jpxd *d = (fz_jpxd*)filter; + if (d->image) opj_image_destroy(d->image); + if (d->info) opj_destroy_decompress(d->info); } fz_error fz_processjpxd(fz_filter *filter, fz_buffer *in, fz_buffer *out) { - fz_jpxd *d = (fz_jpxd*)filter; - int n, w, h, depth, sgnd; - int k, v; + fz_jpxd *d = (fz_jpxd*)filter; + int n, w, h, depth, sgnd; + int k, v; - opj_cio_t *cio; + opj_cio_t *cio; - switch (d->stage) - { + switch (d->stage) + { case 0: goto input; case 1: goto decode; case 2: goto output; - } + } input: - /* Wait until we have the entire file in the input buffer */ - if (!in->eof) - return fz_ioneedin; + /* Wait until we have the entire file in the input buffer */ + if (!in->eof) + return fz_ioneedin; - d->stage = 1; + d->stage = 1; decode: - cio = opj_cio_open((opj_common_ptr)d->info, in->rp, in->wp - in->rp); - in->rp = in->wp; + cio = opj_cio_open((opj_common_ptr)d->info, in->rp, in->wp - in->rp); + in->rp = in->wp; + + d->image = opj_decode(d->info, cio); + if (!d->image) + { + opj_cio_close(cio); + return fz_throw("opj_decode failed"); + } - d->image = opj_decode(d->info, cio); - if (!d->image) - { opj_cio_close(cio); - return fz_throw("opj_decode failed"); - } - opj_cio_close(cio); + d->stage = 2; - d->stage = 2; + for (k = 1; k < d->image->numcomps; k++) + { + if (d->image->comps[k].w != d->image->comps[0].w) + return fz_throw("image components have different width"); + if (d->image->comps[k].h != d->image->comps[0].h) + return fz_throw("image components have different height"); + if (d->image->comps[k].prec != d->image->comps[0].prec) + return fz_throw("image components have different precision"); + } - for (k = 1; k < d->image->numcomps; k++) - { - if (d->image->comps[k].w != d->image->comps[0].w) - return fz_throw("image components have different width"); - if (d->image->comps[k].h != d->image->comps[0].h) - return fz_throw("image components have different height"); - if (d->image->comps[k].prec != d->image->comps[0].prec) - return fz_throw("image components have different precision"); - } + { + n = d->image->numcomps; + w = d->image->comps[0].w; + h = d->image->comps[0].h; + depth = d->image->comps[0].prec; + } - { +output: n = d->image->numcomps; w = d->image->comps[0].w; h = d->image->comps[0].h; depth = d->image->comps[0].prec; - } + sgnd = d->image->comps[0].sgnd; -output: - n = d->image->numcomps; - w = d->image->comps[0].w; - h = d->image->comps[0].h; - depth = d->image->comps[0].prec; - sgnd = d->image->comps[0].sgnd; - - while (d->y < h) - { - while (d->x < w) + while (d->y < h) { - while (d->k < n) - { - if (out->wp == out->ep) - return fz_ioneedout; - - v = d->image->comps[d->k].data[d->y * w + d->x]; - if (sgnd) - v = v + (1 << (depth - 1)); - if (depth > 8) - v = v >> (depth - 8); - - *out->wp++ = v; - - d->k ++; - } - d->x ++; - d->k = 0; + while (d->x < w) + { + while (d->k < n) + { + if (out->wp == out->ep) + return fz_ioneedout; + + v = d->image->comps[d->k].data[d->y * w + d->x]; + if (sgnd) + v = v + (1 << (depth - 1)); + if (depth > 8) + v = v >> (depth - 8); + + *out->wp++ = v; + + d->k ++; + } + d->x ++; + d->k = 0; + } + d->y ++; + d->x = 0; } - d->y ++; - d->x = 0; - } - return fz_iodone; + return fz_iodone; } |