T1: Transpose coder optimizations to decoder, and cleanup code
authorEven Rouault <even.rouault@spatialys.com>
Wed, 31 May 2017 12:35:56 +0000 (14:35 +0200)
committerEven Rouault <even.rouault@spatialys.com>
Fri, 2 Jun 2017 16:20:35 +0000 (18:20 +0200)
src/lib/openjp2/mqc.h
src/lib/openjp2/mqc_inl.h
src/lib/openjp2/t1.c
src/lib/openjp2/t1.h
src/lib/openjp2/t1_generate_luts.c
src/lib/openjp2/t1_luts.h

index f21d46ef2b52c9bd29dd19a51950bd931fa12bd5..4a3e3c88b6c5def72bff015bb5df145a3844c898 100644 (file)
@@ -77,7 +77,8 @@ typedef struct opj_mqc {
     OPJ_BYTE *end;
     opj_mqc_state_t *ctxs[MQC_NUMCTXS];
     opj_mqc_state_t **curctx;
-    const OPJ_BYTE *lut_ctxno_zc_orient; /* lut_ctxno_zc shifted by 256 * bandno */
+    /* lut_ctxno_zc shifted by (1 << 9) * bandno */
+    const OPJ_BYTE* lut_ctxno_zc_orient;
 } opj_mqc_t;
 
 #include "mqc_inl.h"
@@ -199,7 +200,7 @@ Decode a symbol
 @param mqc MQC handle
 @return Returns the decoded symbol (0 or 1)
 */
-static INLINE OPJ_INT32 opj_mqc_decode(opj_mqc_t * const mqc);
+static INLINE OPJ_UINT32 opj_mqc_decode(opj_mqc_t * const mqc);
 /* ----------------------------------------------------------------------- */
 /*@}*/
 
index ca3991d7ee60c5305c066f8572fd9d5f171e1104..451ce02d1d310bbaa654204d40c56706bd0a44eb 100644 (file)
@@ -43,14 +43,14 @@ FIXME DOC
 @param mqc MQC handle
 @return
 */
