-#define opj_t1_dec_clnpass_internal(consistency_check, t1, bpno, cblksty, w, h, flags_stride) \
-{ \
- OPJ_INT32 one, half, oneplushalf, agg, runlen, vsc; \
- OPJ_UINT32 i, j, k; \
- OPJ_INT32 segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM; \
- \
- opj_mqc_t *mqc = t1->mqc; /* MQC component */ \
- \
- one = 1 << bpno; \
- half = one >> 1; \
- oneplushalf = one | half; \
- if (cblksty & J2K_CCP_CBLKSTY_VSC) { \
- opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
- for (k = 0; k < h; k += 4) { \
- for (i = 0; i < w; ++i) { \
- opj_colflag_t *colflags2 = colflags1 + 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)))); \
- } else { \
- agg = 0; \
- } \
- if (agg) { \
- opj_mqc_setcurctx(mqc, T1_CTXNO_AGG); \
- if (!opj_mqc_decode(mqc)) { \
- continue; \
- } \
- opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
- runlen = opj_mqc_decode(mqc); \
- runlen = (runlen << 1) | opj_mqc_decode(mqc); \
- } else { \
- runlen = 0; \
- } \
- for (j = k + (OPJ_UINT32)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, \
- &t1->data[(j * w) + i], \
- oneplushalf, \
- agg && (j == k + (OPJ_UINT32)runlen), \
- vsc, j - k); \
- } \
- *colflags2 &= ~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
- } \
- colflags1 += flags_stride; \
- } \
- } else { \
- OPJ_INT32 *data1 = t1->data; \
- opj_flag_t *flags1 = &t1->flags[1]; \
- opj_colflag_t *colflags1 = &t1->colflags[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 | T1_VISIT | T1_SIG_OTH)) ); \
- } \
- if (agg) { \
- opj_mqc_setcurctx(mqc, T1_CTXNO_AGG); \
- if (!opj_mqc_decode(mqc)) { \
- continue; \
- } \
- 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); \
- } else { \
- opj_t1_dec_clnpass_step(t1, flags2, colflags2, 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 | T1_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, 0, flags_stride); \
- } \
- if( consistency_check ) *flags2 &= ~T1_VISIT; \
- data2 += w; \
- flags2 += flags_stride; \
- if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1))) == (!(*flags2 & (T1_SIG | T1_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, 1, flags_stride); \
- } \
- if( consistency_check ) *flags2 &= ~T1_VISIT; \
- data2 += w; \
- flags2 += flags_stride; \
- if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2))) == (!(*flags2 & (T1_SIG | T1_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, 2, flags_stride); \
- } \
- if( consistency_check ) *flags2 &= ~T1_VISIT; \
- data2 += w; \
- flags2 += flags_stride; \
- if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3))) == (!(*flags2 & (T1_SIG | T1_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, 3, flags_stride); \
- } \
- if( consistency_check ) *flags2 &= ~T1_VISIT; \
- data2 += w; \
- } \
- *colflags2 &= ~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
- } \
- data1 += w << 2; \
- flags1 += flags_stride << 2; \
- colflags1 += 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; \
- for (j = k; j < h; ++j) { \
- flags2 += flags_stride; \
- opj_t1_dec_clnpass_step(t1, flags2, colflags2, data2, oneplushalf, j - k); \
- data2 += w; \
- } \
- *colflags2 &= ~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
- } \
- } \
- \
- if (segsym) { \
- OPJ_INT32 v = 0; \
- opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
- v = opj_mqc_decode(mqc); \
- v = (v << 1) | opj_mqc_decode(mqc); \
- v = (v << 1) | opj_mqc_decode(mqc); \
- v = (v << 1) | opj_mqc_decode(mqc); \
- /* \
- if (v!=0xa) { \
- opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v); \
- } \
- */ \
- } \
-} /* VSC and BYPASS by Antonin */
-
-static void opj_t1_dec_clnpass_64x64(
- opj_t1_t *t1,
- OPJ_INT32 bpno,
- OPJ_INT32 cblksty)