4  * Copyright (C) 1995-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 for progressive JPEG. 
  10  * We do not support output suspension in this module, since the library 
  11  * currently does not allow multiple-scan files to be written with output 
  15 #define JPEG_INTERNALS 
  18 #include "jchuff.h"             /* Declarations shared with jchuff.c */ 
  20 #ifdef C_PROGRESSIVE_SUPPORTED 
  22 /* Expanded entropy encoder object for progressive Huffman encoding. */ 
  25   struct jpeg_entropy_encoder pub
; /* public fields */ 
  27   /* Mode flag: TRUE for optimization, FALSE for actual data output */ 
  28   boolean gather_statistics
; 
  30   /* Bit-level coding status. 
  31    * next_output_byte/free_in_buffer are local copies of cinfo->dest fields. 
  33   JOCTET 
* next_output_byte
;    /* => next byte to write in buffer */ 
  34   size_t free_in_buffer
;        /* # of byte spaces remaining in buffer */ 
  35   INT32 put_buffer
;             /* current bit-accumulation buffer */ 
  36   int put_bits
;                 /* # of bits now in it */ 
  37   j_compress_ptr cinfo
;         /* link to cinfo (needed for dump_buffer) */ 
  39   /* Coding status for DC components */ 
  40   int last_dc_val
[MAX_COMPS_IN_SCAN
]; /* last DC coef for each component */ 
  42   /* Coding status for AC components */ 
  43   int ac_tbl_no
;                /* the table number of the single component */ 
  44   unsigned int EOBRUN
;          /* run length of EOBs */ 
  45   unsigned int BE
;              /* # of buffered correction bits before MCU */ 
  46   char * bit_buffer
;            /* buffer for correction bits (1 per char) */ 
  47   /* packing correction bits tightly would save some space but cost time... */ 
  49   unsigned int restarts_to_go
;  /* MCUs left in this restart interval */ 
  50   int next_restart_num
;         /* next restart number to write (0-7) */ 
  52   /* Pointers to derived tables (these workspaces have image lifespan). 
  53    * Since any one scan codes only DC or only AC, we only need one set 
  54    * of tables, not one for DC and one for AC. 
  56   c_derived_tbl 
* derived_tbls
[NUM_HUFF_TBLS
]; 
  58   /* Statistics tables for optimization; again, one set is enough */ 
  59   long * count_ptrs
[NUM_HUFF_TBLS
]; 
  60 } phuff_entropy_encoder
; 
  62 typedef phuff_entropy_encoder 
* phuff_entropy_ptr
; 
  64 /* MAX_CORR_BITS is the number of bits the AC refinement correction-bit 
  65  * buffer can hold.  Larger sizes may slightly improve compression, but 
  66  * 1000 is already well into the realm of overkill. 
  67  * The minimum safe size is 64 bits. 
  70 #define MAX_CORR_BITS  1000     /* Max # of correction bits I can buffer */ 
  72 /* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. 
  73  * We assume that int right shift is unsigned if INT32 right shift is, 
  74  * which should be safe. 
  77 #ifdef RIGHT_SHIFT_IS_UNSIGNED 
  78 #define ISHIFT_TEMPS    int ishift_temp; 
  79 #define IRIGHT_SHIFT(x,shft)  \ 
  80         ((ishift_temp = (x)) < 0 ? \ 
  81          (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \ 
  82          (ishift_temp >> (shft))) 
  85 #define IRIGHT_SHIFT(x,shft)    ((x) >> (shft)) 
  88 /* Forward declarations */ 
  89 METHODDEF(boolean
) encode_mcu_DC_first 
JPP((j_compress_ptr cinfo
, 
  90                                             JBLOCKROW 
*MCU_data
)); 
  91 METHODDEF(boolean
) encode_mcu_AC_first 
JPP((j_compress_ptr cinfo
, 
  92                                             JBLOCKROW 
*MCU_data
)); 
  93 METHODDEF(boolean
) encode_mcu_DC_refine 
JPP((j_compress_ptr cinfo
, 
  94                                              JBLOCKROW 
*MCU_data
)); 
  95 METHODDEF(boolean
) encode_mcu_AC_refine 
JPP((j_compress_ptr cinfo
, 
  96                                              JBLOCKROW 
*MCU_data
)); 
  97 METHODDEF(void) finish_pass_phuff 