-static INLINE OPJ_INT32 opj_mqc_mpsexchange(opj_mqc_t *const mqc)
+static INLINE OPJ_UINT32 opj_mqc_mpsexchange(opj_mqc_t *const mqc)
 {
-    OPJ_INT32 d;
+    OPJ_UINT32 d;
     if (mqc->a < (*mqc->curctx)->qeval) {
-        d = (OPJ_INT32)(1 - (*mqc->curctx)->mps);
+        d = !((*mqc->curctx)->mps);
         *mqc->curctx = (*mqc->curctx)->nlps;
     } else {
-        d = (OPJ_INT32)(*mqc->curctx)->mps;
+        d = (*mqc->curctx)->mps;
         *mqc->curctx = (*mqc->curctx)->nmps;
     }
 
@@ -62,16 +62,16 @@ FIXME DOC
 @param mqc MQC handle
 @return
 */
-static INLINE OPJ_INT32 opj_mqc_lpsexchange(opj_mqc_t *const mqc)
+static INLINE OPJ_UINT32 opj_mqc_lpsexchange(opj_mqc_t *const mqc)
 {
-    OPJ_INT32 d;
+    OPJ_UINT32 d;
     if (mqc->a < (*mqc->curctx)->qeval) {
         mqc->a = (*mqc->curctx)->qeval;
-        d = (OPJ_INT32)(*mqc->curctx)->mps;
+        d = (*mqc->curctx)->mps;
         *mqc->curctx = (*mqc->curctx)->nmps;
     } else {
         mqc->a = (*mqc->curctx)->qeval;
-        d = (OPJ_INT32)(1 - (*mqc->curctx)->mps);
+        d = !((*mqc->curctx)->mps);
         *mqc->curctx = (*mqc->curctx)->nlps;
     }
 
@@ -136,13 +136,13 @@ Decode a symbol
 @param mqc MQC handle
 @return Returns the decoded symbol (0 or 1)
 */
-static INLINE OPJ_INT32 opj_mqc_decode(opj_mqc_t *const mqc)
+static INLINE OPJ_UINT32 opj_mqc_decode(opj_mqc_t *const mqc)
 {
     /* Implements ISO 15444-1 C.3.2 Decoding a decision (DECODE) */
     /* Note: alternate "J.2 - Decoding an MPS or an LPS in the */
     /* software-conventions decoder" has been tried, but does not bring any */
     /* improvement. See https://github.com/uclouvain/openjpeg/issues/921 */
-    OPJ_INT32 d;
+    OPJ_UINT32 d;
     mqc->a -= (*mqc->curctx)->qeval;
     if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {
         d = opj_mqc_lpsexchange(mqc);
@@ -153,7 +153,7 @@ static INLINE OPJ_INT32 opj_mqc_decode(opj_mqc_t *const mqc)
             d = opj_mqc_mpsexchange(mqc);
             opj_mqc_renormd(mqc);
         } else {
-            d = (OPJ_INT32)(*mqc->curctx)->mps;
+            d = (*mqc->curctx)->mps;
         }
     }
 
index 6f46bfa83ca1a9a81e132689cd481e438192c889..bfff8503d58d6d980c46ac157b4df19dc44b7ba7 100644 (file)
 #include "opj_includes.h"
 #include "t1_luts.h"
 
-/* #define CONSISTENCY_CHECK */
-
 /** @defgroup T1 T1 - Implementation of the tier-1 coding */
 /*@{*/
 
-#define ENC_FLAGS(x, y) (t1->enc_flags[x + 1 + ((y / 4) + 1) * t1->flags_stride])
+#define T1_FLAGS(x, y) (t1->flags[x + 1 + ((y / 4) + 1) * t1->flags_stride])
 
 /** @name Local static functions */
 /*@{*/
 
-static INLINE OPJ_BYTE opj_t1_enc_getctxno_zc(OPJ_UINT32 f, OPJ_UINT32 orient);
 static INLINE OPJ_BYTE opj_t1_getctxno_zc(opj_mqc_t *mqc, OPJ_UINT32 f);
-static INLINE OPJ_BYTE opj_t1_getctxno_sc(OPJ_UINT32 f);
-static INLINE OPJ_UINT32 opj_t1_enc_getctxno_mag(OPJ_UINT32 f);
-static INLINE OPJ_BYTE opj_t1_getspb(OPJ_UINT32 f);
+static INLINE OPJ_UINT32 opj_t1_getctxno_mag(OPJ_UINT32 f);
 static OPJ_INT16 opj_t1_getnmsedec_sig(OPJ_UINT32 x, OPJ_UINT32 bitpos);
 static OPJ_INT16 opj_t1_getnmsedec_ref(OPJ_UINT32 x, OPJ_UINT32 bitpos);
-static INLINE void opj_t1_enc_updateflags(opj_flag_enc_t *flagsp, OPJ_UINT32 ci,
-        OPJ_UINT32 s, OPJ_UINT32 stride);
-static INLINE void opj_t1_updateflags(opj_flag_t *flagsp, OPJ_UINT32 s,
-                                      OPJ_UINT32 stride);
+static INLINE void opj_t1_update_flags(opj_flag_t *flagsp, OPJ_UINT32 ci,
+                                       OPJ_UINT32 s, OPJ_UINT32 stride);
 
 
 /**
@@ -71,7 +64,6 @@ Decode significant pass
 static INLINE void opj_t1_dec_sigpass_step_raw(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t* colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_INT32 vsc,
@@ -79,7 +71,6 @@ static INLINE void opj_t1_dec_sigpass_step_raw(
 static INLINE void opj_t1_dec_sigpass_step_mqc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t* colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_UINT32 row,
@@ -87,7 +78,6 @@ static INLINE void opj_t1_dec_sigpass_step_mqc(
 static INLINE void opj_t1_dec_sigpass_step_mqc_vsc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t* colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_INT32 vsc,
@@ -99,7 +89,6 @@ Encode significant pass
 */
 static void opj_t1_enc_sigpass(opj_t1_t *t1,
                                OPJ_INT32 bpno,
-                               OPJ_UINT32 orient,
                                OPJ_INT32 *nmsedec,
                                OPJ_BYTE type,
                                OPJ_UINT32 cblksty);
@@ -143,7 +132,7 @@ Decode refinement pass
 
 static INLINE void  opj_t1_dec_refpass_step_raw(
     opj_t1_t *t1,
-    opj_colflag_t *colflagsp,
+    opj_flag_t *flagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 poshalf,
     OPJ_INT32 neghalf,
@@ -151,7 +140,6 @@ static INLINE void  opj_t1_dec_refpass_step_raw(
 static INLINE void opj_t1_dec_refpass_step_mqc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 poshalf,
     OPJ_INT32 neghalf,
@@ -159,7 +147,6 @@ static INLINE void opj_t1_dec_refpass_step_mqc(
 static INLINE void opj_t1_dec_refpass_step_mqc_vsc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 poshalf,
     OPJ_INT32 neghalf,
@@ -173,21 +160,18 @@ Decode clean-up pass
 static void opj_t1_dec_clnpass_step_partial(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_UINT32 row);
 static void opj_t1_dec_clnpass_step(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_UINT32 row);
 static void opj_t1_dec_clnpass_step_vsc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_INT32 partial,
@@ -199,7 +183,6 @@ Encode clean-up pass
 static void opj_t1_enc_clnpass(
     opj_t1_t *t1,
     OPJ_INT32 bpno,
-    OPJ_UINT32 orient,
     OPJ_INT32 *nmsedec,
     OPJ_UINT32 cblksty);
 
@@ -252,17 +235,12 @@ static OPJ_BOOL opj_t1_allocate_buffers(opj_t1_t *t1,
 
 /* ----------------------------------------------------------------------- */
 
-static INLINE OPJ_BYTE opj_t1_enc_getctxno_zc(OPJ_UINT32 f, OPJ_UINT32 orient)
+static INLINE OPJ_BYTE opj_t1_getctxno_zc(opj_mqc_t *mqc, OPJ_UINT32 f)
 {
-    return lut_enc_ctxno_zc[(orient << 9) | (f & T1_SIGMA_NEIGHBOURS)];
+    return mqc->lut_ctxno_zc_orient[(f & T1_SIGMA_NEIGHBOURS)];
 }
 
-static OPJ_BYTE opj_t1_getctxno_zc(opj_mqc_t *mqc, OPJ_UINT32 f)
-{
-    return mqc->lut_ctxno_zc_orient[(f & T1_SIG_OTH)];
-}
-
-static INLINE OPJ_UINT32 opj_t1_enc_getctxtno_sc_or_spb_index(OPJ_UINT32 fX,
+static INLINE OPJ_UINT32 opj_t1_getctxtno_sc_or_spb_index(OPJ_UINT32 fX,
         OPJ_UINT32 pfX,
         OPJ_UINT32 nfX,
         OPJ_UINT32 ci)
@@ -292,31 +270,21 @@ static INLINE OPJ_UINT32 opj_t1_enc_getctxtno_sc_or_spb_index(OPJ_UINT32 fX,
     return lu;
 }
 
-static INLINE OPJ_BYTE opj_t1_enc_getctxno_sc(OPJ_UINT32 lu)
+static INLINE OPJ_BYTE opj_t1_getctxno_sc(OPJ_UINT32 lu)
 {
-    return lut_enc_ctxno_sc[lu];
+    return lut_ctxno_sc[lu];
 }
 
-static INLINE  OPJ_BYTE opj_t1_getctxno_sc(OPJ_UINT32 f)
-{
-    return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
-}
-
-static INLINE OPJ_UINT32 opj_t1_enc_getctxno_mag(OPJ_UINT32 f)
+static INLINE OPJ_UINT32 opj_t1_getctxno_mag(OPJ_UINT32 f)
 {
     OPJ_UINT32 tmp = (f & T1_SIGMA_NEIGHBOURS) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
     OPJ_UINT32 tmp2 = (f & T1_MU_0) ? T1_CTXNO_MAG + 2 : tmp;
     return tmp2;
 }
 
-static INLINE OPJ_BYTE opj_t1_enc_getspb(OPJ_UINT32 lu)
-{
-    return lut_enc_spb[lu];
-}
-
-static INLINE OPJ_BYTE opj_t1_getspb(OPJ_UINT32 f)
+static INLINE OPJ_BYTE opj_t1_getspb(OPJ_UINT32 lu)
 {
-    return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
+    return lut_spb[lu];
 }
 
 static OPJ_INT16 opj_t1_getnmsedec_sig(OPJ_UINT32 x, OPJ_UINT32 bitpos)
@@ -338,12 +306,12 @@ static OPJ_INT16 opj_t1_getnmsedec_ref(OPJ_UINT32 x, OPJ_UINT32 bitpos)
 }
 
 
-static INLINE void opj_t1_enc_updateflags(opj_flag_enc_t *flagsp, OPJ_UINT32 ci,
-        OPJ_UINT32 s, OPJ_UINT32 stride)
+static INLINE void opj_t1_update_flags(opj_flag_t *flagsp, OPJ_UINT32 ci,
+                                       OPJ_UINT32 s, OPJ_UINT32 stride)
 {
     /* set up to point to the north and south data points' flags words, if required */
-    opj_flag_enc_t* north;
-    opj_flag_enc_t* south;
+    opj_flag_t* north;
+    opj_flag_t* south;
 
     /* mark target as significant */
     *flagsp |= T1_SIGMA_4 << (3U * ci);
@@ -395,83 +363,12 @@ static INLINE void opj_t1_enc_updateflags(opj_flag_enc_t *flagsp, OPJ_UINT32 ci,
     }
 }
 
-static INLINE void opj_t1_updateflags(opj_flag_t *flagsp, OPJ_UINT32 s,
-                                      OPJ_UINT32 stride)
-{
-    opj_flag_t *np = flagsp - stride;
-    opj_flag_t *sp = flagsp + stride;
-
-    /* We strongly rely on (T1_SGN_N == 0x0100) == (T1_SIG_N == 0x0010) << 4 */
-    /* and T1_SIG_E == T1_SIG_N << 1, T1_SIG_W == T1_SIG_N << 2 and T1_SIG_S == T1_SIG_N << 2 */
-    /* and T1_SGN_E == T1_SGN_N << 1, T1_SGN_W == T1_SGN_N << 2 and T1_SGN_S == T1_SGN_N << 2 */
-
-    unsigned int flag_N = T1_SIG_N | ((unsigned int)T1_SIG_N << (4U * s));
-
-    np[-1] |= T1_SIG_SE;
-    np[0]  |= (opj_flag_t)(flag_N << 2U);
-    np[1]  |= T1_SIG_SW;
-
-    flagsp[-1] |= (opj_flag_t)(flag_N << 1U);
-#ifdef CONSISTENCY_CHECK
-    flagsp[0]  |= T1_SIG;
-#endif
-    flagsp[1]  |= (opj_flag_t)(flag_N << 3U);
-
-    sp[-1] |= T1_SIG_NE;
-    sp[0]  = (opj_flag_t)(sp[0] | flag_N);
-    sp[1]  |= T1_SIG_NW;
-}
-
-static INLINE void opj_t1_updateflagscolflags(opj_flag_t *flagsp,
-        opj_colflag_t *colflagsp, OPJ_UINT32 s, OPJ_UINT32 stride, OPJ_UINT32 row)
-{
-    opj_t1_updateflags(flagsp, s, stride);
-    if (row == 0U) {
-        *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
-        *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
-                                             (T1_COLFLAG_RBS * row)) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
-        *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
-                                             (T1_COLFLAG_RBS * row)) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
-        *(colflagsp - stride - 1) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
-        *(colflagsp - stride) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
-        *(colflagsp - stride + 1) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
-    } else if (row == 3U) {
-        *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))));
-        *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
-                                             (T1_COLFLAG_RBS * row)) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))));
-        *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
-                                             (T1_COLFLAG_RBS * row)) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1))));
-        *(colflagsp + stride - 1) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
-        *(colflagsp + stride) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
-        *(colflagsp + stride + 1) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
-    } else {
-        *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
-                                             (T1_COLFLAG_RBS * row)) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
-        *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))) |
-                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
-        *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
-                                             (T1_COLFLAG_RBS * row)) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))) |
-                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
-    }
-}
-
 /**
 Encode significant pass
 */
 static INLINE void opj_t1_enc_sigpass_step(opj_t1_t *t1,
-        opj_flag_enc_t *flagsp,
+        opj_flag_t *flagsp,
         OPJ_INT32 *datap,
-        OPJ_UINT32 orient,
         OPJ_INT32 bpno,
         OPJ_INT32 one,
         OPJ_INT32 *nmsedec,
@@ -490,13 +387,12 @@ static INLINE void opj_t1_enc_sigpass_step(opj_t1_t *t1,
 
     if ((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) == 0U &&
             (flags & (T1_SIGMA_NEIGHBOURS << (ci * 3U))) != 0U) {
-        OPJ_UINT32 ctxt1 = opj_t1_enc_getctxno_zc(flags >> (ci * 3U),
-                           orient);
+        OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, flags >> (ci * 3U));
         v = opj_int_abs(*datap) & one ? 1 : 0;
 #ifdef DEBUG_ENC_SIG
         fprintf(stderr, "   ctxt1=%d\n", ctxt1);
 #endif
-        opj_mqc_setcurctx(mqc, ctxt1);  /* ESSAI */
+        opj_mqc_setcurctx(mqc, ctxt1);
         if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
             opj_mqc_bypass_enc(mqc, v);
         } else {
@@ -505,28 +401,28 @@ static INLINE void opj_t1_enc_sigpass_step(opj_t1_t *t1,
         if (v) {
             /* Note: using flags instead of *flagsp & vsc_mask result */
             /* in slow down. Probably because of register pressure */
-            OPJ_UINT32 lu = opj_t1_enc_getctxtno_sc_or_spb_index(
+            OPJ_UINT32 lu = opj_t1_getctxtno_sc_or_spb_index(
                                 *flagsp & vsc_mask,
                                 flagsp[-1] & vsc_mask, flagsp[1] & vsc_mask,
                                 ci);
-            OPJ_UINT32 ctxt2 = opj_t1_enc_getctxno_sc(lu);
+            OPJ_UINT32 ctxt2 = opj_t1_getctxno_sc(lu);
             v = *datap < 0 ? 1 : 0;
             *nmsedec += opj_t1_getnmsedec_sig((OPJ_UINT32)opj_int_abs(*datap),
                                               (OPJ_UINT32)bpno);
 #ifdef DEBUG_ENC_SIG
             fprintf(stderr, "   ctxt2=%d\n", ctxt2);
 #endif
-            opj_mqc_setcurctx(mqc, ctxt2); /* ESSAI */
+            opj_mqc_setcurctx(mqc, ctxt2);
             if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
                 opj_mqc_bypass_enc(mqc, v);
             } else {
-                OPJ_UINT32 spb = opj_t1_enc_getspb(lu);
+                OPJ_UINT32 spb = opj_t1_getspb(lu);
 #ifdef DEBUG_ENC_SIG
                 fprintf(stderr, "   spb=%d\n", spb);
 #endif
                 opj_mqc_encode(mqc, v ^ spb);
             }
-            opj_t1_enc_updateflags(flagsp, ci, v, t1->flags_stride);
+            opj_t1_update_flags(flagsp, ci, v, t1->flags_stride);
         }
         *flagsp |= T1_PI_THIS << (ci * 3U);
     }
@@ -535,107 +431,101 @@ static INLINE void opj_t1_enc_sigpass_step(opj_t1_t *t1,
 static INLINE void opj_t1_dec_sigpass_step_raw(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t* colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_INT32 vsc,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
-    OPJ_UINT32 v, flag;
+    OPJ_UINT32 v;
     opj_raw_t *raw = t1->raw;       /* RAW component */
 
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & T1_SIG_OTH) &&
-            !(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                            (T1_COLFLAG_RBS * row)))) {
+    OPJ_UINT32 vsc_mask = vsc ? ~((T1_SIGMA_SW | T1_SIGMA_S | T1_SIGMA_SE |
+                                   T1_CHI_S) << (ci * 3U)) : ~0U;
+    OPJ_UINT32 const flags = *flagsp & vsc_mask;
+
+    if ((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) == 0U &&
+            (flags & (T1_SIGMA_NEIGHBOURS << (ci * 3U))) != 0U) {
         if (opj_raw_decode(raw)) {
-            v = opj_raw_decode(raw);    /* ESSAI */
+            v = opj_raw_decode(raw);
             *datap = v ? -oneplushalf : oneplushalf;
-            opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
+            opj_t1_update_flags(flagsp, ci, v, t1->flags_stride);
         }
-#ifdef CONSISTENCY_CHECK
-        *flagsp |= T1_VISIT;
-#endif
-        *colflagsp = (opj_colflag_t)(*colflagsp | (T1_COLFLAG_VISIT_ROW_0 <<
-                                     (T1_COLFLAG_RBS * row)));
+        *flagsp |= T1_PI_THIS << (ci * 3U);
     }
 }
 
 static INLINE void opj_t1_dec_sigpass_step_mqc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t* colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
-    OPJ_UINT32 row,
+    OPJ_UINT32 ci,
     OPJ_UINT32 flags_stride)
 {
-    OPJ_INT32 v, flag;
+    OPJ_UINT32 v;
 
     opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-#ifdef CONSISTENCY_CHECK
-    assert(((*flagsp & T1_SIG_OTH) && !(*flagsp & (T1_SIG | T1_VISIT))) ==
-           ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 |
-                            T1_COLFLAG_SIG_OTHER_ROW_0) << (T1_COLFLAG_RBS * row))) ==
-            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row))));
-#endif
-    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 |
-                        T1_COLFLAG_SIG_OTHER_ROW_0) << (T1_COLFLAG_RBS * row))) ==
-            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row))) {
-        flag = *flagsp;
-        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, (OPJ_UINT32)flag));
+    OPJ_UINT32 const flags = *flagsp;
+
+    if ((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) == 0U &&
+            (flags & (T1_SIGMA_NEIGHBOURS << (ci * 3U))) != 0U) {
+        OPJ_UINT32 lu = opj_t1_getctxtno_sc_or_spb_index(
+                            *flagsp,
+                            flagsp[-1], flagsp[1],
+                            ci);
+        OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, flags >> (ci * 3U));
+        opj_mqc_setcurctx(mqc, ctxt1);
         if (opj_mqc_decode(mqc)) {
-            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
-            v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
+            OPJ_UINT32 ctxt2 = opj_t1_getctxno_sc(lu);
+            OPJ_UINT32 spb = opj_t1_getspb(lu);
+            opj_mqc_setcurctx(mqc, ctxt2);
+            v = opj_mqc_decode(mqc) ^ spb;
             *datap = v ? -oneplushalf : oneplushalf;
-            opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, flags_stride, row);
+            opj_t1_update_flags(flagsp, ci, v, flags_stride);
         }
-#ifdef CONSISTENCY_CHECK
-        *flagsp |= T1_VISIT;
-#endif
-        *colflagsp = (opj_colflag_t)(*colflagsp | (T1_COLFLAG_VISIT_ROW_0 <<
-                                     (T1_COLFLAG_RBS * row)));
+        *flagsp |= T1_PI_THIS << (ci * 3U);
     }
-}                               /* VSC and  BYPASS by Antonin */
+}
 
 static INLINE void opj_t1_dec_sigpass_step_mqc_vsc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t* colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_INT32 vsc,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
