JDHUFF.C
上传用户:wep9318
上传日期:2007-01-07
资源大小:893k
文件大小:22k
源码类别:

图片显示

开发平台:

Visual C++

  1. /*
  2.  * jdhuff.c
  3.  *
  4.  * Copyright (C) 1991-1994, Thomas G. Lane.
  5.  * This file is part of the Independent JPEG Group's software.
  6.  * For conditions of distribution and use, see the accompanying README file.
  7.  *
  8.  * This file contains Huffman entropy decoding routines.
  9.  *
  10.  * Much of the complexity here has to do with supporting input suspension.
  11.  * If the data source module demands suspension, we want to be able to back
  12.  * up to the start of the current MCU.  To do this, we copy state variables
  13.  * into local working storage, and update them back to the permanent JPEG
  14.  * objects only upon successful completion of an MCU.
  15.  */
  16. #define JPEG_INTERNALS
  17. #include "jinclude.h"
  18. #include "jpeglib.h"
  19. /* Derived data constructed for each Huffman table */
  20. #define HUFF_LOOKAHEAD 8 /* # of bits of lookahead */
  21. typedef struct {
  22.   /* Basic tables: (element [0] of each array is unused) */
  23.   INT32 mincode[17]; /* smallest code of length k */
  24.   INT32 maxcode[18]; /* largest code of length k (-1 if none) */
  25.   /* (maxcode[17] is a sentinel to ensure huff_DECODE terminates) */
  26.   int valptr[17]; /* huffval[] index of 1st symbol of length k */
  27.   /* Back link to public Huffman table (needed only in slow_DECODE) */
  28.   JHUFF_TBL *pub;
  29.   /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of
  30.    * the input data stream.  If the next Huffman code is no more
  31.    * than HUFF_LOOKAHEAD bits long, we can obtain its length and
  32.    * the corresponding symbol directly from these tables.
  33.    */
  34.   int look_nbits[1<<HUFF_LOOKAHEAD]; /* # bits, or 0 if too long */
  35.   UINT8 look_sym[1<<HUFF_LOOKAHEAD]; /* symbol, or unused */
  36. } D_DERIVED_TBL;
  37. /* Expanded entropy decoder object for Huffman decoding.
  38.  *
  39.  * The savable_state subrecord contains fields that change within an MCU,
  40.  * but must not be updated permanently until we complete the MCU.
  41.  */
  42. typedef struct {
  43.   INT32 get_buffer; /* current bit-extraction buffer */
  44.   int bits_left; /* # of unused bits in it */
  45.   int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
  46. } savable_state;
  47. /* This macro is to work around compilers with missing or broken
  48.  * structure assignment.  You'll need to fix this code if you have
  49.  * such a compiler and you change MAX_COMPS_IN_SCAN.
  50.  */
  51. #ifndef NO_STRUCT_ASSIGN
  52. #define ASSIGN_STATE(dest,src)  ((dest) = (src))
  53. #else
  54. #if MAX_COMPS_IN_SCAN == 4
  55. #define ASSIGN_STATE(dest,src)  
  56. ((dest).get_buffer = (src).get_buffer, 
  57.  (dest).bits_left = (src).bits_left, 
  58.  (dest).last_dc_val[0] = (src).last_dc_val[0], 
  59.  (dest).last_dc_val[1] = (src).last_dc_val[1], 
  60.  (dest).last_dc_val[2] = (src).last_dc_val[2], 
  61.  (dest).last_dc_val[3] = (src).last_dc_val[3])
  62. #endif
  63. #endif
  64. typedef struct {
  65.   struct jpeg_entropy_decoder pub; /* public fields */
  66.   savable_state saved; /* Bit buffer & DC state at start of MCU */
  67.   /* These fields are NOT loaded into local working state. */
  68.   unsigned int restarts_to_go; /* MCUs left in this restart interval */
  69.   boolean printed_eod; /* flag to suppress extra end-of-data msgs */
  70.   /* Pointers to derived tables (these workspaces have image lifespan) */
  71.   D_DERIVED_TBL * dc_derived_tbls[NUM_HUFF_TBLS];
  72.   D_DERIVED_TBL * ac_derived_tbls[NUM_HUFF_TBLS];
  73. } huff_entropy_decoder;
  74. typedef huff_entropy_decoder * huff_entropy_ptr;
  75. /* Working state while scanning an MCU.
  76.  * This struct contains all the fields that are needed by subroutines.
  77.  */
  78. typedef struct {
  79.   int unread_marker; /* nonzero if we have hit a marker */
  80.   const JOCTET * next_input_byte; /* => next byte to read from source */
  81.   size_t bytes_in_buffer; /* # of bytes remaining in source buffer */
  82.   savable_state cur; /* Current bit buffer & DC state */
  83.   j_decompress_ptr cinfo; /* fill_bit_buffer needs access to this */
  84. } working_state;
  85. /* Forward declarations */
  86. LOCAL void fix_huff_tbl JPP((j_decompress_ptr cinfo, JHUFF_TBL * htbl,
  87.      D_DERIVED_TBL ** pdtbl));
  88. /*
  89.  * Initialize for a Huffman-compressed scan.
  90.  */
  91. METHODDEF void
  92. start_pass_huff_decoder (j_decompress_ptr cinfo)
  93. {
  94.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  95.   int ci, dctbl, actbl;
  96.   jpeg_component_info * compptr;
  97.   for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
  98.     compptr = cinfo->cur_comp_info[ci];
  99.     dctbl = compptr->dc_tbl_no;
  100.     actbl = compptr->ac_tbl_no;
  101.     /* Make sure requested tables are present */
  102.     if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS ||
  103. cinfo->dc_huff_tbl_ptrs[dctbl] == NULL)
  104.       ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl);
  105.     if (actbl < 0 || actbl >= NUM_HUFF_TBLS ||
  106. cinfo->ac_huff_tbl_ptrs[actbl] == NULL)
  107.       ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl);
  108.     /* Compute derived values for Huffman tables */
  109.     /* We may do this more than once for a table, but it's not expensive */
  110.     fix_huff_tbl(cinfo, cinfo->dc_huff_tbl_ptrs[dctbl],
  111.  & entropy->dc_derived_tbls[dctbl]);
  112.     fix_huff_tbl(cinfo, cinfo->ac_huff_tbl_ptrs[actbl],
  113.  & entropy->ac_derived_tbls[actbl]);
  114.     /* Initialize DC predictions to 0 */
  115.     entropy->saved.last_dc_val[ci] = 0;
  116.   }
  117.   /* Initialize private state variables */
  118.   entropy->saved.bits_left = 0;
  119.   entropy->printed_eod = FALSE;
  120.   /* Initialize restart counter */
  121.   entropy->restarts_to_go = cinfo->restart_interval;
  122. }
  123. LOCAL void
  124. fix_huff_tbl (j_decompress_ptr cinfo, JHUFF_TBL * htbl, D_DERIVED_TBL ** pdtbl)
  125. /* Compute the derived values for a Huffman table */
  126. {
  127.   D_DERIVED_TBL *dtbl;
  128.   int p, i, l, si;
  129.   int lookbits, ctr;
  130.   char huffsize[257];
  131.   unsigned int huffcode[257];
  132.   unsigned int code;
  133.   /* Allocate a workspace if we haven't already done so. */
  134.   if (*pdtbl == NULL)
  135.     *pdtbl = (D_DERIVED_TBL *)
  136.       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
  137.   SIZEOF(D_DERIVED_TBL));
  138.   dtbl = *pdtbl;
  139.   dtbl->pub = htbl; /* fill in back link */
  140.   
  141.   /* Figure C.1: make table of Huffman code length for each symbol */
  142.   /* Note that this is in code-length order. */
  143.   p = 0;
  144.   for (l = 1; l <= 16; l++) {
  145.     for (i = 1; i <= (int) htbl->bits[l]; i++)
  146.       huffsize[p++] = (char) l;
  147.   }
  148.   huffsize[p] = 0;
  149.   
  150.   /* Figure C.2: generate the codes themselves */
  151.   /* Note that this is in code-length order. */
  152.   
  153.   code = 0;
  154.   si = huffsize[0];
  155.   p = 0;
  156.   while (huffsize[p]) {
  157.     while (((int) huffsize[p]) == si) {
  158.       huffcode[p++] = code;
  159.       code++;
  160.     }
  161.     code <<= 1;
  162.     si++;
  163.   }
  164.   /* Figure F.15: generate decoding tables for bit-sequential decoding */
  165.   p = 0;
  166.   for (l = 1; l <= 16; l++) {
  167.     if (htbl->bits[l]) {
  168.       dtbl->valptr[l] = p; /* huffval[] index of 1st symbol of code length l */
  169.       dtbl->mincode[l] = huffcode[p]; /* minimum code of length l */
  170.       p += htbl->bits[l];
  171.       dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */
  172.     } else {
  173.       dtbl->maxcode[l] = -1; /* -1 if no codes of this length */
  174.     }
  175.   }
  176.   dtbl->maxcode[17] = 0xFFFFFL; /* ensures huff_DECODE terminates */
  177.   /* Compute lookahead tables to speed up decoding.
  178.    * First we set all the table entries to 0, indicating "too long";
  179.    * then we iterate through the Huffman codes that are short enough and
  180.    * fill in all the entries that correspond to bit sequences starting
  181.    * with that code.
  182.    */
  183.   MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits));
  184.   p = 0;
  185.   for (l = 1; l <= HUFF_LOOKAHEAD; l++) {
  186.     for (i = 1; i <= (int) htbl->bits[l]; i++, p++) {
  187.       /* l = current code's length, p = its index in huffcode[] & huffval[]. */
  188.       /* Generate left-justified code followed by all possible bit sequences */
  189.       lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l);
  190.       for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) {
  191. dtbl->look_nbits[lookbits] = l;
  192. dtbl->look_sym[lookbits] = htbl->huffval[p];
  193. lookbits++;
  194.       }
  195.     }
  196.   }
  197. }
  198. /*
  199.  * Code for extracting the next N bits from the input stream.
  200.  * (N never exceeds 15 for JPEG data.)
  201.  * This needs to go as fast as possible!
  202.  *
  203.  * We read source bytes into get_buffer and dole out bits as needed.
  204.  * If get_buffer already contains enough bits, they are fetched in-line
  205.  * by the macros check_bit_buffer and get_bits.  When there aren't enough
  206.  * bits, fill_bit_buffer is called; it will attempt to fill get_buffer to
  207.  * the "high water mark" (not just to the number of bits needed; this reduces
  208.  * the function-call overhead cost of entering fill_bit_buffer).
  209.  * Note that fill_bit_buffer may return FALSE to indicate suspension.
  210.  * On TRUE return, fill_bit_buffer guarantees that get_buffer contains
  211.  * at least the requested number of bits --- dummy zeroes are inserted if
  212.  * necessary.
  213.  *
  214.  * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width
  215.  * of get_buffer to be used.  (On machines with wider words, an even larger
  216.  * buffer could be used.)  However, on some machines 32-bit shifts are
  217.  * quite slow and take time proportional to the number of places shifted.
  218.  * (This is true with most PC compilers, for instance.)  In this case it may
  219.  * be a win to set MIN_GET_BITS to the minimum value of 15.  This reduces the
  220.  * average shift distance at the cost of more calls to fill_bit_buffer.
  221.  */
  222. #ifdef SLOW_SHIFT_32
  223. #define MIN_GET_BITS  15 /* minimum allowable value */
  224. #else
  225. #define MIN_GET_BITS  25 /* max value for 32-bit get_buffer */
  226. #endif
  227. LOCAL boolean
  228. fill_bit_buffer (working_state * state, int nbits)
  229. /* Load up the bit buffer to a depth of at least nbits */
  230. {
  231.   /* Copy heavily used state fields into locals (hopefully registers) */
  232.   register const JOCTET * next_input_byte = state->next_input_byte;
  233.   register size_t bytes_in_buffer = state->bytes_in_buffer;
  234.   register INT32 get_buffer = state->cur.get_buffer;
  235.   register int bits_left = state->cur.bits_left;
  236.   register int c;
  237.   /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */
  238.   /* (It is assumed that no request will be for more than that many bits.) */
  239.   while (bits_left < MIN_GET_BITS) {
  240.     /* Attempt to read a byte */
  241.     if (state->unread_marker != 0)
  242.       goto no_more_data; /* can't advance past a marker */
  243.     if (bytes_in_buffer == 0) {
  244.       if (! (*state->cinfo->src->fill_input_buffer) (state->cinfo))
  245. return FALSE;
  246.       next_input_byte = state->cinfo->src->next_input_byte;
  247.       bytes_in_buffer = state->cinfo->src->bytes_in_buffer;
  248.     }
  249.     bytes_in_buffer--;
  250.     c = GETJOCTET(*next_input_byte++);
  251.     /* If it's 0xFF, check and discard stuffed zero byte */
  252.     if (c == 0xFF) {
  253.       do {
  254. if (bytes_in_buffer == 0) {
  255.   if (! (*state->cinfo->src->fill_input_buffer) (state->cinfo))
  256.     return FALSE;
  257.   next_input_byte = state->cinfo->src->next_input_byte;
  258.   bytes_in_buffer = state->cinfo->src->bytes_in_buffer;
  259. }
  260. bytes_in_buffer--;
  261. c = GETJOCTET(*next_input_byte++);
  262.       } while (c == 0xFF);
  263.       if (c == 0) {
  264. /* Found FF/00, which represents an FF data byte */
  265. c = 0xFF;
  266.       } else {
  267. /* Oops, it's actually a marker indicating end of compressed data. */
  268. /* Better put it back for use later */
  269. state->unread_marker = c;
  270.       no_more_data:
  271. /* There should be enough bits still left in the data segment; */
  272. /* if so, just break out of the outer while loop. */
  273. if (bits_left >= nbits)
  274.   break;
  275. /* Uh-oh.  Report corrupted data to user and stuff zeroes into
  276.  * the data stream, so that we can produce some kind of image.
  277.  * Note that this will be repeated for each byte demanded for the
  278.  * rest of the segment; this is slow but not unreasonably so.
  279.  * The main thing is to avoid getting a zillion warnings, hence
  280.  * we use a flag to ensure that only one warning appears.
  281.  */
  282. if (! ((huff_entropy_ptr) state->cinfo->entropy)->printed_eod) {
  283.   WARNMS(state->cinfo, JWRN_HIT_MARKER);
  284.   ((huff_entropy_ptr) state->cinfo->entropy)->printed_eod = TRUE;
  285. }
  286. c = 0; /* insert a zero byte into bit buffer */
  287.       }
  288.     }
  289.     /* OK, load c into get_buffer */
  290.     get_buffer = (get_buffer << 8) | c;
  291.     bits_left += 8;
  292.   }
  293.   /* Unload the local registers */
  294.   state->next_input_byte = next_input_byte;
  295.   state->bytes_in_buffer = bytes_in_buffer;
  296.   state->cur.get_buffer = get_buffer;
  297.   state->cur.bits_left = bits_left;
  298.   return TRUE;
  299. }
  300. /*
  301.  * These macros provide the in-line portion of bit fetching.
  302.  * Use check_bit_buffer to ensure there are N bits in get_buffer
  303.  * before using get_bits, peek_bits, or drop_bits.
  304.  * check_bit_buffer(state,n,action);
  305.  * Ensure there are N bits in get_buffer; if suspend, take action.
  306.  *      val = get_bits(state,n);
  307.  * Fetch next N bits.
  308.  *      val = peek_bits(state,n);
  309.  * Fetch next N bits without removing them from the buffer.
  310.  * drop_bits(state,n);
  311.  * Discard next N bits.
  312.  * The value N should be a simple variable, not an expression, because it
  313.  * is evaluated multiple times.
  314.  */
  315. #define check_bit_buffer(state,nbits,action) 
  316. { if ((state).cur.bits_left < (nbits))  
  317.     if (! fill_bit_buffer(&(state), nbits))  
  318.       { action; } }
  319. #define get_bits(state,nbits) 
  320. (((int) ((state).cur.get_buffer >> ((state).cur.bits_left -= (nbits)))) & ((1<<(nbits))-1))
  321. #define peek_bits(state,nbits) 
  322. (((int) ((state).cur.get_buffer >> ((state).cur.bits_left -  (nbits)))) & ((1<<(nbits))-1))
  323. #define drop_bits(state,nbits) 
  324. ((state).cur.bits_left -= (nbits))
  325. /*
  326.  * Code for extracting next Huffman-coded symbol from input bit stream.
  327.  * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits
  328.  * without looping.  Usually, more than 95% of the Huffman codes will be 8
  329.  * or fewer bits long.  The few overlength codes are handled with a loop.
  330.  * The primary case is made a macro for speed reasons; the secondary
  331.  * routine slow_DECODE is rarely entered and need not be inline code.
  332.  *
  333.  * Notes about the huff_DECODE macro:
  334.  * 1. Near the end of the data segment, we may fail to get enough bits
  335.  *    for a lookahead.  In that case, we do it the hard way.
  336.  * 2. If the lookahead table contains no entry, the next code must be
  337.  *    more than HUFF_LOOKAHEAD bits long.
  338.  * 3. slow_DECODE returns -1 if forced to suspend.
  339.  */
  340. #define huff_DECODE(result,state,htbl,donelabel) 
  341. { if (state.cur.bits_left < HUFF_LOOKAHEAD) {  
  342.     if (! fill_bit_buffer(&state, 0)) return FALSE;  
  343.     if (state.cur.bits_left < HUFF_LOOKAHEAD) {  
  344.       if ((result = slow_DECODE(&state, htbl, 1)) < 0) return FALSE;  
  345.       goto donelabel;  
  346.     }  
  347.   }  
  348.   { register int nb, look;  
  349.     look = peek_bits(state, HUFF_LOOKAHEAD);  
  350.     if ((nb = htbl->look_nbits[look]) != 0) {  
  351.       drop_bits(state, nb);  
  352.       result = htbl->look_sym[look];  
  353.     } else {  
  354.       if ((result = slow_DECODE(&state, htbl, HUFF_LOOKAHEAD+1)) < 0)  
  355. return FALSE;  
  356.     }  
  357.   }  
  358. donelabel:;  
  359. }
  360.   
  361. LOCAL int
  362. slow_DECODE (working_state * state, D_DERIVED_TBL * htbl, int min_bits)
  363. {
  364.   register int l = min_bits;
  365.   register INT32 code;
  366.   /* huff_DECODE has determined that the code is at least min_bits */
  367.   /* bits long, so fetch that many bits in one swoop. */
  368.   check_bit_buffer(*state, l, return -1);
  369.   code = get_bits(*state, l);
  370.   /* Collect the rest of the Huffman code one bit at a time. */
  371.   /* This is per Figure F.16 in the JPEG spec. */
  372.   while (code > htbl->maxcode[l]) {
  373.     code <<= 1;
  374.     check_bit_buffer(*state, 1, return -1);
  375.     code |= get_bits(*state, 1);
  376.     l++;
  377.   }
  378.   /* With garbage input we may reach the sentinel value l = 17. */
  379.   if (l > 16) {
  380.     WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE);
  381.     return 0; /* fake a zero as the safest result */
  382.   }
  383.   return htbl->pub->huffval[ htbl->valptr[l] +
  384.     ((int) (code - htbl->mincode[l])) ];
  385. }
  386. /* Figure F.12: extend sign bit.
  387.  * On some machines, a shift and add will be faster than a table lookup.
  388.  */
  389. #ifdef AVOID_TABLES
  390. #define huff_EXTEND(x,s)  ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x))
  391. #else
  392. #define huff_EXTEND(x,s)  ((x) < extend_test[s] ? (x) + extend_offset[s] : (x))
  393. static const int extend_test[16] =   /* entry n is 2**(n-1) */
  394.   { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
  395.     0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 };
  396. static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */
  397.   { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1,
  398.     ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1,
  399.     ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1,
  400.     ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 };
  401. #endif /* AVOID_TABLES */
  402. /*
  403.  * Check for a restart marker & resynchronize decoder.
  404.  * Returns FALSE if must suspend.
  405.  */
  406. LOCAL boolean
  407. process_restart (j_decompress_ptr cinfo)
  408. {
  409.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  410.   int ci;
  411.   /* Throw away any unused bits remaining in bit buffer; */
  412.   /* include any full bytes in next_marker's count of discarded bytes */
  413.   cinfo->marker->discarded_bytes += entropy->saved.bits_left / 8;
  414.   entropy->saved.bits_left = 0;
  415.   /* Advance past the RSTn marker */
  416.   if (! (*cinfo->marker->read_restart_marker) (cinfo))
  417.     return FALSE;
  418.   /* Re-initialize DC predictions to 0 */
  419.   for (ci = 0; ci < cinfo->comps_in_scan; ci++)
  420.     entropy->saved.last_dc_val[ci] = 0;
  421.   /* Reset restart counter */
  422.   entropy->restarts_to_go = cinfo->restart_interval;
  423.   entropy->printed_eod = FALSE; /* next segment can get another warning */
  424.   return TRUE;
  425. }
  426. /* ZAG[i] is the natural-order position of the i'th element of zigzag order.
  427.  * If the incoming data is corrupted, decode_mcu could attempt to
  428.  * reference values beyond the end of the array.  To avoid a wild store,
  429.  * we put some extra zeroes after the real entries.
  430.  */
  431. static const int ZAG[DCTSIZE2+16] = {
  432.   0,  1,  8, 16,  9,  2,  3, 10,
  433.  17, 24, 32, 25, 18, 11,  4,  5,
  434.  12, 19, 26, 33, 40, 48, 41, 34,
  435.  27, 20, 13,  6,  7, 14, 21, 28,
  436.  35, 42, 49, 56, 57, 50, 43, 36,
  437.  29, 22, 15, 23, 30, 37, 44, 51,
  438.  58, 59, 52, 45, 38, 31, 39, 46,
  439.  53, 60, 61, 54, 47, 55, 62, 63,
  440.   0,  0,  0,  0,  0,  0,  0,  0, /* extra entries in case k>63 below */
  441.   0,  0,  0,  0,  0,  0,  0,  0
  442. };
  443. /*
  444.  * Decode and return one MCU's worth of Huffman-compressed coefficients.
  445.  * The coefficients are reordered from zigzag order into natural array order,
  446.  * but are not dequantized.
  447.  *
  448.  * The i'th block of the MCU is stored into the block pointed to by
  449.  * MCU_data[i].  WE ASSUME THIS AREA HAS BEEN ZEROED BY THE CALLER.
  450.  * (Wholesale zeroing is usually a little faster than retail...)
  451.  *
  452.  * Returns FALSE if data source requested suspension.  In that case no
  453.  * changes have been made to permanent state.  (Exception: some output
  454.  * coefficients may already have been assigned.  This is harmless for
  455.  * this module, but would not work for decoding progressive JPEG.)
  456.  */
  457. METHODDEF boolean
  458. decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
  459. {
  460.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  461.   register int s, k, r;
  462.   int blkn, ci;
  463.   JBLOCKROW block;
  464.   working_state state;
  465.   D_DERIVED_TBL * dctbl;
  466.   D_DERIVED_TBL * actbl;
  467.   jpeg_component_info * compptr;
  468.   /* Process restart marker if needed; may have to suspend */
  469.   if (cinfo->restart_interval) {
  470.     if (entropy->restarts_to_go == 0)
  471.       if (! process_restart(cinfo))
  472. return FALSE;
  473.   }
  474.   /* Load up working state */
  475.   state.unread_marker = cinfo->unread_marker;
  476.   state.next_input_byte = cinfo->src->next_input_byte;
  477.   state.bytes_in_buffer = cinfo->src->bytes_in_buffer;
  478.   ASSIGN_STATE(state.cur, entropy->saved);
  479.   state.cinfo = cinfo;
  480.   /* Outer loop handles each block in the MCU */
  481.   for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
  482.     block = MCU_data[blkn];
  483.     ci = cinfo->MCU_membership[blkn];
  484.     compptr = cinfo->cur_comp_info[ci];
  485.     dctbl = entropy->dc_derived_tbls[compptr->dc_tbl_no];
  486.     actbl = entropy->ac_derived_tbls[compptr->ac_tbl_no];
  487.     /* Decode a single block's worth of coefficients */
  488.     /* Section F.2.2.1: decode the DC coefficient difference */
  489.     huff_DECODE(s, state, dctbl, label1);
  490.     if (s) {
  491.       check_bit_buffer(state, s, return FALSE);
  492.       r = get_bits(state, s);
  493.       s = huff_EXTEND(r, s);
  494.     }
  495.     /* Shortcut if component's values are not interesting */
  496.     if (! compptr->component_needed)
  497.       goto skip_ACs;
  498.     /* Convert DC difference to actual value, update last_dc_val */
  499.     s += state.cur.last_dc_val[ci];
  500.     state.cur.last_dc_val[ci] = s;
  501.     /* Output the DC coefficient (assumes ZAG[0] = 0) */
  502.     (*block)[0] = (JCOEF) s;
  503.     /* Do we need to decode the AC coefficients for this component? */
  504.     if (compptr->DCT_scaled_size > 1) {
  505.       /* Section F.2.2.2: decode the AC coefficients */
  506.       /* Since zeroes are skipped, output area must be cleared beforehand */
  507.       for (k = 1; k < DCTSIZE2; k++) {
  508. huff_DECODE(s, state, actbl, label2);
  509.       
  510. r = s >> 4;
  511. s &= 15;
  512.       
  513. if (s) {
  514.   k += r;
  515.   check_bit_buffer(state, s, return FALSE);
  516.   r = get_bits(state, s);
  517.   s = huff_EXTEND(r, s);
  518.   /* Output coefficient in natural (dezigzagged) order */
  519.   (*block)[ZAG[k]] = (JCOEF) s;
  520. } else {
  521.   if (r != 15)
  522.     break;
  523.   k += 15;
  524. }
  525.       }
  526.     } else {
  527. skip_ACs:
  528.       /* Section F.2.2.2: decode the AC coefficients */
  529.       /* In this path we just discard the values */
  530.       for (k = 1; k < DCTSIZE2; k++) {
  531. huff_DECODE(s, state, actbl, label3);
  532.       
  533. r = s >> 4;
  534. s &= 15;
  535.       
  536. if (s) {
  537.   k += r;
  538.   check_bit_buffer(state, s, return FALSE);
  539.   drop_bits(state, s);
  540. } else {
  541.   if (r != 15)
  542.     break;
  543.   k += 15;
  544. }
  545.       }
  546.     }
  547.   }
  548.   /* Completed MCU, so update state */
  549.   cinfo->unread_marker = state.unread_marker;
  550.   cinfo->src->next_input_byte = state.next_input_byte;
  551.   cinfo->src->bytes_in_buffer = state.bytes_in_buffer;
  552.   ASSIGN_STATE(entropy->saved, state.cur);
  553.   /* Account for restart interval (no-op if not using restarts) */
  554.   entropy->restarts_to_go--;
  555.   return TRUE;
  556. }
  557. /*
  558.  * Module initialization routine for Huffman entropy decoding.
  559.  */
  560. GLOBAL void
  561. jinit_huff_decoder (j_decompress_ptr cinfo)
  562. {
  563.   huff_entropy_ptr entropy;
  564.   int i;
  565.   entropy = (huff_entropy_ptr)
  566.     (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
  567. SIZEOF(huff_entropy_decoder));
  568.   cinfo->entropy = (struct jpeg_entropy_decoder *) entropy;
  569.   entropy->pub.start_pass = start_pass_huff_decoder;
  570.   entropy->pub.decode_mcu = decode_mcu;
  571.   /* Mark tables unallocated */
  572.   for (i = 0; i < NUM_HUFF_TBLS; i++) {
  573.     entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
  574.   }
  575. }