JPP((j_compress_ptr cinfo
)); 
  98 METHODDEF(void) finish_pass_gather_phuff 
JPP((j_compress_ptr cinfo
)); 
 102  * Initialize for a Huffman-compressed scan using progressive JPEG. 
 106 start_pass_phuff (j_compress_ptr cinfo
, boolean gather_statistics
) 
 108   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 111   jpeg_component_info 
* compptr
; 
 113   entropy
->cinfo 
= cinfo
; 
 114   entropy
->gather_statistics 
= gather_statistics
; 
 116   is_DC_band 
= (cinfo
->Ss 
== 0); 
 118   /* We assume jcmaster.c already validated the scan parameters. */ 
 120   /* Select execution routines */ 
 121   if (cinfo
->Ah 
== 0) { 
 123       entropy
->pub
.encode_mcu 
= encode_mcu_DC_first
; 
 125       entropy
->pub
.encode_mcu 
= encode_mcu_AC_first
; 
 128       entropy
->pub
.encode_mcu 
= encode_mcu_DC_refine
; 
 130       entropy
->pub
.encode_mcu 
= encode_mcu_AC_refine
; 
 131       /* AC refinement needs a correction bit buffer */ 
 132       if (entropy
->bit_buffer 
== NULL
) 
 133         entropy
->bit_buffer 
= (char *) 
 134           (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 135                                       MAX_CORR_BITS 
* SIZEOF(char)); 
 138   if (gather_statistics
) 
 139     entropy
->pub
.finish_pass 
= finish_pass_gather_phuff
; 
 141     entropy
->pub
.finish_pass 
= finish_pass_phuff
; 
 143   /* Only DC coefficients may be interleaved, so cinfo->comps_in_scan = 1 
 144    * for AC coefficients. 
 146   for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) { 
 147     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 148     /* Initialize DC predictions to 0 */ 
 149     entropy
->last_dc_val
[ci
] = 0; 
 150     /* Get table index */ 
 152       if (cinfo
->Ah 
!= 0)       /* DC refinement needs no table */ 
 154       tbl 
= compptr
->dc_tbl_no
; 
 156       entropy
->ac_tbl_no 
= tbl 
= compptr
->ac_tbl_no
; 
 158     if (gather_statistics
) { 
 159       /* Check for invalid table index */ 
 160       /* (make_c_derived_tbl does this in the other path) */ 
 161       if (tbl 
< 0 || tbl 
>= NUM_HUFF_TBLS
) 
 162         ERREXIT1(cinfo
, JERR_NO_HUFF_TABLE
, tbl
); 
 163       /* Allocate and zero the statistics tables */ 
 164       /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */ 
 165       if (entropy
->count_ptrs
[tbl
] == NULL
) 
 166         entropy
->count_ptrs
[tbl
] = (long *) 
 167           (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 169       MEMZERO(entropy
->count_ptrs
[tbl
], 257 * SIZEOF(long)); 
 171       /* Compute derived values for Huffman table */ 
 172       /* We may do this more than once for a table, but it's not expensive */ 
 173       jpeg_make_c_derived_tbl(cinfo
, is_DC_band
, tbl
, 
 174                               & entropy
->derived_tbls
[tbl
]); 
 178   /* Initialize AC stuff */ 
 182   /* Initialize bit buffer to empty */ 
 183   entropy
->put_buffer 
= 0; 
 184   entropy
->put_bits 
= 0; 
 186   /* Initialize restart stuff */ 
 187   entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 188   entropy
->next_restart_num 
= 0; 
 192 /* Outputting bytes to the file. 
 193  * NB: these must be called only when actually outputting, 
 194  * that is, entropy->gather_statistics == FALSE. 
 198 #define emit_byte(entropy,val)  \ 
 199         { *(entropy)->next_output_byte++ = (JOCTET) (val);  \ 
 200           if (--(entropy)->free_in_buffer == 0)  \ 
 201             dump_buffer(entropy); } 
 205 dump_buffer (phuff_entropy_ptr entropy
) 
 206 /* Empty the output buffer; we do not support suspension in this module. */ 
 208   struct jpeg_destination_mgr 
* dest 
= entropy
->cinfo
->dest
; 
 210   if (! (*dest
->empty_output_buffer
) (entropy
->cinfo
)) 
 211     ERREXIT(entropy
->cinfo
, JERR_CANT_SUSPEND
); 
 212   /* After a successful buffer dump, must reset buffer pointers */ 
 213   entropy
->next_output_byte 
= dest
->next_output_byte
; 
 214   entropy
->free_in_buffer 
= dest
->free_in_buffer
; 
 218 /* Outputting bits to the file */ 
 220 /* Only the right 24 bits of put_buffer are used; the valid bits are 
 221  * left-justified in this part.  At most 16 bits can be passed to emit_bits 
 222  * in one call, and we never retain more than 7 bits in put_buffer 
 223  * between calls, so 24 bits are sufficient. 
 228 emit_bits (phuff_entropy_ptr entropy
, unsigned int code
, int size
) 
 229 /* Emit some bits, unless we are in gather mode */ 
 231   /* This routine is heavily used, so it's worth coding tightly. */ 
 232   register INT32 put_buffer 
= (INT32
) code
; 
 233   register int put_bits 
= entropy
->put_bits
; 
 235   /* if size is 0, caller used an invalid Huffman table entry */ 
 237     ERREXIT(entropy
->cinfo
, JERR_HUFF_MISSING_CODE
); 
 239   if (entropy
->gather_statistics
) 
 240     return;                     /* do nothing if we're only getting stats */ 
 242   put_buffer 
&= (((INT32
) 1)<<size
) - 1; /* mask off any extra bits in code */ 
 244   put_bits 
+= size
;             /* new number of bits in buffer */ 
 246   put_buffer 
<<= 24 - put_bits
; /* align incoming bits */ 
 248   put_buffer 
|= entropy
->put_buffer
; /* and merge with old buffer contents */ 
 250   while (put_bits 
>= 8) { 
 251     int c 
= (int) ((put_buffer 
>> 16) & 0xFF); 
 253     emit_byte(entropy
, c
); 
 254     if (c 
== 0xFF) {            /* need to stuff a zero byte? */ 
 255       emit_byte(entropy
, 0); 
 261   entropy
->put_buffer 
= put_buffer
; /* update variables */ 
 262   entropy
->put_bits 
= put_bits
; 
 267 flush_bits (phuff_entropy_ptr entropy
) 
 269   emit_bits(entropy
, 0x7F, 7); /* fill any partial byte with ones */ 
 270   entropy
->put_buffer 
= 0;     /* and reset bit-buffer to empty */ 
 271   entropy
->put_bits 
= 0; 
 276  * Emit (or just count) a Huffman symbol. 
 281 emit_symbol (phuff_entropy_ptr entropy
, int tbl_no
, int symbol
) 
 283   if (entropy
->gather_statistics
) 
 284     entropy
->count_ptrs
[tbl_no
][symbol
]++; 
 286     c_derived_tbl 
* tbl 
= entropy
->derived_tbls
[tbl_no
]; 
 287     emit_bits(entropy
, tbl
->ehufco
[symbol
], tbl
->ehufsi
[symbol
]); 
 293  * Emit bits from a correction bit buffer. 
 297 emit_buffered_bits (phuff_entropy_ptr entropy
, char * bufstart
, 
 300   if (entropy
->gather_statistics
) 
 301     return;                     /* no real work */ 
 304     emit_bits(entropy
, (unsigned int) (*bufstart
), 1); 
 312  * Emit any pending EOBRUN symbol. 
 316 emit_eobrun (phuff_entropy_ptr entropy
) 
 318   register int temp
, nbits
; 
 320   if (entropy
->EOBRUN 
> 0) {    /* if there is any pending EOBRUN */ 
 321     temp 
= entropy
->EOBRUN
; 
 325     /* safety check: shouldn't happen given limited correction-bit buffer */ 
 327       ERREXIT(entropy
->cinfo
, JERR_HUFF_MISSING_CODE
); 
 329     emit_symbol(entropy
, entropy
->ac_tbl_no
, nbits 
<< 4); 
 331       emit_bits(entropy
, entropy
->EOBRUN
, nbits
); 
 335     /* Emit any buffered correction bits */ 
 336     emit_buffered_bits(entropy
, entropy
->bit_buffer
, entropy
->BE
); 
 343  * Emit a restart marker & resynchronize predictions. 
 347 emit_restart (phuff_entropy_ptr entropy
, int restart_num
) 
 351   emit_eobrun(entropy
); 
 353   if (! entropy
->gather_statistics
) { 
 355     emit_byte(entropy
, 0xFF); 
 356     emit_byte(entropy
, JPEG_RST0 
+ restart_num
); 
 359   if (entropy
->cinfo
->Ss 
== 0) { 
 360     /* Re-initialize DC predictions to 0 */ 
 361     for (ci 
= 0; ci 
< entropy
->cinfo
->comps_in_scan
; ci
++) 
 362       entropy
->last_dc_val
[ci
] = 0; 
 364     /* Re-initialize all AC-related fields to 0 */ 
 372  * MCU encoding for DC initial scan (either spectral selection, 
 373  * or first pass of successive approximation). 
 377 encode_mcu_DC_first (j_compress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 379   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 380   register int temp
, temp2
; 
 385   jpeg_component_info 
* compptr
; 
 388   entropy
->next_output_byte 
= cinfo
->dest
->next_output_byte
; 
 389   entropy
->free_in_buffer 
= cinfo
->dest
->free_in_buffer
; 
 391   /* Emit restart marker if needed */ 
 392   if (cinfo
->restart_interval
) 
 393     if (entropy
->restarts_to_go 
== 0) 
 394       emit_restart(entropy
, entropy
->next_restart_num
); 
 396   /* Encode the MCU data blocks */ 
 397   for (blkn 
= 0; blkn 
< cinfo
->blocks_in_MCU
; blkn
++) { 
 398     block 
= MCU_data
[blkn
]; 
 399     ci 
= cinfo
->MCU_membership
[blkn
]; 
 400     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 402     /* Compute the DC value after the required point transform by Al. 
 403      * This is simply an arithmetic right shift. 
 405     temp2 
= IRIGHT_SHIFT((int) ((*block
)[0]), Al
); 
 407     /* DC differences are figured on the point-transformed values. */ 
 408     temp 
= temp2 
- entropy
->last_dc_val
[ci
]; 
 409     entropy
->last_dc_val
[ci
] = temp2
; 
 411     /* Encode the DC coefficient difference per section G.1.2.1 */ 
 414       temp 
= -temp
;             /* temp is abs value of input */ 
 415       /* For a negative input, want temp2 = bitwise complement of abs(input) */ 
 416       /* This code assumes we are on a two's complement machine */ 
 420     /* Find the number of bits needed for the magnitude of the coefficient */ 
 426     /* Check for out-of-range coefficient values. 
 427      * Since we're encoding a difference, the range limit is twice as much. 
 429     if (nbits 
> MAX_COEF_BITS
+1) 
 430       ERREXIT(cinfo
, JERR_BAD_DCT_COEF
); 
 432     /* Count/emit the Huffman-coded symbol for the number of bits */ 
 433     emit_symbol(entropy
, compptr
->dc_tbl_no
, nbits
); 
 435     /* Emit that number of bits of the value, if positive, */ 
 436     /* or the complement of its magnitude, if negative. */ 
 437     if (nbits
)                  /* emit_bits rejects calls with size 0 */ 
 438       emit_bits(entropy
, (unsigned int) temp2
, nbits
); 
 441   cinfo
->dest
->next_output_byte 
= entropy
->next_output_byte
; 
 442   cinfo
->dest
->free_in_buffer 
= entropy
->free_in_buffer
; 
 444   /* Update restart-interval state too */ 
 445   if (cinfo
->restart_interval
) { 
 446     if (entropy
->restarts_to_go 
== 0) { 
 447       entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 448       entropy
->next_restart_num
++; 
 449       entropy
->next_restart_num 
&= 7; 
 451     entropy
->restarts_to_go
--; 
 459  * MCU encoding for AC initial scan (either spectral selection, 
 460  * or first pass of successive approximation). 
 464 encode_mcu_AC_first (j_compress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 466   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 467   register int temp
, temp2
; 
 474   entropy
->next_output_byte 
= cinfo
->dest
->next_output_byte
; 
 475   entropy
->free_in_buffer 
= cinfo
->dest
->free_in_buffer
; 
 477   /* Emit restart marker if needed */ 
 478   if (cinfo
->restart_interval
) 
 479     if (entropy
->restarts_to_go 
== 0) 
 480       emit_restart(entropy
, entropy
->next_restart_num
); 
 482   /* Encode the MCU data block */ 
 485   /* Encode the AC coefficients per section G.1.2.2, fig. G.3 */ 
 487   r 
= 0;                        /* r = run length of zeros */ 
 489   for (k 
= cinfo
->Ss
; k 
<= Se
; k
++) { 
 490     if ((temp 
= (*block
)[jpeg_natural_order
[k
]]) == 0) { 
 494     /* We must apply the point transform by Al.  For AC coefficients this 
 495      * is an integer division with rounding towards 0.  To do this portably 
 496      * in C, we shift after obtaining the absolute value; so the code is 
 497      * interwoven with finding the abs value (temp) and output bits (temp2). 
 500       temp 
= -temp
;             /* temp is abs value of input */ 
 501       temp 
>>= Al
;              /* apply the point transform */ 
 502       /* For a negative coef, want temp2 = bitwise complement of abs(coef) */ 
 505       temp 
>>= Al
;              /* apply the point transform */ 
 508     /* Watch out for case that nonzero coef is zero after point transform */ 
 514     /* Emit any pending EOBRUN */ 
 515     if (entropy
->EOBRUN 
> 0) 
 516       emit_eobrun(entropy
); 
 517     /* if run length > 15, must emit special run-length-16 codes (0xF0) */ 
 519       emit_symbol(entropy
, entropy
->ac_tbl_no
, 0xF0); 
 523     /* Find the number of bits needed for the magnitude of the coefficient */ 
 524     nbits 
= 1;                  /* there must be at least one 1 bit */ 
 527     /* Check for out-of-range coefficient values */ 
 528     if (nbits 
> MAX_COEF_BITS
) 
 529       ERREXIT(cinfo
, JERR_BAD_DCT_COEF
); 
 531     /* Count/emit Huffman symbol for run length / number of bits */ 
 532     emit_symbol(entropy
, entropy
->ac_tbl_no
, (r 
<< 4) + nbits
); 
 534     /* Emit that number of bits of the value, if positive, */ 
 535     /* or the complement of its magnitude, if negative. */ 
 536     emit_bits(entropy
, (unsigned int) temp2
, nbits
); 
 538     r 
= 0;                      /* reset zero run length */ 
 541   if (r 
> 0) {                  /* If there are trailing zeroes, */ 
 542     entropy
->EOBRUN
++;          /* count an EOB */ 
 543     if (entropy
->EOBRUN 
== 0x7FFF) 
 544       emit_eobrun(entropy
);     /* force it out to avoid overflow */ 
 547   cinfo
->dest
->next_output_byte 
= entropy
->next_output_byte
; 
 548   cinfo
->dest
->free_in_buffer 
= entropy
->free_in_buffer
; 
 550   /* Update restart-interval state too */ 
 551   if (cinfo
->restart_interval
) { 
 552     if (entropy
->restarts_to_go 
== 0) { 
 553       entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 554       entropy
->next_restart_num
++; 
 555       entropy
->next_restart_num 
&= 7; 
 557     entropy
->restarts_to_go
--; 
 565  * MCU encoding for DC successive approximation refinement scan. 
 566  * Note: we assume such scans can be multi-component, although the spec 
 567  * is not very clear on the point. 
 571 encode_mcu_DC_refine (j_compress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 573   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 579   entropy
->next_output_byte 
= cinfo
->dest
->next_output_byte
; 
 580   entropy
->free_in_buffer 
= cinfo
->dest
->free_in_buffer
; 
 582   /* Emit restart marker if needed */ 
 583   if (cinfo
->restart_interval
) 
 584     if (entropy
->restarts_to_go 
== 0) 
 585       emit_restart(entropy
, entropy
->next_restart_num
); 
 587   /* Encode the MCU data blocks */ 
 588   for (blkn 
= 0; blkn 
< cinfo
->blocks_in_MCU
; blkn
++) { 
 589     block 
= MCU_data
[blkn
]; 
 591     /* We simply emit the Al'th bit of the DC coefficient value. */ 
 593     emit_bits(entropy
, (unsigned int) (temp 
>> Al
), 1); 
 596   cinfo
->dest
->next_output_byte 
= entropy
->next_output_byte
; 
 597   cinfo
->dest
->free_in_buffer 
= entropy
->free_in_buffer
; 
 599   /* Update restart-interval state too */ 
 600   if (cinfo
->restart_interval
) { 
 601     if (entropy
->restarts_to_go 
== 0) { 
 602       entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 603       entropy
->next_restart_num
++; 
 604       entropy
->next_restart_num 
&= 7; 
 606     entropy
->restarts_to_go
--; 
 614  * MCU encoding for AC successive approximation refinement scan. 
 618 encode_mcu_AC_refine (j_compress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 620   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 629   int absvalues
[DCTSIZE2
]; 
 631   entropy
->next_output_byte 
= cinfo
->dest
->next_output_byte
; 
 632   entropy
->free_in_buffer 
= cinfo
->dest
->free_in_buffer
; 
 634   /* Emit restart marker if needed */ 
 635   if (cinfo
->restart_interval
) 
 636     if (entropy
->restarts_to_go 
== 0) 
 637       emit_restart(entropy
, entropy
->next_restart_num
); 
 639   /* Encode the MCU data block */ 
 642   /* It is convenient to make a pre-pass to determine the transformed 
 643    * coefficients' absolute values and the EOB position. 
 646   for (k 
= cinfo
->Ss
; k 
<= Se
; k
++) { 
 647     temp 
= (*block
)[jpeg_natural_order
[k
]]; 
 648     /* We must apply the point transform by Al.  For AC coefficients this 
 649      * is an integer division with rounding towards 0.  To do this portably 
 650      * in C, we shift after obtaining the absolute value. 
 653       temp 
= -temp
;             /* temp is abs value of input */ 
 654     temp 
>>= Al
;                /* apply the point transform */ 
 655     absvalues
[k
] = temp
;        /* save abs value for main pass */ 
 657       EOB 
= k
;                  /* EOB = index of last newly-nonzero coef */ 
 660   /* Encode the AC coefficients per section G.1.2.3, fig. G.7 */ 
 662   r 
= 0;                        /* r = run length of zeros */ 
 663   BR 
= 0;                       /* BR = count of buffered bits added now */ 
 664   BR_buffer 
= entropy
->bit_buffer 
+ entropy
->BE
; /* Append bits to buffer */ 
 666   for (k 
= cinfo
->Ss
; k 
<= Se
; k
++) { 
 667     if ((temp 
= absvalues
[k
]) == 0) { 
 672     /* Emit any required ZRLs, but not if they can be folded into EOB */ 
 673     while (r 
> 15 && k 
<= EOB
) { 
 674       /* emit any pending EOBRUN and the BE correction bits */ 
 675       emit_eobrun(entropy
); 
 677       emit_symbol(entropy
, entropy
->ac_tbl_no
, 0xF0); 
 679       /* Emit buffered correction bits that must be associated with ZRL */ 
 680       emit_buffered_bits(entropy
, BR_buffer
, BR
); 
 681       BR_buffer 
= entropy
->bit_buffer
; /* BE bits are gone now */ 
 685     /* If the coef was previously nonzero, it only needs a correction bit. 
 686      * NOTE: a straight translation of the spec's figure G.7 would suggest 
 687      * that we also need to test r > 15.  But if r > 15, we can only get here 
 688      * if k > EOB, which implies that this coefficient is not 1. 
 691       /* The correction bit is the next bit of the absolute value. */ 
 692       BR_buffer
[BR
++] = (char) (temp 
& 1); 
 696     /* Emit any pending EOBRUN and the BE correction bits */ 
 697     emit_eobrun(entropy
); 
 699     /* Count/emit Huffman symbol for run length / number of bits */ 
 700     emit_symbol(entropy
, entropy
->ac_tbl_no
, (r 
<< 4) + 1); 
 702     /* Emit output bit for newly-nonzero coef */ 
 703     temp 
= ((*block
)[jpeg_natural_order
[k
]] < 0) ? 0 : 1; 
 704     emit_bits(entropy
, (unsigned int) temp
, 1); 
 706     /* Emit buffered correction bits that must be associated with this code */ 
 707     emit_buffered_bits(entropy
, BR_buffer
, BR
); 
 708     BR_buffer 
= entropy
->bit_buffer
; /* BE bits are gone now */ 
 710     r 
= 0;                      /* reset zero run length */ 
 713   if (r 
> 0 || BR 
> 0) {        /* If there are trailing zeroes, */ 
 714     entropy
->EOBRUN
++;          /* count an EOB */ 
 715     entropy
->BE 
+= BR
;          /* concat my correction bits to older ones */ 
 716     /* We force out the EOB if we risk either: 
 717      * 1. overflow of the EOB counter; 
 718      * 2. overflow of the correction bit buffer during the next MCU. 
 720     if (entropy
->EOBRUN 
== 0x7FFF || entropy
->BE 
> (MAX_CORR_BITS
-DCTSIZE2
+1)) 
 721       emit_eobrun(entropy
); 
 724   cinfo
->dest
->next_output_byte 
= entropy
->next_output_byte
; 
 725   cinfo
->dest
->free_in_buffer 
= entropy
->free_in_buffer
; 
 727   /* Update restart-interval state too */ 
 728   if (cinfo
->restart_interval
) { 
 729     if (entropy
->restarts_to_go 
== 0) { 
 730       entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 731       entropy
->next_restart_num
++; 
 732       entropy
->next_restart_num 
&= 7; 
 734     entropy
->restarts_to_go
--; 
 742  * Finish up at the end of a Huffman-compressed progressive scan. 
 746 finish_pass_phuff (j_compress_ptr cinfo
) 
 748   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 750   entropy
->next_output_byte 
= cinfo
->dest
->next_output_byte
; 
 751   entropy
->free_in_buffer 
= cinfo
->dest
->free_in_buffer
; 
 753   /* Flush out any buffered data */ 
 754   emit_eobrun(entropy
); 
 757   cinfo
->dest
->next_output_byte 
= entropy
->next_output_byte
; 
 758   cinfo
->dest
->free_in_buffer 
= entropy
->free_in_buffer
; 
 763  * Finish up a statistics-gathering pass and create the new Huffman tables. 
 767 finish_pass_gather_phuff (j_compress_ptr cinfo
) 
 769   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 772   jpeg_component_info 
* compptr
; 
 774   boolean did
[NUM_HUFF_TBLS
]; 
 776   /* Flush out buffered data (all we care about is counting the EOB symbol) */ 
 777   emit_eobrun(entropy
); 
 779   is_DC_band 
= (cinfo
->Ss 
== 0); 
 781   /* It's important not to apply jpeg_gen_optimal_table more than once 
 782    * per table, because it clobbers the input frequency counts! 
 784   MEMZERO(did
, SIZEOF(did
)); 
 786   for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) { 
 787     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 789       if (cinfo
->Ah 
!= 0)       /* DC refinement needs no table */ 
 791       tbl 
= compptr
->dc_tbl_no
; 
 793       tbl 
= compptr
->ac_tbl_no
; 
 797         htblptr 
= & cinfo
->dc_huff_tbl_ptrs
[tbl
]; 
 799         htblptr 
= & cinfo
->ac_huff_tbl_ptrs
[tbl
]; 
 800       if (*htblptr 
== NULL
) 
 801         *htblptr 
= jpeg_alloc_huff_table((j_common_ptr
) cinfo
); 
 802       jpeg_gen_optimal_table(cinfo
, *htblptr
, entropy
->count_ptrs
[tbl
]); 
 810  * Module initialization routine for progressive Huffman entropy encoding. 
 814 jinit_phuff_encoder (j_compress_ptr cinfo
) 
 816   phuff_entropy_ptr entropy
; 
 819   entropy 
= (phuff_entropy_ptr
) 
 820     (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 821                                 SIZEOF(phuff_entropy_encoder
)); 
 822   cinfo
->entropy 
= (struct jpeg_entropy_encoder 
*) entropy
; 
 823   entropy
->pub
.start_pass 
= start_pass_phuff
; 
 825   /* Mark tables unallocated */ 
 826   for (i 
= 0; i 
< NUM_HUFF_TBLS
; i
++) { 
 827     entropy
->derived_tbls
[i
] = NULL
; 
 828     entropy
->count_ptrs
[i
] = NULL
; 
 830   entropy
->bit_buffer 
= NULL
;   /* needed only in AC refinement scan */ 
 833 #endif /* C_PROGRESSIVE_SUPPORTED */