-    OPJ_UINT32 v, flag;
+    OPJ_UINT32 v;
 
     opj_mqc_t *mqc = t1->mqc;       /* MQC component */
 
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
-    if ((flag & T1_SIG_OTH) &&
-            !(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                            (T1_COLFLAG_RBS * row)))) {
-        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
+    OPJ_UINT32 vsc_mask = vsc ? ~((T1_SIGMA_SW | T1_SIGMA_S | T1_SIGMA_SE |
+                                   T1_CHI_S) << (ci * 3U)) : ~0U;
+    OPJ_UINT32 const flags = *flagsp & vsc_mask;
+
+    if ((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) == 0U &&
+            (flags & (T1_SIGMA_NEIGHBOURS << (ci * 3U))) != 0U) {
+        OPJ_UINT32 lu = opj_t1_getctxtno_sc_or_spb_index(
+                            *flagsp & vsc_mask,
+                            flagsp[-1] & vsc_mask, flagsp[1] & vsc_mask,
+                            ci);
+        OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, flags >> (ci * 3U));
+        opj_mqc_setcurctx(mqc, ctxt1);
         if (opj_mqc_decode(mqc)) {
-            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
-            v = (OPJ_UINT32)opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
+            OPJ_UINT32 ctxt2 = opj_t1_getctxno_sc(lu);
+            OPJ_UINT32 spb = opj_t1_getspb(lu);
+            opj_mqc_setcurctx(mqc, ctxt2);
+            v = opj_mqc_decode(mqc) ^ spb;
             *datap = v ? -oneplushalf : oneplushalf;
-            opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
+            opj_t1_update_flags(flagsp, ci, v, t1->flags_stride);
         }
-#ifdef CONSISTENCY_CHECK
-        *flagsp |= T1_VISIT;
-#endif
-        *colflagsp = (opj_colflag_t)(*colflagsp | (T1_COLFLAG_VISIT_ROW_0 <<
-                                     (T1_COLFLAG_RBS * row)));
+        *flagsp |= T1_PI_THIS << (ci * 3U);
     }
