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,