fixes for the huffman decoder
This commit is contained in:
parent
9543128796
commit
2326832f49
47
pdf.js
47
pdf.js
@ -117,6 +117,39 @@ var FlateStream = (function() {
|
|||||||
[0, 258]
|
[0, 258]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const distDecode = [
|
||||||
|
[0, 1],
|
||||||
|
[0, 2],
|
||||||
|
[0, 3],
|
||||||
|
[0, 4],
|
||||||
|
[1, 5],
|
||||||
|
[1, 7],
|
||||||
|
[2, 9],
|
||||||
|
[2, 13],
|
||||||
|
[3, 17],
|
||||||
|
[3, 25],
|
||||||
|
[4, 33],
|
||||||
|
[4, 49],
|
||||||
|
[5, 65],
|
||||||
|
[5, 97],
|
||||||
|
[6, 129],
|
||||||
|
[6, 193],
|
||||||
|
[7, 257],
|
||||||
|
[7, 385],
|
||||||
|
[8, 513],
|
||||||
|
[8, 769],
|
||||||
|
[9, 1025],
|
||||||
|
[9, 1537],
|
||||||
|
[10, 2049],
|
||||||
|
[10, 3073],
|
||||||
|
[11, 4097],
|
||||||
|
[11, 6145],
|
||||||
|
[12, 8193],
|
||||||
|
[12, 12289],
|
||||||
|
[13, 16385],
|
||||||
|
[13, 24577]
|
||||||
|
];
|
||||||
|
|
||||||
const fixedLitCodeTab = [[
|
const fixedLitCodeTab = [[
|
||||||
[7, 0x0100],
|
[7, 0x0100],
|
||||||
[8, 0x0050],
|
[8, 0x0050],
|
||||||
@ -778,7 +811,7 @@ var FlateStream = (function() {
|
|||||||
var size = 1 << maxLen;
|
var size = 1 << maxLen;
|
||||||
var codes = new Array(size);
|
var codes = new Array(size);
|
||||||
for (var len = 1, code = 0, skip = 2;
|
for (var len = 1, code = 0, skip = 2;
|
||||||
len < maxLen;
|
len <= maxLen;
|
||||||
++len, code <<= 1, skip <<= 1) {
|
++len, code <<= 1, skip <<= 1) {
|
||||||
for (var val = 0; val < n; ++val) {
|
for (var val = 0; val < n; ++val) {
|
||||||
if (lengths[val] == len) {
|
if (lengths[val] == len) {
|
||||||
@ -854,8 +887,6 @@ var FlateStream = (function() {
|
|||||||
var i = 0;
|
var i = 0;
|
||||||
while (i < numCodeLenCodes)
|
while (i < numCodeLenCodes)
|
||||||
codeLenCodeLengths[codeLenCodeMap[i++]] = this.getBits(3);
|
codeLenCodeLengths[codeLenCodeMap[i++]] = this.getBits(3);
|
||||||
while (i < codeLenCodeMap.length)
|
|
||||||
codeLenCodeLengths[i++] = 0;
|
|
||||||
var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
|
var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
|
||||||
|
|
||||||
// built the literal and distance code tables
|
// built the literal and distance code tables
|
||||||
@ -864,18 +895,18 @@ var FlateStream = (function() {
|
|||||||
var codes = numLitCodes + numDistCodes;
|
var codes = numLitCodes + numDistCodes;
|
||||||
var codeLengths = new Array(codes);
|
var codeLengths = new Array(codes);
|
||||||
while (i < codes) {
|
while (i < codes) {
|
||||||
function repeat(array, i, len, offset, what) {
|
function repeat(stream, array, i, len, offset, what) {
|
||||||
var repeat = this.getBits(len) + offset;
|
var repeat = stream.getBits(len) + offset;
|
||||||
while (repeat-- > 0)
|
while (repeat-- > 0)
|
||||||
array[i++] = what;
|
array[i++] = what;
|
||||||
}
|
}
|
||||||
var code = this.getCode(codeLenCodeTab);
|
var code = this.getCode(codeLenCodeTab);
|
||||||
if (code == 16) {
|
if (code == 16) {
|
||||||
repeat(codeLengths, i, 2, 3, len);
|
repeat(this, codeLengths, i, 2, 3, len);
|
||||||
} else if (code == 17) {
|
} else if (code == 17) {
|
||||||
repeat(codeLengths, i, 3, 3, len = 0);
|
repeat(this, codeLengths, i, 3, 3, len = 0);
|
||||||
} else if (code == 18) {
|
} else if (code == 18) {
|
||||||
repeat(codeLengths, i, 7, 11, len = 0);
|
repeat(this, codeLengths, i, 7, 11, len = 0);
|
||||||
} else {
|
} else {
|
||||||
codeLengths[i++] = len = code;
|
codeLengths[i++] = len = code;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user