-}                               /* VSC and  BYPASS by Antonin */
+}
 
 
 static void opj_t1_enc_sigpass(opj_t1_t *t1,
                                OPJ_INT32 bpno,
-                               OPJ_UINT32 orient,
                                OPJ_INT32 *nmsedec,
                                OPJ_BYTE type,
                                OPJ_UINT32 cblksty
@@ -643,7 +533,7 @@ static void opj_t1_enc_sigpass(opj_t1_t *t1,
 {
     OPJ_UINT32 i, k;
     OPJ_INT32 const one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    opj_flag_enc_t* f = &ENC_FLAGS(0, 0);
+    opj_flag_t* f = &T1_FLAGS(0, 0);
     OPJ_UINT32 const extra = t1->flags_stride - t1->w;
 
     *nmsedec = 0;
@@ -667,7 +557,6 @@ static void opj_t1_enc_sigpass(opj_t1_t *t1,
                 t1,
                 f,
                 &t1->data[((k + 0) * t1->data_stride) + i],
-                orient,
                 bpno,
                 one,
                 nmsedec,
@@ -677,7 +566,6 @@ static void opj_t1_enc_sigpass(opj_t1_t *t1,
                 t1,
                 f,
                 &t1->data[((k + 1) * t1->data_stride) + i],
-                orient,
                 bpno,
                 one,
                 nmsedec,
@@ -687,7 +575,6 @@ static void opj_t1_enc_sigpass(opj_t1_t *t1,
                 t1,
                 f,
                 &t1->data[((k + 2) * t1->data_stride) + i],
-                orient,
                 bpno,
                 one,
                 nmsedec,
@@ -697,7 +584,6 @@ static void opj_t1_enc_sigpass(opj_t1_t *t1,
                 t1,
                 f,
                 &t1->data[((k + 3) * t1->data_stride) + i],
-                orient,
                 bpno,
                 one,
                 nmsedec,
@@ -727,7 +613,6 @@ static void opj_t1_enc_sigpass(opj_t1_t *t1,
                     t1,
                     f,
                     &t1->data[(j * t1->data_stride) + i],
-                    orient,
                     bpno,
                     one,
                     nmsedec,
@@ -747,70 +632,60 @@ static void opj_t1_dec_sigpass_raw(
 {
     OPJ_INT32 one, half, oneplushalf, vsc;
     OPJ_UINT32 i, j, k;
-    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    opj_flag_t *flagsp = &T1_FLAGS(0, 0);
     one = 1 << bpno;
     half = one >> 1;
     oneplushalf = one | half;
     for (k = 0; k < t1->h; k += 4) {
         for (i = 0; i < t1->w; ++i) {
-            opj_colflag_t *colflags2 = colflags1 + i;
+            opj_flag_t *flagsp2 = flagsp + i;
             for (j = k; j < k + 4 && j < t1->h; ++j) {
                 vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
                         j == t1->h - 1)) ? 1 : 0;
                 opj_t1_dec_sigpass_step_raw(
                     t1,
-                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                    colflags2,
+                    flagsp2,
                     &t1->data[(j * t1->w) + i],
                     oneplushalf,
                     vsc,
                     j - k);
             }
         }
-        colflags1 += t1->flags_stride;
+        flagsp += t1->flags_stride;
     }
-}                               /* VSC and  BYPASS by Antonin */
+}
 
 #define opj_t1_dec_sigpass_mqc_internal(t1, bpno, w, h, flags_stride) \
 { \
         OPJ_INT32 one, half, oneplushalf; \
         OPJ_UINT32 i, j, k; \
         OPJ_INT32 *data1 = t1->data; \
-        opj_flag_t *flags1 = &t1->flags[1]; \
-        opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
+        opj_flag_t *flagsp1 = &t1->flags[flags_stride + 1]; \
         one = 1 << bpno; \
         half = one >> 1; \
         oneplushalf = one | half; \
         for (k = 0; k < (h & ~3u); k += 4) { \
                 for (i = 0; i < w; ++i) { \
                         OPJ_INT32 *data2 = data1 + i; \
-                        opj_flag_t *flags2 = flags1 + i; \
-                        opj_colflag_t *colflags2 = colflags1 + i; \
-                        if( *colflags2 == 0 ) continue; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_sigpass_step_mqc(t1, flags2, colflags2, data2, oneplushalf, 0U, flags_stride); \
+                        opj_flag_t *flagsp2 = flagsp1 + i; \
+                        if( *flagsp2 == 0 ) continue; \
+                        opj_t1_dec_sigpass_step_mqc(t1, flagsp2, data2, oneplushalf, 0U, flags_stride); \
                         data2 += w; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_sigpass_step_mqc(t1, flags2, colflags2, data2, oneplushalf, 1U, flags_stride); \
+                        opj_t1_dec_sigpass_step_mqc(t1, flagsp2, data2, oneplushalf, 1U, flags_stride); \
                         data2 += w; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_sigpass_step_mqc(t1, flags2, colflags2, data2, oneplushalf, 2U, flags_stride); \
+                        opj_t1_dec_sigpass_step_mqc(t1, flagsp2, data2, oneplushalf, 2U, flags_stride); \
                         data2 += w; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_sigpass_step_mqc(t1, flags2, colflags2, data2, oneplushalf, 3U, flags_stride); \
+                        opj_t1_dec_sigpass_step_mqc(t1, flagsp2, data2, oneplushalf, 3U, flags_stride); \
                         data2 += w; \
                 } \
                 data1 += w << 2; \
-                flags1 += flags_stride << 2; \
-                colflags1 += flags_stride; \
+                flagsp1 += flags_stride; \
         } \
         for (i = 0; i < w; ++i) { \
                 OPJ_INT32 *data2 = data1 + i; \
-                opj_flag_t *flags2 = flags1 + i; \
-                opj_colflag_t *colflags2 = colflags1 + i; \
+                opj_flag_t *flagsp2 = flagsp1 + i; \
                 for (j = k; j < h; ++j) { \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_sigpass_step_mqc(t1, flags2, colflags2, data2, oneplushalf, j - k, flags_stride); \
+                        opj_t1_dec_sigpass_step_mqc(t1, flagsp2, data2, oneplushalf, j - k, flags_stride); \
                         data2 += w; \
                 } \
         } \
@@ -830,7 +705,6 @@ static void opj_t1_dec_sigpass_mqc_generic(
     opj_t1_dec_sigpass_mqc_internal(t1, bpno, t1->w, t1->h, t1->flags_stride);
 }
 
-/* VSC and  BYPASS by Antonin */
 static void opj_t1_dec_sigpass_mqc_vsc(
     opj_t1_t *t1,
     OPJ_INT32 bpno)
@@ -838,67 +712,54 @@ static void opj_t1_dec_sigpass_mqc_vsc(
     OPJ_INT32 one, half, oneplushalf, vsc;
     OPJ_UINT32 i, j, k;
     OPJ_INT32 *data1 = t1->data;
-    opj_flag_t *flags1 = &t1->flags[1];
-    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    opj_flag_t *flagsp1 = &T1_FLAGS(0, 0);
     one = 1 << bpno;
     half = one >> 1;
     oneplushalf = one | half;
-    for (k = 0; k < (t1->h & ~(OPJ_UINT32)3); k += 4U) {
+    for (k = 0; k < (t1->h & ~3U); k += 4U) {
         for (i = 0; i < t1->w; ++i) {
             OPJ_INT32 *data2 = data1 + i;
-            opj_flag_t *flags2 = flags1 + i;
-            opj_colflag_t *colflags2 = colflags1 + i;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0,
-                                            0U);
+            opj_flag_t *flagsp2 = flagsp1 + i;
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flagsp2, data2, oneplushalf, 0, 0U);
             data2 += t1->w;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0,
-                                            1U);
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flagsp2, data2, oneplushalf, 0, 1U);
             data2 += t1->w;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0,
-                                            2U);
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flagsp2, data2, oneplushalf, 0, 2U);
             data2 += t1->w;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 1,
-                                            3U);
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flagsp2, data2, oneplushalf, 1, 3U);
             data2 += t1->w;
         }
         data1 += t1->w << 2;
-        flags1 += t1->flags_stride << 2;
-        colflags1 += t1->flags_stride;
+        flagsp1 += t1->flags_stride;
     }
     for (i = 0; i < t1->w; ++i) {
-        opj_colflag_t *colflags2 = colflags1 + i;
+        opj_flag_t *flagsp2 = flagsp1 + i;
         for (j = k; j < t1->h; ++j) {
             vsc = (j == t1->h - 1) ? 1 : 0;
             opj_t1_dec_sigpass_step_mqc_vsc(
                 t1,
-                &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                colflags2,
+                flagsp2,
                 &t1->data[(j * t1->w) + i],
                 oneplushalf,
                 vsc,
                 j - k);
         }
     }
-}                               /* VSC and  BYPASS by Antonin */
+}
 
 
 /**
 Encode refinement pass step
 */
 static INLINE void opj_t1_enc_refpass_step(opj_t1_t *t1,
-        opj_flag_enc_t *flagsp,
+        opj_flag_t *flagsp,
         OPJ_INT32 *datap,
         OPJ_INT32 bpno,
         OPJ_INT32 one,
         OPJ_INT32 *nmsedec,
         OPJ_BYTE type,
         OPJ_UINT32 ci,
-        OPJ_UINT32 vsc
-                                          )
+        OPJ_UINT32 vsc)
 {
     OPJ_UINT32 v;
 
@@ -911,14 +772,14 @@ static INLINE void opj_t1_enc_refpass_step(opj_t1_t *t1,
         (*flagsp >> (ci * 3U));
 
     if ((shift_flags & (T1_SIGMA_THIS | T1_PI_THIS)) == T1_SIGMA_THIS) {
-        OPJ_UINT32 ctxt = opj_t1_enc_getctxno_mag(shift_flags);
+        OPJ_UINT32 ctxt = opj_t1_getctxno_mag(shift_flags);
         *nmsedec += opj_t1_getnmsedec_ref((OPJ_UINT32)opj_int_abs(*datap),
                                           (OPJ_UINT32)bpno);
         v = opj_int_abs(*datap) & one ? 1 : 0;
 #ifdef DEBUG_ENC_REF
         fprintf(stderr, "  ctxt=%d\n", ctxt);
 #endif
-        opj_mqc_setcurctx(mqc, ctxt);   /* ESSAI */
+        opj_mqc_setcurctx(mqc, ctxt);
         if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
             opj_mqc_bypass_enc(mqc, v);
         } else {
@@ -931,98 +792,79 @@ static INLINE void opj_t1_enc_refpass_step(opj_t1_t *t1,
 
 static INLINE void opj_t1_dec_refpass_step_raw(
     opj_t1_t *t1,
-    opj_colflag_t *colflagsp,
+    opj_flag_t *flagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 poshalf,
     OPJ_INT32 neghalf,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
     OPJ_INT32 v, t;
 
     opj_raw_t *raw = t1->raw;       /* RAW component */
 
-    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                       (T1_COLFLAG_RBS * row))) ==
-            ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) {
+    if ((*flagsp & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) ==
+            (T1_SIGMA_THIS << (ci * 3U))) {
         v = (OPJ_INT32)opj_raw_decode(raw);
         t = v ? poshalf : neghalf;
         *datap += *datap < 0 ? -t : t;
-        *colflagsp = (opj_colflag_t)(*colflagsp | (T1_COLFLAG_REFINE_ROW_0 <<
-                                     (T1_COLFLAG_RBS * row)));
+        *flagsp |= T1_MU_THIS << (ci * 3U);
     }
-}                               /* VSC and  BYPASS by Antonin  */
+}
 
 static INLINE void opj_t1_dec_refpass_step_mqc(
     opj_t1_t *t1,
-#ifdef CONSISTENCY_CHECK
     opj_flag_t *flagsp,
-#else
-    opj_flag_t *flagsp_unused,
-#endif
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 poshalf,
     OPJ_INT32 neghalf,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
-    OPJ_INT32 v, t;
+    OPJ_UINT32 v;
+    OPJ_INT32 t;
 
     opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-#ifdef CONSISTENCY_CHECK
-    assert(((*flagsp & (T1_SIG | T1_VISIT)) == T1_SIG) ==
-           ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                           (T1_COLFLAG_RBS * row))) == ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS *
-                                   row))));
-#else
-    (void)flagsp_unused;
-#endif
-    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                       (T1_COLFLAG_RBS * row))) ==
-            ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) {
-        OPJ_UINT32 tmp1 = (*colflagsp & (T1_COLFLAG_SIG_OTHER_ROW_0 <<
-                                         (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
-        OPJ_UINT32 tmp2 = (*colflagsp & (T1_COLFLAG_REFINE_ROW_0 <<
-                                         (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 2 : tmp1;
-        opj_mqc_setcurctx(mqc, tmp2);      /* ESSAI */
+
+    if ((*flagsp & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) ==
+            (T1_SIGMA_THIS << (ci * 3U))) {
+        OPJ_UINT32 ctxt = opj_t1_getctxno_mag(*flagsp >> (ci * 3U));
+        opj_mqc_setcurctx(mqc, ctxt);
         v = opj_mqc_decode(mqc);
         t = v ? poshalf : neghalf;
         *datap += *datap < 0 ? -t : t;
-        *colflagsp = (opj_colflag_t)(*colflagsp | (T1_COLFLAG_REFINE_ROW_0 <<
-                                     (T1_COLFLAG_RBS * row)));
+        *flagsp |= T1_MU_THIS << (ci * 3U);
     }
-}                               /* VSC and  BYPASS by Antonin  */
+}
 
 static INLINE void opj_t1_dec_refpass_step_mqc_vsc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 poshalf,
     OPJ_INT32 neghalf,
     OPJ_INT32 vsc,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
     OPJ_UINT32 v;
     OPJ_INT32 t;
 
     opj_mqc_t *mqc = t1->mqc;       /* MQC component */
 
-    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                       (T1_COLFLAG_RBS * row))) ==
-            ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) {
-        OPJ_UINT32 flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |
-                                                T1_SGN_S))) : (*flagsp);
-        OPJ_UINT32 tmp1 = (flag & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
-        OPJ_UINT32 tmp2 = (*colflagsp & (T1_COLFLAG_REFINE_ROW_0 <<
-                                         (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 2U : tmp1;
-        opj_mqc_setcurctx(mqc, tmp2);      /* ESSAI */
-        v = (OPJ_UINT32)opj_mqc_decode(mqc);
+    OPJ_UINT32 const shift_flags =
+        vsc ?
+        ((*flagsp >> (ci * 3U)) & ~(T1_SIGMA_SW | T1_SIGMA_S | T1_SIGMA_SE | T1_CHI_S))
+        :
+        (*flagsp >> (ci * 3U));
+
+
+    if ((shift_flags & (T1_SIGMA_THIS | T1_PI_THIS)) == T1_SIGMA_THIS) {
+        OPJ_UINT32 ctxt = opj_t1_getctxno_mag(shift_flags);
+        opj_mqc_setcurctx(mqc, ctxt);
+        v = opj_mqc_decode(mqc);
         t = v ? poshalf : neghalf;
         *datap += *datap < 0 ? -t : t;
-        *colflagsp = (opj_colflag_t)(*colflagsp | (T1_COLFLAG_REFINE_ROW_0 <<
-                                     (T1_COLFLAG_RBS * row)));
+        *flagsp |= T1_MU_THIS << (ci * 3U);
     }
-}                               /* VSC and  BYPASS by Antonin  */
+}
 
 static void opj_t1_enc_refpass(
     opj_t1_t *t1,
@@ -1033,7 +875,7 @@ static void opj_t1_enc_refpass(
 {
     OPJ_UINT32 i, k;
     const OPJ_INT32 one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-    opj_flag_enc_t* f = &ENC_FLAGS(0, 0);
+    opj_flag_t* f = &T1_FLAGS(0, 0);
     const OPJ_UINT32 extra = t1->flags_stride - t1->w;
 
     *nmsedec = 0;
@@ -1139,66 +981,57 @@ static void opj_t1_dec_refpass_raw(
 {
     OPJ_INT32 one, poshalf, neghalf;
     OPJ_UINT32 i, j, k;
-    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    opj_flag_t *flagsp1 = &T1_FLAGS(0, 0);
     one = 1 << bpno;
     poshalf = one >> 1;
     neghalf = bpno > 0 ? -poshalf : -1;
     for (k = 0; k < t1->h; k += 4) {
         for (i = 0; i < t1->w; ++i) {
-            opj_colflag_t *colflags2 = colflags1 + i;
+            opj_flag_t *flagsp2 = flagsp1 + i;
             for (j = k; j < k + 4 && j < t1->h; ++j) {
                 opj_t1_dec_refpass_step_raw(
                     t1,
-                    colflags2,
+                    flagsp2,
                     &t1->data[(j * t1->w) + i],
                     poshalf,
                     neghalf, j - k);
             }
         }
-        colflags1 += t1->flags_stride;
+        flagsp1 += t1->flags_stride;
     }
-}                               /* VSC and  BYPASS by Antonin */
+}
 
 #define opj_t1_dec_refpass_mqc_internal(t1, bpno, w, h, flags_stride) \
 { \
         OPJ_INT32 one, poshalf, neghalf; \
         OPJ_UINT32 i, j, k; \
         OPJ_INT32 *data1 = t1->data; \
-        opj_flag_t *flags1 = &t1->flags[1]; \
-        opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
+        opj_flag_t *flagsp1 = &t1->flags[flags_stride + 1]; \
         one = 1 << bpno; \
         poshalf = one >> 1; \
         neghalf = bpno > 0 ? -poshalf : -1; \
         for (k = 0; k < (h & ~3u); k += 4) { \
                 for (i = 0; i < w; ++i) { \
                         OPJ_INT32 *data2 = data1 + i; \
-                        opj_flag_t *flags2 = flags1 + i; \
-                        opj_colflag_t *colflags2 = colflags1 + i; \
-                        if( *colflags2 == 0 ) continue; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_refpass_step_mqc(t1, flags2, colflags2, data2, poshalf, neghalf, 0U); \
+                        opj_flag_t *flagsp2 = flagsp1 + i; \
+                        if( *flagsp2 == 0 ) continue; \
+                        opj_t1_dec_refpass_step_mqc(t1, flagsp2, data2, poshalf, neghalf, 0U); \
                         data2 += w; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_refpass_step_mqc(t1, flags2, colflags2, data2, poshalf, neghalf, 1U); \
+                        opj_t1_dec_refpass_step_mqc(t1, flagsp2, data2, poshalf, neghalf, 1U); \
                         data2 += w; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_refpass_step_mqc(t1, flags2, colflags2, data2, poshalf, neghalf, 2U); \
+                        opj_t1_dec_refpass_step_mqc(t1, flagsp2, data2, poshalf, neghalf, 2U); \
                         data2 += w; \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_refpass_step_mqc(t1, flags2, colflags2, data2, poshalf, neghalf, 3U); \
+                        opj_t1_dec_refpass_step_mqc(t1, flagsp2, data2, poshalf, neghalf, 3U); \
                         data2 += w; \
                 } \
                 data1 += w << 2; \
-                flags1 += flags_stride << 2; \
-                colflags1 += flags_stride; \
+                flagsp1 += flags_stride; \
         } \
         for (i = 0; i < w; ++i) { \
                 OPJ_INT32 *data2 = data1 + i; \
-                opj_flag_t *flags2 = flags1 + i; \
-                opj_colflag_t *colflags2 = colflags1 + i; \
+                opj_flag_t *flagsp2 = flagsp1 + i; \
                 for (j = k; j < h; ++j) { \
-                        flags2 += flags_stride; \
-                        opj_t1_dec_refpass_step_mqc(t1, flags2, colflags2, data2, poshalf, neghalf, j - k); \
+                        opj_t1_dec_refpass_step_mqc(t1, flagsp2, data2, poshalf, neghalf, j - k); \
                         data2 += w; \
                 } \
         } \
@@ -1218,7 +1051,6 @@ static void opj_t1_dec_refpass_mqc_generic(
     opj_t1_dec_refpass_mqc_internal(t1, bpno, t1->w, t1->h, t1->flags_stride);
 }
 
-/* VSC and  BYPASS by Antonin */
 static void opj_t1_dec_refpass_mqc_vsc(
     opj_t1_t *t1,
     OPJ_INT32 bpno)
@@ -1227,61 +1059,52 @@ static void opj_t1_dec_refpass_mqc_vsc(
     OPJ_UINT32 i, j, k;
     OPJ_INT32 vsc;
     OPJ_INT32 *data1 = t1->data;
-    opj_flag_t *flags1 = &t1->flags[1];
-    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    opj_flag_t *flagsp1 = &T1_FLAGS(0, 0);
     one = 1 << bpno;
     poshalf = one >> 1;
     neghalf = bpno > 0 ? -poshalf : -1;
     for (k = 0; k < (t1->h & ~(OPJ_UINT32)3U); k += 4U) {
         for (i = 0; i < t1->w; ++i) {
             OPJ_INT32 *data2 = data1 + i;
-            opj_flag_t *flags2 = flags1 + i;
-            opj_colflag_t *colflags2 = colflags1 + i;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+            opj_flag_t *flagsp2 = flagsp1 + i;
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flagsp2, data2, poshalf, neghalf,
                                             0, 0U);
             data2 += t1->w;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flagsp2, data2, poshalf, neghalf,
                                             0, 1U);
             data2 += t1->w;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flagsp2, data2, poshalf, neghalf,
                                             0, 2U);
             data2 += t1->w;
-            flags2 += t1->flags_stride;
-            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flagsp2, data2, poshalf, neghalf,
                                             1, 3U);
             data2 += t1->w;
         }
         data1 += t1->w << 2;
-        flags1 += t1->flags_stride << 2;
-        colflags1 += t1->flags_stride;
+        flagsp1 += t1->flags_stride;
     }
     for (i = 0; i < t1->w; ++i) {
-        opj_colflag_t *colflags2 = colflags1 + i;
+        opj_flag_t *flagsp2 = flagsp1 + i;
         for (j = k; j < t1->h; ++j) {
             vsc = (j == t1->h - 1) ? 1 : 0;
             opj_t1_dec_refpass_step_mqc_vsc(
                 t1,
-                &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
-                colflags2,
+                flagsp2,
                 &t1->data[(j * t1->w) + i],
                 poshalf, neghalf,
                 vsc,
                 j - k);
         }
     }
-}                               /* VSC and  BYPASS by Antonin */
+}
 
 /**
 Encode clean-up pass step
 */
 static void opj_t1_enc_clnpass_step(
     opj_t1_t *t1,
-    opj_flag_enc_t *flagsp,
+    opj_flag_t *flagsp,
     OPJ_INT32 *datap,
-    OPJ_UINT32 orient,
     OPJ_INT32 bpno,
     OPJ_INT32 one,
     OPJ_INT32 *nmsedec,
@@ -1313,7 +1136,7 @@ static void opj_t1_enc_clnpass_step(
     for (ci = runlen; ci < lim; ++ci) {
         OPJ_UINT32 vsc;
         OPJ_UINT32 vsc_mask;
-        opj_flag_enc_t flags;
+        opj_flag_t flags;
 
         vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (ci == lim - 1)) ? 1 : 0;
         vsc_mask = vsc ? ~((T1_SIGMA_SW | T1_SIGMA_S | T1_SIGMA_SE | T1_CHI_S) <<
@@ -1325,7 +1148,7 @@ static void opj_t1_enc_clnpass_step(
         }
 
         if (!(flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U)))) {
-            OPJ_UINT32 ctxt1 = opj_t1_enc_getctxno_zc(flags >> (ci * 3U), orient);
+            OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, flags >> (ci * 3U));
 #ifdef DEBUG_ENC_CLN
             printf("   ctxt1=%d\n", ctxt1);
 #endif
@@ -1338,25 +1161,25 @@ static void opj_t1_enc_clnpass_step(
 LABEL_PARTIAL:
                 /* Note: using flags instead of *flagsp & vsc_mask result */
                 /* in slow down. Probably because of register pressure */
-                lu = opj_t1_enc_getctxtno_sc_or_spb_index(
+                lu = opj_t1_getctxtno_sc_or_spb_index(
                          *flagsp & vsc_mask,
                          flagsp[-1] & vsc_mask, flagsp[1] & vsc_mask,
                          ci);
                 *nmsedec += opj_t1_getnmsedec_sig((OPJ_UINT32)opj_int_abs(*datap),
                                                   (OPJ_UINT32)bpno);
-                ctxt2 = opj_t1_enc_getctxno_sc(lu);
+                ctxt2 = opj_t1_getctxno_sc(lu);
 #ifdef DEBUG_ENC_CLN
                 printf("   ctxt2=%d\n", ctxt2);
 #endif
                 opj_mqc_setcurctx(mqc, ctxt2);
 
                 v = *datap < 0 ? 1 : 0;
-                spb = opj_t1_enc_getspb(lu);
+                spb = opj_t1_getspb(lu);
 #ifdef DEBUG_ENC_CLN
                 printf("   spb=%d\n", spb);
 #endif
                 opj_mqc_encode(mqc, v ^ spb);
-                opj_t1_enc_updateflags(flagsp, ci, v, t1->flags_stride);
+                opj_t1_update_flags(flagsp, ci, v, t1->flags_stride);
             }
         }
         *flagsp &= ~(T1_PI_THIS << (3U * ci));
@@ -1368,126 +1191,116 @@ LABEL_PARTIAL:
 static void opj_t1_dec_clnpass_step_partial(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
-    OPJ_INT32 v, flag;
+    OPJ_UINT32 v;
     opj_mqc_t *mqc = t1->mqc;   /* MQC component */
 
-    flag = *flagsp;
-    opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
-    v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
+    OPJ_UINT32 lu = opj_t1_getctxtno_sc_or_spb_index(
+                        *flagsp, flagsp[-1], flagsp[1],
+                        ci);
+    opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(lu));
+    v = opj_mqc_decode(mqc) ^ opj_t1_getspb(lu);
     *datap = v ? -oneplushalf : oneplushalf;
-    opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, t1->flags_stride,
-                               row);
-#ifdef CONSISTENCY_CHECK
-    *flagsp &= ~T1_VISIT;
-#endif
-}               /* VSC and  BYPASS by Antonin */
+    opj_t1_update_flags(flagsp, ci, v, t1->flags_stride);
+    /* *flagsp &= ~(T1_PI_THIS << (3U * ci)); */
+}
 
 static void opj_t1_dec_clnpass_step(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
-    OPJ_INT32 v, flag;
+    OPJ_UINT32 v;
 
     opj_mqc_t *mqc = t1->mqc;   /* MQC component */
-#ifdef CONSISTENCY_CHECK
-    assert((!(*flagsp & (T1_SIG | T1_VISIT))) == (!(*colflagsp & ((
-                T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (4 * row)))));
-#endif
-    if (!(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                        (4 * row)))) {
-        flag = *flagsp;
-        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, (OPJ_UINT32)flag));
+    if (!(*flagsp & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U)))) {
+        OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, *flagsp >> (ci * 3U));
+        opj_mqc_setcurctx(mqc, ctxt1);
         if (opj_mqc_decode(mqc)) {
-            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
-            v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
+            OPJ_UINT32 lu = opj_t1_getctxtno_sc_or_spb_index(
+                                *flagsp, flagsp[-1], flagsp[1],
+                                ci);
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(lu));
+            v = opj_mqc_decode(mqc) ^ opj_t1_getspb(lu);
             *datap = v ? -oneplushalf : oneplushalf;
