@gmod/cram 3.0.7 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/craiIndex.js +70 -87
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +1 -1
- package/dist/cramFile/codecs/_base.d.ts +1 -1
- package/dist/cramFile/codecs/beta.d.ts +2 -2
- package/dist/cramFile/codecs/beta.js +1 -1
- package/dist/cramFile/codecs/beta.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/dist/cramFile/codecs/byteArrayStop.js +1 -1
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/external.d.ts +1 -1
- package/dist/cramFile/codecs/external.js +1 -1
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/gamma.d.ts +1 -1
- package/dist/cramFile/codecs/gamma.js +1 -1
- package/dist/cramFile/codecs/gamma.js.map +1 -1
- package/dist/cramFile/codecs/getBits.d.ts +1 -1
- package/dist/cramFile/codecs/getBits.js.map +1 -1
- package/dist/cramFile/codecs/huffman.d.ts +1 -1
- package/dist/cramFile/codecs/huffman.js +1 -1
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/codecs/index.d.ts +1 -1
- package/dist/cramFile/codecs/index.js +5 -5
- package/dist/cramFile/codecs/index.js.map +1 -1
- package/dist/cramFile/codecs/subexp.d.ts +2 -2
- package/dist/cramFile/codecs/subexp.js +1 -1
- package/dist/cramFile/codecs/subexp.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +2 -2
- package/dist/cramFile/container/compressionScheme.js +1 -1
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.d.ts +1 -2
- package/dist/cramFile/container/index.js +62 -79
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/file.d.ts +9 -13
- package/dist/cramFile/file.js +218 -247
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/record.js +2 -2
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.d.ts +16 -16
- package/dist/cramFile/sectionParsers.js +12 -9
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
- package/dist/cramFile/slice/decodeRecord.js +11 -11
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +2 -2
- package/dist/cramFile/slice/index.js +241 -262
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +4 -2
- package/dist/cramFile/util.js +29 -6
- package/dist/cramFile/util.js.map +1 -1
- package/dist/htscodecs/arith_gen.d.ts +9 -17
- package/dist/htscodecs/arith_gen.js +32 -272
- package/dist/htscodecs/arith_gen.js.map +1 -1
- package/dist/htscodecs/fqzcomp.d.ts +1 -2
- package/dist/htscodecs/fqzcomp.js +2 -421
- package/dist/htscodecs/fqzcomp.js.map +1 -1
- package/dist/htscodecs/index.d.ts +5 -5
- package/dist/htscodecs/index.js +10 -10
- package/dist/htscodecs/index.js.map +1 -1
- package/dist/htscodecs/iostream.d.ts +2 -1
- package/dist/htscodecs/iostream.js +3 -2
- package/dist/htscodecs/iostream.js.map +1 -1
- package/dist/htscodecs/rans.d.ts +1 -2
- package/dist/htscodecs/rans.js +3 -270
- package/dist/htscodecs/rans.js.map +1 -1
- package/dist/htscodecs/rans4x16.d.ts +0 -1
- package/dist/htscodecs/rans4x16.js +6 -497
- package/dist/htscodecs/rans4x16.js.map +1 -1
- package/dist/htscodecs/tok3.js +17 -1
- package/dist/htscodecs/tok3.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/indexedCramFile.d.ts +4 -4
- package/dist/indexedCramFile.js +97 -108
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/io/index.d.ts +2 -2
- package/dist/io/index.js +6 -6
- package/dist/io/index.js.map +1 -1
- package/dist/rans/constants.d.ts +1 -1
- package/dist/rans/constants.js +1 -1
- package/dist/rans/constants.js.map +1 -1
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +5 -5
- package/dist/rans/index.js.map +1 -1
- package/dist/unzip.d.ts +1 -1
- package/dist/unzip.js +5 -3
- package/dist/unzip.js.map +1 -1
- package/esm/craiIndex.js +10 -12
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/_base.d.ts +1 -1
- package/esm/cramFile/codecs/beta.d.ts +2 -2
- package/esm/cramFile/codecs/beta.js +1 -1
- package/esm/cramFile/codecs/beta.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/esm/cramFile/codecs/byteArrayStop.js +1 -1
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/external.d.ts +1 -1
- package/esm/cramFile/codecs/external.js +1 -1
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/gamma.d.ts +1 -1
- package/esm/cramFile/codecs/gamma.js +1 -1
- package/esm/cramFile/codecs/gamma.js.map +1 -1
- package/esm/cramFile/codecs/getBits.d.ts +1 -1
- package/esm/cramFile/codecs/getBits.js.map +1 -1
- package/esm/cramFile/codecs/huffman.d.ts +1 -1
- package/esm/cramFile/codecs/huffman.js +1 -1
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/codecs/index.d.ts +1 -1
- package/esm/cramFile/codecs/index.js +5 -5
- package/esm/cramFile/codecs/index.js.map +1 -1
- package/esm/cramFile/codecs/subexp.d.ts +2 -2
- package/esm/cramFile/codecs/subexp.js +1 -1
- package/esm/cramFile/codecs/subexp.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +2 -2
- package/esm/cramFile/container/compressionScheme.js +1 -1
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.d.ts +1 -2
- package/esm/cramFile/container/index.js +4 -7
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/file.d.ts +9 -13
- package/esm/cramFile/file.js +47 -52
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/record.js +2 -2
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.d.ts +16 -16
- package/esm/cramFile/sectionParsers.js +7 -7
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
- package/esm/cramFile/slice/decodeRecord.js +11 -11
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +2 -2
- package/esm/cramFile/slice/index.js +7 -6
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +4 -2
- package/esm/cramFile/util.js +19 -2
- package/esm/cramFile/util.js.map +1 -1
- package/esm/htscodecs/arith_gen.d.ts +9 -17
- package/esm/htscodecs/arith_gen.js +32 -272
- package/esm/htscodecs/arith_gen.js.map +1 -1
- package/esm/htscodecs/fqzcomp.d.ts +1 -2
- package/esm/htscodecs/fqzcomp.js +2 -421
- package/esm/htscodecs/fqzcomp.js.map +1 -1
- package/esm/htscodecs/index.d.ts +5 -5
- package/esm/htscodecs/index.js +10 -10
- package/esm/htscodecs/index.js.map +1 -1
- package/esm/htscodecs/iostream.d.ts +2 -1
- package/esm/htscodecs/iostream.js +3 -2
- package/esm/htscodecs/iostream.js.map +1 -1
- package/esm/htscodecs/rans.d.ts +1 -2
- package/esm/htscodecs/rans.js +3 -270
- package/esm/htscodecs/rans.js.map +1 -1
- package/esm/htscodecs/rans4x16.d.ts +0 -1
- package/esm/htscodecs/rans4x16.js +6 -497
- package/esm/htscodecs/rans4x16.js.map +1 -1
- package/esm/htscodecs/tok3.js +17 -1
- package/esm/htscodecs/tok3.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/indexedCramFile.d.ts +4 -4
- package/esm/indexedCramFile.js +10 -10
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/io/index.d.ts +2 -2
- package/esm/io/index.js +1 -1
- package/esm/io/index.js.map +1 -1
- package/esm/rans/constants.d.ts +1 -1
- package/esm/rans/constants.js +1 -1
- package/esm/rans/constants.js.map +1 -1
- package/esm/rans/d04.js.map +1 -1
- package/esm/rans/decoding.js.map +1 -1
- package/esm/rans/frequencies.js.map +1 -1
- package/esm/rans/index.js +5 -5
- package/esm/rans/index.js.map +1 -1
- package/esm/unzip.d.ts +1 -1
- package/esm/unzip.js +4 -1
- package/esm/unzip.js.map +1 -1
- package/package.json +7 -9
- package/src/craiIndex.ts +17 -16
- package/src/cramFile/codecs/_base.ts +1 -1
- package/src/cramFile/codecs/beta.ts +3 -3
- package/src/cramFile/codecs/byteArrayLength.ts +1 -1
- package/src/cramFile/codecs/byteArrayStop.ts +3 -4
- package/src/cramFile/codecs/external.ts +3 -3
- package/src/cramFile/codecs/gamma.ts +2 -2
- package/src/cramFile/codecs/getBits.ts +1 -1
- package/src/cramFile/codecs/huffman.ts +2 -3
- package/src/cramFile/codecs/index.ts +7 -8
- package/src/cramFile/codecs/subexp.ts +3 -3
- package/src/cramFile/container/compressionScheme.ts +3 -3
- package/src/cramFile/container/index.ts +7 -10
- package/src/cramFile/file.ts +71 -77
- package/src/cramFile/record.ts +3 -3
- package/src/cramFile/sectionParsers.ts +27 -22
- package/src/cramFile/slice/decodeRecord.ts +17 -17
- package/src/cramFile/slice/index.ts +8 -9
- package/src/cramFile/util.ts +24 -5
- package/src/htscodecs/arith_gen.js +33 -296
- package/src/htscodecs/fqzcomp.js +2 -476
- package/src/htscodecs/index.js +9 -11
- package/src/htscodecs/iostream.js +3 -2
- package/src/htscodecs/rans.js +3 -315
- package/src/htscodecs/rans4x16.js +6 -557
- package/src/htscodecs/tok3.js +18 -1
- package/src/index.ts +1 -1
- package/src/indexedCramFile.ts +6 -5
- package/src/io/index.ts +5 -4
- package/src/rans/constants.ts +1 -1
- package/src/rans/d04.ts +0 -1
- package/src/rans/decoding.ts +0 -1
- package/src/rans/frequencies.ts +0 -1
- package/src/rans/index.ts +5 -7
- package/src/unzip.ts +5 -1
- package/dist/cramFile/filehandle.d.ts +0 -1
- package/dist/cramFile/filehandle.js +0 -3
- package/dist/cramFile/filehandle.js.map +0 -1
- package/dist/htscodecs/main_arith_gen.d.ts +0 -1
- package/dist/htscodecs/main_arith_gen.js +0 -86
- package/dist/htscodecs/main_arith_gen.js.map +0 -1
- package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
- package/dist/htscodecs/main_fqzcomp.js +0 -112
- package/dist/htscodecs/main_fqzcomp.js.map +0 -1
- package/dist/htscodecs/main_rans.d.ts +0 -1
- package/dist/htscodecs/main_rans.js +0 -83
- package/dist/htscodecs/main_rans.js.map +0 -1
- package/dist/htscodecs/main_rans4x16.d.ts +0 -1
- package/dist/htscodecs/main_rans4x16.js +0 -82
- package/dist/htscodecs/main_rans4x16.js.map +0 -1
- package/dist/htscodecs/main_tok3.d.ts +0 -1
- package/dist/htscodecs/main_tok3.js +0 -84
- package/dist/htscodecs/main_tok3.js.map +0 -1
- package/dist/unzip-pako.d.ts +0 -2
- package/dist/unzip-pako.js +0 -9
- package/dist/unzip-pako.js.map +0 -1
- package/esm/cramFile/filehandle.d.ts +0 -1
- package/esm/cramFile/filehandle.js +0 -2
- package/esm/cramFile/filehandle.js.map +0 -1
- package/esm/htscodecs/main_arith_gen.d.ts +0 -1
- package/esm/htscodecs/main_arith_gen.js +0 -86
- package/esm/htscodecs/main_arith_gen.js.map +0 -1
- package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
- package/esm/htscodecs/main_fqzcomp.js +0 -112
- package/esm/htscodecs/main_fqzcomp.js.map +0 -1
- package/esm/htscodecs/main_rans.d.ts +0 -1
- package/esm/htscodecs/main_rans.js +0 -83
- package/esm/htscodecs/main_rans.js.map +0 -1
- package/esm/htscodecs/main_rans4x16.d.ts +0 -1
- package/esm/htscodecs/main_rans4x16.js +0 -82
- package/esm/htscodecs/main_rans4x16.js.map +0 -1
- package/esm/htscodecs/main_tok3.d.ts +0 -1
- package/esm/htscodecs/main_tok3.js +0 -84
- package/esm/htscodecs/main_tok3.js.map +0 -1
- package/esm/unzip-pako.d.ts +0 -2
- package/esm/unzip-pako.js +0 -6
- package/esm/unzip-pako.js.map +0 -1
- package/src/cramFile/filehandle.ts +0 -1
- package/src/htscodecs/Makefile +0 -142
- package/src/htscodecs/README.md +0 -64
- package/src/htscodecs/main_arith_gen.js +0 -96
- package/src/htscodecs/main_fqzcomp.js +0 -113
- package/src/htscodecs/main_rans.js +0 -88
- package/src/htscodecs/main_rans4x16.js +0 -87
- package/src/htscodecs/main_tok3.js +0 -86
- package/src/unzip-pako.ts +0 -6
|
@@ -68,87 +68,6 @@ function RansRenorm(src, R) {
|
|
|
68
68
|
R = (R << 16) + src.ReadUint16();
|
|
69
69
|
return R;
|
|
70
70
|
}
|
|
71
|
-
// RanEnc* is for encoder
|
|
72
|
-
function RansEncInit() {
|
|
73
|
-
return 1 << 15;
|
|
74
|
-
}
|
|
75
|
-
function RansEncFlush(R, dst) {
|
|
76
|
-
dst.WriteByteNeg((R >> 24) & 0xff);
|
|
77
|
-
dst.WriteByteNeg((R >> 16) & 0xff);
|
|
78
|
-
dst.WriteByteNeg((R >> 8) & 0xff);
|
|
79
|
-
dst.WriteByteNeg((R >> 0) & 0xff);
|
|
80
|
-
}
|
|
81
|
-
function RansEncRenorm(R, dst, freq, scale_bits) {
|
|
82
|
-
//var R_max = (((1 << 15) >> scale_bits) << 16) * freq;
|
|
83
|
-
var R_max = (1 << (31 - scale_bits)) * freq;
|
|
84
|
-
while (R >= R_max) {
|
|
85
|
-
dst.WriteByteNeg((R >> 8) & 0xff);
|
|
86
|
-
dst.WriteByteNeg(R & 0xff);
|
|
87
|
-
R >>= 16;
|
|
88
|
-
}
|
|
89
|
-
return R;
|
|
90
|
-
}
|
|
91
|
-
// Puts a symbol with frequency freq, cumulative freq start
|
|
92
|
-
// and total freq 1<<scale_bits.
|
|
93
|
-
//
|
|
94
|
-
// Note with static probabilities, /freq and %freq could be
|
|
95
|
-
// precomputed via multiplies and shifts.
|
|
96
|
-
function RansEncPut(R, dst, start, freq, scale_bits) {
|
|
97
|
-
var scale = 1 << scale_bits;
|
|
98
|
-
R = RansEncRenorm(R, dst, freq, scale_bits);
|
|
99
|
-
R = (Math.floor(R / freq) << scale_bits) + (R % freq) + start;
|
|
100
|
-
return R;
|
|
101
|
-
}
|
|
102
|
-
//----------------------------------------------------------------------
|
|
103
|
-
// Run length encoding
|
|
104
|
-
function EncodeRLE(src, N) {
|
|
105
|
-
// Step 1: find which symbols benefit from RLE
|
|
106
|
-
var L = new Array(256);
|
|
107
|
-
for (var i = 0; i < 256; i++)
|
|
108
|
-
L[i] = 0;
|
|
109
|
-
var last = -1;
|
|
110
|
-
for (var i = 0; i < src.length; i++) {
|
|
111
|
-
L[src[i]] += src[i] == last ? 1 : -1;
|
|
112
|
-
last = src[i];
|
|
113
|
-
}
|
|
114
|
-
var nrle = 0;
|
|
115
|
-
for (var i = 0; i < 256; i++)
|
|
116
|
-
if (L[i] > 0)
|
|
117
|
-
nrle++;
|
|
118
|
-
if (!nrle) {
|
|
119
|
-
// Format cannot cope with zero RLE symbols, so pick one!
|
|
120
|
-
nrle = 1;
|
|
121
|
-
L[0] = 1;
|
|
122
|
-
}
|
|
123
|
-
// Start meta-data as list of symbols to RLE
|
|
124
|
-
var meta = new IOStream('', 0, nrle + 1 + src.length);
|
|
125
|
-
meta.WriteByte(nrle);
|
|
126
|
-
for (var i = 0; i < 256; i++)
|
|
127
|
-
if (L[i] > 0)
|
|
128
|
-
meta.WriteByte(i);
|
|
129
|
-
// Step 2: Now apply RLE itself
|
|
130
|
-
var data = new Buffer.allocUnsafe(src.length);
|
|
131
|
-
var dpos = 0;
|
|
132
|
-
for (var i = 0; i < src.length; i++) {
|
|
133
|
-
data[dpos++] = src[i];
|
|
134
|
-
if (L[src[i]] > 0) {
|
|
135
|
-
last = src[i];
|
|
136
|
-
var run = 0;
|
|
137
|
-
while (i + run + 1 < src.length && src[i + run + 1] == last)
|
|
138
|
-
run++;
|
|
139
|
-
meta.WriteUint7(run);
|
|
140
|
-
i += run;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// Compress the meta-data
|
|
144
|
-
var cmeta = RansEncode0(meta.buf.slice(0, meta.pos), N);
|
|
145
|
-
var hdr = new IOStream('', 0, 16);
|
|
146
|
-
hdr.WriteUint7(meta.pos * 2); // Uncompressed meta-data length + compressed-bit-flag(0)
|
|
147
|
-
hdr.WriteUint7(dpos); // Length of RLE encoded data
|
|
148
|
-
hdr.WriteUint7(cmeta.length); // Compressed meta-data length
|
|
149
|
-
var meta = Buffer.concat([hdr.buf.slice(0, hdr.pos), cmeta]);
|
|
150
|
-
return [meta, data.slice(0, dpos)];
|
|
151
|
-
}
|
|
152
71
|
function DecodeRLEMeta(src, N) {
|
|
153
72
|
var u_meta_len = src.ReadUint7();
|
|
154
73
|
var rle_len = src.ReadUint7();
|
|
@@ -173,7 +92,7 @@ function DecodeRLEMeta(src, N) {
|
|
|
173
92
|
}
|
|
174
93
|
function DecodeRLE(buf, L, rle_meta, len) {
|
|
175
94
|
var src = new IOStream(buf);
|
|
176
|
-
var out = new
|
|
95
|
+
var out = new Uint8Array(len);
|
|
177
96
|
// Expand up buf+meta to out; i = buf index, j = out index
|
|
178
97
|
var j = 0;
|
|
179
98
|
for (var i = 0; j < len; i++) {
|
|
@@ -189,72 +108,6 @@ function DecodeRLE(buf, L, rle_meta, len) {
|
|
|
189
108
|
}
|
|
190
109
|
return out;
|
|
191
110
|
}
|
|
192
|
-
//----------------------------------------------------------------------
|
|
193
|
-
// Bit packing
|
|
194
|
-
function EncodePack(src) {
|
|
195
|
-
// Step 1: identify number of distinct symbols
|
|
196
|
-
var F = new Array(256);
|
|
197
|
-
for (var i = 0; i < 256; i++)
|
|
198
|
-
F[i] = 0;
|
|
199
|
-
for (var i = 0; i < src.length; i++)
|
|
200
|
-
F[src[i]]++;
|
|
201
|
-
var P = new Array(256);
|
|
202
|
-
var nsym = 0;
|
|
203
|
-
for (var i = 0; i < 256; i++)
|
|
204
|
-
if (F[i] > 0)
|
|
205
|
-
P[i] = nsym++;
|
|
206
|
-
if (nsym > 16) {
|
|
207
|
-
//console.error("Too many symbols to pack:",nsym)
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
// Pack data
|
|
211
|
-
if (nsym <= 1) {
|
|
212
|
-
// Constant
|
|
213
|
-
var data = new Buffer.allocUnsafe(0);
|
|
214
|
-
}
|
|
215
|
-
else if (nsym <= 2) {
|
|
216
|
-
// 1 bit per value
|
|
217
|
-
var data = new Buffer.allocUnsafe(Math.ceil(src.length / 8));
|
|
218
|
-
var j = -1;
|
|
219
|
-
for (i = 0; i < src.length; i++) {
|
|
220
|
-
if (i % 8 == 0)
|
|
221
|
-
data[++j] = 0;
|
|
222
|
-
data[j] += P[src[i]] << i % 8;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
else if (nsym <= 4) {
|
|
226
|
-
// 2 bits per value
|
|
227
|
-
var data = new Buffer.allocUnsafe(Math.ceil(src.length / 4));
|
|
228
|
-
var j = -1;
|
|
229
|
-
for (i = 0; i < src.length; i++) {
|
|
230
|
-
if (i % 4 == 0)
|
|
231
|
-
data[++j] = 0;
|
|
232
|
-
data[j] += P[src[i]] << ((i % 4) * 2);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
// 4 bits per value
|
|
237
|
-
var data = new Buffer.allocUnsafe(Math.ceil(src.length / 2));
|
|
238
|
-
var j = -1;
|
|
239
|
-
for (i = 0; i < src.length; i++) {
|
|
240
|
-
if (i % 2 == 0)
|
|
241
|
-
data[++j] = 0;
|
|
242
|
-
data[j] += P[src[i]] << ((i % 2) * 4);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
// Produce pack meta-data
|
|
246
|
-
var meta = new IOStream('', 0, nsym + 5);
|
|
247
|
-
meta.WriteByte(nsym);
|
|
248
|
-
var j = 0;
|
|
249
|
-
for (var i = 0; i < 256; i++) {
|
|
250
|
-
if (F[i] > 0) {
|
|
251
|
-
F[i] = j++;
|
|
252
|
-
meta.WriteByte(i);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
meta.WriteUint7(data.length);
|
|
256
|
-
return [meta.buf.slice(0, meta.pos), data];
|
|
257
|
-
}
|
|
258
111
|
// Pack meta data is the number and value of distinct symbols plus
|
|
259
112
|
// the length of the packed byte stream.
|
|
260
113
|
function DecodePackMeta(src) {
|
|
@@ -268,7 +121,7 @@ function DecodePackMeta(src) {
|
|
|
268
121
|
// Extract bits from src producing output of length len.
|
|
269
122
|
// Nsym is number of distinct symbols used.
|
|
270
123
|
function DecodePack(data, P, nsym, len) {
|
|
271
|
-
var out = new
|
|
124
|
+
var out = new Uint8Array(len);
|
|
272
125
|
var j = 0;
|
|
273
126
|
// Constant value
|
|
274
127
|
if (nsym <= 1) {
|
|
@@ -304,50 +157,6 @@ function DecodePack(data, P, nsym, len) {
|
|
|
304
157
|
}
|
|
305
158
|
return out;
|
|
306
159
|
}
|
|
307
|
-
//----------------------------------------------------------------------
|
|
308
|
-
// 4 way interleaving.
|
|
309
|
-
// This is simply 4 rANS streams interleaved to form bytes 0,4,8...,
|
|
310
|
-
// 1,5,9..., 2,6,10... and 3,7,11...
|
|
311
|
-
//
|
|
312
|
-
// It works well when the distributions differ for each of the 4 bytes,
|
|
313
|
-
// for example when compressing a series of 32-bit integers.
|
|
314
|
-
//
|
|
315
|
-
// Maybe make this more general purpose of X* where we specify the stripe
|
|
316
|
-
// size instead of fixing it at 4?
|
|
317
|
-
function RansEncodeStripe(hdr, src, N) {
|
|
318
|
-
if (N == 0)
|
|
319
|
-
N = 4; // old default
|
|
320
|
-
// Split into multiple streams
|
|
321
|
-
var part = new Array(N);
|
|
322
|
-
var ulen = new Array(N);
|
|
323
|
-
for (var s = 0; s < N; s++) {
|
|
324
|
-
ulen[s] = Math.floor(src.length / N) + (src.length % N > s);
|
|
325
|
-
part[s] = new Array(ulen[s]);
|
|
326
|
-
}
|
|
327
|
-
for (var x = 0, i = 0; i < src.length; i += N, x++) {
|
|
328
|
-
for (var j = 0; j < N; j++)
|
|
329
|
-
if (x < part[j].length)
|
|
330
|
-
part[j][x] = src[i + j];
|
|
331
|
-
}
|
|
332
|
-
// Compress each part
|
|
333
|
-
var comp = new Array(N);
|
|
334
|
-
var total = 0;
|
|
335
|
-
for (var s = 0; s < N; s++) {
|
|
336
|
-
// Example: try O0 and O1 and choose best
|
|
337
|
-
var comp0 = encode(part[s], 0);
|
|
338
|
-
var comp1 = encode(part[s], 1);
|
|
339
|
-
comp[s] = comp1.length < comp0.length ? comp1 : comp0;
|
|
340
|
-
total += comp[s].length;
|
|
341
|
-
}
|
|
342
|
-
// Serialise
|
|
343
|
-
var out = new IOStream('', 0, total + 5 * N + 1);
|
|
344
|
-
out.WriteByte(N);
|
|
345
|
-
for (var s = 0; s < N; s++)
|
|
346
|
-
out.WriteUint7(comp[s].length);
|
|
347
|
-
for (var s = 0; s < N; s++)
|
|
348
|
-
out.WriteData(comp[s], comp[s].length);
|
|
349
|
-
return out.buf.slice(0, out.buf.pos);
|
|
350
|
-
}
|
|
351
160
|
function RansDecodeStripe(src, len) {
|
|
352
161
|
var N = src.ReadByte();
|
|
353
162
|
// Retrieve lengths
|
|
@@ -362,7 +171,7 @@ function RansDecodeStripe(src, len) {
|
|
|
362
171
|
T[j] = RansDecodeStream(src, ulen[j]);
|
|
363
172
|
}
|
|
364
173
|
// Transpose
|
|
365
|
-
var out = new
|
|
174
|
+
var out = new Uint8Array(len);
|
|
366
175
|
for (var j = 0; j < N; j++) {
|
|
367
176
|
for (var i = 0; i < ulen[j]; i++) {
|
|
368
177
|
out[i * N + j] = T[j][i];
|
|
@@ -416,44 +225,6 @@ function RansDecodeStream(stream, n_out) {
|
|
|
416
225
|
buf = DecodePack(buf, P, nsym, pack_len);
|
|
417
226
|
return buf;
|
|
418
227
|
}
|
|
419
|
-
function encode(src, format) {
|
|
420
|
-
var hdr = new IOStream('', 0, 10);
|
|
421
|
-
hdr.WriteByte(format);
|
|
422
|
-
var order = format & 1;
|
|
423
|
-
var x32 = format & 4;
|
|
424
|
-
var stripe = format & 8;
|
|
425
|
-
var nosz = format & 16;
|
|
426
|
-
var cat = format & 32;
|
|
427
|
-
var rle = format & 64;
|
|
428
|
-
var pack = format & 128;
|
|
429
|
-
var Nway = x32 ? 32 : 4; // interleaving amount
|
|
430
|
-
var N = format >> 8; // stripe size
|
|
431
|
-
if (!nosz)
|
|
432
|
-
hdr.WriteUint7(src.length);
|
|
433
|
-
if (stripe)
|
|
434
|
-
return Buffer.concat([
|
|
435
|
-
hdr.buf.slice(0, hdr.pos),
|
|
436
|
-
RansEncodeStripe(hdr, src, N),
|
|
437
|
-
]);
|
|
438
|
-
var pack_meta = new Buffer.alloc(0);
|
|
439
|
-
if (pack)
|
|
440
|
-
[pack_meta, src] = EncodePack(src);
|
|
441
|
-
var rle_meta = new Buffer.alloc(0);
|
|
442
|
-
if (rle)
|
|
443
|
-
[rle_meta, src] = EncodeRLE(src, Nway);
|
|
444
|
-
if (src.length < 4 && order == 1) {
|
|
445
|
-
// Protect against short order-1 data due to RLE/Pack
|
|
446
|
-
order = 0;
|
|
447
|
-
hdr.buf[0] &= ~1;
|
|
448
|
-
}
|
|
449
|
-
if (cat)
|
|
450
|
-
var comp = src;
|
|
451
|
-
else if (order == 0)
|
|
452
|
-
var comp = RansEncode0(src, Nway);
|
|
453
|
-
else
|
|
454
|
-
var comp = RansEncode1(src, Nway);
|
|
455
|
-
return Buffer.concat([hdr.buf.slice(0, hdr.pos), pack_meta, rle_meta, comp]);
|
|
456
|
-
}
|
|
457
228
|
//----------------------------------------------------------------------
|
|
458
229
|
// Order-0 decoder
|
|
459
230
|
function ReadAlphabet(src) {
|
|
@@ -509,7 +280,7 @@ function RansDecode0(src, nbytes, N) {
|
|
|
509
280
|
for (var i = 0; i < N; i++)
|
|
510
281
|
R[i] = src.ReadUint32();
|
|
511
282
|
// Main decode loop
|
|
512
|
-
var output = new
|
|
283
|
+
var output = new Uint8Array(nbytes);
|
|
513
284
|
for (var i = 0; i < nbytes; i++) {
|
|
514
285
|
var ix = i & (N - 1); // equiv to i%N as N is power of 2
|
|
515
286
|
var f = RansGetCumulativeFreq(R[ix], 12);
|
|
@@ -521,55 +292,6 @@ function RansDecode0(src, nbytes, N) {
|
|
|
521
292
|
// Main decode loop
|
|
522
293
|
return output;
|
|
523
294
|
}
|
|
524
|
-
//----------------------------------------------------------------------
|
|
525
|
-
// Order-0 encoder
|
|
526
|
-
function BuildFrequencies0(src, F) {
|
|
527
|
-
for (var i = 0; i < 256; i++)
|
|
528
|
-
F[i] = 0;
|
|
529
|
-
for (var i = 0; i < src.length; i++)
|
|
530
|
-
F[src[i]]++;
|
|
531
|
-
}
|
|
532
|
-
function NormaliseFrequencies0(F, bits) {
|
|
533
|
-
// Compute total
|
|
534
|
-
var tot = 0;
|
|
535
|
-
for (var i = 0; i < 256; i++)
|
|
536
|
-
tot += F[i];
|
|
537
|
-
// Scale total of frequencies to max
|
|
538
|
-
const max = 1 << bits;
|
|
539
|
-
var scale = max / tot;
|
|
540
|
-
do {
|
|
541
|
-
var max_val = 0;
|
|
542
|
-
var max_idx = 0;
|
|
543
|
-
var renorm = 0;
|
|
544
|
-
tot = 0;
|
|
545
|
-
for (var i = 0; i < 256; i++) {
|
|
546
|
-
if (F[i] == 0)
|
|
547
|
-
continue;
|
|
548
|
-
if (max_val < F[i]) {
|
|
549
|
-
max_val = F[i];
|
|
550
|
-
max_idx = i;
|
|
551
|
-
}
|
|
552
|
-
F[i] = Math.floor(F[i] * scale);
|
|
553
|
-
if (F[i] == 0)
|
|
554
|
-
F[i] = 1;
|
|
555
|
-
tot += F[i];
|
|
556
|
-
}
|
|
557
|
-
// Adjust new tot to ensure it matches.
|
|
558
|
-
if (tot < max) {
|
|
559
|
-
// Too low, boost the most common symbol
|
|
560
|
-
F[max_idx] += max - tot;
|
|
561
|
-
}
|
|
562
|
-
else if (tot - max < F[max_idx] / 2 && F[max_idx] > 2) {
|
|
563
|
-
// Too high, reduce the common symbol
|
|
564
|
-
F[max_idx] -= tot - max;
|
|
565
|
-
}
|
|
566
|
-
else if (tot != max) {
|
|
567
|
-
// Much too high, fudge scale and try again.
|
|
568
|
-
scale = max / tot;
|
|
569
|
-
renorm = 1;
|
|
570
|
-
}
|
|
571
|
-
} while (renorm);
|
|
572
|
-
}
|
|
573
295
|
function NormaliseFrequencies0_Shift(F, bits) {
|
|
574
296
|
// Compute total and number of bits to shift by
|
|
575
297
|
var tot = 0;
|
|
@@ -586,71 +308,6 @@ function NormaliseFrequencies0_Shift(F, bits) {
|
|
|
586
308
|
for (var i = 0; i < 256; i++)
|
|
587
309
|
F[i] <<= shift;
|
|
588
310
|
}
|
|
589
|
-
function WriteAlphabet(out, F) {
|
|
590
|
-
var rle = 0;
|
|
591
|
-
for (var i = 0; i < 256; i++) {
|
|
592
|
-
if (!F[i])
|
|
593
|
-
continue;
|
|
594
|
-
if (rle > 0)
|
|
595
|
-
rle--;
|
|
596
|
-
else {
|
|
597
|
-
out.WriteByte(i);
|
|
598
|
-
if (i > 0 && F[i - 1] > 0) {
|
|
599
|
-
// We've encoded two symbol frequencies in a row.
|
|
600
|
-
// How many more are there? Store that count so
|
|
601
|
-
// we can avoid writing consecutive symbols.
|
|
602
|
-
for (rle = i + 1; rle < 256 && F[rle]; rle++)
|
|
603
|
-
;
|
|
604
|
-
rle -= i + 1;
|
|
605
|
-
out.WriteByte(rle);
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
out.WriteByte(0);
|
|
610
|
-
}
|
|
611
|
-
function WriteFrequencies0(out, F) {
|
|
612
|
-
WriteAlphabet(out, F);
|
|
613
|
-
for (var i = 0; i < 256; i++) {
|
|
614
|
-
if (F[i])
|
|
615
|
-
out.WriteUint7(F[i]);
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
function RansEncode0(src, N) {
|
|
619
|
-
const nbytes = src.length;
|
|
620
|
-
var output = new IOStream('', 0, 257 * 3 + 9);
|
|
621
|
-
// Compute frequencies
|
|
622
|
-
var F = new Array(256);
|
|
623
|
-
BuildFrequencies0(src, F);
|
|
624
|
-
var bit_size = Math.ceil(Math.log2(nbytes));
|
|
625
|
-
if (bit_size > 12)
|
|
626
|
-
bit_size = 12;
|
|
627
|
-
NormaliseFrequencies0(F, bit_size);
|
|
628
|
-
WriteFrequencies0(output, F);
|
|
629
|
-
NormaliseFrequencies0(F, 12);
|
|
630
|
-
// Compute cumulative frequencies
|
|
631
|
-
var C = new Array(256);
|
|
632
|
-
C[0] = 0;
|
|
633
|
-
for (var i = 1; i < 256; i++)
|
|
634
|
-
C[i] = C[i - 1] + F[i - 1];
|
|
635
|
-
// Initialise rANS state
|
|
636
|
-
var R = new Array(N);
|
|
637
|
-
for (var i = 0; i < N; i++)
|
|
638
|
-
R[i] = RansEncInit();
|
|
639
|
-
// Allow expansion room if trying to compress random data.
|
|
640
|
-
var rans_out = new IOStream('', (nbytes * 1.05 + 100) >> 0, (nbytes * 1.05 + 100) >> 0);
|
|
641
|
-
// Main encode loop
|
|
642
|
-
for (var i = nbytes - 1; i >= 0; i--)
|
|
643
|
-
R[i % N] = RansEncPut(R[i % N], rans_out, C[src[i]], F[src[i]], 12);
|
|
644
|
-
for (var i = N - 1; i >= 0; i--)
|
|
645
|
-
RansEncFlush(R[i], rans_out);
|
|
646
|
-
// Stitch blocks together into final output buffer
|
|
647
|
-
//console.error("pos=",rans_out.pos, " len=",rans_out.length)
|
|
648
|
-
//console.error(rans_out.buf.slice(rans_out.pos, rans_out.length))
|
|
649
|
-
return Buffer.concat([
|
|
650
|
-
output.buf.slice(0, output.pos),
|
|
651
|
-
rans_out.buf.slice(rans_out.pos, rans_out.length),
|
|
652
|
-
], output.pos + rans_out.length - rans_out.pos);
|
|
653
|
-
}
|
|
654
311
|
//----------------------------------------------------------------------
|
|
655
312
|
// Order-1 decoder
|
|
656
313
|
// Decode a table of order-1 frequences,
|
|
@@ -717,7 +374,7 @@ function RansDecode1(src, nbytes, N) {
|
|
|
717
374
|
L[j] = 0;
|
|
718
375
|
}
|
|
719
376
|
// Main decode loop
|
|
720
|
-
var output = new
|
|
377
|
+
var output = new Uint8Array(nbytes);
|
|
721
378
|
var nbytesx = Math.floor(nbytes / N);
|
|
722
379
|
for (var i = 0; i < nbytesx; i++) {
|
|
723
380
|
for (var j = 0; j < N; j++) {
|
|
@@ -744,153 +401,5 @@ function RansDecode1(src, nbytes, N) {
|
|
|
744
401
|
}
|
|
745
402
|
return output;
|
|
746
403
|
}
|
|
747
|
-
|
|
748
|
-
// Order-1 encoder
|
|
749
|
-
function BuildFrequencies1(src, F, F0, N) {
|
|
750
|
-
for (var i = 0; i < 256; i++) {
|
|
751
|
-
F0[i] = 0;
|
|
752
|
-
for (var j = 0; j < 256; j++)
|
|
753
|
-
F[i][j] = 0;
|
|
754
|
-
}
|
|
755
|
-
var last = 0;
|
|
756
|
-
for (var i = 0; i < src.length; i++) {
|
|
757
|
-
F0[last]++;
|
|
758
|
-
F[last][src[i]]++;
|
|
759
|
-
last = src[i];
|
|
760
|
-
}
|
|
761
|
-
F0[last]++;
|
|
762
|
-
// Also accept we'll be starting at N points, not just byte 0
|
|
763
|
-
for (var i = 1; i < N; i++)
|
|
764
|
-
F[0][src[i * Math.floor(src.length / N)]]++;
|
|
765
|
-
F0[0] += N - 1;
|
|
766
|
-
}
|
|
767
|
-
function NormaliseFrequencies1(F, F0, shift) {
|
|
768
|
-
for (var i = 0; i < 256; i++) {
|
|
769
|
-
if (!F0[i])
|
|
770
|
-
continue;
|
|
771
|
-
var bit_size = Math.ceil(Math.log2(F0[i]));
|
|
772
|
-
if (bit_size > shift)
|
|
773
|
-
bit_size = shift;
|
|
774
|
-
NormaliseFrequencies0(F[i], bit_size);
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
function NormaliseFrequencies1_Shift(F, F0, shift) {
|
|
778
|
-
for (var i = 0; i < 256; i++)
|
|
779
|
-
if (F0[i])
|
|
780
|
-
NormaliseFrequencies0_Shift(F[i], shift);
|
|
781
|
-
}
|
|
782
|
-
function WriteFrequencies1(out, F, F0) {
|
|
783
|
-
WriteAlphabet(out, F0);
|
|
784
|
-
for (var i = 0; i < 256; i++) {
|
|
785
|
-
if (!F0[i])
|
|
786
|
-
continue;
|
|
787
|
-
var run = 0;
|
|
788
|
-
for (var j = 0; j < 256; j++) {
|
|
789
|
-
if (!F0[j])
|
|
790
|
-
continue;
|
|
791
|
-
if (run) {
|
|
792
|
-
run--;
|
|
793
|
-
}
|
|
794
|
-
else {
|
|
795
|
-
out.WriteUint7(F[i][j]);
|
|
796
|
-
if (!F[i][j]) {
|
|
797
|
-
// Count how many more zero-freqs we have
|
|
798
|
-
for (var k = j + 1; k < 256; k++) {
|
|
799
|
-
if (!F0[k])
|
|
800
|
-
continue;
|
|
801
|
-
if (F[i][k] == 0)
|
|
802
|
-
run++;
|
|
803
|
-
else
|
|
804
|
-
break;
|
|
805
|
-
}
|
|
806
|
-
out.WriteByte(run);
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
function RansEncode1(src, N) {
|
|
813
|
-
const nbytes = src.length;
|
|
814
|
-
var output = new IOStream('', 0, 257 * 257 * 3 + 9);
|
|
815
|
-
// Compute frequencies
|
|
816
|
-
var F0 = new Array(256);
|
|
817
|
-
var F = new Array(256);
|
|
818
|
-
var C = new Array(256);
|
|
819
|
-
for (var i = 0; i < 256; i++) {
|
|
820
|
-
F[i] = new Array(256);
|
|
821
|
-
C[i] = new Array(256);
|
|
822
|
-
}
|
|
823
|
-
// Frequency precision
|
|
824
|
-
var shift = 12;
|
|
825
|
-
BuildFrequencies1(src, F, F0, N);
|
|
826
|
-
NormaliseFrequencies1(F, F0, shift);
|
|
827
|
-
// Store frequencies, possibly compressed
|
|
828
|
-
var freq = new IOStream('', 0, 257 * 257 * 3 + 9);
|
|
829
|
-
WriteFrequencies1(freq, F, F0);
|
|
830
|
-
var cfreq = RansEncode0(freq.buf.slice(0, freq.pos), 4);
|
|
831
|
-
if (cfreq.length < freq.pos) {
|
|
832
|
-
output.WriteByte(1 | (shift << 4));
|
|
833
|
-
output.WriteUint7(freq.pos);
|
|
834
|
-
output.WriteUint7(cfreq.length);
|
|
835
|
-
output.WriteData(cfreq, cfreq.length);
|
|
836
|
-
}
|
|
837
|
-
else {
|
|
838
|
-
output.WriteByte(0 | (shift << 4));
|
|
839
|
-
output.WriteData(freq.buf, freq.pos);
|
|
840
|
-
}
|
|
841
|
-
// Normalise and compute cumulative frequencies
|
|
842
|
-
NormaliseFrequencies1_Shift(F, F0, shift);
|
|
843
|
-
for (var i = 0; i < 256; i++) {
|
|
844
|
-
if (!F0[i])
|
|
845
|
-
continue;
|
|
846
|
-
C[i][0] = 0;
|
|
847
|
-
for (var j = 1; j < 256; j++)
|
|
848
|
-
C[i][j] = C[i][j - 1] + F[i][j - 1];
|
|
849
|
-
}
|
|
850
|
-
// Initialise rANS state
|
|
851
|
-
var R = new Array(N);
|
|
852
|
-
var L = new Array(N);
|
|
853
|
-
for (var j = 0; j < N; j++) {
|
|
854
|
-
R[j] = RansEncInit();
|
|
855
|
-
L[j] = 0;
|
|
856
|
-
}
|
|
857
|
-
var rans_out = new IOStream('', (nbytes * 1.05 + 100) >> 0, (nbytes * 1.05 + 100) >> 0);
|
|
858
|
-
// We have N rans codecs running in parallel on its own 1/Nth of buffer
|
|
859
|
-
var nbytesx = Math.floor(nbytes / N);
|
|
860
|
-
var idx = new Array(N);
|
|
861
|
-
var last = new Array(N);
|
|
862
|
-
for (var j = 0; j < N; j++) {
|
|
863
|
-
idx[j] = (j + 1) * nbytesx - 2;
|
|
864
|
-
last[j] = src[idx[j] + 1];
|
|
865
|
-
}
|
|
866
|
-
// Deal with the remainder if not a multiple of N
|
|
867
|
-
last[N - 1] = src[nbytes - 1];
|
|
868
|
-
for (var i = nbytes - 2; i > N * nbytesx - 2; i--) {
|
|
869
|
-
R[N - 1] = RansEncPut(R[N - 1], rans_out, C[src[i]][last[N - 1]], F[src[i]][last[N - 1]], shift);
|
|
870
|
-
last[N - 1] = src[i];
|
|
871
|
-
}
|
|
872
|
-
// Main encode loop
|
|
873
|
-
var s = new Array(N);
|
|
874
|
-
while (idx[0] >= 0) {
|
|
875
|
-
// Separate loop as a speed optimisation
|
|
876
|
-
for (var j = N - 1; j >= 0; j--)
|
|
877
|
-
s[j] = src[idx[j]];
|
|
878
|
-
for (var j = N - 1; j >= 0; j--) {
|
|
879
|
-
R[j] = RansEncPut(R[j], rans_out, C[s[j]][last[j]], F[s[j]][last[j]], shift);
|
|
880
|
-
last[j] = s[j];
|
|
881
|
-
idx[j]--;
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
|
-
for (var j = N - 1; j >= 0; j--) {
|
|
885
|
-
R[j] = RansEncPut(R[j], rans_out, C[0][last[j]], F[0][last[j]], shift);
|
|
886
|
-
}
|
|
887
|
-
for (var i = N - 1; i >= 0; i--)
|
|
888
|
-
RansEncFlush(R[i], rans_out);
|
|
889
|
-
// Stitch blocks together into final output buffer
|
|
890
|
-
return Buffer.concat([
|
|
891
|
-
output.buf.slice(0, output.pos),
|
|
892
|
-
rans_out.buf.slice(rans_out.pos, rans_out.length),
|
|
893
|
-
], output.pos + rans_out.length - rans_out.pos);
|
|
894
|
-
}
|
|
895
|
-
module.exports = { decode, encode };
|
|
404
|
+
module.exports = { decode };
|
|
896
405
|
//# sourceMappingURL=rans4x16.js.map
|