1*dfc6aa5cSAndroid Build Coastguard Worker /* 2*dfc6aa5cSAndroid Build Coastguard Worker * jchuff.h 3*dfc6aa5cSAndroid Build Coastguard Worker * 4*dfc6aa5cSAndroid Build Coastguard Worker * This file was part of the Independent JPEG Group's software: 5*dfc6aa5cSAndroid Build Coastguard Worker * Copyright (C) 1991-1997, Thomas G. Lane. 6*dfc6aa5cSAndroid Build Coastguard Worker * libjpeg-turbo Modifications: 7*dfc6aa5cSAndroid Build Coastguard Worker * Copyright (C) 2022, D. R. Commander. 8*dfc6aa5cSAndroid Build Coastguard Worker * For conditions of distribution and use, see the accompanying README.ijg 9*dfc6aa5cSAndroid Build Coastguard Worker * file. 10*dfc6aa5cSAndroid Build Coastguard Worker * 11*dfc6aa5cSAndroid Build Coastguard Worker * This file contains declarations for Huffman entropy encoding routines 12*dfc6aa5cSAndroid Build Coastguard Worker * that are shared between the sequential encoder (jchuff.c) and the 13*dfc6aa5cSAndroid Build Coastguard Worker * progressive encoder (jcphuff.c). No other modules need to see these. 14*dfc6aa5cSAndroid Build Coastguard Worker */ 15*dfc6aa5cSAndroid Build Coastguard Worker 16*dfc6aa5cSAndroid Build Coastguard Worker /* The legal range of a DCT coefficient is 17*dfc6aa5cSAndroid Build Coastguard Worker * -1024 .. +1023 for 8-bit data; 18*dfc6aa5cSAndroid Build Coastguard Worker * -16384 .. +16383 for 12-bit data. 19*dfc6aa5cSAndroid Build Coastguard Worker * Hence the magnitude should always fit in 10 or 14 bits respectively. 20*dfc6aa5cSAndroid Build Coastguard Worker */ 21*dfc6aa5cSAndroid Build Coastguard Worker 22*dfc6aa5cSAndroid Build Coastguard Worker #if BITS_IN_JSAMPLE == 8 23*dfc6aa5cSAndroid Build Coastguard Worker #define MAX_COEF_BITS 10 24*dfc6aa5cSAndroid Build Coastguard Worker #else 25*dfc6aa5cSAndroid Build Coastguard Worker #define MAX_COEF_BITS 14 26*dfc6aa5cSAndroid Build Coastguard Worker #endif 27*dfc6aa5cSAndroid Build Coastguard Worker 28*dfc6aa5cSAndroid Build Coastguard Worker /* The progressive Huffman encoder uses an unsigned 16-bit data type to store 29*dfc6aa5cSAndroid Build Coastguard Worker * absolute values of coefficients, because it is possible to inject a 30*dfc6aa5cSAndroid Build Coastguard Worker * coefficient value of -32768 into the encoder by attempting to transform a 31*dfc6aa5cSAndroid Build Coastguard Worker * malformed 12-bit JPEG image, and the absolute value of -32768 would overflow 32*dfc6aa5cSAndroid Build Coastguard Worker * a signed 16-bit integer. 33*dfc6aa5cSAndroid Build Coastguard Worker */ 34*dfc6aa5cSAndroid Build Coastguard Worker typedef unsigned short UJCOEF; 35*dfc6aa5cSAndroid Build Coastguard Worker 36*dfc6aa5cSAndroid Build Coastguard Worker /* Derived data constructed for each Huffman table */ 37*dfc6aa5cSAndroid Build Coastguard Worker 38*dfc6aa5cSAndroid Build Coastguard Worker typedef struct { 39*dfc6aa5cSAndroid Build Coastguard Worker unsigned int ehufco[256]; /* code for each symbol */ 40*dfc6aa5cSAndroid Build Coastguard Worker char ehufsi[256]; /* length of code for each symbol */ 41*dfc6aa5cSAndroid Build Coastguard Worker /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */ 42*dfc6aa5cSAndroid Build Coastguard Worker } c_derived_tbl; 43*dfc6aa5cSAndroid Build Coastguard Worker 44*dfc6aa5cSAndroid Build Coastguard Worker /* Expand a Huffman table definition into the derived format */ 45*dfc6aa5cSAndroid Build Coastguard Worker EXTERN(void) jpeg_make_c_derived_tbl(j_compress_ptr cinfo, boolean isDC, 46*dfc6aa5cSAndroid Build Coastguard Worker int tblno, c_derived_tbl **pdtbl); 47*dfc6aa5cSAndroid Build Coastguard Worker 48*dfc6aa5cSAndroid Build Coastguard Worker /* Generate an optimal table definition given the specified counts */ 49*dfc6aa5cSAndroid Build Coastguard Worker EXTERN(void) jpeg_gen_optimal_table(j_compress_ptr cinfo, JHUFF_TBL *htbl, 50*dfc6aa5cSAndroid Build Coastguard Worker long freq[]); 51