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

图片显示

开发平台:

Visual C++

  1. /*
  2.  * jchuff.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 encoding routines.
  9.  *
  10.  * Much of the complexity here has to do with supporting output suspension.
  11.  * If the data destination module demands suspension, we want to be able to
  12.  * back up to the start of the current MCU.  To do this, we copy state
  13.  * variables into local working storage, and update them back to the
  14.  * permanent JPEG 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. typedef struct {
  21.   unsigned int ehufco[256]; /* code for each symbol */
  22.   char ehufsi[256]; /* length of code for each symbol */
  23.   /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */
  24. } C_DERIVED_TBL;
  25. /* Expanded entropy encoder object for Huffman encoding.
  26.  *
  27.  * The savable_state subrecord contains fields that change within an MCU,
  28.  * but must not be updated permanently until we complete the MCU.
  29.  */
  30. typedef struct {
  31.   INT32 put_buffer; /* current bit-accumulation buffer */
  32.   int put_bits; /* # of bits now in it */
  33.   int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
  34. } savable_state;
  35. /* This macro is to work around compilers with missing or broken
  36.  * structure assignment.  You'll need to fix this code if you have
  37.  * such a compiler and you change MAX_COMPS_IN_SCAN.
  38.  */
  39. #ifndef NO_STRUCT_ASSIGN
  40. #define ASSIGN_STATE(dest,src)  ((dest) = (src))
  41. #else
  42. #if MAX_COMPS_IN_SCAN == 4
  43. #define ASSIGN_STATE(dest,src)  
  44. ((dest).put_buffer = (src).put_buffer, 
  45.  (dest).put_bits = (src).put_bits, 
  46.  (dest).last_dc_val[0] = (src).last_dc_val[0], 
  47.  (dest).last_dc_val[1] = (src).last_dc_val[1], 
  48.  (dest).last_dc_val[2] = (src).last_dc_val[2], 
  49.  (dest).last_dc_val[3] = (src).last_dc_val[3])
  50. #endif
  51. #endif
  52. typedef struct {
  53.   struct jpeg_entropy_encoder pub; /* public fields */
  54.   savable_state saved; /* Bit buffer & DC state at start of MCU */
  55.   /* These fields are NOT loaded into local working state. */
  56.   unsigned int restarts_to_go; /* MCUs left in this restart interval */
  57.   int next_restart_num; /* next restart number to write (0-7) */
  58.   /* Pointers to derived tables (these workspaces have image lifespan) */
  59.   C_DERIVED_TBL * dc_derived_tbls[NUM_HUFF_TBLS];
  60.   C_DERIVED_TBL * ac_derived_tbls[NUM_HUFF_TBLS];
  61. #ifdef ENTROPY_OPT_SUPPORTED /* Statistics tables for optimization */
  62.   long * dc_count_ptrs[NUM_HUFF_TBLS];
  63.   long * ac_count_ptrs[NUM_HUFF_TBLS];
  64. #endif
  65. } huff_entropy_encoder;
  66. typedef huff_entropy_encoder * huff_entropy_ptr;
  67. /* Working state while writing an MCU.
  68.  * This struct contains all the fields that are needed by subroutines.
  69.  */
  70. typedef struct {
  71.   JOCTET * next_output_byte; /* => next byte to write in buffer */
  72.   size_t free_in_buffer; /* # of byte spaces remaining in buffer */
  73.   savable_state cur; /* Current bit buffer & DC state */
  74.   j_compress_ptr cinfo; /* dump_buffer needs access to this */
  75. } working_state;
  76. /* Forward declarations */
  77. METHODDEF boolean encode_mcu_huff JPP((j_compress_ptr cinfo,
  78.        JBLOCKROW *MCU_data));
  79. METHODDEF void finish_pass_huff JPP((j_compress_ptr cinfo));
  80. #ifdef ENTROPY_OPT_SUPPORTED
  81. METHODDEF boolean encode_mcu_gather JPP((j_compress_ptr cinfo,
  82.  JBLOCKROW *MCU_data));
  83. METHODDEF void finish_pass_gather JPP((j_compress_ptr cinfo));
  84. #endif
  85. LOCAL void fix_huff_tbl JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl,
  86.      C_DERIVED_TBL ** pdtbl));
  87. /*
  88.  * Initialize for a Huffman-compressed scan.
  89.  * If gather_statistics is TRUE, we do not output anything during the scan,
  90.  * just count the Huffman symbols used and generate Huffman code tables.
  91.  */
  92. METHODDEF void
  93. start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics)
  94. {
  95.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  96.   int ci, dctbl, actbl;
  97.   jpeg_component_info * compptr;
  98.   if (gather_statistics) {
  99. #ifdef ENTROPY_OPT_SUPPORTED
  100.     entropy->pub.encode_mcu = encode_mcu_gather;
  101.     entropy->pub.finish_pass = finish_pass_gather;
  102. #else
  103.     ERREXIT(cinfo, JERR_NOT_COMPILED);
  104. #endif
  105.   } else {
  106.     entropy->pub.encode_mcu = encode_mcu_huff;
  107.     entropy->pub.finish_pass = finish_pass_huff;
  108.   }
  109.   for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
  110.     compptr = cinfo->cur_comp_info[ci];
  111.     dctbl = compptr->dc_tbl_no;
  112.     actbl = compptr->ac_tbl_no;
  113.     /* Make sure requested tables are present */
  114.     /* (In gather mode, tables need not be allocated yet) */
  115.     if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS ||
  116. (cinfo->dc_huff_tbl_ptrs[dctbl] == NULL && !gather_statistics))
  117.       ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl);
  118.     if (actbl < 0 || actbl >= NUM_HUFF_TBLS ||
  119. (cinfo->ac_huff_tbl_ptrs[actbl] == NULL && !gather_statistics))
  120.       ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl);
  121.     if (gather_statistics) {
  122. #ifdef ENTROPY_OPT_SUPPORTED
  123.       /* Allocate and zero the statistics tables */
  124.       /* Note that gen_huff_coding expects 257 entries in each table! */
  125.       if (entropy->dc_count_ptrs[dctbl] == NULL)
  126. entropy->dc_count_ptrs[dctbl] = (long *)
  127.   (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
  128.       257 * SIZEOF(long));
  129.       MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * SIZEOF(long));
  130.       if (entropy->ac_count_ptrs[actbl] == NULL)
  131. entropy->ac_count_ptrs[actbl] = (long *)
  132.   (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
  133.       257 * SIZEOF(long));
  134.       MEMZERO(entropy->ac_count_ptrs[actbl], 257 * SIZEOF(long));
  135. #endif
  136.     } else {
  137.       /* Compute derived values for Huffman tables */
  138.       /* We may do this more than once for a table, but it's not expensive */
  139.       fix_huff_tbl(cinfo, cinfo->dc_huff_tbl_ptrs[dctbl],
  140.    & entropy->dc_derived_tbls[dctbl]);
  141.       fix_huff_tbl(cinfo, cinfo->ac_huff_tbl_ptrs[actbl],
  142.    & entropy->ac_derived_tbls[actbl]);
  143.     }
  144.     /* Initialize DC predictions to 0 */
  145.     entropy->saved.last_dc_val[ci] = 0;
  146.   }
  147.   /* Initialize bit buffer to empty */
  148.   entropy->saved.put_buffer = 0;
  149.   entropy->saved.put_bits = 0;
  150.   /* Initialize restart stuff */
  151.   entropy->restarts_to_go = cinfo->restart_interval;
  152.   entropy->next_restart_num = 0;
  153. }
  154. LOCAL void
  155. fix_huff_tbl (j_compress_ptr cinfo, JHUFF_TBL * htbl, C_DERIVED_TBL ** pdtbl)
  156. /* Compute the derived values for a Huffman table */
  157. {
  158.   C_DERIVED_TBL *dtbl;
  159.   int p, i, l, lastp, si;
  160.   char huffsize[257];
  161.   unsigned int huffcode[257];
  162.   unsigned int code;
  163.   /* Allocate a workspace if we haven't already done so. */
  164.   if (*pdtbl == NULL)
  165.     *pdtbl = (C_DERIVED_TBL *)
  166.       (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
  167.   SIZEOF(C_DERIVED_TBL));
  168.   dtbl = *pdtbl;
  169.   
  170.   /* Figure C.1: make table of Huffman code length for each symbol */
  171.   /* Note that this is in code-length order. */
  172.   p = 0;
  173.   for (l = 1; l <= 16; l++) {
  174.     for (i = 1; i <= (int) htbl->bits[l]; i++)
  175.       huffsize[p++] = (char) l;
  176.   }
  177.   huffsize[p] = 0;
  178.   lastp = p;
  179.   
  180.   /* Figure C.2: generate the codes themselves */
  181.   /* Note that this is in code-length order. */
  182.   
  183.   code = 0;
  184.   si = huffsize[0];
  185.   p = 0;
  186.   while (huffsize[p]) {
  187.     while (((int) huffsize[p]) == si) {
  188.       huffcode[p++] = code;
  189.       code++;
  190.     }
  191.     code <<= 1;
  192.     si++;
  193.   }
  194.   
  195.   /* Figure C.3: generate encoding tables */
  196.   /* These are code and size indexed by symbol value */
  197.   /* Set any codeless symbols to have code length 0;
  198.    * this allows emit_bits to detect any attempt to emit such symbols.
  199.    */
  200.   MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi));
  201.   for (p = 0; p < lastp; p++) {
  202.     dtbl->ehufco[htbl->huffval[p]] = huffcode[p];
  203.     dtbl->ehufsi[htbl->huffval[p]] = huffsize[p];
  204.   }
  205. }
  206. /* Outputting bytes to the file */
  207. /* Emit a byte, taking 'action' if must suspend. */
  208. #define emit_byte(state,val,action)  
  209. { *(state)->next_output_byte++ = (JOCTET) (val);  
  210.   if (--(state)->free_in_buffer == 0)  
  211.     if (! dump_buffer(state))  
  212.       { action; } }
  213. LOCAL boolean
  214. dump_buffer (working_state * state)
  215. /* Empty the output buffer; return TRUE if successful, FALSE if must suspend */
  216. {
  217.   struct jpeg_destination_mgr * dest = state->cinfo->dest;
  218.   if (! (*dest->empty_output_buffer) (state->cinfo))
  219.     return FALSE;
  220.   /* After a successful buffer dump, must reset buffer pointers */
  221.   state->next_output_byte = dest->next_output_byte;
  222.   state->free_in_buffer = dest->free_in_buffer;
  223.   return TRUE;
  224. }
  225. /* Outputting bits to the file */
  226. /* Only the right 24 bits of put_buffer are used; the valid bits are
  227.  * left-justified in this part.  At most 16 bits can be passed to emit_bits
  228.  * in one call, and we never retain more than 7 bits in put_buffer
  229.  * between calls, so 24 bits are sufficient.
  230.  */
  231. INLINE
  232. LOCAL boolean
  233. emit_bits (working_state * state, unsigned int code, int size)
  234. /* Emit some bits; return TRUE if successful, FALSE if must suspend */
  235. {
  236.   /* This routine is heavily used, so it's worth coding tightly. */
  237.   register INT32 put_buffer = (INT32) code;
  238.   register int put_bits = state->cur.put_bits;
  239.   /* if size is 0, caller used an invalid Huffman table entry */
  240.   if (size == 0)
  241.     ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE);
  242.   put_buffer &= (((INT32) 1)<<size) - 1; /* mask off any extra bits in code */
  243.   
  244.   put_bits += size; /* new number of bits in buffer */
  245.   
  246.   put_buffer <<= 24 - put_bits; /* align incoming bits */
  247.   put_buffer |= state->cur.put_buffer; /* and merge with old buffer contents */
  248.   
  249.   while (put_bits >= 8) {
  250.     int c = (int) ((put_buffer >> 16) & 0xFF);
  251.     
  252.     emit_byte(state, c, return FALSE);
  253.     if (c == 0xFF) { /* need to stuff a zero byte? */
  254.       emit_byte(state, 0, return FALSE);
  255.     }
  256.     put_buffer <<= 8;
  257.     put_bits -= 8;
  258.   }
  259.   state->cur.put_buffer = put_buffer; /* update state variables */
  260.   state->cur.put_bits = put_bits;
  261.   return TRUE;
  262. }
  263. LOCAL boolean
  264. flush_bits (working_state * state)
  265. {
  266.   if (! emit_bits(state, 0x7F, 7)) /* fill any partial byte with ones */
  267.     return FALSE;
  268.   state->cur.put_buffer = 0; /* and reset bit-buffer to empty */
  269.   state->cur.put_bits = 0;
  270.   return TRUE;
  271. }
  272. /* Encode a single block's worth of coefficients */
  273. LOCAL boolean
  274. encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val,
  275.   C_DERIVED_TBL *dctbl, C_DERIVED_TBL *actbl)
  276. {
  277.   register int temp, temp2;
  278.   register int nbits;
  279.   register int k, r, i;
  280.   
  281.   /* Encode the DC coefficient difference per section F.1.2.1 */
  282.   
  283.   temp = temp2 = block[0] - last_dc_val;
  284.   if (temp < 0) {
  285.     temp = -temp; /* temp is abs value of input */
  286.     /* For a negative input, want temp2 = bitwise complement of abs(input) */
  287.     /* This code assumes we are on a two's complement machine */
  288.     temp2--;
  289.   }
  290.   
  291.   /* Find the number of bits needed for the magnitude of the coefficient */
  292.   nbits = 0;
  293.   while (temp) {
  294.     nbits++;
  295.     temp >>= 1;
  296.   }
  297.   
  298.   /* Emit the Huffman-coded symbol for the number of bits */
  299.   if (! emit_bits(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits]))
  300.     return FALSE;
  301.   /* Emit that number of bits of the value, if positive, */
  302.   /* or the complement of its magnitude, if negative. */
  303.   if (nbits) /* emit_bits rejects calls with size 0 */
  304.     if (! emit_bits(state, (unsigned int) temp2, nbits))
  305.       return FALSE;
  306.   /* Encode the AC coefficients per section F.1.2.2 */
  307.   
  308.   r = 0; /* r = run length of zeros */
  309.   
  310.   for (k = 1; k < DCTSIZE2; k++) {
  311.     if ((temp = block[k]) == 0) {
  312.       r++;
  313.     } else {
  314.       /* if run length > 15, must emit special run-length-16 codes (0xF0) */
  315.       while (r > 15) {
  316. if (! emit_bits(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0]))
  317.   return FALSE;
  318. r -= 16;
  319.       }
  320.       temp2 = temp;
  321.       if (temp < 0) {
  322. temp = -temp; /* temp is abs value of input */
  323. /* This code assumes we are on a two's complement machine */
  324. temp2--;
  325.       }
  326.       
  327.       /* Find the number of bits needed for the magnitude of the coefficient */
  328.       nbits = 1; /* there must be at least one 1 bit */
  329.       while ((temp >>= 1))
  330. nbits++;
  331.       
  332.       /* Emit Huffman symbol for run length / number of bits */
  333.       i = (r << 4) + nbits;
  334.       if (! emit_bits(state, actbl->ehufco[i], actbl->ehufsi[i]))
  335. return FALSE;
  336.       /* Emit that number of bits of the value, if positive, */
  337.       /* or the complement of its magnitude, if negative. */
  338.       if (! emit_bits(state, (unsigned int) temp2, nbits))
  339. return FALSE;
  340.       
  341.       r = 0;
  342.     }
  343.   }
  344.   /* If the last coef(s) were zero, emit an end-of-block code */
  345.   if (r > 0)
  346.     if (! emit_bits(state, actbl->ehufco[0], actbl->ehufsi[0]))
  347.       return FALSE;
  348.   return TRUE;
  349. }
  350. /*
  351.  * Emit a restart marker & resynchronize predictions.
  352.  */
  353. LOCAL boolean
  354. emit_restart (working_state * state, int restart_num)
  355. {
  356.   int ci;
  357.   if (! flush_bits(state))
  358.     return FALSE;
  359.   emit_byte(state, 0xFF, return FALSE);
  360.   emit_byte(state, JPEG_RST0 + restart_num, return FALSE);
  361.   /* Re-initialize DC predictions to 0 */
  362.   for (ci = 0; ci < state->cinfo->comps_in_scan; ci++)
  363.     state->cur.last_dc_val[ci] = 0;
  364.   /* The restart counter is not updated until we successfully write the MCU. */
  365.   return TRUE;
  366. }
  367. /*
  368.  * Encode and output one MCU's worth of Huffman-compressed coefficients.
  369.  */
  370. METHODDEF boolean
  371. encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
  372. {
  373.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  374.   working_state state;
  375.   int blkn, ci;
  376.   jpeg_component_info * compptr;
  377.   /* Load up working state */
  378.   state.next_output_byte = cinfo->dest->next_output_byte;
  379.   state.free_in_buffer = cinfo->dest->free_in_buffer;
  380.   ASSIGN_STATE(state.cur, entropy->saved);
  381.   state.cinfo = cinfo;
  382.   /* Emit restart marker if needed */
  383.   if (cinfo->restart_interval) {
  384.     if (entropy->restarts_to_go == 0)
  385.       if (! emit_restart(&state, entropy->next_restart_num))
  386. return FALSE;
  387.   }
  388.   /* Encode the MCU data blocks */
  389.   for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
  390.     ci = cinfo->MCU_membership[blkn];
  391.     compptr = cinfo->cur_comp_info[ci];
  392.     if (! encode_one_block(&state,
  393.    MCU_data[blkn][0], state.cur.last_dc_val[ci],
  394.    entropy->dc_derived_tbls[compptr->dc_tbl_no],
  395.    entropy->ac_derived_tbls[compptr->ac_tbl_no]))
  396.       return FALSE;
  397.     /* Update last_dc_val */
  398.     state.cur.last_dc_val[ci] = MCU_data[blkn][0][0];
  399.   }
  400.   /* Completed MCU, so update state */
  401.   cinfo->dest->next_output_byte = state.next_output_byte;
  402.   cinfo->dest->free_in_buffer = state.free_in_buffer;
  403.   ASSIGN_STATE(entropy->saved, state.cur);
  404.   /* Update restart-interval state too */
  405.   if (cinfo->restart_interval) {
  406.     if (entropy->restarts_to_go == 0) {
  407.       entropy->restarts_to_go = cinfo->restart_interval;
  408.       entropy->next_restart_num++;
  409.       entropy->next_restart_num &= 7;
  410.     }
  411.     entropy->restarts_to_go--;
  412.   }
  413.   return TRUE;
  414. }
  415. /*
  416.  * Finish up at the end of a Huffman-compressed scan.
  417.  */
  418. METHODDEF void
  419. finish_pass_huff (j_compress_ptr cinfo)
  420. {
  421.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  422.   working_state state;
  423.   /* Load up working state ... flush_bits needs it */
  424.   state.next_output_byte = cinfo->dest->next_output_byte;
  425.   state.free_in_buffer = cinfo->dest->free_in_buffer;
  426.   ASSIGN_STATE(state.cur, entropy->saved);
  427.   state.cinfo = cinfo;
  428.   /* Flush out the last data */
  429.   if (! flush_bits(&state))
  430.     ERREXIT(cinfo, JERR_CANT_SUSPEND);
  431.   /* Update state */
  432.   cinfo->dest->next_output_byte = state.next_output_byte;
  433.   cinfo->dest->free_in_buffer = state.free_in_buffer;
  434.   ASSIGN_STATE(entropy->saved, state.cur);
  435. }
  436. /*
  437.  * Huffman coding optimization.
  438.  *
  439.  * This actually is optimization, in the sense that we find the best possible
  440.  * Huffman table(s) for the given data.  We first scan the supplied data and
  441.  * count the number of uses of each symbol that is to be Huffman-coded.
  442.  * (This process must agree with the code above.)  Then we build an
  443.  * optimal Huffman coding tree for the observed counts.
  444.  *
  445.  * The JPEG standard requires Huffman codes to be no more than 16 bits long.
  446.  * If some symbols have a very small but nonzero probability, the Huffman tree
  447.  * must be adjusted to meet the code length restriction.  We currently use
  448.  * the adjustment method suggested in the JPEG spec.  This method is *not*
  449.  * optimal; it may not choose the best possible limited-length code.  But
  450.  * since the symbols involved are infrequently used, it's not clear that
  451.  * going to extra trouble is worthwhile.
  452.  */
  453. #ifdef ENTROPY_OPT_SUPPORTED
  454. /* Process a single block's worth of coefficients */
  455. LOCAL void
  456. htest_one_block (JCOEFPTR block, int last_dc_val,
  457.  long dc_counts[], long ac_counts[])
  458. {
  459.   register int temp;
  460.   register int nbits;
  461.   register int k, r;
  462.   
  463.   /* Encode the DC coefficient difference per section F.1.2.1 */
  464.   
  465.   temp = block[0] - last_dc_val;
  466.   if (temp < 0)
  467.     temp = -temp;
  468.   
  469.   /* Find the number of bits needed for the magnitude of the coefficient */
  470.   nbits = 0;
  471.   while (temp) {
  472.     nbits++;
  473.     temp >>= 1;
  474.   }
  475.   /* Count the Huffman symbol for the number of bits */
  476.   dc_counts[nbits]++;
  477.   
  478.   /* Encode the AC coefficients per section F.1.2.2 */
  479.   
  480.   r = 0; /* r = run length of zeros */
  481.   
  482.   for (k = 1; k < DCTSIZE2; k++) {
  483.     if ((temp = block[k]) == 0) {
  484.       r++;
  485.     } else {
  486.       /* if run length > 15, must emit special run-length-16 codes (0xF0) */
  487.       while (r > 15) {
  488. ac_counts[0xF0]++;
  489. r -= 16;
  490.       }
  491.       
  492.       /* Find the number of bits needed for the magnitude of the coefficient */
  493.       if (temp < 0)
  494. temp = -temp;
  495.       
  496.       /* Find the number of bits needed for the magnitude of the coefficient */
  497.       nbits = 1; /* there must be at least one 1 bit */
  498.       while ((temp >>= 1))
  499. nbits++;
  500.       
  501.       /* Count Huffman symbol for run length / number of bits */
  502.       ac_counts[(r << 4) + nbits]++;
  503.       
  504.       r = 0;
  505.     }
  506.   }
  507.   /* If the last coef(s) were zero, emit an end-of-block code */
  508.   if (r > 0)
  509.     ac_counts[0]++;
  510. }
  511. /*
  512.  * Trial-encode one MCU's worth of Huffman-compressed coefficients.
  513.  * No data is actually output, so no suspension return is possible.
  514.  */
  515. METHODDEF boolean
  516. encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
  517. {
  518.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  519.   int blkn, ci;
  520.   jpeg_component_info * compptr;
  521.   /* Take care of restart intervals if needed */
  522.   if (cinfo->restart_interval) {
  523.     if (entropy->restarts_to_go == 0) {
  524.       /* Re-initialize DC predictions to 0 */
  525.       for (ci = 0; ci < cinfo->comps_in_scan; ci++)
  526. entropy->saved.last_dc_val[ci] = 0;
  527.       /* Update restart state */
  528.       entropy->restarts_to_go = cinfo->restart_interval;
  529.     }
  530.     entropy->restarts_to_go--;
  531.   }
  532.   for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
  533.     ci = cinfo->MCU_membership[blkn];
  534.     compptr = cinfo->cur_comp_info[ci];
  535.     htest_one_block(MCU_data[blkn][0], entropy->saved.last_dc_val[ci],
  536.     entropy->dc_count_ptrs[compptr->dc_tbl_no],
  537.     entropy->ac_count_ptrs[compptr->ac_tbl_no]);
  538.     entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0];
  539.   }
  540.   return TRUE;
  541. }
  542. /* Generate the optimal coding for the given counts, initialize htbl */
  543. LOCAL void
  544. gen_huff_coding (j_compress_ptr cinfo, JHUFF_TBL *htbl, long freq[])
  545. {
  546. #define MAX_CLEN 32 /* assumed maximum initial code length */
  547.   UINT8 bits[MAX_CLEN+1]; /* bits[k] = # of symbols with code length k */
  548.   int codesize[257]; /* codesize[k] = code length of symbol k */
  549.   int others[257]; /* next symbol in current branch of tree */
  550.   int c1, c2;
  551.   int p, i, j;
  552.   long v;
  553.   /* This algorithm is explained in section K.2 of the JPEG standard */
  554.   MEMZERO(bits, SIZEOF(bits));
  555.   MEMZERO(codesize, SIZEOF(codesize));
  556.   for (i = 0; i < 257; i++)
  557.     others[i] = -1; /* init links to empty */
  558.   
  559.   freq[256] = 1; /* make sure there is a nonzero count */
  560.   /* Including the pseudo-symbol 256 in the Huffman procedure guarantees
  561.    * that no real symbol is given code-value of all ones, because 256
  562.    * will be placed in the largest codeword category.
  563.    */
  564.   /* Huffman's basic algorithm to assign optimal code lengths to symbols */
  565.   for (;;) {
  566.     /* Find the smallest nonzero frequency, set c1 = its symbol */
  567.     /* In case of ties, take the larger symbol number */
  568.     c1 = -1;
  569.     v = 1000000000L;
  570.     for (i = 0; i <= 256; i++) {
  571.       if (freq[i] && freq[i] <= v) {
  572. v = freq[i];
  573. c1 = i;
  574.       }
  575.     }
  576.     /* Find the next smallest nonzero frequency, set c2 = its symbol */
  577.     /* In case of ties, take the larger symbol number */
  578.     c2 = -1;
  579.     v = 1000000000L;
  580.     for (i = 0; i <= 256; i++) {
  581.       if (freq[i] && freq[i] <= v && i != c1) {
  582. v = freq[i];
  583. c2 = i;
  584.       }
  585.     }
  586.     /* Done if we've merged everything into one frequency */
  587.     if (c2 < 0)
  588.       break;
  589.     
  590.     /* Else merge the two counts/trees */
  591.     freq[c1] += freq[c2];
  592.     freq[c2] = 0;
  593.     /* Increment the codesize of everything in c1's tree branch */
  594.     codesize[c1]++;
  595.     while (others[c1] >= 0) {
  596.       c1 = others[c1];
  597.       codesize[c1]++;
  598.     }
  599.     
  600.     others[c1] = c2; /* chain c2 onto c1's tree branch */
  601.     
  602.     /* Increment the codesize of everything in c2's tree branch */
  603.     codesize[c2]++;
  604.     while (others[c2] >= 0) {
  605.       c2 = others[c2];
  606.       codesize[c2]++;
  607.     }
  608.   }
  609.   /* Now count the number of symbols of each code length */
  610.   for (i = 0; i <= 256; i++) {
  611.     if (codesize[i]) {
  612.       /* The JPEG standard seems to think that this can't happen, */
  613.       /* but I'm paranoid... */
  614.       if (codesize[i] > MAX_CLEN)
  615. ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW);
  616.       bits[codesize[i]]++;
  617.     }
  618.   }
  619.   /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure
  620.    * Huffman procedure assigned any such lengths, we must adjust the coding.
  621.    * Here is what the JPEG spec says about how this next bit works:
  622.    * Since symbols are paired for the longest Huffman code, the symbols are
  623.    * removed from this length category two at a time.  The prefix for the pair
  624.    * (which is one bit shorter) is allocated to one of the pair; then,
  625.    * skipping the BITS entry for that prefix length, a code word from the next
  626.    * shortest nonzero BITS entry is converted into a prefix for two code words
  627.    * one bit longer.
  628.    */
  629.   
  630.   for (i = MAX_CLEN; i > 16; i--) {
  631.     while (bits[i] > 0) {
  632.       j = i - 2; /* find length of new prefix to be used */
  633.       while (bits[j] == 0)
  634. j--;
  635.       
  636.       bits[i] -= 2; /* remove two symbols */
  637.       bits[i-1]++; /* one goes in this length */
  638.       bits[j+1] += 2; /* two new symbols in this length */
  639.       bits[j]--; /* symbol of this length is now a prefix */
  640.     }
  641.   }
  642.   /* Remove the count for the pseudo-symbol 256 from the largest codelength */
  643.   while (bits[i] == 0) /* find largest codelength still in use */
  644.     i--;
  645.   bits[i]--;
  646.   
  647.   /* Return final symbol counts (only for lengths 0..16) */
  648.   MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits));
  649.   
  650.   /* Return a list of the symbols sorted by code length */
  651.   /* It's not real clear to me why we don't need to consider the codelength
  652.    * changes made above, but the JPEG spec seems to think this works.
  653.    */
  654.   p = 0;
  655.   for (i = 1; i <= MAX_CLEN; i++) {
  656.     for (j = 0; j <= 255; j++) {
  657.       if (codesize[j] == i) {
  658. htbl->huffval[p] = (UINT8) j;
  659. p++;
  660.       }
  661.     }
  662.   }
  663.   /* Set sent_table FALSE so updated table will be written to JPEG file. */
  664.   htbl->sent_table = FALSE;
  665. }
  666. /*
  667.  * Finish up a statistics-gathering pass and create the new Huffman tables.
  668.  */
  669. METHODDEF void
  670. finish_pass_gather (j_compress_ptr cinfo)
  671. {
  672.   huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
  673.   int ci, dctbl, actbl;
  674.   jpeg_component_info * compptr;
  675.   JHUFF_TBL **htblptr;
  676.   boolean did_dc[NUM_HUFF_TBLS];
  677.   boolean did_ac[NUM_HUFF_TBLS];
  678.   /* It's important not to apply gen_huff_coding more than once per table,
  679.    * because it clobbers the input frequency counts!
  680.    */
  681.   MEMZERO(did_dc, SIZEOF(did_dc));
  682.   MEMZERO(did_ac, SIZEOF(did_ac));
  683.   for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
  684.     compptr = cinfo->cur_comp_info[ci];
  685.     dctbl = compptr->dc_tbl_no;
  686.     actbl = compptr->ac_tbl_no;
  687.     if (! did_dc[dctbl]) {
  688.       htblptr = & cinfo->dc_huff_tbl_ptrs[dctbl];
  689.       if (*htblptr == NULL)
  690. *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
  691.       gen_huff_coding(cinfo, *htblptr, entropy->dc_count_ptrs[dctbl]);
  692.       did_dc[dctbl] = TRUE;
  693.     }
  694.     if (! did_ac[actbl]) {
  695.       htblptr = & cinfo->ac_huff_tbl_ptrs[actbl];
  696.       if (*htblptr == NULL)
  697. *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
  698.       gen_huff_coding(cinfo, *htblptr, entropy->ac_count_ptrs[actbl]);
  699.       did_ac[actbl] = TRUE;
  700.     }
  701.   }
  702. }
  703. #endif /* ENTROPY_OPT_SUPPORTED */
  704. /*
  705.  * Module initialization routine for Huffman entropy encoding.
  706.  */
  707. GLOBAL void
  708. jinit_huff_encoder (j_compress_ptr cinfo)
  709. {
  710.   huff_entropy_ptr entropy;
  711.   int i;
  712.   entropy = (huff_entropy_ptr)
  713.     (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
  714. SIZEOF(huff_entropy_encoder));
  715.   cinfo->entropy = (struct jpeg_entropy_encoder *) entropy;
  716.   entropy->pub.start_pass = start_pass_huff;
  717.   /* Mark tables unallocated */
  718.   for (i = 0; i < NUM_HUFF_TBLS; i++) {
  719.     entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
  720. #ifdef ENTROPY_OPT_SUPPORTED
  721.     entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL;
  722. #endif
  723.   }
  724. }