about summary refs log tree commit diff
path: root/converter
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2020-09-06 03:15:27 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2020-09-06 03:15:27 +0000
commit9772cdac86222754259a32b7862093a3eeb5cc4c (patch)
tree8a9207c2c28df2d1db14f1e10ae82b7f66d9e057 /converter
parentb65b6cba1ed3d79f91897c912176955515b601a6 (diff)
downloadnetpbm-mirror-9772cdac86222754259a32b7862093a3eeb5cc4c.tar.gz
netpbm-mirror-9772cdac86222754259a32b7862093a3eeb5cc4c.tar.xz
netpbm-mirror-9772cdac86222754259a32b7862093a3eeb5cc4c.zip
cleanup
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@3944 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter')
-rw-r--r--converter/other/jpeg2000/libjasper/jpc/jpc_t1dec.c492
1 files changed, 252 insertions, 240 deletions
diff --git a/converter/other/jpeg2000/libjasper/jpc/jpc_t1dec.c b/converter/other/jpeg2000/libjasper/jpc/jpc_t1dec.c
index 0dca9ec8..6518c37e 100644
--- a/converter/other/jpeg2000/libjasper/jpc/jpc_t1dec.c
+++ b/converter/other/jpeg2000/libjasper/jpc/jpc_t1dec.c
@@ -138,19 +138,6 @@
 *
 \******************************************************************************/
 
-static int jpc_dec_decodecblk(jpc_dec_t *dec, jpc_dec_tile_t *tile, jpc_dec_tcomp_t *tcomp, jpc_dec_band_t *band,
-  jpc_dec_cblk_t *cblk, int dopartial, int maxlyrs);
-static int dec_sigpass(jpc_dec_t *dec, jpc_mqdec_t *mqdec, int bitpos, int orient,
-  int vcausalflag, jas_matrix_t *flags, jas_matrix_t *data);
-static int dec_rawsigpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos,
-  int vcausalflag, jas_matrix_t *flags, jas_matrix_t *data);
-static int dec_refpass(jpc_dec_t *dec, jpc_mqdec_t *mqdec, int bitpos, int vcausalflag,
-  jas_matrix_t *flags, jas_matrix_t *data);
-static int dec_rawrefpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos,
-  int vcausalflag, jas_matrix_t *flags, jas_matrix_t *data);
-static int dec_clnpass(jpc_dec_t *dec, jpc_mqdec_t *mqdec, int bitpos, int orient,
-  int vcausalflag, int segsymflag, jas_matrix_t *flags, jas_matrix_t *data);
-
 #if defined(DEBUG)
 static long t1dec_cnt = 0;
 #endif
@@ -185,203 +172,7 @@ static long t1dec_cnt = 0;
 }
 #endif
 
