/src/libjpeg-turbo.main/jdhuff.h
Line  | Count  | Source (jump to first uncovered line)  | 
1  |  | /*  | 
2  |  |  * jdhuff.h  | 
3  |  |  *  | 
4  |  |  * This file was part of the Independent JPEG Group's software:  | 
5  |  |  * Copyright (C) 1991-1997, Thomas G. Lane.  | 
6  |  |  * libjpeg-turbo Modifications:  | 
7  |  |  * Copyright (C) 2010-2011, 2015-2016, 2021, D. R. Commander.  | 
8  |  |  * Copyright (C) 2018, Matthias Räncker.  | 
9  |  |  * For conditions of distribution and use, see the accompanying README.ijg  | 
10  |  |  * file.  | 
11  |  |  *  | 
12  |  |  * This file contains declarations for Huffman entropy decoding routines  | 
13  |  |  * that are shared between the sequential decoder (jdhuff.c) and the  | 
14  |  |  * progressive decoder (jdphuff.c).  No other modules need to see these.  | 
15  |  |  */  | 
16  |  |  | 
17  |  | #include "jconfigint.h"  | 
18  |  |  | 
19  |  |  | 
20  |  | /* Derived data constructed for each Huffman table */  | 
21  |  |  | 
22  | 282M  | #define HUFF_LOOKAHEAD  8       /* # of bits of lookahead */  | 
23  |  |  | 
24  |  | typedef struct { | 
25  |  |   /* Basic tables: (element [0] of each array is unused) */  | 
26  |  |   JLONG maxcode[18];            /* largest code of length k (-1 if none) */  | 
27  |  |   /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */  | 
28  |  |   JLONG valoffset[18];          /* huffval[] offset for codes of length k */  | 
29  |  |   /* valoffset[k] = huffval[] index of 1st symbol of code length k, less  | 
30  |  |    * the smallest code of length k; so given a code of length k, the  | 
31  |  |    * corresponding symbol is huffval[code + valoffset[k]]  | 
32  |  |    */  | 
33  |  |  | 
34  |  |   /* Link to public Huffman table (needed only in jpeg_huff_decode) */  | 
35  |  |   JHUFF_TBL *pub;  | 
36  |  |  | 
37  |  |   /* Lookahead table: indexed by the next HUFF_LOOKAHEAD bits of  | 
38  |  |    * the input data stream.  If the next Huffman code is no more  | 
39  |  |    * than HUFF_LOOKAHEAD bits long, we can obtain its length and  | 
40  |  |    * the corresponding symbol directly from this tables.  | 
41  |  |    *  | 
42  |  |    * The lower 8 bits of each table entry contain the number of  | 
43  |  |    * bits in the corresponding Huffman code, or HUFF_LOOKAHEAD + 1  | 
44  |  |    * if too long.  The next 8 bits of each entry contain the  | 
45  |  |    * symbol.  | 
46  |  |    */  | 
47  |  |   int lookup[1 << HUFF_LOOKAHEAD];  | 
48  |  | } d_derived_tbl;  | 
49  |  |  | 
50  |  | /* Expand a Huffman table definition into the derived format */  | 
51  |  | EXTERN(void) jpeg_make_d_derived_tbl(j_decompress_ptr cinfo, boolean isDC,  | 
52  |  |                                      int tblno, d_derived_tbl **pdtbl);  | 
53  |  |  | 
54  |  |  | 
55  |  | /*  | 
56  |  |  * Fetching the next N bits from the input stream is a time-critical operation  | 
57  |  |  * for the Huffman decoders.  We implement it with a combination of inline  | 
58  |  |  * macros and out-of-line subroutines.  Note that N (the number of bits  | 
59  |  |  * demanded at one time) never exceeds 15 for JPEG use.  | 
60  |  |  *  | 
61  |  |  * We read source bytes into get_buffer and dole out bits as needed.  | 
62  |  |  * If get_buffer already contains enough bits, they are fetched in-line  | 
63  |  |  * by the macros CHECK_BIT_BUFFER and GET_BITS.  When there aren't enough  | 
64  |  |  * bits, jpeg_fill_bit_buffer is called; it will attempt to fill get_buffer  | 
65  |  |  * as full as possible (not just to the number of bits needed; this  | 
66  |  |  * prefetching reduces the overhead cost of calling jpeg_fill_bit_buffer).  | 
67  |  |  * Note that jpeg_fill_bit_buffer may return FALSE to indicate suspension.  | 
68  |  |  * On TRUE return, jpeg_fill_bit_buffer guarantees that get_buffer contains  | 
69  |  |  * at least the requested number of bits --- dummy zeroes are inserted if  | 
70  |  |  * necessary.  | 
71  |  |  */  | 
72  |  |  | 
73  |  | #if !defined(_WIN32) && !defined(SIZEOF_SIZE_T)  | 
74  |  | #error Cannot determine word size  | 
75  |  | #endif  | 
76  |  |  | 
77  |  | #if SIZEOF_SIZE_T == 8 || defined(_WIN64)  | 
78  |  |  | 
79  |  | typedef size_t bit_buf_type;            /* type of bit-extraction buffer */  | 
80  | 6.60M  | #define BIT_BUF_SIZE  64                /* size of buffer in bits */  | 
81  |  |  | 
82  |  | #elif defined(__x86_64__) && defined(__ILP32__)  | 
83  |  |  | 
84  |  | typedef unsigned long long bit_buf_type; /* type of bit-extraction buffer */  | 
85  |  | #define BIT_BUF_SIZE  64                 /* size of buffer in bits */  | 
86  |  |  | 
87  |  | #else  | 
88  |  |  | 
89  |  | typedef unsigned long bit_buf_type;     /* type of bit-extraction buffer */  | 
90  |  | #define BIT_BUF_SIZE  32                /* size of buffer in bits */  | 
91  |  |  | 
92  |  | #endif  | 
93  |  |  | 
94  |  | /* If long is > 32 bits on your machine, and shifting/masking longs is  | 
95  |  |  * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE  | 
96  |  |  * appropriately should be a win.  Unfortunately we can't define the size  | 
97  |  |  * with something like  #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8)  | 
98  |  |  * because not all machines measure sizeof in 8-bit bytes.  | 
99  |  |  */  | 
100  |  |  | 
101  |  | typedef struct {                /* Bitreading state saved across MCUs */ | 
102  |  |   bit_buf_type get_buffer;      /* current bit-extraction buffer */  | 
103  |  |   int bits_left;                /* # of unused bits in it */  | 
104  |  | } bitread_perm_state;  | 
105  |  |  | 
106  |  | typedef struct {                /* Bitreading working state within an MCU */ | 
107  |  |   /* Current data source location */  | 
108  |  |   /* We need a copy, rather than munging the original, in case of suspension */  | 
109  |  |   const JOCTET *next_input_byte; /* => next byte to read from source */  | 
110  |  |   size_t bytes_in_buffer;       /* # of bytes remaining in source buffer */  | 
111  |  |   /* Bit input buffer --- note these values are kept in register variables,  | 
112  |  |    * not in this struct, inside the inner loops.  | 
113  |  |    */  | 
114  |  |   bit_buf_type get_buffer;      /* current bit-extraction buffer */  | 
115  |  |   int bits_left;                /* # of unused bits in it */  | 
116  |  |   /* Pointer needed by jpeg_fill_bit_buffer. */  | 
117  |  |   j_decompress_ptr cinfo;       /* back link to decompress master record */  | 
118  |  | } bitread_working_state;  | 
119  |  |  | 
120  |  | /* Macros to declare and load/save bitread local variables. */  | 
121  |  | #define BITREAD_STATE_VARS \  | 
122  | 7.44M  |   register bit_buf_type get_buffer; \  | 
123  | 7.44M  |   register int bits_left; \  | 
124  | 7.44M  |   bitread_working_state br_state  | 
125  |  |  | 
126  |  | #define BITREAD_LOAD_STATE(cinfop, permstate) \  | 
127  | 2.65M  |   br_state.cinfo = cinfop; \  | 
128  | 2.65M  |   br_state.next_input_byte = cinfop->src->next_input_byte; \  | 
129  | 2.65M  |   br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \  | 
130  | 2.65M  |   get_buffer = permstate.get_buffer; \  | 
131  | 2.65M  |   bits_left = permstate.bits_left;  | 
132  |  |  | 
133  |  | #define BITREAD_SAVE_STATE(cinfop, permstate) \  | 
134  | 2.60M  |   cinfop->src->next_input_byte = br_state.next_input_byte; \  | 
135  | 2.60M  |   cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \  | 
136  | 2.60M  |   permstate.get_buffer = get_buffer; \  | 
137  | 2.60M  |   permstate.bits_left = bits_left  | 
138  |  |  | 
139  |  | /*  | 
140  |  |  * These macros provide the in-line portion of bit fetching.  | 
141  |  |  * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer  | 
142  |  |  * before using GET_BITS, PEEK_BITS, or DROP_BITS.  | 
143  |  |  * The variables get_buffer and bits_left are assumed to be locals,  | 
144  |  |  * but the state struct might not be (jpeg_huff_decode needs this).  | 
145  |  |  *      CHECK_BIT_BUFFER(state, n, action);  | 
146  |  |  *              Ensure there are N bits in get_buffer; if suspend, take action.  | 
147  |  |  *      val = GET_BITS(n);  | 
148  |  |  *              Fetch next N bits.  | 
149  |  |  *      val = PEEK_BITS(n);  | 
150  |  |  *              Fetch next N bits without removing them from the buffer.  | 
151  |  |  *      DROP_BITS(n);  | 
152  |  |  *              Discard next N bits.  | 
153  |  |  * The value N should be a simple variable, not an expression, because it  | 
154  |  |  * is evaluated multiple times.  | 
155  |  |  */  | 
156  |  |  | 
157  | 28.5M  | #define CHECK_BIT_BUFFER(state, nbits, action) { \ | 
158  | 28.5M  |   if (bits_left < (nbits)) { \ | 
159  | 949k  |     if (!jpeg_fill_bit_buffer(&(state), get_buffer, bits_left, nbits)) \  | 
160  | 949k  |       { action; } \ | 
161  | 949k  |     get_buffer = (state).get_buffer;  bits_left = (state).bits_left; \  | 
162  | 949k  |   } \  | 
163  | 28.5M  | }  | 
164  |  |  | 
165  |  | #define GET_BITS(nbits) \  | 
166  | 29.7M  |   (((int)(get_buffer >> (bits_left -= (nbits)))) & ((1 << (nbits)) - 1))  | 
167  |  |  | 
168  |  | #define PEEK_BITS(nbits) \  | 
169  | 13.4M  |   (((int)(get_buffer >> (bits_left -  (nbits)))) & ((1 << (nbits)) - 1))  | 
170  |  |  | 
171  |  | #define DROP_BITS(nbits) \  | 
172  | 16.2M  |   (bits_left -= (nbits))  | 
173  |  |  | 
174  |  | /* Load up the bit buffer to a depth of at least nbits */  | 
175  |  | EXTERN(boolean) jpeg_fill_bit_buffer(bitread_working_state *state,  | 
176  |  |                                      register bit_buf_type get_buffer,  | 
177  |  |                                      register int bits_left, int nbits);  | 
178  |  |  | 
179  |  |  | 
180  |  | /*  | 
181  |  |  * Code for extracting next Huffman-coded symbol from input bit stream.  | 
182  |  |  * Again, this is time-critical and we make the main paths be macros.  | 
183  |  |  *  | 
184  |  |  * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits  | 
185  |  |  * without looping.  Usually, more than 95% of the Huffman codes will be 8  | 
186  |  |  * or fewer bits long.  The few overlength codes are handled with a loop,  | 
187  |  |  * which need not be inline code.  | 
188  |  |  *  | 
189  |  |  * Notes about the HUFF_DECODE macro:  | 
190  |  |  * 1. Near the end of the data segment, we may fail to get enough bits  | 
191  |  |  *    for a lookahead.  In that case, we do it the hard way.  | 
192  |  |  * 2. If the lookahead table contains no entry, the next code must be  | 
193  |  |  *    more than HUFF_LOOKAHEAD bits long.  | 
194  |  |  * 3. jpeg_huff_decode returns -1 if forced to suspend.  | 
195  |  |  */  | 
196  |  |  | 
197  | 10.1M  | #define HUFF_DECODE(result, state, htbl, failaction, slowlabel) { \ | 
198  | 10.1M  |   register int nb, look; \  | 
199  | 10.1M  |   if (bits_left < HUFF_LOOKAHEAD) { \ | 
200  | 1.32M  |     if (!jpeg_fill_bit_buffer(&state, get_buffer, bits_left, 0)) \  | 
201  | 1.32M  |       { failaction; } \ | 
202  | 1.32M  |     get_buffer = state.get_buffer;  bits_left = state.bits_left; \  | 
203  | 1.32M  |     if (bits_left < HUFF_LOOKAHEAD) { \ | 
204  | 909k  |       nb = 1;  goto slowlabel; \  | 
205  | 909k  |     } \  | 
206  | 1.32M  |   } \  | 
207  | 10.1M  |   look = PEEK_BITS(HUFF_LOOKAHEAD); \  | 
208  | 9.24M  |   if ((nb = (htbl->lookup[look] >> HUFF_LOOKAHEAD)) <= HUFF_LOOKAHEAD) { \ | 
209  | 8.95M  |     DROP_BITS(nb); \  | 
210  | 8.95M  |     result = htbl->lookup[look] & ((1 << HUFF_LOOKAHEAD) - 1); \  | 
211  | 8.95M  |   } else { \ | 
212  | 1.20M  | slowlabel: \  | 
213  | 1.20M  |     if ((result = \  | 
214  | 1.20M  |          jpeg_huff_decode(&state, get_buffer, bits_left, htbl, nb)) < 0) \  | 
215  | 1.20M  |       { failaction; } \ | 
216  | 1.20M  |     get_buffer = state.get_buffer;  bits_left = state.bits_left; \  | 
217  | 1.20M  |   } \  | 
218  | 9.24M  | }  | 
219  |  |  | 
220  |  | #define HUFF_DECODE_FAST(s, nb, htbl) \  | 
221  | 4.15M  |   FILL_BIT_BUFFER_FAST; \  | 
222  | 4.15M  |   s = PEEK_BITS(HUFF_LOOKAHEAD); \  | 
223  | 4.15M  |   s = htbl->lookup[s]; \  | 
224  | 4.15M  |   nb = s >> HUFF_LOOKAHEAD; \  | 
225  | 4.15M  |   /* Pre-execute the common case of nb <= HUFF_LOOKAHEAD */ \  | 
226  | 4.15M  |   DROP_BITS(nb); \  | 
227  | 4.15M  |   s = s & ((1 << HUFF_LOOKAHEAD) - 1); \  | 
228  | 4.15M  |   if (nb > HUFF_LOOKAHEAD) { \ | 
229  | 56.2k  |     /* Equivalent of jpeg_huff_decode() */ \  | 
230  | 56.2k  |     /* Don't use GET_BITS() here because we don't want to modify bits_left */ \  | 
231  | 56.2k  |     s = (get_buffer >> bits_left) & ((1 << (nb)) - 1); \  | 
232  | 424k  |     while (s > htbl->maxcode[nb]) { \ | 
233  | 368k  |       s <<= 1; \  | 
234  | 368k  |       s |= GET_BITS(1); \  | 
235  | 368k  |       nb++; \  | 
236  | 368k  |     } \  | 
237  | 56.2k  |     if (nb > 16) \  | 
238  | 56.2k  |       s = 0; \  | 
239  | 56.2k  |     else \  | 
240  | 56.2k  |       s = htbl->pub->huffval[(int)(s + htbl->valoffset[nb]) & 0xFF]; \  | 
241  | 56.2k  |   }  | 
242  |  |  | 
243  |  | /* Out-of-line case for Huffman code fetching */  | 
244  |  | EXTERN(int) jpeg_huff_decode(bitread_working_state *state,  | 
245  |  |                              register bit_buf_type get_buffer,  | 
246  |  |                              register int bits_left, d_derived_tbl *htbl,  | 
247  |  |                              int min_bits);  |