- 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 < h; ++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); \
- } \
- 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); \
- } \
- 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); \
- } \
- 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); \
- } \
- 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); \
- } \
- } \
+ 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_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_flag_t *flagsp2 = flagsp1 + i; \
+ if (k + 3 < h) { \
+ agg = !(*flagsp2 & agg_mask); \
+ } 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 + runlen; j < k + 4 && j < h; ++j) { \
+ vsc = (j == k + 3 || j == h - 1) ? 1 : 0; \
+ opj_t1_dec_clnpass_step_vsc( \
+ t1, \
+ flagsp2, \
+ &t1->data[(j * w) + i], \
+ oneplushalf, \
+ agg && (j == k + runlen), \
+ vsc, j - k); \
+ } \
+ *flagsp2 &= ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
+ } \
+ flagsp1 += flags_stride; \
+ } \
+ } else { \
+ OPJ_INT32 *data1 = t1->data; \
+ 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 *flagsp2 = flagsp1 + i; \
+ if (*flagsp2 == 0) { \
+ 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); \
+ 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, flagsp2, data2, oneplushalf, j); \
+ } \
+ data2 += w; \
+ } \
+ } else { \
+ 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); \
+ } \
+ data2 += w; \
+ 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); \
+ } \
+ data2 += w; \
+ 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); \
+ } \
+ data2 += w; \
+ 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); \
+ } \
+ data2 += w; \
+ } \
+ *flagsp2 &= ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
+ } \
+ data1 += w << 2; \
+ flagsp1 += flags_stride; \
+ } \
+ for (i = 0; i < w; ++i) { \
+ OPJ_INT32 *data2 = data1 + i; \
+ opj_flag_t *flagsp2 = flagsp1 + i; \
+ for (j = k; j < h; ++j) { \
+ opj_t1_dec_clnpass_step(t1, flagsp2, data2, oneplushalf, j - k); \
+ data2 += w; \
+ } \
+ *flagsp2 &= ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
+ } \
+ } \