-            opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, t1->flags_stride,
-                                       row);
+            opj_t1_update_flags(flagsp, ci, v, t1->flags_stride);
         }
     }
-#ifdef CONSISTENCY_CHECK
-    *flagsp &= ~T1_VISIT;
-#endif
-}               /* VSC and  BYPASS by Antonin */
+    /* *flagsp &= ~(T1_PI_THIS << (3U * ci)); */
+}
 
 static void opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
-    OPJ_UINT32 row,
+    OPJ_UINT32 ci,
     OPJ_UINT32 flags_stride)
 {
-    OPJ_INT32 v;
-    OPJ_INT32 flag;
+    OPJ_UINT32 v;
 
     opj_mqc_t *mqc = t1->mqc;   /* MQC component */
 
-    flag = *flagsp;
-    /*if (!(flag & (T1_SIG | T1_VISIT)))*/
-    {
-        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, (OPJ_UINT32)flag));
-        if (opj_mqc_decode(mqc)) {
-            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
-            v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
-            *datap = v ? -oneplushalf : oneplushalf;
-            opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, flags_stride, row);
-        }
+    OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, *flagsp >> (ci * 3U));
+    opj_mqc_setcurctx(mqc, ctxt1);
+    if (opj_mqc_decode(mqc)) {
+        OPJ_UINT32 lu = opj_t1_getctxtno_sc_or_spb_index(
+                            *flagsp, flagsp[-1], flagsp[1],
+                            ci);
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(lu));
+        v = opj_mqc_decode(mqc) ^ opj_t1_getspb(lu);
+        *datap = v ? -oneplushalf : oneplushalf;
+        opj_t1_update_flags(flagsp, ci, v, flags_stride);
     }
-    /*flagsp &= ~T1_VISIT;*/
 }
 
 static void opj_t1_dec_clnpass_step_vsc(
     opj_t1_t *t1,
     opj_flag_t *flagsp,
-    opj_colflag_t *colflagsp,
     OPJ_INT32 *datap,
     OPJ_INT32 oneplushalf,
     OPJ_INT32 partial,
     OPJ_INT32 vsc,
-    OPJ_UINT32 row)
+    OPJ_UINT32 ci)
 {
-    OPJ_UINT32 v, flag;
+    OPJ_UINT32 v;
 
     opj_mqc_t *mqc = t1->mqc;   /* MQC component */
 
-    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
-           (*flagsp);
+    OPJ_UINT32 vsc_mask = vsc ? ~((T1_SIGMA_SW | T1_SIGMA_S | T1_SIGMA_SE |
+                                   T1_CHI_S) <<
+                                  (ci * 3U)) : ~0U;
+    OPJ_UINT32 flags = *flagsp & vsc_mask;
     if (partial) {
         goto LABEL_PARTIAL;
     }
-    if (!(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
-                        (T1_COLFLAG_RBS * row)))) {
-        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
+    if (!(flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U)))) {
+        OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, flags >> (ci * 3U));
+        opj_mqc_setcurctx(mqc, ctxt1);
         if (opj_mqc_decode(mqc)) {
+            OPJ_UINT32 lu;
 LABEL_PARTIAL:
-            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
-            v = (OPJ_UINT32)opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
+            lu = opj_t1_getctxtno_sc_or_spb_index(
+                     *flagsp & vsc_mask, flagsp[-1] & vsc_mask,
+                     flagsp[1] & vsc_mask,
+                     ci);
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(lu));
+            v = opj_mqc_decode(mqc) ^ opj_t1_getspb(lu);
             *datap = v ? -oneplushalf : oneplushalf;
-            opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
+            opj_t1_update_flags(flagsp, ci, v, t1->flags_stride);
         }
     }
-#ifdef CONSISTENCY_CHECK
-    *flagsp &= ~T1_VISIT;
-#endif
+    /* *flagsp &= ~(T1_PI_THIS << (3U * ci)); */
 }
 
