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 decoding routines for progressive JPEG. 
  10  * Much of the complexity here has to do with supporting input suspension. 
  11  * If the data source module demands suspension, we want to be able to back 
  12  * up to the start of the current MCU.  To do this, we copy state variables 
  13  * into local working storage, and update them back to the permanent 
  14  * storage only upon successful completion of an MCU. 
  17 #define JPEG_INTERNALS 
  20 #include "jdhuff.h"             /* Declarations shared with jdhuff.c */ 
  23 #ifdef D_PROGRESSIVE_SUPPORTED 
  26  * Expanded entropy decoder object for progressive Huffman decoding. 
  28  * The savable_state subrecord contains fields that change within an MCU, 
  29  * but must not be updated permanently until we complete the MCU. 
  33   unsigned int EOBRUN
;                  /* remaining EOBs in EOBRUN */ 
  34   int last_dc_val
[MAX_COMPS_IN_SCAN
];   /* last DC coef for each component */ 
  37 /* This macro is to work around compilers with missing or broken 
  38  * structure assignment.  You'll need to fix this code if you have 
  39  * such a compiler and you change MAX_COMPS_IN_SCAN. 
  42 #ifndef NO_STRUCT_ASSIGN 
  43 #define ASSIGN_STATE(dest,src)  ((dest) = (src)) 
  45 #if MAX_COMPS_IN_SCAN == 4 
  46 #define ASSIGN_STATE(dest,src)  \ 
  47         ((dest).EOBRUN = (src).EOBRUN, \ 
  48          (dest).last_dc_val[0] = (src).last_dc_val[0], \ 
  49          (dest).last_dc_val[1] = (src).last_dc_val[1], \ 
  50          (dest).last_dc_val[2] = (src).last_dc_val[2], \ 
  51          (dest).last_dc_val[3] = (src).last_dc_val[3]) 
  57   struct jpeg_entropy_decoder pub
; /* public fields */ 
  59   /* These fields are loaded into local variables at start of each MCU. 
  60    * In case of suspension, we exit WITHOUT updating them. 
  62   bitread_perm_state bitstate
;  /* Bit buffer at start of MCU */ 
  63   savable_state saved
;          /* Other state at start of MCU */ 
  65   /* These fields are NOT loaded into local working state. */ 
  66   unsigned int restarts_to_go
;  /* MCUs left in this restart interval */ 
  68   /* Pointers to derived tables (these workspaces have image lifespan) */ 
  69   d_derived_tbl 
* derived_tbls
[NUM_HUFF_TBLS
]; 
  71   d_derived_tbl 
* ac_derived_tbl
; /* active table during an AC scan */ 
  72 } phuff_entropy_decoder
; 
  74 typedef phuff_entropy_decoder 
* phuff_entropy_ptr
; 
  76 /* Forward declarations */ 
  77 METHODDEF(boolean
) decode_mcu_DC_first 
JPP((j_decompress_ptr cinfo
, 
  78                                             JBLOCKROW 
*MCU_data
)); 
  79 METHODDEF(boolean
) decode_mcu_AC_first 
JPP((j_decompress_ptr cinfo
, 
  80                                             JBLOCKROW 
*MCU_data
)); 
  81 METHODDEF(boolean
) decode_mcu_DC_refine 
JPP((j_decompress_ptr cinfo
, 
  82                                              JBLOCKROW 
*MCU_data
)); 
  83 METHODDEF(boolean
) decode_mcu_AC_refine 
JPP((j_decompress_ptr cinfo
, 
  84                                              JBLOCKROW 
*MCU_data
)); 
  88  * Initialize for a Huffman-compressed scan. 
  92 start_pass_phuff_decoder (j_decompress_ptr cinfo
) 
  94   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
  95   boolean is_DC_band
, bad
; 
  98   jpeg_component_info 
* compptr
; 
 100   is_DC_band 
