summaryrefslogtreecommitdiff
path: root/libopenjpeg
diff options
context:
space:
mode:
authorMickael Savinaud <savmickael@users.noreply.github.com>2011-10-11 07:54:27 +0000
committerMickael Savinaud <savmickael@users.noreply.github.com>2011-10-11 07:54:27 +0000
commitc4642d4fda91704f97dc85aa4f7513eaff1b571e (patch)
treec2a5fa91d7990e2de2b842b97c3a322f15b2dacc /libopenjpeg
parentc7d3b83164b8c0a857fec52da005bd736fcce30c (diff)
[trunk] WIP: add output elements about decoding of jp2 files with last tile part lenght equal zero
Diffstat (limited to 'libopenjpeg')
-rw-r--r--libopenjpeg/j2k.c17
-rw-r--r--libopenjpeg/j2k.h6
2 files changed, 20 insertions, 3 deletions
diff --git a/libopenjpeg/j2k.c b/libopenjpeg/j2k.c
index 219bb0f7..4bd37eac 100644
--- a/libopenjpeg/j2k.c
+++ b/libopenjpeg/j2k.c
@@ -3350,8 +3350,11 @@ opj_bool j2k_read_sot_v2 (
};
#endif /* USE_JPWL */
+ /* Ref A.4.2: Psot could be equal zero if it is the last tile-part of the codestream.*/
if (!l_tot_len) {
- opj_event_msg_v2(p_manager, EVT_ERROR, "Cannot read data with no size known, giving up\n");
+ opj_event_msg_v2(p_manager, EVT_ERROR, "Psot value of the current tile-part is equal to zero, "
+ "for the moment we couldn't manage this case (need to compute the number of byte left"
+ " in the codestream).\n");
return OPJ_FALSE;
}
@@ -3368,6 +3371,7 @@ opj_bool j2k_read_sot_v2 (
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 );
+ p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
return OPJ_FALSE;
}
}
@@ -3381,8 +3385,15 @@ opj_bool j2k_read_sot_v2 (
}
}
- /* Keep the size of data to skip after this marker */
- p_j2k->m_specific_param.m_decoder.m_sot_length = l_tot_len - 12; /* SOT_marker_size = 12 */
+ if (!p_j2k->m_specific_param.m_decoder.m_last_tile_part){
+ /* Keep the size of data to skip after this marker */
+ p_j2k->m_specific_param.m_decoder.m_sot_length = l_tot_len - 12; /* SOT_marker_size = 12 */
+ }
+ else {
+ /* FIXME: need to be computed from the number of bytes remaining in the codestream */
+ p_j2k->m_specific_param.m_decoder.m_sot_length = 0;
+ }
+
p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPH;
/* Check if the current tile is outside the area we want decode (in tile index)*/
diff --git a/libopenjpeg/j2k.h b/libopenjpeg/j2k.h
index 6b63222f..270232aa 100644
--- a/libopenjpeg/j2k.h
+++ b/libopenjpeg/j2k.h
@@ -632,6 +632,12 @@ typedef struct opj_j2k_dec
OPJ_UINT32 m_start_tile_y;
OPJ_UINT32 m_end_tile_x;
OPJ_UINT32 m_end_tile_y;
+ /**
+ * Indicate that the current tile-part is assume as the last tile part of the codestream.
+ * It is useful in the case of PSot is equal to zero. The sot length will be compute in the
+ * SOD reader function. FIXME NOT USED for the moment
+ */
+ opj_bool m_last_tile_part;
/** to tell that a tile can be decoded. */
OPJ_UINT32 m_can_decode : 1;
OPJ_UINT32 m_discard_tiles : 1;