// Generate the AC lookup tables.
for (unsigned i = 0; i < DEHUF_AC_TABLE_SIZE; ++i) {
tbl->ac_table_codes[i] = AC_DEHUF_SLOW_PATH;
- tbl->ac_table_length[i] = AC_DEHUF_SLOW_PATH;
- tbl->ac_table_skip[i] = AC_DEHUF_SLOW_PATH;
int lookup = i >> (DEHUF_AC_TABLE_BITS - DEHUF_TABLE_BITS);
int rs = tbl->lookup_table_codes[lookup];
static const int DEHUF_SLOW_PATH = -1;
// About 98% of all AC coefficients (control byte + coefficient) are <= 10 bits
-// long; again, see codelen.txt. This will cost us about 12 kB of data to store
+// long; again, see codelen.txt. This will cost us about 6 kB of data to store
// in L1 cache.
#define DEHUF_AC_TABLE_BITS 10
#define DEHUF_AC_TABLE_SIZE (1 << DEHUF_AC_TABLE_BITS)
// number of bits to skip (_length) and the number of zero coefficients
// after this one (_skip).
int ac_table_codes[DEHUF_AC_TABLE_SIZE];
- int ac_table_length[DEHUF_AC_TABLE_SIZE];
- int ac_table_skip[DEHUF_AC_TABLE_SIZE];
+ uint8_t ac_table_length[DEHUF_AC_TABLE_SIZE];
+ uint8_t ac_table_skip[DEHUF_AC_TABLE_SIZE];
};
enum coefficient_class {
possibly_refill(bits, DEHUF_AC_TABLE_BITS);
unsigned lookup = peek_bits(bits, DEHUF_AC_TABLE_BITS);
int code = tbl->ac_table_codes[lookup];
- int length = tbl->ac_table_length[lookup];
- int r = tbl->ac_table_skip[lookup];
assert(length == AC_DEHUF_SLOW_PATH || (length > 0 && length <= DEHUF_AC_TABLE_BITS));
coeff[unzigzag[i]] = extend(read_bits(bits, s), s);
} else {
+ int length = tbl->ac_table_length[lookup];
+ int r = tbl->ac_table_skip[lookup];
assert(r >= 0);
i += r;
assert(bits->bits_available >= length);