summaryrefslogtreecommitdiff
path: root/src/lib/openjp2/t2.c
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2017-08-10 16:49:47 +0200
committerEven Rouault <even.rouault@spatialys.com>2017-08-10 16:49:47 +0200
commit0b4fef6d1901254e41ab74ed681daba477d724c3 (patch)
tree75119bdedc3a63b96b8d82aa3a83fab00c6c7e4b /src/lib/openjp2/t2.c
parenta316f36dfc7cc4217bfce0ac6d23b47f90cf8fd9 (diff)
Propagate event manager down to opj_t2_encode_packet() and use it to emit an error message when the output buffer is too small
Diffstat (limited to 'src/lib/openjp2/t2.c')
-rw-r--r--src/lib/openjp2/t2.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/lib/openjp2/t2.c b/src/lib/openjp2/t2.c
index c8cfcc26..a5ada708 100644
--- a/src/lib/openjp2/t2.c
+++ b/src/lib/openjp2/t2.c
@@ -68,6 +68,7 @@ Encode a packet of a tile to a destination buffer
@param p_data_written FIXME DOC
@param len Length of the destination buffer
@param cstr_info Codestream information structure
+@param p_manager the user event manager
@return
*/
static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
@@ -77,7 +78,8 @@ static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
OPJ_BYTE *dest,
OPJ_UINT32 * p_data_written,
OPJ_UINT32 len,
- opj_codestream_info_t *cstr_info);
+ opj_codestream_info_t *cstr_info,
+ opj_event_mgr_t *p_manager);
/**
Decode a packet of a tile from a source buffer
@@ -222,7 +224,8 @@ OPJ_BOOL opj_t2_encode_packets(opj_t2_t* p_t2,
OPJ_UINT32 p_tp_num,
OPJ_INT32 p_tp_pos,
OPJ_UINT32 p_pino,
- J2K_T2_MODE p_t2_mode)
+ J2K_T2_MODE p_t2_mode,
+ opj_event_mgr_t *p_manager)
{
OPJ_BYTE *l_current_data = p_dest;
OPJ_UINT32 l_nb_bytes = 0;
@@ -268,7 +271,9 @@ OPJ_BOOL opj_t2_encode_packets(opj_t2_t* p_t2,
l_nb_bytes = 0;
if (! opj_t2_encode_packet(p_tile_no, p_tile, l_tcp, l_current_pi,
- l_current_data, &l_nb_bytes, p_max_len, cstr_info)) {
+ l_current_data, &l_nb_bytes,
+ p_max_len, cstr_info,
+ p_manager)) {
opj_pi_destroy(l_pi, l_nb_pocs);
return OPJ_FALSE;
}
@@ -306,7 +311,7 @@ OPJ_BOOL opj_t2_encode_packets(opj_t2_t* p_t2,
l_nb_bytes = 0;
if (! opj_t2_encode_packet(p_tile_no, p_tile, l_tcp, l_current_pi,
- l_current_data, &l_nb_bytes, p_max_len, cstr_info)) {
+ l_current_data, &l_nb_bytes, p_max_len, cstr_info, p_manager)) {
opj_pi_destroy(l_pi, l_nb_pocs);
return OPJ_FALSE;
}
@@ -596,7 +601,8 @@ static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
OPJ_BYTE *dest,
OPJ_UINT32 * p_data_written,
OPJ_UINT32 length,
- opj_codestream_info_t *cstr_info)
+ opj_codestream_info_t *cstr_info,
+ opj_event_mgr_t *p_manager)
{
OPJ_UINT32 bandno, cblkno;
OPJ_BYTE* c = dest;
@@ -845,6 +851,10 @@ static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
}
if (layer->len > length) {
+ opj_event_msg(p_manager, EVT_ERROR,
+ "opj_t2_encode_packet(): only %u bytes remaining in "
+ "output buffer. %u needed.\n",
+ layer->len, length);
return OPJ_FALSE;
}