summaryrefslogtreecommitdiff
path: root/src/lib/openjp2/t1.c
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-09-25 13:29:02 +0200
committerGitHub <noreply@github.com>2021-09-25 13:29:02 +0200
commit15615751b840d5b85a46292cf8fe393dab8e1a8b (patch)
treebb0e5837e0df4c04e2e899f9d93b8255e50689a1 /src/lib/openjp2/t1.c
parentec651740191dc765c8a1fc5cc3c5348cd0cd2ccc (diff)
parent0544a0885bbc4c918e8b7f759cba70e0c70a0539 (diff)
Merge pull request #1381 from rouault/htj2k_followup
Added support for high throughput (HTJ2K) decoding.
Diffstat (limited to 'src/lib/openjp2/t1.c')
-rw-r--r--src/lib/openjp2/t1.c61
1 files changed, 49 insertions, 12 deletions
diff --git a/src/lib/openjp2/t1.c b/src/lib/openjp2/t1.c
index 1bea54b0..f5fd2339 100644
--- a/src/lib/openjp2/t1.c
+++ b/src/lib/openjp2/t1.c
@@ -217,6 +217,27 @@ static OPJ_BOOL opj_t1_decode_cblk(opj_t1_t *t1,
opj_mutex_t* p_manager_mutex,
OPJ_BOOL check_pterm);
+/**
+Decode 1 HT code-block
+@param t1 T1 handle
+@param cblk Code-block coding parameters
+@param orient
+@param roishift Region of interest shifting value
+@param cblksty Code-block style
+@param p_manager the event manager
+@param p_manager_mutex mutex for the event manager
+@param check_pterm whether PTERM correct termination should be checked
+*/
+OPJ_BOOL opj_t1_ht_decode_cblk(opj_t1_t *t1,
+ opj_tcd_cblk_dec_t* cblk,
+ OPJ_UINT32 orient,
+ OPJ_UINT32 roishift,
+ OPJ_UINT32 cblksty,
+ opj_event_mgr_t *p_manager,
+ opj_mutex_t* p_manager_mutex,
+ OPJ_BOOL check_pterm);
+
+
static OPJ_BOOL opj_t1_allocate_buffers(opj_t1_t *t1,
OPJ_UINT32 w,
OPJ_UINT32 h);
@@ -1665,18 +1686,34 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
}
t1->mustuse_cblkdatabuffer = job->mustuse_cblkdatabuffer;
- if (OPJ_FALSE == opj_t1_decode_cblk(
- t1,
- cblk,
- band->bandno,
- (OPJ_UINT32)tccp->roishift,
- tccp->cblksty,
- job->p_manager,
- job->p_manager_mutex,
- job->check_pterm)) {
- *(job->pret) = OPJ_FALSE;
- opj_free(job);
- return;
+ if ((tccp->cblksty & J2K_CCP_CBLKSTY_HT) != 0) {
+ if (OPJ_FALSE == opj_t1_ht_decode_cblk(
+ t1,
+ cblk,
+ band->bandno,
+ (OPJ_UINT32)tccp->roishift,
+ tccp->cblksty,
+ job->p_manager,
+ job->p_manager_mutex,
+ job->check_pterm)) {
+ *(job->pret) = OPJ_FALSE;
+ opj_free(job);
+ return;
+ }
+ } else {
+ if (OPJ_FALSE == opj_t1_decode_cblk(
+ t1,
+ cblk,
+ band->bandno,
+ (OPJ_UINT32)tccp->roishift,
+ tccp->cblksty,
+ job->p_manager,
+ job->p_manager_mutex,
+ job->check_pterm)) {
+ *(job->pret) = OPJ_FALSE;
+ opj_free(job);
+ return;
+ }
}
x = cblk->x0 - band->x0;