-#define MACRO_t1_enc_flags(x,y) t1->enc_flags[((x)*(t1->flags_stride))+(y)]
-
 static void opj_t1_enc_clnpass(
     opj_t1_t *t1,
     OPJ_INT32 bpno,
-    OPJ_UINT32 orient,
     OPJ_INT32 *nmsedec,
     OPJ_UINT32 cblksty)
 {
@@ -1513,7 +1326,7 @@ static void opj_t1_enc_clnpass(
 #ifdef DEBUG_ENC_CLN
             printf("  i=%d\n", i);
 #endif
-            agg = !(ENC_FLAGS(i, k) & agg_mask);
+            agg = !(T1_FLAGS(i, k) & agg_mask);
 #ifdef DEBUG_ENC_CLN
             printf("   agg=%d\n", agg);
 #endif
@@ -1536,9 +1349,8 @@ static void opj_t1_enc_clnpass(
             }
             opj_t1_enc_clnpass_step(
                 t1,
-                &ENC_FLAGS(i, k),
+                &T1_FLAGS(i, k),
                 &t1->data[((k + runlen) * t1->data_stride) + i],
-                orient,
                 bpno,
                 one,
                 nmsedec,
@@ -1561,9 +1373,8 @@ static void opj_t1_enc_clnpass(
 #endif
             opj_t1_enc_clnpass_step(
                 t1,
-                &ENC_FLAGS(i, k),
+                &T1_FLAGS(i, k),
                 &t1->data[((k + runlen) * t1->data_stride) + i],
-                orient,
                 bpno,
                 one,
                 nmsedec,
@@ -1575,20 +1386,10 @@ static void opj_t1_enc_clnpass(
     }
 }
 
-
-#define MACRO_t1_flags_internal(x,y,flags_stride) t1->flags[((x)*(flags_stride))+(y)]
-
-#ifdef CONSISTENCY_CHECK
-#define REMOVE_VISIT_FLAG(flagptr) *(flagptr) &= (opj_flag_t)~T1_VISIT
-#define T1_SIG_OR_VISIT            (T1_SIG | T1_VISIT)
-#else
-#define REMOVE_VISIT_FLAG(flagptr) do {} while(0)
-#define T1_SIG_OR_VISIT            0
-#endif
-
-#define opj_t1_dec_clnpass_internal(consistency_check, t1, bpno, cblksty, w, h, flags_stride) \
+#define opj_t1_dec_clnpass_internal(t1, bpno, cblksty, w, h, flags_stride) \
 { \
-    OPJ_INT32 one, half, oneplushalf, agg, runlen, vsc; \
+    OPJ_INT32 one, half, oneplushalf, agg, vsc; \
+    OPJ_UINT32 runlen; \
     OPJ_UINT32 i, j, k; \
     OPJ_INT32 segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM; \
      \
@@ -1598,17 +1399,13 @@ static void opj_t1_enc_clnpass(
     half = one >> 1; \
     oneplushalf = one | half; \
     if (cblksty & J2K_CCP_CBLKSTY_VSC) { \
-    opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
+    opj_flag_t *flagsp1 = &t1->flags[flags_stride + 1]; \
+    const OPJ_UINT32 agg_mask =  ~(T1_SIGMA_15 | T1_SIGMA_16 | T1_SIGMA_17 | T1_CHI_5); \
     for (k = 0; k < h; k += 4) { \
         for (i = 0; i < w; ++i) { \
-            opj_colflag_t *colflags2 = colflags1 + i; \
+            opj_flag_t *flagsp2 = flagsp1 + i; \
             if (k + 3 < h) { \
-                    agg = !((*colflags2 & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0 | \
-                                           T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_SIG_OTHER_ROW_1 | \
-                                           T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_SIG_OTHER_ROW_2 | \
-                                           T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3)) || \
-                          ((MACRO_t1_flags_internal(1 + k + 3,1 + i,flags_stride) \
-                           & ((~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG_OTH)))); \
+                    agg = !(*flagsp2 & agg_mask); \
                 } else { \
                 agg = 0; \
             } \
@@ -1623,42 +1420,28 @@ static void opj_t1_enc_clnpass(
             } else { \
                 runlen = 0; \
             } \
-            for (j = k + (OPJ_UINT32)runlen; j < k + 4 && j < h; ++j) { \
+            for (j = k + runlen; j < k + 4 && j < h; ++j) { \
                     vsc = (j == k + 3 || j == h - 1) ? 1 : 0; \
                     opj_t1_dec_clnpass_step_vsc( \
                         t1, \
-                        &t1->flags[((j+1) * flags_stride) + i + 1], \
-                        colflags2, \
+                        flagsp2, \
                         &t1->data[(j * w) + i], \
                         oneplushalf, \
-                        agg && (j == k + (OPJ_UINT32)runlen), \
+                        agg && (j == k + runlen), \
                         vsc, j - k); \
             } \
-            *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
+            *flagsp2 &= ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
         } \
-        colflags1 += flags_stride; \
+        flagsp1 += flags_stride; \
     } \
     } else { \
         OPJ_INT32 *data1 = t1->data; \
-        opj_flag_t *flags1 = &t1->flags[1]; \
-        opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
+        opj_flag_t *flagsp1 = &t1->flags[flags_stride + 1]; \
         for (k = 0; k < (h & ~3u); k += 4) { \
             for (i = 0; i < w; ++i) { \
                 OPJ_INT32 *data2 = data1 + i; \
-                opj_flag_t *flags2 = flags1 + i; \
-                opj_colflag_t *colflags2 = colflags1 + i; \
-                opj_colflag_t colflags = *colflags2; \
-                agg = !(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0 | \
-                                     T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_SIG_OTHER_ROW_1 | \
-                                     T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_SIG_OTHER_ROW_2 | \
-                                     T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3 | T1_COLFLAG_SIG_OTHER_ROW_3)); \
-                if( consistency_check ) { \
-                    assert( agg == !((MACRO_t1_flags_internal(1 + k, 1 + i,flags_stride) | \
-                                      MACRO_t1_flags_internal(1 + k + 1, 1 + i,flags_stride) | \
-                                      MACRO_t1_flags_internal(1 + k + 2, 1 + i,flags_stride) | \
-                                      MACRO_t1_flags_internal(1 + k + 3, 1 + i,flags_stride)) & (T1_SIG_OR_VISIT | T1_SIG_OTH)) ); \
-                } \
-                if (agg) { \
+                opj_flag_t *flagsp2 = flagsp1 + i; \
+                if (*flagsp2 == 0) { \
                     opj_mqc_setcurctx(mqc, T1_CTXNO_AGG); \
                     if (!opj_mqc_decode(mqc)) { \
                         continue; \
@@ -1666,68 +1449,51 @@ static void opj_t1_enc_clnpass(
                     opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
                     runlen = opj_mqc_decode(mqc); \
                     runlen = (runlen << 1) | opj_mqc_decode(mqc); \
-                    flags2 += (OPJ_UINT32)runlen * flags_stride; \
-                    data2 += (OPJ_UINT32)runlen * w; \
-                    for (j = (OPJ_UINT32)runlen; j < 4; ++j) { \
-                        flags2 += flags_stride; \
-                        if (j == (OPJ_UINT32)runlen) { \
-                            opj_t1_dec_clnpass_step_partial(t1, flags2, colflags2, data2, oneplushalf, j); \
+                    data2 += runlen * w; \
+                    for (j = runlen; j < 4; ++j) { \
+                        if (j == runlen) { \
+                            opj_t1_dec_clnpass_step_partial(t1, flagsp2, data2, oneplushalf, j); \
                         } else { \
-                            opj_t1_dec_clnpass_step(t1, flags2, colflags2, data2, oneplushalf, j); \
+                            opj_t1_dec_clnpass_step(t1, flagsp2, data2, oneplushalf, j); \
                         } \
                         data2 += w; \
                     } \
                 } else { \
-                    flags2 += flags_stride; \
-                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0))) == (!(*flags2 & (T1_SIG_OR_VISIT))) ); } \
-                    if (!(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0))) {\
-                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 0U, flags_stride); \
+                    if (!(*flagsp2 & ((T1_SIGMA_THIS | T1_PI_THIS) << (0 * 3U)))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flagsp2, data2, oneplushalf, 0U, flags_stride); \
                     } \
-                    if( consistency_check ) REMOVE_VISIT_FLAG(*flags2); \
                     data2 += w; \
-                    flags2 += flags_stride; \
-                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1))) == (!(*flags2 & (T1_SIG_OR_VISIT))) ); } \
-                    if (!(colflags & (T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1))) {\
-                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 1U, flags_stride); \
+                    if (!(*flagsp2 & ((T1_SIGMA_THIS | T1_PI_THIS) << (1 * 3U)))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flagsp2, data2, oneplushalf, 1U, flags_stride); \
                     } \
-                    if( consistency_check ) REMOVE_VISIT_FLAG(*flags2); \
                     data2 += w; \
-                    flags2 += flags_stride; \
-                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2))) == (!(*flags2 & (T1_SIG_OR_VISIT))) ); } \
-                    if (!(colflags & (T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2))) {\
-                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 2U, flags_stride); \
+                    if (!(*flagsp2 & ((T1_SIGMA_THIS | T1_PI_THIS) << (2 * 3U)))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flagsp2, data2, oneplushalf, 2U, flags_stride); \
                     } \
-                    if( consistency_check ) REMOVE_VISIT_FLAG(*flags2); \
                     data2 += w; \
-                    flags2 += flags_stride; \
-                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3))) == (!(*flags2 & (T1_SIG_OR_VISIT))) ); } \
-                    if (!(colflags & (T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3))) {\
-                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 3U, flags_stride); \
+                    if (!(*flagsp2 & ((T1_SIGMA_THIS | T1_PI_THIS) << (3 * 3U)))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flagsp2, data2, oneplushalf, 3U, flags_stride); \
                     } \
-                    if( consistency_check ) REMOVE_VISIT_FLAG(*flags2); \
                     data2 += w; \
                 } \
-                *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
+                *flagsp2 &= ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
             } \
             data1 += w << 2; \
-            flags1 += flags_stride << 2; \
-            colflags1 += flags_stride; \
+            flagsp1 += flags_stride; \
         } \
         for (i = 0; i < w; ++i) { \
             OPJ_INT32 *data2 = data1 + i; \
-            opj_flag_t *flags2 = flags1 + i; \
-            opj_colflag_t *colflags2 = colflags1 + i; \
+            opj_flag_t *flagsp2 = flagsp1 + i; \
             for (j = k; j < h; ++j) { \
-                flags2 += flags_stride; \
-                opj_t1_dec_clnpass_step(t1, flags2, colflags2, data2, oneplushalf, j - k); \
+                opj_t1_dec_clnpass_step(t1, flagsp2, data2, oneplushalf, j - k); \
                 data2 += w; \
             } \
-            *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
+            *flagsp2 &= ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
         } \
     } \
  \
     if (segsym) { \
-        OPJ_INT32 v = 0; \
+        OPJ_UINT32 v = 0; \
         opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
         v = opj_mqc_decode(mqc); \
         v = (v << 1) | opj_mqc_decode(mqc); \
@@ -1739,18 +1505,14 @@ static void opj_t1_enc_clnpass(
         } \
         */ \
     } \
