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. 
   8  * This file contains Huffman entropy encoding routines. 
  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. 
  17 #define JPEG_INTERNALS 
  20 #include "jchuff.h"             /* Declarations shared with jcphuff.c */ 
  23 /* Expanded entropy encoder object for Huffman encoding. 
  25  * The savable_state subrecord contains fields that change within an MCU, 
  26  * but must not be updated permanently until we complete the MCU. 
  30   INT32 put_buffer
;             /* current bit-accumulation buffer */ 
  31   int put_bits
;                 /* # of bits now in it */ 
  32   int last_dc_val
[MAX_COMPS_IN_SCAN
]; /* last DC coef for each component */ 
  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. 
  40 #ifndef NO_STRUCT_ASSIGN 
  41 #define ASSIGN_STATE(dest,src)  ((dest) = (src)) 
  43 #if MAX_COMPS_IN_SCAN == 4 
  44 #define ASSIGN_STATE(dest,src)  \ 
  45         ((dest).put_buffer = (src).put_buffer, \ 
  46          (dest).put_bits = (src).put_bits, \ 
  47          (dest).last_dc_val[0] = (src).last_dc_val[0], \ 
  48          (dest).last_dc_val[1] = (src).last_dc_val[1], \ 
  49          (dest).last_dc_val[2] = (src).last_dc_val[2], \ 
  50          (dest).last_dc_val[3] = (src).last_dc_val[3]) 
  56   struct jpeg_entropy_encoder pub
; /* public fields */ 
  58   savable_state saved
;          /* Bit buffer & DC state at start of MCU */ 
  60   /* These fields are NOT loaded into local working state. */ 
  61   unsigned int restarts_to_go
;  /* MCUs left in this restart interval */ 
  62   int next_restart_num
;         /* next restart number to write (0-7) */ 
  64   /* Pointers to derived tables (these workspaces have image lifespan) */ 
  65   c_derived_tbl 
* dc_derived_tbls
[NUM_HUFF_TBLS
]; 
  66   c_derived_tbl 
* ac_derived_tbls
[NUM_HUFF_TBLS
]; 
  68 #ifdef ENTROPY_OPT_SUPPORTED    /* Statistics tables for optimization */ 
  69   long * dc_count_ptrs
[NUM_HUFF_TBLS
]; 
  70   long * ac_count_ptrs
[NUM_HUFF_TBLS
]; 
  72 } huff_entropy_encoder
; 
  74 typedef huff_entropy_encoder 
* huff_entropy_ptr
; 
  76 /* Working state while writing an MCU. 
  77  * This struct contains all the fields that are needed by subroutines. 
  81   JOCTET 
* next_output_byte
;    /* => next byte to write in buffer */ 
  82   size_t free_in_buffer
;        /* # of byte spaces remaining in buffer */ 
  83   savable_state cur
;            /* Current bit buffer & DC state */ 
  84   j_compress_ptr cinfo
;         /* dump_buffer needs access to this */ 
  88 /* Forward declarations */ 
  89 METHODDEF(boolean
) encode_mcu_huff 
JPP((j_compress_ptr cinfo
, 
  90                                         JBLOCKROW 
*MCU_data
)); 
  91 METHODDEF(void) finish_pass_huff 
JPP((j_compress_ptr cinfo
)); 
  92 #ifdef ENTROPY_OPT_SUPPORTED 
  93 METHODDEF(boolean
) encode_mcu_gather 
JPP((j_compress_ptr cinfo
, 
  94                                           JBLOCKROW 
*MCU_data
)); 
  95 METHODDEF(void) finish_pass_gather 
JPP((j_compress_ptr cinfo
)); 
 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. 
 106 start_pass_huff (j_compress_ptr cinfo
, boolean gather_statistics
) 
 108   huff_entropy_ptr entropy 
= (huff_entropy_ptr
) cinfo
->entropy
; 
 109   int ci
, dctbl
, actbl
; 
 110   jpeg_component_info 