-/******************************************************************************\
-* Code.
-\******************************************************************************/
-
-int jpc_dec_decodecblks(jpc_dec_t *dec, jpc_dec_tile_t *tile)
-{
-    jpc_dec_tcomp_t *tcomp;
-    int compcnt;
-    jpc_dec_rlvl_t *rlvl;
-    int rlvlcnt;
-    jpc_dec_band_t *band;
-    int bandcnt;
-    jpc_dec_prc_t *prc;
-    int prccnt;
-    jpc_dec_cblk_t *cblk;
-    int cblkcnt;
-
-    for (compcnt = dec->numcomps, tcomp = tile->tcomps; compcnt > 0;
-      --compcnt, ++tcomp) {
-        for (rlvlcnt = tcomp->numrlvls, rlvl = tcomp->rlvls;
-          rlvlcnt > 0; --rlvlcnt, ++rlvl) {
-            if (!rlvl->bands) {
-                continue;
-            }
-            for (bandcnt = rlvl->numbands, band = rlvl->bands;
-              bandcnt > 0; --bandcnt, ++band) {
-                if (!band->data) {
-                    continue;
-                }
-                for (prccnt = rlvl->numprcs, prc = band->prcs;
-                  prccnt > 0; --prccnt, ++prc) {
-                    if (!prc->cblks) {
-                        continue;
-                    }
-                    for (cblkcnt = prc->numcblks,
-                      cblk = prc->cblks; cblkcnt > 0;
-                      --cblkcnt, ++cblk) {
-                        if (jpc_dec_decodecblk(dec, tile, tcomp,
-                          band, cblk, 1, JPC_MAXLYRS)) {
-                            return -1;
-                        }
-                    }
-                }
-
-            }
-        }
-    }
-
-    return 0;
-}
-
-static int jpc_dec_decodecblk(jpc_dec_t *dec, jpc_dec_tile_t *tile, jpc_dec_tcomp_t *tcomp, jpc_dec_band_t *band,
-  jpc_dec_cblk_t *cblk, int dopartial, int maxlyrs)
-{
-    jpc_dec_seg_t *seg;
-    int i;
-    int bpno;
-    int passtype;
-    int ret;
-    int compno;
-    int filldata;
-    int fillmask;
-    jpc_dec_ccp_t *ccp;
-
-    compno = tcomp - tile->tcomps;
-
-    if (!cblk->flags) {
-        /* Note: matrix is assumed to be zeroed */
-        if (!(cblk->flags = jas_matrix_create(jas_matrix_numrows(cblk->data) +
-          2, jas_matrix_numcols(cblk->data) + 2))) {
-            return -1;
-        }
-    }
-
-    seg = cblk->segs.head;
-    while (seg && (seg != cblk->curseg || dopartial) && (maxlyrs < 0 ||
-      seg->lyrno < maxlyrs)) {
-        assert(seg->numpasses >= seg->maxpasses || dopartial);
-        assert(seg->stream);
-        jas_stream_rewind(seg->stream);
-        jas_stream_setrwcount(seg->stream, 0);
-        if (seg->type == JPC_SEG_MQ) {
-            if (!cblk->mqdec) {
-                if (!(cblk->mqdec = jpc_mqdec_create(JPC_NUMCTXS, 0))) {
-                    return -1;
-                }
-                jpc_mqdec_setctxs(cblk->mqdec, JPC_NUMCTXS, jpc_mqctxs);
-            }
-            jpc_mqdec_setinput(cblk->mqdec, seg->stream);
-            jpc_mqdec_init(cblk->mqdec);
-        } else {
-            assert(seg->type == JPC_SEG_RAW);
-            if (!cblk->nulldec) {
-                if (!(cblk->nulldec = jpc_bitstream_sopen(seg->stream, "r"))) {
-                    assert(0);
-                }
-            }
-        }
-
-
-        for (i = 0; i < seg->numpasses; ++i) {
-            if (cblk->numimsbs > band->numbps) {
-                ccp = &tile->cp->ccps[compno];
-                if (ccp->roishift <= 0) {
-                    fprintf(stderr, "warning: corrupt code stream\n");
-                } else {
-                    if (cblk->numimsbs < ccp->roishift - band->numbps) {
-                        fprintf(stderr, "warning: corrupt code stream\n");
-                    }
-                }
-            }
-            bpno = band->roishift + band->numbps - 1 - (cblk->numimsbs +
-              (seg->passno + i - cblk->firstpassno + 2) / 3);
-if (bpno < 0) {
-    goto premature_exit;
-}
-#if 1
-            passtype = (seg->passno + i + 2) % 3;
-#else
-            passtype = JPC_PASSTYPE(seg->passno + i + 2);
-#endif
-            assert(bpno >= 0 && bpno < 31);
-            switch (passtype) {
-            case JPC_SIGPASS:
-                ret = (seg->type == JPC_SEG_MQ) ? dec_sigpass(dec,
-                  cblk->mqdec, bpno, band->orient,
-                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
-                  cblk->flags, cblk->data) :
-                  dec_rawsigpass(dec, cblk->nulldec, bpno,
-                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
-                  cblk->flags, cblk->data);
-                break;
-            case JPC_REFPASS:
-                ret = (seg->type == JPC_SEG_MQ) ?
-                  dec_refpass(dec, cblk->mqdec, bpno,
-                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
-                  cblk->flags, cblk->data) :
-                  dec_rawrefpass(dec, cblk->nulldec, bpno,
-                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
-                  cblk->flags, cblk->data);
-                break;
-            case JPC_CLNPASS:
-                assert(seg->type == JPC_SEG_MQ);
-                ret = dec_clnpass(dec, cblk->mqdec, bpno,
-                  band->orient, (tile->cp->ccps[compno].cblkctx &
-                  JPC_COX_VSC) != 0, (tile->cp->ccps[compno].cblkctx &
-                  JPC_COX_SEGSYM) != 0, cblk->flags,
-                  cblk->data);
-                break;
-            default:
-                ret = -1;
-                break;
-            }
-            /* Do we need to reset after each coding pass? */
-            if (tile->cp->ccps[compno].cblkctx & JPC_COX_RESET) {
-                jpc_mqdec_setctxs(cblk->mqdec, JPC_NUMCTXS, jpc_mqctxs);
-            }
-
-            if (ret) {
-                fprintf(stderr, "coding pass failed passtype=%d segtype=%d\n", passtype, seg->type);
-                return -1;
-            }
 
-        }
-
-        if (seg->type == JPC_SEG_MQ) {
-/* Note: dont destroy mq decoder because context info will be lost */
-        } else {
-            assert(seg->type == JPC_SEG_RAW);
-            if (tile->cp->ccps[compno].cblkctx & JPC_COX_PTERM) {
-                fillmask = 0x7f;
-                filldata = 0x2a;
-            } else {
-                fillmask = 0;
-                filldata = 0;
-            }
-            if ((ret = jpc_bitstream_inalign(cblk->nulldec, fillmask,
-              filldata)) < 0) {
-                return -1;
-            } else if (ret > 0) {
-                fprintf(stderr, "warning: bad termination pattern detected\n");
-            }
-            jpc_bitstream_close(cblk->nulldec);
-            cblk->nulldec = 0;
-        }
-
-        cblk->curseg = seg->next;
-        jpc_seglist_remove(&cblk->segs, seg);
-        jpc_seg_destroy(seg);
-        seg = cblk->curseg;
-    }
-
-    assert(dopartial ? (!cblk->curseg) : 1);
-
-premature_exit:
-    return 0;
-}
 
 /******************************************************************************\
 * Code for significance pass.
@@ -407,8 +198,34 @@ premature_exit:
     } \
 }
 
-static int dec_sigpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos, int orient,
-  int vcausalflag, jas_matrix_t *flags, jas_matrix_t *data)
+#define jpc_rawsigpass_step(fp, frowstep, dp, oneplushalf, in, vcausalflag) \
+{ \
+    jpc_fix_t f = *(fp); \
+    jpc_fix_t v; \
+    if ((f & JPC_OTHSIGMSK) && !(f & (JPC_SIG | JPC_VISIT))) { \
+        JPC_T1D_RAWGETBIT(in, v, "SIG", "ZC"); \
+        if (v < 0) { \
+            return -1; \
+        } \
+        if (v) { \
+            JPC_T1D_RAWGETBIT(in, v, "SIG", "SC"); \
+            if (v < 0) { \
+                return -1; \
+            } \
+            JPC_UPDATEFLAGS4((fp), (frowstep), v, (vcausalflag)); \
+            *(fp) |= JPC_SIG; \
+            *(dp) = v ? (-oneplushalf) : (oneplushalf); \
+        } \
+        *(fp) |= JPC_VISIT; \
+    } \
+}
+
+
+
+static int
+dec_sigpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos,
+            int orient,
+            int vcausalflag, jas_matrix_t *flags, jas_matrix_t *data)
 {
     int i;
     int j;
@@ -488,30 +305,12 @@ static int dec_sigpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos,
     return 0;
 }
 
-#define jpc_rawsigpass_step(fp, frowstep, dp, oneplushalf, in, vcausalflag) \
-{ \
-    jpc_fix_t f = *(fp); \
-    jpc_fix_t v; \
-    if ((f & JPC_OTHSIGMSK) && !(f & (JPC_SIG | JPC_VISIT))) { \
-        JPC_T1D_RAWGETBIT(in, v, "SIG", "ZC"); \
-        if (v < 0) { \
-            return -1; \
-        } \
-        if (v) { \
-            JPC_T1D_RAWGETBIT(in, v, "SIG", "SC"); \
-            if (v < 0) { \
-                return -1; \
-            } \
-            JPC_UPDATEFLAGS4((fp), (frowstep), v, (vcausalflag)); \
-            *(fp) |= JPC_SIG; \
-            *(dp) = v ? (-oneplushalf) : (oneplushalf); \
-        } \
-        *(fp) |= JPC_VISIT; \
-    } \
-}
 
-static int dec_rawsigpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos, int vcausalflag,
-  jas_matrix_t *flags, jas_matrix_t *data)
+
+static int
+dec_rawsigpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos,
+               int vcausalflag,
+               jas_matrix_t *flags, jas_matrix_t *data)
 {
     int i;
     int j;
@@ -592,6 +391,8 @@ static int dec_rawsigpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos, int v
     return 0;
 }
 
+
+
 /******************************************************************************\
 * Code for refinement pass.
 \******************************************************************************/
