diff options
author | Robin Watts <robin.watts@artifex.com> | 2012-03-19 15:19:17 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2012-03-19 15:19:17 +0000 |
commit | d11a38dbd783b746d7a35f03fecfb3cbca65527e (patch) | |
tree | 968ced2794aac77e45b1b1cc2567f2ee4f57f838 /fitz | |
parent | 3598f93db06f029ce4851cc0b43bdfa9ec182a2d (diff) | |
download | mupdf-d11a38dbd783b746d7a35f03fecfb3cbca65527e.tar.xz |
Bug 692746; avoid 'double palettes' on jpx images.
It seems that JPX images can be supplied in indexed format, with
both a palette internal to the jpx stream, and a palette in the
PDF. Googling seems to suggest that the internal palette should
be ignored in this case, and the external palette applied.
Fortunately, since OpenJPEG-1.5 there is a flag that can be used
to tell OpenJPEG not to decode palettes. We update the code here
to spot that there is an external palette, and to set this flag.
Diffstat (limited to 'fitz')
-rw-r--r-- | fitz/fitz-internal.h | 2 | ||||
-rw-r--r-- | fitz/image_jpx.c | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/fitz/fitz-internal.h b/fitz/fitz-internal.h index eda9736a..ae64b89d 100644 --- a/fitz/fitz-internal.h +++ b/fitz/fitz-internal.h @@ -639,7 +639,7 @@ struct fz_image_s fz_pixmap *(*get_pixmap)(fz_context *, fz_image *, int w, int h); }; -fz_pixmap *fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *cs); +fz_pixmap *fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *cs, int indexed); fz_pixmap *fz_load_jpeg(fz_context *doc, unsigned char *data, int size); fz_pixmap *fz_load_png(fz_context *doc, unsigned char *data, int size); fz_pixmap *fz_load_tiff(fz_context *doc, unsigned char *data, int size); diff --git a/fitz/image_jpx.c b/fitz/image_jpx.c index ac1db35a..af5ef263 100644 --- a/fitz/image_jpx.c +++ b/fitz/image_jpx.c @@ -21,7 +21,7 @@ static void fz_opj_info_callback(const char *msg, void *client_data) } fz_pixmap * -fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs) +fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs, int indexed) { fz_pixmap *img; opj_event_mgr_t evtmgr; @@ -50,6 +50,8 @@ fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs evtmgr.info_handler = fz_opj_info_callback; opj_set_default_decoder_parameters(¶ms); + if (indexed) + params.flags |= OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG; info = opj_create_decompress(format); opj_set_event_mgr((opj_common_ptr)info, &evtmgr, ctx); |