jchuff.c
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:28k
源码类别:

打印编程

开发平台:

Visual C++

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