JCHUFF.c
上传用户:cjw5120
上传日期:2022-05-11
资源大小:5032k
文件大小:26k
源码类别:

网络截获/分析

开发平台:

Visual C++

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