= (cinfo
->Ss 
== 0); 
 102   /* Validate scan parameters */ 
 108     /* need not check Ss/Se < 0 since they came from unsigned bytes */ 
 109     if (cinfo
->Ss 
> cinfo
->Se 
|| cinfo
->Se 
>= DCTSIZE2
) 
 111     /* AC scans may have only one component */ 
 112     if (cinfo
->comps_in_scan 
!= 1) 
 115   if (cinfo
->Ah 
!= 0) { 
 116     /* Successive approximation refinement scan: must have Al = Ah-1. */ 
 117     if (cinfo
->Al 
!= cinfo
->Ah
-1) 
 120   if (cinfo
->Al 
> 13)           /* need not check for < 0 */ 
 122   /* Arguably the maximum Al value should be less than 13 for 8-bit precision, 
 123    * but the spec doesn't say so, and we try to be liberal about what we 
 124    * accept.  Note: large Al values could result in out-of-range DC 
 125    * coefficients during early scans, leading to bizarre displays due to 
 126    * overflows in the IDCT math.  But we won't crash. 
 129     ERREXIT4(cinfo
, JERR_BAD_PROGRESSION
, 
 130              cinfo
->Ss
, cinfo
->Se
, cinfo
->Ah
, cinfo
->Al
); 
 131   /* Update progression status, and verify that scan order is legal. 
 132    * Note that inter-scan inconsistencies are treated as warnings 
 133    * not fatal errors ... not clear if this is right way to behave. 
 135   for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) { 
 136     int cindex 
= cinfo
->cur_comp_info
[ci
]->component_index
; 
 137     coef_bit_ptr 
= & cinfo
->coef_bits
[cindex
][0]; 
 138     if (!is_DC_band 
&& coef_bit_ptr
[0] < 0) /* AC without prior DC scan */ 
 139       WARNMS2(cinfo
, JWRN_BOGUS_PROGRESSION
, cindex
, 0); 
 140     for (coefi 
= cinfo
->Ss
; coefi 
<= cinfo
->Se
; coefi
++) { 
 141       int expected 
= (coef_bit_ptr
[coefi
] < 0) ? 0 : coef_bit_ptr
[coefi
]; 
 142       if (cinfo
->Ah 
!= expected
) 
 143         WARNMS2(cinfo
, JWRN_BOGUS_PROGRESSION
, cindex
, coefi
); 
 144       coef_bit_ptr
[coefi
] = cinfo
->Al
; 
 148   /* Select MCU decoding routine */ 
 149   if (cinfo
->Ah 
== 0) { 
 151       entropy
->pub
.decode_mcu 
= decode_mcu_DC_first
; 
 153       entropy
->pub
.decode_mcu 
= decode_mcu_AC_first
; 
 156       entropy
->pub
.decode_mcu 
= decode_mcu_DC_refine
; 
 158       entropy
->pub
.decode_mcu 
= decode_mcu_AC_refine
; 
 161   for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) { 
 162     compptr 
= cinfo
->cur_comp_info
[ci
]; 
 163     /* Make sure requested tables are present, and compute derived tables. 
 164      * We may build same derived table more than once, but it's not expensive. 
 167       if (cinfo
->Ah 
== 0) {     /* DC refinement needs no table */ 
 168         tbl 
= compptr
->dc_tbl_no
; 
 169         jpeg_make_d_derived_tbl(cinfo
, TRUE
, tbl
, 
 170                                 & entropy
->derived_tbls
[tbl
]); 
 173       tbl 
= compptr
->ac_tbl_no
; 
 174       jpeg_make_d_derived_tbl(cinfo
, FALSE
, tbl
, 
 175                               & entropy
->derived_tbls
[tbl
]); 
 176       /* remember the single active table */ 
 177       entropy
->ac_derived_tbl 
= entropy
->derived_tbls
[tbl
]; 
 179     /* Initialize DC predictions to 0 */ 
 180     entropy
->saved
.last_dc_val
[ci
] = 0; 
 183   /* Initialize bitread state variables */ 
 184   entropy
->bitstate
.bits_left 
= 0; 
 185   entropy
->bitstate
.get_buffer 
= 0; /* unnecessary, but keeps Purify quiet */ 
 186   entropy
->pub
.insufficient_data 
= FALSE
; 
 188   /* Initialize private state variables */ 
 189   entropy
->saved
.EOBRUN 
= 0; 
 191   /* Initialize restart counter */ 
 192   entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 197  * Figure F.12: extend sign bit. 
 198  * On some machines, a shift and add will be faster than a table lookup. 
 203 #define HUFF_EXTEND(x,s)  ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x)) 
 207 #define HUFF_EXTEND(x,s)  ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) 
 209 static const int extend_test
[16] =   /* entry n is 2**(n-1) */ 
 210   { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 
 211     0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 }; 
 213 static const int extend_offset
[16] = /* entry n is (-1 << n) + 1 */ 
 214   { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, 
 215     ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, 
 216     ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, 
 217     ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 }; 
 219 #endif /* AVOID_TABLES */ 
 223  * Check for a restart marker & resynchronize decoder. 
 224  * Returns FALSE if must suspend. 
 228 process_restart (j_decompress_ptr cinfo
) 
 230   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 233   /* Throw away any unused bits remaining in bit buffer; */ 
 234   /* include any full bytes in next_marker's count of discarded bytes */ 
 235   cinfo
->marker
->discarded_bytes 
+= entropy
->bitstate
.bits_left 
/ 8; 
 236   entropy
->bitstate
.bits_left 
= 0; 
 238   /* Advance past the RSTn marker */ 
 239   if (! (*cinfo
->marker
->read_restart_marker
) (cinfo
)) 
 242   /* Re-initialize DC predictions to 0 */ 
 243   for (ci 
= 0; ci 
< cinfo
->comps_in_scan
; ci
++) 
 244     entropy
->saved
.last_dc_val
[ci
] = 0; 
 245   /* Re-init EOB run count, too */ 
 246   entropy
->saved
.EOBRUN 
= 0; 
 248   /* Reset restart counter */ 
 249   entropy
->restarts_to_go 
= cinfo
->restart_interval
; 
 251   /* Reset out-of-data flag, unless read_restart_marker left us smack up 
 252    * against a marker.  In that case we will end up treating the next data 
 253    * segment as empty, and we can avoid producing bogus output pixels by 
 254    * leaving the flag set. 
 256   if (cinfo
->unread_marker 
== 0) 
 257     entropy
->pub
.insufficient_data 
= FALSE
; 
 264  * Huffman MCU decoding. 
 265  * Each of these routines decodes and returns one MCU's worth of 
 266  * Huffman-compressed coefficients.  
 267  * The coefficients are reordered from zigzag order into natural array order, 
 268  * but are not dequantized. 
 270  * The i'th block of the MCU is stored into the block pointed to by 
 271  * MCU_data[i].  WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER. 
 273  * We return FALSE if data source requested suspension.  In that case no 
 274  * changes have been made to permanent state.  (Exception: some output 
 275  * coefficients may already have been assigned.  This is harmless for 
 276  * spectral selection, since we'll just re-assign them on the next call. 
 277  * Successive approximation AC refinement has to be more careful, however.) 
 281  * MCU decoding for DC initial scan (either spectral selection, 
 282  * or first pass of successive approximation). 
 286 decode_mcu_DC_first (j_decompress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 288   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 296   jpeg_component_info 
* compptr
; 
 298   /* Process restart marker if needed; may have to suspend */ 
 299   if (cinfo
->restart_interval
) { 
 300     if (entropy
->restarts_to_go 
== 0) 
 301       if (! process_restart(cinfo
)) 
 305   /* If we've run out of data, just leave the MCU set to zeroes. 
 306    * This way, we return uniform gray for the remainder of the segment. 
 308   if (! entropy
->pub
.insufficient_data
) { 
 310     /* Load up working state */ 
 311     BITREAD_LOAD_STATE(cinfo
,entropy
->bitstate
); 
 312     ASSIGN_STATE(state
, entropy
->saved
); 
 314     /* Outer loop handles each block in the MCU */ 
 316     for (blkn 
= 0; blkn 
< cinfo
->blocks_in_MCU
; blkn
++) { 
 317       block 
= MCU_data
[blkn
]; 
 318       ci 
= cinfo
->MCU_membership
[blkn
]; 
 319       compptr 
= cinfo
->cur_comp_info
[ci
]; 
 320       tbl 
= entropy
->derived_tbls
[compptr
->dc_tbl_no
]; 
 322       /* Decode a single block's worth of coefficients */ 
 324       /* Section F.2.2.1: decode the DC coefficient difference */ 
 325       HUFF_DECODE(s
, br_state
, tbl
, return FALSE
, label1
); 
 327         CHECK_BIT_BUFFER(br_state
, s
, return FALSE
); 
 329         s 
= HUFF_EXTEND(r
, s
); 
 332       /* Convert DC difference to actual value, update last_dc_val */ 
 333       s 
+= state
.last_dc_val
[ci
]; 
 334       state
.last_dc_val
[ci
] = s
; 
 335       /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */ 
 336       (*block
)[0] = (JCOEF
) (s 
<< Al
); 
 339     /* Completed MCU, so update state */ 
 340     BITREAD_SAVE_STATE(cinfo
,entropy
->bitstate
); 
 341     ASSIGN_STATE(entropy
->saved
, state
); 
 344   /* Account for restart interval (no-op if not using restarts) */ 
 345   entropy
->restarts_to_go
--; 
 352  * MCU decoding for AC initial scan (either spectral selection, 
 353  * or first pass of successive approximation). 
 357 decode_mcu_AC_first (j_decompress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 359   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 362   register int s
, k
, r
; 
 368   /* Process restart marker if needed; may have to suspend */ 
 369   if (cinfo
->restart_interval
) { 
 370     if (entropy
->restarts_to_go 
== 0) 
 371       if (! process_restart(cinfo
)) 
 375   /* If we've run out of data, just leave the MCU set to zeroes. 
 376    * This way, we return uniform gray for the remainder of the segment. 
 378   if (! entropy
->pub
.insufficient_data
) { 
 380     /* Load up working state. 
 381      * We can avoid loading/saving bitread state if in an EOB run. 
 383     EOBRUN 
= entropy
->saved
.EOBRUN
;     /* only part of saved state we need */ 
 385     /* There is always only one block per MCU */ 
 387     if (EOBRUN 
> 0)             /* if it's a band of zeroes... */ 
 388       EOBRUN
--;                 /* ...process it now (we do nothing) */ 
 390       BITREAD_LOAD_STATE(cinfo
,entropy
->bitstate
); 
 392       tbl 
= entropy
->ac_derived_tbl
; 
 394       for (k 
= cinfo
->Ss
; k 
<= Se
; k
++) { 
 395         HUFF_DECODE(s
, br_state
, tbl
, return FALSE
, label2
); 
 400           CHECK_BIT_BUFFER(br_state
, s
, return FALSE
); 
 402           s 
= HUFF_EXTEND(r
, s
); 
 403           /* Scale and output coefficient in natural (dezigzagged) order */ 
 404           (*block
)[jpeg_natural_order
[k
]] = (JCOEF
) (s 
<< Al
); 
 406           if (r 
== 15) {        /* ZRL */ 
 407             k 
+= 15;            /* skip 15 zeroes in band */ 
 408           } else {              /* EOBr, run length is 2^r + appended bits */ 
 410             if (r
) {            /* EOBr, r > 0 */ 
 411               CHECK_BIT_BUFFER(br_state
, r
, return FALSE
); 
 415             EOBRUN
--;           /* this band is processed at this moment */ 
 416             break;              /* force end-of-band */ 
 421       BITREAD_SAVE_STATE(cinfo
,entropy
->bitstate
); 
 424     /* Completed MCU, so update state */ 
 425     entropy
->saved
.EOBRUN 
= EOBRUN
;     /* only part of saved state we need */ 
 428   /* Account for restart interval (no-op if not using restarts) */ 
 429   entropy
->restarts_to_go
--; 
 436  * MCU decoding for DC successive approximation refinement scan. 
 437  * Note: we assume such scans can be multi-component, although the spec 
 438  * is not very clear on the point. 
 442 decode_mcu_DC_refine (j_decompress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 444   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 445   int p1 
= 1 << cinfo
->Al
;      /* 1 in the bit position being coded */ 
 450   /* Process restart marker if needed; may have to suspend */ 
 451   if (cinfo
->restart_interval
) { 
 452     if (entropy
->restarts_to_go 
== 0) 
 453       if (! process_restart(cinfo
)) 
 457   /* Not worth the cycles to check insufficient_data here, 
 458    * since we will not change the data anyway if we read zeroes. 
 461   /* Load up working state */ 
 462   BITREAD_LOAD_STATE(cinfo
,entropy
->bitstate
); 
 464   /* Outer loop handles each block in the MCU */ 
 466   for (blkn 
= 0; blkn 
< cinfo
->blocks_in_MCU
; blkn
++) { 
 467     block 
= MCU_data
[blkn
]; 
 469     /* Encoded data is simply the next bit of the two's-complement DC value */ 
 470     CHECK_BIT_BUFFER(br_state
, 1, return FALSE
); 
 473     /* Note: since we use |=, repeating the assignment later is safe */ 
 476   /* Completed MCU, so update state */ 
 477   BITREAD_SAVE_STATE(cinfo
,entropy
->bitstate
); 
 479   /* Account for restart interval (no-op if not using restarts) */ 
 480   entropy
->restarts_to_go
--; 
 487  * MCU decoding for AC successive approximation refinement scan. 
 491 decode_mcu_AC_refine (j_decompress_ptr cinfo
, JBLOCKROW 
*MCU_data
) 
 493   phuff_entropy_ptr entropy 
= (phuff_entropy_ptr
) cinfo
->entropy
; 
 495   int p1 
= 1 << cinfo
->Al
;      /* 1 in the bit position being coded */ 
 496   int m1 
= (-1) << cinfo
->Al
;   /* -1 in the bit position being coded */ 
 497   register int s
, k
, r
; 
 504   int newnz_pos
[DCTSIZE2
]; 
 506   /* Process restart marker if needed; may have to suspend */ 
 507   if (cinfo
->restart_interval
) { 
 508     if (entropy
->restarts_to_go 
== 0) 
 509       if (! process_restart(cinfo
)) 
 513   /* If we've run out of data, don't modify the MCU. 
 515   if (! entropy
->pub
.insufficient_data
) { 
 517     /* Load up working state */ 
 518     BITREAD_LOAD_STATE(cinfo
,entropy
->bitstate
); 
 519     EOBRUN 
= entropy
->saved
.EOBRUN
; /* only part of saved state we need */ 
 521     /* There is always only one block per MCU */ 
 523     tbl 
= entropy
->ac_derived_tbl
; 
 525     /* If we are forced to suspend, we must undo the assignments to any newly 
 526      * nonzero coefficients in the block, because otherwise we'd get confused 
 527      * next time about which coefficients were already nonzero. 
 528      * But we need not undo addition of bits to already-nonzero coefficients; 
 529      * instead, we can test the current bit to see if we already did it. 
 533     /* initialize coefficient loop counter to start of band */ 
 537       for (; k 
<= Se
; k
++) { 
 538         HUFF_DECODE(s
, br_state
, tbl
, goto undoit
, label3
); 
 542           if (s 
!= 1)           /* size of new coef should always be 1 */ 
 543             WARNMS(cinfo
, JWRN_HUFF_BAD_CODE
); 
 544           CHECK_BIT_BUFFER(br_state
, 1, goto undoit
); 
 546             s 
= p1
;             /* newly nonzero coef is positive */ 
 548             s 
= m1
;             /* newly nonzero coef is negative */ 
 551             EOBRUN 
= 1 << r
;    /* EOBr, run length is 2^r + appended bits */ 
 553               CHECK_BIT_BUFFER(br_state
, r
, goto undoit
); 
 557             break;              /* rest of block is handled by EOB logic */ 
 559           /* note s = 0 for processing ZRL */ 
 561         /* Advance over already-nonzero coefs and r still-zero coefs, 
 562          * appending correction bits to the nonzeroes.  A correction bit is 1 
 563          * if the absolute value of the coefficient must be increased. 
 566           thiscoef 
= *block 
+ jpeg_natural_order
[k
]; 
 567           if (*thiscoef 
!= 0) { 
 568             CHECK_BIT_BUFFER(br_state
, 1, goto undoit
); 
 570               if ((*thiscoef 
& p1
) == 0) { /* do nothing if already set it */ 
 579               break;            /* reached target zero coefficient */ 
 584           int pos 
= jpeg_natural_order
[k
]; 
 585           /* Output newly nonzero coefficient */ 
 586           (*block
)[pos
] = (JCOEF
) s
; 
 587           /* Remember its position in case we have to suspend */ 
 588           newnz_pos
[num_newnz
++] = pos
; 
 594       /* Scan any remaining coefficient positions after the end-of-band 
 595        * (the last newly nonzero coefficient, if any).  Append a correction 
 596        * bit to each already-nonzero coefficient.  A correction bit is 1 
 597        * if the absolute value of the coefficient must be increased. 
 599       for (; k 
<= Se
; k
++) { 
 600         thiscoef 
= *block 
+ jpeg_natural_order
[k
]; 
 601         if (*thiscoef 
!= 0) { 
 602           CHECK_BIT_BUFFER(br_state
, 1, goto undoit
); 
 604             if ((*thiscoef 
& p1
) == 0) { /* do nothing if already changed it */ 
 613       /* Count one block completed in EOB run */ 
 617     /* Completed MCU, so update state */ 
 618     BITREAD_SAVE_STATE(cinfo
,entropy
->bitstate
); 
 619     entropy
->saved
.EOBRUN 
= EOBRUN
; /* only part of saved state we need */ 
 622   /* Account for restart interval (no-op if not using restarts) */ 
 623   entropy
->restarts_to_go
--; 
 628   /* Re-zero any output coefficients that we made newly nonzero */ 
 629   while (num_newnz 
> 0) 
 630     (*block
)[newnz_pos
[--num_newnz
]] = 0; 
 637  * Module initialization routine for progressive Huffman entropy decoding. 
 641 jinit_phuff_decoder (j_decompress_ptr cinfo
) 
 643   phuff_entropy_ptr entropy
; 
 647   entropy 
= (phuff_entropy_ptr
) 
 648     (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 649                                 SIZEOF(phuff_entropy_decoder
)); 
 650   cinfo
->entropy 
= (struct jpeg_entropy_decoder 
*) entropy
; 
 651   entropy
->pub
.start_pass 
= start_pass_phuff_decoder
; 
 653   /* Mark derived tables unallocated */ 
 654   for (i 
= 0; i 
< NUM_HUFF_TBLS
; i
++) { 
 655     entropy
->derived_tbls
[i
] = NULL
; 
 658   /* Create progression status table */ 
 659   cinfo
->coef_bits 
= (int (*)[DCTSIZE2
]) 
 660     (*cinfo
->mem
->alloc_small
) ((j_common_ptr
) cinfo
, JPOOL_IMAGE
, 
 661                                 cinfo
->num_components
*DCTSIZE2
*SIZEOF(int)); 
 662   coef_bit_ptr 
= & cinfo
->coef_bits
[0][0]; 
 663   for (ci 
= 0; ci 
< cinfo
->num_components
; ci
++)  
 664     for (i 
= 0; i 
< DCTSIZE2
; i
++) 
 665       *coef_bit_ptr
++ = -1; 
 668 #endif /* D_PROGRESSIVE_SUPPORTED */