75 #include "jasper/jas_fix.h"
76 #include "jasper/jas_math.h"
78 #include "jpc_mqcod.h"
86 #define JPC_NMSEDEC_BITS 7
87 #define JPC_NMSEDEC_FRACBITS (JPC_NMSEDEC_BITS - 1)
94 #define JPC_SEG_INVALID 0
104 #define JPC_SIGPASS 0
105 #define JPC_REFPASS 1
106 #define JPC_CLNPASS 2
113 #define JPC_NESIG 0x0001
115 #define JPC_SESIG 0x0002
117 #define JPC_SWSIG 0x0004
119 #define JPC_NWSIG 0x0008
121 #define JPC_NSIG 0x0010
123 #define JPC_ESIG 0x0020
125 #define JPC_SSIG 0x0040
127 #define JPC_WSIG 0x0080
129 #define JPC_OTHSIGMSK \
130 (JPC_NSIG | JPC_NESIG | JPC_ESIG | JPC_SESIG | JPC_SSIG | JPC_SWSIG | JPC_WSIG | JPC_NWSIG)
132 #define JPC_PRIMSIGMSK (JPC_NSIG | JPC_ESIG | JPC_SSIG | JPC_WSIG)
135 #define JPC_NSGN 0x0100
137 #define JPC_ESGN 0x0200
139 #define JPC_SSGN 0x0400
141 #define JPC_WSGN 0x0800
143 #define JPC_SGNMSK (JPC_NSGN | JPC_ESGN | JPC_SSGN | JPC_WSGN)
146 #define JPC_SIG 0x1000
148 #define JPC_REFINE 0x2000
150 #define JPC_VISIT 0x4000
153 #define JPC_NUMAGGCTXS 1
155 #define JPC_NUMZCCTXS 9
157 #define JPC_NUMMAGCTXS 3
159 #define JPC_NUMSCCTXS 5
161 #define JPC_NUMUCTXS 1
164 #define JPC_AGGCTXNO 0
166 #define JPC_ZCCTXNO (JPC_AGGCTXNO + JPC_NUMAGGCTXS)
168 #define JPC_MAGCTXNO (JPC_ZCCTXNO + JPC_NUMZCCTXS)
170 #define JPC_SCCTXNO (JPC_MAGCTXNO + JPC_NUMMAGCTXS)
172 #define JPC_UCTXNO (JPC_SCCTXNO + JPC_NUMSCCTXS)
174 #define JPC_NUMCTXS (JPC_UCTXNO + JPC_NUMUCTXS)
182 extern int jpc_zcctxnolut[];
183 extern int jpc_spblut[];
184 extern int jpc_scctxnolut[];
185 extern int jpc_magctxnolut[];
186 extern jpc_fix_t jpc_refnmsedec[];
187 extern jpc_fix_t jpc_signmsedec[];
188 extern jpc_fix_t jpc_refnmsedec0[];
189 extern jpc_fix_t jpc_signmsedec0[];
192 extern jpc_mqctx_t jpc_mqctxs[];
199 void jpc_initctxs(jpc_mqctx_t *ctxs);
202 int jpc_getzcctxno(
int f,
int orient);
203 #define JPC_GETZCCTXNO(f, orient) \
204 (jpc_zcctxnolut[((orient) << 8) | ((f) & JPC_OTHSIGMSK)])
207 int jpc_getspb(
int f);
208 #define JPC_GETSPB(f) \
209 (jpc_spblut[((f) & (JPC_PRIMSIGMSK | JPC_SGNMSK)) >> 4])
212 int jpc_getscctxno(
int f);
213 #define JPC_GETSCCTXNO(f) \
214 (jpc_scctxnolut[((f) & (JPC_PRIMSIGMSK | JPC_SGNMSK)) >> 4])
217 int jpc_getmagctxno(
int f);
218 #define JPC_GETMAGCTXNO(f) \
219 (jpc_magctxnolut[((f) & JPC_OTHSIGMSK) | ((((f) & JPC_REFINE) != 0) << 11)])
222 #define JPC_GETSIGNMSEDEC(x, bitpos) jpc_getsignmsedec_macro(x, bitpos)
223 jpc_fix_t jpc_getsignmsedec_func(jpc_fix_t x,
int bitpos);
224 #define jpc_getsignmsedec_macro(x, bitpos) \
225 ((bitpos > JPC_NMSEDEC_FRACBITS) ? jpc_signmsedec[JPC_ASR(x, bitpos - JPC_NMSEDEC_FRACBITS) & JAS_ONES(JPC_NMSEDEC_BITS)] : \
226 (jpc_signmsedec0[JPC_ASR(x, bitpos - JPC_NMSEDEC_FRACBITS) & JAS_ONES(JPC_NMSEDEC_BITS)]))
229 #define JPC_GETREFNMSEDEC(x, bitpos) jpc_getrefnmsedec_macro(x, bitpos)
230 jpc_fix_t jpc_refsignmsedec_func(jpc_fix_t x,
int bitpos);
231 #define jpc_getrefnmsedec_macro(x, bitpos) \
232 ((bitpos > JPC_NMSEDEC_FRACBITS) ? jpc_refnmsedec[JPC_ASR(x, bitpos - JPC_NMSEDEC_FRACBITS) & JAS_ONES(JPC_NMSEDEC_BITS)] : \
233 (jpc_refnmsedec0[JPC_ASR(x, bitpos - JPC_NMSEDEC_FRACBITS) & JAS_ONES(JPC_NMSEDEC_BITS)]))
236 #define JPC_ASR(x, n) \
237 (((n) >= 0) ? ((x) >> (n)) : ((x) << (-(n))))
240 #define JPC_UPDATEFLAGS4(fp, rowstep, s, vcausalflag) \
242 register jpc_fix_t *np = (fp) - (rowstep); \
243 register jpc_fix_t *sp = (fp) + (rowstep); \
244 if ((vcausalflag)) { \
245 sp[-1] |= JPC_NESIG; \
246 sp[1] |= JPC_NWSIG; \
248 *sp |= JPC_NSIG | JPC_NSGN; \
249 (fp)[-1] |= JPC_ESIG | JPC_ESGN; \
250 (fp)[1] |= JPC_WSIG | JPC_WSGN; \
253 (fp)[-1] |= JPC_ESIG; \
254 (fp)[1] |= JPC_WSIG; \
257 np[-1] |= JPC_SESIG; \
258 np[1] |= JPC_SWSIG; \
259 sp[-1] |= JPC_NESIG; \
260 sp[1] |= JPC_NWSIG; \
262 *np |= JPC_SSIG | JPC_SSGN; \
263 *sp |= JPC_NSIG | JPC_NSGN; \
264 (fp)[-1] |= JPC_ESIG | JPC_ESGN; \
265 (fp)[1] |= JPC_WSIG | JPC_WSGN; \
269 (fp)[-1] |= JPC_ESIG; \
270 (fp)[1] |= JPC_WSIG; \
276 void jpc_initluts(
void);
279 int JPC_NOMINALGAIN(
int qmfbid,
int numlvls,
int lvlno,
int orient);
282 int JPC_PASSTYPE(
int passno);
285 int JPC_SEGTYPE(
int passno,
int firstpassno,
int bypass);
288 int JPC_SEGPASSCNT(
int passno,
int firstpassno,
int numpasses,
int bypass,
292 int JPC_ISTERMINATED(
int passno,
int firstpassno,
int numpasses,
int termall,