summaryrefslogtreecommitdiff
path: root/src/lib/openjp2/t1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/openjp2/t1.c')
-rw-r--r--src/lib/openjp2/t1.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/lib/openjp2/t1.c b/src/lib/openjp2/t1.c
index 52e466eb..4964888a 100644
--- a/src/lib/openjp2/t1.c
+++ b/src/lib/openjp2/t1.c
@@ -1833,12 +1833,13 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
void opj_t1_decode_cblks(opj_tcd_t* tcd,
- volatile OPJ_BOOL* pret,
+ volatile OPJ_RESULT* pret,
opj_tcd_tilecomp_t* tilec,
opj_tccp_t* tccp,
opj_event_mgr_t *p_manager,
opj_mutex_t* p_manager_mutex,
- OPJ_BOOL check_pterm
+ OPJ_BOOL check_pterm,
+ opj_cancel_t *p_cancel
)
{
opj_thread_pool_t* tp = tcd->thread_pool;
@@ -1851,13 +1852,24 @@ void opj_t1_decode_cblks(opj_tcd_t* tcd,
for (resno = 0; resno < tilec->minimum_num_resolutions; ++resno) {
opj_tcd_resolution_t* res = &tilec->resolutions[resno];
+ if (opj_should_cancel(p_cancel)) {
+ *pret = OPJ_CANCEL;
+ }
for (bandno = 0; bandno < res->numbands; ++bandno) {
opj_tcd_band_t* OPJ_RESTRICT band = &res->bands[bandno];
+ if (opj_should_cancel(p_cancel)) {
+ *pret = OPJ_CANCEL;
+ }
+
for (precno = 0; precno < res->pw * res->ph; ++precno) {
opj_tcd_precinct_t* precinct = &band->precincts[precno];
+ if (opj_should_cancel(p_cancel)) {
+ *pret = OPJ_CANCEL;
+ }
+
if (!opj_tcd_is_subband_area_of_interest(tcd,
tilec->compno,
resno,
@@ -1866,7 +1878,7 @@ void opj_t1_decode_cblks(opj_tcd_t* tcd,
(OPJ_UINT32)precinct->y0,
(OPJ_UINT32)precinct->x1,
(OPJ_UINT32)precinct->y1)) {
- for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
+ for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
if (cblk->decoded_data) {
#ifdef DEBUG_VERBOSE
@@ -1884,6 +1896,10 @@ void opj_t1_decode_cblks(opj_tcd_t* tcd,
opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
opj_t1_cblk_decode_processing_job_t* job;
+ if (opj_should_cancel(p_cancel)) {
+ *pret = OPJ_FALSE;
+ }
+
if (!opj_tcd_is_subband_area_of_interest(tcd,
tilec->compno,
resno,
@@ -1925,7 +1941,7 @@ void opj_t1_decode_cblks(opj_tcd_t* tcd,
job = (opj_t1_cblk_decode_processing_job_t*) opj_calloc(1,
sizeof(opj_t1_cblk_decode_processing_job_t));
if (!job) {
- *pret = OPJ_FALSE;
+ *pret = OPJ_FAILURE;
return;
}
job->whole_tile_decoding = tcd->whole_tile_decoding;