@@ -609,8 +410,11 @@ static int dec_rawsigpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos, int v
     } \
 }
 
-static int dec_refpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos,
-  int vcausalflag, jas_matrix_t *flags, jas_matrix_t *data)
+
+
+static int
+dec_refpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos,
+            int vcausalflag, jas_matrix_t *flags, jas_matrix_t *data)
 {
     int i;
     int j;
@@ -703,8 +507,12 @@ static int dec_refpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos,
     } \
 }
 
-static int dec_rawrefpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos, int vcausalflag,
-  jas_matrix_t *flags, jas_matrix_t *data)
+
+
+static int
+dec_rawrefpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos,
+               int vcausalflag,
+               jas_matrix_t *flags, jas_matrix_t *data)
 {
     int i;
     int j;
@@ -781,6 +589,8 @@ static int dec_rawrefpass(jpc_dec_t *dec, jpc_bitstream_t *in, int bitpos, int v
     return 0;
 }
 
+
+
 /******************************************************************************\
 * Code for cleanup pass.
 \******************************************************************************/
@@ -807,8 +617,10 @@ plabel \
     *(fp) &= ~JPC_VISIT; \
 }
 
-static int dec_clnpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos, int orient,
-  int vcausalflag, int segsymflag, jas_matrix_t *flags, jas_matrix_t *data)
+static int
+dec_clnpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos,
+            int orient, int vcausalflag, int segsymflag, jas_matrix_t *flags,
+            jas_matrix_t *data)
 {
     int i;
     int j;
@@ -952,3 +764,203 @@ static int dec_clnpass(jpc_dec_t *dec, register jpc_mqdec_t *mqdec, int bitpos,
 
     return 0;
 }
+
+
+
+static int
+jpc_dec_decodecblk(jpc_dec_t *dec, jpc_dec_tile_t *tile,
+                   jpc_dec_tcomp_t *tcomp, jpc_dec_band_t *band,
+  jpc_dec_cblk_t *cblk, int dopartial, int maxlyrs)
+{
+    jpc_dec_seg_t *seg;
+    int i;
+    int bpno;
+    int passtype;
+    int ret;
+    int compno;
+    int filldata;
+    int fillmask;
+    jpc_dec_ccp_t *ccp;
+
+    compno = tcomp - tile->tcomps;
+
+    if (!cblk->flags) {
+        /* Note: matrix is assumed to be zeroed */
+        if (!(cblk->flags = jas_matrix_create(jas_matrix_numrows(cblk->data) +
+          2, jas_matrix_numcols(cblk->data) + 2))) {
+            return -1;
+        }
+    }
+
+    seg = cblk->segs.head;
+    while (seg && (seg != cblk->curseg || dopartial) && (maxlyrs < 0 ||
+      seg->lyrno < maxlyrs)) {
+        assert(seg->numpasses >= seg->maxpasses || dopartial);
+        assert(seg->stream);
+        jas_stream_rewind(seg->stream);
+        jas_stream_setrwcount(seg->stream, 0);
+        if (seg->type == JPC_SEG_MQ) {
+            if (!cblk->mqdec) {
+                if (!(cblk->mqdec = jpc_mqdec_create(JPC_NUMCTXS, 0))) {
+                    return -1;
+                }
+                jpc_mqdec_setctxs(cblk->mqdec, JPC_NUMCTXS, jpc_mqctxs);
+            }
+            jpc_mqdec_setinput(cblk->mqdec, seg->stream);
+            jpc_mqdec_init(cblk->mqdec);
+        } else {
+            assert(seg->type == JPC_SEG_RAW);
+            if (!cblk->nulldec) {
+                if (!(cblk->nulldec = jpc_bitstream_sopen(seg->stream, "r"))) {
+                    assert(0);
+                }
+            }
+        }
+
+
+        for (i = 0; i < seg->numpasses; ++i) {
+            if (cblk->numimsbs > band->numbps) {
+                ccp = &tile->cp->ccps[compno];
+                if (ccp->roishift <= 0) {
+                    fprintf(stderr, "warning: corrupt code stream\n");
+                } else {
+                    if (cblk->numimsbs < ccp->roishift - band->numbps) {
+                        fprintf(stderr, "warning: corrupt code stream\n");
+                    }
+                }
+            }
+            bpno = band->roishift + band->numbps - 1 - (cblk->numimsbs +
+              (seg->passno + i - cblk->firstpassno + 2) / 3);
+if (bpno < 0) {
+    goto premature_exit;
+}
+#if 1
+            passtype = (seg->passno + i + 2) % 3;
+#else
+            passtype = JPC_PASSTYPE(seg->passno + i + 2);
+#endif
+            assert(bpno >= 0 && bpno < 31);
+            switch (passtype) {
+            case JPC_SIGPASS:
+                ret = (seg->type == JPC_SEG_MQ) ? dec_sigpass(dec,
+                  cblk->mqdec, bpno, band->orient,
+                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
+                  cblk->flags, cblk->data) :
+                  dec_rawsigpass(dec, cblk->nulldec, bpno,
+                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
+                  cblk->flags, cblk->data);
+                break;
+            case JPC_REFPASS:
+                ret = (seg->type == JPC_SEG_MQ) ?
+                  dec_refpass(dec, cblk->mqdec, bpno,
+                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
+                  cblk->flags, cblk->data) :
+                  dec_rawrefpass(dec, cblk->nulldec, bpno,
+                  (tile->cp->ccps[compno].cblkctx & JPC_COX_VSC) != 0,
+                  cblk->flags, cblk->data);
+                break;
+            case JPC_CLNPASS:
+                assert(seg->type == JPC_SEG_MQ);
+                ret = dec_clnpass(dec, cblk->mqdec, bpno,
+                  band->orient, (tile->cp->ccps[compno].cblkctx &
+                  JPC_COX_VSC) != 0, (tile->cp->ccps[compno].cblkctx &
+                  JPC_COX_SEGSYM) != 0, cblk->flags,
+                  cblk->data);
+                break;
+            default:
+                ret = -1;
+                break;
+            }
+            /* Do we need to reset after each coding pass? */
+            if (tile->cp->ccps[compno].cblkctx & JPC_COX_RESET) {
+                jpc_mqdec_setctxs(cblk->mqdec, JPC_NUMCTXS, jpc_mqctxs);
+            }
+
+            if (ret) {
+                fprintf(stderr, "coding pass failed passtype=%d segtype=%d\n", passtype, seg->type);
+                return -1;
+            }
+
+        }
+
+        if (seg->type == JPC_SEG_MQ) {
+/* Note: dont destroy mq decoder because context info will be lost */
+        } else {
+            assert(seg->type == JPC_SEG_RAW);
+            if (tile->cp->ccps[compno].cblkctx & JPC_COX_PTERM) {
+                fillmask = 0x7f;
+                filldata = 0x2a;
+            } else {
+                fillmask = 0;
+                filldata = 0;
+            }
+            if ((ret = jpc_bitstream_inalign(cblk->nulldec, fillmask,
+              filldata)) < 0) {
+                return -1;
+            } else if (ret > 0) {
+                fprintf(stderr, "warning: bad termination pattern detected\n");
+            }
+            jpc_bitstream_close(cblk->nulldec);
+            cblk->nulldec = 0;
+        }
+
+        cblk->curseg = seg->next;
+        jpc_seglist_remove(&cblk->segs, seg);
+        jpc_seg_destroy(seg);
+        seg = cblk->curseg;
+    }
+
+    assert(dopartial ? (!cblk->curseg) : 1);
+
+premature_exit:
+    return 0;
+}
+
+int
+jpc_dec_decodecblks(jpc_dec_t *dec, jpc_dec_tile_t *tile)
+{
+    jpc_dec_tcomp_t *tcomp;
+    int compcnt;
+    jpc_dec_rlvl_t *rlvl;
+    int rlvlcnt;
+    jpc_dec_band_t *band;
+    int bandcnt;
+    jpc_dec_prc_t *prc;
+    int prccnt;
+    jpc_dec_cblk_t *cblk;
+    int cblkcnt;
+
+    for (compcnt = dec->numcomps, tcomp = tile->tcomps; compcnt > 0;
+      --compcnt, ++tcomp) {
+        for (rlvlcnt = tcomp->numrlvls, rlvl = tcomp->rlvls;
+          rlvlcnt > 0; --rlvlcnt, ++rlvl) {
+            if (!rlvl->bands) {
+                continue;
+            }
+            for (bandcnt = rlvl->numbands, band = rlvl->bands;
+              bandcnt > 0; --bandcnt, ++band) {
+                if (!band->data) {
+                    continue;
+                }
+                for (prccnt = rlvl->numprcs, prc = band->prcs;
+                  prccnt > 0; --prccnt, ++prc) {
+                    if (!prc->cblks) {
+                        continue;
+                    }
+                    for (cblkcnt = prc->numcblks,
+                      cblk = prc->cblks; cblkcnt > 0;
+                      --cblkcnt, ++cblk) {
+                        if (jpc_dec_decodecblk(dec, tile, tcomp,
+                          band, cblk, 1, JPC_MAXLYRS)) {
+                            return -1;
+                        }
+                    }
+                }
+
+            }
+        }
+    }
+
+    return 0;
+}
+