* compptr
; 
 112   if (gather_statistics
) { 
 113 #ifdef ENTROPY_OPT_SUPPORTED 
 114     entropy
->pub
.encode_mcu 
= encode_mcu_gather
; 
 115     entropy
->pub
.finish_pass 
= finish_pass_gather
; 
 117     ERREXIT(cinfo
, JERR_NOT_COMPILED
); 
 120     entropy
->pub
.encode_mcu 
= encode_mcu_huff
; 
 121     entropy
->pub
.finish_pass 
= finish_pass_huff
; 
 124   for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) { 
 125     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 126     dctbl 
= compptr
->dc_tbl_no
; 
 127     actbl 
= compptr
->ac_tbl_no
; 
 128     if (gather_statistics
) { 
 129 #ifdef ENTROPY_OPT_SUPPORTED 
 130       /* Check for invalid table indexes */ 
 131       /* (make_c_derived_tbl does this in the other path) */ 
 132       if (dctbl 
< 0 || dctbl 
>= NUM_HUFF_TBLS
) 
 133         ERREXIT1(cinfo
, JERR_NO_HUFF_TABLE
, dctbl
); 
 134       if (actbl 
< 0 || actbl 
>= NUM_HUFF_TBLS
) 
 135         ERREXIT1(cinfo
, JERR_NO_HUFF_TABLE
, actbl
); 
 136       /* Allocate and zero the statistics tables */ 
 137       /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ 
 138       if (entropy
->dc_count_ptrs
[dctbl
] == NULL
) 
 139         entropy
->dc_count_ptrs
[dctbl
] = (long *) 
 140           (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 142       MEMZERO(entropy
->dc_count_ptrs
[dctbl
], 257 * SIZEOF(long)); 
 143       if (entropy
->ac_count_ptrs
[actbl
] == NULL
) 
 144         entropy
->ac_count_ptrs
[actbl
] = (long *) 
 145           (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 147       MEMZERO(entropy
->ac_count_ptrs
[actbl
], 257 * SIZEOF(long)); 
 150       /* Compute derived values for Huffman tables */ 
 151       /* We may do this more than once for a table, but it's not expensive */ 
 152       jpeg_make_c_derived_tbl(cinfo
, TRUE
, dctbl
, 
 153                               & entropy
->dc_derived_tbls
[dctbl
]); 
 154       jpeg_make_c_derived_tbl(cinfo
, FALSE
, actbl
, 
 155                               & entropy
->ac_derived_tbls
[actbl
]); 
 157     /* Initialize DC predictions to 0 */ 
 158     entropy
->saved
.last_dc_val
[ci
] = 0; 
 161   /* Initialize bit buffer to empty */ 
 162   entropy
->saved
.put_buffer 
= 0; 
 163   entropy
->saved
.put_bits 
= 0; 
 165   /* Initialize restart stuff */ 
 166   entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 167   entropy
->next_restart_num 
= 0; 
 172  * Compute the derived values for a Huffman table. 
 173  * This routine also performs some validation checks on the table. 
 175  * Note this is also used by jcphuff.c. 
 179 jpeg_make_c_derived_tbl (j_compress_ptr cinfo
, boolean isDC
, int tblno
, 
 180                          c_derived_tbl 
** pdtbl
) 
 184   int p
, i
, l
, lastp
, si
, maxsymbol
; 
 186   unsigned int huffcode
[257]; 
 189   /* Note that huffsize[] and huffcode[] are filled in code-length order, 
 190    * paralleling the order of the symbols themselves in htbl->huffval[]. 
 193   /* Find the input Huffman table */ 
 194   if (tblno 
< 0 || tblno 
>= NUM_HUFF_TBLS
) 
 195     ERREXIT1(cinfo
, JERR_NO_HUFF_TABLE
, tblno
); 
 197     isDC 
? cinfo
->dc_huff_tbl_ptrs
[tblno
] : cinfo
->ac_huff_tbl_ptrs
[tblno
]; 
 199     ERREXIT1(cinfo
, JERR_NO_HUFF_TABLE
, tblno
); 
 201   /* Allocate a workspace if we haven't already done so. */ 
 203     *pdtbl 
= (c_derived_tbl 
*) 
 204       (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 205                                   SIZEOF(c_derived_tbl
)); 
 208   /* Figure C.1: make table of Huffman code length for each symbol */ 
 211   for (l 
= 1; l 
<= 16; l
++) { 
 212     i 
= (int) htbl
->bits
[l
]; 
 213     if (i 
< 0 || p 
+ i 
> 256)   /* protect against table overrun */ 
 214       ERREXIT(cinfo
, JERR_BAD_HUFF_TABLE
); 
 216       huffsize
[p
++] = (char) l
; 
 221   /* Figure C.2: generate the codes themselves */ 
 222   /* We also validate that the counts represent a legal Huffman code tree. */ 
 227   while (huffsize
[p
]) { 
 228     while (((int) huffsize
[p
]) == si
) { 
 229       huffcode
[p
++] = code
; 
 232     /* code is now 1 more than the last code used for codelength si; but 
 233      * it must still fit in si bits, since no code is allowed to be all ones. 
 235     if (((INT32
) code
) >= (((INT32
) 1) << si
)) 
 236       ERREXIT(cinfo
, JERR_BAD_HUFF_TABLE
); 
 241   /* Figure C.3: generate encoding tables */ 
 242   /* These are code and size indexed by symbol value */ 
 244   /* Set all codeless symbols to have code length 0; 
 245    * this lets us detect duplicate VAL entries here, and later 
 246    * allows emit_bits to detect any attempt to emit such symbols. 
 248   MEMZERO(dtbl
->ehufsi
, SIZEOF(dtbl
->ehufsi
)); 
 250   /* This is also a convenient place to check for out-of-range 
 251    * and duplicated VAL entries.  We allow 0..255 for AC symbols 
 252    * but only 0..15 for DC.  (We could constrain them further 
 253    * based on data depth and mode, but this seems enough.) 
 255   maxsymbol 
= isDC 
? 15 : 255; 
 257   for (p 
= 0; p 
< lastp
; p
++) { 
 258     i 
= htbl
->huffval
[p
]; 
 259     if (i 
< 0 || i 
> maxsymbol 
|| dtbl
->ehufsi
[i
]) 
 260       ERREXIT(cinfo
, JERR_BAD_HUFF_TABLE
); 
 261     dtbl
->ehufco
[i
] = huffcode
[p
]; 
 262     dtbl
->ehufsi
[i
] = huffsize
[p
]; 
 267 /* Outputting bytes to the file */ 
 269 /* Emit a byte, taking 'action' if must suspend. */ 
 270 #define emit_byte(state,val,action)  \ 
 271         { *(state)->next_output_byte++ = (JOCTET) (val);  \ 
 272           if (--(state)->free_in_buffer == 0)  \ 
 273             if (! dump_buffer(state))  \ 
 278 dump_buffer (working_state 
* state
) 
 279 /* Empty the output buffer; return TRUE if successful, FALSE if must suspend */ 
 281   struct jpeg_destination_mgr 
* dest 
= state
->cinfo
->dest
; 
 283   if (! (*dest
->empty_output_buffer
) (state
->cinfo
)) 
 285   /* After a successful buffer dump, must reset buffer pointers */ 
 286   state
->next_output_byte 
= dest
->next_output_byte
; 
 287   state
->free_in_buffer 
= dest
->free_in_buffer
; 
 292 /* Outputting bits to the file */ 
 294 /* Only the right 24 bits of put_buffer are used; the valid bits are 
 295  * left-justified in this part.  At most 16 bits can be passed to emit_bits 
 296  * in one call, and we never retain more than 7 bits in put_buffer 
 297  * between calls, so 24 bits are sufficient. 
 302 emit_bits (working_state 
* state
, unsigned int code
, int size
) 
 303 /* Emit some bits; return TRUE if successful, FALSE if must suspend */ 
 305   /* This routine is heavily used, so it's worth coding tightly. */ 
 306   register INT32 put_buffer 
= (INT32
) code
; 
 307   register int put_bits 
= state
->cur
.put_bits
; 
 309   /* if size is 0, caller used an invalid Huffman table entry */ 
 311     ERREXIT(state
->cinfo
, JERR_HUFF_MISSING_CODE
); 
 313   put_buffer 
&= (((INT32
) 1)<<size
) - 1; /* mask off any extra bits in code */ 
 315   put_bits 
+= size
;             /* new number of bits in buffer */ 
 317   put_buffer 
<<= 24 - put_bits
; /* align incoming bits */ 
 319   put_buffer 
|= state
->cur
.put_buffer
; /* and merge with old buffer contents */ 
 321   while (put_bits 
>= 8) { 
 322     int c 
= (int) ((put_buffer 
>> 16) & 0xFF); 
 324     emit_byte(state
, c
, return FALSE
); 
 325     if (c 
== 0xFF) {            /* need to stuff a zero byte? */ 
 326       emit_byte(state
, 0, return FALSE
); 
 332   state
->cur
.put_buffer 
= put_buffer
; /* update state variables */ 
 333   state
->cur
.put_bits 
= put_bits
; 
 340 flush_bits (working_state 
* state
) 
 342   if (! emit_bits(state
, 0x7F, 7)) /* fill any partial byte with ones */ 
 344   state
->cur
.put_buffer 
= 0;    /* and reset bit-buffer to empty */ 
 345   state
->cur
.put_bits 
= 0; 
 350 /* Encode a single block's worth of coefficients */ 
 353 encode_one_block (working_state 
* state
, JCOEFPTR block
, int last_dc_val
, 
 354                   c_derived_tbl 
*dctbl
, c_derived_tbl 
*actbl
) 
 356   register int temp
, temp2
; 
 358   register int k
, r
, i
; 
 360   /* Encode the DC coefficient difference per section F.1.2.1 */ 
 362   temp 
= temp2 
= block
[0] - last_dc_val
; 
 365     temp 
= -temp
;               /* temp is abs value of input */ 
 366     /* For a negative input, want temp2 = bitwise complement of abs(input) */ 
 367     /* This code assumes we are on a two's complement machine */ 
 371   /* Find the number of bits needed for the magnitude of the coefficient */ 
 377   /* Check for out-of-range coefficient values. 
 378    * Since we're encoding a difference, the range limit is twice as much. 
 380   if (nbits 
> MAX_COEF_BITS
+1) 
 381     ERREXIT(state
->cinfo
, JERR_BAD_DCT_COEF
); 
 383   /* Emit the Huffman-coded symbol for the number of bits */ 
 384   if (! emit_bits(state
, dctbl
->ehufco
[nbits
], dctbl
->ehufsi
[nbits
])) 
 387   /* Emit that number of bits of the value, if positive, */ 
 388   /* or the complement of its magnitude, if negative. */ 
 389   if (nbits
)                    /* emit_bits rejects calls with size 0 */ 
 390     if (! emit_bits(state
, (unsigned int) temp2
, nbits
)) 
 393   /* Encode the AC coefficients per section F.1.2.2 */ 
 395   r 
= 0;                        /* r = run length of zeros */ 
 397   for (k 
= 1; k 
< DCTSIZE2
; k
++) { 
 398     if ((temp 
= block
[jpeg_natural_order
[k
]]) == 0) { 
 401       /* if run length > 15, must emit special run-length-16 codes (0xF0) */ 
 403         if (! emit_bits(state
, actbl
->ehufco
[0xF0], actbl
->ehufsi
[0xF0])) 
 410         temp 
= -temp
;           /* temp is abs value of input */ 
 411         /* This code assumes we are on a two's complement machine */ 
 415       /* Find the number of bits needed for the magnitude of the coefficient */ 
 416       nbits 
= 1;                /* there must be at least one 1 bit */ 
 419       /* Check for out-of-range coefficient values */ 
 420       if (nbits 
> MAX_COEF_BITS
) 
 421         ERREXIT(state
->cinfo
, JERR_BAD_DCT_COEF
); 
 423       /* Emit Huffman symbol for run length / number of bits */ 
 424       i 
= (r 
<< 4) + nbits
; 
 425       if (! emit_bits(state
, actbl
->ehufco
[i
], actbl
->ehufsi
[i
])) 
 428       /* Emit that number of bits of the value, if positive, */ 
 429       /* or the complement of its magnitude, if negative. */ 
 430       if (! emit_bits(state
, (unsigned int) temp2
, nbits
)) 
 437   /* If the last coef(s) were zero, emit an end-of-block code */ 
 439     if (! emit_bits(state
, actbl
->ehufco
[0], actbl
->ehufsi
[0])) 
 447  * Emit a restart marker & resynchronize predictions. 
 451 emit_restart (working_state 
* state
, int restart_num
) 
 455   if (! flush_bits(state
)) 
 458   emit_byte(state
, 0xFF, return FALSE
); 
 459   emit_byte(state
, JPEG_RST0 
+ restart_num
, return FALSE
); 
 461   /* Re-initialize DC predictions to 0 */ 
 462   for (ci 
= 0; ci 
< state
->cinfo
->comps_in_scan
; ci
++) 
 463     state
->cur
.last_dc_val
[ci
] = 0; 
 465   /* The restart counter is not updated until we successfully write the MCU. */ 
 472  * Encode and output one MCU's worth of Huffman-compressed coefficients. 
 476 encode_mcu_huff (j_compress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 478   huff_entropy_ptr entropy 
= (huff_entropy_ptr
) cinfo
->entropy
; 
 481   jpeg_component_info 
* compptr
; 
 483   /* Load up working state */ 
 484   state
.next_output_byte 
= cinfo
->dest
->next_output_byte
; 
 485   state
.free_in_buffer 
= cinfo
->dest
->free_in_buffer
; 
 486   ASSIGN_STATE(state
.cur
, entropy
->saved
); 
 489   /* Emit restart marker if needed */ 
 490   if (cinfo
->restart_interval
) { 
 491     if (entropy
->restarts_to_go 
== 0) 
 492       if (! emit_restart(&state
, entropy
->next_restart_num
)) 
 496   /* Encode the MCU data blocks */ 
 497   for (blkn 
= 0; blkn 
< cinfo
->blocks_in_MCU
; blkn
++) { 
 498     ci 
= cinfo
->MCU_membership
[blkn
]; 
 499     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 500     if (! encode_one_block(&state
, 
 501                            MCU_data
[blkn
][0], state
.cur
.last_dc_val
[ci
], 
 502                            entropy
->dc_derived_tbls
[compptr
->dc_tbl_no
], 
 503                            entropy
->ac_derived_tbls
[compptr
->ac_tbl_no
])) 
 505     /* Update last_dc_val */ 
 506     state
.cur
.last_dc_val
[ci
] = MCU_data
[blkn
][0][0]; 
 509   /* Completed MCU, so update state */ 
 510   cinfo
->dest
->next_output_byte 
= state
.next_output_byte
; 
 511   cinfo
->dest
->free_in_buffer 
= state
.free_in_buffer
; 
 512   ASSIGN_STATE(entropy
->saved
, state
.cur
); 
 514   /* Update restart-interval state too */ 
 515   if (cinfo
->restart_interval
) { 
 516     if (entropy
->restarts_to_go 
== 0) { 
 517       entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 518       entropy
->next_restart_num
++; 
 519       entropy
->next_restart_num 
&= 7; 
 521     entropy
->restarts_to_go
--; 
 529  * Finish up at the end of a Huffman-compressed scan. 
 533 finish_pass_huff (j_compress_ptr cinfo
) 
 535   huff_entropy_ptr entropy 
= (huff_entropy_ptr
) cinfo
->entropy
; 
 538   /* Load up working state ... flush_bits needs it */ 
 539   state
.next_output_byte 
= cinfo
->dest
->next_output_byte
; 
 540   state
.free_in_buffer 
= cinfo
->dest
->free_in_buffer
; 
 541   ASSIGN_STATE(state
.cur
, entropy
->saved
); 
 544   /* Flush out the last data */ 
 545   if (! flush_bits(&state
)) 
 546     ERREXIT(cinfo
, JERR_CANT_SUSPEND
); 
 549   cinfo
->dest
->next_output_byte 
= state
.next_output_byte
; 
 550   cinfo
->dest
->free_in_buffer 
= state
.free_in_buffer
; 
 551   ASSIGN_STATE(entropy
->saved
, state
.cur
); 
 556  * Huffman coding optimization. 
 558  * We first scan the supplied data and count the number of uses of each symbol 
 559  * that is to be Huffman-coded. (This process MUST agree with the code above.) 
 560  * Then we build a Huffman coding tree for the observed counts. 
 561  * Symbols which are not needed at all for the particular image are not 
 562  * assigned any code, which saves space in the DHT marker as well as in 
 563  * the compressed data. 
 566 #ifdef ENTROPY_OPT_SUPPORTED 
 569 /* Process a single block's worth of coefficients */ 
 572 htest_one_block (j_compress_ptr cinfo
, JCOEFPTR block
, int last_dc_val
, 
 573                  long dc_counts
[], long ac_counts
[]) 
 579   /* Encode the DC coefficient difference per section F.1.2.1 */ 
 581   temp 
= block
[0] - last_dc_val
; 
 585   /* Find the number of bits needed for the magnitude of the coefficient */ 
 591   /* Check for out-of-range coefficient values. 
 592    * Since we're encoding a difference, the range limit is twice as much. 
 594   if (nbits 
> MAX_COEF_BITS
+1) 
 595     ERREXIT(cinfo
, JERR_BAD_DCT_COEF
); 
 597   /* Count the Huffman symbol for the number of bits */ 
 600   /* Encode the AC coefficients per section F.1.2.2 */ 
 602   r 
= 0;                        /* r = run length of zeros */ 
 604   for (k 
= 1; k 
< DCTSIZE2
; k
++) { 
 605     if ((temp 
= block
[jpeg_natural_order
[k
]]) == 0) { 
 608       /* if run length > 15, must emit special run-length-16 codes (0xF0) */ 
 614       /* Find the number of bits needed for the magnitude of the coefficient */ 
 618       /* Find the number of bits needed for the magnitude of the coefficient */ 
 619       nbits 
= 1;                /* there must be at least one 1 bit */ 
 622       /* Check for out-of-range coefficient values */ 
 623       if (nbits 
> MAX_COEF_BITS
) 
 624         ERREXIT(cinfo
, JERR_BAD_DCT_COEF
); 
 626       /* Count Huffman symbol for run length / number of bits */ 
 627       ac_counts
[(r 
<< 4) + nbits
]++; 
 633   /* If the last coef(s) were zero, emit an end-of-block code */ 
 640  * Trial-encode one MCU's worth of Huffman-compressed coefficients. 
 641  * No data is actually output, so no suspension return is possible. 
 645 encode_mcu_gather (j_compress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 647   huff_entropy_ptr entropy 
= (huff_entropy_ptr
) cinfo
->entropy
; 
 649   jpeg_component_info 
* compptr
; 
 651   /* Take care of restart intervals if needed */ 
 652   if (cinfo
->restart_interval
) { 
 653     if (entropy
->restarts_to_go 
== 0) { 
 654       /* Re-initialize DC predictions to 0 */ 
 655       for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) 
 656         entropy
->saved
.last_dc_val
[ci
] = 0; 
 657       /* Update restart state */ 
 658       entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 660     entropy
->restarts_to_go
--; 
 663   for (blkn 
= 0; blkn 
< cinfo
->blocks_in_MCU
; blkn
++) { 
 664     ci 
= cinfo
->MCU_membership
[blkn
]; 
 665     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 666     htest_one_block(cinfo
, MCU_data
[blkn
][0], entropy
->saved
.last_dc_val
[ci
], 
 667                     entropy
->dc_count_ptrs
[compptr
->dc_tbl_no
], 
 668                     entropy
->ac_count_ptrs
[compptr
->ac_tbl_no
]); 
 669     entropy
->saved
.last_dc_val
[ci
] = MCU_data
[blkn
][0][0]; 
 677  * Generate the best Huffman code table for the given counts, fill htbl. 
 678  * Note this is also used by jcphuff.c. 
 680  * The JPEG standard requires that no symbol be assigned a codeword of all 
 681  * one bits (so that padding bits added at the end of a compressed segment 
 682  * can't look like a valid code).  Because of the canonical ordering of 
 683  * codewords, this just means that there must be an unused slot in the 
 684  * longest codeword length category.  Section K.2 of the JPEG spec suggests 
 685  * reserving such a slot by pretending that symbol 256 is a valid symbol 
 686  * with count 1.  In theory that's not optimal; giving it count zero but 
 687  * including it in the symbol set anyway should give a better Huffman code. 
 688  * But the theoretically better code actually seems to come out worse in 
 689  * practice, because it produces more all-ones bytes (which incur stuffed 
 690  * zero bytes in the final file).  In any case the difference is tiny. 
 692  * The JPEG standard requires Huffman codes to be no more than 16 bits long. 
 693  * If some symbols have a very small but nonzero probability, the Huffman tree 
 694  * must be adjusted to meet the code length restriction.  We currently use 
 695  * the adjustment method suggested in JPEG section K.2.  This method is *not* 
 696  * optimal; it may not choose the best possible limited-length code.  But 
 697  * typically only very-low-frequency symbols will be given less-than-optimal 
 698  * lengths, so the code is almost optimal.  Experimental comparisons against 
 699  * an optimal limited-length-code algorithm indicate that the difference is 
 700  * microscopic --- usually less than a hundredth of a percent of total size. 
 701  * So the extra complexity of an optimal algorithm doesn't seem worthwhile. 
 705 jpeg_gen_optimal_table (j_compress_ptr cinfo
, JHUFF_TBL 
* htbl
, long freq
[]) 
 707 #define MAX_CLEN 32             /* assumed maximum initial code length */ 
 708   UINT8 bits
[MAX_CLEN
+1];       /* bits[k] = # of symbols with code length k */ 
 709   int codesize
[257];            /* codesize[k] = code length of symbol k */ 
 710   int others
[257];              /* next symbol in current branch of tree */ 
 715   /* This algorithm is explained in section K.2 of the JPEG standard */ 
 717   MEMZERO(bits
, SIZEOF(bits
)); 
 718   MEMZERO(codesize
, SIZEOF(codesize
)); 
 719   for (i 
= 0; i 
< 257; i
++) 
 720     others
[i
] = -1;             /* init links to empty */ 
 722   freq
[256] = 1;                /* make sure 256 has a nonzero count */ 
 723   /* Including the pseudo-symbol 256 in the Huffman procedure guarantees 
 724    * that no real symbol is given code-value of all ones, because 256 
 725    * will be placed last in the largest codeword category. 
 728   /* Huffman's basic algorithm to assign optimal code lengths to symbols */ 
 731     /* Find the smallest nonzero frequency, set c1 = its symbol */ 
 732     /* In case of ties, take the larger symbol number */ 
 735     for (i 
= 0; i 
<= 256; i
++) { 
 736       if (freq
[i
] && freq
[i
] <= v
) { 
 742     /* Find the next smallest nonzero frequency, set c2 = its symbol */ 
 743     /* In case of ties, take the larger symbol number */ 
 746     for (i 
= 0; i 
<= 256; i
++) { 
 747       if (freq
[i
] && freq
[i
] <= v 
&& i 
!= c1
) { 
 753     /* Done if we've merged everything into one frequency */ 
 757     /* Else merge the two counts/trees */ 
 758     freq
[c1
] += freq
[c2
]; 
 761     /* Increment the codesize of everything in c1's tree branch */ 
 763     while (others
[c1
] >= 0) { 
 768     others
[c1
] = c2
;            /* chain c2 onto c1's tree branch */ 
 770     /* Increment the codesize of everything in c2's tree branch */ 
 772     while (others
[c2
] >= 0) { 
 778   /* Now count the number of symbols of each code length */ 
 779   for (i 
= 0; i 
<= 256; i
++) { 
 781       /* The JPEG standard seems to think that this can't happen, */ 
 782       /* but I'm paranoid... */ 
 783       if (codesize
[i
] > MAX_CLEN
) 
 784         ERREXIT(cinfo
, JERR_HUFF_CLEN_OVERFLOW
); 
 790   /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure 
 791    * Huffman procedure assigned any such lengths, we must adjust the coding. 
 792    * Here is what the JPEG spec says about how this next bit works: 
 793    * Since symbols are paired for the longest Huffman code, the symbols are 
 794    * removed from this length category two at a time.  The prefix for the pair 
 795    * (which is one bit shorter) is allocated to one of the pair; then, 
 796    * skipping the BITS entry for that prefix length, a code word from the next 
 797    * shortest nonzero BITS entry is converted into a prefix for two code words 
 801   for (i 
= MAX_CLEN
; i 
> 16; i
--) { 
 802     while (bits
[i
] > 0) { 
 803       j 
= i 
- 2;                /* find length of new prefix to be used */ 
 807       bits
[i
] -= 2;             /* remove two symbols */ 
 808       bits
[i
-1]++;              /* one goes in this length */ 
 809       bits
[j
+1] += 2;           /* two new symbols in this length */ 
 810       bits
[j
]--;                /* symbol of this length is now a prefix */ 
 814   /* Remove the count for the pseudo-symbol 256 from the largest codelength */ 
 815   while (bits
[i
] == 0)          /* find largest codelength still in use */ 
 819   /* Return final symbol counts (only for lengths 0..16) */ 
 820   MEMCOPY(htbl
->bits
, bits
, SIZEOF(htbl
->bits
)); 
 822   /* Return a list of the symbols sorted by code length */ 
 823   /* It's not real clear to me why we don't need to consider the codelength 
 824    * changes made above, but the JPEG spec seems to think this works. 
 827   for (i 
= 1; i 
<= MAX_CLEN
; i
++) { 
 828     for (j 
= 0; j 
<= 255; j
++) { 
 829       if (codesize
[j
] == i
) { 
 830         htbl
->huffval
[p
] = (UINT8
) j
; 
 836   /* Set sent_table FALSE so updated table will be written to JPEG file. */ 
 837   htbl
->sent_table 
= FALSE
; 
 842  * Finish up a statistics-gathering pass and create the new Huffman tables. 
 846 finish_pass_gather (j_compress_ptr cinfo
) 
 848   huff_entropy_ptr entropy 
= (huff_entropy_ptr
) cinfo
->entropy
; 
 849   int ci
, dctbl
, actbl
; 
 850   jpeg_component_info 
* compptr
; 
 852   boolean did_dc
[NUM_HUFF_TBLS
]; 
 853   boolean did_ac
[NUM_HUFF_TBLS
]; 
 855   /* It's important not to apply jpeg_gen_optimal_table more than once 
 856    * per table, because it clobbers the input frequency counts! 
 858   MEMZERO(did_dc
, SIZEOF(did_dc
)); 
 859   MEMZERO(did_ac
, SIZEOF(did_ac
)); 
 861   for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) { 
 862     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 863     dctbl 
= compptr
->dc_tbl_no
; 
 864     actbl 
= compptr
->ac_tbl_no
; 
 865     if (! did_dc
[dctbl
]) { 
 866       htblptr 
= & cinfo
->dc_huff_tbl_ptrs
[dctbl
]; 
 867       if (*htblptr 
== NULL
) 
 868         *htblptr 
= jpeg_alloc_huff_table((j_common_ptr
) cinfo
); 
 869       jpeg_gen_optimal_table(cinfo
, *htblptr
, entropy
->dc_count_ptrs
[dctbl
]); 
 870       did_dc
[dctbl
] = TRUE
; 
 872     if (! did_ac
[actbl
]) { 
 873       htblptr 
= & cinfo
->ac_huff_tbl_ptrs
[actbl
]; 
 874       if (*htblptr 
== NULL
) 
 875         *htblptr 
= jpeg_alloc_huff_table((j_common_ptr
) cinfo
); 
 876       jpeg_gen_optimal_table(cinfo
, *htblptr
, entropy
->ac_count_ptrs
[actbl
]); 
 877       did_ac
[actbl
] = TRUE
; 
 883 #endif /* ENTROPY_OPT_SUPPORTED */ 
 887  * Module initialization routine for Huffman entropy encoding. 
 891 jinit_huff_encoder (j_compress_ptr cinfo
) 
 893   huff_entropy_ptr entropy
; 
 896   entropy 
= (huff_entropy_ptr
) 
 897     (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 898                                 SIZEOF(huff_entropy_encoder
)); 
 899   cinfo
->entropy 
= (struct jpeg_entropy_encoder 
*) entropy
; 
 900   entropy
->pub
.start_pass 
= start_pass_huff
; 
 902   /* Mark tables unallocated */ 
 903   for (i 
= 0; i 
< NUM_HUFF_TBLS
; i
++) { 
 904     entropy
->dc_derived_tbls
[i
] = entropy
->ac_derived_tbls
[i
] = NULL
; 
 905 #ifdef ENTROPY_OPT_SUPPORTED 
 906     entropy
->dc_count_ptrs
[i
] = entropy
->ac_count_ptrs
[i
] = NULL
;