summaryrefslogtreecommitdiff
path: root/libopenjpeg
diff options
context:
space:
mode:
authorAntonin Descampe <antonin@gmail.com>2012-01-23 08:22:23 +0000
committerAntonin Descampe <antonin@gmail.com>2012-01-23 08:22:23 +0000
commitba01e855a32fd8330385091b637abb3736e14649 (patch)
tree34bdf1fcdeba409e985e653994e9297c9cc4036f /libopenjpeg
parentd3c1a4924675bb059c339ce3a8addae414ca5033 (diff)
[1.5] fix issue #104
Diffstat (limited to 'libopenjpeg')
-rw-r--r--libopenjpeg/jp2.c13
-rw-r--r--libopenjpeg/jp2.h1
-rw-r--r--libopenjpeg/openjpeg.c1
-rw-r--r--libopenjpeg/openjpeg.h3
4 files changed, 14 insertions, 4 deletions
diff --git a/libopenjpeg/jp2.c b/libopenjpeg/jp2.c
index 9cb1e236..5ae114c3 100644
--- a/libopenjpeg/jp2.c
+++ b/libopenjpeg/jp2.c
@@ -680,7 +680,7 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
jp2_read_boxhdr(cinfo, cio, &box);
continue;
}
- if(box.type == JP2_CDEF)
+ if(box.type == JP2_CDEF && !jp2->ignore_pclr_cmap_cdef)
{
if( !jp2_read_cdef(jp2, cio, &box, color))
{
@@ -690,7 +690,7 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
jp2_read_boxhdr(cinfo, cio, &box);
continue;
}
- if(box.type == JP2_PCLR)
+ if(box.type == JP2_PCLR && !jp2->ignore_pclr_cmap_cdef)
{
if( !jp2_read_pclr(jp2, cio, &box, color))
{
@@ -700,7 +700,7 @@ opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
jp2_read_boxhdr(cinfo, cio, &box);
continue;
}
- if(box.type == JP2_CMAP)
+ if(box.type == JP2_CMAP && !jp2->ignore_pclr_cmap_cdef)
{
if( !jp2_read_cmap(jp2, cio, &box, color))
{
@@ -754,8 +754,10 @@ opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
return NULL;
}
+
+ if (!jp2->ignore_pclr_cmap_cdef){
-/* Set Image Color Space */
+ /* Set Image Color Space */
if (jp2->enumcs == 16)
image->color_space = CLRSPC_SRGB;
else if (jp2->enumcs == 17)
@@ -783,6 +785,8 @@ opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
color.icc_profile_buf = NULL;
image->icc_profile_len = color.icc_profile_len;
}
+ }
+
return image;
}/* opj_jp2_decode() */
@@ -1056,6 +1060,7 @@ void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters) {
/* setup the J2K codec */
j2k_setup_decoder(jp2->j2k, parameters);
/* further JP2 initializations go here */
+ jp2->ignore_pclr_cmap_cdef = parameters->flags & OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG;
}
/* ----------------------------------------------------------------------- */
diff --git a/libopenjpeg/jp2.h b/libopenjpeg/jp2.h
index 16273b85..acb643ca 100644
--- a/libopenjpeg/jp2.h
+++ b/libopenjpeg/jp2.h
@@ -141,6 +141,7 @@ typedef struct opj_jp2 {
unsigned int j2k_codestream_offset;
unsigned int j2k_codestream_length;
opj_bool jpip_on;
+ opj_bool ignore_pclr_cmap_cdef;
} opj_jp2_t;
/**
diff --git a/libopenjpeg/openjpeg.c b/libopenjpeg/openjpeg.c
index ca8f5485..180cc844 100644
--- a/libopenjpeg/openjpeg.c
+++ b/libopenjpeg/openjpeg.c
@@ -125,6 +125,7 @@ void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *paramete
parameters->decod_format = -1;
parameters->cod_format = -1;
+ parameters->flags = 0;
/* UniPG>> */
#ifdef USE_JPWL
parameters->jpwl_correct = OPJ_FALSE;
diff --git a/libopenjpeg/openjpeg.h b/libopenjpeg/openjpeg.h
index 169ffd77..53e9fac0 100644
--- a/libopenjpeg/openjpeg.h
+++ b/libopenjpeg/openjpeg.h
@@ -351,6 +351,8 @@ typedef struct opj_cparameters {
opj_bool jpip_on;
} opj_cparameters_t;
+#define OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG 0x0001
+
/**
Decompression parameters
*/
@@ -403,6 +405,7 @@ typedef struct opj_dparameters {
*/
OPJ_LIMIT_DECODING cp_limit_decoding;
+ unsigned int flags;
} opj_dparameters_t;
/** Common fields between JPEG-2000 compression and decompression master structs. */