diff options
| author | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2007-09-17 14:00:43 +0000 |
|---|---|---|
| committer | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2007-09-17 14:00:43 +0000 |
| commit | 569bbb00776f08211f7184ea4ea94571b652adae (patch) | |
| tree | 1366a336e13bdb6f5c2f508fc36a5ccc1fadedb8 /libopenjpeg/tcd.c | |
| parent | abfba20b9922af6dd25593f5e0aa2e232253e7ce (diff) | |
Fixed issues with cstr_info when codestream has components with different number of resolutions.
Diffstat (limited to 'libopenjpeg/tcd.c')
| -rw-r--r-- | libopenjpeg/tcd.c | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/libopenjpeg/tcd.c b/libopenjpeg/tcd.c index 767e7f3d..8f59caa4 100644 --- a/libopenjpeg/tcd.c +++ b/libopenjpeg/tcd.c @@ -1309,25 +1309,27 @@ bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, op /* INDEX >> */ if(cstr_info) { - int i, numpacks = 0; - opj_tcp_t *tcp = &tcd->cp->tcps[0]; - opj_tccp_t *tccp = &tcp->tccps[0]; - opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0]; /* based on component 0 */ - for (i = 0; i < tilec_idx->numresolutions; i++) { - opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i]; - cstr_info->tile[tileno].pw[i] = res_idx->pw; - cstr_info->tile[tileno].ph[i] = res_idx->ph; - numpacks += res_idx->pw * res_idx->ph; - if (tccp->csty & J2K_CP_CSTY_PRT) { - cstr_info->tile[tileno].pdx[i] = tccp->prcw[i]; - cstr_info->tile[tileno].pdy[i] = tccp->prch[i]; - } - else { - cstr_info->tile[tileno].pdx[i] = 15; - cstr_info->tile[tileno].pdx[i] = 15; + int resno, compno, numprec = 0; + for (compno = 0; compno < cstr_info->numcomps; compno++) { + opj_tcp_t *tcp = &tcd->cp->tcps[0]; + opj_tccp_t *tccp = &tcp->tccps[compno]; + opj_tcd_tilecomp_t *tilec_idx = &tile->comps[compno]; + for (resno = 0; resno < tilec_idx->numresolutions; resno++) { + opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno]; + cstr_info->tile[tileno].pw[resno] = res_idx->pw; + cstr_info->tile[tileno].ph[resno] = res_idx->ph; + numprec += res_idx->pw * res_idx->ph; + if (tccp->csty & J2K_CP_CSTY_PRT) { + cstr_info->tile[tileno].pdx[resno] = tccp->prcw[resno]; + cstr_info->tile[tileno].pdy[resno] = tccp->prch[resno]; + } + else { + cstr_info->tile[tileno].pdx[resno] = 15; + cstr_info->tile[tileno].pdx[resno] = 15; + } } } - cstr_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(cstr_info->numcomps * cstr_info->numlayers * numpacks * sizeof(opj_packet_info_t)); + cstr_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(cstr_info->numlayers * numprec * sizeof(opj_packet_info_t)); cstr_info->packno = 0; } /* << INDEX */ @@ -1472,3 +1474,5 @@ void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno) { + + |
