diff options
| author | Antonin Descampe <antonin@gmail.com> | 2014-10-22 13:16:12 +0000 |
|---|---|---|
| committer | Antonin Descampe <antonin@gmail.com> | 2014-10-22 13:16:12 +0000 |
| commit | d72940c56b542799024f3c304187386866052651 (patch) | |
| tree | cd778a21f7fa760a273b3013a61ea042302eb1df /src | |
| parent | ad4fad09656e7acd3a75cee43cdbcd68d8eae6d4 (diff) | |
[trunk] resets code-blocks reused for other tiles than the first one (fixes issue 418)
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/openjp2/tcd.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c index 7dd93e99..16d7d8f4 100644 --- a/src/lib/openjp2/tcd.c +++ b/src/lib/openjp2/tcd.c @@ -970,15 +970,14 @@ OPJ_BOOL FUNCTION ( opj_tcd_t *p_tcd, \ OPJ_INT32 cblkxend = cblkxstart + (1 << cblkwidthexpn); \ OPJ_INT32 cblkyend = cblkystart + (1 << cblkheightexpn); \ \ + if (! FUNCTION_ELEMENT(l_code_block)) { \ + return OPJ_FALSE; \ + } \ /* code-block size (global) */ \ l_code_block->x0 = opj_int_max(cblkxstart, l_current_precinct->x0); \ l_code_block->y0 = opj_int_max(cblkystart, l_current_precinct->y0); \ l_code_block->x1 = opj_int_min(cblkxend, l_current_precinct->x1); \ l_code_block->y1 = opj_int_min(cblkyend, l_current_precinct->y1); \ - \ - if (! FUNCTION_ELEMENT(l_code_block)) { \ - return OPJ_FALSE; \ - } \ ++l_code_block; \ } \ ++l_current_precinct; \ @@ -1054,9 +1053,19 @@ OPJ_BOOL opj_tcd_code_block_dec_allocate (opj_tcd_cblk_dec_t * p_code_block) p_code_block->m_current_max_segs = OPJ_J2K_DEFAULT_NB_SEGS; /*fprintf(stderr, "m_current_max_segs of code_block->data = %d\n", p_code_block->m_current_max_segs);*/ - } - /* TODO */ - /*p_code_block->numsegs = 0; */ + } else { + /* sanitize */ + OPJ_BYTE* l_data = p_code_block->data; + OPJ_UINT32 l_data_max_size = p_code_block->data_max_size; + opj_tcd_seg_t * l_segs = p_code_block->segs; + OPJ_UINT32 l_current_max_segs = p_code_block->m_current_max_segs; + + memset(p_code_block, 0, sizeof(opj_tcd_cblk_dec_t)); + p_code_block->data = l_data; + p_code_block->data_max_size = l_data_max_size; + p_code_block->segs = l_segs; + p_code_block->m_current_max_segs = l_current_max_segs; + } return OPJ_TRUE; } |
