25#define DEC_PASS_CLN_STEP(checkFlags, partial, flags, flagsPtr, flagsStride, data, dataStride, \
29 if(!checkFlags || !(flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci)))) \
34 uint8_t ctxt1 = GETCTXNO_ZC(mqc, flags >> (ci)); \
35 SETCURCTX(curctx, ctxt1); \
36 DEC_SYMBOL(v, mqc, curctx, a, c, ct); \
42 uint8_t lu = getctxtno_sc_or_spb_index(flags, flagsPtr[-1], flagsPtr[1], ci); \
43 SETCURCTX(curctx, lut_ctxno_sc[lu]); \
44 DEC_SYMBOL(v, mqc, curctx, a, c, ct); \
45 v = v ^ lut_spb[lu]; \
46 (data)[ciorig * dataStride] = v ? -oneplushalf : oneplushalf; \
47 UPDATE_FLAGS(flags, flagsPtr, ci, v, flagsStride, vsc); \
51#define DEC_PASS_CLN_IMPL(bpno, vsc, w_, h_, flagsStride) \
53 DEC_PASS_LOCAL_VARIABLES(flagsStride) \
54 const int32_t half = one >> 1; \
55 const int32_t oneplushalf = one | half; \
58 bool partial = false; \
59 for(k = 0; k < (h_ & ~3u); k += 4, dataPtr += 3 * w_, flagsPtr += 2) \
61 for(i = 0; i < w_; ++i, ++dataPtr, ++flagsPtr) \
67 SETCURCTX(curctx, T1_CTXNO_AGG); \
68 DEC_SYMBOL(d, mqc, curctx, a, c, ct); \
71 SETCURCTX(curctx, T1_CTXNO_UNI); \
72 DEC_SYMBOL(runlen, mqc, curctx, a, c, ct); \
73 DEC_SYMBOL(d, mqc, curctx, a, c, ct); \
74 runlen = (runlen << 1) | d; \
78 DEC_PASS_CLN_STEP(false, true, _flags, flagsPtr, flagsStride, dataPtr, w_, 0, 0, \
83 DEC_PASS_CLN_STEP(false, partial, _flags, flagsPtr, flagsStride, dataPtr, w_, 1, 3, \
88 DEC_PASS_CLN_STEP(false, partial, _flags, flagsPtr, flagsStride, dataPtr, w_, 2, 6, \
93 DEC_PASS_CLN_STEP(false, partial, _flags, flagsPtr, flagsStride, dataPtr, w_, 3, 9, \
100 DEC_PASS_CLN_STEP(true, false, _flags, flagsPtr, flagsStride, dataPtr, w_, 0, 0, vsc); \
101 DEC_PASS_CLN_STEP(true, false, _flags, flagsPtr, flagsStride, dataPtr, w_, 1, 3, false); \
102 DEC_PASS_CLN_STEP(true, false, _flags, flagsPtr, flagsStride, dataPtr, w_, 2, 6, false); \
103 DEC_PASS_CLN_STEP(true, false, _flags, flagsPtr, flagsStride, dataPtr, w_, 3, 9, false); \
105 *flagsPtr = _flags & ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
110 for(i = 0; i < w_; ++i, ++flagsPtr, ++dataPtr) \
112 for(j = 0; j < h_ - k; ++j) \
114 _flags = *flagsPtr; \
115 DEC_PASS_CLN_STEP(true, false, _flags, flagsPtr, w_ + 2U, dataPtr + j * w_, 0, j, j * 3, \
117 *flagsPtr = _flags; \
119 *flagsPtr &= ~(T1_PI_0 | T1_PI_1 | T1_PI_2 | T1_PI_3); \
125#define DEC_PASS_SIG_STEP(flags, flagsPtr, flagsStride, data, dataStride, ciorig, ci, vsc) \
128 if((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci))) == 0U && \
129 (flags & (T1_SIGMA_NEIGHBOURS << (ci))) != 0U) \
131 uint8_t ctxt1 = GETCTXNO_ZC(mqc, flags >> (ci)); \
132 SETCURCTX(curctx, ctxt1); \
134 DEC_SYMBOL(v, mqc, curctx, a, c, ct); \
137 uint8_t lu = getctxtno_sc_or_spb_index(flags, flagsPtr[-1], flagsPtr[1], ci); \
138 uint8_t ctxt2 = lut_ctxno_sc[lu]; \
139 uint8_t spb = lut_spb[lu]; \
140 SETCURCTX(curctx, ctxt2); \
141 DEC_SYMBOL(v, mqc, curctx, a, c, ct); \
143 (data)[(ciorig) * dataStride] = v ? -oneplushalf : oneplushalf; \
144 UPDATE_FLAGS(flags, flagsPtr, ci, v, flagsStride, vsc); \
146 flags |= T1_PI_THIS << (ci); \
150#define DEC_PASS_SIG_IMPL(bpno, vsc, w_, h_, flagsStride) \
152 DEC_PASS_LOCAL_VARIABLES(flagsStride) \
153 const int32_t half = one >> 1; \
154 const int32_t oneplushalf = one | half; \
155 for(k = 0; k < (h_ & ~3u); k += 4, dataPtr += 3 * w_, flagsPtr += 2) \
157 for(i = 0; i < w_; ++i, ++dataPtr, ++flagsPtr) \
159 _flags = *flagsPtr; \
162 DEC_PASS_SIG_STEP(_flags, flagsPtr, flagsStride, dataPtr, w_, 0, 0, vsc); \
163 DEC_PASS_SIG_STEP(_flags, flagsPtr, flagsStride, dataPtr, w_, 1, 3, false); \
164 DEC_PASS_SIG_STEP(_flags, flagsPtr, flagsStride, dataPtr, w_, 2, 6, false); \
165 DEC_PASS_SIG_STEP(_flags, flagsPtr, flagsStride, dataPtr, w_, 3, 9, false); \
166 *flagsPtr = _flags; \
171 for(i = 0; i < w_; ++i, ++dataPtr, ++flagsPtr) \
172 for(j = 0; j < h_ - k; ++j) \
174 _flags = *flagsPtr; \
175 DEC_PASS_SIG_STEP(_flags, flagsPtr, flagsStride, dataPtr + j * w_, 0, j, 3 * j, vsc); \
176 *flagsPtr = _flags; \
182#define DEC_PASS_REF_STEP(flags, data, dataStride, ciorig, ci) \
185 if((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci))) == (T1_SIGMA_THIS << (ci))) \
187 uint8_t ctxno = GETCTXNO_MAG(flags >> (ci)); \
188 SETCURCTX(curctx, ctxno); \
190 DEC_SYMBOL(v, mqc, curctx, a, c, ct); \
191 (data)[ciorig * dataStride] += (v ^ ((data)[ciorig * dataStride] < 0)) ? poshalf : -poshalf; \
192 flags |= T1_MU_THIS << (ci); \
196#define DEC_PASS_REF_IMPL(bpno, w_, h_, flagsStride) \
198 DEC_PASS_LOCAL_VARIABLES(flagsStride) \
199 const int32_t poshalf = one >> 1; \
200 for(k = 0; k < (h_ & ~3u); k += 4, dataPtr += 3 * w_, flagsPtr += 2) \
202 for(i = 0; i < w_; ++i, ++dataPtr, ++flagsPtr) \
204 _flags = *flagsPtr; \
207 DEC_PASS_REF_STEP(_flags, dataPtr, w_, 0, 0); \
208 DEC_PASS_REF_STEP(_flags, dataPtr, w_, 1, 3); \
209 DEC_PASS_REF_STEP(_flags, dataPtr, w_, 2, 6); \
210 DEC_PASS_REF_STEP(_flags, dataPtr, w_, 3, 9); \
211 *flagsPtr = _flags; \
216 for(i = 0; i < w_; ++i, ++dataPtr, ++flagsPtr) \
217 for(j = 0; j < h_ - k; ++j) \
219 _flags = *flagsPtr; \
220 DEC_PASS_REF_STEP(_flags, dataPtr + j * w_, 0, j, j * 3); \
221 *flagsPtr = _flags; \
Definition SchedulerFreebyrd.h:36