Simplify Jbig2Image.decodeInteger()
This commit is contained in:
parent
e359f0694f
commit
8c38c2cbe3
@ -28,7 +28,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
|
|||||||
if (id in this) {
|
if (id in this) {
|
||||||
return this[id];
|
return this[id];
|
||||||
}
|
}
|
||||||
return (this[id] = new Int8Array(1<<16));
|
return (this[id] = new Int8Array(1 << 16));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -53,69 +53,32 @@ var Jbig2Image = (function Jbig2ImageClosure() {
|
|||||||
// A.2 Procedure for decoding values
|
// A.2 Procedure for decoding values
|
||||||
function decodeInteger(contextCache, procedure, decoder) {
|
function decodeInteger(contextCache, procedure, decoder) {
|
||||||
var contexts = contextCache.getContexts(procedure);
|
var contexts = contextCache.getContexts(procedure);
|
||||||
|
|
||||||
var prev = 1;
|
var prev = 1;
|
||||||
var state = 1, v = 0, s;
|
|
||||||
var toRead = 32, offset = 4436; // defaults for state 7
|
function readBits(length) {
|
||||||
while (state) {
|
var v = 0;
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
var bit = decoder.readBit(contexts, prev);
|
var bit = decoder.readBit(contexts, prev);
|
||||||
prev = (prev < 256 ? (prev << 1) | bit :
|
prev = (prev < 256 ? (prev << 1) | bit :
|
||||||
(((prev << 1) | bit) & 511) | 256);
|
(((prev << 1) | bit) & 511) | 256);
|
||||||
switch (state) {
|
v = (v << 1) | bit;
|
||||||
case 1:
|
|
||||||
s = !!bit;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
if (bit) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
state = 7;
|
return v >>> 0;
|
||||||
toRead = 2;
|
|
||||||
offset = 0;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
if (bit) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
state = 7;
|
|
||||||
toRead = 4;
|
var sign = readBits(1);
|
||||||
offset = 4;
|
var value = readBits(1) ?
|
||||||
break;
|
(readBits(1) ?
|
||||||
case 4:
|
(readBits(1) ?
|
||||||
if (bit) {
|
(readBits(1) ?
|
||||||
break;
|
(readBits(1) ?
|
||||||
}
|
(readBits(32) + 4436) :
|
||||||
state = 7;
|
readBits(12) + 340) :
|
||||||
toRead = 6;
|
readBits(8) + 84) :
|
||||||
offset = 20;
|
readBits(6) + 20) :
|
||||||
break;
|
readBits(4) + 4) :
|
||||||
case 5:
|
readBits(2);
|
||||||
if (bit) {
|
return (sign === 0 ? value : (value > 0 ? -value : null));
|
||||||
break;
|
|
||||||
}
|
|
||||||
state = 7;
|
|
||||||
toRead = 8;
|
|
||||||
offset = 84;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
if (bit) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
state = 7;
|
|
||||||
toRead = 12;
|
|
||||||
offset = 340;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
v = ((v << 1) | bit) >>> 0;
|
|
||||||
if (--toRead === 0) {
|
|
||||||
state = 0;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
state++;
|
|
||||||
}
|
|
||||||
v += offset;
|
|
||||||
return (!s ? v : (v > 0 ? -v : null));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// A.3 The IAID decoding procedure
|
// A.3 The IAID decoding procedure
|
||||||
|
Loading…
Reference in New Issue
Block a user