tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jdarith.c (25539B)


      1 /*
      2 * jdarith.c
      3 *
      4 * This file was part of the Independent JPEG Group's software:
      5 * Developed 1997-2015 by Guido Vollbeding.
      6 * libjpeg-turbo Modifications:
      7 * Copyright (C) 2015-2020, 2022, D. R. Commander.
      8 * For conditions of distribution and use, see the accompanying README.ijg
      9 * file.
     10 *
     11 * This file contains portable arithmetic entropy encoding routines for JPEG
     12 * (implementing Recommendation ITU-T T.81 | ISO/IEC 10918-1).
     13 *
     14 * Both sequential and progressive modes are supported in this single module.
     15 *
     16 * Suspension is not currently supported in this module.
     17 *
     18 * NOTE: All referenced figures are from
     19 * Recommendation ITU-T T.81 (1992) | ISO/IEC 10918-1:1994.
     20 */
     21 
     22 #define JPEG_INTERNALS
     23 #include "jinclude.h"
     24 #include "jpeglib.h"
     25 
     26 
     27 #define NEG_1  ((unsigned int)-1)
     28 
     29 
     30 /* Expanded entropy decoder object for arithmetic decoding. */
     31 
     32 typedef struct {
     33  struct jpeg_entropy_decoder pub; /* public fields */
     34 
     35  JLONG c;       /* C register, base of coding interval + input bit buffer */
     36  JLONG a;               /* A register, normalized size of coding interval */
     37  int ct;     /* bit shift counter, # of bits left in bit buffer part of C */
     38                                                         /* init: ct = -16 */
     39                                                         /* run: ct = 0..7 */
     40                                                         /* error: ct = -1 */
     41  int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
     42  int dc_context[MAX_COMPS_IN_SCAN]; /* context index for DC conditioning */
     43 
     44  unsigned int restarts_to_go;  /* MCUs left in this restart interval */
     45 
     46  /* Pointers to statistics areas (these workspaces have image lifespan) */
     47  unsigned char *dc_stats[NUM_ARITH_TBLS];
     48  unsigned char *ac_stats[NUM_ARITH_TBLS];
     49 
     50  /* Statistics bin for coding with fixed probability 0.5 */
     51  unsigned char fixed_bin[4];
     52 } arith_entropy_decoder;
     53 
     54 typedef arith_entropy_decoder *arith_entropy_ptr;
     55 
     56 /* The following two definitions specify the allocation chunk size
     57 * for the statistics area.
     58 * According to sections F.1.4.4.1.3 and F.1.4.4.2, we need at least
     59 * 49 statistics bins for DC, and 245 statistics bins for AC coding.
     60 *
     61 * We use a compact representation with 1 byte per statistics bin,
     62 * thus the numbers directly represent byte sizes.
     63 * This 1 byte per statistics bin contains the meaning of the MPS
     64 * (more probable symbol) in the highest bit (mask 0x80), and the
     65 * index into the probability estimation state machine table
     66 * in the lower bits (mask 0x7F).
     67 */
     68 
     69 #define DC_STAT_BINS  64
     70 #define AC_STAT_BINS  256
     71 
     72 
     73 LOCAL(int)
     74 get_byte(j_decompress_ptr cinfo)
     75 /* Read next input byte; we do not support suspension in this module. */
     76 {
     77  struct jpeg_source_mgr *src = cinfo->src;
     78 
     79  if (src->bytes_in_buffer == 0)
     80    if (!(*src->fill_input_buffer) (cinfo))
     81      ERREXIT(cinfo, JERR_CANT_SUSPEND);
     82  src->bytes_in_buffer--;
     83  return *src->next_input_byte++;
     84 }
     85 
     86 
     87 /*
     88 * The core arithmetic decoding routine (common in JPEG and JBIG).
     89 * This needs to go as fast as possible.
     90 * Machine-dependent optimization facilities
     91 * are not utilized in this portable implementation.
     92 * However, this code should be fairly efficient and
     93 * may be a good base for further optimizations anyway.
     94 *
     95 * Return value is 0 or 1 (binary decision).
     96 *
     97 * Note: I've changed the handling of the code base & bit
     98 * buffer register C compared to other implementations
     99 * based on the standards layout & procedures.
    100 * While it also contains both the actual base of the
    101 * coding interval (16 bits) and the next-bits buffer,
    102 * the cut-point between these two parts is floating
    103 * (instead of fixed) with the bit shift counter CT.
    104 * Thus, we also need only one (variable instead of
    105 * fixed size) shift for the LPS/MPS decision, and
    106 * we can do away with any renormalization update
    107 * of C (except for new data insertion, of course).
    108 *
    109 * I've also introduced a new scheme for accessing
    110 * the probability estimation state machine table,
    111 * derived from Markus Kuhn's JBIG implementation.
    112 */
    113 
    114 LOCAL(int)
    115 arith_decode(j_decompress_ptr cinfo, unsigned char *st)
    116 {
    117  register arith_entropy_ptr e = (arith_entropy_ptr)cinfo->entropy;
    118  register unsigned char nl, nm;
    119  register JLONG qe, temp;
    120  register int sv, data;
    121 
    122  /* Renormalization & data input per section D.2.6 */
    123  while (e->a < 0x8000L) {
    124    if (--e->ct < 0) {
    125      /* Need to fetch next data byte */
    126      if (cinfo->unread_marker)
    127        data = 0;               /* stuff zero data */
    128      else {
    129        data = get_byte(cinfo); /* read next input byte */
    130        if (data == 0xFF) {     /* zero stuff or marker code */
    131          do data = get_byte(cinfo);
    132          while (data == 0xFF); /* swallow extra 0xFF bytes */
    133          if (data == 0)
    134            data = 0xFF;        /* discard stuffed zero byte */
    135          else {
    136            /* Note: Different from the Huffman decoder, hitting
    137             * a marker while processing the compressed data
    138             * segment is legal in arithmetic coding.
    139             * The convention is to supply zero data
    140             * then until decoding is complete.
    141             */
    142            cinfo->unread_marker = data;
    143            data = 0;
    144          }
    145        }
    146      }
    147      e->c = (e->c << 8) | data; /* insert data into C register */
    148      if ((e->ct += 8) < 0)      /* update bit shift counter */
    149        /* Need more initial bytes */
    150        if (++e->ct == 0)
    151          /* Got 2 initial bytes -> re-init A and exit loop */
    152          e->a = 0x8000L; /* => e->a = 0x10000L after loop exit */
    153    }
    154    e->a <<= 1;
    155  }
    156 
    157  /* Fetch values from our compact representation of Table D.2:
    158   * Qe values and probability estimation state machine
    159   */
    160  sv = *st;
    161  qe = jpeg_aritab[sv & 0x7F];  /* => Qe_Value */
    162  nl = qe & 0xFF;  qe >>= 8;    /* Next_Index_LPS + Switch_MPS */
    163  nm = qe & 0xFF;  qe >>= 8;    /* Next_Index_MPS */
    164 
    165  /* Decode & estimation procedures per sections D.2.4 & D.2.5 */
    166  temp = e->a - qe;
    167  e->a = temp;
    168  temp <<= e->ct;
    169  if (e->c >= temp) {
    170    e->c -= temp;
    171    /* Conditional LPS (less probable symbol) exchange */
    172    if (e->a < qe) {
    173      e->a = qe;
    174      *st = (sv & 0x80) ^ nm;   /* Estimate_after_MPS */
    175    } else {
    176      e->a = qe;
    177      *st = (sv & 0x80) ^ nl;   /* Estimate_after_LPS */
    178      sv ^= 0x80;               /* Exchange LPS/MPS */
    179    }
    180  } else if (e->a < 0x8000L) {
    181    /* Conditional MPS (more probable symbol) exchange */
    182    if (e->a < qe) {
    183      *st = (sv & 0x80) ^ nl;   /* Estimate_after_LPS */
    184      sv ^= 0x80;               /* Exchange LPS/MPS */
    185    } else {
    186      *st = (sv & 0x80) ^ nm;   /* Estimate_after_MPS */
    187    }
    188  }
    189 
    190  return sv >> 7;
    191 }
    192 
    193 
    194 /*
    195 * Check for a restart marker & resynchronize decoder.
    196 */
    197 
    198 LOCAL(void)
    199 process_restart(j_decompress_ptr cinfo)
    200 {
    201  arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
    202  int ci;
    203  jpeg_component_info *compptr;
    204 
    205  /* Advance past the RSTn marker */
    206  if (!(*cinfo->marker->read_restart_marker) (cinfo))
    207    ERREXIT(cinfo, JERR_CANT_SUSPEND);
    208 
    209  /* Re-initialize statistics areas */
    210  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
    211    compptr = cinfo->cur_comp_info[ci];
    212    if (!cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) {
    213      memset(entropy->dc_stats[compptr->dc_tbl_no], 0, DC_STAT_BINS);
    214      /* Reset DC predictions to 0 */
    215      entropy->last_dc_val[ci] = 0;
    216      entropy->dc_context[ci] = 0;
    217    }
    218    if (!cinfo->progressive_mode || cinfo->Ss) {
    219      memset(entropy->ac_stats[compptr->ac_tbl_no], 0, AC_STAT_BINS);
    220    }
    221  }
    222 
    223  /* Reset arithmetic decoding variables */
    224  entropy->c = 0;
    225  entropy->a = 0;
    226  entropy->ct = -16;    /* force reading 2 initial bytes to fill C */
    227 
    228  /* Reset restart counter */
    229  entropy->restarts_to_go = cinfo->restart_interval;
    230 }
    231 
    232 
    233 /*
    234 * Arithmetic MCU decoding.
    235 * Each of these routines decodes and returns one MCU's worth of
    236 * arithmetic-compressed coefficients.
    237 * The coefficients are reordered from zigzag order into natural array order,
    238 * but are not dequantized.
    239 *
    240 * The i'th block of the MCU is stored into the block pointed to by
    241 * MCU_data[i].  WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER.
    242 */
    243 
    244 /*
    245 * MCU decoding for DC initial scan (either spectral selection,
    246 * or first pass of successive approximation).
    247 */
    248 
    249 METHODDEF(boolean)
    250 decode_mcu_DC_first(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
    251 {
    252  arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
    253  JBLOCKROW block;
    254  unsigned char *st;
    255  int blkn, ci, tbl, sign;
    256  int v, m;
    257 
    258  /* Process restart marker if needed */
    259  if (cinfo->restart_interval) {
    260    if (entropy->restarts_to_go == 0)
    261      process_restart(cinfo);
    262    entropy->restarts_to_go--;
    263  }
    264 
    265  if (entropy->ct == -1) return TRUE;   /* if error do nothing */
    266 
    267  /* Outer loop handles each block in the MCU */
    268 
    269  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
    270    block = MCU_data[blkn];
    271    ci = cinfo->MCU_membership[blkn];
    272    tbl = cinfo->cur_comp_info[ci]->dc_tbl_no;
    273 
    274    /* Sections F.2.4.1 & F.1.4.4.1: Decoding of DC coefficients */
    275 
    276    /* Table F.4: Point to statistics bin S0 for DC coefficient coding */
    277    st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
    278 
    279    /* Figure F.19: Decode_DC_DIFF */
    280    if (arith_decode(cinfo, st) == 0)
    281      entropy->dc_context[ci] = 0;
    282    else {
    283      /* Figure F.21: Decoding nonzero value v */
    284      /* Figure F.22: Decoding the sign of v */
    285      sign = arith_decode(cinfo, st + 1);
    286      st += 2;  st += sign;
    287      /* Figure F.23: Decoding the magnitude category of v */
    288      if ((m = arith_decode(cinfo, st)) != 0) {
    289        st = entropy->dc_stats[tbl] + 20;       /* Table F.4: X1 = 20 */
    290        while (arith_decode(cinfo, st)) {
    291          if ((m <<= 1) == 0x8000) {
    292            WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
    293            entropy->ct = -1;                   /* magnitude overflow */
    294            return TRUE;
    295          }
    296          st += 1;
    297        }
    298      }
    299      /* Section F.1.4.4.1.2: Establish dc_context conditioning category */
    300      if (m < (int)((1L << cinfo->arith_dc_L[tbl]) >> 1))
    301        entropy->dc_context[ci] = 0;               /* zero diff category */
    302      else if (m > (int)((1L << cinfo->arith_dc_U[tbl]) >> 1))
    303        entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */
    304      else
    305        entropy->dc_context[ci] = 4 + (sign * 4);  /* small diff category */
    306      v = m;
    307      /* Figure F.24: Decoding the magnitude bit pattern of v */
    308      st += 14;
    309      while (m >>= 1)
    310        if (arith_decode(cinfo, st)) v |= m;
    311      v += 1;  if (sign) v = -v;
    312      entropy->last_dc_val[ci] = (entropy->last_dc_val[ci] + v) & 0xffff;
    313    }
    314 
    315    /* Scale and output the DC coefficient (assumes jpeg_natural_order[0]=0) */
    316    (*block)[0] = (JCOEF)LEFT_SHIFT(entropy->last_dc_val[ci], cinfo->Al);
    317  }
    318 
    319  return TRUE;
    320 }
    321 
    322 
    323 /*
    324 * MCU decoding for AC initial scan (either spectral selection,
    325 * or first pass of successive approximation).
    326 */
    327 
    328 METHODDEF(boolean)
    329 decode_mcu_AC_first(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
    330 {
    331  arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
    332  JBLOCKROW block;
    333  unsigned char *st;
    334  int tbl, sign, k;
    335  int v, m;
    336 
    337  /* Process restart marker if needed */
    338  if (cinfo->restart_interval) {
    339    if (entropy->restarts_to_go == 0)
    340      process_restart(cinfo);
    341    entropy->restarts_to_go--;
    342  }
    343 
    344  if (entropy->ct == -1) return TRUE;   /* if error do nothing */
    345 
    346  /* There is always only one block per MCU */
    347  block = MCU_data[0];
    348  tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
    349 
    350  /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */
    351 
    352  /* Figure F.20: Decode_AC_coefficients */
    353  for (k = cinfo->Ss; k <= cinfo->Se; k++) {
    354    st = entropy->ac_stats[tbl] + 3 * (k - 1);
    355    if (arith_decode(cinfo, st)) break;         /* EOB flag */
    356    while (arith_decode(cinfo, st + 1) == 0) {
    357      st += 3;  k++;
    358      if (k > cinfo->Se) {
    359        WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
    360        entropy->ct = -1;                       /* spectral overflow */
    361        return TRUE;
    362      }
    363    }
    364    /* Figure F.21: Decoding nonzero value v */
    365    /* Figure F.22: Decoding the sign of v */
    366    sign = arith_decode(cinfo, entropy->fixed_bin);
    367    st += 2;
    368    /* Figure F.23: Decoding the magnitude category of v */
    369    if ((m = arith_decode(cinfo, st)) != 0) {
    370      if (arith_decode(cinfo, st)) {
    371        m <<= 1;
    372        st = entropy->ac_stats[tbl] +
    373             (k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
    374        while (arith_decode(cinfo, st)) {
    375          if ((m <<= 1) == 0x8000) {
    376            WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
    377            entropy->ct = -1;                   /* magnitude overflow */
    378            return TRUE;
    379          }
    380          st += 1;
    381        }
    382      }
    383    }
    384    v = m;
    385    /* Figure F.24: Decoding the magnitude bit pattern of v */
    386    st += 14;
    387    while (m >>= 1)
    388      if (arith_decode(cinfo, st)) v |= m;
    389    v += 1;  if (sign) v = -v;
    390    /* Scale and output coefficient in natural (dezigzagged) order */
    391    (*block)[jpeg_natural_order[k]] = (JCOEF)((unsigned)v << cinfo->Al);
    392  }
    393 
    394  return TRUE;
    395 }
    396 
    397 
    398 /*
    399 * MCU decoding for DC successive approximation refinement scan.
    400 */
    401 
    402 METHODDEF(boolean)
    403 decode_mcu_DC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
    404 {
    405  arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
    406  unsigned char *st;
    407  int p1, blkn;
    408 
    409  /* Process restart marker if needed */
    410  if (cinfo->restart_interval) {
    411    if (entropy->restarts_to_go == 0)
    412      process_restart(cinfo);
    413    entropy->restarts_to_go--;
    414  }
    415 
    416  st = entropy->fixed_bin;      /* use fixed probability estimation */
    417  p1 = 1 << cinfo->Al;          /* 1 in the bit position being coded */
    418 
    419  /* Outer loop handles each block in the MCU */
    420 
    421  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
    422    /* Encoded data is simply the next bit of the two's-complement DC value */
    423    if (arith_decode(cinfo, st))
    424      MCU_data[blkn][0][0] |= p1;
    425  }
    426 
    427  return TRUE;
    428 }
    429 
    430 
    431 /*
    432 * MCU decoding for AC successive approximation refinement scan.
    433 */
    434 
    435 METHODDEF(boolean)
    436 decode_mcu_AC_refine(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
    437 {
    438  arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
    439  JBLOCKROW block;
    440  JCOEFPTR thiscoef;
    441  unsigned char *st;
    442  int tbl, k, kex;
    443  int p1, m1;
    444 
    445  /* Process restart marker if needed */
    446  if (cinfo->restart_interval) {
    447    if (entropy->restarts_to_go == 0)
    448      process_restart(cinfo);
    449    entropy->restarts_to_go--;
    450  }
    451 
    452  if (entropy->ct == -1) return TRUE;   /* if error do nothing */
    453 
    454  /* There is always only one block per MCU */
    455  block = MCU_data[0];
    456  tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
    457 
    458  p1 = 1 << cinfo->Al;          /* 1 in the bit position being coded */
    459  m1 = (NEG_1) << cinfo->Al;    /* -1 in the bit position being coded */
    460 
    461  /* Establish EOBx (previous stage end-of-block) index */
    462  for (kex = cinfo->Se; kex > 0; kex--)
    463    if ((*block)[jpeg_natural_order[kex]]) break;
    464 
    465  for (k = cinfo->Ss; k <= cinfo->Se; k++) {
    466    st = entropy->ac_stats[tbl] + 3 * (k - 1);
    467    if (k > kex)
    468      if (arith_decode(cinfo, st)) break;       /* EOB flag */
    469    for (;;) {
    470      thiscoef = *block + jpeg_natural_order[k];
    471      if (*thiscoef) {                          /* previously nonzero coef */
    472        if (arith_decode(cinfo, st + 2)) {
    473          if (*thiscoef < 0)
    474            *thiscoef += (JCOEF)m1;
    475          else
    476            *thiscoef += (JCOEF)p1;
    477        }
    478        break;
    479      }
    480      if (arith_decode(cinfo, st + 1)) {        /* newly nonzero coef */
    481        if (arith_decode(cinfo, entropy->fixed_bin))
    482          *thiscoef = (JCOEF)m1;
    483        else
    484          *thiscoef = (JCOEF)p1;
    485        break;
    486      }
    487      st += 3;  k++;
    488      if (k > cinfo->Se) {
    489        WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
    490        entropy->ct = -1;                       /* spectral overflow */
    491        return TRUE;
    492      }
    493    }
    494  }
    495 
    496  return TRUE;
    497 }
    498 
    499 
    500 /*
    501 * Decode one MCU's worth of arithmetic-compressed coefficients.
    502 */
    503 
    504 METHODDEF(boolean)
    505 decode_mcu(j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
    506 {
    507  arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
    508  jpeg_component_info *compptr;
    509  JBLOCKROW block;
    510  unsigned char *st;
    511  int blkn, ci, tbl, sign, k;
    512  int v, m;
    513 
    514  /* Process restart marker if needed */
    515  if (cinfo->restart_interval) {
    516    if (entropy->restarts_to_go == 0)
    517      process_restart(cinfo);
    518    entropy->restarts_to_go--;
    519  }
    520 
    521  if (entropy->ct == -1) return TRUE;   /* if error do nothing */
    522 
    523  /* Outer loop handles each block in the MCU */
    524 
    525  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
    526    block = MCU_data ? MCU_data[blkn] : NULL;
    527    ci = cinfo->MCU_membership[blkn];
    528    compptr = cinfo->cur_comp_info[ci];
    529 
    530    /* Sections F.2.4.1 & F.1.4.4.1: Decoding of DC coefficients */
    531 
    532    tbl = compptr->dc_tbl_no;
    533 
    534    /* Table F.4: Point to statistics bin S0 for DC coefficient coding */
    535    st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
    536 
    537    /* Figure F.19: Decode_DC_DIFF */
    538    if (arith_decode(cinfo, st) == 0)
    539      entropy->dc_context[ci] = 0;
    540    else {
    541      /* Figure F.21: Decoding nonzero value v */
    542      /* Figure F.22: Decoding the sign of v */
    543      sign = arith_decode(cinfo, st + 1);
    544      st += 2;  st += sign;
    545      /* Figure F.23: Decoding the magnitude category of v */
    546      if ((m = arith_decode(cinfo, st)) != 0) {
    547        st = entropy->dc_stats[tbl] + 20;       /* Table F.4: X1 = 20 */
    548        while (arith_decode(cinfo, st)) {
    549          if ((m <<= 1) == 0x8000) {
    550            WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
    551            entropy->ct = -1;                   /* magnitude overflow */
    552            return TRUE;
    553          }
    554          st += 1;
    555        }
    556      }
    557      /* Section F.1.4.4.1.2: Establish dc_context conditioning category */
    558      if (m < (int)((1L << cinfo->arith_dc_L[tbl]) >> 1))
    559        entropy->dc_context[ci] = 0;               /* zero diff category */
    560      else if (m > (int)((1L << cinfo->arith_dc_U[tbl]) >> 1))
    561        entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */
    562      else
    563        entropy->dc_context[ci] = 4 + (sign * 4);  /* small diff category */
    564      v = m;
    565      /* Figure F.24: Decoding the magnitude bit pattern of v */
    566      st += 14;
    567      while (m >>= 1)
    568        if (arith_decode(cinfo, st)) v |= m;
    569      v += 1;  if (sign) v = -v;
    570      entropy->last_dc_val[ci] = (entropy->last_dc_val[ci] + v) & 0xffff;
    571    }
    572 
    573    if (block)
    574      (*block)[0] = (JCOEF)entropy->last_dc_val[ci];
    575 
    576    /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */
    577 
    578    tbl = compptr->ac_tbl_no;
    579 
    580    /* Figure F.20: Decode_AC_coefficients */
    581    for (k = 1; k <= DCTSIZE2 - 1; k++) {
    582      st = entropy->ac_stats[tbl] + 3 * (k - 1);
    583      if (arith_decode(cinfo, st)) break;       /* EOB flag */
    584      while (arith_decode(cinfo, st + 1) == 0) {
    585        st += 3;  k++;
    586        if (k > DCTSIZE2 - 1) {
    587          WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
    588          entropy->ct = -1;                     /* spectral overflow */
    589          return TRUE;
    590        }
    591      }
    592      /* Figure F.21: Decoding nonzero value v */
    593      /* Figure F.22: Decoding the sign of v */
    594      sign = arith_decode(cinfo, entropy->fixed_bin);
    595      st += 2;
    596      /* Figure F.23: Decoding the magnitude category of v */
    597      if ((m = arith_decode(cinfo, st)) != 0) {
    598        if (arith_decode(cinfo, st)) {
    599          m <<= 1;
    600          st = entropy->ac_stats[tbl] +
    601               (k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
    602          while (arith_decode(cinfo, st)) {
    603            if ((m <<= 1) == 0x8000) {
    604              WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
    605              entropy->ct = -1;                 /* magnitude overflow */
    606              return TRUE;
    607            }
    608            st += 1;
    609          }
    610        }
    611      }
    612      v = m;
    613      /* Figure F.24: Decoding the magnitude bit pattern of v */
    614      st += 14;
    615      while (m >>= 1)
    616        if (arith_decode(cinfo, st)) v |= m;
    617      v += 1;  if (sign) v = -v;
    618      if (block)
    619        (*block)[jpeg_natural_order[k]] = (JCOEF)v;
    620    }
    621  }
    622 
    623  return TRUE;
    624 }
    625 
    626 
    627 /*
    628 * Initialize for an arithmetic-compressed scan.
    629 */
    630 
    631 METHODDEF(void)
    632 start_pass(j_decompress_ptr cinfo)
    633 {
    634  arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
    635  int ci, tbl;
    636  jpeg_component_info *compptr;
    637 
    638  if (cinfo->progressive_mode) {
    639    /* Validate progressive scan parameters */
    640    if (cinfo->Ss == 0) {
    641      if (cinfo->Se != 0)
    642        goto bad;
    643    } else {
    644      /* need not check Ss/Se < 0 since they came from unsigned bytes */
    645      if (cinfo->Se < cinfo->Ss || cinfo->Se > DCTSIZE2 - 1)
    646        goto bad;
    647      /* AC scans may have only one component */
    648      if (cinfo->comps_in_scan != 1)
    649        goto bad;
    650    }
    651    if (cinfo->Ah != 0) {
    652      /* Successive approximation refinement scan: must have Al = Ah-1. */
    653      if (cinfo->Ah - 1 != cinfo->Al)
    654        goto bad;
    655    }
    656    if (cinfo->Al > 13) {       /* need not check for < 0 */
    657 bad:
    658      ERREXIT4(cinfo, JERR_BAD_PROGRESSION,
    659               cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
    660    }
    661    /* Update progression status, and verify that scan order is legal.
    662     * Note that inter-scan inconsistencies are treated as warnings
    663     * not fatal errors ... not clear if this is right way to behave.
    664     */
    665    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
    666      int coefi, cindex = cinfo->cur_comp_info[ci]->component_index;
    667      int *coef_bit_ptr = &cinfo->coef_bits[cindex][0];
    668      int *prev_coef_bit_ptr =
    669        &cinfo->coef_bits[cindex + cinfo->num_components][0];
    670      if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
    671        WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
    672      for (coefi = MIN(cinfo->Ss, 1); coefi <= MAX(cinfo->Se, 9); coefi++) {
    673        if (cinfo->input_scan_number > 1)
    674          prev_coef_bit_ptr[coefi] = coef_bit_ptr[coefi];
    675        else
    676          prev_coef_bit_ptr[coefi] = 0;
    677      }
    678      for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
    679        int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
    680        if (cinfo->Ah != expected)
    681          WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi);
    682        coef_bit_ptr[coefi] = cinfo->Al;
    683      }
    684    }
    685    /* Select MCU decoding routine */
    686    if (cinfo->Ah == 0) {
    687      if (cinfo->Ss == 0)
    688        entropy->pub.decode_mcu = decode_mcu_DC_first;
    689      else
    690        entropy->pub.decode_mcu = decode_mcu_AC_first;
    691    } else {
    692      if (cinfo->Ss == 0)
    693        entropy->pub.decode_mcu = decode_mcu_DC_refine;
    694      else
    695        entropy->pub.decode_mcu = decode_mcu_AC_refine;
    696    }
    697  } else {
    698    /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG.
    699     * This ought to be an error condition, but we make it a warning.
    700     */
    701    if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2 - 1 ||
    702        cinfo->Ah != 0 || cinfo->Al != 0)
    703      WARNMS(cinfo, JWRN_NOT_SEQUENTIAL);
    704    /* Select MCU decoding routine */
    705    entropy->pub.decode_mcu = decode_mcu;
    706  }
    707 
    708  /* Allocate & initialize requested statistics areas */
    709  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
    710    compptr = cinfo->cur_comp_info[ci];
    711    if (!cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) {
    712      tbl = compptr->dc_tbl_no;
    713      if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
    714        ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
    715      if (entropy->dc_stats[tbl] == NULL)
    716        entropy->dc_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small)
    717          ((j_common_ptr)cinfo, JPOOL_IMAGE, DC_STAT_BINS);
    718      memset(entropy->dc_stats[tbl], 0, DC_STAT_BINS);
    719      /* Initialize DC predictions to 0 */
    720      entropy->last_dc_val[ci] = 0;
    721      entropy->dc_context[ci] = 0;
    722    }
    723    if (!cinfo->progressive_mode || cinfo->Ss) {
    724      tbl = compptr->ac_tbl_no;
    725      if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
    726        ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
    727      if (entropy->ac_stats[tbl] == NULL)
    728        entropy->ac_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small)
    729          ((j_common_ptr)cinfo, JPOOL_IMAGE, AC_STAT_BINS);
    730      memset(entropy->ac_stats[tbl], 0, AC_STAT_BINS);
    731    }
    732  }
    733 
    734  /* Initialize arithmetic decoding variables */
    735  entropy->c = 0;
    736  entropy->a = 0;
    737  entropy->ct = -16;    /* force reading 2 initial bytes to fill C */
    738  entropy->pub.insufficient_data = FALSE;
    739 
    740  /* Initialize restart counter */
    741  entropy->restarts_to_go = cinfo->restart_interval;
    742 }
    743 
    744 
    745 /*
    746 * Module initialization routine for arithmetic entropy decoding.
    747 */
    748 
    749 GLOBAL(void)
    750 jinit_arith_decoder(j_decompress_ptr cinfo)
    751 {
    752  arith_entropy_ptr entropy;
    753  int i;
    754 
    755  entropy = (arith_entropy_ptr)
    756    (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
    757                                sizeof(arith_entropy_decoder));
    758  cinfo->entropy = (struct jpeg_entropy_decoder *)entropy;
    759  entropy->pub.start_pass = start_pass;
    760 
    761  /* Mark tables unallocated */
    762  for (i = 0; i < NUM_ARITH_TBLS; i++) {
    763    entropy->dc_stats[i] = NULL;
    764    entropy->ac_stats[i] = NULL;
    765  }
    766 
    767  /* Initialize index for fixed probability estimation */
    768  entropy->fixed_bin[0] = 113;
    769 
    770  if (cinfo->progressive_mode) {
    771    /* Create progression status table */
    772    int *coef_bit_ptr, ci;
    773    cinfo->coef_bits = (int (*)[DCTSIZE2])
    774      (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
    775                                  cinfo->num_components * 2 * DCTSIZE2 *
    776                                  sizeof(int));
    777    coef_bit_ptr = &cinfo->coef_bits[0][0];
    778    for (ci = 0; ci < cinfo->num_components; ci++)
    779      for (i = 0; i < DCTSIZE2; i++)
    780        *coef_bit_ptr++ = -1;
    781  }
    782 }