-}               /* VSC and  BYPASS by Antonin */
+}
 
 static void opj_t1_dec_clnpass_64x64(
     opj_t1_t *t1,
     OPJ_INT32 bpno,
     OPJ_INT32 cblksty)
 {
-#ifdef CONSISTENCY_CHECK
-    opj_t1_dec_clnpass_internal(OPJ_TRUE, t1, bpno, cblksty, 64, 64, 66);
-#else
-    opj_t1_dec_clnpass_internal(OPJ_FALSE, t1, bpno, cblksty, 64, 64, 66);
-#endif
+    opj_t1_dec_clnpass_internal(t1, bpno, cblksty, 64, 64, 66);
 }
 
 static void opj_t1_dec_clnpass_generic(
@@ -1758,13 +1520,8 @@ static void opj_t1_dec_clnpass_generic(
     OPJ_INT32 bpno,
     OPJ_INT32 cblksty)
 {
-#ifdef CONSISTENCY_CHECK
-    opj_t1_dec_clnpass_internal(OPJ_TRUE, t1, bpno, cblksty, t1->w, t1->h,
-                                t1->flags_stride);
-#else
-    opj_t1_dec_clnpass_internal(OPJ_FALSE, t1, bpno, cblksty, t1->w, t1->h,
+    opj_t1_dec_clnpass_internal(t1, bpno, cblksty, t1->w, t1->h,
                                 t1->flags_stride);
-#endif
 }
 
 
@@ -1863,11 +1620,7 @@ static OPJ_BOOL opj_t1_allocate_buffers(
         return OPJ_FALSE;
     }
 #endif
-    if (!t1->encoder) {
-        flagssize = (size_t)h + 2U;
-    } else {
-        flagssize = (h + 3U) / 4U + 2U;
-    }
+    flagssize = (h + 3U) / 4U + 2U;
 
     /* Overflow check */
     if (flagssize > (SIZE_MAX / (size_t)t1->flags_stride)) {
@@ -1875,10 +1628,11 @@ static OPJ_BOOL opj_t1_allocate_buffers(
         return OPJ_FALSE;
     }
     flagssize *= (size_t)t1->flags_stride;
-
-    if (!t1->encoder) {
-
-        size_t colflags_size;
+    {
+        /* BIG FAT XXX */
+        opj_flag_t* p;
+        OPJ_UINT32 x;
+        OPJ_UINT32 flags_height = (h + 3U) / 4U;
 
         if (flagssize > (size_t)t1->flagssize) {
             /* Overflow check */
@@ -1887,7 +1641,8 @@ static OPJ_BOOL opj_t1_allocate_buffers(
                 return OPJ_FALSE;
             }
             opj_aligned_free(t1->flags);
-            t1->flags = (opj_flag_t*) opj_aligned_malloc(flagssize * sizeof(opj_flag_t));
+            t1->flags = (opj_flag_t*) opj_aligned_malloc(flagssize * sizeof(
+                            opj_flag_t));
             if (!t1->flags) {
                 /* FIXME event manager error callback */
                 return OPJ_FALSE;
@@ -1905,79 +1660,13 @@ static OPJ_BOOL opj_t1_allocate_buffers(
 
         memset(t1->flags, 0, flagssize * sizeof(opj_flag_t));
 
-        colflags_size = ((((size_t)h + 3U) / 4U) +
-                         2U); /* Can't overflow, h checked against UINT32_MAX - 3U */
-
-        /* Overflow check */
-        if (colflags_size > (SIZE_MAX / (size_t)t1->flags_stride)) {
-            /* FIXME event manager error callback */
-            return OPJ_FALSE;
-        }
-        colflags_size *= (size_t)t1->flags_stride;
-
-        if (colflags_size > (size_t)t1->colflags_size) {
-            /* Overflow check */
-            if ((size_t)colflags_size > (SIZE_MAX / sizeof(opj_colflag_t))) {
-                /* FIXME event manager error callback */
-                return OPJ_FALSE;
-            }
-            opj_aligned_free(t1->colflags);
-            t1->colflags = (opj_colflag_t*) opj_aligned_malloc(colflags_size * sizeof(
-                               opj_colflag_t));
-            if (!t1->colflags) {
-                /* FIXME event manager error callback */
-                return OPJ_FALSE;
-            }
-#if SIZE_MAX > 0xFFFFFFFFU /* UINT32_MAX */
-            /* TODO remove this if t1->colflags_size type changes to size_t */
-            /* Overflow check */
-            if (colflags_size > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
-                /* FIXME event manager error callback */
-                return OPJ_FALSE;
-            }
-#endif
-            t1->colflags_size = (OPJ_UINT32)colflags_size;
-        }
-        memset(t1->colflags, 0, colflags_size * sizeof(opj_colflag_t));
-    } else {
-        /* BIG FAT XXX */
-        opj_flag_enc_t* p;
-        OPJ_UINT32 x;
-        OPJ_UINT32 flags_height = (h + 3U) / 4U;
-
-        if (flagssize > (size_t)t1->flagssize) {
-            /* Overflow check */
-            if (flagssize > (SIZE_MAX / sizeof(opj_flag_enc_t))) {
-                /* FIXME event manager error callback */
-                return OPJ_FALSE;
-            }
-            opj_aligned_free(t1->enc_flags);
-            t1->enc_flags = (opj_flag_enc_t*) opj_aligned_malloc(flagssize * sizeof(
-                                opj_flag_enc_t));
-            if (!t1->enc_flags) {
-                /* FIXME event manager error callback */
-                return OPJ_FALSE;
-            }
-#if SIZE_MAX > 0xFFFFFFFFU /* UINT32_MAX */
-            /* TODO remove this if t1->flagssize type changes to size_t */
-            /* Overflow check */
-            if (flagssize > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
-                /* FIXME event manager error callback */
-                return OPJ_FALSE;
-            }
-#endif
-        }
-        t1->flagssize = (OPJ_UINT32)flagssize;
-
-        memset(t1->enc_flags, 0, flagssize * sizeof(opj_flag_enc_t));
-
-        p = &t1->enc_flags[0];
+        p = &t1->flags[0];
         for (x = 0; x < t1->flags_stride; ++x) {
             /* magic value to hopefully stop any passes being interested in this entry */
             *p++ = (T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3);
         }
 
-        p = &t1->enc_flags[((flags_height + 1) * t1->flags_stride)];
+        p = &t1->flags[((flags_height + 1) * t1->flags_stride)];
         for (x = 0; x < t1->flags_stride; ++x) {
             /* magic value to hopefully stop any passes being interested in this entry */
             *p++ = (T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3);
@@ -1985,7 +1674,7 @@ static OPJ_BOOL opj_t1_allocate_buffers(
 
         if (h % 4) {
             OPJ_UINT32 v = 0;
-            p = &t1->enc_flags[((flags_height) * t1->flags_stride)];
+            p = &t1->flags[((flags_height) * t1->flags_stride)];
             if (h % 4 == 1) {
                 v |= T1_PI_1 | T1_PI_2 | T1_PI_3;
             } else if (h % 4 == 2) {
@@ -2068,15 +1757,6 @@ void opj_t1_destroy(opj_t1_t *p_t1)
         p_t1->flags = 00;
     }
 
-    if (p_t1->colflags) {
-        opj_aligned_free(p_t1->colflags);
-        p_t1->colflags = 00;
-    }
-
-    if (p_t1->enc_flags) {
-        opj_aligned_free(p_t1->enc_flags);
-        p_t1->enc_flags = 00;
-    }
     opj_free(p_t1);
 }
 
@@ -2266,7 +1946,7 @@ static OPJ_BOOL opj_t1_decode_cblk(opj_t1_t *t1,
     OPJ_UINT32 segno, passno;
     OPJ_BYTE type = T1_TYPE_MQ; /* BYPASS mode */
 
-    mqc->lut_ctxno_zc_orient = lut_ctxno_zc + orient * 256;
+    mqc->lut_ctxno_zc_orient = lut_ctxno_zc + (orient << 9);
 
     if (!opj_t1_allocate_buffers(
                 t1,
@@ -2523,7 +2203,7 @@ static void opj_t1_encode_cblk(opj_t1_t *t1,
     OPJ_BYTE type = T1_TYPE_MQ;
     OPJ_FLOAT64 tempwmsedec;
 
-    mqc->lut_ctxno_zc_orient = lut_ctxno_zc + orient * 256;
+    mqc->lut_ctxno_zc_orient = lut_ctxno_zc + (orient << 9);
 
     max = 0;
     for (i = 0; i < t1->w; ++i) {
@@ -2553,13 +2233,13 @@ static void opj_t1_encode_cblk(opj_t1_t *t1,
 
         switch (passtype) {
         case 0:
-            opj_t1_enc_sigpass(t1, bpno, orient, &nmsedec, type, cblksty);
+            opj_t1_enc_sigpass(t1, bpno, &nmsedec, type, cblksty);
             break;
         case 1:
             opj_t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty);
             break;
         case 2:
-            opj_t1_enc_clnpass(t1, bpno, orient, &nmsedec, cblksty);
+            opj_t1_enc_clnpass(t1, bpno, &nmsedec, cblksty);
             /* code switch SEGMARK (i.e. SEGSYM) */
             if (cblksty & J2K_CCP_CBLKSTY_SEGSYM) {
                 opj_mqc_segmark_enc(mqc);
index 59c2d0168f374d241d02c9fe4e8f00b1450ca6db..7a9b3e9a1c225b9ec8d318cdfd3b3ebf9b74974e 100644 (file)
@@ -52,33 +52,6 @@ in T1.C are used by some function in TCD.C.
 /* ----------------------------------------------------------------------- */
 #define T1_NMSEDEC_BITS 7
 
-/* CAUTION: the value of those constants must not be changed, otherwise the */
-/* optimization of opj_t1_updateflags() will break! */
-/* BEGINNING of flags that apply to opj_flag_t */
-#define T1_SIG_NE 0x0001U /**< Context orientation : North-East direction */
-#define T1_SIG_SE 0x0002U /**< Context orientation : South-East direction */
-#define T1_SIG_SW 0x0004U /**< Context orientation : South-West direction */
-#define T1_SIG_NW 0x0008U /**< Context orientation : North-West direction */
-#define T1_SIG_N 0x0010U  /**< Context orientation : North direction */
-#define T1_SIG_E 0x0020U  /**< Context orientation : East direction */
-#define T1_SIG_S 0x0040U  /**< Context orientation : South direction */
-#define T1_SIG_W 0x0080U  /**< Context orientation : West direction */
-#define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW)
-#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W)
-
-#define T1_SGN_N 0x0100U
-#define T1_SGN_E 0x0200U
-#define T1_SGN_S 0x0400U
-#define T1_SGN_W 0x0800U
-#define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W)
-
-#ifdef CONSISTENCY_CHECK
-#define T1_SIG    0x1000U /**< No longer used by decoder */
-#define T1_VISIT  0x4000U /**< No longer used by decoder */
-#endif
-
-/* END of flags that apply to opj_flag_t */
-
 #define T1_NUMCTXS_ZC  9
 #define T1_NUMCTXS_SC  5
 #define T1_NUMCTXS_MAG 3
@@ -97,27 +70,7 @@ in T1.C are used by some function in TCD.C.
 #define T1_TYPE_MQ 0    /**< Normal coding using entropy coder */
 #define T1_TYPE_RAW 1   /**< No encoding the information is store under raw format in codestream (mode switch RAW)*/
 
-/* Those flags are used by opj_colflag_t */
-#define T1_COLFLAG_RBS              4U /* RBS = Row Bit Shift */
-#define T1_COLFLAG_SIG_OTHER_ROW_0 (1U << 0U)  /**< This sample has at least one significant neighbour */
-#define T1_COLFLAG_SIG_ROW_0       (1U << 1U)  /**< This sample is significant */
-#define T1_COLFLAG_VISIT_ROW_0     (1U << 2U)  /**< This sample has been visited */
-#define T1_COLFLAG_REFINE_ROW_0    (1U << 3U)  /**< This sample has been refined */
-#define T1_COLFLAG_SIG_OTHER_ROW_1 (T1_COLFLAG_SIG_OTHER_ROW_0 << (1U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_SIG_ROW_1       (T1_COLFLAG_SIG_ROW_0       << (1U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_VISIT_ROW_1     (T1_COLFLAG_VISIT_ROW_0     << (1U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_REFINE_ROW_1    (T1_COLFLAG_REFINE_ROW_0    << (1U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_SIG_OTHER_ROW_2 (T1_COLFLAG_SIG_OTHER_ROW_0 << (2U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_SIG_ROW_2       (T1_COLFLAG_SIG_ROW_0       << (2U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_VISIT_ROW_2     (T1_COLFLAG_VISIT_ROW_0     << (2U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_REFINE_ROW_2    (T1_COLFLAG_REFINE_ROW_0    << (2U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_SIG_OTHER_ROW_3 (T1_COLFLAG_SIG_OTHER_ROW_0 << (3U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_SIG_ROW_3       (T1_COLFLAG_SIG_ROW_0       << (3U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_VISIT_ROW_3     (T1_COLFLAG_VISIT_ROW_0     << (3U * T1_COLFLAG_RBS))
-#define T1_COLFLAG_REFINE_ROW_3    (T1_COLFLAG_REFINE_ROW_0    << (3U * T1_COLFLAG_RBS))
-
-
-/* BEGINNING of flags that apply to opj_flag_enc_t */
+/* BEGINNING of flags that apply to opj_flag_t */
 /** We hold the state of individual data points for the T1 encoder using
  *  a single 32-bit flags word to hold the state of 4 data points.  This corresponds
  *  to the 4-point-high columns that the data is processed in.
@@ -217,16 +170,12 @@ in T1.C are used by some function in TCD.C.
 #define T1_LUT_SIG_E (1U << 5)
 #define T1_LUT_SGN_S (1U << 6)
 #define T1_LUT_SIG_S (1U << 7)
-/* END of flags that apply to opj_flag_enc_t */
+/* END of flags that apply to opj_flag_t */
 
 /* ----------------------------------------------------------------------- */
 
-typedef OPJ_UINT16 opj_flag_t;
-
 /** Flags for 4 consecutive rows of a column */
-typedef OPJ_UINT16 opj_colflag_t;
-
-typedef OPJ_UINT32 opj_flag_enc_t;
+typedef OPJ_UINT32 opj_flag_t;
 
 /**
 Tier-1 coding (coding of code-block coefficients)
@@ -239,27 +188,22 @@ typedef struct opj_t1 {
     opj_raw_t *raw;
 
     OPJ_INT32  *data;
-    /** Flags used by decoder */
-    opj_flag_t *flags;
-    /** Addition flag array such that colflags[1+0] is for state of col=0,row=0..3,
-       colflags[1+1] for col=1, row=0..3, colflags[1+flags_stride] for col=0,row=4..7, ...
+    /** Flags used by decoder and encoder.
+     * Such that flags[1+0] is for state of col=0,row=0..3,
+       flags[1+1] for col=1, row=0..3, flags[1+flags_stride] for col=0,row=4..7, ...
        This array avoids too much cache trashing when processing by 4 vertical samples
        as done in the various decoding steps. */
-    opj_colflag_t* colflags;
-    /** Flags used by encoder */
-    opj_flag_enc_t *enc_flags;
+    opj_flag_t *flags;
+
     OPJ_UINT32 w;
     OPJ_UINT32 h;
     OPJ_UINT32 datasize;
     OPJ_UINT32 flagssize;
     OPJ_UINT32 flags_stride;
-    OPJ_UINT32 colflags_size;
     OPJ_UINT32 data_stride;
     OPJ_BOOL   encoder;
 } opj_t1_t;
 
-#define MACRO_t1_flags(x,y) t1->flags[((x)*(t1->flags_stride))+(y)]
-
 /** @name Exported functions */
 /*@{*/
 /* ----------------------------------------------------------------------- */
index be0243c3f9ee44c643c00af64c8e3489a9889d4a..a4ce1e171b33fb1dccbd8e271beaf4c844e4b0c3 100644 (file)
 
 #include "opj_includes.h"
 
-static int t1_init_ctxno_zc(unsigned int f, unsigned int orient)
-{
-    int h, v, d, n, t, hv;
-    h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0);
-    v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0);
-    d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((
-                f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0);
-    n = 0;
-    t = 0;
-    hv = 0;
-
-    switch (orient) {
-    case 2:
-        t = h;
-        h = v;
-        v = t;
-    /* fall through */
-    case 0:
-    case 1:
-        if (!h) {
-            if (!v) {
-                if (!d) {
-                    n = 0;
-                } else if (d == 1) {
-                    n = 1;
-                } else {
-                    n = 2;
-                }
-            } else if (v == 1) {
-                n = 3;
-            } else {
-                n = 4;
-            }
-        } else if (h == 1) {
-            if (!v) {
-                if (!d) {
-                    n = 5;
-                } else {
-                    n = 6;
-                }
-            } else {
-                n = 7;
-            }
-        } else {
-            n = 8;
-        }
-        break;
-    case 3:
-        hv = h + v;
-        if (!d) {
-            if (!hv) {
-                n = 0;
-            } else if (hv == 1) {
-                n = 1;
-            } else {
-                n = 2;
-            }
-        } else if (d == 1) {
-            if (!hv) {
-                n = 3;
-            } else if (hv == 1) {
-                n = 4;
-            } else {
-                n = 5;
-            }
-        } else if (d == 2) {
-            if (!hv) {
-                n = 6;
-            } else {
-                n = 7;
-            }
-        } else {
-            n = 8;
-        }
-        break;
-    }
-
-    return (T1_CTXNO_ZC + n);
-}
-
-static int t1_init_enc_ctxno_zc(int f, int orient)
+static int t1_init_ctxno_zc(int f, int orient)
 {
     int h, v, d, n, t, hv;
     n = 0;
@@ -196,51 +116,7 @@ static int t1_init_enc_ctxno_zc(int f, int orient)
     return (T1_CTXNO_ZC + n);
 }
 
-static int t1_init_ctxno_sc(unsigned int f)
-{
-    int hc, vc, n;
-    n = 0;
-
-    hc = opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                      T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-                     1) - opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                                       (T1_SIG_E | T1_SGN_E)) +
-                                      ((f & (T1_SIG_W | T1_SGN_W)) ==
-                                       (T1_SIG_W | T1_SGN_W)), 1);
-
-    vc = opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                      T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-                     1) - opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                                       (T1_SIG_N | T1_SGN_N)) +
-                                      ((f & (T1_SIG_S | T1_SGN_S)) ==
-                                       (T1_SIG_S | T1_SGN_S)), 1);
-
-    if (hc < 0) {
-        hc = -hc;
-        vc = -vc;
-    }
-    if (!hc) {
-        if (vc == -1) {
-            n = 1;
-        } else if (!vc) {
-            n = 0;
-        } else {
-            n = 1;
-        }
-    } else if (hc == 1) {
-        if (vc == -1) {
-            n = 2;
-        } else if (!vc) {
-            n = 3;
-        } else {
-            n = 4;
-        }
-    }
-
-    return (T1_CTXNO_SC + n);
-}
-
-static int t1_init_enc_ctxno_sc(int f)
+static int t1_init_ctxno_sc(int f)
 {
     int hc, vc, n;
     n = 0;
@@ -284,34 +160,7 @@ static int t1_init_enc_ctxno_sc(int f)
     return (T1_CTXNO_SC + n);
 }
 
-static int t1_init_spb(unsigned int f)
-{
-    int hc, vc, n;
-
-    hc = opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                      T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-                     1) - opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                                       (T1_SIG_E | T1_SGN_E)) +
-                                      ((f & (T1_SIG_W | T1_SGN_W)) ==
-                                       (T1_SIG_W | T1_SGN_W)), 1);
-
-    vc = opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                      T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-                     1) - opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                                       (T1_SIG_N | T1_SGN_N)) +
-                                      ((f & (T1_SIG_S | T1_SGN_S)) ==
-                                       (T1_SIG_S | T1_SGN_S)), 1);
-
-    if (!hc && !vc) {
-        n = 0;
-    } else {
-        n = (!(hc > 0 || (!hc && vc > 0)));
-    }
-
-    return n;
-}
-
-static int t1_init_enc_spb(int f)
+static int t1_init_spb(int f)
 {
     int hc, vc, n;
 
@@ -358,8 +207,7 @@ int main(int argc, char **argv)
     unsigned int i, j;
     double u, v, t;
 
-    int lut_ctxno_zc[1024];
-    int lut_enc_ctxno_zc[2048];
+    int lut_ctxno_zc[2048];
     int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS];
     int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS];
     int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS];
@@ -370,30 +218,6 @@ int main(int argc, char **argv)
     printf("/* This file was automatically generated by t1_generate_luts.c */\n\n");
 
     /* lut_ctxno_zc */
-    for (j = 0U; j < 4U; ++j) {
-        for (i = 0U; i < 256U; ++i) {
-            unsigned int orient = j;
-            if (orient == 2U) {
-                orient = 1U;
-            } else if (orient == 1U) {
-                orient = 2U;
-            }
-            lut_ctxno_zc[(orient << 8) | i] = t1_init_ctxno_zc(i, j);
-        }
-    }
-
-    printf("static const OPJ_BYTE lut_ctxno_zc[1024] = {\n    ");
-    for (i = 0U; i < 1023U; ++i) {
-        printf("%i,", lut_ctxno_zc[i]);
-        if (!((i + 1U) & 0x1fU)) {
-            printf("\n    ");
-        } else {
-            printf(" ");
-        }
-    }
-    printf("%i\n};\n\n", lut_ctxno_zc[1023]);
-
-    /* lut_enc_ctxno_zc */
     for (j = 0; j < 4; ++j) {
         for (i = 0; i < 512; ++i) {
             int orient = j;
@@ -402,68 +226,44 @@ int main(int argc, char **argv)
             } else if (orient == 1) {
                 orient = 2;
             }
-            lut_enc_ctxno_zc[(orient << 9) | i] = t1_init_enc_ctxno_zc(i, j);
+            lut_ctxno_zc[(orient << 9) | i] = t1_init_ctxno_zc(i, j);
         }
     }
 
