summaryrefslogtreecommitdiff
path: root/src/lib/openjp2/tcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/openjp2/tcd.c')
-rw-r--r--src/lib/openjp2/tcd.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c
index 4c4839d0..dd9faced 100644
--- a/src/lib/openjp2/tcd.c
+++ b/src/lib/openjp2/tcd.c
@@ -1213,11 +1213,7 @@ static OPJ_BOOL opj_tcd_code_block_enc_allocate_data(opj_tcd_cblk_enc_t *
void opj_tcd_reinit_segment(opj_tcd_seg_t* seg)
{
- opj_tcd_seg_data_chunk_t *l_chunks = seg->chunks;
- OPJ_UINT32 l_numchunksalloc = seg->numchunksalloc;
memset(seg, 0, sizeof(opj_tcd_seg_t));
- seg->chunks = l_chunks;
- seg->numchunksalloc = l_numchunksalloc;
}
/**
@@ -1241,6 +1237,8 @@ static OPJ_BOOL opj_tcd_code_block_dec_allocate(opj_tcd_cblk_dec_t *
/* sanitize */
opj_tcd_seg_t * l_segs = p_code_block->segs;
OPJ_UINT32 l_current_max_segs = p_code_block->m_current_max_segs;
+ opj_tcd_seg_data_chunk_t* l_chunks = p_code_block->chunks;
+ OPJ_UINT32 l_numchunksalloc = p_code_block->numchunksalloc;
OPJ_UINT32 i;
memset(p_code_block, 0, sizeof(opj_tcd_cblk_dec_t));
@@ -1249,6 +1247,8 @@ static OPJ_BOOL opj_tcd_code_block_dec_allocate(opj_tcd_cblk_dec_t *
for (i = 0; i < l_current_max_segs; ++i) {
opj_tcd_reinit_segment(&l_segs[i]);
}
+ p_code_block->chunks = l_chunks;
+ p_code_block->numchunksalloc = l_numchunksalloc;
}
return OPJ_TRUE;
@@ -1952,14 +1952,15 @@ static void opj_tcd_code_block_dec_deallocate(opj_tcd_precinct_t * p_precinct)
for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
if (l_code_block->segs) {
- OPJ_UINT32 i;
- for (i = 0; i < l_code_block->m_current_max_segs; ++ i) {
- opj_free(l_code_block->segs[i].chunks);
- }
opj_free(l_code_block->segs);
l_code_block->segs = 00;
}
+ if (l_code_block->chunks) {
+ opj_free(l_code_block->chunks);
+ l_code_block->chunks = 00;
+ }
+
++l_code_block;
}