Convert src/core/arithmetic_decoder.js
to ES6 syntax
This commit is contained in:
parent
c967eab8b1
commit
3b637e71d4
@ -12,18 +12,10 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
/* eslint no-var: error */
|
||||||
|
|
||||||
/* This class implements the QM Coder decoding as defined in
|
|
||||||
* JPEG 2000 Part I Final Committee Draft Version 1.0
|
|
||||||
* Annex C.3 Arithmetic decoding procedure
|
|
||||||
* available at http://www.jpeg.org/public/fcd15444-1.pdf
|
|
||||||
*
|
|
||||||
* The arithmetic decoder is used in conjunction with context models to decode
|
|
||||||
* JPEG2000 and JBIG2 streams.
|
|
||||||
*/
|
|
||||||
var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
|
|
||||||
// Table C-2
|
// Table C-2
|
||||||
var QeTable = [
|
const QeTable = [
|
||||||
{ qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1, },
|
{ qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1, },
|
||||||
{ qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0, },
|
{ qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0, },
|
||||||
{ qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0, },
|
{ qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0, },
|
||||||
@ -70,11 +62,21 @@ var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
|
|||||||
{ qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0, },
|
{ qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0, },
|
||||||
{ qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0, },
|
{ qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0, },
|
||||||
{ qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0, },
|
{ qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0, },
|
||||||
{ qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0, }
|
{ qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0, },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class implements the QM Coder decoding as defined in
|
||||||
|
* JPEG 2000 Part I Final Committee Draft Version 1.0
|
||||||
|
* Annex C.3 Arithmetic decoding procedure
|
||||||
|
* available at http://www.jpeg.org/public/fcd15444-1.pdf
|
||||||
|
*
|
||||||
|
* The arithmetic decoder is used in conjunction with context models to decode
|
||||||
|
* JPEG2000 and JBIG2 streams.
|
||||||
|
*/
|
||||||
|
class ArithmeticDecoder {
|
||||||
// C.3.5 Initialisation of the decoder (INITDEC)
|
// C.3.5 Initialisation of the decoder (INITDEC)
|
||||||
function ArithmeticDecoder(data, start, end) {
|
constructor(data, start, end) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.bp = start;
|
this.bp = start;
|
||||||
this.dataEnd = end;
|
this.dataEnd = end;
|
||||||
@ -90,14 +92,13 @@ var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
|
|||||||
this.a = 0x8000;
|
this.a = 0x8000;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArithmeticDecoder.prototype = {
|
|
||||||
// C.3.4 Compressed data input (BYTEIN)
|
// C.3.4 Compressed data input (BYTEIN)
|
||||||
byteIn: function ArithmeticDecoder_byteIn() {
|
byteIn() {
|
||||||
var data = this.data;
|
const data = this.data;
|
||||||
var bp = this.bp;
|
let bp = this.bp;
|
||||||
|
|
||||||
if (data[bp] === 0xFF) {
|
if (data[bp] === 0xFF) {
|
||||||
var b1 = data[bp + 1];
|
if (data[bp + 1] > 0x8F) {
|
||||||
if (b1 > 0x8F) {
|
|
||||||
this.clow += 0xFF00;
|
this.clow += 0xFF00;
|
||||||
this.ct = 8;
|
this.ct = 8;
|
||||||
} else {
|
} else {
|
||||||
@ -116,16 +117,17 @@ var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
|
|||||||
this.chigh += (this.clow >> 16);
|
this.chigh += (this.clow >> 16);
|
||||||
this.clow &= 0xFFFF;
|
this.clow &= 0xFFFF;
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
// C.3.2 Decoding a decision (DECODE)
|
// C.3.2 Decoding a decision (DECODE)
|
||||||
readBit: function ArithmeticDecoder_readBit(contexts, pos) {
|
readBit(contexts, pos) {
|
||||||
// contexts are packed into 1 byte:
|
// Contexts are packed into 1 byte:
|
||||||
// highest 7 bits carry cx.index, lowest bit carries cx.mps
|
// highest 7 bits carry cx.index, lowest bit carries cx.mps
|
||||||
var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1;
|
let cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1;
|
||||||
var qeTableIcx = QeTable[cx_index];
|
const qeTableIcx = QeTable[cx_index];
|
||||||
var qeIcx = qeTableIcx.qe;
|
const qeIcx = qeTableIcx.qe;
|
||||||
var d;
|
let d;
|
||||||
var a = this.a - qeIcx;
|
let a = this.a - qeIcx;
|
||||||
|
|
||||||
if (this.chigh < qeIcx) {
|
if (this.chigh < qeIcx) {
|
||||||
// exchangeLps
|
// exchangeLps
|
||||||
@ -174,11 +176,8 @@ var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
|
|||||||
|
|
||||||
contexts[pos] = cx_index << 1 | cx_mps;
|
contexts[pos] = cx_index << 1 | cx_mps;
|
||||||
return d;
|
return d;
|
||||||
},
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
return ArithmeticDecoder;
|
|
||||||
})();
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
ArithmeticDecoder,
|
ArithmeticDecoder,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user