image-in-browser
Version:
Package for encoding / decoding images, transforming images, applying filters, drawing primitives on images on the client side (no need for server Node.js)
34 lines • 1.48 kB
JavaScript
import { HuffmanCodeList } from './webp-huffman-code-list.js';
import { HuffmanCode32 } from './webp-huffman-code-32.js';
import { VP8L } from './vp8l.js';
import { ArrayUtils } from '../../common/array-utils.js';
export class HuffmanTreeGroup {
constructor() {
this.isTrivialLiteral = false;
this.literalArb = 0;
this.isTrivialCode = false;
this.usePackedTable = false;
this.htrees = ArrayUtils.generate(VP8L.huffmanCodesPerMetaCode, () => HuffmanCodeList.sized(0));
this.packedTable = ArrayUtils.generate(VP8L.huffmanPackedTableSize, () => new HuffmanCode32());
}
get(index) {
return this.htrees[index];
}
readSymbol(table, br) {
let val = br.prefetchBits();
let tableIndex = val & HuffmanTreeGroup._huffmanTableMask;
const nbits = this.htrees[table].get(tableIndex).bits -
HuffmanTreeGroup._huffmanTableBits;
if (nbits > 0) {
br.bitPos += HuffmanTreeGroup._huffmanTableBits;
val = br.prefetchBits();
tableIndex += this.htrees[table].get(tableIndex).value;
tableIndex += val & ((1 << nbits) - 1);
}
br.bitPos += this.htrees[table].get(tableIndex).bits;
return this.htrees[table].get(tableIndex).value;
}
}
HuffmanTreeGroup._huffmanTableBits = 8;
HuffmanTreeGroup._huffmanTableMask = (1 << HuffmanTreeGroup._huffmanTableBits) - 1;
//# sourceMappingURL=webp-huffman-tree-group.js.map