summaryrefslogtreecommitdiff
path: root/libopenjpeg
diff options
context:
space:
mode:
authorMickael Savinaud <savmickael@users.noreply.github.com>2011-10-11 07:49:16 +0000
committerMickael Savinaud <savmickael@users.noreply.github.com>2011-10-11 07:49:16 +0000
commitc7d3b83164b8c0a857fec52da005bd736fcce30c (patch)
tree76c3b68eb008c8064b2b44db03fbab9400cf4e3e /libopenjpeg
parent7c87bb35c45a0bd52fd4425e9d005606186193d0 (diff)
[trunk] WIP: correct mistake with JP2 files and manage correctly the text_GBR.jp2 filecase
Diffstat (limited to 'libopenjpeg')
-rw-r--r--libopenjpeg/j2k.c11
-rw-r--r--libopenjpeg/jp2.c5
2 files changed, 13 insertions, 3 deletions
diff --git a/libopenjpeg/j2k.c b/libopenjpeg/j2k.c
index bc611609..219bb0f7 100644
--- a/libopenjpeg/j2k.c
+++ b/libopenjpeg/j2k.c
@@ -3362,6 +3362,15 @@ opj_bool j2k_read_sot_v2 (
++p_header_data;
if (l_num_parts != 0) { /* Number of tile-part header is provided by this tile-part header */
+ /* Useful to manage the case of textGBR.jp2 file because two values of TNSot are allowed: the correct numbers of
+ * tile-parts for that tile and zero (A.4.2 of 15444-1 : 2002). */
+ if (l_tcp->m_nb_tile_parts) {
+ if (l_current_part >= l_tcp->m_nb_tile_parts){
+ opj_event_msg_v2(p_manager, EVT_ERROR, "In SOT marker, TPSot (%d) is not valid regards to the current "
+ "number of tile-part (%d), giving up\n", l_current_part, l_tcp->m_nb_tile_parts );
+ return OPJ_FALSE;
+ }
+ }
l_tcp->m_nb_tile_parts = l_num_parts;
}
@@ -5709,7 +5718,7 @@ opj_bool j2k_read_tile_header( opj_j2k_v2_t * p_j2k,
/* Read the marker segment with the correct marker handler */
if (! (*(l_marker_handler->handler))(p_j2k,p_j2k->m_specific_param.m_decoder.m_header_data,l_marker_size,p_manager)) {
- opj_event_msg_v2(p_manager, EVT_ERROR, "Marker is not compliant with its position\n");
+ opj_event_msg_v2(p_manager, EVT_ERROR, "Fail to read the current marker segment (%#x)\n", l_current_marker);
return OPJ_FALSE;
}
diff --git a/libopenjpeg/jp2.c b/libopenjpeg/jp2.c
index 618f9ab4..d29e060a 100644
--- a/libopenjpeg/jp2.c
+++ b/libopenjpeg/jp2.c
@@ -1490,8 +1490,8 @@ opj_bool opj_jp2_decode_v2( opj_jp2_v2_t *jp2,
struct opj_event_mgr * p_manager)
{
/* J2K decoding */
- if( j2k_decode_v2(jp2->j2k, cio, p_image, p_manager) ) {
- opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to decode J2K image\n");
+ if( ! j2k_decode_v2(jp2->j2k, cio, p_image, p_manager) ) {
+ opj_event_msg_v2(p_manager, EVT_ERROR, "Failed to decode the codestream in the JP2 file\n");
return OPJ_FALSE;
}
@@ -1521,6 +1521,7 @@ opj_bool opj_jp2_decode_v2( opj_jp2_v2_t *jp2,
if(jp2->color.icc_profile_buf) {
p_image->icc_profile_buf = jp2->color.icc_profile_buf;
p_image->icc_profile_len = jp2->color.icc_profile_len;
+ jp2->color.icc_profile_buf = NULL;
}
return OPJ_TRUE;