diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/openjp2/j2k.c | 11 | ||||
| -rw-r--r-- | src/lib/openjp2/j2k.h | 3 | ||||
| -rw-r--r-- | src/lib/openjp2/jp2.c | 2 |
3 files changed, 10 insertions, 6 deletions
diff --git a/src/lib/openjp2/j2k.c b/src/lib/openjp2/j2k.c index 5a169e18..9cdc770b 100644 --- a/src/lib/openjp2/j2k.c +++ b/src/lib/openjp2/j2k.c @@ -2239,14 +2239,14 @@ static OPJ_BOOL opj_j2k_read_siz(opj_j2k_t *p_j2k, if (i == 0) { l_prec0 = l_img_comp->prec; l_sgnd0 = l_img_comp->sgnd; - } else if (l_cp->bpc_is_255 == 0 + } else if (!l_cp->allow_different_bit_depth_sign && (l_img_comp->prec != l_prec0 || l_img_comp->sgnd != l_sgnd0)) { - opj_event_msg(p_manager, EVT_ERROR, - "Invalid precision and/or sgnd values for comp[%d]:\n" + opj_event_msg(p_manager, EVT_WARNING, + "Despite JP2 BPC!=255, precision and/or sgnd values for comp[%d] is different than comp[0]:\n" " [0] prec(%d) sgnd(%d) [%d] prec(%d) sgnd(%d)\n", i, l_prec0, l_sgnd0, i, l_img_comp->prec, l_img_comp->sgnd); - return OPJ_FALSE; } + /* TODO: we should perhaps also check against JP2 BPCC values */ } opj_read_bytes(p_header_data, &tmp, 1); /* XRsiz_i */ ++p_header_data; @@ -9273,6 +9273,9 @@ opj_j2k_t* opj_j2k_create_decompress(void) l_j2k->m_is_decoder = 1; l_j2k->m_cp.m_is_decoder = 1; + /* in the absence of JP2 boxes, consider different bit depth / sign */ + /* per component is allowed */ + l_j2k->m_cp.allow_different_bit_depth_sign = 1; #ifdef OPJ_DISABLE_TPSOT_FIX l_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1; diff --git a/src/lib/openjp2/j2k.h b/src/lib/openjp2/j2k.h index eeef6a9e..d61c96db 100644 --- a/src/lib/openjp2/j2k.h +++ b/src/lib/openjp2/j2k.h @@ -446,7 +446,8 @@ typedef struct opj_cp { OPJ_BITFIELD ppm : 1; /** tells if the parameter is a coding or decoding one */ OPJ_BITFIELD m_is_decoder : 1; - OPJ_BITFIELD bpc_is_255 : 1; + /** whether different bit depth or sign per component is allowed. Decoder only for ow */ + OPJ_BITFIELD allow_different_bit_depth_sign : 1; /* <<UniPG */ } opj_cp_t; diff --git a/src/lib/openjp2/jp2.c b/src/lib/openjp2/jp2.c index df35a164..f3ccb997 100644 --- a/src/lib/openjp2/jp2.c +++ b/src/lib/openjp2/jp2.c @@ -619,7 +619,7 @@ static OPJ_BOOL opj_jp2_read_ihdr(opj_jp2_t *jp2, opj_read_bytes(p_image_header_data, &(jp2->IPR), 1); /* IPR */ ++ p_image_header_data; - jp2->j2k->m_cp.bpc_is_255 = (jp2->bpc == 255); + jp2->j2k->m_cp.allow_different_bit_depth_sign = (jp2->bpc == 255); jp2->j2k->ihdr_w = jp2->w; jp2->j2k->ihdr_h = jp2->h; jp2->has_ihdr = 1; |
