Remove the closure from BitModel
in the src/core/jpx.js
file
This commit is contained in:
parent
b0a1af306d
commit
88616f77ae
@ -1738,41 +1738,43 @@ class InclusionTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Section D. Coefficient bit modeling
|
// Section D. Coefficient bit modeling
|
||||||
const BitModel = (function BitModelClosure() {
|
class BitModel {
|
||||||
const UNIFORM_CONTEXT = 17;
|
static UNIFORM_CONTEXT = 17;
|
||||||
const RUNLENGTH_CONTEXT = 18;
|
|
||||||
|
static RUNLENGTH_CONTEXT = 18;
|
||||||
|
|
||||||
// Table D-1
|
// Table D-1
|
||||||
// The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),
|
// The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),
|
||||||
// vv - sum of Vi (0..2), and hh - sum of Hi (0..2)
|
// vv - sum of Vi (0..2), and hh - sum of Hi (0..2)
|
||||||
const LLAndLHContextsLabel = new Uint8Array([
|
static LLAndLHContextsLabel = new Uint8Array([
|
||||||
0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,
|
0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,
|
||||||
7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,
|
7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,
|
||||||
8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8,
|
8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8,
|
||||||
]);
|
]);
|
||||||
const HLContextLabel = new Uint8Array([
|
|
||||||
|
static HLContextLabel = new Uint8Array([
|
||||||
0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,
|
0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,
|
||||||
8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,
|
8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,
|
||||||
4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8,
|
4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8,
|
||||||
]);
|
]);
|
||||||
const HHContextLabel = new Uint8Array([
|
|
||||||
|
static HHContextLabel = new Uint8Array([
|
||||||
0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,
|
0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,
|
||||||
5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,
|
5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,
|
||||||
8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8,
|
8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// eslint-disable-next-line no-shadow
|
|
||||||
class BitModel {
|
|
||||||
constructor(width, height, subband, zeroBitPlanes, mb) {
|
constructor(width, height, subband, zeroBitPlanes, mb) {
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
|
|
||||||
let contextLabelTable;
|
let contextLabelTable;
|
||||||
if (subband === "HH") {
|
if (subband === "HH") {
|
||||||
contextLabelTable = HHContextLabel;
|
contextLabelTable = BitModel.HHContextLabel;
|
||||||
} else if (subband === "HL") {
|
} else if (subband === "HL") {
|
||||||
contextLabelTable = HLContextLabel;
|
contextLabelTable = BitModel.HLContextLabel;
|
||||||
} else {
|
} else {
|
||||||
contextLabelTable = LLAndLHContextsLabel;
|
contextLabelTable = BitModel.LLAndLHContextsLabel;
|
||||||
}
|
}
|
||||||
this.contextLabelTable = contextLabelTable;
|
this.contextLabelTable = contextLabelTable;
|
||||||
|
|
||||||
@ -1816,8 +1818,8 @@ const BitModel = (function BitModelClosure() {
|
|||||||
// Contexts are packed into 1 byte:
|
// Contexts are packed into 1 byte:
|
||||||
// highest 7 bits carry the index, lowest bit carries mps
|
// highest 7 bits carry the index, lowest bit carries mps
|
||||||
this.contexts[0] = (4 << 1) | 0;
|
this.contexts[0] = (4 << 1) | 0;
|
||||||
this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0;
|
this.contexts[BitModel.UNIFORM_CONTEXT] = (46 << 1) | 0;
|
||||||
this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0;
|
this.contexts[BitModel.RUNLENGTH_CONTEXT] = (3 << 1) | 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
setNeighborsSignificance(row, column, index) {
|
setNeighborsSignificance(row, column, index) {
|
||||||
@ -2044,7 +2046,7 @@ const BitModel = (function BitModelClosure() {
|
|||||||
if (allEmpty) {
|
if (allEmpty) {
|
||||||
const hasSignificantCoefficent = decoder.readBit(
|
const hasSignificantCoefficent = decoder.readBit(
|
||||||
contexts,
|
contexts,
|
||||||
RUNLENGTH_CONTEXT
|
BitModel.RUNLENGTH_CONTEXT
|
||||||
);
|
);
|
||||||
if (!hasSignificantCoefficent) {
|
if (!hasSignificantCoefficent) {
|
||||||
bitsDecoded[index0]++;
|
bitsDecoded[index0]++;
|
||||||
@ -2054,8 +2056,8 @@ const BitModel = (function BitModelClosure() {
|
|||||||
continue; // next column
|
continue; // next column
|
||||||
}
|
}
|
||||||
i1 =
|
i1 =
|
||||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |
|
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1) |
|
||||||
decoder.readBit(contexts, UNIFORM_CONTEXT);
|
decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
|
||||||
if (i1 !== 0) {
|
if (i1 !== 0) {
|
||||||
i = i0 + i1;
|
i = i0 + i1;
|
||||||
index += i1 * width;
|
index += i1 * width;
|
||||||
@ -2101,18 +2103,15 @@ const BitModel = (function BitModelClosure() {
|
|||||||
const decoder = this.decoder;
|
const decoder = this.decoder;
|
||||||
const contexts = this.contexts;
|
const contexts = this.contexts;
|
||||||
const symbol =
|
const symbol =
|
||||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) |
|
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 3) |
|
||||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) |
|
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 2) |
|
||||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |
|
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1) |
|
||||||
decoder.readBit(contexts, UNIFORM_CONTEXT);
|
decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
|
||||||
if (symbol !== 0xa) {
|
if (symbol !== 0xa) {
|
||||||
throw new JpxError("Invalid segmentation symbol");
|
throw new JpxError("Invalid segmentation symbol");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return BitModel;
|
|
||||||
})();
|
|
||||||
|
|
||||||
// Section F, Discrete wavelet transformation
|
// Section F, Discrete wavelet transformation
|
||||||
class Transform {
|
class Transform {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user