-    printf("static const OPJ_BYTE lut_enc_ctxno_zc[2048] = {\n    ");
+    printf("static const OPJ_BYTE lut_ctxno_zc[2048] = {\n    ");
     for (i = 0; i < 2047; ++i) {
-        printf("%i,", lut_enc_ctxno_zc[i]);
+        printf("%i,", lut_ctxno_zc[i]);
         if (!((i + 1) & 0x1f)) {
             printf("\n    ");
         } else {
             printf(" ");
         }
     }
-    printf("%i\n};\n\n", lut_enc_ctxno_zc[2047]);
+    printf("%i\n};\n\n", lut_ctxno_zc[2047]);
 
     /* lut_ctxno_sc */
     printf("static const OPJ_BYTE lut_ctxno_sc[256] = {\n    ");
-    for (i = 0U; i < 255U; ++i) {
-        printf("0x%x,", t1_init_ctxno_sc(i << 4));
-        if (!((i + 1U) & 0xfU)) {
-            printf("\n    ");
-        } else {
-            printf(" ");
-        }
-    }
-    printf("0x%x\n};\n\n", t1_init_ctxno_sc(255U << 4));
-
-    /* lut_enc_ctxno_sc */
-    printf("static const OPJ_BYTE lut_enc_ctxno_sc[256] = {\n    ");
     for (i = 0; i < 255; ++i) {
-        printf("0x%x,", t1_init_enc_ctxno_sc(i));
+        printf("0x%x,", t1_init_ctxno_sc(i));
         if (!((i + 1) & 0xf)) {
             printf("\n    ");
         } else {
             printf(" ");
         }
     }
-    printf("0x%x\n};\n\n", t1_init_enc_ctxno_sc(255));
+    printf("0x%x\n};\n\n", t1_init_ctxno_sc(255));
 
     /* lut_spb */
     printf("static const OPJ_BYTE lut_spb[256] = {\n    ");
-    for (i = 0U; i < 255U; ++i) {
-        printf("%i,", t1_init_spb(i << 4));
-        if (!((i + 1U) & 0x1fU)) {
-            printf("\n    ");
-        } else {
-            printf(" ");
-        }
-    }
-    printf("%i\n};\n\n", t1_init_spb(255U << 4));
-
-    /* lut_enc_spb */
-    printf("static const OPJ_BYTE lut_enc_spb[256] = {\n    ");
     for (i = 0; i < 255; ++i) {
-        printf("%i,", t1_init_enc_spb(i));
+        printf("%i,", t1_init_spb(i));
         if (!((i + 1) & 0x1f)) {
             printf("\n    ");
         } else {
             printf(" ");
         }
     }
-    printf("%i\n};\n\n", t1_init_enc_spb(255));
+    printf("%i\n};\n\n", t1_init_spb(255));
 
     /* FIXME FIXME FIXME */
     /* fprintf(stdout,"nmsedec luts:\n"); */
index fe560e2e90d0ecc033c5d0f9e7c34bb53044505f..1a5e7844f761b602f0a61f1205ba9d96d0e0a94d 100644 (file)
@@ -1,41 +1,6 @@
 /* This file was automatically generated by t1_generate_luts.c */
 
-static const OPJ_BYTE lut_ctxno_zc[1024] = {
-    0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-    0, 3, 3, 6, 3, 6, 6, 8, 3, 6, 6, 8, 6, 8, 8, 8, 1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8,
-    1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    1, 4, 4, 7, 4, 7, 7, 8, 4, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8,
-    2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8, 2, 5, 5, 7, 5, 7, 7, 8, 5, 7, 7, 8, 7, 8, 8, 8
-};
-
-static const OPJ_BYTE lut_enc_ctxno_zc[2048] = {
+static const OPJ_BYTE lut_ctxno_zc[2048] = {
     0, 1, 3, 3, 1, 2, 3, 3, 5, 6, 7, 7, 6, 6, 7, 7, 0, 1, 3, 3, 1, 2, 3, 3, 5, 6, 7, 7, 6, 6, 7, 7,
     5, 6, 7, 7, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 7, 7, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8,
     1, 2, 3, 3, 2, 2, 3, 3, 6, 6, 7, 7, 6, 6, 7, 7, 1, 2, 3, 3, 2, 2, 3, 3, 6, 6, 7, 7, 6, 6, 7, 7,
@@ -103,25 +68,6 @@ static const OPJ_BYTE lut_enc_ctxno_zc[2048] = {
 };
 
 static const OPJ_BYTE lut_ctxno_sc[256] = {
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xb, 0x9, 0xa, 0xb, 0xb, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xd, 0x9, 0xa, 0xb, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xb, 0xc, 0xb, 0xb, 0xb, 0xb, 0xb,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xd, 0xc, 0xd, 0xb, 0xc, 0xb, 0xc,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0x9, 0xb, 0xc, 0xc, 0xb, 0x9, 0xa, 0xd, 0xc, 0xa, 0x9,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0xa, 0xb, 0xb, 0xc, 0xd, 0x9, 0xa, 0xd, 0xd, 0xa, 0xa,
-    0x9, 0xa, 0xc, 0xb, 0xa, 0x9, 0xd, 0xc, 0xc, 0xb, 0xc, 0xb, 0xd, 0xc, 0xd, 0xc,
-    0x9, 0xa, 0xc, 0xd, 0xa, 0xa, 0xd, 0xd, 0xc, 0xd, 0xc, 0xd, 0xd, 0xd, 0xd, 0xd
-};
-
-static const OPJ_BYTE lut_enc_ctxno_sc[256] = {
     0x9, 0x9, 0xa, 0xa, 0x9, 0x9, 0xa, 0xa, 0xc, 0xc, 0xd, 0xb, 0xc, 0xc, 0xd, 0xb,
     0x9, 0x9, 0xa, 0xa, 0x9, 0x9, 0xa, 0xa, 0xc, 0xc, 0xb, 0xd, 0xc, 0xc, 0xb, 0xd,
     0xc, 0xc, 0xd, 0xd, 0xc, 0xc, 0xb, 0xb, 0xc, 0x9, 0xd, 0xa, 0x9, 0xc, 0xa, 0xb,
@@ -141,17 +87,6 @@ static const OPJ_BYTE lut_enc_ctxno_sc[256] = {
 };
 
 static const OPJ_BYTE lut_spb[256] = {
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0,
-    0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1,
-    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0,
-    0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1,
-    0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
-};
-
-static const OPJ_BYTE lut_enc_spb[256] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1,
     0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1,